@sphereon/ssi-sdk.pd-manager 0.34.1-feature.SSISDK.57.uni.client.206 → 0.34.1-feature.SSISDK.58.host.nonce.endpoint.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1046 -1028
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -2162
- package/dist/index.d.ts +24 -2162
- package/dist/index.js +1039 -1020
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/agent/PDManager.ts +56 -49
- package/src/index.ts +1 -2
- package/src/types/IPDManager.ts +17 -17
package/src/agent/PDManager.ts
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { IAgentPlugin } from '@veramo/core'
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
DeleteDefinitionItemArgs,
|
|
4
|
+
DeleteDefinitionItemsArgs,
|
|
5
|
+
GetDefinitionItemArgs,
|
|
6
|
+
GetDefinitionItemsArgs,
|
|
7
7
|
HasDefinitionItemArgs,
|
|
8
|
-
|
|
8
|
+
HasDefinitionItemsArgs,
|
|
9
9
|
IPDManager,
|
|
10
|
-
|
|
10
|
+
PersistDefinitionArgs,
|
|
11
11
|
schema,
|
|
12
12
|
} from '../index'
|
|
13
13
|
import {
|
|
14
14
|
AbstractPDStore,
|
|
15
15
|
isPresentationDefinitionEqual,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AddDefinitionArgs,
|
|
16
|
+
NonPersistedPresentationDefinitionItem,
|
|
17
|
+
PresentationDefinitionItem,
|
|
19
18
|
} from '@sphereon/ssi-sdk.data-store'
|
|
20
19
|
import semver from 'semver/preload'
|
|
21
20
|
import { ReleaseType } from 'semver'
|
|
@@ -59,32 +58,32 @@ export class PDManager implements IAgentPlugin {
|
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
/** {@inheritDoc IPDManager.pdmHasDefinitions} */
|
|
62
|
-
private async pdmHasDefinitions(args:
|
|
61
|
+
private async pdmHasDefinitions(args: HasDefinitionItemsArgs): Promise<boolean> {
|
|
63
62
|
const { filter } = args
|
|
64
63
|
return this.store.hasDefinitions({ filter })
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
/** {@inheritDoc IPDManager.pdmGetDefinition} */
|
|
68
|
-
private async pdmGetDefinition(args:
|
|
67
|
+
private async pdmGetDefinition(args: GetDefinitionItemArgs): Promise<PresentationDefinitionItem> {
|
|
69
68
|
const { itemId } = args
|
|
70
69
|
return this.store.getDefinition({ itemId })
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
/** {@inheritDoc IPDManager.pdmGetDefinitions} */
|
|
74
|
-
private async pdmGetDefinitions(args:
|
|
73
|
+
private async pdmGetDefinitions(args: GetDefinitionItemsArgs): Promise<Array<PresentationDefinitionItem>> {
|
|
75
74
|
const { filter, opts } = args
|
|
76
75
|
const allDefinitions = await this.store.getDefinitions({ filter })
|
|
77
|
-
let definitions:
|
|
76
|
+
let definitions: PresentationDefinitionItem[] = []
|
|
78
77
|
if (opts == undefined || opts.showVersionHistory !== true) {
|
|
79
78
|
const groupedByDefinitionId = allDefinitions.reduce(
|
|
80
79
|
(acc, entity) => {
|
|
81
|
-
if (!acc[entity.
|
|
82
|
-
acc[entity.
|
|
80
|
+
if (!acc[entity.definitionId]) {
|
|
81
|
+
acc[entity.definitionId] = []
|
|
83
82
|
}
|
|
84
|
-
acc[entity.
|
|
83
|
+
acc[entity.definitionId].push(entity)
|
|
85
84
|
return acc
|
|
86
85
|
},
|
|
87
|
-
{} as Record<string,
|
|
86
|
+
{} as Record<string, PresentationDefinitionItem[]>,
|
|
88
87
|
)
|
|
89
88
|
definitions = Object.values(groupedByDefinitionId).map((entities) =>
|
|
90
89
|
entities.reduce((highestVersionItem, baseItem) => {
|
|
@@ -100,41 +99,41 @@ export class PDManager implements IAgentPlugin {
|
|
|
100
99
|
}
|
|
101
100
|
|
|
102
101
|
/** {@inheritDoc IPDManager.pdmDeleteDefinition} */
|
|
103
|
-
private async pdmDeleteDefinition(args:
|
|
102
|
+
private async pdmDeleteDefinition(args: DeleteDefinitionItemArgs): Promise<boolean> {
|
|
104
103
|
return this.store.deleteDefinition(args).then((value) => true)
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
/** {@inheritDoc IPDManager.pdmDeleteDefinitions} */
|
|
108
|
-
private async pdmDeleteDefinitions(args:
|
|
107
|
+
private async pdmDeleteDefinitions(args: DeleteDefinitionItemsArgs): Promise<number> {
|
|
109
108
|
return this.store.deleteDefinitions(args)
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
/** {@inheritDoc IPDManager.pdmPersistDefinition} */
|
|
113
|
-
private async pdmPersistDefinition(args:
|
|
112
|
+
private async pdmPersistDefinition(args: PersistDefinitionArgs): Promise<PresentationDefinitionItem> {
|
|
114
113
|
const { definitionItem, opts } = args
|
|
115
114
|
const { versionControlMode, versionIncrementReleaseType } = opts ?? { versionControlMode: 'AutoIncrement' }
|
|
116
115
|
const { version, tenantId } = definitionItem
|
|
117
|
-
const definitionId = definitionItem.
|
|
116
|
+
const definitionId = definitionItem.definitionId
|
|
118
117
|
|
|
119
118
|
let { id } = definitionItem
|
|
120
119
|
if (id !== undefined && versionControlMode !== 'Overwrite') {
|
|
121
120
|
id = undefined
|
|
122
121
|
}
|
|
123
122
|
|
|
124
|
-
const nonPersistedDefinitionItem:
|
|
123
|
+
const nonPersistedDefinitionItem: NonPersistedPresentationDefinitionItem = {
|
|
125
124
|
...definitionItem,
|
|
126
125
|
version: version ?? '1',
|
|
127
126
|
}
|
|
128
127
|
|
|
129
|
-
const existing = await this.store.getDefinitions({ filter: [{ id,
|
|
128
|
+
const existing = await this.store.getDefinitions({ filter: [{ id, definitionId, tenantId, version }] })
|
|
130
129
|
const existingItem = existing[0]
|
|
131
130
|
|
|
132
131
|
// Always fetch all definitions for the definitionId/tenantId and determine the truly latest version
|
|
133
|
-
const allDefinitions = await this.store.getDefinitions({ filter: [{
|
|
132
|
+
const allDefinitions = await this.store.getDefinitions({ filter: [{ definitionId, tenantId }] })
|
|
134
133
|
allDefinitions.sort((a, b) => semver.compare(this.normalizeToSemverVersionFormat(a.version), this.normalizeToSemverVersionFormat(b.version)))
|
|
135
134
|
const trulyLatestVersionItem = allDefinitions[allDefinitions.length - 1]
|
|
136
135
|
|
|
137
|
-
let latestVersionItem:
|
|
136
|
+
let latestVersionItem: PresentationDefinitionItem | undefined = trulyLatestVersionItem
|
|
138
137
|
|
|
139
138
|
// If a specific version exists and matches existingItem, we keep that as a base.
|
|
140
139
|
// Otherwise we use the trulyLatestVersionItem
|
|
@@ -160,58 +159,64 @@ export class PDManager implements IAgentPlugin {
|
|
|
160
159
|
}
|
|
161
160
|
|
|
162
161
|
private async handleOverwriteMode(
|
|
163
|
-
existingItem:
|
|
164
|
-
definitionItem:
|
|
162
|
+
existingItem: PresentationDefinitionItem | undefined,
|
|
163
|
+
definitionItem: NonPersistedPresentationDefinitionItem,
|
|
165
164
|
version: string | undefined,
|
|
166
|
-
): Promise<
|
|
165
|
+
): Promise<PresentationDefinitionItem> {
|
|
167
166
|
if (existingItem) {
|
|
168
|
-
existingItem.
|
|
167
|
+
existingItem.definitionId = definitionItem.definitionId
|
|
169
168
|
existingItem.version = version ?? existingItem.version ?? '1'
|
|
170
169
|
existingItem.tenantId = definitionItem.tenantId
|
|
171
|
-
existingItem.name = definitionItem.name
|
|
172
|
-
existingItem.purpose = definitionItem.purpose
|
|
173
|
-
existingItem.
|
|
170
|
+
existingItem.name = definitionItem.dcqlPayload?.name ?? definitionItem.definitionPayload?.name ?? definitionItem.name
|
|
171
|
+
existingItem.purpose = definitionItem.dcqlPayload?.defaultPurpose ?? definitionItem.definitionPayload?.purpose ?? definitionItem.purpose
|
|
172
|
+
existingItem.dcqlPayload = definitionItem.dcqlPayload
|
|
173
|
+
existingItem.definitionPayload = definitionItem.definitionPayload
|
|
174
174
|
|
|
175
175
|
return await this.store.updateDefinition(existingItem)
|
|
176
176
|
} else {
|
|
177
177
|
// Apply the same field extraction logic for new items
|
|
178
178
|
const newDefinitionItem = {
|
|
179
179
|
...definitionItem,
|
|
180
|
-
|
|
180
|
+
name: definitionItem.name ?? definitionItem.dcqlPayload?.name ?? definitionItem.definitionPayload?.name,
|
|
181
|
+
purpose: definitionItem.purpose ?? definitionItem.dcqlPayload?.defaultPurpose ?? definitionItem.definitionPayload?.purpose,
|
|
182
|
+
}
|
|
181
183
|
return await this.store.addDefinition(newDefinitionItem)
|
|
182
184
|
}
|
|
183
185
|
}
|
|
184
186
|
|
|
185
187
|
private async handleOverwriteLatestMode(
|
|
186
|
-
latestVersionItem:
|
|
187
|
-
definitionItem:
|
|
188
|
-
): Promise<
|
|
188
|
+
latestVersionItem: PresentationDefinitionItem | undefined,
|
|
189
|
+
definitionItem: NonPersistedPresentationDefinitionItem,
|
|
190
|
+
): Promise<PresentationDefinitionItem> {
|
|
189
191
|
if (latestVersionItem) {
|
|
190
|
-
latestVersionItem.
|
|
192
|
+
latestVersionItem.definitionId = definitionItem.definitionId
|
|
191
193
|
latestVersionItem.tenantId = definitionItem.tenantId
|
|
192
|
-
latestVersionItem.name = definitionItem.name
|
|
193
|
-
latestVersionItem.purpose = definitionItem.purpose
|
|
194
|
-
latestVersionItem.
|
|
194
|
+
latestVersionItem.name = definitionItem.dcqlPayload?.name ?? definitionItem.definitionPayload?.name ?? definitionItem.name
|
|
195
|
+
latestVersionItem.purpose = definitionItem.dcqlPayload?.defaultPurpose ?? definitionItem.definitionPayload?.purpose ?? definitionItem.purpose
|
|
196
|
+
latestVersionItem.definitionPayload = definitionItem.definitionPayload
|
|
197
|
+
latestVersionItem.dcqlPayload = definitionItem.dcqlPayload
|
|
195
198
|
|
|
196
199
|
return await this.store.updateDefinition(latestVersionItem)
|
|
197
200
|
} else {
|
|
198
201
|
// Apply the same field extraction logic for new items
|
|
199
202
|
const newDefinitionItem = {
|
|
200
203
|
...definitionItem,
|
|
201
|
-
|
|
204
|
+
name: definitionItem.name ?? definitionItem.dcqlPayload?.name ?? definitionItem.definitionPayload?.name,
|
|
205
|
+
purpose: definitionItem.purpose ?? definitionItem.dcqlPayload?.defaultPurpose ?? definitionItem.definitionPayload?.purpose,
|
|
206
|
+
}
|
|
202
207
|
return await this.store.addDefinition(newDefinitionItem)
|
|
203
208
|
}
|
|
204
209
|
}
|
|
205
210
|
|
|
206
211
|
private async handleManualMode(
|
|
207
|
-
existingItem:
|
|
208
|
-
definitionItem:
|
|
212
|
+
existingItem: PresentationDefinitionItem | undefined,
|
|
213
|
+
definitionItem: NonPersistedPresentationDefinitionItem,
|
|
209
214
|
tenantId: string | undefined,
|
|
210
215
|
version: string | undefined,
|
|
211
|
-
): Promise<
|
|
216
|
+
): Promise<PresentationDefinitionItem> {
|
|
212
217
|
if (existingItem && !isPresentationDefinitionEqual(existingItem, definitionItem)) {
|
|
213
218
|
throw Error(
|
|
214
|
-
`Cannot update definition ${definitionItem.
|
|
219
|
+
`Cannot update definition ${definitionItem.definitionId} for tenant ${tenantId} version ${version} because definition exists and manual version control is enabled.`,
|
|
215
220
|
)
|
|
216
221
|
} else {
|
|
217
222
|
return await this.store.addDefinition(definitionItem)
|
|
@@ -219,10 +224,10 @@ export class PDManager implements IAgentPlugin {
|
|
|
219
224
|
}
|
|
220
225
|
|
|
221
226
|
private async handleAutoIncrementMode(
|
|
222
|
-
latestVersionItem:
|
|
223
|
-
definitionItem:
|
|
227
|
+
latestVersionItem: PresentationDefinitionItem | undefined,
|
|
228
|
+
definitionItem: NonPersistedPresentationDefinitionItem,
|
|
224
229
|
releaseType: ReleaseType,
|
|
225
|
-
): Promise<
|
|
230
|
+
): Promise<PresentationDefinitionItem> {
|
|
226
231
|
const defaultVersion = '1'
|
|
227
232
|
let currentVersion = latestVersionItem?.version ?? definitionItem.version ?? defaultVersion
|
|
228
233
|
let resultVersion: string
|
|
@@ -260,7 +265,9 @@ export class PDManager implements IAgentPlugin {
|
|
|
260
265
|
const newDefinitionItem = {
|
|
261
266
|
...definitionItem,
|
|
262
267
|
version: resultVersion,
|
|
263
|
-
|
|
268
|
+
name: definitionItem.name ?? definitionItem.dcqlPayload?.name ?? definitionItem.definitionPayload?.name,
|
|
269
|
+
purpose: definitionItem.purpose ?? definitionItem.dcqlPayload?.defaultPurpose ?? definitionItem.definitionPayload?.purpose,
|
|
270
|
+
}
|
|
264
271
|
|
|
265
272
|
return await this.store.addDefinition(newDefinitionItem)
|
|
266
273
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @public
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
const schema = require('../plugin.schema.json')
|
|
5
5
|
export { schema }
|
|
6
6
|
export { PDManager, pdManagerMethods } from './agent/PDManager'
|
|
7
7
|
export * from './types/IPDManager'
|
|
8
8
|
|
|
9
9
|
export type { ReleaseType } from 'semver'
|
|
10
|
-
export type { ImportDcqlQueryItem } from '@sphereon/ssi-sdk.data-store'
|
package/src/types/IPDManager.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IAgentContext, IPluginMethodMap } from '@veramo/core'
|
|
2
|
-
import {
|
|
2
|
+
import { FindDefinitionArgs, NonPersistedPresentationDefinitionItem, PresentationDefinitionItem } from '@sphereon/ssi-sdk.data-store'
|
|
3
3
|
import { ReleaseType } from 'semver'
|
|
4
4
|
|
|
5
5
|
export interface IPDManager extends IPluginMethodMap {
|
|
@@ -7,13 +7,13 @@ export interface IPDManager extends IPluginMethodMap {
|
|
|
7
7
|
* Get a single presentation definition records by primary key
|
|
8
8
|
* @param args
|
|
9
9
|
*/
|
|
10
|
-
pdmGetDefinition(args:
|
|
10
|
+
pdmGetDefinition(args: GetDefinitionItemArgs): Promise<PresentationDefinitionItem>
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Find one or more presentation definition records using filters
|
|
14
14
|
* @param args
|
|
15
15
|
*/
|
|
16
|
-
pdmGetDefinitions(args:
|
|
16
|
+
pdmGetDefinitions(args: GetDefinitionItemsArgs): Promise<Array<PresentationDefinitionItem>>
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Checks whether a presentation definition record exists by primary key
|
|
@@ -25,54 +25,54 @@ export interface IPDManager extends IPluginMethodMap {
|
|
|
25
25
|
* Checks whether one or more presentation definition records exist using filters
|
|
26
26
|
* @param args
|
|
27
27
|
*/
|
|
28
|
-
pdmHasDefinitions(args:
|
|
28
|
+
pdmHasDefinitions(args: HasDefinitionItemsArgs): Promise<boolean>
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Delete a single presentation definition records by primary key
|
|
32
32
|
* @param args
|
|
33
33
|
*/
|
|
34
|
-
pdmDeleteDefinition(args:
|
|
34
|
+
pdmDeleteDefinition(args: DeleteDefinitionItemArgs): Promise<boolean>
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* Delete multiple presentation definitions records using filters
|
|
38
38
|
* @param args
|
|
39
39
|
*/
|
|
40
|
-
pdmDeleteDefinitions(args:
|
|
40
|
+
pdmDeleteDefinitions(args: DeleteDefinitionItemsArgs): Promise<number>
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* Check in a presentation definition.
|
|
44
44
|
* It has version control logic which will add or update presentation definition records and has settings for automatic version numbering.
|
|
45
45
|
* @param args
|
|
46
46
|
*/
|
|
47
|
-
pdmPersistDefinition(args:
|
|
47
|
+
pdmPersistDefinition(args: PersistDefinitionArgs): Promise<PresentationDefinitionItem>
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
export type VersionControlMode = 'AutoIncrement' | 'Manual' | 'Overwrite' | 'OverwriteLatest'
|
|
51
51
|
|
|
52
|
-
export type
|
|
52
|
+
export type GetDefinitionItemArgs = {
|
|
53
53
|
itemId: string
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
export type HasDefinitionItemArgs =
|
|
56
|
+
export type HasDefinitionItemArgs = GetDefinitionItemArgs
|
|
57
57
|
|
|
58
58
|
export type FetchOptions = {
|
|
59
59
|
showVersionHistory?: boolean
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
export type
|
|
63
|
-
filter?:
|
|
62
|
+
export type GetDefinitionItemsArgs = {
|
|
63
|
+
filter?: FindDefinitionArgs
|
|
64
64
|
opts?: FetchOptions
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
export type
|
|
67
|
+
export type HasDefinitionItemsArgs = GetDefinitionItemsArgs
|
|
68
68
|
|
|
69
|
-
export type
|
|
69
|
+
export type DeleteDefinitionItemArgs = {
|
|
70
70
|
itemId: string
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
export type
|
|
73
|
+
export type DeleteDefinitionItemsArgs = GetDefinitionItemsArgs
|
|
74
74
|
|
|
75
|
-
export type
|
|
75
|
+
export type PersistPresentationDefinitionItem = Omit<NonPersistedPresentationDefinitionItem, 'version'> & {
|
|
76
76
|
id?: string
|
|
77
77
|
version?: string
|
|
78
78
|
}
|
|
@@ -82,8 +82,8 @@ export type PersistOptions = {
|
|
|
82
82
|
versionIncrementReleaseType?: ReleaseType
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
export type
|
|
86
|
-
definitionItem:
|
|
85
|
+
export type PersistDefinitionArgs = {
|
|
86
|
+
definitionItem: PersistPresentationDefinitionItem
|
|
87
87
|
opts?: PersistOptions
|
|
88
88
|
}
|
|
89
89
|
|