@sphereon/ssi-sdk.oid4vci-issuer 0.32.1-next.54 → 0.33.1-feature.vcdm2.4

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 (37) hide show
  1. package/dist/IssuerInstance.d.ts +4 -5
  2. package/dist/IssuerInstance.d.ts.map +1 -1
  3. package/dist/IssuerInstance.js +21 -28
  4. package/dist/IssuerInstance.js.map +1 -1
  5. package/dist/agent/OID4VCIIssuer.d.ts +3 -2
  6. package/dist/agent/OID4VCIIssuer.d.ts.map +1 -1
  7. package/dist/agent/OID4VCIIssuer.js +155 -168
  8. package/dist/agent/OID4VCIIssuer.js.map +1 -1
  9. package/dist/functions.d.ts +4 -5
  10. package/dist/functions.d.ts.map +1 -1
  11. package/dist/functions.js +243 -235
  12. package/dist/functions.js.map +1 -1
  13. package/dist/index.js +5 -23
  14. package/dist/index.js.map +1 -1
  15. package/dist/state-manager/TypeOrmStateManager.d.ts +1 -0
  16. package/dist/state-manager/TypeOrmStateManager.d.ts.map +1 -0
  17. package/dist/state-manager/TypeOrmStateManager.js +2 -0
  18. package/dist/state-manager/TypeOrmStateManager.js.map +1 -0
  19. package/dist/state-manager/oid4vcState/IAbstractMachineStateStore.d.ts +39 -0
  20. package/dist/state-manager/oid4vcState/IAbstractMachineStateStore.d.ts.map +1 -0
  21. package/dist/state-manager/oid4vcState/IAbstractMachineStateStore.js +2 -0
  22. package/dist/state-manager/oid4vcState/IAbstractMachineStateStore.js.map +1 -0
  23. package/dist/state-manager/oid4vcState/MachineStateStore.d.ts +1 -0
  24. package/dist/state-manager/oid4vcState/MachineStateStore.d.ts.map +1 -0
  25. package/dist/state-manager/oid4vcState/MachineStateStore.js +137 -0
  26. package/dist/state-manager/oid4vcState/MachineStateStore.js.map +1 -0
  27. package/dist/types/IOID4VCIIssuer.d.ts +10 -2
  28. package/dist/types/IOID4VCIIssuer.d.ts.map +1 -1
  29. package/dist/types/IOID4VCIIssuer.js +1 -2
  30. package/package.json +19 -16
  31. package/src/IssuerInstance.ts +8 -7
  32. package/src/agent/OID4VCIIssuer.ts +49 -13
  33. package/src/functions.ts +79 -29
  34. package/src/state-manager/TypeOrmStateManager.ts +0 -0
  35. package/src/state-manager/oid4vcState/IAbstractMachineStateStore.ts +51 -0
  36. package/src/state-manager/oid4vcState/MachineStateStore.ts +135 -0
  37. package/src/types/IOID4VCIIssuer.ts +16 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AACtC,wBAAM;AACf,uDAAqD;AAA5C,8GAAA,aAAa,OAAA;AACtB,8CAA2B;AAC3B,mDAAgC;AAChC,yDAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=TypeOrmStateManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeOrmStateManager.d.ts","sourceRoot":"","sources":["../../src/state-manager/TypeOrmStateManager.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=TypeOrmStateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeOrmStateManager.js","sourceRoot":"","sources":["../../src/state-manager/TypeOrmStateManager.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import { StateType } from '@sphereon/oid4vci-common';
