@sphereon/ssi-sdk.vc-status-list-issuer-rest-api 0.32.1-feature.oid4vp.rest.api.improv.bootcamp.187 → 0.32.1-fix.142
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/dist/api-functions.d.ts +1 -1
- package/dist/api-functions.d.ts.map +1 -1
- package/dist/api-functions.js +51 -71
- package/dist/api-functions.js.map +1 -1
- package/dist/statuslist-management-api-server.js +1 -1
- package/dist/statuslist-management-api-server.js.map +1 -1
- package/dist/types.d.ts +1 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/api-functions.ts +50 -99
- package/src/statuslist-management-api-server.ts +2 -2
- package/src/types.ts +1 -8
package/dist/api-functions.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ import { ICredentialStatusListEndpointOpts, IRequiredContext, IW3CredentialStatu
|
|
|
3
3
|
export declare function createNewStatusListEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
|
|
4
4
|
export declare function getStatusListCredentialEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
|
|
5
5
|
export declare function getStatusListCredentialIndexStatusEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function updateW3CStatusEndpoint(router: Router, context: IRequiredContext, opts: IW3CredentialStatusEndpointOpts): void;
|
|
7
7
|
//# sourceMappingURL=api-functions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-functions.d.ts","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"AAQA,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,iCAAiC,EAAE,gBAAgB,EAAE,+BAA+B,EAAiC,MAAM,SAAS,CAAA;AAK7I,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,iCAAiC,QAmB7H;AAcD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,iCAAiC,QAkBjI;AAED,wBAAgB,0CAA0C,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,iCAAiC,QA0D5I;AACD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,+BAA+B,QAwEvH"}
|
package/dist/api-functions.js
CHANGED
|
@@ -15,25 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.createNewStatusListEndpoint = createNewStatusListEndpoint;
|
|
16
16
|
exports.getStatusListCredentialEndpoint = getStatusListCredentialEndpoint;
|
|
17
17
|
exports.getStatusListCredentialIndexStatusEndpoint = getStatusListCredentialIndexStatusEndpoint;
|
|
18
|
-
exports.
|
|
18
|
+
exports.updateW3CStatusEndpoint = updateW3CStatusEndpoint;
|
|
19
19
|
const ssi_express_support_1 = require("@sphereon/ssi-express-support");
|
|
20
20
|
const ssi_sdk_vc_status_list_1 = require("@sphereon/ssi-sdk.vc-status-list");
|
|
21
21
|
const ssi_sdk_vc_status_list_issuer_drivers_1 = require("@sphereon/ssi-sdk.vc-status-list-issuer-drivers");
|
|
22
22
|
const debug_1 = __importDefault(require("debug"));
|
|
23
23
|
const ssi_types_1 = require("@sphereon/ssi-types");
|
|
24
24
|
const debug = (0, debug_1.default)('sphereon:ssi-sdk:status-list');
|
|
25
|
-
function sendStatuslistResponse(details, statuslistPayload, response) {
|
|
26
|
-
let payload;
|
|
27
|
-
switch (details.proofFormat) {
|
|
28
|
-
case 'jwt':
|
|
29
|
-
case 'cbor':
|
|
30
|
-
payload = Buffer.from(statuslistPayload, 'ascii');
|
|
31
|
-
break;
|
|
32
|
-
default:
|
|
33
|
-
payload = statuslistPayload;
|
|
34
|
-
}
|
|
35
|
-
return response.status(200).setHeader('Content-Type', details.statuslistContentType).send(payload);
|
|
36
|
-
}
|
|
37
25
|
function createNewStatusListEndpoint(router, context, opts) {
|
|
38
26
|
var _a;
|
|
39
27
|
if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
|
|
@@ -47,9 +35,8 @@ function createNewStatusListEndpoint(router, context, opts) {
|
|
|
47
35
|
if (!statusListArgs) {
|
|
48
36
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No statusList details supplied');
|
|
49
37
|
}
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
return sendStatuslistResponse(details, statuslistPayload, response);
|
|
38
|
+
const statusListDetails = yield context.agent.slCreateStatusList(statusListArgs);
|
|
39
|
+
return response.send({ statusListDetails });
|
|
53
40
|
}
|
|
54
41
|
catch (e) {
|
|
55
42
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 500, e.message, e);
|
|
@@ -57,15 +44,14 @@ function createNewStatusListEndpoint(router, context, opts) {
|
|
|
57
44
|
}));
|
|
58
45
|
}
|
|
59
46
|
const buildStatusListId = (request) => {
|
|
60
|
-
var _a, _b, _c, _d, _e
|
|
47
|
+
var _a, _b, _c, _d, _e;
|
|
61
48
|
const protocol = (_b = (_a = request.headers['x-forwarded-proto']) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : request.protocol;
|
|
62
49
|
let host = (_d = (_c = request.headers['x-forwarded-host']) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : request.get('host');
|
|
63
50
|
const forwardedPort = (_e = request.headers['x-forwarded-port']) === null || _e === void 0 ? void 0 : _e.toString();
|
|
64
51
|
if (forwardedPort && !(protocol === 'https' && forwardedPort === '443') && !(protocol === 'http' && forwardedPort === '80')) {
|
|
65
52
|
host += `:${forwardedPort}`;
|
|
66
53
|
}
|
|
67
|
-
|
|
68
|
-
return `${protocol}://${host}${forwardedPrefix}${request.originalUrl.split('?')[0].replace(/\/status\/index\/.*/, '')}`;
|
|
54
|
+
return `${protocol}://${host}${request.originalUrl}`;
|
|
69
55
|
};
|
|
70
56
|
function getStatusListCredentialEndpoint(router, context, opts) {
|
|
71
57
|
var _a;
|
|
@@ -75,15 +61,14 @@ function getStatusListCredentialEndpoint(router, context, opts) {
|
|
|
75
61
|
}
|
|
76
62
|
const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/status-lists/:index';
|
|
77
63
|
router.get(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
var _a;
|
|
64
|
+
var _a, _b, _c, _d;
|
|
79
65
|
try {
|
|
80
66
|
//todo: Check index against correlationId first. Then match originalUrl against statusList id
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
const driver = yield (0, ssi_sdk_vc_status_list_issuer_drivers_1.getDriver)(Object.assign(Object.assign({}, (correlationId ? { correlationId } : { id: buildStatusListId(request) })), { dbName: opts.dbName }));
|
|
67
|
+
const correlationId = (_d = (_b = (_a = request.query.correlationId) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : (_c = request.params.index) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : request.originalUrl;
|
|
68
|
+
const driver = yield (0, ssi_sdk_vc_status_list_issuer_drivers_1.getDriver)({ id: buildStatusListId(request), correlationId, dbName: opts.dbName });
|
|
84
69
|
const details = yield driver.getStatusList();
|
|
85
|
-
|
|
86
|
-
return
|
|
70
|
+
response.statusCode = 200;
|
|
71
|
+
return response.send(details.statusListCredential);
|
|
87
72
|
}
|
|
88
73
|
catch (e) {
|
|
89
74
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 500, e.message, e);
|
|
@@ -98,7 +83,7 @@ function getStatusListCredentialIndexStatusEndpoint(router, context, opts) {
|
|
|
98
83
|
}
|
|
99
84
|
const path = (_a = opts === null || opts === void 0 ? void 0 : opts.path) !== null && _a !== void 0 ? _a : '/status-lists/:index/status/index/:statusListIndex';
|
|
100
85
|
router.get(path, (0, ssi_express_support_1.checkAuth)(opts === null || opts === void 0 ? void 0 : opts.endpoint), (request, response) => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
var _a, _b, _c;
|
|
86
|
+
var _a, _b, _c, _d, _e;
|
|
102
87
|
try {
|
|
103
88
|
//todo: Check index against correlationId first. Then match originalUrl against statusList id
|
|
104
89
|
const statusListIndexStr = request.params.statusListIndex;
|
|
@@ -112,17 +97,24 @@ function getStatusListCredentialIndexStatusEndpoint(router, context, opts) {
|
|
|
112
97
|
if (!statusListIndex || statusListIndex < 0) {
|
|
113
98
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, `Please provide a proper statusListIndex`);
|
|
114
99
|
}
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
|
|
100
|
+
const correlationId = (_d = (_b = (_a = request.query.correlationId) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : (_c = request.params.index) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : request.originalUrl;
|
|
101
|
+
const driver = yield (0, ssi_sdk_vc_status_list_issuer_drivers_1.getDriver)({
|
|
102
|
+
id: `${request.protocol}://${request.get('host')}${request.originalUrl.replace(/\/status\/index\/.*/, '')}`,
|
|
103
|
+
correlationId,
|
|
104
|
+
dbName: opts.dbName,
|
|
105
|
+
});
|
|
118
106
|
const details = yield driver.getStatusList();
|
|
119
107
|
if (statusListIndex > details.length) {
|
|
120
108
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, `Please provide a proper statusListIndex`);
|
|
121
109
|
}
|
|
122
|
-
|
|
123
|
-
|
|
110
|
+
let entry = yield driver.getStatusListEntryByIndex({
|
|
111
|
+
statusListIndex,
|
|
112
|
+
statusListId: details.id,
|
|
113
|
+
correlationId: details.correlationId,
|
|
114
|
+
errorOnNotFound: false,
|
|
115
|
+
});
|
|
124
116
|
const type = details.type === ssi_types_1.StatusListType.StatusList2021 ? 'StatusList2021Entry' : details.type;
|
|
125
|
-
const status = yield (0, ssi_sdk_vc_status_list_1.checkStatusIndexFromStatusListCredential)(Object.assign(Object.assign({ statusListCredential: details.statusListCredential }, (details.type === ssi_types_1.StatusListType.StatusList2021 ? { statusPurpose: (
|
|
117
|
+
const status = yield (0, ssi_sdk_vc_status_list_1.checkStatusIndexFromStatusListCredential)(Object.assign(Object.assign({ statusListCredential: details.statusListCredential }, (details.type === ssi_types_1.StatusListType.StatusList2021 ? { statusPurpose: (_e = details.statusList2021) === null || _e === void 0 ? void 0 : _e.statusPurpose } : {})), { type, id: details.id, statusListIndex }));
|
|
126
118
|
if (!entry) {
|
|
127
119
|
// The fact we have nothing on it means the status is okay
|
|
128
120
|
entry = {
|
|
@@ -132,14 +124,14 @@ function getStatusListCredentialIndexStatusEndpoint(router, context, opts) {
|
|
|
132
124
|
};
|
|
133
125
|
}
|
|
134
126
|
response.statusCode = 200;
|
|
135
|
-
return response.send(Object.assign(Object.assign({}, entry), { status }));
|
|
127
|
+
return response.send(Object.assign(Object.assign({}, entry), { status }));
|
|
136
128
|
}
|
|
137
129
|
catch (e) {
|
|
138
130
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 500, e.message, e);
|
|
139
131
|
}
|
|
140
132
|
}));
|
|
141
133
|
}
|
|
142
|
-
function
|
|
134
|
+
function updateW3CStatusEndpoint(router, context, opts) {
|
|
143
135
|
var _a;
|
|
144
136
|
if ((opts === null || opts === void 0 ? void 0 : opts.enabled) === false) {
|
|
145
137
|
console.log(`Update credential status endpoint is disabled`);
|
|
@@ -153,60 +145,48 @@ function updateStatusEndpoint(router, context, opts) {
|
|
|
153
145
|
const statusListId = (_c = (_a = updateRequest.statusListId) !== null && _a !== void 0 ? _a : (_b = request.query.statusListId) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : opts.statusListId;
|
|
154
146
|
const statusListCorrelationId = (_f = (_d = updateRequest.statusListCorrelationId) !== null && _d !== void 0 ? _d : (_e = request.query.statusListorrelationId) === null || _e === void 0 ? void 0 : _e.toString()) !== null && _f !== void 0 ? _f : opts.correlationId;
|
|
155
147
|
const entryCorrelationId = (_g = updateRequest.entryCorrelationId) !== null && _g !== void 0 ? _g : (_h = request.query.entryCorrelationId) === null || _h === void 0 ? void 0 : _h.toString();
|
|
148
|
+
const credentialId = updateRequest.credentialId;
|
|
156
149
|
// TODO: Move mostly to driver
|
|
157
|
-
if (!
|
|
158
|
-
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No statusList
|
|
150
|
+
if (!credentialId) {
|
|
151
|
+
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No statusList credentialId supplied');
|
|
159
152
|
}
|
|
160
153
|
else if (!updateRequest.credentialStatus || updateRequest.credentialStatus.length === 0) {
|
|
161
154
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No statusList updates supplied');
|
|
162
155
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
let statusListEntry;
|
|
166
|
-
if ('credentialId' in updateRequest) {
|
|
167
|
-
if (!updateRequest.credentialId) {
|
|
168
|
-
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No credentialId supplied');
|
|
169
|
-
}
|
|
170
|
-
// unfortunately the W3C API works by credentialId. Which means you will have to map listIndices during issuance
|
|
171
|
-
statusListEntry = yield driver.getStatusListEntryByCredentialId({
|
|
172
|
-
statusListId,
|
|
173
|
-
statusListCorrelationId,
|
|
174
|
-
entryCorrelationId,
|
|
175
|
-
credentialId: updateRequest.credentialId,
|
|
176
|
-
errorOnNotFound: true,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
if (!updateRequest.statusListIndex || updateRequest.statusListIndex < 0) {
|
|
181
|
-
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'Invalid statusListIndex supplied');
|
|
182
|
-
}
|
|
183
|
-
const driver = yield (0, ssi_sdk_vc_status_list_issuer_drivers_1.getDriver)(Object.assign(Object.assign({}, (statusListCorrelationId ? { statusListCorrelationId } : { id: buildStatusListId(request) })), { dbName: opts.dbName }));
|
|
184
|
-
const details = yield driver.getStatusList();
|
|
185
|
-
statusListEntry = yield driver.getStatusListEntryByIndex(Object.assign(Object.assign({ statusListId: details.id }, (entryCorrelationId ? { correlationId: entryCorrelationId } : { statusListIndex: updateRequest.statusListIndex })), { errorOnNotFound: true }));
|
|
156
|
+
else if (!statusListId && !statusListCorrelationId) {
|
|
157
|
+
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, 'No statusList id or correlation Id provided or deduced for the API or in the request');
|
|
186
158
|
}
|
|
159
|
+
const driver = yield (0, ssi_sdk_vc_status_list_issuer_drivers_1.getDriver)({ id: statusListId, correlationId: statusListCorrelationId, dbName: opts.dbName });
|
|
160
|
+
// unfortunately the W3C API works by credentialId. Which means you will have to map listIndices during issuance
|
|
161
|
+
const statusListEntry = yield driver.getStatusListEntryByCredentialId({
|
|
162
|
+
statusListId,
|
|
163
|
+
statusListCorrelationId,
|
|
164
|
+
entryCorrelationId,
|
|
165
|
+
credentialId,
|
|
166
|
+
errorOnNotFound: true,
|
|
167
|
+
});
|
|
187
168
|
if (!statusListEntry) {
|
|
188
|
-
|
|
189
|
-
return (0, ssi_express_support_1.sendErrorResponse)(response, 404, `Status list entry for ${identifier} not found for ${statusListId}`);
|
|
169
|
+
return (0, ssi_express_support_1.sendErrorResponse)(response, 404, `status list index for credential id ${credentialId} was never recorded for ${statusListId}. This means the status will be 0`);
|
|
190
170
|
}
|
|
171
|
+
const statusListIndex = statusListEntry.statusListIndex;
|
|
191
172
|
let details = yield driver.getStatusList();
|
|
192
173
|
let statusListCredential = details.statusListCredential;
|
|
193
174
|
for (const updateItem of updateRequest.credentialStatus) {
|
|
175
|
+
if (updateItem.type && updateItem.type !== 'StatusList2021') {
|
|
176
|
+
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, `Only the optional type 'StatusList2021' is currently supported`);
|
|
177
|
+
}
|
|
194
178
|
if (!updateItem.status) {
|
|
195
|
-
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, `Required 'status' value was missing in the credentialStatus array`);
|
|
179
|
+
return (0, ssi_express_support_1.sendErrorResponse)(response, 400, `Required 'status' value was missing in the credentialStatus array for credentialId ${credentialId}`);
|
|
196
180
|
}
|
|
197
|
-
const value = updateItem.status === '0' || updateItem.status.toLowerCase() === 'false' ?
|
|
181
|
+
const value = updateItem.status === '0' || updateItem.status.toLowerCase() === 'false' ? 0 : 1;
|
|
198
182
|
const statusList = statusListId !== null && statusListId !== void 0 ? statusListId : statusListEntry.statusList;
|
|
199
|
-
yield driver.updateStatusListEntry(Object.assign(Object.assign({}, statusListEntry), { statusList, value }));
|
|
183
|
+
yield driver.updateStatusListEntry(Object.assign(Object.assign({}, statusListEntry), { statusListIndex, statusList, credentialId, value: value ? '1' : '0' }));
|
|
200
184
|
// todo: optimize. We are now creating a new VC for every item passed in. Probably wise to look at DB as well
|
|
201
|
-
details = yield (0, ssi_sdk_vc_status_list_1.updateStatusIndexFromStatusListCredential)({
|
|
202
|
-
statusListCredential: statusListCredential,
|
|
203
|
-
statusListIndex: statusListEntry.statusListIndex,
|
|
204
|
-
value: parseInt(value),
|
|
205
|
-
keyRef: opts.keyRef,
|
|
206
|
-
}, context);
|
|
185
|
+
details = yield (0, ssi_sdk_vc_status_list_1.updateStatusIndexFromStatusListCredential)({ statusListCredential: statusListCredential, statusListIndex, value, keyRef: opts.keyRef }, context);
|
|
207
186
|
details = yield driver.updateStatusList({ statusListCredential: details.statusListCredential });
|
|
208
187
|
}
|
|
209
|
-
|
|
188
|
+
response.statusCode = 200;
|
|
189
|
+
return response.send(details.statusListCredential);
|
|
210
190
|
}
|
|
211
191
|
catch (e) {
|
|
212
192
|
return (0, ssi_express_support_1.sendErrorResponse)(response, 500, e.message, e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"api-functions.js","sourceRoot":"","sources":["../src/api-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ class StatuslistManagementApiServer {
|
|
|
36
36
|
(0, api_functions_1.getStatusListCredentialIndexStatusEndpoint)(this.router, context, opts.endpointOpts.getStatusList);
|
|
37
37
|
}
|
|
38
38
|
if (features.includes('w3c-vc-api-credential-status')) {
|
|
39
|
-
(0, api_functions_1.
|
|
39
|
+
(0, api_functions_1.updateW3CStatusEndpoint)(this.router, context, opts.endpointOpts.vcApiCredentialStatus);
|
|
40
40
|
}
|
|
41
41
|
this._express.use((_d = (_c = opts === null || opts === void 0 ? void 0 : opts.endpointOpts) === null || _c === void 0 ? void 0 : _c.basePath) !== null && _d !== void 0 ? _d : '', this.router);
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statuslist-management-api-server.js","sourceRoot":"","sources":["../src/statuslist-management-api-server.ts"],"names":[],"mappings":";;;;;;AAAA,uEAAwF;AACxF,yDAAqD;AAIrD,sDAAkD;AAClD,mDAKwB;AAIxB,MAAa,6BAA6B;IACxC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAOD,YAAY,IAAoH;;QAC9H,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,0CAAE,UAAU,EAAE,CAAC;YACnC,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAA;YAChE,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;YAC3D,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAA;QAC3C,IAAI,CAAC,OAAO,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;QAE/B,MAAM,OAAO,GAAG,IAAA,2BAAY,EAAC,KAAK,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,CAAC,wBAAwB,EAAE,qBAAqB,EAAE,8BAA8B,CAAC,CAAA;QAC1H,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAElF,qCAAqC;QACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAChD,IAAA,2CAA2B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;QACvF,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7C,IAAA,+CAA+B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;YACtF,IAAA,0DAA0C,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;QACnG,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACtD,IAAA,
|
|
1
|
+
{"version":3,"file":"statuslist-management-api-server.js","sourceRoot":"","sources":["../src/statuslist-management-api-server.ts"],"names":[],"mappings":";;;;;;AAAA,uEAAwF;AACxF,yDAAqD;AAIrD,sDAAkD;AAClD,mDAKwB;AAIxB,MAAa,6BAA6B;IACxC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAOD,YAAY,IAAoH;;QAC9H,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,0CAAE,UAAU,EAAE,CAAC;YACnC,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC,CAAA;YAChE,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAA;YAC3D,IAAA,8CAAwB,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAA;QAC3C,IAAI,CAAC,OAAO,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;QAE/B,MAAM,OAAO,GAAG,IAAA,2BAAY,EAAC,KAAK,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,CAAC,wBAAwB,EAAE,qBAAqB,EAAE,8BAA8B,CAAC,CAAA;QAC1H,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAElF,qCAAqC;QACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAChD,IAAA,2CAA2B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;QACvF,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC7C,IAAA,+CAA+B,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;YACtF,IAAA,0DAA0C,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;QACnG,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACtD,IAAA,uCAAuB,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,0CAAE,QAAQ,mCAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;CACF;AArDD,sEAqDC;AAED;;;;;;;;;;;;EAYE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,13 +24,8 @@ export interface IW3CredentialStatusEndpointOpts extends ICredentialStatusListEn
|
|
|
24
24
|
correlationId?: string;
|
|
25
25
|
keyRef?: string;
|
|
26
26
|
}
|
|
27
|
-
export interface
|
|
27
|
+
export interface UpdateCredentialStatusRequest {
|
|
28
28
|
credentialId: string;
|
|
29
|
-
}
|
|
30
|
-
export interface UpdateIndexedCredentialStatusRequest extends UpdateCredentialStatusRequest {
|
|
31
|
-
statusListIndex: number;
|
|
32
|
-
}
|
|
33
|
-
interface UpdateCredentialStatusRequest {
|
|
34
29
|
credentialStatus: UpdateCredentialStatusItem[];
|
|
35
30
|
statusListId?: string;
|
|
36
31
|
statusListCorrelationId?: string;
|
|
@@ -40,5 +35,4 @@ export interface UpdateCredentialStatusItem {
|
|
|
40
35
|
type?: StatusListType;
|
|
41
36
|
status: string;
|
|
42
37
|
}
|
|
43
|
-
export {};
|
|
44
38
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAAA;AAElF,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,uBAAuB,CAAA;IACrC,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,qBAAqB,EAAE,+BAA+B,CAAA;IACtD,gBAAgB,EAAE,iCAAiC,CAAA;IACnD,aAAa,EAAE,iCAAiC,CAAA;CACjD;AAED,MAAM,MAAM,kBAAkB,GAAG,8BAA8B,GAAG,wBAAwB,GAAG,qBAAqB,CAAA;AAElH,MAAM,WAAW,iCAAkC,SAAQ,mBAAmB;IAC5E,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,+BAAgC,SAAQ,iCAAiC;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAAA;AAElF,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,uBAAuB,CAAA;IACrC,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,qBAAqB,EAAE,+BAA+B,CAAA;IACtD,gBAAgB,EAAE,iCAAiC,CAAA;IACnD,aAAa,EAAE,iCAAiC,CAAA;CACjD;AAED,MAAM,MAAM,kBAAkB,GAAG,8BAA8B,GAAG,wBAAwB,GAAG,qBAAqB,CAAA;AAElH,MAAM,WAAW,iCAAkC,SAAQ,mBAAmB;IAC5E,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,+BAAgC,SAAQ,iCAAiC;IACxF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,0BAA0B,EAAE,CAAA;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.vc-status-list-issuer-rest-api",
|
|
3
3
|
"description": "Sphereon SSI-SDK plugin for Status List management, like StatusList2021. Issuer drivers module",
|
|
4
|
-
"version": "0.32.1-
|
|
4
|
+
"version": "0.32.1-fix.142+84bbb0fc",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
"start:dev2": "node --experimental-specifier-resolution=node --loader ts-node/esm __tests__/agent.ts"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sphereon/ssi-express-support": "0.32.1-
|
|
15
|
+
"@sphereon/ssi-express-support": "0.32.1-fix.142+84bbb0fc",
|
|
16
16
|
"@sphereon/ssi-sdk-ext.did-utils": "0.27.0",
|
|
17
17
|
"@sphereon/ssi-sdk-ext.identifier-resolution": "0.27.0",
|
|
18
18
|
"@sphereon/ssi-sdk-ext.jwt-service": "0.27.0",
|
|
19
|
-
"@sphereon/ssi-sdk.core": "0.32.1-
|
|
20
|
-
"@sphereon/ssi-sdk.data-store": "0.32.1-
|
|
21
|
-
"@sphereon/ssi-sdk.vc-status-list": "0.32.1-
|
|
22
|
-
"@sphereon/ssi-sdk.vc-status-list-issuer-drivers": "0.32.1-
|
|
23
|
-
"@sphereon/ssi-types": "0.32.1-
|
|
19
|
+
"@sphereon/ssi-sdk.core": "0.32.1-fix.142+84bbb0fc",
|
|
20
|
+
"@sphereon/ssi-sdk.data-store": "0.32.1-fix.142+84bbb0fc",
|
|
21
|
+
"@sphereon/ssi-sdk.vc-status-list": "0.32.1-fix.142+84bbb0fc",
|
|
22
|
+
"@sphereon/ssi-sdk.vc-status-list-issuer-drivers": "0.32.1-fix.142+84bbb0fc",
|
|
23
|
+
"@sphereon/ssi-types": "0.32.1-fix.142+84bbb0fc",
|
|
24
24
|
"@sphereon/vc-status-list": "7.0.0-next.0",
|
|
25
25
|
"@veramo/core": "4.2.0",
|
|
26
26
|
"debug": "^4.3.5",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"@sphereon/did-uni-client": "^0.6.3",
|
|
35
35
|
"@sphereon/ssi-sdk-ext.did-provider-jwk": "0.27.0",
|
|
36
36
|
"@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.27.0",
|
|
37
|
-
"@sphereon/ssi-sdk.agent-config": "0.32.1-
|
|
37
|
+
"@sphereon/ssi-sdk.agent-config": "0.32.1-fix.142+84bbb0fc",
|
|
38
38
|
"@sphereon/ssi-sdk.data-store": "workspace:*",
|
|
39
|
-
"@sphereon/ssi-sdk.vc-handler-ld-local": "0.32.1-
|
|
39
|
+
"@sphereon/ssi-sdk.vc-handler-ld-local": "0.32.1-fix.142+84bbb0fc",
|
|
40
40
|
"@types/body-parser": "^1.19.5",
|
|
41
41
|
"@types/cookie-parser": "^1.4.7",
|
|
42
42
|
"@types/cors": "^2.8.17",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
"StatusList2021"
|
|
81
81
|
],
|
|
82
82
|
"nx": {},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "84bbb0fc66ce12a9a453054e4f39306c9871547f"
|
|
84
84
|
}
|
package/src/api-functions.ts
CHANGED
|
@@ -2,39 +2,16 @@ import { checkAuth, sendErrorResponse } from '@sphereon/ssi-express-support'
|
|
|
2
2
|
import {
|
|
3
3
|
checkStatusIndexFromStatusListCredential,
|
|
4
4
|
CreateNewStatusListFuncArgs,
|
|
5
|
-
StatusListResult,
|
|
6
5
|
updateStatusIndexFromStatusListCredential,
|
|
7
6
|
} from '@sphereon/ssi-sdk.vc-status-list'
|
|
8
7
|
import { getDriver } from '@sphereon/ssi-sdk.vc-status-list-issuer-drivers'
|
|
9
8
|
import Debug from 'debug'
|
|
10
9
|
import { Request, Response, Router } from 'express'
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
IRequiredContext,
|
|
14
|
-
IW3CredentialStatusEndpointOpts,
|
|
15
|
-
UpdateIndexedCredentialStatusRequest,
|
|
16
|
-
UpdateW3cCredentialStatusRequest,
|
|
17
|
-
} from './types'
|
|
18
|
-
import { StatusListCredential, StatusListType } from '@sphereon/ssi-types'
|
|
19
|
-
import { IStatusListEntryEntity } from '@sphereon/ssi-sdk.data-store'
|
|
10
|
+
import { ICredentialStatusListEndpointOpts, IRequiredContext, IW3CredentialStatusEndpointOpts, UpdateCredentialStatusRequest } from './types'
|
|
11
|
+
import { StatusListType } from '@sphereon/ssi-types'
|
|
20
12
|
|
|
21
13
|
const debug = Debug('sphereon:ssi-sdk:status-list')
|
|
22
14
|
|
|
23
|
-
function sendStatuslistResponse(details: StatusListResult, statuslistPayload: StatusListCredential, response: Response) {
|
|
24
|
-
let payload: Buffer | StatusListCredential
|
|
25
|
-
|
|
26
|
-
switch (details.proofFormat) {
|
|
27
|
-
case 'jwt':
|
|
28
|
-
case 'cbor':
|
|
29
|
-
payload = Buffer.from(statuslistPayload as string, 'ascii')
|
|
30
|
-
break
|
|
31
|
-
default:
|
|
32
|
-
payload = statuslistPayload
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return response.status(200).setHeader('Content-Type', details.statuslistContentType).send(payload)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
15
|
export function createNewStatusListEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts) {
|
|
39
16
|
if (opts?.enabled === false) {
|
|
40
17
|
console.log(`Create new status list endpoint is disabled`)
|
|
@@ -48,9 +25,8 @@ export function createNewStatusListEndpoint(router: Router, context: IRequiredCo
|
|
|
48
25
|
if (!statusListArgs) {
|
|
49
26
|
return sendErrorResponse(response, 400, 'No statusList details supplied')
|
|
50
27
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
return sendStatuslistResponse(details, statuslistPayload, response)
|
|
28
|
+
const statusListDetails = await context.agent.slCreateStatusList(statusListArgs)
|
|
29
|
+
return response.send({ statusListDetails })
|
|
54
30
|
} catch (e) {
|
|
55
31
|
return sendErrorResponse(response, 500, e.message as string, e)
|
|
56
32
|
}
|
|
@@ -66,9 +42,7 @@ const buildStatusListId = (request: Request): string => {
|
|
|
66
42
|
host += `:${forwardedPort}`
|
|
67
43
|
}
|
|
68
44
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return `${protocol}://${host}${forwardedPrefix}${request.originalUrl.split('?')[0].replace(/\/status\/index\/.*/, '')}`
|
|
45
|
+
return `${protocol}://${host}${request.originalUrl}`
|
|
72
46
|
}
|
|
73
47
|
|
|
74
48
|
export function getStatusListCredentialEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts) {
|
|
@@ -80,15 +54,11 @@ export function getStatusListCredentialEndpoint(router: Router, context: IRequir
|
|
|
80
54
|
router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
81
55
|
try {
|
|
82
56
|
//todo: Check index against correlationId first. Then match originalUrl against statusList id
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
const driver = await getDriver({
|
|
86
|
-
...(correlationId ? { correlationId } : { id: buildStatusListId(request) }),
|
|
87
|
-
dbName: opts.dbName,
|
|
88
|
-
})
|
|
57
|
+
const correlationId = request.query.correlationId?.toString() ?? request.params.index?.toString() ?? request.originalUrl
|
|
58
|
+
const driver = await getDriver({ id: buildStatusListId(request), correlationId, dbName: opts.dbName })
|
|
89
59
|
const details = await driver.getStatusList()
|
|
90
|
-
|
|
91
|
-
return
|
|
60
|
+
response.statusCode = 200
|
|
61
|
+
return response.send(details.statusListCredential)
|
|
92
62
|
} catch (e) {
|
|
93
63
|
return sendErrorResponse(response, 500, e.message as string, e)
|
|
94
64
|
}
|
|
@@ -114,10 +84,10 @@ export function getStatusListCredentialIndexStatusEndpoint(router: Router, conte
|
|
|
114
84
|
if (!statusListIndex || statusListIndex < 0) {
|
|
115
85
|
return sendErrorResponse(response, 400, `Please provide a proper statusListIndex`)
|
|
116
86
|
}
|
|
117
|
-
|
|
118
|
-
const statusListCorrelationId = request.query.correlationId?.toString()
|
|
87
|
+
const correlationId = request.query.correlationId?.toString() ?? request.params.index?.toString() ?? request.originalUrl
|
|
119
88
|
const driver = await getDriver({
|
|
120
|
-
|
|
89
|
+
id: `${request.protocol}://${request.get('host')}${request.originalUrl.replace(/\/status\/index\/.*/, '')}`,
|
|
90
|
+
correlationId,
|
|
121
91
|
dbName: opts.dbName,
|
|
122
92
|
})
|
|
123
93
|
const details = await driver.getStatusList()
|
|
@@ -125,10 +95,10 @@ export function getStatusListCredentialIndexStatusEndpoint(router: Router, conte
|
|
|
125
95
|
return sendErrorResponse(response, 400, `Please provide a proper statusListIndex`)
|
|
126
96
|
}
|
|
127
97
|
|
|
128
|
-
const entityCorrelationId = request.query.entityCorrelationId?.toString()
|
|
129
98
|
let entry = await driver.getStatusListEntryByIndex({
|
|
99
|
+
statusListIndex,
|
|
130
100
|
statusListId: details.id,
|
|
131
|
-
|
|
101
|
+
correlationId: details.correlationId,
|
|
132
102
|
errorOnNotFound: false,
|
|
133
103
|
})
|
|
134
104
|
const type = details.type === StatusListType.StatusList2021 ? 'StatusList2021Entry' : details.type
|
|
@@ -148,14 +118,13 @@ export function getStatusListCredentialIndexStatusEndpoint(router: Router, conte
|
|
|
148
118
|
}
|
|
149
119
|
}
|
|
150
120
|
response.statusCode = 200
|
|
151
|
-
return response.send({ ...entry, status })
|
|
121
|
+
return response.send({ ...entry, status })
|
|
152
122
|
} catch (e) {
|
|
153
123
|
return sendErrorResponse(response, 500, e.message as string, e)
|
|
154
124
|
}
|
|
155
125
|
})
|
|
156
126
|
}
|
|
157
|
-
|
|
158
|
-
export function updateStatusEndpoint(router: Router, context: IRequiredContext, opts: IW3CredentialStatusEndpointOpts) {
|
|
127
|
+
export function updateW3CStatusEndpoint(router: Router, context: IRequiredContext, opts: IW3CredentialStatusEndpointOpts) {
|
|
159
128
|
if (opts?.enabled === false) {
|
|
160
129
|
console.log(`Update credential status endpoint is disabled`)
|
|
161
130
|
return
|
|
@@ -163,84 +132,66 @@ export function updateStatusEndpoint(router: Router, context: IRequiredContext,
|
|
|
163
132
|
router.post(opts?.path ?? '/credentials/status', checkAuth(opts?.endpoint), async (request: Request, response: Response) => {
|
|
164
133
|
try {
|
|
165
134
|
debug(JSON.stringify(request.body, null, 2))
|
|
166
|
-
const updateRequest = request.body as
|
|
135
|
+
const updateRequest = request.body as UpdateCredentialStatusRequest
|
|
167
136
|
const statusListId = updateRequest.statusListId ?? request.query.statusListId?.toString() ?? opts.statusListId
|
|
168
137
|
const statusListCorrelationId = updateRequest.statusListCorrelationId ?? request.query.statusListorrelationId?.toString() ?? opts.correlationId
|
|
169
138
|
const entryCorrelationId = updateRequest.entryCorrelationId ?? request.query.entryCorrelationId?.toString()
|
|
139
|
+
const credentialId = updateRequest.credentialId
|
|
170
140
|
|
|
171
141
|
// TODO: Move mostly to driver
|
|
172
|
-
if (!
|
|
173
|
-
return sendErrorResponse(response, 400, 'No statusList
|
|
142
|
+
if (!credentialId) {
|
|
143
|
+
return sendErrorResponse(response, 400, 'No statusList credentialId supplied')
|
|
174
144
|
} else if (!updateRequest.credentialStatus || updateRequest.credentialStatus.length === 0) {
|
|
175
145
|
return sendErrorResponse(response, 400, 'No statusList updates supplied')
|
|
146
|
+
} else if (!statusListId && !statusListCorrelationId) {
|
|
147
|
+
return sendErrorResponse(response, 400, 'No statusList id or correlation Id provided or deduced for the API or in the request')
|
|
176
148
|
}
|
|
177
|
-
const driver = await getDriver({
|
|
178
|
-
|
|
179
|
-
|
|
149
|
+
const driver = await getDriver({ id: statusListId, correlationId: statusListCorrelationId, dbName: opts.dbName })
|
|
150
|
+
// unfortunately the W3C API works by credentialId. Which means you will have to map listIndices during issuance
|
|
151
|
+
const statusListEntry = await driver.getStatusListEntryByCredentialId({
|
|
152
|
+
statusListId,
|
|
153
|
+
statusListCorrelationId,
|
|
154
|
+
entryCorrelationId,
|
|
155
|
+
credentialId,
|
|
156
|
+
errorOnNotFound: true,
|
|
180
157
|
})
|
|
181
|
-
|
|
182
|
-
// Get status list entry based on request type
|
|
183
|
-
let statusListEntry: IStatusListEntryEntity | undefined
|
|
184
|
-
if ('credentialId' in updateRequest) {
|
|
185
|
-
if (!updateRequest.credentialId) {
|
|
186
|
-
return sendErrorResponse(response, 400, 'No credentialId supplied')
|
|
187
|
-
}
|
|
188
|
-
// unfortunately the W3C API works by credentialId. Which means you will have to map listIndices during issuance
|
|
189
|
-
statusListEntry = await driver.getStatusListEntryByCredentialId({
|
|
190
|
-
statusListId,
|
|
191
|
-
statusListCorrelationId,
|
|
192
|
-
entryCorrelationId,
|
|
193
|
-
credentialId: updateRequest.credentialId,
|
|
194
|
-
errorOnNotFound: true,
|
|
195
|
-
})
|
|
196
|
-
} else {
|
|
197
|
-
if (!updateRequest.statusListIndex || updateRequest.statusListIndex < 0) {
|
|
198
|
-
return sendErrorResponse(response, 400, 'Invalid statusListIndex supplied')
|
|
199
|
-
}
|
|
200
|
-
const driver = await getDriver({
|
|
201
|
-
...(statusListCorrelationId ? { statusListCorrelationId } : { id: buildStatusListId(request) }),
|
|
202
|
-
dbName: opts.dbName,
|
|
203
|
-
})
|
|
204
|
-
const details = await driver.getStatusList()
|
|
205
|
-
|
|
206
|
-
statusListEntry = await driver.getStatusListEntryByIndex({
|
|
207
|
-
statusListId: details.id,
|
|
208
|
-
...(entryCorrelationId ? { correlationId: entryCorrelationId } : { statusListIndex: updateRequest.statusListIndex }),
|
|
209
|
-
errorOnNotFound: true,
|
|
210
|
-
})
|
|
211
|
-
}
|
|
212
|
-
|
|
213
158
|
if (!statusListEntry) {
|
|
214
|
-
|
|
215
|
-
|
|
159
|
+
return sendErrorResponse(
|
|
160
|
+
response,
|
|
161
|
+
404,
|
|
162
|
+
`status list index for credential id ${credentialId} was never recorded for ${statusListId}. This means the status will be 0`,
|
|
163
|
+
)
|
|
216
164
|
}
|
|
217
|
-
|
|
165
|
+
const statusListIndex = statusListEntry.statusListIndex
|
|
218
166
|
let details = await driver.getStatusList()
|
|
219
167
|
let statusListCredential = details.statusListCredential
|
|
220
168
|
|
|
221
169
|
for (const updateItem of updateRequest.credentialStatus) {
|
|
222
|
-
if (
|
|
223
|
-
return sendErrorResponse(response, 400, `
|
|
170
|
+
if (updateItem.type && updateItem.type !== 'StatusList2021') {
|
|
171
|
+
return sendErrorResponse(response, 400, `Only the optional type 'StatusList2021' is currently supported`)
|
|
224
172
|
}
|
|
225
173
|
|
|
226
|
-
|
|
174
|
+
if (!updateItem.status) {
|
|
175
|
+
return sendErrorResponse(
|
|
176
|
+
response,
|
|
177
|
+
400,
|
|
178
|
+
`Required 'status' value was missing in the credentialStatus array for credentialId ${credentialId}`,
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
const value = updateItem.status === '0' || updateItem.status.toLowerCase() === 'false' ? 0 : 1
|
|
227
182
|
const statusList = statusListId ?? statusListEntry.statusList
|
|
228
|
-
await driver.updateStatusListEntry({ ...statusListEntry, statusList, value })
|
|
183
|
+
await driver.updateStatusListEntry({ ...statusListEntry, statusListIndex, statusList, credentialId, value: value ? '1' : '0' })
|
|
229
184
|
|
|
230
185
|
// todo: optimize. We are now creating a new VC for every item passed in. Probably wise to look at DB as well
|
|
231
186
|
details = await updateStatusIndexFromStatusListCredential(
|
|
232
|
-
{
|
|
233
|
-
statusListCredential: statusListCredential,
|
|
234
|
-
statusListIndex: statusListEntry.statusListIndex,
|
|
235
|
-
value: parseInt(value),
|
|
236
|
-
keyRef: opts.keyRef,
|
|
237
|
-
},
|
|
187
|
+
{ statusListCredential: statusListCredential, statusListIndex, value, keyRef: opts.keyRef },
|
|
238
188
|
context,
|
|
239
189
|
)
|
|
240
190
|
details = await driver.updateStatusList({ statusListCredential: details.statusListCredential })
|
|
241
191
|
}
|
|
242
192
|
|
|
243
|
-
|
|
193
|
+
response.statusCode = 200
|
|
194
|
+
return response.send(details.statusListCredential)
|
|
244
195
|
} catch (e) {
|
|
245
196
|
return sendErrorResponse(response, 500, e.message as string, e)
|
|
246
197
|
}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
createNewStatusListEndpoint,
|
|
9
9
|
getStatusListCredentialEndpoint,
|
|
10
10
|
getStatusListCredentialIndexStatusEndpoint,
|
|
11
|
-
|
|
11
|
+
updateW3CStatusEndpoint,
|
|
12
12
|
} from './api-functions'
|
|
13
13
|
import { IStatusListOpts } from './types'
|
|
14
14
|
import { IRequiredPlugins } from '@sphereon/ssi-sdk.vc-status-list-issuer-drivers'
|
|
@@ -50,7 +50,7 @@ export class StatuslistManagementApiServer {
|
|
|
50
50
|
getStatusListCredentialIndexStatusEndpoint(this.router, context, opts.endpointOpts.getStatusList)
|
|
51
51
|
}
|
|
52
52
|
if (features.includes('w3c-vc-api-credential-status')) {
|
|
53
|
-
|
|
53
|
+
updateW3CStatusEndpoint(this.router, context, opts.endpointOpts.vcApiCredentialStatus)
|
|
54
54
|
}
|
|
55
55
|
this._express.use(opts?.endpointOpts?.basePath ?? '', this.router)
|
|
56
56
|
}
|
package/src/types.ts
CHANGED
|
@@ -31,15 +31,8 @@ export interface IW3CredentialStatusEndpointOpts extends ICredentialStatusListEn
|
|
|
31
31
|
keyRef?: string
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export interface
|
|
34
|
+
export interface UpdateCredentialStatusRequest {
|
|
35
35
|
credentialId: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface UpdateIndexedCredentialStatusRequest extends UpdateCredentialStatusRequest {
|
|
39
|
-
statusListIndex: number
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
interface UpdateCredentialStatusRequest {
|
|
43
36
|
credentialStatus: UpdateCredentialStatusItem[]
|
|
44
37
|
statusListId?: string // Non spec compliant. Allows us to manage multiple status lists. The VC API endpoint also has this config option, allowing for a default
|
|
45
38
|
statusListCorrelationId?: string // Non spec compliant. Allows us to manage multiple status lists. The VC API endpoint also has this config option, allowing for a default
|