@sphereon/ssi-sdk.w3c-vc-api 0.13.1-next.18 → 0.13.1-next.23

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.
@@ -1,27 +1,9 @@
1
- import { VerifiableCredential } from '@veramo/core';
1
+ import { ISingleEndpointOpts } from '@sphereon/ssi-sdk.express-support';
2
2
  import { Router } from 'express';
3
- import { IRequiredContext, IVCAPIIssueOpts } from './types';
4
- export declare function issueCredentialEndpoint(router: Router, context: IRequiredContext, opts?: {
5
- issueCredentialOpts?: IVCAPIIssueOpts;
6
- issueCredentialPath?: string;
7
- persistIssuedCredentials?: boolean;
8
- }): void;
9
- export declare function getCredentialsEndpoint(router: Router, context: IRequiredContext, opts?: {
10
- getCredentialsPath?: string;
11
- }): void;
12
- export declare function getCredentialEndpoint(router: Router, context: IRequiredContext, opts?: {
13
- getCredentialPath?: string;
14
- }): void;
15
- export declare function verifyCredentialEndpoint(router: Router, context: IRequiredContext, opts?: {
16
- verifyCredentialPath?: string;
17
- fetchRemoteContexts?: boolean;
18
- }): void;
19
- export declare function deleteCredentialEndpoint(router: Router, context: IRequiredContext, opts?: {
20
- deleteCredentialsPath?: string;
21
- }): void;
22
- export declare function getCredentialByIdOrHash(context: IRequiredContext, idOrHash: string): Promise<{
23
- id: string;
24
- hash?: string;
25
- vc?: VerifiableCredential;
26
- }>;
3
+ import { IIssueCredentialEndpointOpts, IRequiredContext, IVerifyCredentialEndpointOpts } from './types';
4
+ export declare function issueCredentialEndpoint(router: Router, context: IRequiredContext, opts?: IIssueCredentialEndpointOpts): void;
5
+ export declare function getCredentialsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts): void;
6
+ export declare function getCredentialEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts): void;
7
+ export declare function verifyCredentialEndpoint(router: Router, context: IRequiredContext, opts?: IVerifyCredentialEndpointOpts): void;
8
+ export declare function deleteCredentialEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts): void;
27
9
  //# sourceMappingURL=api-functions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,mBAAmB,CAAC,EAAE,eAAe,CAAA;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC,QAwBF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,QAWF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,QAkBF;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,QAqBF;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,QAsBF;AAWD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,oBAAoB,CAAA;CAC1B,CAAC,CA0BD"}
1
+ {"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,mBAAmB,EAAqB,MAAM,mCAAmC,CAAA;AAGrG,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AAGnD,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAmB,6BAA6B,EAAE,MAAM,SAAS,CAAA;AAExH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,4BAA4B,QA6BrH;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAe3G;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAsB1G;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,6BAA6B,QAwBvH;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,mBAAmB,QAyB7G"}
@@ -8,17 +8,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.getCredentialByIdOrHash = exports.deleteCredentialEndpoint = exports.verifyCredentialEndpoint = exports.getCredentialEndpoint = exports.getCredentialsEndpoint = exports.issueCredentialEndpoint = void 0;
15
+ exports.deleteCredentialEndpoint = exports.verifyCredentialEndpoint = exports.getCredentialEndpoint = exports.getCredentialsEndpoint = exports.issueCredentialEndpoint = void 0;
16
+ const ssi_sdk_core_1 = require("@sphereon/ssi-sdk.core");
17
+ const ssi_sdk_express_support_1 = require("@sphereon/ssi-sdk.express-support");
18
+ const passport_1 = __importDefault(require("passport"));
13
19
  const uuid_1 = require("uuid");
14
20
  function issueCredentialEndpoint(router, context, opts) {
15
21
  var _a;
16
- router.post((_a = opts === null || opts === void 0 ? void 0 : opts.issueCredentialPath) !== null && _a !== void 0 ? _a : '/credentials/issue', (request, response) => __awaiter(this, void 0, void 0, function* () {
17
- var _b, _c;
22
+ if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
23
+ console.log(`Issue credential endpoint is disabled`);
24
+ return;
25
+ }
26
+ const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/credentials/issue';
27
+ router.post(path, passport_1.default.authenticate('oauth-bearer'), (0, ssi_sdk_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
28
+ var _b;
18
29
  try {
19
30
  const credential = request.body.credential;
20
31
  if (!credential) {
21
- return sendErrorResponse(response, 400, 'No credential supplied');
32
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, 'No credential supplied');
22
33
  }
23
34
  if (!credential.id) {
24
35
  credential.id = `urn:uuid:${(0, uuid_1.v4)()}`;
@@ -26,63 +37,77 @@ function issueCredentialEndpoint(router, context, opts) {
26
37
  const issueOpts = opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts;
27
38
  const vc = yield context.agent.createVerifiableCredential({
28
39
  credential,
29
- save: (_b = opts === null || opts === void 0 ? void 0 : opts.persistIssuedCredentials) !== null && _b !== void 0 ? _b : true,
30
- proofFormat: (_c = issueOpts === null || issueOpts === void 0 ? void 0 : issueOpts.proofFormat) !== null && _c !== void 0 ? _c : 'lds',
31
- fetchRemoteContexts: (issueOpts === null || issueOpts === void 0 ? void 0 : issueOpts.fetchRemoteContexts) || true,
40
+ save: (opts === null || opts === void 0 ? void 0 : opts.persistIssuedCredentials) !== false,
41
+ proofFormat: (_b = issueOpts === null || issueOpts === void 0 ? void 0 : issueOpts.proofFormat) !== null && _b !== void 0 ? _b : 'lds',
42
+ fetchRemoteContexts: (issueOpts === null || issueOpts === void 0 ? void 0 : issueOpts.fetchRemoteContexts) !== false,
32
43
  });
33
44
  response.statusCode = 201;
34
45
  return response.send({ verifiableCredential: vc });
35
46
  }
36
47
  catch (e) {
37
- return sendErrorResponse(response, 500, e.message, e);
48
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 500, e.message, e);
38
49
  }
39
50
  }));
40
51
  }
41
52
  exports.issueCredentialEndpoint = issueCredentialEndpoint;
42
53
  function getCredentialsEndpoint(router, context, opts) {
43
54
  var _a;
44
- router.get((_a = opts === null || opts === void 0 ? void 0 : opts.getCredentialsPath) !== null && _a !== void 0 ? _a : '/credentials', (request, response) => __awaiter(this, void 0, void 0, function* () {
55
+ if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
56
+ console.log(`Get credentials endpoint is disabled`);
57
+ return;
58
+ }
59
+ const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/credentials';
60
+ router.get(path, (0, ssi_sdk_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
45
61
  try {
46
62
  const uniqueVCs = yield context.agent.dataStoreORMGetVerifiableCredentials();
47
63
  response.statusCode = 202;
48
64
  return response.send(uniqueVCs.map((uVC) => uVC.verifiableCredential));
49
65
  }
50
66
  catch (e) {
51
- return sendErrorResponse(response, 500, e.message, e);
67
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 500, e.message, e);
52
68
  }
53
69
  }));
54
70
  }
55
71
  exports.getCredentialsEndpoint = getCredentialsEndpoint;
56
72
  function getCredentialEndpoint(router, context, opts) {
57
73
  var _a;
58
- router.get((_a = opts === null || opts === void 0 ? void 0 : opts.getCredentialPath) !== null && _a !== void 0 ? _a : '/credentials/:id', (request, response) => __awaiter(this, void 0, void 0, function* () {
74
+ if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
75
+ console.log(`Get credential endpoint is disabled`);
76
+ return;
77
+ }
78
+ const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/credentials/:id';
79
+ router.get(path, (0, ssi_sdk_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
59
80
  try {
60
81
  const id = request.params.id;
61
82
  if (!id) {
62
- return sendErrorResponse(response, 400, 'no id provided');
83
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, 'no id provided');
63
84
  }
64
- let vcInfo = yield getCredentialByIdOrHash(context, id);
85
+ let vcInfo = yield (0, ssi_sdk_core_1.getCredentialByIdOrHash)(context, id);
65
86
  if (!vcInfo.vc) {
66
- return sendErrorResponse(response, 404, `id ${id} not found`);
87
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 404, `id ${id} not found`);
67
88
  }
68
89
  response.statusCode = 200;
69
90
  return response.send(vcInfo.vc);
70
91
  }
71
92
  catch (e) {
72
- return sendErrorResponse(response, 500, e.message, e);
93
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 500, e.message, e);
73
94
  }
74
95
  }));