2
+ import { Oid4vcStateEntity } from '@sphereon/ssi-sdk.data-store';
3
+ export interface IOid4vcStateStore<StateType> {
4
+ persistOid4vcState(args: Oid4vcStateStoreParams<StateType>): Promise<Oid4vcStatePersisted<StateType>>;
5
+ findOid4vcStates(args: StoreOid4vcFindActiveArgs): Promise<Array<Oid4vcStatePersisted<StateType>>>;
6
+ getOid4vcState(args: StoreOid4vcGetArgs): Promise<Oid4vcStatePersisted<StateType>>;
7
+ deleteOid4vcState(args: StoreOid4vcDeleteArgs): Promise<boolean>;
8
+ deleteExpiredOid4vcStates(args: StoreOid4vcDeleteExpiredArgs): Promise<number>;
9
+ }
10
+ export type StoreMachineStatePersistArgs<StateType> = Omit<Oid4vcStateStoreParams<StateType>, 'createdAt' | 'updatedAt'>;
11
+ export type StoreOid4vcFindActiveArgs = Partial<Pick<Oid4vcStateStoreParams<StateType>, 'expiresAt' | 'tenantId' | 'stateId'>>;
12
+ export type FindMachineStatesFilterArgs = Array<Partial<Omit<Oid4vcStateStoreParams<StateType>, 'state'>>>;
13
+ export type StoreFindMachineStatesArgs = {
14
+ filter: FindMachineStatesFilterArgs;
15
+ };
16
+ export type StoreOid4vcGetArgs = Pick<Oid4vcStateEntity<StateType>, 'id' | 'stateId' | 'correlationId' | 'lookups' | 'tenantId'>;
17
+ export type Oid4vcStateStore<StateType> = Pick<Oid4vcStateEntity<StateType>, 'id' | 'stateId' | 'correlationId' | 'lookups'>;
18
+ export type StoreOid4vcDeleteArgs = StoreOid4vcGetArgs;
19
+ export type StoreOid4vcDeleteExpiredArgs = {
20
+ id?: string;
21
+ correlationId?: string;
22
+ sessionId?: string;
23
+ lookups?: Array<string>;
24
+ tenantId?: string;
25
+ };
26
+ export type Oid4vcStatePersisted<StateType> = {
27
+ id: string;
28
+ stateId?: string;
29
+ correlationId?: string;
30
+ type: string;
31
+ state: StateType;
32
+ lookups?: Array<string>;
33
+ createdAt: Date;
34
+ lastUpdatedAt: Date;
35
+ expiresAt?: Date;
36
+ tenantId?: string;
37
+ };
38
+ export type Oid4vcStateStoreParams<StateType> = Omit<Oid4vcStatePersisted<StateType>, 'id'>;
39
+ //# sourceMappingURL=IAbstractMachineStateStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAbstractMachineStateStore.d.ts","sourceRoot":"","sources":["../../../src/state-manager/oid4vcState/IAbstractMachineStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,MAAM,WAAW,iBAAiB,CAAC,SAAS;IAC1C,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAA;IAErG,gBAAgB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAElG,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAA;IAElF,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhE,yBAAyB,CAAC,IAAI,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/E;AAED,MAAM,MAAM,4BAA4B,CAAC,SAAS,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,CAAA;AAExH,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,CAAA;AAE9H,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AAE1G,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,2BAA2B,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC,CAAA;AAChI,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAAC,CAAA;AAE5H,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAA;AACtD,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,SAAS,IAAI;IAC5C,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACvB,SAAS,EAAE,IAAI,CAAA;IACf,aAAa,EAAE,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IAbstractMachineStateStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAbstractMachineStateStore.js","sourceRoot":"","sources":["../../../src/state-manager/oid4vcState/IAbstractMachineStateStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=MachineStateStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MachineStateStore.d.ts","sourceRoot":"","sources":["../../../src/state-manager/oid4vcState/MachineStateStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ // import Debug from 'debug'
3
+ //
4
+ //
5
+ // const debug = Debug('sphereon:ssi-sdk:machine-state:store')
6
+ //
7
+ // /**
8
+ // * Represents a data store for managing machine states.
9
+ // */
10
+ // export class MachineStateStore extends IAbstractMachineStateStore {
11
+ // private readonly _dbConnection: OrPromise<DataSource>
12
+ //
13
+ // constructor(dbConnection: OrPromise<DataSource>) {
14
+ // super()
15
+ // this._dbConnection = dbConnection
16
+ // }
17
+ // async persistMachineState(state: StoreMachineStatePersistArgs): Promise<StoreMachineStateInfo> {
18
+ // const connection: DataSource = await this._dbConnection
19
+ // const { machineName, instanceId, tenantId } = state
20
+ // debug(`Executing persistMachineState for machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}...`)
21
+ // const entity = MachineStateStore.machineStateInfoEntityFrom(state)
22
+ // const existing = await connection.getRepository(MachineStateInfoEntity).findOne({
23
+ // where: {
24
+ // instanceId: state.instanceId,
25
+ // },
26
+ // })
27
+ // if (existing && existing.updatedCount > state.updatedCount) {
28
+ // const error = `Updating machine state with an older version is not allowed. Machine ${existing.machineName}, last count: ${
29
+ // existing.updatedCount
30
+ // }, new count: ${existing.updatedCount}, last updated: ${existing.updatedAt}, current: ${new Date()}, instance: ${existing.instanceId}`
31
+ // console.log(error)
32
+ // return Promise.reject(new Error(error))
33
+ // }
34
+ // // No need for a transaction. This is a single entity. We don't want to be surprised by an isolation level hiding the state from others
35
+ // const result = await connection.getRepository(MachineStateInfoEntity).save(entity, { transaction: false })
36
+ // debug(`Done persistMachineState machine ${machineName}, instance ${instanceId}, tenantId: ${tenantId}`)
37
+ // return MachineStateStore.machineInfoFrom(result)
38
+ // }
39
+ //
40
+ // async findActiveMachineStates(args: StoreMachineStatesFindActiveArgs): Promise<Array<StoreMachineStateInfo>> {
41
+ // const { tenantId, machineName, instanceId } = args
42
+ // const connection: DataSource = await this._dbConnection
43
+ // debug(`Executing findActiveMachineStates query with machineName: ${machineName}, tenantId: ${tenantId}`)
44
+ // const queryBuilder = connection
45
+ // .getRepository(MachineStateInfoEntity)
46
+ // .createQueryBuilder('state')
47
+ // .where('state.completedAt IS NULL')
48
+ // .andWhere(
49
+ // new Brackets((qb) => {
50
+ // qb.where('state.expiresAt IS NULL').orWhere('state.expiresAt > :now', { now: new Date() })
51
+ // }),
52
+ // )
53
+ //
54
+ // if (instanceId) {
55
+ // queryBuilder.andWhere('state.instanceId = :instanceId', { instanceId })
56
+ // }
57
+ // if (tenantId) {
58
+ // queryBuilder.andWhere('state.tenantId = :tenantId', { tenantId })
59
+ // }
60
+ // if (machineName) {
61
+ // queryBuilder.andWhere('state.machineName = :machineName', { machineName })
62
+ // }
63
+ //
64
+ // return (
65
+ // (await queryBuilder
66
+ // .orderBy('state.updatedAt', 'DESC')
67
+ // .getMany()
68
+ // .then((entities) => entities.map(MachineStateStore.machineInfoFrom))) ?? []
69
+ // )
70
+ // }
71
+ //
72
+ // async findMachineStates(args?: StoreFindMachineStatesArgs): Promise<Array<StoreMachineStateInfo>> {
73
+ // const connection: DataSource = await this._dbConnection
74
+ // debug('findMachineStates', args)
75
+ // const result: Array<MachineStateInfoEntity> = await connection.getRepository(MachineStateInfoEntity).find({
76
+ // ...(args?.filter && { where: args?.filter }),
77
+ // transaction: false,
78
+ // })
79
+ //
80
+ // return result.map((event: MachineStateInfoEntity) => MachineStateStore.machineInfoFrom(event))
81
+ // }
82
+ //
83
+ // async getMachineState(args: StoreMachineStateGetArgs): Promise<StoreMachineStateInfo> {
84
+ // const connection: DataSource = await this._dbConnection
85
+ // debug('getMachineState', args)
86
+ // return connection.getRepository(MachineStateInfoEntity).findOneOrFail({ where: { instanceId: args.instanceId } })
87
+ // }
88
+ //
89
+ // async deleteMachineState(args: StoreMachineStateDeleteArgs): Promise<boolean> {
90
+ // debug(`Executing deleteMachineState query with id: ${args.instanceId}`)
91
+ // if (!args.instanceId) {
92
+ // throw new Error('No instanceId parameter is provided.')
93
+ // }
94
+ // try {
95
+ // const connection: DataSource = await this._dbConnection
96
+ //
97
+ // const result = await connection.getRepository(MachineStateInfoEntity).delete(args.instanceId)
98
+ // return result.affected != null && result.affected > 0
99
+ // } catch (error) {
100
+ // debug(`Error deleting state: ${error}`)
101
+ // return false
102
+ // }
103
+ // }
104
+ //
105
+ // async deleteExpiredMachineStates(args: StoreMachineStateDeleteExpiredArgs): Promise<number> {
106
+ // const { machineName, tenantId, deleteDoneStates } = args
107
+ // debug(`Executing deleteExpiredMachineStates query with params: ${JSON.stringify(args)}`)
108
+ // try {
109
+ // const connection: DataSource = await this._dbConnection
110
+ //
111
+ // const deleteCriteria: FindOptionsWhere<MachineStateInfoEntity> = {
112
+ // ...(machineName && { machineName }),
113
+ // ...(tenantId && { tenantId }),
114
+ // // When deleteOnDone state is set we only look at completedAt, in other cases we compare current time with expiresAt
115
+ // ...(!deleteDoneStates && { expiresAt: LessThan(new Date()) }),
116
+ // ...(deleteDoneStates && { completedAt: Not(IsNull()) }),
117
+ // }
118
+ // const result = await connection.getRepository(MachineStateInfoEntity).delete(deleteCriteria)
119
+ // return result.affected ?? 0
120
+ // } catch (error) {
121
+ // debug(`Error deleting machine info: ${error}`)
122
+ // return Promise.reject(new Error(`Error deleting expired machine states for machine type ${machineName}`))
123
+ // }
124
+ // }
125
+ //
126
+ // protected static machineInfoFrom = (machineStateInfoEntity: MachineStateInfoEntity): StoreMachineStateInfo => {
127
+ // // We are making sure no entity function get copied
128
+ // return JSON.parse(JSON.stringify(machineStateInfoEntity))
129
+ // }
130
+ //
131
+ // static machineStateInfoEntityFrom = (machineStateInfo: StoreMachineStateInfo | StoreMachineStatePersistArgs): MachineStateInfoEntity => {
132
+ // const entity = new MachineStateInfoEntity()
133
+ // Object.assign(entity, machineStateInfo)
134
+ // return entity
135
+ // }
136
+ // }
137
+ //# sourceMappingURL=MachineStateStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MachineStateStore.js","sourceRoot":"","sources":["../../../src/state-manager/oid4vcState/MachineStateStore.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,EAAE;AACF,EAAE;AACF,8DAA8D;AAC9D,EAAE;AACF,MAAM;AACN,0DAA0D;AAC1D,MAAM;AACN,sEAAsE;AACtE,wDAAwD;AACxD,EAAE;AACF,qDAAqD;AACrD,YAAY;AACZ,sCAAsC;AACtC,IAAI;AACJ,mGAAmG;AACnG,4DAA4D;AAC5D,wDAAwD;AACxD,wHAAwH;AACxH,uEAAuE;AACvE,sFAAsF;AACtF,eAAe;AACf,sCAAsC;AACtC,SAAS;AACT,OAAO;AACP,kEAAkE;AAClE,kIAAkI;AAClI,8BAA8B;AAC9B,6IAA6I;AAC7I,yBAAyB;AACzB,8CAA8C;AAC9C,MAAM;AACN,4IAA4I;AAC5I,+GAA+G;AAC/G,4GAA4G;AAC5G,qDAAqD;AACrD,IAAI;AACJ,EAAE;AACF,iHAAiH;AACjH,uDAAuD;AACvD,4DAA4D;AAC5D,6GAA6G;AAC7G,oCAAoC;AACpC,6CAA6C;AAC7C,mCAAmC;AACnC,0CAA0C;AAC1C,iBAAiB;AACjB,+BAA+B;AAC/B,qGAAqG;AACrG,YAAY;AACZ,QAAQ;AACR,EAAE;AACF,sBAAsB;AACtB,8EAA8E;AAC9E,MAAM;AACN,oBAAoB;AACpB,wEAAwE;AACxE,MAAM;AACN,uBAAuB;AACvB,iFAAiF;AACjF,MAAM;AACN,EAAE;AACF,aAAa;AACb,0BAA0B;AAC1B,4CAA4C;AAC5C,mBAAmB;AACnB,oFAAoF;AACpF,MAAM;AACN,IAAI;AACJ,EAAE;AACF,sGAAsG;AACtG,4DAA4D;AAC5D,qCAAqC;AACrC,gHAAgH;AAChH,oDAAoD;AACpD,0BAA0B;AAC1B,OAAO;AACP,EAAE;AACF,mGAAmG;AACnG,IAAI;AACJ,EAAE;AACF,0FAA0F;AAC1F,4DAA4D;AAC5D,mCAAmC;AACnC,sHAAsH;AACtH,IAAI;AACJ,EAAE;AACF,kFAAkF;AAClF,4EAA4E;AAC5E,4BAA4B;AAC5B,8DAA8D;AAC9D,MAAM;AACN,UAAU;AACV,8DAA8D;AAC9D,EAAE;AACF,oGAAoG;AACpG,4DAA4D;AAC5D,sBAAsB;AACtB,8CAA8C;AAC9C,mBAAmB;AACnB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,gGAAgG;AAChG,6DAA6D;AAC7D,6FAA6F;AAC7F,UAAU;AACV,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,6CAA6C;AAC7C,uCAAuC;AACvC,6HAA6H;AAC7H,uEAAuE;AACvE,iEAAiE;AACjE,QAAQ;AACR,mGAAmG;AACnG,kCAAkC;AAClC,sBAAsB;AACtB,qDAAqD;AACrD,gHAAgH;AAChH,MAAM;AACN,IAAI;AACJ,EAAE;AACF,kHAAkH;AAClH,wDAAwD;AACxD,8DAA8D;AAC9D,IAAI;AACJ,EAAE;AACF,4IAA4I;AAC5I,gDAAgD;AAChD,4CAA4C;AAC5C,kBAAkB;AAClB,IAAI;AACJ,IAAI"}
@@ -1,4 +1,4 @@
1
- import { AccessTokenRequest, AccessTokenResponse, CredentialConfigurationSupported, CredentialDataSupplierInput, CredentialIssuerMetadataOpts, CredentialOfferSession, CredentialRequest, CredentialResponse, Grant, JsonLdIssuerCredentialDefinition } from '@sphereon/oid4vci-common';
1
+ import { AccessTokenRequest, AccessTokenResponse, ClientMetadata, CredentialConfigurationSupported, CredentialDataSupplierInput, CredentialIssuerMetadataOpts, CredentialOfferMode, CredentialOfferSession, CredentialRequest, CredentialResponse, Grant, JsonLdIssuerCredentialDefinition, QRCodeOpts, StatusListOpts } from '@sphereon/oid4vci-common';
2
2
  import { CredentialDataSupplier } from '@sphereon/oid4vci-issuer';
