@velocitycareerlabs/server-webwallet 1.25.0-dev-build.12642c864

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.localdev.env +57 -0
  2. package/.standalone.env +22 -0
  3. package/LICENSE +248 -0
  4. package/README.md +11 -0
  5. package/jest.config.js +20 -0
  6. package/migrate-mongo.config.js +23 -0
  7. package/package.json +72 -0
  8. package/src/config/config.js +74 -0
  9. package/src/controllers/accounts/autohooks.js +28 -0
  10. package/src/controllers/accounts/controller.js +209 -0
  11. package/src/controllers/accounts/schemas/index.js +6 -0
  12. package/src/controllers/accounts/schemas/webwallet-accounts-request.schema.js +25 -0
  13. package/src/controllers/accounts/schemas/webwallet-accounts-response.schema.js +72 -0
  14. package/src/controllers/accounts/schemas/webwallet-accounts-update-request.schema.js +23 -0
  15. package/src/controllers/accounts/schemas/webwallet-test-personas-response.schema.js +110 -0
  16. package/src/controllers/consent/autohooks.js +14 -0
  17. package/src/controllers/consent/controller.js +91 -0
  18. package/src/controllers/consent/schemas/index.js +3 -0
  19. package/src/controllers/consent/schemas/webwallet-consent-response.schema.js +23 -0
  20. package/src/controllers/credentials/autohooks.js +36 -0
  21. package/src/controllers/credentials/controller.js +92 -0
  22. package/src/controllers/credentials/schemas/index.js +4 -0
  23. package/src/controllers/credentials/schemas/webwallet-credential-categories-response.schema.js +21 -0
  24. package/src/controllers/credentials/schemas/webwallet-credentials-response.schema.js +29 -0
  25. package/src/controllers/disclosures/autohooks.js +21 -0
  26. package/src/controllers/disclosures/controller.js +168 -0
  27. package/src/controllers/disclosures/schemas/index.js +7 -0
  28. package/src/controllers/disclosures/schemas/webwallet-accept-presentation-request-body.schema.js +28 -0
  29. package/src/controllers/disclosures/schemas/webwallet-accept-presentation-response.schema.js +16 -0
  30. package/src/controllers/disclosures/schemas/webwallet-get-disclosures-response.schema.js +18 -0
  31. package/src/controllers/disclosures/schemas/webwallet-get-presentation-request-query.schema.js +21 -0
  32. package/src/controllers/disclosures/schemas/webwallet-get-presentation-request-response.schema.js +16 -0
  33. package/src/controllers/feedback/autohooks.js +11 -0
  34. package/src/controllers/feedback/controller.js +48 -0
  35. package/src/controllers/issuing/common-schemas/index.js +10 -0
  36. package/src/controllers/issuing/common-schemas/webwallet-get-credential-manifest-query.schema.js +27 -0
  37. package/src/controllers/issuing/common-schemas/webwallet-get-credential-manifest-response.schema.js +31 -0
  38. package/src/controllers/issuing/deep-link/autohooks.js +51 -0
  39. package/src/controllers/issuing/deep-link/controller.js +192 -0
  40. package/src/controllers/issuing/deep-link/schemas/index.js +6 -0
  41. package/src/controllers/issuing/deep-link/schemas/webwallet-deep-link-accept-offers-request.schema.js +30 -0
  42. package/src/controllers/issuing/deep-link/schemas/webwallet-deep-link-accept-offers-response.schema.js +36 -0
  43. package/src/controllers/issuing/deep-link/schemas/webwallet-deep-link-offers-request.schema.js +28 -0
  44. package/src/controllers/issuing/deep-link/schemas/webwallet-deep-link-offers-response.schema.js +48 -0
  45. package/src/controllers/issuing/identity-credentials/autohooks.js +42 -0
  46. package/src/controllers/issuing/identity-credentials/controller.js +188 -0
  47. package/src/controllers/issuing/identity-credentials/schemas/index.js +6 -0
  48. package/src/controllers/issuing/identity-credentials/schemas/webwallet-identity-credentials-confirm-body.schema.js +20 -0
  49. package/src/controllers/issuing/identity-credentials/schemas/webwallet-identity-credentials-confirm-response.schema.js +37 -0
  50. package/src/controllers/issuing/identity-credentials/schemas/webwallet-identity-credentials-request-code-body.schema.js +14 -0
  51. package/src/controllers/issuing/identity-credentials/schemas/webwallet-identity-credentials-request-code-params.schema.js +19 -0
  52. package/src/controllers/linkedin/autohooks.js +16 -0
  53. package/src/controllers/linkedin/controller.js +276 -0
  54. package/src/controllers/linkedin/schemas/index.js +3 -0
  55. package/src/controllers/linkedin/schemas/webwallet-linkedin-me-response.schema.js +14 -0
  56. package/src/controllers/root/controller.js +29 -0
  57. package/src/entities/.gitkeep +0 -0
  58. package/src/entities/accounts/constants.js +5 -0
  59. package/src/entities/accounts/domains/extract-auth0-id-token-or-access-token.js +22 -0
  60. package/src/entities/accounts/domains/index.js +5 -0
  61. package/src/entities/accounts/domains/validate-account-permissions.js +36 -0
  62. package/src/entities/accounts/domains/validate-logo-size.js +25 -0
  63. package/src/entities/accounts/index.js +5 -0
  64. package/src/entities/accounts/repos/accounts.repo.js +63 -0
  65. package/src/entities/credentials/domains/index.js +3 -0
  66. package/src/entities/credentials/domains/offer-to-credential-mongo-dto.js +43 -0
  67. package/src/entities/credentials/index.js +6 -0
  68. package/src/entities/credentials/orchestrators/index.js +3 -0
  69. package/src/entities/credentials/orchestrators/load-additional-render-info.js +65 -0
  70. package/src/entities/credentials/repos/credentials.repo.js +132 -0
  71. package/src/entities/credentials/schemas/index.js +4 -0
  72. package/src/entities/credentials/schemas/webwallet-credential-response.schema.js +138 -0
  73. package/src/entities/credentials/schemas/webwallet-credentials-response.schemas.js +95 -0
  74. package/src/entities/credentials/schemas/webwallet-display-descriptor-response.schema.js +106 -0
  75. package/src/entities/disclosures/index.js +4 -0
  76. package/src/entities/disclosures/repos/disclosures.repo.js +31 -0
  77. package/src/entities/disclosures/schemas/index.js +10 -0
  78. package/src/entities/disclosures/schemas/webwallet-disclosure.schema.js +39 -0
  79. package/src/entities/disclosures/schemas/webwallet-presentation-request-field.schema.js +45 -0
  80. package/src/entities/disclosures/schemas/webwallet-presentation-request-filter.schema.js +30 -0
  81. package/src/entities/disclosures/schemas/webwallet-presentation-request-format.schema.js +36 -0
  82. package/src/entities/disclosures/schemas/webwallet-presentation-request-input-descriptors.schema.js +111 -0
  83. package/src/entities/disclosures/schemas/webwallet-presentation-request-schema.schema.js +14 -0
  84. package/src/entities/disclosures/schemas/webwallet-presentation-request-submission-requirements.schema.js +37 -0
  85. package/src/entities/disclosures/schemas/webwallet-presentation-request.schema.js +79 -0
  86. package/src/entities/index.js +6 -0
  87. package/src/entities/issuing/domain/constants.js +8 -0
  88. package/src/entities/issuing/domain/does-user-have-fresh-pending-verification.js +26 -0
  89. package/src/entities/issuing/domain/get-credentials-from-offers.js +18 -0
  90. package/src/entities/issuing/domain/index.js +5 -0
  91. package/src/entities/issuing/index.js +5 -0
  92. package/src/entities/issuing/orchestrators/build-issuing-input-credentials.js +35 -0
  93. package/src/entities/issuing/orchestrators/generate-offers-by-deep-link.js +74 -0
  94. package/src/entities/issuing/orchestrators/get-identity-issuer.js +35 -0
  95. package/src/entities/issuing/orchestrators/get-identity-offers-by-deeplink.js +74 -0
  96. package/src/entities/issuing/orchestrators/index.js +6 -0
  97. package/src/entities/issuing/schemas/index.js +9 -0
  98. package/src/entities/issuing/schemas/webwallet-credential-manifest.schema.js +198 -0
  99. package/src/errors/error-codes.js +12 -0
  100. package/src/fetchers/career-wallet/create-account-fetcher.js +7 -0
  101. package/src/fetchers/career-wallet/create-did-fetcher.js +17 -0
  102. package/src/fetchers/career-wallet/get-app-config.js +11 -0
  103. package/src/fetchers/career-wallet/get-consents.js +13 -0
  104. package/src/fetchers/career-wallet/get-credential-categories.js +7 -0
  105. package/src/fetchers/career-wallet/get-personas.js +7 -0
  106. package/src/fetchers/career-wallet/index.js +12 -0
  107. package/src/fetchers/career-wallet/post-consent.js +9 -0
  108. package/src/fetchers/career-wallet/send-feedback.js +14 -0
  109. package/src/fetchers/career-wallet/sign-fetcher.js +14 -0
  110. package/src/fetchers/career-wallet/verify-id-credential-confirm-code.js +19 -0
  111. package/src/fetchers/career-wallet/verify-id-credential-request-code.js +20 -0
  112. package/src/fetchers/index.js +4 -0
  113. package/src/fetchers/lib-api/get-credential-display-schema.js +12 -0
  114. package/src/fetchers/lib-api/index.js +3 -0
  115. package/src/fetchers/linkedin/create-linkedin-post.js +45 -0
  116. package/src/fetchers/linkedin/get-access-token.js +26 -0
  117. package/src/fetchers/linkedin/get-linkedin-user-email.js +13 -0
  118. package/src/fetchers/linkedin/get-linkedin-user-id.js +16 -0
  119. package/src/fetchers/linkedin/index.js +9 -0
  120. package/src/fetchers/linkedin/register-image-to-upload.js +30 -0
  121. package/src/fetchers/linkedin/revoke-linkedin-access.js +20 -0
  122. package/src/fetchers/linkedin/upload-image-to-linkedin.js +16 -0
  123. package/src/index.js +15 -0
  124. package/src/init-server.js +108 -0
  125. package/src/plugins/crypto-services/index.js +5 -0
  126. package/src/plugins/crypto-services/jwt-sign-service-impl.js +72 -0
  127. package/src/plugins/crypto-services/jwt-verify-service-impl.js +21 -0
  128. package/src/plugins/crypto-services/key-service-impl.js +28 -0
  129. package/src/plugins/fetch-errors-handler-plugin.js +64 -0
  130. package/src/plugins/index.js +4 -0
  131. package/src/plugins/vnf-sdk-plugin.js +53 -0
  132. package/src/standalone.js +8 -0
  133. package/test/accounts-controller.test.js +618 -0
  134. package/test/consent-controller.test.js +185 -0
  135. package/test/credentials-controller.test.js +307 -0
  136. package/test/crypro-services/jwt-sign-service-impl.test.js +83 -0
  137. package/test/crypro-services/jwt-verify-service-impl.test.js +27 -0
  138. package/test/crypro-services/key-service-impl.test.js +76 -0
  139. package/test/crypro-services/mocks/index.js +4 -0
  140. package/test/crypro-services/mocks/jwt-mock.js +15 -0
  141. package/test/crypro-services/mocks/public-jwk.js +14 -0
  142. package/test/disclosures-controller/disclosure-credentials.test.js +428 -0
  143. package/test/disclosures-controller/get-disclosures.test.js +169 -0
  144. package/test/disclosures-controller/mocks/get-credential-manifest.js +20 -0
  145. package/test/disclosures-controller/mocks/index.js +6 -0
  146. package/test/disclosures-controller/mocks/presentation-request.js +32 -0
  147. package/test/disclosures-controller/mocks/presentation-submission.js +21 -0
  148. package/test/disclosures-controller/mocks/submission-result.js +19 -0
  149. package/test/factories/accounts.js +25 -0
  150. package/test/factories/credentials.js +66 -0
  151. package/test/factories/disclosures.js +106 -0
  152. package/test/feedback-controller.test.js +125 -0
  153. package/test/fetch-errors-handler-plugin.test.js +97 -0
  154. package/test/filter-deleted-credentials-extension.test.js +82 -0
  155. package/test/helpers/.env.test +10 -0
  156. package/test/helpers/nock-consent-add.js +16 -0
  157. package/test/helpers/nock-consents-get.js +15 -0
  158. package/test/helpers/nock-feedback.js +9 -0
  159. package/test/helpers/nock-linkedin-access-token.js +9 -0
  160. package/test/helpers/nock-linkedin-email.js +15 -0
  161. package/test/helpers/nock-linkedin-image-register.js +28 -0
  162. package/test/helpers/nock-linkedin-me.js +13 -0
  163. package/test/helpers/nock-linkedin-post.js +37 -0
  164. package/test/helpers/nock-linkedin-revoke.js +9 -0
  165. package/test/helpers/nock-test-personas.js +13 -0
  166. package/test/helpers/webwallet-build-fastify.js +17 -0
  167. package/test/issuing-controller/issuing-by-deeplink-empty-offers.test.js +142 -0
  168. package/test/issuing-controller/issuing-by-deeplink-failed-offers.test.js +142 -0
  169. package/test/issuing-controller/issuing-by-deeplink.test.js +492 -0
  170. package/test/issuing-controller/issuing-identity-credentials.test.js +377 -0
  171. package/test/issuing-controller/mocks/accept-offers-response.js +90 -0
  172. package/test/issuing-controller/mocks/accepted-credentials.js +47 -0
  173. package/test/issuing-controller/mocks/credential-manifest-presentation.js +72 -0
  174. package/test/issuing-controller/mocks/credential-manifest.js +45 -0
  175. package/test/issuing-controller/mocks/identity-issuing/accept-offers.js +22 -0
  176. package/test/issuing-controller/mocks/identity-issuing/confirm-verification-code.js +5 -0
  177. package/test/issuing-controller/mocks/identity-issuing/get-app-config.js +52 -0
  178. package/test/issuing-controller/mocks/identity-issuing/get-organization.js +118 -0
  179. package/test/issuing-controller/mocks/identity-issuing/index.js +6 -0
  180. package/test/issuing-controller/mocks/index.js +6 -0
  181. package/test/issuing-controller/mocks/issuers.js +126 -0
  182. package/test/issuing-controller/mocks/offers.js +48 -0
  183. package/test/issuing-controller/mocks/schema.js +107 -0
  184. package/test/linkedin-controller.test.js +452 -0
  185. package/test/mocks/credential-categories.js +115 -0
  186. package/test/mocks/credentials.js +15 -0
  187. package/test/mocks/didjwk.js +25 -0
  188. package/test/mocks/index.js +7 -0
  189. package/test/mocks/issuers.js +88 -0
  190. package/test/mocks/jwk.js +53 -0
  191. package/test/mocks/schema.js +107 -0
  192. package/test/root.test.js +42 -0
  193. package/test/vcl-sdk-plugin.test.js +86 -0