75
96
  }
76
97
  exports.getCredentialEndpoint = getCredentialEndpoint;
77
98
  function verifyCredentialEndpoint(router, context, opts) {
78
99
  var _a;
79
- router.post((_a = opts === null || opts === void 0 ? void 0 : opts.verifyCredentialPath) !== null && _a !== void 0 ? _a : '/credentials/verify', (request, response) => __awaiter(this, void 0, void 0, function* () {
100
+ if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
101
+ console.log(`Verify credential endpoint is disabled`);
102
+ return;
103
+ }
104
+ router.post((_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/credentials/verify', (0, ssi_sdk_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
80
105
  try {
81
106
  console.log(request.body);
82
107
  const credential = request.body.verifiableCredential;
83
108
  // const options: IIssueOptionsPayload = request.body.options
84
109
  if (!credential) {
85
- return sendErrorResponse(response, 400, 'No verifiable credential supplied');
110
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, 'No verifiable credential supplied');
86
111
  }
87
112
  const verifyResult = yield context.agent.verifyCredential({
88
113
  credential,
@@ -92,72 +117,38 @@ function verifyCredentialEndpoint(router, context, opts) {
92
117
  return response.send(verifyResult);
93
118
  }
94
119
  catch (e) {
95
- return sendErrorResponse(response, 500, e.message, e);
120
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 500, e.message, e);
96
121
  }
97
122
  }));
98
123
  }
99
124
  exports.verifyCredentialEndpoint = verifyCredentialEndpoint;
100
125
  function deleteCredentialEndpoint(router, context, opts) {
101
126
  var _a;
102
- router.delete((_a = opts === null || opts === void 0 ? void 0 : opts.deleteCredentialsPath) !== null && _a !== void 0 ? _a : '/credentials/:id', (request, response) => __awaiter(this, void 0, void 0, function* () {
127
+ if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
128
+ console.log(`Delete credential endpoint is disabled`);
129
+ return;
130
+ }
131
+ router.delete((_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/credentials/:id', (request, response) => __awaiter(this, void 0, void 0, function* () {
103
132
  try {
104
133
  const id = request.params.id;
105
134
  if (!id) {
106
- return sendErrorResponse(response, 400, 'no id provided');
135
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, 'no id provided');
107
136
  }
108
- let vcInfo = yield getCredentialByIdOrHash(context, id);
137
+ let vcInfo = yield (0, ssi_sdk_core_1.getCredentialByIdOrHash)(context, id);
109
138
  if (!vcInfo.vc || !vcInfo.hash) {
110
- return sendErrorResponse(response, 404, `id ${id} not found`);
139
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 404, `id ${id} not found`);
111
140
  }
112
141
  const success = context.agent.dataStoreDeleteVerifiableCredential({ hash: vcInfo.hash });
113
142
  if (!success) {
114
- return sendErrorResponse(response, 400, `Could not delete Verifiable Credential with id ${id}`);
143
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 400, `Could not delete Verifiable Credential with id ${id}`);
115
144
  }
116
145
  response.statusCode = 200;
117
146
  return response.send();
118
147
  }
119
148
  catch (e) {
120
- return sendErrorResponse(response, 500, e.message, e);
149
+ return (0, ssi_sdk_express_support_1.sendErrorResponse)(response, 500, e.message, e);
121
150
  }
122
151
  }));
123
152
  }
124
153
  exports.deleteCredentialEndpoint = deleteCredentialEndpoint;
125
- function sendErrorResponse(response, statusCode, message, error) {
126
- console.log(message);
127
- if (error) {
128
- console.log(error);
129
- }
130
- response.statusCode = statusCode;
131
- return response.status(statusCode).send(message);
132
- }
133
- function getCredentialByIdOrHash(context, idOrHash) {
134
- return __awaiter(this, void 0, void 0, function* () {
135
- let vc;
136
- let hash;
137
- const uniqueVCs = yield context.agent.dataStoreORMGetVerifiableCredentials({
138
- where: [
139
- {
140
- column: 'id',
141
- value: [idOrHash],
142
- op: 'Equal',
143
- },
144
- ],
145
- });
146
- if (uniqueVCs.length === 0) {
147
- hash = idOrHash;
148
- vc = yield context.agent.dataStoreGetVerifiableCredential({ hash });
149
- }
150
- else {
151
- const uniqueVC = uniqueVCs[0];
152
- hash = uniqueVC.hash;
153
- vc = uniqueVC.verifiableCredential;
154
- }
155
- return {
156
- vc,
157
- id: idOrHash,
158
- hash,
159
- };
160
- });
161
- }
162
- exports.getCredentialByIdOrHash = getCredentialByIdOrHash;
163
154
  //# sourceMappingURL=api-functions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { GenericAuthArgs, ISingleEndpointOpts } from '@sphereon/ssi-sdk.express-support';
1
2
  import { IAgentContext, ICredentialIssuer, ICredentialPlugin, ICredentialVerifier, IDataStore, IDataStoreORM, IDIDManager, IKeyManager, IResolver } from '@veramo/core';
2
3
  import { IPresentationExchange } from '@sphereon/ssi-sdk.presentation-exchange';
3
4
  import { ProofFormat } from '@veramo/core/src/types/ICredentialIssuer';
