@sphereon/ssi-sdk.ebsi-support 0.26.1-unstable.101

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +13 -0
  3. package/dist/agent/EbsiSupport.d.ts +12 -0
  4. package/dist/agent/EbsiSupport.d.ts.map +1 -0
  5. package/dist/agent/EbsiSupport.js +202 -0
  6. package/dist/agent/EbsiSupport.js.map +1 -0
  7. package/dist/did/EbsiDidProvider.d.ts +47 -0
  8. package/dist/did/EbsiDidProvider.d.ts.map +1 -0
  9. package/dist/did/EbsiDidProvider.js +172 -0
  10. package/dist/did/EbsiDidProvider.js.map +1 -0
  11. package/dist/did/EbsiDidResolver.d.ts +5 -0
  12. package/dist/did/EbsiDidResolver.d.ts.map +1 -0
  13. package/dist/did/EbsiDidResolver.js +10 -0
  14. package/dist/did/EbsiDidResolver.js.map +1 -0
  15. package/dist/did/functions.d.ts +66 -0
  16. package/dist/did/functions.d.ts.map +1 -0
  17. package/dist/did/functions.js +416 -0
  18. package/dist/did/functions.js.map +1 -0
  19. package/dist/did/index.d.ts +6 -0
  20. package/dist/did/index.d.ts.map +1 -0
  21. package/dist/did/index.js +6 -0
  22. package/dist/did/index.js.map +1 -0
  23. package/dist/did/services/EbsiRPCService.d.ts +13 -0
  24. package/dist/did/services/EbsiRPCService.d.ts.map +1 -0
  25. package/dist/did/services/EbsiRPCService.js +64 -0
  26. package/dist/did/services/EbsiRPCService.js.map +1 -0
  27. package/dist/did/services/EbsiRestService.d.ts +37 -0
  28. package/dist/did/services/EbsiRestService.d.ts.map +1 -0
  29. package/dist/did/services/EbsiRestService.js +90 -0
  30. package/dist/did/services/EbsiRestService.js.map +1 -0
  31. package/dist/did/types.d.ts +386 -0
  32. package/dist/did/types.d.ts.map +1 -0
  33. package/dist/did/types.js +47 -0
  34. package/dist/did/types.js.map +1 -0
  35. package/dist/functions/Attestation.d.ts +32 -0
  36. package/dist/functions/Attestation.d.ts.map +1 -0
  37. package/dist/functions/Attestation.js +182 -0
  38. package/dist/functions/Attestation.js.map +1 -0
  39. package/dist/functions/AttestationHeadlessCallbacks.d.ts +17 -0
  40. package/dist/functions/AttestationHeadlessCallbacks.d.ts.map +1 -0
  41. package/dist/functions/AttestationHeadlessCallbacks.js +194 -0
  42. package/dist/functions/AttestationHeadlessCallbacks.js.map +1 -0
  43. package/dist/functions/index.d.ts +7 -0
  44. package/dist/functions/index.d.ts.map +1 -0
  45. package/dist/functions/index.js +8 -0
  46. package/dist/functions/index.js.map +1 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +8 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types/IEbsiSupport.d.ts +211 -0
  52. package/dist/types/IEbsiSupport.d.ts.map +1 -0
  53. package/dist/types/IEbsiSupport.js +5 -0
  54. package/dist/types/IEbsiSupport.js.map +1 -0
  55. package/package.json +86 -0
  56. package/src/agent/EbsiSupport.ts +250 -0
  57. package/src/did/EbsiDidProvider.ts +269 -0
  58. package/src/did/EbsiDidResolver.ts +16 -0
  59. package/src/did/functions.ts +528 -0
  60. package/src/did/index.ts +5 -0
  61. package/src/did/services/EbsiRPCService.ts +68 -0
  62. package/src/did/services/EbsiRestService.ts +117 -0
  63. package/src/did/types.ts +449 -0
  64. package/src/functions/Attestation.ts +262 -0
  65. package/src/functions/AttestationHeadlessCallbacks.ts +242 -0
  66. package/src/functions/index.ts +15 -0
  67. package/src/index.ts +8 -0
  68. package/src/types/IEbsiSupport.ts +241 -0