@@ -0,0 +1,108 @@
1
+ const { corsPlugin } = require('@velocitycareerlabs/fastify-plugins');
2
+ const initRequest = require('@velocitycareerlabs/request');
3
+ const AutoLoad = require('@fastify/autoload');
4
+ const path = require('path');
5
+ const { pick } = require('lodash/fp');
6
+ const { fetchErrorsHandlerPlugin, vnfSdkPlugin } = require('./plugins');
7
+
8
+ const initServer = (server) => {
9
+ server
10
+ .register(fetchErrorsHandlerPlugin)
11
+ .register(corsPlugin)
12
+ .register(AutoLoad, {
13
+ dir: path.join(__dirname, 'controllers'),
14
+ indexPattern: /.*repo(\.ts|\.js|\.cjs|\.mjs)$/,
15
+ scriptPattern: /.*repo(\.ts|\.js|\.cjs|\.mjs)$/,
16
+ })
17
+ .register(AutoLoad, {
18
+ dir: path.join(__dirname, 'entities'),
19
+ indexPattern: /.*repo(\.ts|\.js|\.cjs|\.mjs)$/,
20
+ scriptPattern: /.*repo(\.ts|\.js|\.cjs|\.mjs)$/,
21
+ })
22
+ .register(AutoLoad, {
23
+ dir: path.join(__dirname, 'controllers'),
24
+ indexPattern: /^.*controller(\.ts|\.js|\.cjs|\.mjs)$/,
25
+ scriptPattern: /.*controller(\.ts|\.js|\.cjs|\.mjs)$/,
26
+ routeParams: true,
27
+ autoHooks: true,
28
+ cascadeHooks: true,
29
+ })
30
+ .decorate(
31
+ 'baseAgentFetch',
32
+ initRequest({
33
+ ...server.config,
34
+ prefixUrl: server.config.agentUrl,
35
+ })
36
+ )
37
+ .decorateRequest('agentFetch', null)
38
+ .addHook('preValidation', async (req) => {
39
+ req.agentFetch = server.baseAgentFetch(req);
40
+ })
41
+ .decorate(
42
+ 'baseRegistrarFetch',
43
+ initRequest({
44
+ ...server.config,
45
+ prefixUrl: server.config.registrarUrl,
46
+ })
47
+ )
48
+ .decorateRequest('registrarFetch', null)
49
+ .addHook('preValidation', async (req) => {
50
+ req.registrarFetch = server.baseRegistrarFetch(req);
51
+ })
52
+ .decorate(
53
+ 'baseLibFetch',
54
+ initRequest({
55
+ ...pick(['nodeEnv', 'requestTimeout', 'traceIdHeader'], server.config),
56
+ prefixUrl: server.config.libUrl,
57
+ })
58
+ )
59
+ .decorateRequest('libFetch', null)
60
+ .addHook('preValidation', async (req) => {
61
+ req.libFetch = server.baseLibFetch(req);
62
+ })
63
+ .decorate(
64
+ 'baseCareerWalletFetch',
65
+ initRequest({
66
+ ...server.config,
67
+ prefixUrl: server.config.careerWalletUrl,
68
+ })
69
+ )
70
+ .decorate(
71
+ 'globalCareerWalletFetch',
72
+ server.baseCareerWalletFetch({ log: server.log })
73
+ )
74
+ .decorateRequest('careerWalletFetch', null)
75
+ .addHook('preValidation', async (req) => {
76
+ req.careerWalletFetch = server.baseCareerWalletFetch(req);
77
+ })
78
+ .decorate(
79
+ 'baseLinkedInFetch',
80
+ initRequest({
81
+ ...server.config,
82
+ prefixUrl: server.config.linkedIn.apiUrl,
83
+ })
84
+ )
85
+ .decorateRequest('linkedInFetch', null)
86
+ .addHook('preValidation', async (req) => {
87
+ req.linkedInFetch = server.baseLinkedInFetch(req);
88
+ })
89
+ .decorate(
90
+ 'baseLinkedInAuthFetch',
91
+ initRequest({
92
+ ...server.config,
93
+ prefixUrl: server.config.linkedIn.authUrl,
94
+ })
95
+ )
96
+ .decorateRequest('linkedInAuthFetch', null)
97
+ .addHook('preValidation', async (req) => {
98
+ req.linkedInAuthFetch = server.baseLinkedInAuthFetch(req);
99
+ })
100
+ .register(vnfSdkPlugin)
101
+ .addHook('preValidation', async (req) => {
102
+ req.vclSdk = server.vclSdk;
103
+ });
104
+
105
+ return server;
106
+ };
107
+
108
+ module.exports = { initServer };
@@ -0,0 +1,5 @@
1
+ module.exports = {
2
+ ...require('./key-service-impl'),
3
+ ...require('./jwt-sign-service-impl'),
4
+ ...require('./jwt-verify-service-impl'),
5
+ };
@@ -0,0 +1,72 @@
1
+ const { VCLJwt } = require('@velocitycareerlabs/vnf-nodejs-wallet-sdk');
2
+ const { signFetcher } = require('../../fetchers/career-wallet/sign-fetcher');
3
+
4
+ const JwtSignServiceImpl = (context) => {
5
+ const sign = async (
6
+ jwtDescriptor,
7
+ didJwk,
8
+ nonce,
9
+ remoteCryptoServicesToken
10
+ ) => {
11
+ const payload = generateJwtPayloadToSign(jwtDescriptor, nonce, didJwk);
12
+ try {
13
+ const signedJwtRes = await signFetcher(
14
+ payload,
15
+ remoteCryptoServicesToken,
16
+ { ...context, careerWalletFetch: context.globalCareerWalletFetch }
17
+ );
18
+ const signedJwt = signedJwtRes.compactJwt;
19
+ return new Promise((resolve) => {
20
+ resolve(VCLJwt.fromEncodedJwt(signedJwt));
21
+ });
22
+ } catch (e) {
23
+ return new Promise((resolve, reject) => {
24
+ reject(e);
25
+ });
26
+ }
27
+ };
28
+ return { sign };
29
+ };
30
+
31
+ const KeyKeyId = 'keyId';
32
+ const KeyJwk = 'jwk';
33
+ const KeyKid = 'kid';
34
+ const KeyIss = 'iss';
35
+ const KeyAud = 'aud';
36
+ const KeyJti = 'jti';
37
+ const KeyNonce = 'nonce';
38
+
39
+ const KeyHeader = 'header';
40
+ const KeyOptions = 'options';
41
+ const KeyPayload = 'payload';
42
+
43
+ const generateJwtPayloadToSign = (jwtDescriptor, nonce, didJwk) => {
44
+ const header = didJwk
45
+ ? {
46
+ [KeyJwk]: didJwk.publicJwk.valueJson,
47
+ [KeyKid]: didJwk.kid,
48
+ }
49
+ : {};
50
+
51
+ const options = didJwk
52
+ ? {
53
+ [KeyKeyId]: didJwk.keyId,
54
+ }
55
+ : {};
56
+
57
+ const payload = { ...jwtDescriptor.payload };
58
+ payload[KeyNonce] = nonce;
59
+ payload[KeyAud] = jwtDescriptor.aud;
60
+ payload[KeyJti] = jwtDescriptor.jti;
61
+ payload[KeyIss] = jwtDescriptor.iss;
62
+
63
+ return {
64
+ [KeyHeader]: header,
65
+ [KeyPayload]: payload,
66
+ [KeyOptions]: options,
67
+ };
68
+ };
69
+
70
+ module.exports = {
71
+ JwtSignServiceImpl,
72
+ };
@@ -0,0 +1,21 @@
1
+ const { jwtVerify } = require('@velocitycareerlabs/jwt');
2
+
3
+ const JwtVerifyServiceImpl = () => {
4
+ const verify = async (jwt, publicJwk) => {
5
+ try {
6
+ await jwtVerify(jwt.encodedJwt, publicJwk.valueJson);
7
+ return new Promise((resolve) => {
8
+ resolve(true);
9
+ });
10
+ } catch (e) {
11
+ return new Promise((resolve, reject) => {
12
+ reject(e);
13
+ });
14
+ }
15
+ };
16
+ return { verify };
17
+ };
18
+
19
+ module.exports = {
20
+ JwtVerifyServiceImpl,
21
+ };
@@ -0,0 +1,28 @@
1
+ const { VCLDidJwk } = require('@velocitycareerlabs/vnf-nodejs-wallet-sdk');
2
+ const {
3
+ createDidForAccount,
4
+ } = require('../../fetchers/career-wallet/create-did-fetcher');
5
+
6
+ const KeyServiceImpl = (context) => {
7
+ const generateDidJwk = async (didJwkDescriptor) => {
8
+ try {
9
+ const didJwkJson = await createDidForAccount(
10
+ didJwkDescriptor.signatureAlgorithm,
11
+ didJwkDescriptor.remoteCryptoServicesToken,
12
+ { ...context, careerWalletFetch: context.globalCareerWalletFetch }
13
+ );
14
+ return new Promise((resolve) => {
15
+ resolve(VCLDidJwk.fromJSON(didJwkJson));
16
+ });
17
+ } catch (e) {
18
+ return new Promise((resolve, reject) => {
19
+ reject(e);
20
+ });
21
+ }
22
+ };
23
+ return { generateDidJwk };
24
+ };
25
+
26
+ module.exports = {
27
+ KeyServiceImpl,
28
+ };
@@ -0,0 +1,64 @@
1
+ const fp = require('fastify-plugin');
2
+ const newError = require('http-errors');
3
+ const { HTTPError } = require('got');
4
+ const { isObject } = require('lodash/fp');
5
+ const { WebWalletServerError } = require('../errors/error-codes');
6
+
7
+ const fetchErrorsHandlerPlugin = (fastify, options, next) => {
8
+ fastify.setErrorHandler((error, request, reply) => {
9
+ const { sendError = () => {} } = fastify;
10
+
11
+ try {
12
+ return handleHttpErrors(error);
13
+ } catch (modifiedError) {
14
+ sendError(error);
15
+ return reply.send(modifiedError);
16
+ }
17
+ });
18
+
19
+ next();
20
+ };
21
+
22
+ const handleHttpErrors = (error) => {
23
+ if (error instanceof HTTPError) {
24
+ handleHTTPError(error);
25
+ } else {
26
+ handleGenericError(error);
27
+ }
28
+ };
29
+
30
+ const handleHTTPError = (error) => {
31
+ const errorBody = parseErrorBody(error.response.body);
32
+ throw newError(
33
+ error.response.statusCode,
34
+ errorBody?.message || errorBody || error.response.statusMessage,
35
+ {
36
+ ...(isObject(errorBody) ? errorBody : {}),
37
+ }
38
+ );
39
+ };
40
+
41
+ const handleGenericError = (error) => {
42
+ if (!error.errorCode) {
43
+ throw newError(error.statusCode || 500, error.message, {
44
+ ...error,
45
+ errorCode: WebWalletServerError,
46
+ });
47
+ } else {
48
+ throw error;
49
+ }
50
+ };
51
+
52
+ const parseErrorBody = (errorBody) => {
53
+ try {
54
+ return JSON.parse(errorBody);
55
+ } catch (error) {
56
+ return errorBody;
57
+ }
58
+ };
59
+ module.exports = {
60
+ fetchErrorsHandlerPlugin: fp(fetchErrorsHandlerPlugin, {
61
+ fastify: '>=2.0.0',
62
+ name: 'fetch-errors-handler-plugin',
63
+ }),
64
+ };
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ ...require('./fetch-errors-handler-plugin'),
3
+ ...require('./vnf-sdk-plugin'),
4
+ };
@@ -0,0 +1,53 @@
1
+ const fp = require('fastify-plugin');
2
+ const {
3
+ VCLProvider,
4
+ VCLInitializationDescriptor,
5
+ VCLCryptoServicesDescriptor,
6
+ VCLXVnfProtocolVersion,
7
+ VCLEnvironment,
8
+ } = require('@velocitycareerlabs/vnf-nodejs-wallet-sdk');
9
+ const {
10
+ KeyServiceImpl,
11
+ JwtSignServiceImpl,
12
+ JwtVerifyServiceImpl,
13
+ } = require('./crypto-services');
14
+
15
+ const vnfSdkPlugin = async (fastify) => {
16
+ const { log, sendError, config } = fastify;
17
+
18
+ try {
19
+ const vclSdk = VCLProvider.getInstance();
20
+
21
+ const initializationDescriptor = new VCLInitializationDescriptor(
22
+ config.vclSdkEnvironment || VCLEnvironment.Prod,
23
+ config.vclSdkProtocolVersion ||
24
+ VCLXVnfProtocolVersion.XVnfProtocolVersion2,
25
+ new VCLCryptoServicesDescriptor(
26
+ KeyServiceImpl(fastify),
27
+ JwtSignServiceImpl(fastify),
28
+ JwtVerifyServiceImpl()
29
+ ),
30
+ log
31
+ );
32
+
33
+ await vclSdk.initialize(initializationDescriptor);
34
+
35
+ fastify
36
+ .decorate('vclSdk', vclSdk)
37
+ .decorateRequest('vclSdk', null)
38
+ .addHook('preValidation', async (req) => {
39
+ req.vclSdk = fastify.vclSdk;
40
+ });
41
+ } catch (error) {
42
+ log.error(error);
43
+ sendError(error);
44
+ throw error;
45
+ }
46
+ };
47
+
48
+ module.exports = {
49
+ vnfSdkPlugin: fp(vnfSdkPlugin, {
50
+ fastify: '>=2.0.0',
51
+ name: 'vnf-sdk-plugin',
52
+ }),
53
+ };
@@ -0,0 +1,8 @@
1
+ /* istanbul ignore file */
2
+ // eslint-disable-next-line import/no-extraneous-dependencies
3
+ const dotenv = require('dotenv');
4
+
5
+ dotenv.config({ path: '.standalone.env' });
6
+ dotenv.config({ path: '.localdev.env' });
7
+
8
+ require('./index');