@ajna-inc/openbadges 0.1.0
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/LICENSE +202 -0
- package/build/OpenBadgesModule.d.ts +10 -0
- package/build/OpenBadgesModule.js +75 -0
- package/build/OpenBadgesModule.js.map +1 -0
- package/build/OpenBadgesModuleConfig.d.ts +96 -0
- package/build/OpenBadgesModuleConfig.js +50 -0
- package/build/OpenBadgesModuleConfig.js.map +1 -0
- package/build/api/OpenBadgesApi.d.ts +48 -0
- package/build/api/OpenBadgesApi.js +81 -0
- package/build/api/OpenBadgesApi.js.map +1 -0
- package/build/api/index.d.ts +1 -0
- package/build/api/index.js +18 -0
- package/build/api/index.js.map +1 -0
- package/build/constants.d.ts +12 -0
- package/build/constants.js +27 -0
- package/build/constants.js.map +1 -0
- package/build/cryptosuites/EcdsaSd2023.d.ts +143 -0
- package/build/cryptosuites/EcdsaSd2023.js +518 -0
- package/build/cryptosuites/EcdsaSd2023.js.map +1 -0
- package/build/cryptosuites/EddsaRdfc2022.d.ts +112 -0
- package/build/cryptosuites/EddsaRdfc2022.js +356 -0
- package/build/cryptosuites/EddsaRdfc2022.js.map +1 -0
- package/build/cryptosuites/constants.d.ts +14 -0
- package/build/cryptosuites/constants.js +22 -0
- package/build/cryptosuites/constants.js.map +1 -0
- package/build/cryptosuites/contextPreprocessor.d.ts +24 -0
- package/build/cryptosuites/contextPreprocessor.js +127 -0
- package/build/cryptosuites/contextPreprocessor.js.map +1 -0
- package/build/cryptosuites/dataIntegrityV2Context.d.ts +144 -0
- package/build/cryptosuites/dataIntegrityV2Context.js +86 -0
- package/build/cryptosuites/dataIntegrityV2Context.js.map +1 -0
- package/build/cryptosuites/index.d.ts +11 -0
- package/build/cryptosuites/index.js +33 -0
- package/build/cryptosuites/index.js.map +1 -0
- package/build/http/OpenBadgesHttpModule.d.ts +9 -0
- package/build/http/OpenBadgesHttpModule.js +120 -0
- package/build/http/OpenBadgesHttpModule.js.map +1 -0
- package/build/http/OpenBadgesHttpModuleConfig.d.ts +55 -0
- package/build/http/OpenBadgesHttpModuleConfig.js +78 -0
- package/build/http/OpenBadgesHttpModuleConfig.js.map +1 -0
- package/build/http/endpoints/authorize.d.ts +3 -0
- package/build/http/endpoints/authorize.js +79 -0
- package/build/http/endpoints/authorize.js.map +1 -0
- package/build/http/endpoints/consent.d.ts +3 -0
- package/build/http/endpoints/consent.js +25 -0
- package/build/http/endpoints/consent.js.map +1 -0
- package/build/http/endpoints/credentials.d.ts +4 -0
- package/build/http/endpoints/credentials.js +85 -0
- package/build/http/endpoints/credentials.js.map +1 -0
- package/build/http/endpoints/did.d.ts +3 -0
- package/build/http/endpoints/did.js +48 -0
- package/build/http/endpoints/did.js.map +1 -0
- package/build/http/endpoints/introspect.d.ts +3 -0
- package/build/http/endpoints/introspect.js +37 -0
- package/build/http/endpoints/introspect.js.map +1 -0
- package/build/http/endpoints/jwks.d.ts +3 -0
- package/build/http/endpoints/jwks.js +46 -0
- package/build/http/endpoints/jwks.js.map +1 -0
- package/build/http/endpoints/profile.d.ts +4 -0
- package/build/http/endpoints/profile.js +58 -0
- package/build/http/endpoints/profile.js.map +1 -0
- package/build/http/endpoints/refresh.d.ts +15 -0
- package/build/http/endpoints/refresh.js +134 -0
- package/build/http/endpoints/refresh.js.map +1 -0
- package/build/http/endpoints/registration.d.ts +3 -0
- package/build/http/endpoints/registration.js +42 -0
- package/build/http/endpoints/registration.js.map +1 -0
- package/build/http/endpoints/revoke.d.ts +3 -0
- package/build/http/endpoints/revoke.js +38 -0
- package/build/http/endpoints/revoke.js.map +1 -0
- package/build/http/endpoints/serviceDescription.d.ts +3 -0
- package/build/http/endpoints/serviceDescription.js +52 -0
- package/build/http/endpoints/serviceDescription.js.map +1 -0
- package/build/http/endpoints/statusList.d.ts +10 -0
- package/build/http/endpoints/statusList.js +95 -0
- package/build/http/endpoints/statusList.js.map +1 -0
- package/build/http/endpoints/token.d.ts +3 -0
- package/build/http/endpoints/token.js +147 -0
- package/build/http/endpoints/token.js.map +1 -0
- package/build/http/middleware/auth.d.ts +5 -0
- package/build/http/middleware/auth.js +48 -0
- package/build/http/middleware/auth.js.map +1 -0
- package/build/http/router.d.ts +13 -0
- package/build/http/router.js +36 -0
- package/build/http/router.js.map +1 -0
- package/build/http/tenants.d.ts +2 -0
- package/build/http/tenants.js +20 -0
- package/build/http/tenants.js.map +1 -0
- package/build/http/util/auth.d.ts +8 -0
- package/build/http/util/auth.js +43 -0
- package/build/http/util/auth.js.map +1 -0
- package/build/index.d.ts +46 -0
- package/build/index.js +71 -0
- package/build/index.js.map +1 -0
- package/build/models/ClrCredential.d.ts +112 -0
- package/build/models/ClrCredential.js +52 -0
- package/build/models/ClrCredential.js.map +1 -0
- package/build/models/EndorsementCredential.d.ts +89 -0
- package/build/models/EndorsementCredential.js +11 -0
- package/build/models/EndorsementCredential.js.map +1 -0
- package/build/models/StatusListCredential.d.ts +81 -0
- package/build/models/StatusListCredential.js +28 -0
- package/build/models/StatusListCredential.js.map +1 -0
- package/build/models/index.d.ts +8 -0
- package/build/models/index.js +25 -0
- package/build/models/index.js.map +1 -0
- package/build/repository/OpenBadgeCredentialRecord.d.ts +44 -0
- package/build/repository/OpenBadgeCredentialRecord.js +46 -0
- package/build/repository/OpenBadgeCredentialRecord.js.map +1 -0
- package/build/repository/OpenBadgeCredentialRepository.d.ts +8 -0
- package/build/repository/OpenBadgeCredentialRepository.js +38 -0
- package/build/repository/OpenBadgeCredentialRepository.js.map +1 -0
- package/build/repository/OpenBadgesAuthCodeRecord.d.ts +35 -0
- package/build/repository/OpenBadgesAuthCodeRecord.js +28 -0
- package/build/repository/OpenBadgesAuthCodeRecord.js.map +1 -0
- package/build/repository/OpenBadgesAuthCodeRepository.d.ts +6 -0
- package/build/repository/OpenBadgesAuthCodeRepository.js +32 -0
- package/build/repository/OpenBadgesAuthCodeRepository.js.map +1 -0
- package/build/repository/OpenBadgesConsentRecord.d.ts +24 -0
- package/build/repository/OpenBadgesConsentRecord.js +23 -0
- package/build/repository/OpenBadgesConsentRecord.js.map +1 -0
- package/build/repository/OpenBadgesConsentRepository.d.ts +6 -0
- package/build/repository/OpenBadgesConsentRepository.js +32 -0
- package/build/repository/OpenBadgesConsentRepository.js.map +1 -0
- package/build/repository/OpenBadgesKeyBindingRecord.d.ts +24 -0
- package/build/repository/OpenBadgesKeyBindingRecord.js +32 -0
- package/build/repository/OpenBadgesKeyBindingRecord.js.map +1 -0
- package/build/repository/OpenBadgesKeyBindingRepository.d.ts +7 -0
- package/build/repository/OpenBadgesKeyBindingRepository.js +35 -0
- package/build/repository/OpenBadgesKeyBindingRepository.js.map +1 -0
- package/build/repository/OpenBadgesOAuthRecord.d.ts +35 -0
- package/build/repository/OpenBadgesOAuthRecord.js +25 -0
- package/build/repository/OpenBadgesOAuthRecord.js.map +1 -0
- package/build/repository/OpenBadgesOAuthRepository.d.ts +8 -0
- package/build/repository/OpenBadgesOAuthRepository.js +38 -0
- package/build/repository/OpenBadgesOAuthRepository.js.map +1 -0
- package/build/repository/OpenBadgesProfileRecord.d.ts +21 -0
- package/build/repository/OpenBadgesProfileRecord.js +22 -0
- package/build/repository/OpenBadgesProfileRecord.js.map +1 -0
- package/build/repository/OpenBadgesProfileRepository.d.ts +6 -0
- package/build/repository/OpenBadgesProfileRepository.js +32 -0
- package/build/repository/OpenBadgesProfileRepository.js.map +1 -0
- package/build/repository/OpenBadgesRevocationCacheRecord.d.ts +23 -0
- package/build/repository/OpenBadgesRevocationCacheRecord.js +23 -0
- package/build/repository/OpenBadgesRevocationCacheRecord.js.map +1 -0
- package/build/repository/OpenBadgesRevocationCacheRepository.d.ts +6 -0
- package/build/repository/OpenBadgesRevocationCacheRepository.js +32 -0
- package/build/repository/OpenBadgesRevocationCacheRepository.js.map +1 -0
- package/build/repository/OpenBadgesServiceDescriptionRecord.d.ts +21 -0
- package/build/repository/OpenBadgesServiceDescriptionRecord.js +22 -0
- package/build/repository/OpenBadgesServiceDescriptionRecord.js.map +1 -0
- package/build/repository/OpenBadgesServiceDescriptionRepository.d.ts +6 -0
- package/build/repository/OpenBadgesServiceDescriptionRepository.js +32 -0
- package/build/repository/OpenBadgesServiceDescriptionRepository.js.map +1 -0
- package/build/repository/OpenBadgesTokenRecord.d.ts +39 -0
- package/build/repository/OpenBadgesTokenRecord.js +36 -0
- package/build/repository/OpenBadgesTokenRecord.js.map +1 -0
- package/build/repository/OpenBadgesTokenRepository.d.ts +9 -0
- package/build/repository/OpenBadgesTokenRepository.js +45 -0
- package/build/repository/OpenBadgesTokenRepository.js.map +1 -0
- package/build/repository/StatusListRecord.d.ts +49 -0
- package/build/repository/StatusListRecord.js +47 -0
- package/build/repository/StatusListRecord.js.map +1 -0
- package/build/repository/StatusListRepository.d.ts +24 -0
- package/build/repository/StatusListRepository.js +52 -0
- package/build/repository/StatusListRepository.js.map +1 -0
- package/build/repository/index.d.ts +18 -0
- package/build/repository/index.js +35 -0
- package/build/repository/index.js.map +1 -0
- package/build/services/AchievementValidator.d.ts +158 -0
- package/build/services/AchievementValidator.js +238 -0
- package/build/services/AchievementValidator.js.map +1 -0
- package/build/services/ConsumerService.d.ts +24 -0
- package/build/services/ConsumerService.js +143 -0
- package/build/services/ConsumerService.js.map +1 -0
- package/build/services/ContextService.d.ts +14 -0
- package/build/services/ContextService.js +54 -0
- package/build/services/ContextService.js.map +1 -0
- package/build/services/DataIntegrityService.d.ts +51 -0
- package/build/services/DataIntegrityService.js +134 -0
- package/build/services/DataIntegrityService.js.map +1 -0
- package/build/services/DidCommLinkService.d.ts +7 -0
- package/build/services/DidCommLinkService.js +20 -0
- package/build/services/DidCommLinkService.js.map +1 -0
- package/build/services/DisplayMapper.d.ts +9 -0
- package/build/services/DisplayMapper.js +26 -0
- package/build/services/DisplayMapper.js.map +1 -0
- package/build/services/IssuerService.d.ts +38 -0
- package/build/services/IssuerService.js +225 -0
- package/build/services/IssuerService.js.map +1 -0
- package/build/services/JwtService.d.ts +19 -0
- package/build/services/JwtService.js +229 -0
- package/build/services/JwtService.js.map +1 -0
- package/build/services/KeyService.d.ts +102 -0
- package/build/services/KeyService.js +439 -0
- package/build/services/KeyService.js.map +1 -0
- package/build/services/OAuthClient.d.ts +26 -0
- package/build/services/OAuthClient.js +127 -0
- package/build/services/OAuthClient.js.map +1 -0
- package/build/services/ProofService.d.ts +15 -0
- package/build/services/ProofService.js +43 -0
- package/build/services/ProofService.js.map +1 -0
- package/build/services/RevocationService.d.ts +59 -0
- package/build/services/RevocationService.js +319 -0
- package/build/services/RevocationService.js.map +1 -0
- package/build/services/VerifyService.d.ts +17 -0
- package/build/services/VerifyService.js +54 -0
- package/build/services/VerifyService.js.map +1 -0
- package/build/services/crypto/CryptoDriver.d.ts +9 -0
- package/build/services/crypto/CryptoDriver.js +7 -0
- package/build/services/crypto/CryptoDriver.js.map +1 -0
- package/build/services/crypto/JsonLdCryptoDriver.d.ts +17 -0
- package/build/services/crypto/JsonLdCryptoDriver.js +45 -0
- package/build/services/crypto/JsonLdCryptoDriver.js.map +1 -0
- package/build/services/crypto/JwtCryptoDriver.d.ts +13 -0
- package/build/services/crypto/JwtCryptoDriver.js +42 -0
- package/build/services/crypto/JwtCryptoDriver.js.map +1 -0
- package/build/services/index.d.ts +12 -0
- package/build/services/index.js +29 -0
- package/build/services/index.js.map +1 -0
- package/build/utils/validate.d.ts +17 -0
- package/build/utils/validate.js +107 -0
- package/build/utils/validate.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,143 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
|
+
};
|
|
34
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
35
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.ConsumerService = void 0;
|
|
39
|
+
const core_1 = require("@credo-ts/core");
|
|
40
|
+
const OpenBadgesServiceDescriptionRepository_1 = require("../repository/OpenBadgesServiceDescriptionRepository");
|
|
41
|
+
const OpenBadgesOAuthRepository_1 = require("../repository/OpenBadgesOAuthRepository");
|
|
42
|
+
const OAuthClient_1 = require("./OAuthClient");
|
|
43
|
+
let ConsumerService = class ConsumerService {
|
|
44
|
+
constructor(sddRepo, oauthRepo, oauth) {
|
|
45
|
+
this.sddRepo = sddRepo;
|
|
46
|
+
this.oauthRepo = oauthRepo;
|
|
47
|
+
this.oauth = oauth;
|
|
48
|
+
}
|
|
49
|
+
async importFromUrl(agentContext, url, options) {
|
|
50
|
+
const discoveryUrl = options?.discoveryUrl ?? new URL('/ims/ob/v3p0/discovery', url).toString();
|
|
51
|
+
const sdd = await this.ensureServiceDescription(agentContext, discoveryUrl);
|
|
52
|
+
const regUrl = sdd?.components?.securitySchemes?.OAuth2ACG?.['x-imssf-registrationUrl'];
|
|
53
|
+
const authUrl = sdd?.components?.securitySchemes?.OAuth2ACG?.flows?.authorizationCode?.authorizationUrl;
|
|
54
|
+
if (!regUrl || !authUrl)
|
|
55
|
+
throw new Error('discovery_incomplete');
|
|
56
|
+
const registration = await this.oauth.registerClient(agentContext, regUrl, {
|
|
57
|
+
client_name: agentContext.config.label ?? 'Credo OB Client',
|
|
58
|
+
redirect_uris: ['http://localhost/callback'],
|
|
59
|
+
scope: Object.keys(sdd.components?.securitySchemes?.OAuth2ACG?.flows?.authorizationCode?.scopes ?? {}).join(' '),
|
|
60
|
+
grant_types: ['authorization_code', 'refresh_token'],
|
|
61
|
+
response_types: ['code'],
|
|
62
|
+
application_type: 'web',
|
|
63
|
+
});
|
|
64
|
+
const authorizationUrl = this.oauth.buildAuthorizationUrl(authUrl, {
|
|
65
|
+
response_type: 'code',
|
|
66
|
+
client_id: registration.client_id,
|
|
67
|
+
redirect_uri: registration.redirect_uris?.[0] ?? '',
|
|
68
|
+
scope: registration.scope ?? '',
|
|
69
|
+
state: Math.random().toString(36).slice(2),
|
|
70
|
+
code_challenge_method: 'S256',
|
|
71
|
+
code_challenge: Math.random().toString(36).slice(2),
|
|
72
|
+
});
|
|
73
|
+
return { discovery: sdd, registration, authorizationUrl, host: new URL(url).origin };
|
|
74
|
+
}
|
|
75
|
+
async ensureServiceDescription(agentContext, discoveryUrl) {
|
|
76
|
+
try {
|
|
77
|
+
const existing = await this.sddRepo.findByDiscoveryUrl(agentContext, discoveryUrl);
|
|
78
|
+
if (existing)
|
|
79
|
+
return existing.serviceDescription;
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
const res = await fetch(discoveryUrl);
|
|
83
|
+
if (!res.ok)
|
|
84
|
+
throw new Error(`discovery_failed: ${res.status}`);
|
|
85
|
+
const json = await res.json();
|
|
86
|
+
await this.sddRepo.save(agentContext, {
|
|
87
|
+
discoveryUrl,
|
|
88
|
+
serviceDescription: json,
|
|
89
|
+
});
|
|
90
|
+
return json;
|
|
91
|
+
}
|
|
92
|
+
async upsertToRemote(agentContext, baseUrl, credential) {
|
|
93
|
+
const host = new URL(baseUrl).origin;
|
|
94
|
+
const oauth = await this.oauthRepo.findByHost(agentContext, host);
|
|
95
|
+
if (!oauth?.[0]?.clientRegistration)
|
|
96
|
+
throw new Error('no_client_registration');
|
|
97
|
+
const reg = oauth[0].clientRegistration;
|
|
98
|
+
const tokenUrl = reg?.token_endpoint || reg?.tokenUrl || new URL('/token', baseUrl).toString();
|
|
99
|
+
const clientId = reg.client_id;
|
|
100
|
+
const clientSecret = reg.client_secret;
|
|
101
|
+
if (!clientId || !clientSecret)
|
|
102
|
+
throw new Error('missing_client_credentials');
|
|
103
|
+
// Try to get a valid access token from token repository
|
|
104
|
+
const { OpenBadgesTokenRepository } = await Promise.resolve().then(() => __importStar(require('../repository/OpenBadgesTokenRepository')));
|
|
105
|
+
const tokens = agentContext.dependencyManager.resolve(OpenBadgesTokenRepository);
|
|
106
|
+
let access = await tokens.findValidAccessByClientHost(agentContext, clientId, host);
|
|
107
|
+
if (!access) {
|
|
108
|
+
// refresh
|
|
109
|
+
const refresh = await tokens.findRefreshByClientHost(agentContext, clientId, host);
|
|
110
|
+
if (!refresh)
|
|
111
|
+
throw new Error('no_refresh_token');
|
|
112
|
+
const refreshed = await this.oauth.getAccessToken(agentContext, tokenUrl, {
|
|
113
|
+
client_id: clientId,
|
|
114
|
+
client_secret: clientSecret,
|
|
115
|
+
refresh_token: refresh.token,
|
|
116
|
+
host,
|
|
117
|
+
});
|
|
118
|
+
access = await tokens.findValidAccessByClientHost(agentContext, clientId, host);
|
|
119
|
+
if (!access)
|
|
120
|
+
throw new Error('refresh_failed');
|
|
121
|
+
}
|
|
122
|
+
const url = new URL('/ims/ob/v3p0/credentials', baseUrl).toString();
|
|
123
|
+
const res = await fetch(url, {
|
|
124
|
+
method: 'POST',
|
|
125
|
+
headers: { authorization: `Bearer ${access.token}`, 'content-type': 'application/json' },
|
|
126
|
+
body: JSON.stringify(credential),
|
|
127
|
+
});
|
|
128
|
+
if (!res.ok)
|
|
129
|
+
throw new Error(`upsert_failed: ${res.status}`);
|
|
130
|
+
return res.json();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
exports.ConsumerService = ConsumerService;
|
|
134
|
+
exports.ConsumerService = ConsumerService = __decorate([
|
|
135
|
+
(0, core_1.injectable)(),
|
|
136
|
+
__param(0, (0, core_1.inject)(OpenBadgesServiceDescriptionRepository_1.OpenBadgesServiceDescriptionRepository)),
|
|
137
|
+
__param(1, (0, core_1.inject)(OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository)),
|
|
138
|
+
__param(2, (0, core_1.inject)(OAuthClient_1.OAuthClient)),
|
|
139
|
+
__metadata("design:paramtypes", [OpenBadgesServiceDescriptionRepository_1.OpenBadgesServiceDescriptionRepository,
|
|
140
|
+
OpenBadgesOAuthRepository_1.OpenBadgesOAuthRepository,
|
|
141
|
+
OAuthClient_1.OAuthClient])
|
|
142
|
+
], ConsumerService);
|
|
143
|
+
//# sourceMappingURL=ConsumerService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsumerService.js","sourceRoot":"","sources":["../../src/services/ConsumerService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type LoaderResult = {
|
|
2
|
+
contextUrl: null;
|
|
3
|
+
documentUrl: string;
|
|
4
|
+
document: any;
|
|
5
|
+
};
|
|
6
|
+
export declare class ContextService {
|
|
7
|
+
private cache;
|
|
8
|
+
private allowNetwork;
|
|
9
|
+
addCached(url: string, document: any): void;
|
|
10
|
+
setAllowNetwork(allow: boolean): void;
|
|
11
|
+
getDocumentLoader(): (url: string) => Promise<LoaderResult>;
|
|
12
|
+
exportCache(): Record<string, any>;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ContextService = void 0;
|
|
10
|
+
const core_1 = require("@credo-ts/core");
|
|
11
|
+
let ContextService = class ContextService {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.cache = new Map();
|
|
14
|
+
this.allowNetwork = true;
|
|
15
|
+
}
|
|
16
|
+
addCached(url, document) {
|
|
17
|
+
this.cache.set(url, document);
|
|
18
|
+
}
|
|
19
|
+
setAllowNetwork(allow) {
|
|
20
|
+
this.allowNetwork = allow;
|
|
21
|
+
}
|
|
22
|
+
getDocumentLoader() {
|
|
23
|
+
const self = this;
|
|
24
|
+
return async function documentLoader(url) {
|
|
25
|
+
if (self.cache.has(url)) {
|
|
26
|
+
return { contextUrl: null, documentUrl: url, document: self.cache.get(url) };
|
|
27
|
+
}
|
|
28
|
+
if (!self.allowNetwork)
|
|
29
|
+
throw new Error(`Context not cached: ${url}`);
|
|
30
|
+
// pin to https and specific hosts by default; allow did:web document resolution via https
|
|
31
|
+
const allowed = url.startsWith('https://www.w3.org/') || url.startsWith('https://purl.imsglobal.org/') || url.startsWith('https://w3id.org/') || url.startsWith('https://');
|
|
32
|
+
if (!allowed)
|
|
33
|
+
throw new Error(`Blocked remote context: ${url}`);
|
|
34
|
+
const res = await fetch(url);
|
|
35
|
+
if (!res.ok)
|
|
36
|
+
throw new Error(`Failed to fetch context ${url}: ${res.status}`);
|
|
37
|
+
const json = await res.json();
|
|
38
|
+
self.cache.set(url, json);
|
|
39
|
+
return { contextUrl: null, documentUrl: url, document: json };
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Export cached contexts for external runners (testing)
|
|
43
|
+
exportCache() {
|
|
44
|
+
const out = {};
|
|
45
|
+
for (const [k, v] of this.cache.entries())
|
|
46
|
+
out[k] = v;
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.ContextService = ContextService;
|
|
51
|
+
exports.ContextService = ContextService = __decorate([
|
|
52
|
+
(0, core_1.injectable)()
|
|
53
|
+
], ContextService);
|
|
54
|
+
//# sourceMappingURL=ContextService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextService.js","sourceRoot":"","sources":["../../src/services/ContextService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA2C;AAKpC,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACG,UAAK,GAAG,IAAI,GAAG,EAAe,CAAA;QAC9B,iBAAY,GAAG,IAAI,CAAA;IAkC7B,CAAC;IAhCQ,SAAS,CAAC,GAAW,EAAE,QAAa;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAEM,eAAe,CAAC,KAAc;QACnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAEM,iBAAiB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO,KAAK,UAAU,cAAc,CAAC,GAAW;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAA;YAC9E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;YACrE,0FAA0F;YAC1F,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,6BAA6B,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAC3K,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;YAC/D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YAC7E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC/D,CAAC,CAAA;IACH,CAAC;IAED,wDAAwD;IACjD,WAAW;QAChB,MAAM,GAAG,GAAwB,EAAE,CAAA;QACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACrD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAA;AApCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,iBAAU,GAAE;GACA,cAAc,CAoC1B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AgentContext } from '@credo-ts/core';
|
|
2
|
+
import { ContextService } from './ContextService';
|
|
3
|
+
/**
|
|
4
|
+
* DataIntegrityService
|
|
5
|
+
*
|
|
6
|
+
* Handles signing and verification of credentials using the eddsa-rdfc-2022 cryptosuite.
|
|
7
|
+
* This produces DataIntegrityProof proofs compatible with Credly and other OBv3 issuers.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DataIntegrityService {
|
|
10
|
+
private readonly contextService;
|
|
11
|
+
private readonly eddsaRdfc2022;
|
|
12
|
+
constructor(contextService: ContextService);
|
|
13
|
+
/**
|
|
14
|
+
* Sign a document using eddsa-rdfc-2022 cryptosuite
|
|
15
|
+
*
|
|
16
|
+
* Produces a DataIntegrityProof with:
|
|
17
|
+
* - type: "DataIntegrityProof"
|
|
18
|
+
* - cryptosuite: "eddsa-rdfc-2022"
|
|
19
|
+
* - RDFC-1.0 canonicalization
|
|
20
|
+
* - Ed25519 signature
|
|
21
|
+
*/
|
|
22
|
+
sign(_agentContext: AgentContext, document: Record<string, unknown>, keyPair: {
|
|
23
|
+
id: string;
|
|
24
|
+
controller: string;
|
|
25
|
+
publicKeyMultibase?: string;
|
|
26
|
+
privateKeyMultibase: string;
|
|
27
|
+
}): Promise<Record<string, unknown>>;
|
|
28
|
+
/**
|
|
29
|
+
* Verify a signed document with DataIntegrityProof
|
|
30
|
+
*
|
|
31
|
+
* Supports verification of eddsa-rdfc-2022 proofs by:
|
|
32
|
+
* 1. Resolving the public key from the verificationMethod DID
|
|
33
|
+
* 2. Using RDFC-1.0 canonicalization to recreate the signed hash
|
|
34
|
+
* 3. Verifying the Ed25519 signature
|
|
35
|
+
*/
|
|
36
|
+
verify(document: Record<string, unknown>): Promise<{
|
|
37
|
+
verified: boolean;
|
|
38
|
+
error?: string;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the default cryptosuite identifier
|
|
42
|
+
*/
|
|
43
|
+
getDefaultCryptosuite(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Resolve public key from a verification method ID
|
|
46
|
+
*
|
|
47
|
+
* This fetches the DID document and extracts the publicKeyMultibase
|
|
48
|
+
* from the matching verification method.
|
|
49
|
+
*/
|
|
50
|
+
private resolvePublicKey;
|
|
51
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DataIntegrityService = void 0;
|
|
16
|
+
const core_1 = require("@credo-ts/core");
|
|
17
|
+
const ContextService_1 = require("./ContextService");
|
|
18
|
+
const constants_1 = require("../constants");
|
|
19
|
+
const EddsaRdfc2022_1 = require("../cryptosuites/EddsaRdfc2022");
|
|
20
|
+
/**
|
|
21
|
+
* DataIntegrityService
|
|
22
|
+
*
|
|
23
|
+
* Handles signing and verification of credentials using the eddsa-rdfc-2022 cryptosuite.
|
|
24
|
+
* This produces DataIntegrityProof proofs compatible with Credly and other OBv3 issuers.
|
|
25
|
+
*/
|
|
26
|
+
let DataIntegrityService = class DataIntegrityService {
|
|
27
|
+
constructor(contextService) {
|
|
28
|
+
this.contextService = contextService;
|
|
29
|
+
this.eddsaRdfc2022 = new EddsaRdfc2022_1.EddsaRdfc2022Cryptosuite();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sign a document using eddsa-rdfc-2022 cryptosuite
|
|
33
|
+
*
|
|
34
|
+
* Produces a DataIntegrityProof with:
|
|
35
|
+
* - type: "DataIntegrityProof"
|
|
36
|
+
* - cryptosuite: "eddsa-rdfc-2022"
|
|
37
|
+
* - RDFC-1.0 canonicalization
|
|
38
|
+
* - Ed25519 signature
|
|
39
|
+
*/
|
|
40
|
+
async sign(_agentContext, document, keyPair) {
|
|
41
|
+
return this.eddsaRdfc2022.sign({
|
|
42
|
+
document,
|
|
43
|
+
keyPair: {
|
|
44
|
+
id: keyPair.id,
|
|
45
|
+
controller: keyPair.controller,
|
|
46
|
+
publicKeyMultibase: keyPair.publicKeyMultibase || '',
|
|
47
|
+
privateKeyMultibase: keyPair.privateKeyMultibase,
|
|
48
|
+
},
|
|
49
|
+
purpose: 'assertionMethod',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Verify a signed document with DataIntegrityProof
|
|
54
|
+
*
|
|
55
|
+
* Supports verification of eddsa-rdfc-2022 proofs by:
|
|
56
|
+
* 1. Resolving the public key from the verificationMethod DID
|
|
57
|
+
* 2. Using RDFC-1.0 canonicalization to recreate the signed hash
|
|
58
|
+
* 3. Verifying the Ed25519 signature
|
|
59
|
+
*/
|
|
60
|
+
async verify(document) {
|
|
61
|
+
try {
|
|
62
|
+
const proof = document.proof;
|
|
63
|
+
if (!proof) {
|
|
64
|
+
return { verified: false, error: 'No proof found in document' };
|
|
65
|
+
}
|
|
66
|
+
const proofs = Array.isArray(proof) ? proof : [proof];
|
|
67
|
+
for (const p of proofs) {
|
|
68
|
+
// Check if this is an eddsa-rdfc-2022 proof
|
|
69
|
+
if (this.eddsaRdfc2022.matchProof(p)) {
|
|
70
|
+
// Resolve public key from verification method
|
|
71
|
+
const publicKeyMultibase = await this.resolvePublicKey(p.verificationMethod);
|
|
72
|
+
if (!publicKeyMultibase) {
|
|
73
|
+
return { verified: false, error: `Could not resolve public key from ${p.verificationMethod}` };
|
|
74
|
+
}
|
|
75
|
+
return this.eddsaRdfc2022.verify({
|
|
76
|
+
document,
|
|
77
|
+
proof: p,
|
|
78
|
+
publicKeyMultibase,
|
|
79
|
+
// Use internal cached contexts for verification
|
|
80
|
+
// Network contexts are fetched during real-world usage by the cryptosuite
|
|
81
|
+
useNetworkContexts: false,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { verified: false, error: 'No matching eddsa-rdfc-2022 proof found' };
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
const error = e;
|
|
89
|
+
return { verified: false, error: error?.message || String(e) };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get the default cryptosuite identifier
|
|
94
|
+
*/
|
|
95
|
+
getDefaultCryptosuite() {
|
|
96
|
+
return constants_1.DI_EDDSA_RDFC_2022;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve public key from a verification method ID
|
|
100
|
+
*
|
|
101
|
+
* This fetches the DID document and extracts the publicKeyMultibase
|
|
102
|
+
* from the matching verification method.
|
|
103
|
+
*/
|
|
104
|
+
async resolvePublicKey(verificationMethodId) {
|
|
105
|
+
try {
|
|
106
|
+
const documentLoader = this.contextService.getDocumentLoader();
|
|
107
|
+
const result = await documentLoader(verificationMethodId);
|
|
108
|
+
// The document loader should return the verification method object
|
|
109
|
+
const vm = result.document;
|
|
110
|
+
if (vm.publicKeyMultibase) {
|
|
111
|
+
return vm.publicKeyMultibase;
|
|
112
|
+
}
|
|
113
|
+
// If we got a full DID document, find the verification method
|
|
114
|
+
const didDoc = result.document;
|
|
115
|
+
if (didDoc.verificationMethod) {
|
|
116
|
+
const method = didDoc.verificationMethod.find((m) => m.id === verificationMethodId);
|
|
117
|
+
if (method?.publicKeyMultibase) {
|
|
118
|
+
return method.publicKeyMultibase;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
exports.DataIntegrityService = DataIntegrityService;
|
|
129
|
+
exports.DataIntegrityService = DataIntegrityService = __decorate([
|
|
130
|
+
(0, core_1.injectable)(),
|
|
131
|
+
__param(0, (0, core_1.inject)(ContextService_1.ContextService)),
|
|
132
|
+
__metadata("design:paramtypes", [ContextService_1.ContextService])
|
|
133
|
+
], DataIntegrityService);
|
|
134
|
+
//# sourceMappingURL=DataIntegrityService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataIntegrityService.js","sourceRoot":"","sources":["../../src/services/DataIntegrityService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DidCommLinkService = void 0;
|
|
10
|
+
const core_1 = require("@credo-ts/core");
|
|
11
|
+
let DidCommLinkService = class DidCommLinkService {
|
|
12
|
+
async sendCredentialUrl(_agentContext, _connectionId, _payload) {
|
|
13
|
+
throw new Error('DidCommLinkService.sendCredentialUrl not implemented yet');
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
exports.DidCommLinkService = DidCommLinkService;
|
|
17
|
+
exports.DidCommLinkService = DidCommLinkService = __decorate([
|
|
18
|
+
(0, core_1.injectable)()
|
|
19
|
+
], DidCommLinkService);
|
|
20
|
+
//# sourceMappingURL=DidCommLinkService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DidCommLinkService.js","sourceRoot":"","sources":["../../src/services/DidCommLinkService.ts"],"names":[],"mappings":";;;;;;;;;AACA,yCAA2C;AAGpC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACtB,KAAK,CAAC,iBAAiB,CAAC,aAA2B,EAAE,aAAqB,EAAE,QAAgD;QACjI,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;CACF,CAAA;AAJY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,iBAAU,GAAE;GACA,kBAAkB,CAI9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DisplayMapper = void 0;
|
|
10
|
+
const core_1 = require("@credo-ts/core");
|
|
11
|
+
let DisplayMapper = class DisplayMapper {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
+
toDisplay(credential) {
|
|
14
|
+
const issuerName = credential?.issuer?.name;
|
|
15
|
+
const issuedOn = credential?.validFrom ?? credential?.issuanceDate;
|
|
16
|
+
const title = credential?.name ?? credential?.credentialSubject?.achievement?.name;
|
|
17
|
+
const description = credential?.credentialSubject?.achievement?.description;
|
|
18
|
+
const image = credential?.credentialSubject?.achievement?.image?.id;
|
|
19
|
+
return { title, description, issuerName, issuedOn, image };
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.DisplayMapper = DisplayMapper;
|
|
23
|
+
exports.DisplayMapper = DisplayMapper = __decorate([
|
|
24
|
+
(0, core_1.injectable)()
|
|
25
|
+
], DisplayMapper);
|
|
26
|
+
//# sourceMappingURL=DisplayMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DisplayMapper.js","sourceRoot":"","sources":["../../src/services/DisplayMapper.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,8DAA8D;IACvD,SAAS,CAAC,UAAe;QAC9B,MAAM,UAAU,GAAG,UAAU,EAAE,MAAM,EAAE,IAAI,CAAA;QAC3C,MAAM,QAAQ,GAAG,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,YAAY,CAAA;QAClE,MAAM,KAAK,GAAG,UAAU,EAAE,IAAI,IAAI,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAA;QAClF,MAAM,WAAW,GAAG,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAA;QAC3E,MAAM,KAAK,GAAG,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAA;QACnE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC5D,CAAC;CACF,CAAA;AAVY,sCAAa;wBAAb,aAAa;IADzB,IAAA,iBAAU,GAAE;GACA,aAAa,CAUzB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AgentContext } from '@credo-ts/core';
|
|
2
|
+
import { OpenBadgeCredentialRepository } from '../repository/OpenBadgeCredentialRepository';
|
|
3
|
+
import { OpenBadgeCredentialRecord } from '../repository/OpenBadgeCredentialRecord';
|
|
4
|
+
import type { EndorsementCredentialInput } from '../models/EndorsementCredential';
|
|
5
|
+
import type { ClrCredentialInput } from '../models/ClrCredential';
|
|
6
|
+
import { ProofService } from './ProofService';
|
|
7
|
+
import { OpenBadgesModuleConfig } from '../OpenBadgesModuleConfig';
|
|
8
|
+
import { KeyService } from './KeyService';
|
|
9
|
+
export declare class IssuerService {
|
|
10
|
+
private readonly repository;
|
|
11
|
+
private readonly proofs;
|
|
12
|
+
private readonly keys;
|
|
13
|
+
private readonly config;
|
|
14
|
+
constructor(repository: OpenBadgeCredentialRepository, proofs: ProofService, keys: KeyService, config: OpenBadgesModuleConfig);
|
|
15
|
+
issueCredential(agentContext: AgentContext, input: any): Promise<OpenBadgeCredentialRecord>;
|
|
16
|
+
/**
|
|
17
|
+
* Issues an EndorsementCredential - a third-party validation credential
|
|
18
|
+
*
|
|
19
|
+
* EndorsementCredentials allow external organizations or individuals to
|
|
20
|
+
* endorse achievements, profiles, or other credentials.
|
|
21
|
+
*
|
|
22
|
+
* @param agentContext - The agent context
|
|
23
|
+
* @param input - The endorsement credential input
|
|
24
|
+
* @returns The saved credential record
|
|
25
|
+
*/
|
|
26
|
+
issueEndorsement(agentContext: AgentContext, input: EndorsementCredentialInput): Promise<OpenBadgeCredentialRecord>;
|
|
27
|
+
/**
|
|
28
|
+
* Issues a ClrCredential - a Comprehensive Learner Record bundling multiple credentials
|
|
29
|
+
*
|
|
30
|
+
* CLR credentials allow bundling multiple OpenBadgeCredentials into a single
|
|
31
|
+
* verifiable credential representing a learner's complete achievement record.
|
|
32
|
+
*
|
|
33
|
+
* @param agentContext - The agent context
|
|
34
|
+
* @param input - The CLR credential input
|
|
35
|
+
* @returns The saved credential record
|
|
36
|
+
*/
|
|
37
|
+
issueClr(agentContext: AgentContext, input: ClrCredentialInput): Promise<OpenBadgeCredentialRecord>;
|
|
38
|
+
}
|