3
3
  import { IDIDOptions, ResolveOpts } from '@sphereon/ssi-sdk-ext.did-utils';
4
4
  import { IIdentifierResolution, ManagedIdentifierOptsOrResult } from '@sphereon/ssi-sdk-ext.identifier-resolution';
@@ -6,7 +6,7 @@ import { IOID4VCIStore } from '@sphereon/ssi-sdk.oid4vci-issuer-store';
6
6
  import { ICredential } from '@sphereon/ssi-types/dist';
7
7
  import { IAgentContext, ICredentialIssuer, IDIDManager, IKeyManager, IPluginMethodMap, IResolver } from '@veramo/core';
8
8
  import { IssuerInstance } from '../IssuerInstance';
9
- import { IJwtService } from '@sphereon/ssi-sdk-ext.identifier-resolution/src/types/IJwtService';
9
+ import { IJwtService } from '@sphereon/ssi-sdk-ext.jwt-service';
10
10
  export type IssuerCredentialDefinition = JsonLdIssuerCredentialDefinition;
11
11
  export interface IOID4VCIIssuer extends IPluginMethodMap {
12
12
  oid4vciCreateOfferURI(createArgs: ICreateOfferArgs, context: IRequiredContext): Promise<ICreateCredentialOfferURIResult>;
@@ -26,6 +26,13 @@ export interface ICreateOfferArgs extends IIssuerInstanceArgs {
26
26
  credentialDefinition?: IssuerCredentialDefinition;
27
27
  credentialOfferUri?: string;
28
28
  credentialDataSupplierInput?: CredentialDataSupplierInput;
29
+ redirectUri?: string;
30
+ correlationId?: string;
31
+ sessionLifeTimeInSec?: number;
32
+ qrCodeOpts?: QRCodeOpts;
33
+ client_id?: string;
34
+ statusListOpts?: Array<StatusListOpts>;
35
+ offerMode?: CredentialOfferMode;
29
36
  baseUri?: string;
30
37
  scheme?: string;
31
38
  pinLength?: number;
@@ -54,6 +61,7 @@ export interface IIssuerInstanceOptions extends IMetadataOptions {
54
61
  metadataOpts?: CredentialIssuerMetadataOpts;
55
62
  }
56
63
  export interface IIssuerOptions {
64
+ asClientOpts?: ClientMetadata;
57
65
  idOpts?: ManagedIdentifierOptsOrResult;
58
66
  resolveOpts?: ResolveOpts;
59
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IOID4VCIIssuer.d.ts","sourceRoot":"","sources":["../../src/types/IOID4VCIIssuer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IOID4VCIIssuer.d.ts","sourceRoot":"","sources":["../../src/types/IOID4VCIIssuer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=IOID4VCIIssuer.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.oid4vci-issuer",
3
- "version": "0.32.1-next.54+3b988a2b",
3
+ "version": "0.33.1-feature.vcdm2.4+9f634bdb",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,19 +14,22 @@
14
14
  "build:clean": "tsc --build --clean && tsc --build"
15
15
  },
16
16
  "dependencies": {
17
- "@sphereon/oid4vci-common": "0.16.1-next.339",
18
- "@sphereon/oid4vci-issuer": "0.16.1-next.339",
19
- "@sphereon/ssi-sdk-ext.did-utils": "0.27.0",
20
- "@sphereon/ssi-sdk-ext.identifier-resolution": "0.27.0",
21
- "@sphereon/ssi-sdk.agent-config": "0.32.1-next.54+3b988a2b",
22
- "@sphereon/ssi-sdk.core": "0.32.1-next.54+3b988a2b",
23
- "@sphereon/ssi-sdk.kv-store-temp": "0.32.1-next.54+3b988a2b",
24
- "@sphereon/ssi-sdk.mdl-mdoc": "0.32.1-next.54+3b988a2b",
25
- "@sphereon/ssi-sdk.oid4vci-issuer-store": "0.32.1-next.54+3b988a2b",
26
- "@sphereon/ssi-sdk.sd-jwt": "0.32.1-next.54+3b988a2b",
27
- "@sphereon/ssi-sdk.vc-status-list": "0.32.1-next.54+3b988a2b",
28
- "@sphereon/ssi-sdk.vc-status-list-issuer": "0.32.1-next.54+3b988a2b",
29
- "@sphereon/ssi-types": "0.32.1-next.54+3b988a2b",
17
+ "@sphereon/oid4vci-client": "0.17.0",
18
+ "@sphereon/oid4vci-common": "0.17.0",
19
+ "@sphereon/oid4vci-issuer": "0.17.0",
20
+ "@sphereon/ssi-sdk-ext.did-utils": "0.28.0",
21
+ "@sphereon/ssi-sdk-ext.identifier-resolution": "0.28.0",
22
+ "@sphereon/ssi-sdk-ext.jwt-service": "0.28.0",
23
+ "@sphereon/ssi-sdk.agent-config": "0.33.1-feature.vcdm2.4+9f634bdb",
24
+ "@sphereon/ssi-sdk.core": "0.33.1-feature.vcdm2.4+9f634bdb",
25
+ "@sphereon/ssi-sdk.data-store": "0.33.1-feature.vcdm2.4+9f634bdb",
26
+ "@sphereon/ssi-sdk.kv-store-temp": "0.33.1-feature.vcdm2.4+9f634bdb",
27
+ "@sphereon/ssi-sdk.mdl-mdoc": "0.33.1-feature.vcdm2.4+9f634bdb",
28
+ "@sphereon/ssi-sdk.oid4vci-issuer-store": "0.33.1-feature.vcdm2.4+9f634bdb",
29
+ "@sphereon/ssi-sdk.sd-jwt": "0.33.1-feature.vcdm2.4+9f634bdb",
30
+ "@sphereon/ssi-sdk.vc-status-list": "0.33.1-feature.vcdm2.4+9f634bdb",
31
+ "@sphereon/ssi-sdk.vc-status-list-issuer": "0.33.1-feature.vcdm2.4+9f634bdb",
32
+ "@sphereon/ssi-types": "0.33.1-feature.vcdm2.4+9f634bdb",
30
33
  "@types/uuid": "^9.0.8",
31
34
  "@veramo/core": "4.2.0",
32
35
  "@veramo/credential-w3c": "4.2.0",
@@ -35,7 +38,7 @@
35
38
  "uuid": "^9.0.1"
36
39
  },
37
40
  "devDependencies": {
38
- "@sphereon/did-auth-siop": "0.16.1-next.339",
41
+ "@sphereon/did-auth-siop": "0.17.0",
39
42
  "@sphereon/did-uni-client": "^0.6.3",
40
43
  "@veramo/did-provider-key": "4.2.0",
41
44
  "@veramo/did-resolver": "4.2.0",
@@ -71,5 +74,5 @@
71
74
  "Authenticator"
72
75
  ],
73
76
  "nx": {},
74
- "gitHead": "3b988a2bb62a7c4534a2670ea3a0985fd93d00f2"
77
+ "gitHead": "9f634bdb714061141e277508c124b08d626f6036"
75
78
  }
@@ -1,16 +1,13 @@
1
- import { VcIssuer } from '@sphereon/oid4vci-issuer'
2
- import { DIDDocument } from '@veramo/core'
1
+ import { CredentialDataSupplier, VcIssuer } from '@sphereon/oid4vci-issuer'
3
2
  import { createVciIssuerBuilder } from './functions'
4
3
  import { AuthorizationServerMetadata, IssuerMetadata } from '@sphereon/oid4vci-common'
5
-
6
- import { CredentialDataSupplier } from '@sphereon/oid4vci-issuer'
7
4
  import { IIssuerOptions, IMetadataOptions, IRequiredContext } from './types/IOID4VCIIssuer'
8
5
 
9
6
  export class IssuerInstance {
10
- private _issuer: VcIssuer<DIDDocument> | undefined
7
+ private _issuer: VcIssuer | undefined
11
8
  private readonly _metadataOptions: IMetadataOptions
12
9
  private readonly _issuerOptions: IIssuerOptions
13
- private readonly _issuerMetadata: IssuerMetadata
10
+ private _issuerMetadata: IssuerMetadata
14
11
  private readonly _authorizationServerMetadata: AuthorizationServerMetadata
15
12
 
16
13
  public constructor({
@@ -30,7 +27,7 @@ export class IssuerInstance {
30
27
  this._authorizationServerMetadata = authorizationServerMetadata
31
28
  }
32
29
 
33
- public async get(opts: { context: IRequiredContext; credentialDataSupplier?: CredentialDataSupplier }): Promise<VcIssuer<DIDDocument>> {
30
+ public async get(opts: { context: IRequiredContext; credentialDataSupplier?: CredentialDataSupplier }): Promise<VcIssuer> {
34
31
  if (!this._issuer) {
35
32
  const builder = await createVciIssuerBuilder(
36
33
  {
@@ -58,6 +55,10 @@ export class IssuerInstance {
58
55
  return this._issuerMetadata
59
56
  }
60
57
 
58
+ set issuerMetadata(value: IssuerMetadata) {
59
+ this._issuerMetadata = value
60
+ }
61
+
61
62
  get authorizationServerMetadata() {
62
63
  return this._authorizationServerMetadata
63
64
  }
@@ -1,8 +1,16 @@
1
- import { AccessTokenResponse, AuthorizationServerMetadata, CredentialResponse, IssuerMetadata } from '@sphereon/oid4vci-common'
1
+ import {
2
+ AccessTokenResponse,
3
+ AuthorizationServerMetadata,
4
+ CredentialResponse,
5
+ IssuerMetadata,
6
+ OpenIDResponse,
7
+ WellKnownEndpoints,
8
+ } from '@sphereon/oid4vci-common'
2
9
  import { assertValidAccessTokenRequest, createAccessTokenResponse, VcIssuer } from '@sphereon/oid4vci-issuer'
10
+ import { retrieveWellknown } from '@sphereon/oid4vci-client'
3
11
  import { getAgentResolver } from '@sphereon/ssi-sdk-ext.did-utils'
4
12
  import { IMetadataOptions } from '@sphereon/ssi-sdk.oid4vci-issuer-store'
5
- import { DIDDocument, IAgentPlugin } from '@veramo/core'
13
+ import { IAgentPlugin } from '@veramo/core'
6
14
  import { getAccessTokenSignerCallback } from '../functions'
7
15
  import {
8
16
  IAssertValidAccessTokenArgs,
@@ -39,7 +47,7 @@ export class OID4VCIIssuer implements IAgentPlugin {
39
47
  private async oid4vciCreateOfferURI(createArgs: ICreateOfferArgs, context: IRequiredContext): Promise<ICreateCredentialOfferURIResult> {
40
48
  return await this.oid4vciGetInstance(createArgs, context)
41
49
  .then((instance) => instance.get({ context }))
42
- .then((issuer: VcIssuer<DIDDocument>) =>
50
+ .then((issuer: VcIssuer) =>
43
51
  issuer.createCredentialOfferURI(createArgs).then((response) => {
44
52
  const result: ICreateCredentialOfferURIResult = response
45
53
  if (this._opts.returnSessions === false) {
@@ -53,7 +61,7 @@ export class OID4VCIIssuer implements IAgentPlugin {
53
61
  private async oid4vciIssueCredential(issueArgs: IIssueCredentialArgs, context: IRequiredContext): Promise<CredentialResponse> {
54
62
  return await this.oid4vciGetInstance(issueArgs, context)
55
63
  .then((instance) => instance.get({ context }))
56
- .then((issuer: VcIssuer<DIDDocument>) => issuer.issueCredential(issueArgs))
64
+ .then((issuer: VcIssuer) => issuer.issueCredential(issueArgs))
57
65
  }
58
66
 
59
67
  private async oid4vciCreateAccessTokenResponse(
@@ -82,14 +90,42 @@ export class OID4VCIIssuer implements IAgentPlugin {
82
90
  })
83
91
  }
84
92
 
93
+ private getExternalAS(issuerMetadata: IssuerMetadata): string | undefined {
94
+ if ('authorization_servers' in issuerMetadata && Array.isArray(issuerMetadata.authorization_servers)) {
95
+ return issuerMetadata.authorization_servers.find((as) => as !== issuerMetadata.credential_issuer)
96
+ }
97
+ return undefined
98
+ }
99
+
85
100
  private async createIssuerInstance(args: IIssuerInstanceArgs, context: IRequiredContext): Promise<IssuerInstance> {
86
101
  const credentialIssuer = args.credentialIssuer ?? OID4VCIIssuer._DEFAULT_OPTS_KEY
87
102
  //todo: prob doesn't make sense as credentialIssuer is mandatory anyway
88
103
 
89
104
  const metadataOpts = await this.getMetadataOpts({ ...args, credentialIssuer }, context)
90
105
  const issuerMetadata = await this.getIssuerMetadata({ ...args, credentialIssuer }, context)
91
- const authorizationServerMetadata = await this.getAuthorizationServerMetadata({ ...args, credentialIssuer }, context)
92
- const issuerOpts = await this.getIssuerOpts({ ...args, credentialIssuer }, context)
106
+ const externalAS = this.getExternalAS(issuerMetadata)
107
+ let asMetadataResponse: OpenIDResponse<AuthorizationServerMetadata> | undefined = undefined
108
+ if (externalAS) {
109
+ // Let's try OIDC first and then fallback to OAuth2
110
+ asMetadataResponse = await retrieveWellknown(externalAS, WellKnownEndpoints.OPENID_CONFIGURATION, {
111
+ errorOnNotFound: false,
112
+ })
113
+ if (!asMetadataResponse) {
114
+ asMetadataResponse = await retrieveWellknown(externalAS, WellKnownEndpoints.OAUTH_AS, {
115
+ errorOnNotFound: true,
116
+ })
117
+ }
118
+ }
119
+ const authorizationServerMetadata = asMetadataResponse?.successBody
120
+ ? asMetadataResponse!.successBody
121
+ : await this.getAuthorizationServerMetadataFromStore(
122
+ {
123
+ ...args,
124
+ credentialIssuer,
125
+ },
126
+ context,
127
+ )
128
+ const issuerOpts = await this.getIssuerOptsFromStore({ ...args, credentialIssuer }, context)
93
129
  if (!issuerOpts.resolveOpts) {
94
130
  issuerOpts.resolveOpts = { ...issuerOpts.didOpts?.resolveOpts, ...this._opts.resolveOpts }
95
131
  }
@@ -117,7 +153,7 @@ export class OID4VCIIssuer implements IAgentPlugin {
117
153
  return this.instances.get(credentialIssuer)!
118
154
  }
119
155
 
120
- private async getIssuerOpts(
156
+ private async getIssuerOptsFromStore(
121
157
  opts: {
122
158
  credentialIssuer: string
123
159
  storeId?: string
@@ -129,7 +165,7 @@ export class OID4VCIIssuer implements IAgentPlugin {
129
165
  const storeId = await this.storeId(opts, context)
130
166
  const namespace = await this.namespace(opts, context)
131
167
  const options = await context.agent.oid4vciStoreGetIssuerOpts({
132
- metadataType: 'authorizationServer',
168
+ metadataType: 'issuer',
133
169
  correlationId: credentialIssuer,
134
170
  storeId,
135
171
  namespace,
@@ -170,14 +206,12 @@ export class OID4VCIIssuer implements IAgentPlugin {
170
206
  storeId: metadataOpts.storeId,
171
207
  })) as IssuerMetadata
172
208
  if (!metadata) {
173
- throw Error(
174
- `Authorization server metadata not found for issuer ${opts.credentialIssuer}, namespace ${opts.namespace} and store ${opts.storeId}`,
175
- )
209
+ throw Error(`Issuer metadata not found for issuer ${opts.credentialIssuer}, namespace ${opts.namespace} and store ${opts.storeId}`)
176
210
  }
177
211
  return metadata
178
212
  }
179
213
 
180
- private async getAuthorizationServerMetadata(
214
+ private async getAuthorizationServerMetadataFromStore(
181
215
  opts: {
182
216
  credentialIssuer: string
183
217
  storeId?: string
@@ -193,7 +227,9 @@ export class OID4VCIIssuer implements IAgentPlugin {
193
227
  storeId: metadataOpts.storeId,
194
228
  })) as AuthorizationServerMetadata
195
229
  if (!metadata) {
196
- throw Error(`Credential issuer ${opts.credentialIssuer} metadata not found for namespace ${opts.namespace} and store ${opts.storeId}`)
230
+ throw Error(
231
+ `Authorization server ${opts.credentialIssuer} metadata not found for namespace ${metadataOpts.storeNamespace} and store ${metadataOpts.storeId}`,
232
+ )
197
233
  }
198
234
  return metadata
199
235
  }