@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,77 @@
|
|
|
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
|
+
const { isEmpty, includes, some } = require('lodash/fp');
|
|
17
|
+
const newError = require('http-errors');
|
|
18
|
+
const {
|
|
19
|
+
ConfigurationType,
|
|
20
|
+
VendorEndpointCategory,
|
|
21
|
+
IdentificationMethods,
|
|
22
|
+
} = require('./constants');
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line complexity
|
|
25
|
+
const validateDisclosureDefaultIssuing = (
|
|
26
|
+
disclosure,
|
|
27
|
+
tenant,
|
|
28
|
+
setIssuingDefault
|
|
29
|
+
) => {
|
|
30
|
+
const { defaultIssuingDisclosureId } = tenant;
|
|
31
|
+
const { identificationMethods } = disclosure;
|
|
32
|
+
const isIssuingDisclosure = checkIsIssuingDisclosure(disclosure);
|
|
33
|
+
|
|
34
|
+
if (!isIssuingDisclosure && setIssuingDefault) {
|
|
35
|
+
throw newError(
|
|
36
|
+
400,
|
|
37
|
+
'The default disclosure cannot be of type "inspection"',
|
|
38
|
+
{
|
|
39
|
+
errorCode: 'issuing_default_not_compatible',
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (
|
|
45
|
+
some(
|
|
46
|
+
(identificationMethod) =>
|
|
47
|
+
identificationMethod === IdentificationMethods.PREAUTH,
|
|
48
|
+
identificationMethods
|
|
49
|
+
)
|
|
50
|
+
) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (
|
|
55
|
+
isIssuingDisclosure &&
|
|
56
|
+
!defaultIssuingDisclosureId &&
|
|
57
|
+
!setIssuingDefault
|
|
58
|
+
) {
|
|
59
|
+
throw newError(
|
|
60
|
+
400,
|
|
61
|
+
'The first "issuing" configuration created must be set as the default.',
|
|
62
|
+
{
|
|
63
|
+
errorCode: 'first_issuing_configuration_must_be_default',
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const checkIsIssuingDisclosure = (disclosure) => {
|
|
70
|
+
if (isEmpty(disclosure?.configurationType)) {
|
|
71
|
+
return includes(disclosure?.vendorEndpoint, VendorEndpointCategory.ISSUING);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return disclosure.configurationType === ConfigurationType.ISSUING;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
module.exports = { validateDisclosureDefaultIssuing };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const { validateCommercialEntity } = require('./validate-commercial-entity');
|
|
2
|
+
const {
|
|
3
|
+
validateByIdentificationMethod,
|
|
4
|
+
} = require('./validate-by-identification-method');
|
|
5
|
+
const {
|
|
6
|
+
validateDisclosureByConfigurationType,
|
|
7
|
+
} = require('./validate-disclosure-by-configuration-type');
|
|
8
|
+
const {
|
|
9
|
+
validateDisclosureDefaultIssuing,
|
|
10
|
+
} = require('./validate-disclosure-default-issuing');
|
|
11
|
+
const { validateVendorEndpoint } = require('./validate-vendor-endpoint');
|
|
12
|
+
const { validateVendorWebhook } = require('./validate-vendor-webhook');
|
|
13
|
+
const {
|
|
14
|
+
validatePresentationDefinition,
|
|
15
|
+
} = require('./validate-presentation-definition');
|
|
16
|
+
const { validateFeed } = require('./validate-feed');
|
|
17
|
+
|
|
18
|
+
const validateDisclosure = (
|
|
19
|
+
disclosure,
|
|
20
|
+
verifiedProfile,
|
|
21
|
+
setIssuingDefault,
|
|
22
|
+
context
|
|
23
|
+
) => {
|
|
24
|
+
const { tenant } = context;
|
|
25
|
+
validateVendorWebhook(tenant, context);
|
|
26
|
+
validateDisclosureByConfigurationType(disclosure);
|
|
27
|
+
validateDisclosureDefaultIssuing(disclosure, tenant, setIssuingDefault);
|
|
28
|
+
validateByIdentificationMethod(disclosure, setIssuingDefault);
|
|
29
|
+
validateVendorEndpoint(disclosure);
|
|
30
|
+
validateCommercialEntity(disclosure, verifiedProfile);
|
|
31
|
+
validatePresentationDefinition(disclosure);
|
|
32
|
+
validateFeed(disclosure);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
validateDisclosure,
|
|
37
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const newError = require('http-errors');
|
|
2
|
+
const { DisclosureErrors } = require('./errors');
|
|
3
|
+
const { ConfigurationType } = require('./constants');
|
|
4
|
+
|
|
5
|
+
const validateFeed = (disclosure) => {
|
|
6
|
+
const { configurationType, feed } = disclosure;
|
|
7
|
+
if (configurationType === ConfigurationType.ISSUING && feed === true) {
|
|
8
|
+
throw newError(400, DisclosureErrors.ISSUING_FEED_NOT_SUPPORTED, {
|
|
9
|
+
errorCode: 'issuing_feed_not_supported',
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
module.exports = {
|
|
15
|
+
validateFeed,
|
|
16
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const { isEmpty, some } = require('lodash/fp');
|
|
2
|
+
const newError = require('http-errors');
|
|
3
|
+
const { DisclosureErrors } = require('./errors');
|
|
4
|
+
const {
|
|
5
|
+
identificationMethodsIncludesPreauth,
|
|
6
|
+
} = require('./validate-by-identification-method');
|
|
7
|
+
|
|
8
|
+
const validatePresentationDefinition = (disclosure) => {
|
|
9
|
+
const { presentationDefinition, types } = disclosure;
|
|
10
|
+
validatePresentationDefinitionXorTypes(disclosure);
|
|
11
|
+
if (
|
|
12
|
+
types ||
|
|
13
|
+
identificationMethodsIncludesPreauth(disclosure.identificationMethods)
|
|
14
|
+
) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
const {
|
|
18
|
+
submission_requirements: submissionRequirements,
|
|
19
|
+
input_descriptors: inputDescriptors,
|
|
20
|
+
} = presentationDefinition;
|
|
21
|
+
|
|
22
|
+
if (isEmpty(submissionRequirements)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (inputDescriptorWithoutGroup(inputDescriptors)) {
|
|
27
|
+
return throwValidationError(
|
|
28
|
+
DisclosureErrors.PRESENTATION_DEFINITION_GROUP_IF_SUBMISSION_REQUIREMENTS
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const validatePresentationDefinitionXorTypes = (disclosure) => {
|
|
35
|
+
const { presentationDefinition, types } = disclosure;
|
|
36
|
+
if (presentationDefinition && types) {
|
|
37
|
+
return throwValidationError(
|
|
38
|
+
DisclosureErrors.PRESENTATION_DEFINITION_XOR_TYPES
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const inputDescriptorWithoutGroup = some(({ group }) => isEmpty(group));
|
|
45
|
+
|
|
46
|
+
const throwValidationError = (reason) => {
|
|
47
|
+
throw newError(400, reason, {
|
|
48
|
+
errorCode: 'request_validation_failed',
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
validatePresentationDefinition,
|
|
54
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const { isEmpty } = require('lodash/fp');
|
|
2
|
+
const newError = require('http-errors');
|
|
3
|
+
const { VendorEndpoint } = require('./constants');
|
|
4
|
+
const { DisclosureErrors } = require('./errors');
|
|
5
|
+
|
|
6
|
+
const validateVendorEndpoint = (disclosure) => {
|
|
7
|
+
const { vendorEndpoint, identityMatchers } = disclosure;
|
|
8
|
+
|
|
9
|
+
if (vendorEndpoint !== VendorEndpoint.INTEGRATED_ISSUING_IDENTIFICATION) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (isEmpty(identityMatchers)) {
|
|
14
|
+
throw newError(400, DisclosureErrors.IDENTITY_MATCHERS_REQUIRED, {
|
|
15
|
+
errorCode: 'request_validation_failed',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
module.exports = {
|
|
21
|
+
validateVendorEndpoint,
|
|
22
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { isEmpty } = require('lodash');
|
|
2
|
+
const newError = require('http-errors');
|
|
3
|
+
|
|
4
|
+
const validateVendorWebhook = (tenant, context) => {
|
|
5
|
+
const {
|
|
6
|
+
config: { vendorUrl },
|
|
7
|
+
} = context;
|
|
8
|
+
|
|
9
|
+
if (isEmpty(vendorUrl) && isEmpty(tenant?.webhookUrl)) {
|
|
10
|
+
throw newError(400, 'Vendor URL is required', {
|
|
11
|
+
errorCode: 'vendor_url_required',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
validateVendorWebhook,
|
|
18
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
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 { includes } = require('lodash/fp');
|
|
18
|
+
const { addYears } = require('date-fns');
|
|
19
|
+
const { register } = require('@spencejs/spence-factories');
|
|
20
|
+
const { ObjectId } = require('mongodb');
|
|
21
|
+
const { disclosureRepoPlugin } = require('../repos');
|
|
22
|
+
const { initTenantFactory } = require('../../tenants');
|
|
23
|
+
const {
|
|
24
|
+
VendorEndpoint,
|
|
25
|
+
VendorEndpointCategory,
|
|
26
|
+
ConfigurationType,
|
|
27
|
+
IdentificationMethods,
|
|
28
|
+
} = require('../domains');
|
|
29
|
+
|
|
30
|
+
const initDisclosureFactory = (app) => {
|
|
31
|
+
const initRepo = disclosureRepoPlugin(app);
|
|
32
|
+
return register('disclosure', async (overrides, { getOrBuild }) => {
|
|
33
|
+
const currentPlusTen = addYears(new Date(), 10);
|
|
34
|
+
const tenant = await getOrBuild('tenant', initTenantFactory(app));
|
|
35
|
+
const disclosureOverrides = overrides();
|
|
36
|
+
|
|
37
|
+
const vendorEndpoint =
|
|
38
|
+
disclosureOverrides?.vendorEndpoint || VendorEndpoint.RECEIVE_APPLICANT;
|
|
39
|
+
const configurationType = await getOrBuild('configurationType', () =>
|
|
40
|
+
includes(vendorEndpoint, VendorEndpointCategory.INSPECTION)
|
|
41
|
+
? ConfigurationType.INSPECTION
|
|
42
|
+
: ConfigurationType.ISSUING
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
let types;
|
|
46
|
+
if (
|
|
47
|
+
!includes(
|
|
48
|
+
IdentificationMethods.PREAUTH,
|
|
49
|
+
disclosureOverrides.identificationMethods
|
|
50
|
+
)
|
|
51
|
+
) {
|
|
52
|
+
types = [
|
|
53
|
+
{ type: 'PastEmploymentPosition' },
|
|
54
|
+
{ type: 'CurrentEmploymentPosition' },
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
item: {
|
|
59
|
+
description: 'Clerk',
|
|
60
|
+
...buildTypesOrPresentationDefinition({
|
|
61
|
+
types,
|
|
62
|
+
presentationDefinition: disclosureOverrides.presentationDefinition,
|
|
63
|
+
}),
|
|
64
|
+
tenantId: new ObjectId(tenant._id),
|
|
65
|
+
vendorDisclosureId: 'HR-PKG-USPS-CLRK',
|
|
66
|
+
purpose: 'Job Application',
|
|
67
|
+
duration: '6y',
|
|
68
|
+
termsUrl: 'https://www.lipsum.com/feed/html',
|
|
69
|
+
sendPushOnVerification: false,
|
|
70
|
+
deactivationDate: currentPlusTen,
|
|
71
|
+
authTokensExpireIn: 10080,
|
|
72
|
+
...disclosureOverrides,
|
|
73
|
+
vendorEndpoint,
|
|
74
|
+
configurationType,
|
|
75
|
+
},
|
|
76
|
+
repo: initRepo({ tenant: { ...tenant, _id: new ObjectId(tenant._id) } }),
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const buildTypesOrPresentationDefinition = ({
|
|
82
|
+
types,
|
|
83
|
+
presentationDefinition,
|
|
84
|
+
}) => {
|
|
85
|
+
if (!presentationDefinition) {
|
|
86
|
+
return {
|
|
87
|
+
types,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
presentationDefinition,
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
module.exports = { initDisclosureFactory };
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
module.exports = {
|
|
18
|
+
...require('./disclosure-factory'),
|
|
19
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
module.exports = {
|
|
18
|
+
...require('./domains'),
|
|
19
|
+
...require('./factories'),
|
|
20
|
+
...require('./repos'),
|
|
21
|
+
...require('./orchestrators'),
|
|
22
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const getDisclosureId = ({ params, query, exchange }) =>
|
|
2
|
+
exchange?.disclosureId.toString() || params?.id || query?.id;
|
|
3
|
+
|
|
4
|
+
const getDisclosure = async (ctx) => {
|
|
5
|
+
const { repos } = ctx;
|
|
6
|
+
if (ctx.disclosure) {
|
|
7
|
+
return ctx.disclosure;
|
|
8
|
+
}
|
|
9
|
+
const disclosureId = getDisclosureId(ctx);
|
|
10
|
+
const disclosure = await repos.disclosures.findOne({
|
|
11
|
+
filter: { _id: disclosureId },
|
|
12
|
+
});
|
|
13
|
+
return disclosure;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
getDisclosure,
|
|
18
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
module.exports = {
|
|
18
|
+
...require('./update-disclosure-configuration-type'),
|
|
19
|
+
...require('./get-disclosure'),
|
|
20
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { isEmpty } = require('lodash/fp');
|
|
18
|
+
const { computeDisclosureConfigurationType } = require('../domains');
|
|
19
|
+
const { getDisclosure } = require('./get-disclosure');
|
|
20
|
+
|
|
21
|
+
const updateDisclosureConfigurationType = async (req) => {
|
|
22
|
+
const { repos } = req;
|
|
23
|
+
const disclosure = await getDisclosure(req);
|
|
24
|
+
if (isEmpty(disclosure) || disclosure.configurationType) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
await repos.disclosures.update(disclosure._id, {
|
|
28
|
+
configurationType: computeDisclosureConfigurationType(disclosure),
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
module.exports = { updateDisclosureConfigurationType };
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
module.exports = {
|
|
18
|
+
disclosureRepoPlugin: require('./repo'),
|
|
19
|
+
...require('./set-configuration-type'),
|
|
20
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
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 {
|
|
18
|
+
repoFactory,
|
|
19
|
+
autoboxIdsExtension,
|
|
20
|
+
} = require('@spencejs/spence-mongo-repos');
|
|
21
|
+
const { multitenantExtension } = require('@verii/spencer-mongo-extensions');
|
|
22
|
+
const { ObjectId } = require('mongodb');
|
|
23
|
+
const newError = require('http-errors');
|
|
24
|
+
const {
|
|
25
|
+
VendorEndpoint,
|
|
26
|
+
identificationMethodsIncludesPreauth,
|
|
27
|
+
} = require('../domains');
|
|
28
|
+
const { setConfigurationType } = require('./set-configuration-type');
|
|
29
|
+
|
|
30
|
+
module.exports = (app, options, next = () => {}) => {
|
|
31
|
+
next();
|
|
32
|
+
return repoFactory(
|
|
33
|
+
{
|
|
34
|
+
name: 'disclosures',
|
|
35
|
+
entityName: 'disclosure',
|
|
36
|
+
defaultProjection,
|
|
37
|
+
extensions: [
|
|
38
|
+
autoboxIdsExtension,
|
|
39
|
+
multitenantExtension(),
|
|
40
|
+
disclosureExtensions,
|
|
41
|
+
setConfigurationType,
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
app
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const defaultProjection = {
|
|
49
|
+
_id: 1,
|
|
50
|
+
description: 1,
|
|
51
|
+
feed: 1,
|
|
52
|
+
types: 1,
|
|
53
|
+
presentationDefinition: 1,
|
|
54
|
+
identificationMethods: 1,
|
|
55
|
+
vendorEndpoint: 1,
|
|
56
|
+
identityMatchers: 1,
|
|
57
|
+
vendorOrganizationId: 1,
|
|
58
|
+
vendorDisclosureId: 1,
|
|
59
|
+
purpose: 1,
|
|
60
|
+
duration: 1,
|
|
61
|
+
termsUrl: 1,
|
|
62
|
+
deactivationDate: 1,
|
|
63
|
+
createdAt: 1,
|
|
64
|
+
updatedAt: 1,
|
|
65
|
+
sendPushOnVerification: 1,
|
|
66
|
+
offerMode: 1,
|
|
67
|
+
configurationType: 1,
|
|
68
|
+
commercialEntityName: 1,
|
|
69
|
+
commercialEntityLogo: 1,
|
|
70
|
+
authTokensExpireIn: 1,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const disclosureExtensions = (parent) => ({
|
|
74
|
+
findDefaultIssuingDisclosure: (opts) =>
|
|
75
|
+
parent.findOne(
|
|
76
|
+
{
|
|
77
|
+
filter: {
|
|
78
|
+
vendorEndpoint: {
|
|
79
|
+
$in: [
|
|
80
|
+
VendorEndpoint.ISSUING_IDENTIFICATION,
|
|
81
|
+
VendorEndpoint.INTEGRATED_ISSUING_IDENTIFICATION,
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
opts
|
|
87
|
+
),
|
|
88
|
+
updateDisclosure: async ({ id, body }) => {
|
|
89
|
+
const updateDoc = {
|
|
90
|
+
$set: { ...body, updatedAt: new Date() },
|
|
91
|
+
$unset: buildUpdateUnsetDocument(body),
|
|
92
|
+
};
|
|
93
|
+
const filter = parent.prepFilter({ _id: new ObjectId(id) });
|
|
94
|
+
const updateResult = await parent
|
|
95
|
+
.collection()
|
|
96
|
+
.findOneAndUpdate(filter, updateDoc, {
|
|
97
|
+
projection: defaultProjection,
|
|
98
|
+
returnDocument: 'after',
|
|
99
|
+
includeResultMetadata: true,
|
|
100
|
+
});
|
|
101
|
+
if (!updateResult.value) {
|
|
102
|
+
throw newError(404, `disclosure ${id} not found`, {
|
|
103
|
+
errorCode: 'disclosure_not_found',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return updateResult.value;
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const buildUpdateUnsetDocument = (body) => {
|
|
111
|
+
if (identificationMethodsIncludesPreauth(body.identificationMethods)) {
|
|
112
|
+
return { types: '', presentationDefinition: '' };
|
|
113
|
+
}
|
|
114
|
+
if (body.presentationDefinition != null) {
|
|
115
|
+
return { types: '' };
|
|
116
|
+
}
|
|
117
|
+
return { presentationDefinition: '' };
|
|
118
|
+
};
|
|
@@ -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 { isEmpty } = require('lodash/fp');
|
|
18
|
+
const { computeDisclosureConfigurationType } = require('../domains');
|
|
19
|
+
|
|
20
|
+
const setConfigurationType = (parent) => ({
|
|
21
|
+
prepModification: (val, kind) => {
|
|
22
|
+
const newValues = { ...val };
|
|
23
|
+
if (!isEmpty(val.vendorEndpoint)) {
|
|
24
|
+
newValues.configurationType =
|
|
25
|
+
computeDisclosureConfigurationType(newValues);
|
|
26
|
+
}
|
|
27
|
+
return parent.prepModification(newValues, kind);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
setConfigurationType,
|
|
33
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
module.exports = { ...require('./sign-exchange-response') };
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
|
|
18
|
+
const { KeyPurposes } = require('@verii/crypto');
|
|
19
|
+
const { toDidUrl } = require('@verii/did-doc');
|
|
20
|
+
const newError = require('http-errors');
|
|
21
|
+
|
|
22
|
+
const signExchangeResponse = async (
|
|
23
|
+
exchangeResponse,
|
|
24
|
+
options = {},
|
|
25
|
+
{ kms, tenant, tenantKeysByPurpose }
|
|
26
|
+
) => {
|
|
27
|
+
const exchangesKey = tenantKeysByPurpose[KeyPurposes.EXCHANGES];
|
|
28
|
+
if (exchangesKey == null) {
|
|
29
|
+
throw newError(
|
|
30
|
+
500,
|
|
31
|
+
`No key matching the filter {"tenantId":"${tenant._id}","purposes":"EXCHANGES"} was found`,
|
|
32
|
+
{ errorCode: 'tenant_exchanges_key_missing' }
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
return kms.signJwt(exchangeResponse, exchangesKey.keyId, {
|
|
36
|
+
jti: exchangeResponse.id,
|
|
37
|
+
issuer: tenant.did,
|
|
38
|
+
kid: toDidUrl(tenant.did, exchangesKey.kidFragment),
|
|
39
|
+
nbf: new Date(),
|
|
40
|
+
expiresIn: '1w',
|
|
41
|
+
...options,
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
module.exports = { signExchangeResponse };
|