@@ -0,0 +1,182 @@
1
+ import { OpenID4VCIClient } from '@sphereon/oid4vci-client';
2
+ import { Alg, AuthzFlowType, getJson, getTypesFromCredentialSupported, } from '@sphereon/oid4vci-common';
3
+ import { getAuthenticationKey, getIdentifier, SupportedDidMethodEnum } from '@sphereon/ssi-sdk-ext.did-utils';
4
+ import { calculateJwkThumbprintForKey } from '@sphereon/ssi-sdk-ext.key-utils';
5
+ import { OID4VCICallbackStateListener, OID4VCIMachineStates, signatureAlgorithmFromKey, signCallback, } from '@sphereon/ssi-sdk.oid4vci-holder';
6
+ import { OID4VPCallbackStateListener, Siopv2MachineStates, } from '@sphereon/ssi-sdk.siopv2-oid4vp-op-auth';
7
+ import { Siopv2OID4VPLinkHandler } from '@sphereon/ssi-sdk.siopv2-oid4vp-op-auth/dist/link-handler';
8
+ import { waitFor } from 'xstate/lib/waitFor';
9
+ import { logger } from '../index';
10
+ import { addContactCallback, authorizationCodeUrlCallback, handleErrorCallback, reviewCredentialsCallback, selectCredentialsCallback, siopDoneCallback, } from './AttestationHeadlessCallbacks';
11
+ import { getEbsiApiBaseUrl } from './index';
12
+ /**
13
+ * Method to generate an authz url for getting attestation credentials from a (R)TAO on EBSI using a cloud/service wallet
14
+ *
15
+ * This method can be used standalone. But it can also be used as input for the `oid4vciHolderStart` agent method,
16
+ * to start a OID4VCI holder flow.
17
+ *
18
+ * @param opts
19
+ * @param context
20
+ */
21
+ export const ebsiCreateAttestationAuthRequestURL = async ({ clientId: clientIdArg, credentialIssuer, credentialType, idOpts, redirectUri, requestObjectOpts, formats = ['jwt_vc', 'jwt_vc_json'], }, context) => {
22
+ const identifier = await getIdentifier(idOpts, context);
23
+ if (identifier.provider !== 'did:ebsi' && identifier.provider !== 'did:key') {
24
+ throw Error(`EBSI only supports did:key for natural persons and did:ebsi for legal persons. Provider: ${identifier.provider}, did: ${identifier.did}`);
25
+ }
26
+ // This only works if the DID is actually registered, otherwise use our internal KMS;
27
+ // that is why the offline argument is passed in when type is Verifiable Auth to Onboard, as no DID is present at that point yet
28
+ const authKey = await getAuthenticationKey(identifier, context, credentialType === 'VerifiableAuthorisationToOnboard', true);
29
+ const kid = authKey.meta?.jwkThumbprint ?? calculateJwkThumbprintForKey({ key: authKey });
30
+ const clientId = clientIdArg ?? identifier.did;
31
+ const vciClient = await OpenID4VCIClient.fromCredentialIssuer({
32
+ credentialIssuer,
33
+ kid,
34
+ clientId,
35
+ createAuthorizationRequestURL: false, // We will do that down below
36
+ retrieveServerMetadata: true,
37
+ });
38
+ const allMatches = vciClient.getCredentialsSupported(false);
39
+ let arrayMatches;
40
+ if (Array.isArray(allMatches)) {
41
+ arrayMatches = allMatches;
42
+ }
43
+ else {
44
+ arrayMatches = Object.entries(allMatches).map(([id, supported]) => {
45
+ supported.id = id;
46
+ return supported;
47
+ });
48
+ }
49
+ const supportedConfigurations = arrayMatches
50
+ .filter((supported) => getTypesFromCredentialSupported(supported, { filterVerifiableCredential: false }).includes(credentialType))
51
+ .filter((supported) => (supported.format === 'jwt_vc' || supported.format === 'jwt_vc_json') && formats.includes(supported.format));
52
+ if (supportedConfigurations.length === 0) {
53
+ throw Error(`Could not find '${credentialType}' with format(s) '${formats.join(',')}' in list of supported types for issuer: ${credentialIssuer}`);
54
+ }
55
+ const authorizationDetails = supportedConfigurations.map((supported) => {
56
+ return {
57
+ type: 'openid_credential',
58
+ format: supported.format,
59
+ types: getTypesFromCredentialSupported(supported),
60
+ };
61
+ });
62
+ const signCallbacks = requestObjectOpts.signCallbacks ?? {
63
+ signCallback: signCallback(vciClient, idOpts, context),
64
+ };
65
+ const authorizationRequestOpts = {
66
+ redirectUri,
67
+ clientId,
68
+ authorizationDetails,
69
+ requestObjectOpts: {
70
+ ...requestObjectOpts,
71
+ signCallbacks,
72
+ kid: requestObjectOpts.kid ?? kid,
73
+ },
74
+ };
75
+ // todo: Do we really need to do this, or can we just set the create option to true at this point? We are passing in the authzReq opts
76
+ const authorizationCodeURL = await vciClient.createAuthorizationRequestUrl({
77
+ authorizationRequest: authorizationRequestOpts,
78
+ });
79
+ return {
80
+ requestData: {
81
+ createAuthorizationRequestURL: false,
82
+ flowType: AuthzFlowType.AUTHORIZATION_CODE_FLOW,
83
+ uri: credentialIssuer,
84
+ existingClientState: JSON.parse(await vciClient.exportState()),
85
+ },
86
+ accessTokenOpts: {
87
+ clientOpts: {
88
+ alg: Alg[await signatureAlgorithmFromKey({ key: authKey })],
89
+ clientId,
90
+ kid,
91
+ signCallbacks,
92
+ clientAssertionType: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
93
+ },
94
+ },
95
+ authorizationRequestOpts,
96
+ authorizationCodeURL,
97
+ identifier,
98
+ // @ts-ignore
99
+ authKey,
100
+ didMethodPreferences: [SupportedDidMethodEnum.DID_EBSI, SupportedDidMethodEnum.DID_KEY],
101
+ };
102
+ };
103
+ export const ebsiGetAttestationInterpreter = async ({ clientId, authReqResult }, context) => {
104
+ const identifier = authReqResult.identifier;
105
+ const vciStateCallbacks = new Map();
106
+ const vpStateCallbacks = new Map();
107
+ const oid4vciMachine = await context.agent.oid4vciHolderGetMachineInterpreter({
108
+ ...authReqResult,
109
+ issuanceOpt: {
110
+ identifier,
111
+ didMethod: SupportedDidMethodEnum.DID_EBSI,
112
+ kid: authReqResult.authKey.meta?.jwkThumbprint ?? authReqResult.authKey.kid,
113
+ },
114
+ clientOpts: {
115
+ clientAssertionType: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
116
+ kid: authReqResult.authKey.meta?.jwkThumbprint ?? authReqResult.authKey.kid,
117
+ clientId,
118
+ },
119
+ didMethodPreferences: [SupportedDidMethodEnum.DID_EBSI, SupportedDidMethodEnum.DID_KEY],
120
+ stateNavigationListener: OID4VCICallbackStateListener(vciStateCallbacks),
121
+ });
122
+ const vpLinkHandler = new Siopv2OID4VPLinkHandler({
123
+ protocols: ['openid:'],
124
+ // @ts-ignore
125
+ context,
126
+ noStateMachinePersistence: true,
127
+ stateNavigationListener: OID4VPCallbackStateListener(vpStateCallbacks),
128
+ });
129
+ vpStateCallbacks
130
+ .set(Siopv2MachineStates.done, siopDoneCallback({ oid4vciMachine }, context))
131
+ .set(Siopv2MachineStates.handleError, handleErrorCallback(context));
132
+ vciStateCallbacks
133
+ .set(OID4VCIMachineStates.handleError, handleErrorCallback(context))
134
+ .set(OID4VCIMachineStates.addContact, addContactCallback(context))
135
+ .set(OID4VCIMachineStates.selectCredentials, selectCredentialsCallback(context))
136
+ .set(OID4VCIMachineStates.initiateAuthorizationRequest, authorizationCodeUrlCallback({
137
+ authReqResult,
138
+ vpLinkHandler,
139
+ }, context))
140
+ .set(OID4VCIMachineStates.reviewCredentials, reviewCredentialsCallback(context));
141
+ return oid4vciMachine.interpreter;
142
+ };
143
+ export const ebsiGetAttestation = async ({ clientId, authReqResult, opts = { timeout: 30_000 } }, context) => {
144
+ const interpreter = await ebsiGetAttestationInterpreter({ clientId, authReqResult }, context);
145
+ const state = await waitFor(interpreter.start(), (state) => state.matches('done') || state.matches('handleError'), {
146
+ timeout: opts.timeout ?? 30_000,
147
+ });
148
+ if (state.matches('handleError')) {
149
+ console.error(JSON.stringify(state.context.error));
150
+ throw Error(JSON.stringify(state.context.error));
151
+ }
152
+ return {
153
+ contactAlias: state.context.contactAlias,
154
+ contact: state.context.contact,
155
+ credentialBranding: state.context.credentialBranding,
156
+ identifier: state.context.issuanceOpt?.identifier ?? authReqResult.identifier,
157
+ error: state.context.error,
158
+ credentials: state.context.credentialsToAccept,
159
+ };
160
+ };
161
+ /**
162
+ * Normally you would use the browser to let the user make this call in the front channel,
163
+ * however EBSI mainly uses mocks at present, and we want to be able to test as well
164
+ */
165
+ export const ebsiAuthRequestExecution = async (authRequestResult, opts) => {
166
+ const { requestData, authorizationCodeURL } = authRequestResult;
167
+ const vciClient = await OpenID4VCIClient.fromState({ state: requestData?.existingClientState });
168
+ logger.debug(`URL: ${authorizationCodeURL}, according to client: ${vciClient.authorizationURL}`);
169
+ const authResponse = await getJson(authorizationCodeURL);
170
+ const location = authResponse.origResponse.headers.get('location');
171
+ logger.debug(`LOCATION: ${location}`);
172
+ };
173
+ export const ebsiGetIssuer = ({ credentialIssuer, environment = 'pilot' }) => {
174
+ if (credentialIssuer) {
175
+ return credentialIssuer;
176
+ }
177
+ if (environment !== 'pilot') {
178
+ return `${getEbsiApiBaseUrl({ environment, version: 'v3' })}/issuer-mock`;
179
+ }
180
+ throw Error(`EBSI environment ${environment} needs explicit credential issuer`);
181
+ };
182
+ //# sourceMappingURL=Attestation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Attestation.js","sourceRoot":"","sources":["../../src/functions/Attestation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { OID4VCIMachine, OID4VCIMachineInterpreter, OID4VCIMachineState } from '@sphereon/ssi-sdk.oid4vci-holder';
2
+ import { Siopv2MachineInterpreter, Siopv2MachineState } from '@sphereon/ssi-sdk.siopv2-oid4vp-op-auth';
3
+ import { Siopv2OID4VPLinkHandler } from '@sphereon/ssi-sdk.siopv2-oid4vp-op-auth/dist/link-handler';
4
+ import { IRequiredContext } from '../types/IEbsiSupport';
5
+ import { AttestationAuthRequestUrlResult } from './Attestation';
6
+ export declare const addContactCallback: (context: IRequiredContext) => (oid4vciMachine: OID4VCIMachineInterpreter, state: OID4VCIMachineState) => Promise<void>;
7
+ export declare const handleErrorCallback: (context: IRequiredContext) => (oid4vciMachine: OID4VCIMachineInterpreter | Siopv2MachineInterpreter, state: OID4VCIMachineState | Siopv2MachineState) => Promise<void>;
8
+ export declare const selectCredentialsCallback: (context: IRequiredContext) => (oid4vciMachine: OID4VCIMachineInterpreter, state: OID4VCIMachineState) => Promise<undefined>;
9
+ export declare const authorizationCodeUrlCallback: ({ authReqResult, vpLinkHandler, }: {
10
+ authReqResult: AttestationAuthRequestUrlResult;
11
+ vpLinkHandler: Siopv2OID4VPLinkHandler;
12
+ }, context: IRequiredContext) => (oid4vciMachine: OID4VCIMachineInterpreter, state: OID4VCIMachineState) => Promise<undefined>;
13
+ export declare const reviewCredentialsCallback: (context: IRequiredContext) => (oid4vciMachine: OID4VCIMachineInterpreter, state: OID4VCIMachineState) => Promise<void>;
14
+ export declare const siopDoneCallback: ({ oid4vciMachine }: {
15
+ oid4vciMachine: OID4VCIMachine;
16
+ }, context: IRequiredContext) => (oid4vpMachine: Siopv2MachineInterpreter, state: Siopv2MachineState) => Promise<void>;
17
+ //# sourceMappingURL=AttestationHeadlessCallbacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttestationHeadlessCallbacks.d.ts","sourceRoot":"","sources":["../../src/functions/AttestationHeadlessCallbacks.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAwB,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACvI,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAA;AAGnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAE/D,eAAO,MAAM,kBAAkB,yHA2H9B,CAAA;AAED,eAAO,MAAM,mBAAmB,kDACA,yBAAyB,GAAG,wBAAwB,SAAS,mBAAmB,GAAG,kBAAkB,kBAGpI,CAAA;AAED,eAAO,MAAM,yBAAyB,8HAwBrC,CAAA;AAED,eAAO,MAAM,4BAA4B;mBAKtB,+BAA+B;mBAC/B,uBAAuB;8HAmCzC,CAAA;AAED,eAAO,MAAM,yBAAyB,yHAQrC,CAAA;AAED,eAAO,MAAM,gBAAgB;oBAA0C,cAAc;sHAYpF,CAAA"}
@@ -0,0 +1,194 @@
1
+ import { getIssuerName } from '@sphereon/oid4vci-common';
2
+ import { ConnectionType, CorrelationIdentifierType, CredentialRole, IdentityOrigin, PartyOrigin, PartyTypeType, } from '@sphereon/ssi-sdk.data-store';
3
+ import { OID4VCIMachineEvents } from '@sphereon/ssi-sdk.oid4vci-holder';
4
+ import fetch from 'cross-fetch';
5
+ import { logger } from '../index';
6
+ export const addContactCallback = (context) => {
7
+ return async (oid4vciMachine, state) => {
8
+ const { serverMetadata, hasContactConsent, contactAlias } = state.context;
9
+ if (!serverMetadata) {
10
+ return Promise.reject(Error('Missing serverMetadata in context'));
11
+ }
12
+ const issuerUrl = new URL(serverMetadata.issuer);
13
+ const correlationId = `${issuerUrl.protocol}//${issuerUrl.hostname}`;
14
+ let issuerName = getIssuerName(correlationId, serverMetadata.credentialIssuerMetadata);
15
+ const party = {
16
+ contact: {
17
+ displayName: issuerName,
18
+ legalName: issuerName,
19
+ },
20
+ // FIXME maybe its nicer if we can also just use the id only
21
+ // TODO using the predefined party type from the contact migrations here
22
+ // TODO this is not used as the screen itself adds one, look at the params of the screen, this is not being passed in
23
+ partyType: {
24
+ id: '3875c12e-fdaa-4ef6-a340-c936e054b627',
25
+ origin: PartyOrigin.EXTERNAL,
26
+ type: PartyTypeType.ORGANIZATION,
27
+ name: 'Sphereon_default_type',
28
+ tenantId: '95e09cfc-c974-4174-86aa-7bf1d5251fb4',
29
+ },
30
+ uri: correlationId,
31
+ identities: [
32
+ {
33
+ alias: correlationId,
34
+ roles: [CredentialRole.ISSUER],
35
+ origin: IdentityOrigin.EXTERNAL,
36
+ identifier: {
37
+ type: CorrelationIdentifierType.URL,
38
+ correlationId: issuerUrl.hostname,
39
+ },
40
+ // TODO WAL-476 add support for correct connection
41
+ connection: {
42
+ type: ConnectionType.OPENID_CONNECT,
43
+ config: {
44
+ clientId: '138d7bf8-c930-4c6e-b928-97d3a4928b01',
45
+ clientSecret: '03b3955f-d020-4f2a-8a27-4e452d4e27a0',
46
+ scopes: ['auth'],
47
+ issuer: 'https://example.com/app-test',
48
+ redirectUrl: 'app:/callback',
49
+ dangerouslyAllowInsecureHttpRequests: true,
50
+ clientAuthMethod: 'post',
51
+ },
52
+ },
53
+ },
54
+ ],
55
+ };
56
+ const onCreate = async ({ party, issuerUrl, issuerName, correlationId, }) => {
57
+ const displayName = party.contact.displayName ?? issuerName;
58
+ const contacts = await context.agent.cmGetContacts({
59
+ filter: [
60
+ {
61
+ contact: {
62
+ // Searching on legalName as displayName is not unique, and we only support organizations for now
63
+ legalName: displayName,
64
+ },
65
+ },
66
+ ],
67
+ });
68
+ if (contacts.length === 0 || !contacts[0]?.contact) {
69
+ const contact = await context.agent.cmAddContact({
70
+ ...party,
71
+ displayName,
72
+ legalName: displayName,
73
+ contactType: {
74
+ type: PartyTypeType.ORGANIZATION,
75
+ name: displayName,
76
+ origin: PartyOrigin.EXTERNAL,
77
+ tenantId: party.tenantId ?? '1',
78
+ },
79
+ });
80
+ oid4vciMachine.send({
81
+ type: OID4VCIMachineEvents.CREATE_CONTACT,
82
+ data: contact,
83
+ });
84
+ }
85
+ };
86
+ const onConsentChange = async (hasConsent) => {
87
+ oid4vciMachine.send({
88
+ type: OID4VCIMachineEvents.SET_CONTACT_CONSENT,
89
+ data: hasConsent,
90
+ });
91
+ };
92
+ const onAliasChange = async (alias) => {
93
+ oid4vciMachine.send({
94
+ type: OID4VCIMachineEvents.SET_CONTACT_ALIAS,
95
+ data: alias,
96
+ });
97
+ };
98
+ if (!issuerName) {
99
+ issuerName = `EBSI unknown (${issuerUrl})`;
100
+ }
101
+ else if (issuerName.startsWith('http')) {
102
+ issuerName = `EBSI ${issuerName.replace(/https?:\/\//, '')}`;
103
+ }
104
+ if (!contactAlias) {
105
+ return await onAliasChange(issuerName);
106
+ }
107
+ issuerName = contactAlias;
108
+ if (!hasContactConsent) {
109
+ return await onConsentChange(true);
110
+ }
111
+ await onCreate({ party, issuerName, issuerUrl: issuerUrl.toString(), correlationId });
112
+ };
113
+ };
114
+ export const handleErrorCallback = (context) => {
115
+ return async (oid4vciMachine, state) => {
116
+ console.error(`error callback event: ${state.event}`, state.context.error);
117
+ };
118
+ };
119
+ export const selectCredentialsCallback = (context) => {
120
+ return async (oid4vciMachine, state) => {
121
+ const { contact, credentialToSelectFrom, selectedCredentials } = state.context;
122
+ if (selectedCredentials && selectedCredentials.length > 0) {
123
+ logger.info(`selected: ${selectedCredentials.join(', ')}`);
124
+ oid4vciMachine.send({
125
+ type: OID4VCIMachineEvents.NEXT,
126
+ });
127
+ return;
128
+ }
129
+ else if (!contact) {
130
+ return Promise.reject(Error('Missing contact in context'));
131
+ }
132
+ const onSelectType = async (selectedCredentials) => {
133
+ console.log(`Selected credentials: ${selectedCredentials.join(', ')}`);
134
+ oid4vciMachine.send({
135
+ type: OID4VCIMachineEvents.SET_SELECTED_CREDENTIALS,
136
+ data: selectedCredentials,
137
+ });
138
+ };
139
+ await onSelectType(credentialToSelectFrom.map((sel) => sel.credentialId));
140
+ };
141
+ };
142
+ export const authorizationCodeUrlCallback = ({ authReqResult, vpLinkHandler, }, context) => {
143
+ return async (oid4vciMachine, state) => {
144
+ const url = state.context.authorizationCodeURL;
145
+ console.log('navigateAuthorizationCodeURL: ', url);
146
+ if (!url) {
147
+ return Promise.reject(Error('Missing authorization URL in context'));
148
+ }
149
+ const onOpenAuthorizationUrl = async (url) => {
150
+ console.log('onOpenAuthorizationUrl being invoked: ', url);
151
+ oid4vciMachine.send({
152
+ type: OID4VCIMachineEvents.INVOKED_AUTHORIZATION_CODE_REQUEST,
153
+ data: url,
154
+ });
155
+ const response = await fetch(url, { redirect: 'manual' });
156
+ if (response.status < 301 || response.status > 302) {
157
+ throw Error(`When doing a headless auth, we expect to be redirected on getting the authz URL`);
158
+ }
159
+ const openidUri = response.headers.get('location');
160
+ if (!openidUri || !openidUri.startsWith('openid://')) {
161
+ throw Error(`Expected a openid:// URI to be returned from EBSI in headless mode. Returned: ${openidUri}, ${JSON.stringify(await response.text())}`);
162
+ }
163
+ console.log(`onOpenAuthorizationUrl after openUrl: ${url}`);
164
+ const kid = authReqResult.authKey.meta?.jwkThumbprint
165
+ ? `${authReqResult.identifier.did}#${authReqResult.authKey.meta.jwkThumbprint}`
166
+ : authReqResult.authKey.kid;
167
+ await vpLinkHandler.handle(openidUri, { idOpts: { identifier: authReqResult.identifier, kid } });
168
+ };
169
+ await onOpenAuthorizationUrl(url);
170
+ };
171
+ };
172
+ export const reviewCredentialsCallback = (context) => {
173
+ return async (oid4vciMachine, state) => {
174
+ console.log(`# REVIEW CREDENTIALS:`);
175
+ console.log(JSON.stringify(state.context.credentialsToAccept, null, 2));
176
+ oid4vciMachine.send({
177
+ type: OID4VCIMachineEvents.NEXT,
178
+ });
179
+ };
180
+ };
181
+ export const siopDoneCallback = ({ oid4vciMachine }, context) => {
182
+ return async (oid4vpMachine, state) => {
183
+ // console.log('SIOP result:')
184
+ // console.log(JSON.stringify(state.context, null , 2))
185
+ if (!state.context.authorizationResponseData?.queryParams?.code) {
186
+ throw Error(`No code was returned from the authorization step`);
187
+ }
188
+ oid4vciMachine.interpreter.send({
189
+ type: OID4VCIMachineEvents.PROVIDE_AUTHORIZATION_CODE_RESPONSE,
190
+ data: state.context.authorizationResponseData.url,
191
+ });
192
+ };
193
+ };
194
+ //# sourceMappingURL=AttestationHeadlessCallbacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttestationHeadlessCallbacks.js","sourceRoot":"","sources":["../../src/functions/AttestationHeadlessCallbacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ApiOpts, EbsiEnvironment } from '../types/IEbsiSupport';
2
+ export declare const getEbsiApiBaseUrl: ({ environment, version, system, }: ApiOpts & {
3
+ system?: EbsiEnvironment | "authorisation" | "did-registry" | undefined;
4
+ }) => string;
5
+ export declare const wait: (timeoutInMS: number) => Promise<unknown>;
6
+ export * from './Attestation';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEhE,eAAO,MAAM,iBAAiB;;YAM7B,CAAA;AAED,eAAO,MAAM,IAAI,gBAAuB,MAAM,qBAE7C,CAAA;AAED,cAAc,eAAe,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const getEbsiApiBaseUrl = ({ environment = 'pilot', version, system = 'pilot', }) => {
2
+ return `https://api-${environment}.ebsi.eu/${system}/${version}`;
3
+ };
4
+ export const wait = async (timeoutInMS) => {
5
+ return new Promise((resolve) => setTimeout(resolve, timeoutInMS));
6
+ };
7
+ export * from './Attestation';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,WAAW,GAAG,OAAO,EACrB,OAAO,EACP,MAAM,GAAG,OAAO,GAC0E,EAAE,EAAE;IAC9F,OAAO,eAAe,WAAW,YAAY,MAAM,IAAI,OAAO,EAAE,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAED,cAAc,eAAe,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const logger: import("@sphereon/ssi-types").ISimpleLogger<unknown>;
2
+ declare const schema: any;
3
+ export { schema };
4
+ export { EbsiSupport } from './agent/EbsiSupport';
5
+ export * from './types/IEbsiSupport';
6
+ export { EbsiDidProvider } from './did';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,sDAA+C,CAAA;AAClE,QAAA,MAAM,MAAM,KAAmC,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import { Loggers } from '@sphereon/ssi-types';
2
+ export const logger = Loggers.DEFAULT.get('sphereon:ebsi-support');
3
+ const schema = require('../plugin.schema.json');
4
+ export { schema };
5
+ export { EbsiSupport } from './agent/EbsiSupport';
6
+ export * from './types/IEbsiSupport';
7
+ export { EbsiDidProvider } from './did';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AAClE,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA"}