@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.
- package/.localdev.e2e.env +40 -0
- package/.localdev.env +41 -0
- package/.standalone.env +5 -0
- package/LICENSE +202 -0
- package/NOTICE +1 -0
- package/README.md +19 -0
- package/docker/compose.yml +33 -0
- package/e2e/README.md +12 -0
- package/e2e/org-registration-and-issuing.e2e.test.js +624 -0
- package/jest.config.js +20 -0
- package/migrate-mongo.config.js +36 -0
- package/migrations/20210317133137-add-index-to-offers-repo.js +57 -0
- package/migrations/20210416145639-add-index-to-revocation-list.js +27 -0
- package/migrations/20210719120225-add_unique_did_index_to_tenant.js +45 -0
- package/migrations/20230524053029-add-vendorUserIdMappings-index.js +32 -0
- package/migrations/20230616111907-add-configuration-type-index.js +32 -0
- package/package.json +108 -0
- package/src/assets/public/favicon.ico +0 -0
- package/src/assets/public/logo192.png +0 -0
- package/src/assets/public/logo512.png +0 -0
- package/src/assets/public/manifest.json +28 -0
- package/src/assets/templates/app-redirect.hbs +16 -0
- package/src/config/config.js +44 -0
- package/src/config/core-config.js +143 -0
- package/src/config/holder-config.js +104 -0
- package/src/config/index.js +22 -0
- package/src/config/operator-config.js +64 -0
- package/src/controllers/autoload-holder-api-controllers.js +30 -0
- package/src/controllers/autoload-operator-api-controllers.js +31 -0
- package/src/controllers/autoload-root-api-controller.js +30 -0
- package/src/controllers/autoload-saasoperator-api-controllers.js +31 -0
- package/src/controllers/holder/autohooks.js +55 -0
- package/src/controllers/holder/get-exchange-progress/autohooks.js +27 -0
- package/src/controllers/holder/get-exchange-progress/controller.js +50 -0
- package/src/controllers/holder/inspect/autohooks.js +35 -0
- package/src/controllers/holder/inspect/get-presentation-request/controller.js +100 -0
- package/src/controllers/holder/inspect/schemas/holder-disclosure.schema.json +73 -0
- package/src/controllers/holder/inspect/schemas/index.js +33 -0
- package/src/controllers/holder/inspect/schemas/presentation-definition.v1.schema.json +461 -0
- package/src/controllers/holder/inspect/schemas/presentation-request.schema.json +279 -0
- package/src/controllers/holder/inspect/schemas/presentation-submission.schema.json +41 -0
- package/src/controllers/holder/inspect/schemas/siop-presentation-submission.schema.json +74 -0
- package/src/controllers/holder/inspect/schemas/velocity-presentation-submission.response.200.schema.json +36 -0
- package/src/controllers/holder/inspect/schemas/velocity-presentation-submission.schema.json +34 -0
- package/src/controllers/holder/inspect/submit-presentation/controller.js +89 -0
- package/src/controllers/holder/issue/autohooks.js +23 -0
- package/src/controllers/holder/issue/get-credential-manifest/controller.js +193 -0
- package/src/controllers/holder/issue/offers/autohooks.js +35 -0
- package/src/controllers/holder/issue/offers/controller.js +164 -0
- package/src/controllers/holder/issue/offers/credential-offers/controller.js +460 -0
- package/src/controllers/holder/issue/submit-identification/autohooks.js +37 -0
- package/src/controllers/holder/issue/submit-identification/controller.js +63 -0
- package/src/controllers/holder/oauth/autohooks.js +19 -0
- package/src/controllers/holder/oauth/controller.js +140 -0
- package/src/controllers/index.js +22 -0
- package/src/controllers/operator/tenants/_tenantId/autohooks.js +40 -0
- package/src/controllers/operator/tenants/_tenantId/check-credentials/autohooks.js +24 -0
- package/src/controllers/operator/tenants/_tenantId/check-credentials/controller-v0.8.js +200 -0
- package/src/controllers/operator/tenants/_tenantId/check-credentials/schemas/index.js +19 -0
- package/src/controllers/operator/tenants/_tenantId/check-credentials/schemas/vendor-credential.schema.json +244 -0
- package/src/controllers/operator/tenants/_tenantId/controller-v0.8.js +221 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/autohooks.js +30 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/controller-v0.8.js +271 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/autohooks.js +45 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/controller-v0.8.js +199 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/add-feed.schema.js +14 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/feed.schema.json +27 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/index.js +25 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/modify-feed-update-body.schema.js +18 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/_id/feeds/schemas/modify-feed.schema.json +19 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/autohooks.js +34 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/controller-v0.8.js +100 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/agent-disclosure-presentation-definition.schema.json +404 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/agent-disclosure.schema.js +24 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/index.js +29 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/new-agent-disclosure.schema.json +166 -0
- package/src/controllers/operator/tenants/_tenantId/disclosures/schemas/update-agent-disclosure.schema.js +20 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/_exchangeId/autohooks.js +30 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/_exchangeId/controller-v0.8.js +73 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/autohooks.js +19 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/controller-v0.8.js +150 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/schemas/get-exchange.response.body.json +147 -0
- package/src/controllers/operator/tenants/_tenantId/exchanges/schemas/index.js +21 -0
- package/src/controllers/operator/tenants/_tenantId/issued-credentials/autohooks.js +27 -0
- package/src/controllers/operator/tenants/_tenantId/issued-credentials/controller-v0.8.js +303 -0
- package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/index.js +23 -0
- package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/issued-credential.schema.json +115 -0
- package/src/controllers/operator/tenants/_tenantId/issued-credentials/schemas/revoke-credentials.schema.json +18 -0
- package/src/controllers/operator/tenants/_tenantId/keys/controller-v0.8.js +168 -0
- package/src/controllers/operator/tenants/_tenantId/offer-data/controller-v0.8.js +78 -0
- package/src/controllers/operator/tenants/_tenantId/offers/autohooks.js +34 -0
- package/src/controllers/operator/tenants/_tenantId/offers/controller-v0.8.js +253 -0
- package/src/controllers/operator/tenants/_tenantId/offers/schemas/index.js +23 -0
- package/src/controllers/operator/tenants/_tenantId/offers/schemas/new-vendor-offer.schema.js +47 -0
- package/src/controllers/operator/tenants/_tenantId/offers/schemas/vendor-offer.schema.json +56 -0
- package/src/controllers/operator/tenants/_tenantId/users/autohooks.js +24 -0
- package/src/controllers/operator/tenants/_tenantId/users/controller-v0.8.js +92 -0
- package/src/controllers/operator/tenants/_tenantId/users/schemas/index.js +23 -0
- package/src/controllers/operator/tenants/_tenantId/users/schemas/new-user.schema.json +13 -0
- package/src/controllers/operator/tenants/_tenantId/users/schemas/user.schema.json +16 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/autohooks.js +34 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/controller-v0.8.js +110 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/Credential.schema.js +18 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialOptions.schema.json +42 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialRequest.schema.json +13 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/IssueCredentialResponse.schema.json +19 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/LinkedDataProof.schema.json +43 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/VerifiableCredential.schema.js +16 -0
- package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/index.js +31 -0
- package/src/controllers/operator/tenants/autohooks.js +65 -0
- package/src/controllers/operator/tenants/controller-v0.8.js +167 -0
- package/src/controllers/operator/tenants/schemas/index.js +41 -0
- package/src/controllers/operator/tenants/schemas/modify-secret.schema.json +11 -0
- package/src/controllers/operator/tenants/schemas/modify-tenant-v0.8.schema.json +44 -0
- package/src/controllers/operator/tenants/schemas/new-tenant-v0.8.schema.json +19 -0
- package/src/controllers/operator/tenants/schemas/new-tenant.response.200.schema.json +7 -0
- package/src/controllers/operator/tenants/schemas/secret-key-metadata.schema.json +31 -0
- package/src/controllers/operator/tenants/schemas/secret-key.schema.json +29 -0
- package/src/controllers/operator/tenants/schemas/secret-kid.schema.json +13 -0
- package/src/controllers/operator/tenants/schemas/secret-new-tenant-v0.8.schema.json +28 -0
- package/src/controllers/operator/tenants/schemas/secret-tenant-key-v0.8.schema.json +13 -0
- package/src/controllers/operator/tenants/schemas/tenant-key-v0.8.schema.json +14 -0
- package/src/controllers/operator/tenants/schemas/tenant-v0.8.schema.json +62 -0
- package/src/controllers/root/autohooks.js +23 -0
- package/src/controllers/root/controller.js +173 -0
- package/src/controllers/saasoperator/groups/_id/autohooks.js +9 -0
- package/src/controllers/saasoperator/groups/_id/controller.js +121 -0
- package/src/controllers/saasoperator/groups/autohooks.js +19 -0
- package/src/controllers/saasoperator/groups/controller.js +65 -0
- package/src/controllers/saasoperator/groups/schemas/group.schema.js +17 -0
- package/src/controllers/saasoperator/groups/schemas/index.js +4 -0
- package/src/controllers/saasoperator/groups/schemas/new-group.schema.js +13 -0
- package/src/entities/common/domains/get-json-at-path.js +28 -0
- package/src/entities/common/domains/index.js +17 -0
- package/src/entities/common/index.js +17 -0
- package/src/entities/credentials/domains/credential-format.js +22 -0
- package/src/entities/credentials/domains/index.js +19 -0
- package/src/entities/credentials/index.js +17 -0
- package/src/entities/deep-links/domains/extract-did.js +11 -0
- package/src/entities/deep-links/domains/index.js +20 -0
- package/src/entities/deep-links/domains/velocity-protocol-uri-to-http-uri.js +32 -0
- package/src/entities/deep-links/index.js +19 -0
- package/src/entities/disclosures/domains/assert-disclosure-active.js +21 -0
- package/src/entities/disclosures/domains/compute-disclosure-configuration-type.js +29 -0
- package/src/entities/disclosures/domains/constants.js +61 -0
- package/src/entities/disclosures/domains/errors.js +34 -0
- package/src/entities/disclosures/domains/get-disclosure-configuration-type.js +60 -0
- package/src/entities/disclosures/domains/index.js +32 -0
- package/src/entities/disclosures/domains/is-issuing-disclosure.js +23 -0
- package/src/entities/disclosures/domains/parse-body-to-disclosure.js +17 -0
- package/src/entities/disclosures/domains/validate-by-identification-method.js +69 -0
- package/src/entities/disclosures/domains/validate-commercial-entity.js +26 -0
- package/src/entities/disclosures/domains/validate-disclosure-by-configuration-type.js +47 -0
- package/src/entities/disclosures/domains/validate-disclosure-default-issuing.js +77 -0
- package/src/entities/disclosures/domains/validate-disclosure.js +37 -0
- package/src/entities/disclosures/domains/validate-feed.js +16 -0
- package/src/entities/disclosures/domains/validate-presentation-definition.js +54 -0
- package/src/entities/disclosures/domains/validate-vendor-endpoint.js +22 -0
- package/src/entities/disclosures/domains/validate-vendor-webhook.js +18 -0
- package/src/entities/disclosures/factories/disclosure-factory.js +94 -0
- package/src/entities/disclosures/factories/index.js +19 -0
- package/src/entities/disclosures/index.js +22 -0
- package/src/entities/disclosures/orchestrators/get-disclosure.js +18 -0
- package/src/entities/disclosures/orchestrators/index.js +20 -0
- package/src/entities/disclosures/orchestrators/update-disclosure-configuration-type.js +32 -0
- package/src/entities/disclosures/repos/index.js +20 -0
- package/src/entities/disclosures/repos/repo.js +118 -0
- package/src/entities/disclosures/repos/set-configuration-type.js +33 -0
- package/src/entities/exchanges/adapters/index.js +17 -0
- package/src/entities/exchanges/adapters/sign-exchange-response.js +45 -0
- package/src/entities/exchanges/domains/build-exchange-progress.js +56 -0
- package/src/entities/exchanges/domains/constants.js +24 -0
- package/src/entities/exchanges/domains/ensure-exchange-state-valid.js +35 -0
- package/src/entities/exchanges/domains/errors.js +33 -0
- package/src/entities/exchanges/domains/index.js +25 -0
- package/src/entities/exchanges/domains/states.js +43 -0
- package/src/entities/exchanges/domains/types.js +31 -0
- package/src/entities/exchanges/factories/disclosure-exchange-factory.js +46 -0
- package/src/entities/exchanges/factories/index.js +20 -0
- package/src/entities/exchanges/factories/offer-exchange-factory.js +48 -0
- package/src/entities/exchanges/index.js +23 -0
- package/src/entities/exchanges/orchestrators/build-exchange-request-deep-link.js +50 -0
- package/src/entities/exchanges/orchestrators/index.js +19 -0
- package/src/entities/exchanges/repos/exchange-repo-projections.js +45 -0
- package/src/entities/exchanges/repos/exchange-state-repo-extension.js +76 -0
- package/src/entities/exchanges/repos/index.js +20 -0
- package/src/entities/exchanges/repos/repo.js +44 -0
- package/src/entities/feeds/factories/feed-factory.js +47 -0
- package/src/entities/feeds/factories/index.js +19 -0
- package/src/entities/feeds/index.js +20 -0
- package/src/entities/feeds/repos/index.js +19 -0
- package/src/entities/feeds/repos/repo.js +95 -0
- package/src/entities/groups/domains/format-group.js +11 -0
- package/src/entities/groups/domains/index.js +3 -0
- package/src/entities/groups/factories/group-factory.js +40 -0
- package/src/entities/groups/factories/index.js +19 -0
- package/src/entities/groups/index.js +22 -0
- package/src/entities/groups/orchestrators/find-group-or-error.js +16 -0
- package/src/entities/groups/orchestrators/index.js +6 -0
- package/src/entities/groups/orchestrators/validate-did.js +24 -0
- package/src/entities/groups/orchestrators/validate-group-by-user.js +16 -0
- package/src/entities/groups/orchestrators/validate-group.js +39 -0
- package/src/entities/groups/repos/delete-tenant-extension.js +13 -0
- package/src/entities/groups/repos/index.js +19 -0
- package/src/entities/groups/repos/repo.js +38 -0
- package/src/entities/groups/repos/update-or-error-extension.js +46 -0
- package/src/entities/index.js +37 -0
- package/src/entities/keys/domains/constants.js +37 -0
- package/src/entities/keys/domains/index.js +21 -0
- package/src/entities/keys/domains/is-matching-private-key-kid.js +41 -0
- package/src/entities/keys/domains/validate-key.js +62 -0
- package/src/entities/keys/factories/index.js +19 -0
- package/src/entities/keys/factories/key-factory.js +56 -0
- package/src/entities/keys/index.js +22 -0
- package/src/entities/keys/orchestrators/index.js +3 -0
- package/src/entities/keys/orchestrators/validate-did-doc-keys.js +69 -0
- package/src/entities/metadata-list-allocations/index.js +19 -0
- package/src/entities/metadata-list-allocations/repos/index.js +19 -0
- package/src/entities/metadata-list-allocations/repos/repo.js +40 -0
- package/src/entities/notifications/domains/index.js +19 -0
- package/src/entities/notifications/domains/notification-types.js +25 -0
- package/src/entities/notifications/index.js +19 -0
- package/src/entities/offers/domains/build-clean-pii-filter.js +35 -0
- package/src/entities/offers/domains/build-deeplink-url.js +120 -0
- package/src/entities/offers/domains/build-offer.js +88 -0
- package/src/entities/offers/domains/build-qr-code-url.js +37 -0
- package/src/entities/offers/domains/constants.js +32 -0
- package/src/entities/offers/domains/filter-object-ids.js +34 -0
- package/src/entities/offers/domains/generate-issuing-challenge.js +26 -0
- package/src/entities/offers/domains/generate-link-code.js +35 -0
- package/src/entities/offers/domains/index.js +31 -0
- package/src/entities/offers/domains/post-validation-offers-handler.js +31 -0
- package/src/entities/offers/domains/prepare-linked-credentials-for-holder.js +36 -0
- package/src/entities/offers/domains/resolve-subject.js +142 -0
- package/src/entities/offers/domains/validate-offer-commercial-entity.js +24 -0
- package/src/entities/offers/domains/validate-offer.js +90 -0
- package/src/entities/offers/factories/index.js +19 -0
- package/src/entities/offers/factories/offer-factory.js +119 -0
- package/src/entities/offers/index.js +22 -0
- package/src/entities/offers/orchestrators/create-verifiable-credentials.js +131 -0
- package/src/entities/offers/orchestrators/finalize-exchange.js +44 -0
- package/src/entities/offers/orchestrators/index.js +23 -0
- package/src/entities/offers/orchestrators/load-credential-refs.js +57 -0
- package/src/entities/offers/orchestrators/load-credential-types-map.js +44 -0
- package/src/entities/offers/orchestrators/prepare-offers.js +35 -0
- package/src/entities/offers/orchestrators/trigger-issued-credentials-webhook.js +63 -0
- package/src/entities/offers/repos/clean-pii-extension.js +85 -0
- package/src/entities/offers/repos/index.js +20 -0
- package/src/entities/offers/repos/issued-credential-projection.js +44 -0
- package/src/entities/offers/repos/repo.js +177 -0
- package/src/entities/presentations/domains/build-identity-doc.js +120 -0
- package/src/entities/presentations/domains/build-request-response-schema.js +46 -0
- package/src/entities/presentations/domains/build-vendor-data.js +31 -0
- package/src/entities/presentations/domains/check-payment-requirement.js +30 -0
- package/src/entities/presentations/domains/errors.js +28 -0
- package/src/entities/presentations/domains/extract-fields-from-id-credential.js +35 -0
- package/src/entities/presentations/domains/index.js +26 -0
- package/src/entities/presentations/domains/merge-credential-check-results.js +24 -0
- package/src/entities/presentations/domains/validate-presentation.js +128 -0
- package/src/entities/presentations/index.js +20 -0
- package/src/entities/presentations/orchestrators/create-presentation-request.js +148 -0
- package/src/entities/presentations/orchestrators/deduplicate-disclosure-exchange.js +52 -0
- package/src/entities/presentations/orchestrators/handle-presentation-submission.js +47 -0
- package/src/entities/presentations/orchestrators/index.js +20 -0
- package/src/entities/presentations/orchestrators/match-identity-on-exchange.js +114 -0
- package/src/entities/presentations/orchestrators/share-identification-credentials.js +110 -0
- package/src/entities/presentations/orchestrators/share-presentation.js +234 -0
- package/src/entities/push-delegate/get-push-delegate.js +37 -0
- package/src/entities/push-delegate/index.js +17 -0
- package/src/entities/redirect/index.js +3 -0
- package/src/entities/redirect/orchestrators/index.js +3 -0
- package/src/entities/redirect/orchestrators/load-org-info.js +40 -0
- package/src/entities/revocation-list-allocations/index.js +19 -0
- package/src/entities/revocation-list-allocations/repos/index.js +19 -0
- package/src/entities/revocation-list-allocations/repos/repo.js +40 -0
- package/src/entities/schemas/index.js +19 -0
- package/src/entities/schemas/orchestrators/index.js +19 -0
- package/src/entities/schemas/orchestrators/load-schema-validation.js +73 -0
- package/src/entities/tenants/domains/build-service-ids.js +27 -0
- package/src/entities/tenants/domains/extract-service.js +27 -0
- package/src/entities/tenants/domains/index.js +21 -0
- package/src/entities/tenants/domains/validate-service-ids.js +35 -0
- package/src/entities/tenants/factories/index.js +19 -0
- package/src/entities/tenants/factories/tenant-factory.js +37 -0
- package/src/entities/tenants/index.js +22 -0
- package/src/entities/tenants/orchestrators/add-primary-address-to-tenant.js +47 -0
- package/src/entities/tenants/orchestrators/create-tenant.js +91 -0
- package/src/entities/tenants/orchestrators/index.js +22 -0
- package/src/entities/tenants/orchestrators/refresh-tenant-dids.js +146 -0
- package/src/entities/tenants/orchestrators/set-tenant-default-issuing-disclosure.js +31 -0
- package/src/entities/tenants/repos/index.js +20 -0
- package/src/entities/tenants/repos/insert-tenant-extension.js +33 -0
- package/src/entities/tenants/repos/repo.js +52 -0
- package/src/entities/tenants/repos/tenant-default-projection.js +33 -0
- package/src/entities/tokens/adapters/access-token.js +49 -0
- package/src/entities/tokens/adapters/index.js +19 -0
- package/src/entities/tokens/index.js +19 -0
- package/src/entities/users/factories/index.js +19 -0
- package/src/entities/users/factories/user-factory.js +36 -0
- package/src/entities/users/index.js +20 -0
- package/src/entities/users/repos/add-anonymous-user-repo-extension.js +23 -0
- package/src/entities/users/repos/find-or-insert-vendor-user-repo-extension.js +30 -0
- package/src/entities/users/repos/index.js +19 -0
- package/src/entities/users/repos/repo.js +50 -0
- package/src/fetchers/index.js +20 -0
- package/src/fetchers/operator/identify-fetcher.js +36 -0
- package/src/fetchers/operator/index.js +21 -0
- package/src/fetchers/operator/inspection-fetcher.js +35 -0
- package/src/fetchers/operator/issuing-fetcher.js +50 -0
- package/src/fetchers/operator/webhook-auth-header.js +45 -0
- package/src/fetchers/push-gateway/generate-push-gateway-token.js +40 -0
- package/src/fetchers/push-gateway/index.js +19 -0
- package/src/fetchers/push-gateway/push-fetcher.js +39 -0
- package/src/index.js +19 -0
- package/src/init-holder-server.js +108 -0
- package/src/init-operator-server.js +101 -0
- package/src/init-server.js +120 -0
- package/src/main-holder.js +18 -0
- package/src/main-operator.js +19 -0
- package/src/main.js +18 -0
- package/src/plugins/autoload-repos.js +28 -0
- package/src/plugins/disclosure-loader-plugin.js +56 -0
- package/src/plugins/ensure-disclosure-active-plugin.js +30 -0
- package/src/plugins/ensure-disclosure-configuration-type-plugin.js +29 -0
- package/src/plugins/ensure-tenant-default-issuing-disclosure-id-plugin.js +60 -0
- package/src/plugins/ensure-tenant-primary-address-plugin.js +44 -0
- package/src/plugins/exchange-error-handler-plugin.js +51 -0
- package/src/plugins/exchange-loader-plugin.js +50 -0
- package/src/plugins/group-loader-plugin.js +51 -0
- package/src/plugins/index.js +32 -0
- package/src/plugins/kms-plugin.js +57 -0
- package/src/plugins/tenant-loader-plugin.js +91 -0
- package/src/plugins/validate-cao-plugin.js +81 -0
- package/src/plugins/vendor-routes-auth-plugin.js +24 -0
- package/src/plugins/verify-access-token-plugin.js +88 -0
- package/src/standalone.js +24 -0
- package/src/start-app-server.js +38 -0
- package/test/combined/app-redirect.test.js +199 -0
- package/test/combined/helpers/credentialagent-build-fastify.js +29 -0
- package/test/combined/helpers/index.js +22 -0
- package/test/combined/helpers/nock-registrar-app-schema-name.js +50 -0
- package/test/combined/helpers/nock-registrar-get-organization-diddoc.js +26 -0
- package/test/combined/helpers/nock-registrar-get-organization-verified-profile.js +33 -0
- package/test/combined/manifest.json.test.js +55 -0
- package/test/combined/root-controller.test.js +42 -0
- package/test/combined/schemas/education-degree.schema.json +166 -0
- package/test/combined/schemas/employment-current-v1.1.schema.json +253 -0
- package/test/combined/schemas/open-badge-credential.schema.json +1285 -0
- package/test/combined/schemas/past-employment-position-with-uri-id.schema.js +22 -0
- package/test/combined/schemas/past-employment-position.schema.json +148 -0
- package/test/combined/schemas/will-always-validate.json +10 -0
- package/test/combined/validate-cao-plugin.test.js +155 -0
- package/test/get-push-delegate.test.js +54 -0
- package/test/helpers/jwt-vc-expectation.js +109 -0
- package/test/holder/build-request-response-schema.test.js +55 -0
- package/test/holder/credential-manifest-controller.test.js +3192 -0
- package/test/holder/e2e-issuing-controller.test.js +425 -0
- package/test/holder/get-exchange-progress-controller.test.js +521 -0
- package/test/holder/get-presentation-request.test.js +906 -0
- package/test/holder/helpers/credential-type-metadata.js +98 -0
- package/test/holder/helpers/credentialagent-holder-build-fastify.js +32 -0
- package/test/holder/helpers/generate-presentation.js +441 -0
- package/test/holder/helpers/generate-test-access-token.js +54 -0
- package/test/holder/helpers/jwt-access-token-expectation.js +32 -0
- package/test/holder/helpers/jwt-vc-expectation.js +115 -0
- package/test/holder/issuing-controller.test.js +7076 -0
- package/test/holder/oauth-token-controller.test.js +412 -0
- package/test/holder/presentation-submission.test.js +2365 -0
- package/test/holder/submit-identification.test.js +4815 -0
- package/test/operator/check-credentials-controller-v0.8.test.js +832 -0
- package/test/operator/credentials-revoke.test.js +536 -0
- package/test/operator/disclosures-controller-v0.8.test.js +4157 -0
- package/test/operator/exchanges-controller-v0.8.test.js +414 -0
- package/test/operator/exchanges-id-controller-v0.8.test.js +162 -0
- package/test/operator/feeds-controller-v0.8.test.js +659 -0
- package/test/operator/generate-push-gateway-token.test.js +116 -0
- package/test/operator/groups-controller.test.js +145 -0
- package/test/operator/groups-id-controller.test.js +287 -0
- package/test/operator/helpers/create-test-org-doc.js +60 -0
- package/test/operator/helpers/credentialagent-operator-build-fastify.js +32 -0
- package/test/operator/helpers/find-kms-key.js +31 -0
- package/test/operator/helpers/generate-primary-and-add-operator-to-primary.js +63 -0
- package/test/operator/helpers/init-agent-kms.js +22 -0
- package/test/operator/issued-credentials-controller-v0.8.test.js +398 -0
- package/test/operator/keys-controller-v0.8.test.js +1130 -0
- package/test/operator/offer-data-controller-v0.8.test.js +253 -0
- package/test/operator/offers-controller-v0.8.test.js +3026 -0
- package/test/operator/set-configuration-type-modifier.test.js +75 -0
- package/test/operator/swagger.test.js +37 -0
- package/test/operator/tenant-controller-v0.8.test.js +730 -0
- package/test/operator/tenant-loader-plugin.test.js +96 -0
- package/test/operator/tenants-controller-v0.8.test.js +2093 -0
- package/test/operator/users-controller-v0.8.test.js +137 -0
- package/test/operator/vc-api-credentials.test.js +963 -0
- package/verification.env +28 -0
|
@@ -0,0 +1,110 @@
|
|
|
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 { first } = require('lodash/fp');
|
|
18
|
+
|
|
19
|
+
const newError = require('http-errors');
|
|
20
|
+
const { nanoid } = require('nanoid');
|
|
21
|
+
const {
|
|
22
|
+
CredentialFormat,
|
|
23
|
+
ExchangeProtocols,
|
|
24
|
+
ExchangeTypes,
|
|
25
|
+
ExchangeStates,
|
|
26
|
+
createVerifiableCredentials,
|
|
27
|
+
finalizeExchange,
|
|
28
|
+
initValidateOffer,
|
|
29
|
+
prepareOffers,
|
|
30
|
+
} = require('../../../../../../entities');
|
|
31
|
+
|
|
32
|
+
const credentialsController = async (fastify) => {
|
|
33
|
+
const validateOffer = initValidateOffer(fastify);
|
|
34
|
+
if (fastify.config.vcApiEnabled !== true) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
fastify.post(
|
|
39
|
+
'/issue',
|
|
40
|
+
{
|
|
41
|
+
schema: fastify.autoSchema({
|
|
42
|
+
body: {
|
|
43
|
+
$ref: 'https://velocitynetwork.foundation/vc-api/IssueCredentialRequest.schema.json#',
|
|
44
|
+
},
|
|
45
|
+
response: {
|
|
46
|
+
201: {
|
|
47
|
+
$ref: 'https://velocitynetwork.foundation/vc-api/IssueCredentialResponse.schema.json#',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
},
|
|
52
|
+
async (req, reply) => {
|
|
53
|
+
const {
|
|
54
|
+
body: { credential: offer, options },
|
|
55
|
+
repos,
|
|
56
|
+
} = req;
|
|
57
|
+
|
|
58
|
+
// temporary validation until JSON-LD is supported natively
|
|
59
|
+
if (options?.format !== CredentialFormat.JWT_VC) {
|
|
60
|
+
throw newError.BadRequest(
|
|
61
|
+
`options.format must be ${CredentialFormat.JWT_VC}`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const exchange = await repos.exchanges.insertWithInitialState({
|
|
66
|
+
type: ExchangeTypes.ISSUING,
|
|
67
|
+
protocolMetadata: {
|
|
68
|
+
protocol: ExchangeProtocols.W3C_VC_API,
|
|
69
|
+
},
|
|
70
|
+
createdBy: req.user.user,
|
|
71
|
+
});
|
|
72
|
+
// add "exchange" prop onto "req" so that all functions that assume exchange is on the context work without modification
|
|
73
|
+
// eslint-disable-next-line better-mutation/no-mutation
|
|
74
|
+
req.exchange = exchange;
|
|
75
|
+
|
|
76
|
+
const [preparedOffer] = await prepareOffers(
|
|
77
|
+
[{ ...offer, offerId: nanoid() }],
|
|
78
|
+
req
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const validatedOffer = await validateOffer(
|
|
82
|
+
preparedOffer,
|
|
83
|
+
false,
|
|
84
|
+
true,
|
|
85
|
+
req
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const dbOffer = await repos.offers.insert(validatedOffer);
|
|
89
|
+
|
|
90
|
+
await repos.exchanges.addState(
|
|
91
|
+
exchange._id,
|
|
92
|
+
ExchangeStates.CLAIMING_IN_PROGRESS
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const vcJwts = await createVerifiableCredentials(
|
|
96
|
+
[dbOffer],
|
|
97
|
+
offer.credentialSubject.id,
|
|
98
|
+
options.consented != null ? new Date(options.consented) : new Date(),
|
|
99
|
+
req
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
await finalizeExchange(exchange, [dbOffer._id], req);
|
|
103
|
+
// eslint-disable-next-line better-mutation/no-mutation
|
|
104
|
+
reply.statusCode = 201;
|
|
105
|
+
return { verifiableCredential: first(vcJwts) };
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
module.exports = credentialsController;
|
package/src/controllers/operator/tenants/_tenantId/vc-api/credentials/schemas/Credential.schema.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { w3cVcSchema } = require('@verii/common-schemas');
|
|
2
|
+
|
|
3
|
+
const CredentialSchema = {
|
|
4
|
+
$id: 'https://velocitynetwork.foundation/vc-api/Credential.schema.json',
|
|
5
|
+
type: 'object',
|
|
6
|
+
description: 'A JSON-LD Verifiable Credential without a proof.',
|
|
7
|
+
additionalProperties: false,
|
|
8
|
+
properties: {
|
|
9
|
+
...w3cVcSchema.properties,
|
|
10
|
+
id: {
|
|
11
|
+
type: 'string',
|
|
12
|
+
description: 'The ID of the credential.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
required: ['@context', ...w3cVcSchema.required],
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
module.exports = CredentialSchema;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://velocitynetwork.foundation/vc-api/IssueCredentialOptions.schema.json",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"description": "Options for specifying how the LinkedDataProof is created.",
|
|
6
|
+
"properties": {
|
|
7
|
+
"created": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "The date and time of the proof (with a maximum accuracy in seconds). Default current system time."
|
|
10
|
+
},
|
|
11
|
+
"consented": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "When was consent given to receive the credential. Default current system time."
|
|
14
|
+
},
|
|
15
|
+
"challenge": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "A challenge provided by the requesting party of the proof. For example 6e62f66e-67de-11eb-b490-ef3eeefa55f2"
|
|
18
|
+
},
|
|
19
|
+
"domain": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The intended domain of validity for the proof. For example website.example"
|
|
22
|
+
},
|
|
23
|
+
"format": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "Request a particular credential format that the server supports",
|
|
26
|
+
"enum": [
|
|
27
|
+
"jsonld-vc",
|
|
28
|
+
"jwt-vc"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"credentialStatus": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"description": "The method of credential status to issue the credential including. If omitted credential status will be included.",
|
|
34
|
+
"properties": {
|
|
35
|
+
"type": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "The type of credential status to issue the credential with"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://velocitynetwork.foundation/vc-api/IssueCredentialRequest.schema.json",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"credential": {
|
|
6
|
+
"$ref": "https://velocitynetwork.foundation/vc-api/Credential.schema.json#"
|
|
7
|
+
},
|
|
8
|
+
"options": {
|
|
9
|
+
"$ref": "https://velocitynetwork.foundation/vc-api/IssueCredentialOptions.schema.json#"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"required": ["credential"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://velocitynetwork.foundation/vc-api/IssueCredentialResponse.schema.json",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"verifiableCredential": {
|
|
6
|
+
"oneOf": [
|
|
7
|
+
{
|
|
8
|
+
"$ref": "https://velocitynetwork.foundation/vc-api/VerifiableCredential.schema.json#"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "string containing a jwt-vc encoded VerifiableCredential"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"description": "either a JWT-VC as a string or a JSON-LD encoded VerifiableCredential"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"required": ["verifiableCredential"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://velocitynetwork.foundation/vc-api/LinkedDataProof.schema.json",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"description": "A JSON-LD Linked Data proof.",
|
|
5
|
+
"properties": {
|
|
6
|
+
"type": {
|
|
7
|
+
"type": "string",
|
|
8
|
+
"description": "Linked Data Signature Suite used to produce proof."
|
|
9
|
+
},
|
|
10
|
+
"created": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Date the proof was created."
|
|
13
|
+
},
|
|
14
|
+
"challenge": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "A value chosen by the verifier to mitigate authentication proof replay attacks."
|
|
17
|
+
},
|
|
18
|
+
"domain": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "The domain of the proof to restrict its use to a particular target."
|
|
21
|
+
},
|
|
22
|
+
"nonce": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "A value chosen by the creator of a proof to randomize proof values for privacy purposes."
|
|
25
|
+
},
|
|
26
|
+
"verificationMethod": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "Verification Method used to verify proof."
|
|
29
|
+
},
|
|
30
|
+
"proofPurpose": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "The purpose of the proof to be used with verificationMethod."
|
|
33
|
+
},
|
|
34
|
+
"jws": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Detached JSON Web Signature."
|
|
37
|
+
},
|
|
38
|
+
"proofValue": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "Value of the Linked Data proof."
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const CredentialSchema = require('./Credential.schema');
|
|
2
|
+
|
|
3
|
+
const VerifiableCredentialSchema = {
|
|
4
|
+
$id: 'https://velocitynetwork.foundation/vc-api/VerifiableCredential.schema.json',
|
|
5
|
+
type: 'object',
|
|
6
|
+
description: 'A JSON-LD Verifiable Credential with a proof.',
|
|
7
|
+
properties: {
|
|
8
|
+
...CredentialSchema.properties,
|
|
9
|
+
proof: {
|
|
10
|
+
$ref: 'https://velocitynetwork.foundation/vc-api/LinkedDataProof.schema.json#',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
required: [...CredentialSchema.required],
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
module.exports = VerifiableCredentialSchema;
|
|
@@ -0,0 +1,31 @@
|
|
|
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 CredentialSchema = require('./Credential.schema');
|
|
18
|
+
const IssueCredentialOptionsSchema = require('./IssueCredentialOptions.schema.json');
|
|
19
|
+
const IssueCredentialRequestSchema = require('./IssueCredentialRequest.schema.json');
|
|
20
|
+
const IssueCredentialResponseSchema = require('./IssueCredentialResponse.schema.json');
|
|
21
|
+
const LinkedDataProofSchema = require('./LinkedDataProof.schema.json');
|
|
22
|
+
const VerifiableCredentialSchema = require('./VerifiableCredential.schema');
|
|
23
|
+
|
|
24
|
+
module.exports = {
|
|
25
|
+
CredentialSchema,
|
|
26
|
+
IssueCredentialOptionsSchema,
|
|
27
|
+
IssueCredentialRequestSchema,
|
|
28
|
+
IssueCredentialResponseSchema,
|
|
29
|
+
LinkedDataProofSchema,
|
|
30
|
+
VerifiableCredentialSchema,
|
|
31
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
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 { vendorRoutesAuthPlugin } = require('../../../plugins');
|
|
18
|
+
const {
|
|
19
|
+
secretKeySchema,
|
|
20
|
+
secretKeyMetadataSchema,
|
|
21
|
+
secretNewTenantSchema,
|
|
22
|
+
secretKidSchema,
|
|
23
|
+
modifySecretSchema,
|
|
24
|
+
modifyTenantSchema,
|
|
25
|
+
newTenantSchema,
|
|
26
|
+
newTenantResponse200Schema,
|
|
27
|
+
tenantSchema,
|
|
28
|
+
tenantKeySchema,
|
|
29
|
+
secretTenantKeySchema,
|
|
30
|
+
} = require('./schemas');
|
|
31
|
+
const { kmsPlugin } = require('../../../plugins/kms-plugin');
|
|
32
|
+
|
|
33
|
+
module.exports = async (fastify) => {
|
|
34
|
+
fastify
|
|
35
|
+
.register(vendorRoutesAuthPlugin)
|
|
36
|
+
.register(kmsPlugin)
|
|
37
|
+
.decorateRequest('registrarFetch', null)
|
|
38
|
+
.decorateRequest('fetch', null)
|
|
39
|
+
.decorateRequest('vendorFetch', null)
|
|
40
|
+
.decorateRequest('libFetch', null)
|
|
41
|
+
.addHook('preValidation', async (req) => {
|
|
42
|
+
req.registrarFetch = fastify.baseRegistrarFetch(req);
|
|
43
|
+
})
|
|
44
|
+
.addHook('preValidation', async (req) => {
|
|
45
|
+
req.fetch = fastify.baseFetch(req);
|
|
46
|
+
})
|
|
47
|
+
.addHook('preValidation', async (req) => {
|
|
48
|
+
req.vendorFetch = fastify.baseVendorFetch(req);
|
|
49
|
+
})
|
|
50
|
+
.addHook('preValidation', async (req) => {
|
|
51
|
+
req.libFetch = fastify.baseLibFetch(req);
|
|
52
|
+
})
|
|
53
|
+
.addSchema(secretKeySchema)
|
|
54
|
+
.addSchema(secretKeyMetadataSchema)
|
|
55
|
+
.addSchema(secretKidSchema)
|
|
56
|
+
.addSchema(modifySecretSchema)
|
|
57
|
+
.addSchema(modifyTenantSchema)
|
|
58
|
+
.addSchema(newTenantSchema)
|
|
59
|
+
.addSchema(newTenantResponse200Schema)
|
|
60
|
+
.addSchema(secretNewTenantSchema)
|
|
61
|
+
.addSchema(tenantSchema)
|
|
62
|
+
.addSchema(tenantKeySchema)
|
|
63
|
+
.addSchema(secretTenantKeySchema)
|
|
64
|
+
.autoSchemaPreset({ tags: ['tenants'], security: [{ bearerAuth: [] }] });
|
|
65
|
+
};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 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 { isEmpty, map, uniq, reduce } = require('lodash/fp');
|
|
18
|
+
const newError = require('http-errors');
|
|
19
|
+
|
|
20
|
+
const {
|
|
21
|
+
hasDuplicatePurposes,
|
|
22
|
+
KeyErrorMessages,
|
|
23
|
+
buildServiceIds,
|
|
24
|
+
refreshTenantDids,
|
|
25
|
+
validateGroupByUser,
|
|
26
|
+
} = require('../../../entities');
|
|
27
|
+
|
|
28
|
+
const { createTenant } = require('../../../entities/tenants');
|
|
29
|
+
|
|
30
|
+
const areKidFragmentsUnique = (keys) => {
|
|
31
|
+
const kidFragments = reduce(
|
|
32
|
+
(arr, key) => {
|
|
33
|
+
return [...arr, key.kidFragment];
|
|
34
|
+
},
|
|
35
|
+
[],
|
|
36
|
+
keys
|
|
37
|
+
);
|
|
38
|
+
return uniq(kidFragments).length === kidFragments.length;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const validateAllPurposes = (keys) => {
|
|
42
|
+
const allPurposes = reduce(
|
|
43
|
+
(arr, key) => {
|
|
44
|
+
return [...arr, ...key.purposes];
|
|
45
|
+
},
|
|
46
|
+
[],
|
|
47
|
+
keys
|
|
48
|
+
);
|
|
49
|
+
if (hasDuplicatePurposes(allPurposes)) {
|
|
50
|
+
throw newError(400, KeyErrorMessages.DUPLICATE_PURPOSE_DETECTED);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const validateUniqueKidFragments = (keys) => {
|
|
55
|
+
if (!areKidFragmentsUnique(keys)) {
|
|
56
|
+
throw newError(400, 'Duplicate kid fragments purposes detected');
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const tenantController = async (fastify) => {
|
|
61
|
+
fastify.post(
|
|
62
|
+
'/',
|
|
63
|
+
{
|
|
64
|
+
schema: fastify.autoSchema({
|
|
65
|
+
body: {
|
|
66
|
+
$ref: 'https://velocitycareerlabs.io/secret-new-tenant-v0.8.schema.json#',
|
|
67
|
+
},
|
|
68
|
+
response: {
|
|
69
|
+
201: {
|
|
70
|
+
$ref: 'https://velocitycareerlabs.io/new-tenant.response.200.schema.json#',
|
|
71
|
+
},
|
|
72
|
+
404: { $ref: 'error#' },
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
75
|
+
},
|
|
76
|
+
async (req, reply) => {
|
|
77
|
+
const { did, serviceIds, webhookUrl, keys, webhookAuth } = req.body;
|
|
78
|
+
|
|
79
|
+
await validateGroupByUser(req);
|
|
80
|
+
validateAllPurposes(keys);
|
|
81
|
+
validateUniqueKidFragments(keys);
|
|
82
|
+
|
|
83
|
+
const insertedTenant = await createTenant(
|
|
84
|
+
{
|
|
85
|
+
did,
|
|
86
|
+
serviceIds,
|
|
87
|
+
webhookUrl,
|
|
88
|
+
keys,
|
|
89
|
+
webhookAuth,
|
|
90
|
+
},
|
|
91
|
+
req
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const { createdAt, _id } = insertedTenant;
|
|
95
|
+
reply.code(201);
|
|
96
|
+
return { createdAt, id: _id };
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
fastify.get(
|
|
101
|
+
'/',
|
|
102
|
+
{
|
|
103
|
+
schema: fastify.autoSchema({
|
|
104
|
+
response: {
|
|
105
|
+
200: {
|
|
106
|
+
type: 'array',
|
|
107
|
+
items: {
|
|
108
|
+
$ref: 'https://velocitycareerlabs.io/tenant-v0.8.schema.json',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
}),
|
|
113
|
+
},
|
|
114
|
+
async (req) => {
|
|
115
|
+
const filter = await buildFilterByGroup(req);
|
|
116
|
+
const tenants = await req.repos.tenants.find({ filter });
|
|
117
|
+
return map(
|
|
118
|
+
(tenant) => ({ ...tenant, serviceIds: buildServiceIds(tenant) }),
|
|
119
|
+
tenants
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
fastify.post(
|
|
125
|
+
'/refresh',
|
|
126
|
+
{
|
|
127
|
+
schema: fastify.autoSchema({
|
|
128
|
+
body: {
|
|
129
|
+
oneOf: [
|
|
130
|
+
{
|
|
131
|
+
type: 'object',
|
|
132
|
+
properties: {
|
|
133
|
+
all: { type: 'boolean', enum: [true] },
|
|
134
|
+
},
|
|
135
|
+
required: ['all'],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
did: { type: 'string' },
|
|
141
|
+
},
|
|
142
|
+
required: ['did'],
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
response: {
|
|
147
|
+
204: { type: 'null' },
|
|
148
|
+
},
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
async (req) => {
|
|
152
|
+
await refreshTenantDids(req.body, req);
|
|
153
|
+
return {};
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const buildFilterByGroup = async (context) => {
|
|
159
|
+
const { repos, user } = context;
|
|
160
|
+
if (isEmpty(user.groupId)) {
|
|
161
|
+
return {};
|
|
162
|
+
}
|
|
163
|
+
const group = await repos.groups.findById(user.groupId);
|
|
164
|
+
return { did: { $in: group.dids } };
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
module.exports = tenantController;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 modifySecretSchema = require('./modify-secret.schema.json');
|
|
18
|
+
const secretKeySchema = require('./secret-key.schema.json');
|
|
19
|
+
const secretKeyMetadataSchema = require('./secret-key-metadata.schema.json');
|
|
20
|
+
const secretKidSchema = require('./secret-kid.schema.json');
|
|
21
|
+
const newTenantSchema = require('./new-tenant-v0.8.schema.json');
|
|
22
|
+
const newTenantResponse200Schema = require('./new-tenant.response.200.schema.json');
|
|
23
|
+
const modifyTenantSchema = require('./modify-tenant-v0.8.schema.json');
|
|
24
|
+
const secretNewTenantSchema = require('./secret-new-tenant-v0.8.schema.json');
|
|
25
|
+
const tenantSchema = require('./tenant-v0.8.schema.json');
|
|
26
|
+
const tenantKeySchema = require('./tenant-key-v0.8.schema.json');
|
|
27
|
+
const secretTenantKeySchema = require('./secret-tenant-key-v0.8.schema.json');
|
|
28
|
+
|
|
29
|
+
module.exports = {
|
|
30
|
+
modifySecretSchema,
|
|
31
|
+
secretKeySchema,
|
|
32
|
+
secretKeyMetadataSchema,
|
|
33
|
+
secretKidSchema,
|
|
34
|
+
newTenantSchema,
|
|
35
|
+
newTenantResponse200Schema,
|
|
36
|
+
modifyTenantSchema,
|
|
37
|
+
secretNewTenantSchema,
|
|
38
|
+
tenantSchema,
|
|
39
|
+
tenantKeySchema,
|
|
40
|
+
secretTenantKeySchema,
|
|
41
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "modify-secret",
|
|
3
|
+
"$id": "https://velocitycareerlabs.io/modify-secret.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"description": "sets a secret for the tenant",
|
|
6
|
+
"allOf": [
|
|
7
|
+
{"$ref": "https://velocitycareerlabs.io/secret-key.schema.json#"},
|
|
8
|
+
{"$ref": "https://velocitycareerlabs.io/secret-kid.schema.json#"}
|
|
9
|
+
],
|
|
10
|
+
"required": ["key", "kid"]
|
|
11
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "modify-tenant",
|
|
3
|
+
"$id": "https://velocitycareerlabs.io/modify-tenant-v0.8.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"description": "",
|
|
6
|
+
"properties": {
|
|
7
|
+
"serviceIds": {
|
|
8
|
+
"type": "array",
|
|
9
|
+
"description": "id's of the service",
|
|
10
|
+
"items": {
|
|
11
|
+
"oneOf": [
|
|
12
|
+
{
|
|
13
|
+
"type": "string",
|
|
14
|
+
"pattern": "^did:[a-z0-9]+:[A-Za-z0-9._:?=&%;-]+#[A-Za-z0-9._:?=&%;-]+$"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^#[A-Za-z0-9._:?=&%;-]+$"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"minItems": 1
|
|
23
|
+
},
|
|
24
|
+
"webhookUrl": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"format": "uri"
|
|
27
|
+
},
|
|
28
|
+
"webhookAuth": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"type": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": ["bearer"]
|
|
34
|
+
},
|
|
35
|
+
"bearerToken": {
|
|
36
|
+
"type": "string"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"required": [
|
|
42
|
+
"serviceIds"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "new-tenant",
|
|
3
|
+
"$id": "https://velocitycareerlabs.io/new-tenant-v0.8.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"description": "",
|
|
6
|
+
"allOf": [
|
|
7
|
+
{ "$ref": "https://velocitycareerlabs.io/modify-tenant-v0.8.schema.json#"},
|
|
8
|
+
{
|
|
9
|
+
"type": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"did": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"pattern": "^did:[a-z0-9]+:[A-Za-z0-9._:?=&%;-]+$"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"required": ["did"]
|
|
19
|
+
}
|