@@ -6,26 +7,27 @@ export type IRequiredContext = IAgentContext<IRequiredPlugins>;
6
7
  interface IVCAPISecurityOpts {
7
8
  }
8
9
  export interface IVCAPIOpts {
9
- pathOpts?: IVCAPIPathOpts;
10
+ endpointOpts?: IVCAPIEndpointOpts;
10
11
  securityOpts?: IVCAPISecurityOpts;
11
12
  issueCredentialOpts?: IVCAPIIssueOpts;
12
- serverOpts?: IServerOpts;
13
13
  }
14
- export interface IServerOpts {
15
- port?: number;
16
- cookieSigningKey?: string;
17
- hostname?: string;
18
- }
19
- export interface IVCAPIPathOpts {
14
+ export interface IVCAPIEndpointOpts {
20
15
  basePath?: string;
21
- issueCredentialPath?: string;
22
- getCredentialsPath?: string;
23
- getCredentialPath?: string;
24
- deleteCredentialPath?: string;
25
- verifyCredentialPath?: string;
26
- verifyPresentationPath?: string;
16
+ globalAuth?: GenericAuthArgs;
17
+ issueCredential?: IIssueCredentialEndpointOpts;
18
+ getCredentials?: ISingleEndpointOpts;
19
+ getCredential?: ISingleEndpointOpts;
20
+ deleteCredential?: ISingleEndpointOpts;
21
+ verifyCredential?: IVerifyCredentialEndpointOpts;
22
+ verifyPresentation?: ISingleEndpointOpts;
23
+ }
24
+ export declare enum IVCIApiFeatures {
25
+ VC_VERIFY = "vc-verify",
26
+ VC_ISSUE = "vc-issue",
27
+ VC_PERSISTENCE = "vc-persist"
27
28
  }
28
29
  export interface IVCAPIIssueOpts {
30
+ enableFeatures?: IVCIApiFeatures[];
29
31
  persistIssuedCredentials?: boolean;
30
32
  /**
31
33
  * The desired format for the VerifiablePresentation to be created.
@@ -50,6 +52,13 @@ export interface IVCAPIIssueOpts {
50
52
  */
51
53
  fetchRemoteContexts?: boolean;
52
54
  }
55
+ export interface IIssueCredentialEndpointOpts extends ISingleEndpointOpts {
56
+ issueCredentialOpts?: IVCAPIIssueOpts;
57
+ persistIssuedCredentials?: boolean;
58
+ }
59
+ export interface IVerifyCredentialEndpointOpts extends ISingleEndpointOpts {
60
+ fetchRemoteContexts?: boolean;
61
+ }
53
62
  export interface IIssueOptionsPayload {
54
63
  created?: string;
55
64
  challenge?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACV,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GACvC,aAAa,GACb,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,SAAS,CAAA;AACX,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA;AAE9D,UAAU,kBAAkB;CAAG;AAE/B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,mBAAmB,CAAC,EAAE,eAAe,CAAA;IAErC,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAElC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IAExB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACxF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACV,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GACvC,aAAa,GACb,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,SAAS,CAAA;AACX,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA;AAE9D,UAAU,kBAAkB;CAAG;AAE/B,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,mBAAmB,CAAC,EAAE,eAAe,CAAA;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,eAAe,CAAC,EAAE,4BAA4B,CAAA;IAC9C,cAAc,CAAC,EAAE,mBAAmB,CAAA;IACpC,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,gBAAgB,CAAC,EAAE,mBAAmB,CAAA;IACtC,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;IAChD,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC;AAED,oBAAY,eAAe;IACzB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,cAAc,eAAe;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAA;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAElC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IAExB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,mBAAmB,CAAC,EAAE,eAAe,CAAA;IACrC,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
package/dist/types.js CHANGED
@@ -1,3 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IVCIApiFeatures = void 0;
4
+ var IVCIApiFeatures;
5
+ (function (IVCIApiFeatures) {
6
+ IVCIApiFeatures["VC_VERIFY"] = "vc-verify";
7
+ IVCIApiFeatures["VC_ISSUE"] = "vc-issue";
8
+ IVCIApiFeatures["VC_PERSISTENCE"] = "vc-persist";
9
+ })(IVCIApiFeatures = exports.IVCIApiFeatures || (exports.IVCIApiFeatures = {}));
3
10
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA6CA,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IACrB,gDAA6B,CAAA;AAC/B,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B"}
@@ -1,18 +1,20 @@
1
+ import { ExpressBuildResult } from '@sphereon/ssi-sdk.express-support';
1
2
  import { TAgent } from '@veramo/core';
2
- import { Express } from 'express';
3
+ import express, { Express } from 'express';
3
4
  import { IRequiredPlugins, IVCAPIOpts } from './types';
4
5
  export declare class VcApiServer {
6
+ get router(): express.Router;
5
7
  private readonly _express;
6
8
  private readonly _agent;
7
9
  private readonly _opts?;
10
+ private readonly _router;
8
11
  constructor(args: {
9
12
  agent: TAgent<IRequiredPlugins>;
10
- express?: Express;
13
+ expressArgs: ExpressBuildResult;
11
14
  opts?: IVCAPIOpts;
12
15
  });
13
16
  get agent(): TAgent<IRequiredPlugins>;
14
17
  get opts(): IVCAPIOpts | undefined;
15
18
  get express(): Express;
16
- private setupExpress;
17
19
  }
18
20
  //# sourceMappingURL=vc-api-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vc-api-server.d.ts","sourceRoot":"","sources":["../src/vc-api-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAIrC,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAQ1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEtD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAY;gBAEvB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE;IAyB3F,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAEpC;IAED,IAAI,IAAI,IAAI,UAAU,GAAG,SAAS,CAEjC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,CAAC,YAAY;CA2BrB"}
1
+ {"version":3,"file":"vc-api-server.d.ts","sourceRoot":"","sources":["../src/vc-api-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,OAAO,EAAE,EAAE,OAAO,EAAU,MAAM,SAAS,CAAA;AAQlD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAA;AAEvE,qBAAa,WAAW;IACtB,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAE3B;IAED,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;gBAEpB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAAC,WAAW,EAAE,kBAAkB,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE;IA6CzG,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAEpC;IAED,IAAI,IAAI,IAAI,UAAU,GAAG,SAAS,CAEjC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
@@ -1,62 +1,51 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  exports.VcApiServer = void 0;
30
7
  const ssi_sdk_core_1 = require("@sphereon/ssi-sdk.core");
31
- const body_parser_1 = __importDefault(require("body-parser"));
32
- const cookie_parser_1 = __importDefault(require("cookie-parser"));
33
- const dotenv = __importStar(require("dotenv-flow"));
34
8
  const express_1 = __importDefault(require("express"));
35
9
  const api_functions_1 = require("./api-functions");
10
+ const types_1 = require("./types");
36
11
  class VcApiServer {
12
+ get router() {
13
+ return this._router;
14
+ }
37
15
  constructor(args) {
38
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
16
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
39
17
  const { agent, opts } = args;
40
18
  this._agent = agent;
19
+ if ((_a = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _a === void 0 ? void 0 : _a.globalAuth) {
20
+ copyGlobalAuthToEndpoint(opts, 'issueCredential');
21
+ copyGlobalAuthToEndpoint(opts, 'getCredential');
22
+ copyGlobalAuthToEndpoint(opts, 'getCredentials');
23
+ copyGlobalAuthToEndpoint(opts, 'deleteCredential');
24
+ copyGlobalAuthToEndpoint(opts, 'verifyCredential');
25
+ }
41
26
  this._opts = opts;
42
- const existingExpress = !!args.express;
43
- this._express = (_a = args.express) !== null && _a !== void 0 ? _a : (0, express_1.default)();
44
- this.setupExpress(existingExpress);
45
- const router = express_1.default.Router();
27
+ this._express = args.expressArgs.express;
28
+ this._router = express_1.default.Router();
46
29
  const context = (0, ssi_sdk_core_1.agentContext)(agent);
30
+ const features = (_c = (_b = opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts) === null || _b === void 0 ? void 0 : _b.enableFeatures) !== null && _c !== void 0 ? _c : [
31
+ types_1.IVCIApiFeatures.VC_ISSUE,
32
+ types_1.IVCIApiFeatures.VC_PERSISTENCE,
33
+ types_1.IVCIApiFeatures.VC_VERIFY,
34
+ ];
35
+ console.log(`VC API enabled, with features: ${JSON.stringify(features)}`);
47
36
  // Credential endpoints
48
- (0, api_functions_1.issueCredentialEndpoint)(router, context, {
49
- issueCredentialOpts: opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts,
50
- issueCredentialPath: (_b = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _b === void 0 ? void 0 : _b.issueCredentialPath,
51
- });
52
- (0, api_functions_1.getCredentialEndpoint)(router, context, { getCredentialPath: (_c = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _c === void 0 ? void 0 : _c.getCredentialPath });
53
- (0, api_functions_1.getCredentialsEndpoint)(router, context, { getCredentialsPath: (_d = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _d === void 0 ? void 0 : _d.getCredentialsPath });
54
- (0, api_functions_1.deleteCredentialEndpoint)(router, context, { deleteCredentialsPath: (_e = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _e === void 0 ? void 0 : _e.deleteCredentialPath }); // not in spec. TODO: Authz
55
- (0, api_functions_1.verifyCredentialEndpoint)(router, context, {
56
- verifyCredentialPath: (_f = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _f === void 0 ? void 0 : _f.verifyCredentialPath,
57
- fetchRemoteContexts: (_g = opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts) === null || _g === void 0 ? void 0 : _g.fetchRemoteContexts,
58
- });
59
- this._express.use((_j = (_h = opts === null || opts === void 0 ? void 0 : opts.pathOpts) === null || _h === void 0 ? void 0 : _h.basePath) !== null && _j !== void 0 ? _j : '', router);
37
+ if (features.includes(types_1.IVCIApiFeatures.VC_ISSUE)) {
38
+ (0, api_functions_1.issueCredentialEndpoint)(this.router, context, Object.assign(Object.assign({}, (_d = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _d === void 0 ? void 0 : _d.issueCredential), { issueCredentialOpts: opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts }));
39
+ }
40
+ if (features.includes(types_1.IVCIApiFeatures.VC_PERSISTENCE)) {
41
+ (0, api_functions_1.getCredentialEndpoint)(this.router, context, (_e = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _e === void 0 ? void 0 : _e.getCredential);
42
+ (0, api_functions_1.getCredentialsEndpoint)(this.router, context, (_f = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _f === void 0 ? void 0 : _f.getCredentials);
43
+ (0, api_functions_1.deleteCredentialEndpoint)(this.router, context, (_g = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _g === void 0 ? void 0 : _g.deleteCredential); // not in spec.
44
+ }
45
+ if (features.includes(types_1.IVCIApiFeatures.VC_VERIFY)) {
46
+ (0, api_functions_1.verifyCredentialEndpoint)(this.router, context, Object.assign(Object.assign({}, (_h = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _h === void 0 ? void 0 : _h.verifyCredential), { fetchRemoteContexts: (_j = opts === null || opts === void 0 ? void 0 : opts.issueCredentialOpts) === null || _j === void 0 ? void 0 : _j.fetchRemoteContexts }));
47
+ }
48
+ this._express.use((_l = (_k = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _k === void 0 ? void 0 : _k.basePath) !== null && _l !== void 0 ? _l : '', this.router);
60
49
  }
61
50
  get agent() {
62
51
  return this._agent;
@@ -67,32 +56,15 @@ class VcApiServer {
67
56
  get express() {
68
57
  return this._express;
69
58
  }
70
- setupExpress(existingExpress) {
71
- var _a, _b, _c, _d, _e, _f;
72
- dotenv.config();
73
- if (!existingExpress) {
74
- const port = ((_b = (_a = this.opts) === null || _a === void 0 ? void 0 : _a.serverOpts) === null || _b === void 0 ? void 0 : _b.port) || process.env.PORT || 5000;
75
- const secret = ((_d = (_c = this.opts) === null || _c === void 0 ? void 0 : _c.serverOpts) === null || _d === void 0 ? void 0 : _d.cookieSigningKey) || process.env.COOKIE_SIGNING_KEY;
76
- const hostname = ((_f = (_e = this.opts) === null || _e === void 0 ? void 0 : _e.serverOpts) === null || _f === void 0 ? void 0 : _f.hostname) || '0.0.0.0';
77
- this._express.use((req, res, next) => {
78
- res.header('Access-Control-Allow-Origin', '*');
79
- // Request methods you wish to allow
80
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
81
- // Request headers you wish to allow
82
- res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
83
- // Set to true if you need the website to include cookies in the requests sent
84
- // to the API (e.g. in case you use sessions)
85
- res.setHeader('Access-Control-Allow-Credentials', 'true');
86
- next();
87
- });
88
- // this.express.use(cors({ credentials: true }));
89
- // this.express.use('/proxy', proxy('www.gssoogle.com'));
90
- this._express.use(body_parser_1.default.urlencoded({ extended: true }));
91
- this._express.use(body_parser_1.default.json());
92
- this._express.use((0, cookie_parser_1.default)(secret));
93
- this._express.listen(port, hostname, () => console.log(`Listening on ${hostname}, port ${port}`));
94
- }
95
- }
96
59
  }
97
60
  exports.VcApiServer = VcApiServer;
61
+ function copyGlobalAuthToEndpoint(opts, key) {
62
+ var _a, _b;
63
+ if ((_a = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _a === void 0 ? void 0 : _a.globalAuth) {
64
+ // @ts-ignore
65
+ opts.endpointOpts[key] = Object.assign(Object.assign({}, opts.endpointOpts[key]), {
66
+ // @ts-ignore
67
+ endpoint: Object.assign(Object.assign({}, opts.endpointOpts.globalAuth), (_b = opts.endpointOpts[key]) === null || _b === void 0 ? void 0 : _b.endpoint) });
68
+ }
69
+ }
98
70
  //# sourceMappingURL=vc-api-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vc-api-server.js","sourceRoot":"","sources":["../src/vc-api-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vc-api-server.js","sourceRoot":"","sources":["../src/vc-api-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.w3c-vc-api",
3
- "version": "0.13.1-next.18+61bdfaf",
3
+ "version": "0.13.1-next.23+6c616f9",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,15 +11,17 @@
11
11
  "start:dev": "ts-node __tests__/agent.ts"
12
12
  },
13
13
  "dependencies": {
14
- "@sphereon/did-auth-siop": "0.3.2-unstable.6",
15
- "@sphereon/ssi-sdk.core": "0.13.1-next.18+61bdfaf",
16
- "@sphereon/ssi-sdk.kv-store-temp": "0.13.1-next.18+61bdfaf",
17
- "@sphereon/ssi-sdk.presentation-exchange": "0.13.1-next.18+61bdfaf",
18
- "@sphereon/ssi-types": "0.13.1-next.18+61bdfaf",
14
+ "@sphereon/did-auth-siop": "0.3.2-unstable.7",
15
+ "@sphereon/ssi-sdk.core": "0.13.1-next.23+6c616f9",
16
+ "@sphereon/ssi-sdk.express-support": "0.13.1-next.23+6c616f9",
17
+ "@sphereon/ssi-sdk.kv-store-temp": "0.13.1-next.23+6c616f9",
18
+ "@sphereon/ssi-sdk.presentation-exchange": "0.13.1-next.23+6c616f9",
19
+ "@sphereon/ssi-types": "0.13.1-next.23+6c616f9",
19
20
  "@types/uuid": "^9.0.1",
20
21
  "@veramo/core": "4.2.0",
21
22
  "@veramo/credential-w3c": "4.2.0",
22
23
  "body-parser": "^1.19.0",
24
+ "casbin": "^5.26.1",
23
25
  "cookie-parser": "^1.4.5",
24
26
  "cors": "^2.8.5",
25
27
  "cross-fetch": "^3.1.5",
@@ -29,14 +31,11 @@
29
31
  "uuid": "^8.3.2"
30
32
  },
31
33
  "devDependencies": {
32
- "@decentralized-identity/ion-sdk": "^0.6.0",
33
34
  "@sphereon/did-uni-client": "^0.6.0",
34
- "@sphereon/pex": "^2.0.1",
35
- "@sphereon/pex-models": "^2.0.2",
36
- "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.4",
37
- "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.12.2-next.4",
38
- "@sphereon/ssi-sdk.data-store": "0.13.1-next.18+61bdfaf",
39
- "@sphereon/ssi-sdk.vc-handler-ld-local": "0.13.1-next.18+61bdfaf",
35
+ "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.5",
36
+ "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.12.2-next.5",
37
+ "@sphereon/ssi-sdk.data-store": "0.13.1-next.23+6c616f9",
38
+ "@sphereon/ssi-sdk.vc-handler-ld-local": "0.13.1-next.23+6c616f9",
40
39
  "@types/body-parser": "^1.19.2",
41
40
  "@types/cookie-parser": "^1.4.3",
42
41
  "@types/cors": "^2.8.13",
@@ -44,7 +43,10 @@
44
43
  "@types/dotenv-flow": "^3.2.0",
45
44
  "@types/express": "^4.17.13",
46
45
  "@types/express-http-proxy": "^1.6.3",
46
+ "@types/morgan": "^1.9.4",
47
47
  "@types/node": "^18.15.0",
48
+ "@types/passport": "^1.0.12",
49
+ "@types/passport-azure-ad": "^4.3.1",
48
50
  "@veramo/data-store": "4.2.0",
49
51
  "@veramo/did-manager": "4.2.0",
50
52
  "@veramo/did-provider-ethr": "4.2.0",
@@ -56,7 +58,10 @@
56
58
  "@veramo/kms-local": "4.2.0",
57
59
  "@veramo/utils": "4.2.0",
58
60
  "did-resolver": "^4.1.0",
61
+ "morgan": "^1.10.0",
59
62
  "nock": "^13.2.1",
63
+ "passport": "^0.6.0",
64
+ "passport-azure-ad": "^4.3.5",
60
65
  "ts-node": "^10.9.1",
61
66
  "typeorm": "^0.3.12"
62
67
  },
@@ -72,23 +77,14 @@
72
77
  "publishConfig": {
73
78
  "access": "public"
74
79
  },
75
- "resolutions": {
76
- "did-jwt": "6.11.6"
77
- },
78
80
  "repository": "git@github.com:Sphereon-Opensource/SSI-SDK.git",
79
81
  "author": "Sphereon <dev@sphereon.com>",
80
82
  "license": "Apache-2.0",
81
83
  "keywords": [
82
84
  "Sphereon",
83
85
  "SSI",
84
- "Veramo",
85
- "DID",
86
- "SIOP",
87
- "SIOPv2",
88
- "OIDC4VP",
89
- "Presentation Exchange",
90
- "OpenID Connect",
91
- "Authenticator"
86
+ "W3C",
87
+ "VC API"
92
88
  ],
93
- "gitHead": "61bdfaf202ee8e5fc6f1e9b83138298798a7a440"
89
+ "gitHead": "6c616f988be6a5d891c771bb59faa50d3160aa75"
94
90
  }
@@ -1,19 +1,20 @@
1
- import { CredentialPayload, VerifiableCredential } from '@veramo/core'
1
+ import { getCredentialByIdOrHash } from '@sphereon/ssi-sdk.core'
2
+ import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-sdk.express-support'
3
+ import { CredentialPayload } from '@veramo/core'
2
4
  import { W3CVerifiableCredential } from '@veramo/core/src/types/vc-data-model'
3
5
  import { Request, Response, Router } from 'express'
6
+ import passport from 'passport'
4
7
  import { v4 } from 'uuid'
5
- import { IRequiredContext, IVCAPIIssueOpts } from './types'
8
+ import { IIssueCredentialEndpointOpts, IRequiredContext, IVCAPIIssueOpts, IVerifyCredentialEndpointOpts } from './types'
6
9
 
7
- export function issueCredentialEndpoint(
8
- router: Router,
9
- context: IRequiredContext,
10
- opts?: {
11
- issueCredentialOpts?: IVCAPIIssueOpts
12
- issueCredentialPath?: string
13
- persistIssuedCredentials?: boolean
10
+ export function issueCredentialEndpoint(router: Router, context: IRequiredContext, opts?: IIssueCredentialEndpointOpts) {
11
+ if (opts?.enabled === false) {
12
+ console.log(`Issue credential endpoint is disabled`)
13
+ return
14
14
  }
15
- ) {
16
- router.post(opts?.issueCredentialPath ?? '/credentials/issue', async (request: Request, response: Response) => {
15
+ const path = opts?.path ?? '/credentials/issue'
16
+
17
+ router.post(path, passport.authenticate('oauth-bearer'), checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
17
18
  try {
18
19
  const credential: CredentialPayload = request.body.credential
19
20
  if (!credential) {
@@ -25,9 +26,9 @@ export function issueCredentialEndpoint(
25
26
  const issueOpts: IVCAPIIssueOpts | undefined = opts?.issueCredentialOpts
26
27
  const vc = await context.agent.createVerifiableCredential({
27
28
  credential,
28
- save: opts?.persistIssuedCredentials ?? true,
29
+ save: opts?.persistIssuedCredentials !== false,
29
30
  proofFormat: issueOpts?.proofFormat ?? 'lds',
30
- fetchRemoteContexts: issueOpts?.fetchRemoteContexts || true,
31
+ fetchRemoteContexts: issueOpts?.fetchRemoteContexts !== false,
31
32
  })
32
33
  response.statusCode = 201
33
34
  return response.send({ verifiableCredential: vc })
@@ -37,14 +38,13 @@ export function issueCredentialEndpoint(
37
38
  })
38
39
  }
39
40
 
40
- export function getCredentialsEndpoint(
41
- router: Router,
42
- context: IRequiredContext,
43
- opts?: {
44
- getCredentialsPath?: string
41
+ export function getCredentialsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
42
+ if (opts?.enabled === false) {
43
+ console.log(`Get credentials endpoint is disabled`)
44
+ return
45
45
  }
46
- ) {
47
- router.get(opts?.getCredentialsPath ?? '/credentials', async (request: Request, response: Response) => {
46
+ const path = opts?.path ?? '/credentials'
47
+ router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
48
48
  try {
49
49
  const uniqueVCs = await context.agent.dataStoreORMGetVerifiableCredentials()
50
50
  response.statusCode = 202
@@ -55,14 +55,13 @@ export function getCredentialsEndpoint(
55
55
  })
56
56
  }
57
57
 
58
- export function getCredentialEndpoint(
59
- router: Router,
60
- context: IRequiredContext,
61
- opts?: {
62
- getCredentialPath?: string
58
+ export function getCredentialEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
59
+ if (opts?.enabled === false) {
60
+ console.log(`Get credential endpoint is disabled`)
61
+ return
63
62
  }
64
- ) {
65
- router.get(opts?.getCredentialPath ?? '/credentials/:id', async (request: Request, response: Response) => {
63
+ const path = opts?.path ?? '/credentials/:id'
64
+ router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
66
65
  try {
67
66
  const id = request.params.id
68
67
  if (!id) {
@@ -80,15 +79,12 @@ export function getCredentialEndpoint(
80
79
  })
81
80
  }
82
81
 
83
- export function verifyCredentialEndpoint(
84
- router: Router,
85
- context: IRequiredContext,
86
- opts?: {
87
- verifyCredentialPath?: string
88
- fetchRemoteContexts?: boolean
82
+ export function verifyCredentialEndpoint(router: Router, context: IRequiredContext, opts?: IVerifyCredentialEndpointOpts) {
83
+ if (opts?.enabled === false) {
84
+ console.log(`Verify credential endpoint is disabled`)
85
+ return
89
86
  }
90
- ) {
91
- router.post(opts?.verifyCredentialPath ?? '/credentials/verify', async (request: Request, response: Response) => {
87
+ router.post(opts?.path ?? '/credentials/verify', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
92
88
  try {
93
89
  console.log(request.body)
94
90
  const credential: W3CVerifiableCredential = request.body.verifiableCredential
@@ -109,14 +105,12 @@ export function verifyCredentialEndpoint(
109
105
  })
110
106
  }
111
107
 
112
- export function deleteCredentialEndpoint(
113
- router: Router,
114
- context: IRequiredContext,
115
- opts?: {
116
- deleteCredentialsPath?: string
108
+ export function deleteCredentialEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) {
109
+ if (opts?.enabled === false) {
110
+ console.log(`Delete credential endpoint is disabled`)
111
+ return
117
112
  }
118
- ) {
119
- router.delete(opts?.deleteCredentialsPath ?? '/credentials/:id', async (request: Request, response: Response) => {
113
+ router.delete(opts?.path ?? '/credentials/:id', async (request: Request, response: Response) => {
120
114
  try {
121
115
  const id = request.params.id
122
116
  if (!id) {
@@ -137,47 +131,3 @@ export function deleteCredentialEndpoint(
137
131
  }
138
132
  })
139
133
  }
140
-
141
- function sendErrorResponse(response: Response, statusCode: number, message: string, error?: Error) {
142
- console.log(message)
143
- if (error) {
144
- console.log(error)
145
- }
146
- response.statusCode = statusCode
147
- return response.status(statusCode).send(message)
148
- }
149
-
150
- export async function getCredentialByIdOrHash(
151
- context: IRequiredContext,
152
- idOrHash: string
153
- ): Promise<{
154
- id: string
155
- hash?: string
156
- vc?: VerifiableCredential
157
- }> {
158
- let vc: VerifiableCredential
159
- let hash: string
160
- const uniqueVCs = await context.agent.dataStoreORMGetVerifiableCredentials({
161
- where: [
162
- {
163
- column: 'id',
164
- value: [idOrHash],
165
- op: 'Equal',
166
- },
167
- ],
168
- })
169
- if (uniqueVCs.length === 0) {
170
- hash = idOrHash
171
- vc = await context.agent.dataStoreGetVerifiableCredential({ hash })
172
- } else {
173
- const uniqueVC = uniqueVCs[0]
174
- hash = uniqueVC.hash
175
- vc = uniqueVC.verifiableCredential
176
- }
177
-
178
- return {
179
- vc,
180
- id: idOrHash,
181
- hash,
182
- }
183
- }
package/src/types.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { GenericAuthArgs, ISingleEndpointOpts } from '@sphereon/ssi-sdk.express-support'
1
2
  import {
2
3
  IAgentContext,
3
4
  ICredentialIssuer,
@@ -26,31 +27,31 @@ export type IRequiredContext = IAgentContext<IRequiredPlugins>
26
27
  interface IVCAPISecurityOpts {}
27
28
 
28
29
  export interface IVCAPIOpts {
29
- pathOpts?: IVCAPIPathOpts
30
+ endpointOpts?: IVCAPIEndpointOpts
30
31
  securityOpts?: IVCAPISecurityOpts
31
32
  issueCredentialOpts?: IVCAPIIssueOpts
32
-
33
- serverOpts?: IServerOpts
34
33
  }
35
34
 
36
- export interface IServerOpts {
37
- port?: number // The port to listen on
38
- cookieSigningKey?: string
39
- hostname?: string // defaults to "0.0.0.0", meaning it will listen on all IP addresses. Can be an IP address or hostname
35
+ export interface IVCAPIEndpointOpts {
36
+ basePath?: string
37
+ globalAuth?: GenericAuthArgs
38
+ issueCredential?: IIssueCredentialEndpointOpts
39
+ getCredentials?: ISingleEndpointOpts
40
+ getCredential?: ISingleEndpointOpts
41
+ deleteCredential?: ISingleEndpointOpts
42
+ verifyCredential?: IVerifyCredentialEndpointOpts
43
+ verifyPresentation?: ISingleEndpointOpts
40
44
  }
41
45
 
42
- export interface IVCAPIPathOpts {
43
- basePath?: string
44
- issueCredentialPath?: string
45
- getCredentialsPath?: string
46
- getCredentialPath?: string
47
- deleteCredentialPath?: string
48
- verifyCredentialPath?: string
49
- verifyPresentationPath?: string
46
+ export enum IVCIApiFeatures {
47
+ VC_VERIFY = 'vc-verify',
48
+ VC_ISSUE = 'vc-issue',
49
+ VC_PERSISTENCE = 'vc-persist',
50
50
  }
51
51
 
52
52
  export interface IVCAPIIssueOpts {
53
- persistIssuedCredentials?: boolean // Whether the issuer persists issued credentials or not. Defaults to true
53
+ enableFeatures?: IVCIApiFeatures[] // Feature to enable. If not defined or empty, all features will be enabled
54
+ persistIssuedCredentials?: boolean // Whether the issuer persists issued credentials or not. Defaults to VC_PERSISTENCE feature flag being present or not
54
55
 
55
56
  /**
56
57
  * The desired format for the VerifiablePresentation to be created.
@@ -79,6 +80,15 @@ export interface IVCAPIIssueOpts {
79
80
  fetchRemoteContexts?: boolean
80
81
  }
81
82
 
83
+ export interface IIssueCredentialEndpointOpts extends ISingleEndpointOpts {
84
+ issueCredentialOpts?: IVCAPIIssueOpts
85
+ persistIssuedCredentials?: boolean
86
+ }
87
+
88
+ export interface IVerifyCredentialEndpointOpts extends ISingleEndpointOpts {
89
+ fetchRemoteContexts?: boolean
90
+ }
91
+
82
92
  export interface IIssueOptionsPayload {
83
93
  created?: string
84
94
  challenge?: string
@@ -1,9 +1,8 @@
1
1
  import { agentContext } from '@sphereon/ssi-sdk.core'
2
+ import { ExpressBuildResult } from '@sphereon/ssi-sdk.express-support'
2
3
  import { TAgent } from '@veramo/core'
3
- import bodyParser from 'body-parser'
4
- import cookieParser from 'cookie-parser'
5
- import * as dotenv from 'dotenv-flow'
6
- import express, { Express } from 'express'
4
+
5
+ import express, { Express, Router } from 'express'
7
6
  import {
8
7
  deleteCredentialEndpoint,
9
8
  getCredentialEndpoint,
@@ -11,36 +10,61 @@ import {
11
10
  issueCredentialEndpoint,
12
11
  verifyCredentialEndpoint,
13
12
  } from './api-functions'
14
- import { IRequiredPlugins, IVCAPIOpts } from './types'
13
+ import { IRequiredPlugins, IVCAPIOpts, IVCIApiFeatures } from './types'
15
14
 
16
15
  export class VcApiServer {
16
+ get router(): express.Router {
17
+ return this._router
18
+ }
19
+
17
20
  private readonly _express: Express
18
21
  private readonly _agent: TAgent<IRequiredPlugins>
19
22
  private readonly _opts?: IVCAPIOpts
23
+ private readonly _router: Router
20
24
 
21
- constructor(args: { agent: TAgent<IRequiredPlugins>; express?: Express; opts?: IVCAPIOpts }) {
25
+ constructor(args: { agent: TAgent<IRequiredPlugins>; expressArgs: ExpressBuildResult; opts?: IVCAPIOpts }) {
22
26
  const { agent, opts } = args
23
27
  this._agent = agent
28
+ if (opts?.endpointOpts?.globalAuth) {
29
+ copyGlobalAuthToEndpoint(opts, 'issueCredential')
30
+ copyGlobalAuthToEndpoint(opts, 'getCredential')
31
+ copyGlobalAuthToEndpoint(opts, 'getCredentials')
32
+ copyGlobalAuthToEndpoint(opts, 'deleteCredential')
33
+ copyGlobalAuthToEndpoint(opts, 'verifyCredential')
34
+ }
35
+
24
36
  this._opts = opts
25
- const existingExpress = !!args.express
26
- this._express = args.express ?? express()
27
- this.setupExpress(existingExpress)
28
- const router = express.Router()
37
+ this._express = args.expressArgs.express
38
+ this._router = express.Router()
39
+
29
40
  const context = agentContext(agent)
30
41
 
42
+ const features = opts?.issueCredentialOpts?.enableFeatures ?? [
43
+ IVCIApiFeatures.VC_ISSUE,
44
+ IVCIApiFeatures.VC_PERSISTENCE,
45
+ IVCIApiFeatures.VC_VERIFY,
46
+ ]
47
+ console.log(`VC API enabled, with features: ${JSON.stringify(features)}`)
48
+
31
49
  // Credential endpoints
32
- issueCredentialEndpoint(router, context, {
33
- issueCredentialOpts: opts?.issueCredentialOpts,
34
- issueCredentialPath: opts?.pathOpts?.issueCredentialPath,
35
- })
36
- getCredentialEndpoint(router, context, { getCredentialPath: opts?.pathOpts?.getCredentialPath })
37
- getCredentialsEndpoint(router, context, { getCredentialsPath: opts?.pathOpts?.getCredentialsPath })
38
- deleteCredentialEndpoint(router, context, { deleteCredentialsPath: opts?.pathOpts?.deleteCredentialPath }) // not in spec. TODO: Authz
39
- verifyCredentialEndpoint(router, context, {
40
- verifyCredentialPath: opts?.pathOpts?.verifyCredentialPath,
41
- fetchRemoteContexts: opts?.issueCredentialOpts?.fetchRemoteContexts,
42
- })
43
- this._express.use(opts?.pathOpts?.basePath ?? '', router)
50
+ if (features.includes(IVCIApiFeatures.VC_ISSUE)) {
51
+ issueCredentialEndpoint(this.router, context, {
52
+ ...opts?.endpointOpts?.issueCredential,
53
+ issueCredentialOpts: opts?.issueCredentialOpts,
54
+ })
55
+ }
56
+ if (features.includes(IVCIApiFeatures.VC_PERSISTENCE)) {
57
+ getCredentialEndpoint(this.router, context, opts?.endpointOpts?.getCredential)
58
+ getCredentialsEndpoint(this.router, context, opts?.endpointOpts?.getCredentials)
59
+ deleteCredentialEndpoint(this.router, context, opts?.endpointOpts?.deleteCredential) // not in spec.
60
+ }
61
+ if (features.includes(IVCIApiFeatures.VC_VERIFY)) {
62
+ verifyCredentialEndpoint(this.router, context, {
63
+ ...opts?.endpointOpts?.verifyCredential,
64
+ fetchRemoteContexts: opts?.issueCredentialOpts?.fetchRemoteContexts,
65
+ })
66
+ }
67
+ this._express.use(opts?.endpointOpts?.basePath ?? '', this.router)
44
68
  }
45
69
 
46
70
  get agent(): TAgent<IRequiredPlugins> {
@@ -54,32 +78,16 @@ export class VcApiServer {
54
78
  get express(): Express {
55
79
  return this._express
56
80
  }
81
+ }
57
82
 
58
- private setupExpress(existingExpress: boolean) {
59
- dotenv.config()
60
- if (!existingExpress) {
61
- const port = this.opts?.serverOpts?.port || process.env.PORT || 5000
62
- const secret = this.opts?.serverOpts?.cookieSigningKey || process.env.COOKIE_SIGNING_KEY
63
- const hostname = this.opts?.serverOpts?.hostname || '0.0.0.0'
64
- this._express.use((req, res, next) => {
65
- res.header('Access-Control-Allow-Origin', '*')
66
- // Request methods you wish to allow
67
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE')
68
-
69
- // Request headers you wish to allow
70
- res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type')
71
-
72
- // Set to true if you need the website to include cookies in the requests sent
73
- // to the API (e.g. in case you use sessions)
74
- res.setHeader('Access-Control-Allow-Credentials', 'true')
75
- next()
76
- })
77
- // this.express.use(cors({ credentials: true }));
78
- // this.express.use('/proxy', proxy('www.gssoogle.com'));
79
- this._express.use(bodyParser.urlencoded({ extended: true }))
80
- this._express.use(bodyParser.json())
81
- this._express.use(cookieParser(secret))
82
- this._express.listen(port as number, hostname, () => console.log(`Listening on ${hostname}, port ${port}`))
83
+ function copyGlobalAuthToEndpoint(opts: IVCAPIOpts, key: string) {
84
+ if (opts?.endpointOpts?.globalAuth) {
85
+ // @ts-ignore
86
+ opts.endpointOpts[key] = {
87
+ // @ts-ignore
88
+ ...opts.endpointOpts[key],
89
+ // @ts-ignore
90
+ endpoint: { ...opts.endpointOpts.globalAuth, ...opts.endpointOpts[key]?.endpoint },
83
91
  }
84
92
  }
85
93
  }
@@ -1,30 +0,0 @@
1
- import { IAgent } from '@veramo/core';
2
- import { Request, Router } from 'express';
3
- export interface RequestWithAgent extends Request {
4
- agent?: IAgent;
5
- }
6
- /**
7
- * @public
8
- */
9
- export interface RequestWithAgentRouterOptions {
10
- /**
11
- * Optional. Pre-configured agent
12
- */
13
- agent?: IAgent;
14
- /**
15
- * Optional. Function that returns a Promise that resolves to a configured agent for specific request
16
- */
17
- getAgentForRequest?: (req: Request) => Promise<IAgent>;
18
- }
19
- /**
20
- * Creates an expressjs router that adds a Veramo agent to the request object.
21
- *
22
- * This is needed by all other routers provided by this package to be able to perform their functions.
23
- *
24
- * @param options - Initialization option
25
- * @returns Expressjs router
26
- *
27
- * @public
28
- */
29
- export declare const RequestWithAgentRouter: (options: RequestWithAgentRouterOptions) => Router;
30
- //# sourceMappingURL=request-agent-router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-agent-router.d.ts","sourceRoot":"","sources":["../src/request-agent-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEzC,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,YAAa,6BAA6B,KAAG,MAc/E,CAAA"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RequestWithAgentRouter = void 0;
13
- const express_1 = require("express");
14
- /**
15
- * Creates an expressjs router that adds a Veramo agent to the request object.
16
- *
17
- * This is needed by all other routers provided by this package to be able to perform their functions.
18
- *
19
- * @param options - Initialization option
20
- * @returns Expressjs router
21
- *
22
- * @public
23
- */
24
- const RequestWithAgentRouter = (options) => {
25
- const router = (0, express_1.Router)();
26
- router.use((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
27
- if (options.agent) {
28
- req.agent = options.agent;
29
- }
30
- else if (options.getAgentForRequest) {
31
- req.agent = yield options.getAgentForRequest(req);
32
- }
33
- else {
34
- throw Error('[RequestWithAgentRouter] agent or getAgentForRequest is required');
35
- }
36
- next();
37
- }));
38
- return router;
39
- };
40
- exports.RequestWithAgentRouter = RequestWithAgentRouter;
41
- //# sourceMappingURL=request-agent-router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-agent-router.js","sourceRoot":"","sources":["../src/request-agent-router.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qCAAyC;AAqBzC;;;;;;;;;GASG;AACI,MAAM,sBAAsB,GAAG,CAAC,OAAsC,EAAU,EAAE;IACvF,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAA;IACvB,MAAM,CAAC,GAAG,CAAC,CAAO,GAAqB,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACpD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;SAC1B;aAAM,IAAI,OAAO,CAAC,kBAAkB,EAAE;YACrC,GAAG,CAAC,KAAK,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;SAClD;aAAM;YACL,MAAM,KAAK,CAAC,kEAAkE,CAAC,CAAA;SAChF;QACD,IAAI,EAAE,CAAA;IACR,CAAC,CAAA,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAdY,QAAA,sBAAsB,0BAclC"}
@@ -1,47 +0,0 @@
1
- import { IAgent } from '@veramo/core'
2
- import { Request, Router } from 'express'
3
-
4
- export interface RequestWithAgent extends Request {
5
- agent?: IAgent
6
- }
7
-
8
- /**
9
- * @public
10
- */
11
- export interface RequestWithAgentRouterOptions {
12
- /**
13
- * Optional. Pre-configured agent
14
- */
15
- agent?: IAgent
16
-
17
- /**
18
- * Optional. Function that returns a Promise that resolves to a configured agent for specific request
19
- */
20
- getAgentForRequest?: (req: Request) => Promise<IAgent>
21
- }
22
-
23
- /**
24
- * Creates an expressjs router that adds a Veramo agent to the request object.
25
- *
26
- * This is needed by all other routers provided by this package to be able to perform their functions.
27
- *
28
- * @param options - Initialization option
29
- * @returns Expressjs router
30
- *
31
- * @public
32
- */
33
- export const RequestWithAgentRouter = (options: RequestWithAgentRouterOptions): Router => {
34
- const router = Router()
35
- router.use(async (req: RequestWithAgent, res, next) => {
36
- if (options.agent) {
37
- req.agent = options.agent
38
- } else if (options.getAgentForRequest) {
39
- req.agent = await options.getAgentForRequest(req)
40
- } else {
41
- throw Error('[RequestWithAgentRouter] agent or getAgentForRequest is required')
42
- }
43
- next()
44
- })
45
-
46
- return router
47
- }