@sphereon/ssi-sdk.data-store 0.34.1-feature.SSISDK.26.RP.58 → 0.34.1-feature.SSISDK.45.189

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 (36) hide show
  1. package/dist/index.cjs +1616 -1477
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +187 -194
  4. package/dist/index.d.ts +187 -194
  5. package/dist/index.js +1582 -1443
  6. package/dist/index.js.map +1 -1
  7. package/package.json +8 -8
  8. package/src/__tests__/contact.entities.test.ts +2 -2
  9. package/src/__tests__/contact.store.test.ts +1 -1
  10. package/src/__tests__/digitalCredential.entities.test.ts +2 -1
  11. package/src/__tests__/digitalCredential.store.test.ts +5 -5
  12. package/src/__tests__/pd-manager.entities.test.ts +27 -98
  13. package/src/__tests__/pd-manager.store.test.ts +151 -101
  14. package/src/digitalCredential/DigitalCredentialStore.ts +9 -9
  15. package/src/entities/contact/IdentityEntity.ts +2 -1
  16. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +2 -1
  17. package/src/entities/presentationDefinition/{PresentationDefinitionItemEntity.ts → DcqlQueryItemEntity.ts} +8 -12
  18. package/src/index.ts +3 -3
  19. package/src/migrations/generic/12-CreateBitstringStatusList.ts +32 -2
  20. package/src/migrations/generic/13-CreateDcqlQueryItem.ts +67 -0
  21. package/src/migrations/generic/index.ts +10 -5
  22. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +1 -1
  23. package/src/migrations/postgres/1726588800000-CreateDcqlQueryItem.ts +25 -0
  24. package/src/migrations/postgres/1737110469001-UpdateStatusList.ts +1 -1
  25. package/src/migrations/postgres/1741895823000-CreateBitstringStatusList.ts +15 -2
  26. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +1 -1
  27. package/src/migrations/sqlite/1726617600000-CreateDcqlQueryItem.ts +24 -0
  28. package/src/presentationDefinition/AbstractPDStore.ts +5 -5
  29. package/src/presentationDefinition/PDStore.ts +40 -40
  30. package/src/types/contact/contact.ts +1 -1
  31. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +2 -1
  32. package/src/types/digitalCredential/enums.ts +0 -7
  33. package/src/types/digitalCredential/types.ts +2 -1
  34. package/src/types/presentationDefinition/IAbstractPDStore.ts +5 -5
  35. package/src/types/presentationDefinition/presentationDefinition.ts +8 -9
  36. package/src/utils/presentationDefinition/MappingUtils.ts +31 -22
@@ -1,9 +1,10 @@
1
1
  import { typeormDate, typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
2
+ import { CredentialRole } from '@sphereon/ssi-types'
2
3
  import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
4
+
3
5
  import {
4
6
  CredentialCorrelationType,
5
7
  CredentialDocumentFormat,
6
- CredentialRole,
7
8
  CredentialStateType,
8
9
  type DigitalCredential,
9
10
  DocumentType,
@@ -2,15 +2,15 @@ import { BaseEntity, BeforeInsert, BeforeUpdate, Column, CreateDateColumn, Entit
2
2
  import { IsNotEmpty } from 'class-validator'
3
3
  import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
4
4
 
5
- @Entity('PresentationDefinitionItem')
5
+ @Entity('DcqlQueryItem')
6
6
  @Index(['version'], { unique: false })
7
- export class PresentationDefinitionItemEntity extends BaseEntity {
7
+ export class DcqlQueryItemEntity extends BaseEntity {
8
8
  @PrimaryGeneratedColumn('uuid')
9
9
  id!: string
10
10
 
11
- @Column({ name: 'definition_id', length: 255, type: 'varchar', nullable: false, unique: false })
12
- @IsNotEmpty({ message: 'A blank definition id field is not allowed' })
13
- definitionId!: string
11
+ @Column({ name: 'query_id', length: 255, type: 'varchar', nullable: false, unique: false })
12
+ @IsNotEmpty({ message: 'A blank query id field is not allowed' })
13
+ queryId!: string
14
14
 
15
15
  @Column({ name: 'version', length: 255, type: 'varchar', nullable: false, unique: false })
16
16
  @IsNotEmpty({ message: 'A blank version field is not allowed' })
@@ -25,13 +25,9 @@ export class PresentationDefinitionItemEntity extends BaseEntity {
25
25
  @Column({ name: 'name', length: 255, type: 'varchar', nullable: true, unique: false })
26
26
  name?: string
27
27
 
28
- @Column({ name: 'definition_payload', type: 'text', nullable: false, unique: false }) // TODO should this become nullable now we have dcqlPayload?
29
- @IsNotEmpty({ message: 'A blank PD definition payload field is not allowed' })
30
- definitionPayload!: string
31
-
32
- @Column({ name: 'dcql_payload', type: 'text', nullable: true, unique: false })
33
- @IsNotEmpty({ message: 'A blank dcql definition payload field is not allowed' })
34
- dcqlPayload!: string
28
+ @Column({ name: 'query', type: 'text', nullable: false, unique: false })
29
+ @IsNotEmpty({ message: 'A blank dcql query payload field is not allowed' })
30
+ query!: string
35
31
 
36
32
  @CreateDateColumn({ name: 'created_at', nullable: false, type: typeOrmDateTime() })
37
33
  createdAt!: Date
package/src/index.ts CHANGED
@@ -29,7 +29,7 @@ import { ElectronicAddressEntity } from './entities/contact/ElectronicAddressEnt
29
29
  import { PhysicalAddressEntity } from './entities/contact/PhysicalAddressEntity'
30
30
  import { AuditEventEntity } from './entities/eventLogger/AuditEventEntity'
31
31
  import { DigitalCredentialEntity } from './entities/digitalCredential/DigitalCredentialEntity'
32
- import { PresentationDefinitionItemEntity } from './entities/presentationDefinition/PresentationDefinitionItemEntity'
32
+ import { DcqlQueryItemEntity } from './entities/presentationDefinition/DcqlQueryItemEntity'
33
33
  import { ContactMetadataItemEntity } from './entities/contact/ContactMetadataItemEntity'
34
34
  import { CredentialClaimsEntity } from './entities/issuanceBranding/CredentialClaimsEntity'
35
35
 
@@ -99,7 +99,7 @@ export const DataStoreIssuanceBrandingEntities = [
99
99
  CredentialClaimsEntity,
100
100
  ]
101
101
 
102
- export const DataStorePresentationDefinitionEntities = [PresentationDefinitionItemEntity]
102
+ export const DataStorePresentationDefinitionEntities = [DcqlQueryItemEntity]
103
103
 
104
104
  export const DataStoreStatusListEntities = [
105
105
  StatusListEntity,
@@ -158,7 +158,7 @@ export {
158
158
  AuditEventEntity,
159
159
  DigitalCredentialEntity,
160
160
  MachineStateInfoEntity,
161
- PresentationDefinitionItemEntity,
161
+ DcqlQueryItemEntity,
162
162
  ContactMetadataItemEntity,
163
163
  CredentialClaimsEntity,
164
164
  Oid4vcStateEntity,
@@ -1,10 +1,40 @@
1
- import { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'
2
1
  import Debug from 'debug'
3
- import { CreateBitstringStatusListPG1741895823000 } from '../postgres/1741895823000-CreateBitstringStatusList'
2
+ import { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'
3
+
4
+ import {
5
+ AddBitstringStatusListEnumPG1741895823000,
6
+ CreateBitstringStatusListPG1741895823000,
7
+ } from '../postgres/1741895823000-CreateBitstringStatusList'
4
8
  import { CreateBitstringStatusListSqlite1741895823001 } from '../sqlite/1741895823001-CreateBitstringStatusList'
5
9
 
6
10
  const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')
7
11
 
12
+ export class AddBitstringStatusListEnum1741895823000 implements MigrationInterface {
13
+ name = 'AddBitstringStatusListEnum1741895823000'
14
+
15
+ public async up(queryRunner: QueryRunner): Promise<void> {
16
+ debug('migration: creating bitstring status list tables')
17
+ const dbType: DatabaseType = queryRunner.connection.driver.options.type
18
+ switch (dbType) {
19
+ case 'postgres': {
20
+ const mig = new AddBitstringStatusListEnumPG1741895823000()
21
+ await mig.up(queryRunner)
22
+ return
23
+ }
24
+ case 'sqlite':
25
+ case 'expo':
26
+ case 'react-native': {
27
+ return
28
+ }
29
+ default:
30
+ return Promise.reject(`Migrations only supported for sqlite and postgres. Was ${dbType}`)
31
+ }
32
+ }
33
+
34
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
35
+ public async down(queryRunner: QueryRunner): Promise<void> {}
36
+ }
37
+
8
38
  export class CreateBitstringStatusList1741895823000 implements MigrationInterface {
9
39
  name = 'CreateBitstringStatusList1741895823000'
10
40
 
@@ -0,0 +1,67 @@
1
+ import Debug from 'debug'
2
+ import { DatabaseType, MigrationInterface, QueryRunner } from 'typeorm'
3
+
4
+ import { CreateDcqlQueryItemPG1726588800000 } from '../postgres/1726588800000-CreateDcqlQueryItem'
5
+ import { CreateDcqlQueryItemSQlite1726617600000 } from '../sqlite/1726617600000-CreateDcqlQueryItem'
6
+
7
+ const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:migrations')
8
+
9
+ export class CreateDcqlQueryItem1726617600000 implements MigrationInterface {
10
+ name = 'CreateDcqlQueryItem1726617600000'
11
+
12
+ public async up(queryRunner: QueryRunner): Promise<void> {
13
+ debug('migration: updating presentation definition item nullable fields')
14
+ const dbType: DatabaseType = queryRunner.connection.driver.options.type
15
+
16
+ switch (dbType) {
17
+ case 'postgres': {
18
+ debug('using postgres migration file')
19
+ const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()
20
+ await mig.up(queryRunner)
21
+ debug('Migration statements executed')
22
+ return
23
+ }
24
+ case 'sqlite':
25
+ case 'expo':
26
+ case 'react-native': {
27
+ debug('using sqlite/react-native migration file')
28
+ const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()
29
+ await mig.up(queryRunner)
30
+ debug('Migration statements executed')
31
+ return
32
+ }
33
+ default:
34
+ return Promise.reject(
35
+ `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,
36
+ )
37
+ }
38
+ }
39
+
40
+ public async down(queryRunner: QueryRunner): Promise<void> {
41
+ debug('migration: reverting presentation definition item nullable fields')
42
+ const dbType: DatabaseType = queryRunner.connection.driver.options.type
43
+
44
+ switch (dbType) {
45
+ case 'postgres': {
46
+ debug('using postgres migration file')
47
+ const mig: CreateDcqlQueryItemPG1726588800000 = new CreateDcqlQueryItemPG1726588800000()
48
+ await mig.down(queryRunner)
49
+ debug('Migration statements executed')
50
+ return
51
+ }
52
+ case 'sqlite':
53
+ case 'expo':
54
+ case 'react-native': {
55
+ debug('using sqlite/react-native migration file')
56
+ const mig: CreateDcqlQueryItemSQlite1726617600000 = new CreateDcqlQueryItemSQlite1726617600000()
57
+ await mig.down(queryRunner)
58
+ debug('Migration statements executed')
59
+ return
60
+ }
61
+ default:
62
+ return Promise.reject(
63
+ `Migrations are currently only supported for sqlite, react-native, expo and postgres. Was ${dbType}. Please run your database without migrations and with 'migrationsRun: false' and 'synchronize: true' for now`,
64
+ )
65
+ }
66
+ }
67
+ }
@@ -1,4 +1,8 @@
1
1
  import { CreateContacts1659463079429 } from './1-CreateContacts'
2
+ import { CreatePresentationDefinitions1716533767523 } from './10-CreatePresentationDefinitions'
3
+ import { FixCredentialClaimsReferencesUuid1741895822987 } from './11-FixCredentialClaimsReferenceUuid'
4
+ import { AddBitstringStatusListEnum1741895823000, CreateBitstringStatusList1741895823000 } from './12-CreateBitstringStatusList'
5
+ import { CreateDcqlQueryItem1726617600000 } from './13-CreateDcqlQueryItem'
2
6
  import { CreateIssuanceBranding1659463079429 } from './2-CreateIssuanceBranding'
3
7
  import { CreateContacts1690925872318 } from './3-CreateContacts'
4
8
  import { CreateStatusList1693866470000 } from './4-CreateStatusList'
@@ -7,9 +11,6 @@ import { CreateDigitalCredential1708525189000 } from './6-CreateDigitalCredentia
7
11
  import { CreateMachineStateStore1708098041262 } from './7-CreateMachineStateStore'
8
12
  import { CreateContacts1708525189000 } from './8-CreateContacts'
9
13
  import { CreateContacts1715761125000 } from './9-CreateContacts'
10
- import { CreatePresentationDefinitions1716533767523 } from './10-CreatePresentationDefinitions'
11
- import { FixCredentialClaimsReferencesUuid1741895822987 } from './11-FixCredentialClaimsReferenceUuid'
12
- import { CreateBitstringStatusList1741895823000 } from './12-CreateBitstringStatusList'
13
14
 
14
15
  /**
15
16
  * The migrations array that SHOULD be used when initializing a TypeORM database connection.
@@ -27,11 +28,15 @@ export const DataStoreContactMigrations = [
27
28
  CreateContacts1715761125000,
28
29
  ]
29
30
  export const DataStoreIssuanceBrandingMigrations = [CreateIssuanceBranding1659463079429, FixCredentialClaimsReferencesUuid1741895822987]
30
- export const DataStoreStatusListMigrations = [CreateStatusList1693866470000, CreateBitstringStatusList1741895823000]
31
+ export const DataStoreStatusListMigrations = [
32
+ CreateStatusList1693866470000,
33
+ AddBitstringStatusListEnum1741895823000,
34
+ CreateBitstringStatusList1741895823000,
35
+ ]
31
36
  export const DataStoreEventLoggerMigrations = [CreateAuditEvents1701635835330]
32
37
  export const DataStoreDigitalCredentialMigrations = [CreateDigitalCredential1708525189000]
33
38
  export const DataStoreMachineStateMigrations = [CreateMachineStateStore1708098041262]
34
- export const DataStorePresentationDefinitionMigrations = [CreatePresentationDefinitions1716533767523]
39
+ export const DataStorePresentationDefinitionMigrations = [CreatePresentationDefinitions1716533767523, CreateDcqlQueryItem1726617600000]
35
40
 
36
41
  // All migrations together
37
42
  export const DataStoreMigrations = [
@@ -13,7 +13,7 @@ CREATE TABLE "PresentationDefinitionItem" (
13
13
  "version" TEXT NOT NULL,
14
14
  "purpose" TEXT,
15
15
  "definition_payload" TEXT NOT NULL,
16
- "dcql_payload" TEXT,
16
+ "query" TEXT,
17
17
  "created_at" TIMESTAMP NOT NULL DEFAULT now(),
18
18
  "last_updated_at" TIMESTAMP NOT NULL DEFAULT now(),
19
19
  CONSTRAINT "PK_PresentationDefinitionItem_id" PRIMARY KEY ("id"))
@@ -0,0 +1,25 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm'
2
+
3
+ export class CreateDcqlQueryItemPG1726588800000 implements MigrationInterface {
4
+ name = 'CreateDcqlQueryItemPG1726588800000'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(`
8
+ CREATE TABLE "DcqlQueryItem" (
9
+ "id" uuid NOT NULL DEFAULT uuid_generate_v4(),
10
+ "tenant_id" TEXT,
11
+ "query_id" TEXT NOT NULL,
12
+ "name" TEXT,
13
+ "version" TEXT NOT NULL,
14
+ "purpose" TEXT,
15
+ "query" TEXT NOT NULL,
16
+ "created_at" TIMESTAMP NOT NULL DEFAULT now(),
17
+ "last_updated_at" TIMESTAMP NOT NULL DEFAULT now(),
18
+ CONSTRAINT "PK_DcqlQueryItem_id" PRIMARY KEY ("id"))
19
+ `)
20
+ }
21
+
22
+ public async down(queryRunner: QueryRunner): Promise<void> {
23
+ await queryRunner.query(`DROP TABLE "DcqlQueryItem"`)
24
+ }
25
+ }
@@ -10,7 +10,7 @@ export class UpdateStatusList1737110469001 implements MigrationInterface {
10
10
  // Make columns nullable and add new columns
11
11
  await queryRunner.query(`ALTER TABLE "StatusList" ALTER COLUMN "indexingDirection" DROP NOT NULL`)
12
12
  await queryRunner.query(`ALTER TABLE "StatusList" ALTER COLUMN "statusPurpose" DROP NOT NULL`)
13
- await queryRunner.query(`ALTER TABLE "StatusList" ADD "bitsPerStatus" integer`)
13
+ await queryRunner.query(`ALTER TABLE "StatusList" ADD "bitsPerStatus" integer DEFAULT 1`)
14
14
  await queryRunner.query(`ALTER TABLE "StatusList" ADD "expiresAt" timestamp with time zone`)
15
15
  }
16
16
 
@@ -1,11 +1,25 @@
1
1
  import { MigrationInterface, QueryRunner } from 'typeorm'
2
2
 
3
+ export class AddBitstringStatusListEnumPG1741895823000 implements MigrationInterface {
4
+ name = 'AddBitstringStatusListEnum1741895823000'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.startTransaction()
8
+ await queryRunner.query(`ALTER TYPE "StatusList_type_enum" ADD VALUE 'BitstringStatusList'`)
9
+ await queryRunner.commitTransaction()
10
+ }
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
+ public async down(queryRunner: QueryRunner): Promise<void> {
14
+ // Note: Cannot remove enum value in Postgres without recreating the type
15
+ }
16
+ }
17
+
3
18
  export class CreateBitstringStatusListPG1741895823000 implements MigrationInterface {
4
19
  name = 'CreateBitstringStatusList1741895823000'
5
20
 
6
21
  public async up(queryRunner: QueryRunner): Promise<void> {
7
22
  // Add BitstringStatusList columns to StatusList table
8
- await queryRunner.query(`ALTER TABLE "StatusList" ADD COLUMN "bitsPerStatus" integer DEFAULT 1`)
9
23
  await queryRunner.query(`ALTER TABLE "StatusList" ADD COLUMN "ttl" integer`)
10
24
  await queryRunner.query(`ALTER TABLE "StatusList" ADD COLUMN "validFrom" TIMESTAMP`)
11
25
  await queryRunner.query(`ALTER TABLE "StatusList" ADD COLUMN "validUntil" TIMESTAMP`)
@@ -21,7 +35,6 @@ export class CreateBitstringStatusListPG1741895823000 implements MigrationInterf
21
35
 
22
36
  // Add BitstringStatusListEntry specific columns to StatusListEntry table
23
37
  await queryRunner.query(`ALTER TABLE "StatusListEntry" ADD COLUMN "statusPurpose" character varying`)
24
- await queryRunner.query(`ALTER TABLE "StatusListEntry" ADD COLUMN "bitsPerStatus" integer DEFAULT 1`)
25
38
  await queryRunner.query(`ALTER TABLE "StatusListEntry" ADD COLUMN "statusMessage" text`)
26
39
  await queryRunner.query(`ALTER TABLE "StatusListEntry" ADD COLUMN "statusReference" text`)
27
40
 
@@ -13,7 +13,7 @@ export class CreatePresentationDefinitions1716475165344 implements MigrationInte
13
13
  "version" varchar NOT NULL,
14
14
  "purpose" varchar,
15
15
  "definition_payload" varchar NOT NULL,
16
- "dcql_payload" varchar,
16
+ "query" varchar,
17
17
  "created_at" datetime NOT NULL DEFAULT (datetime('now')),
18
18
  "last_updated_at" datetime NOT NULL DEFAULT (datetime('now')))`,
19
19
  )
@@ -0,0 +1,24 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm'
2
+
3
+ export class CreateDcqlQueryItemSQlite1726617600000 implements MigrationInterface {
4
+ name = 'CreateDcqlQueryItemSQlite1726617600000'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `CREATE TABLE "DcqlQueryItem" (
9
+ "id" varchar PRIMARY KEY NOT NULL,
10
+ "tenant_id" varchar,
11
+ "query_id" varchar NOT NULL,
12
+ "name" varchar,
13
+ "version" varchar NOT NULL,
14
+ "purpose" varchar,
15
+ "query" varchar NOT NULL,
16
+ "created_at" datetime NOT NULL DEFAULT (datetime('now')),
17
+ "last_updated_at" datetime NOT NULL DEFAULT (datetime('now')))`,
18
+ )
19
+ }
20
+
21
+ public async down(queryRunner: QueryRunner): Promise<void> {
22
+ await queryRunner.query(`DROP TABLE "DcqlQueryItem"`)
23
+ }
24
+ }
@@ -2,7 +2,7 @@ import type {
2
2
  GetDefinitionArgs,
3
3
  GetDefinitionsArgs,
4
4
  DeleteDefinitionArgs,
5
- PresentationDefinitionItem,
5
+ DcqlQueryItem,
6
6
  AddDefinitionArgs,
7
7
  UpdateDefinitionArgs,
8
8
  DeleteDefinitionsArgs,
@@ -11,10 +11,10 @@ import type {
11
11
  export abstract class AbstractPDStore {
12
12
  abstract hasDefinition(args: GetDefinitionArgs): Promise<boolean>
13
13
  abstract hasDefinitions(args: GetDefinitionsArgs): Promise<boolean>
14
- abstract getDefinition(args: GetDefinitionArgs): Promise<PresentationDefinitionItem>
15
- abstract getDefinitions(args: GetDefinitionsArgs): Promise<Array<PresentationDefinitionItem>>
16
- abstract addDefinition(args: AddDefinitionArgs): Promise<PresentationDefinitionItem>
17
- abstract updateDefinition(args: UpdateDefinitionArgs): Promise<PresentationDefinitionItem>
14
+ abstract getDefinition(args: GetDefinitionArgs): Promise<DcqlQueryItem>
15
+ abstract getDefinitions(args: GetDefinitionsArgs): Promise<Array<DcqlQueryItem>>
16
+ abstract addDefinition(args: AddDefinitionArgs): Promise<DcqlQueryItem>
17
+ abstract updateDefinition(args: UpdateDefinitionArgs): Promise<DcqlQueryItem>
18
18
  abstract deleteDefinition(args: DeleteDefinitionArgs): Promise<void>
19
19
  abstract deleteDefinitions(args: DeleteDefinitionsArgs): Promise<number>
20
20
  }
@@ -9,12 +9,12 @@ import type {
9
9
  GetDefinitionsArgs,
10
10
  HasDefinitionArgs,
11
11
  HasDefinitionsArgs,
12
- NonPersistedPresentationDefinitionItem,
13
- PresentationDefinitionItem,
14
- PresentationDefinitionItemFilter,
12
+ NonPersistedDcqlQueryItem,
13
+ DcqlQueryItem,
14
+ DcqlQueryItemFilter,
15
15
  } from '../types'
16
- import { PresentationDefinitionItemEntity } from '../entities/presentationDefinition/PresentationDefinitionItemEntity'
17
- import { presentationDefinitionEntityItemFrom, presentationDefinitionItemFrom } from '../utils/presentationDefinition/MappingUtils'
16
+ import { DcqlQueryItemEntity } from '../entities/presentationDefinition/DcqlQueryItemEntity'
17
+ import { dcqlQueryEntityItemFrom, dcqlQueryItemFrom } from '../utils/presentationDefinition/MappingUtils'
18
18
 
19
19
  const debug: Debug.Debugger = Debug('sphereon:ssi-sdk:pd-store')
20
20
 
@@ -26,22 +26,22 @@ export class PDStore extends AbstractPDStore {
26
26
  this.dbConnection = dbConnection
27
27
  }
28
28
 
29
- getDefinition = async (args: GetDefinitionArgs): Promise<PresentationDefinitionItem> => {
29
+ getDefinition = async (args: GetDefinitionArgs): Promise<DcqlQueryItem> => {
30
30
  const { itemId } = args ?? {}
31
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
32
- const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
31
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
32
+ const result: DcqlQueryItemEntity | null = await pdRepository.findOne({
33
33
  where: { id: itemId },
34
34
  })
35
35
  if (!result) {
36
36
  return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`))
37
37
  }
38
38
 
39
- return presentationDefinitionItemFrom(result)
39
+ return dcqlQueryItemFrom(result)
40
40
  }
41
41
 
42
42
  hasDefinition = async (args: HasDefinitionArgs): Promise<boolean> => {
43
43
  const { itemId } = args ?? {}
44
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
44
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
45
45
 
46
46
  const resultCount: number = await pdRepository.count({
47
47
  where: { id: itemId },
@@ -52,7 +52,7 @@ export class PDStore extends AbstractPDStore {
52
52
 
53
53
  hasDefinitions = async (args: HasDefinitionsArgs): Promise<boolean> => {
54
54
  const { filter } = args
55
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
55
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
56
56
 
57
57
  const resultCount: number = await pdRepository.count({
58
58
  ...(filter && { where: cleanFilter(filter) }),
@@ -60,67 +60,67 @@ export class PDStore extends AbstractPDStore {
60
60
  return resultCount > 0
61
61
  }
62
62
 
63
- getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<PresentationDefinitionItem>> => {
63
+ getDefinitions = async (args: GetDefinitionsArgs): Promise<Array<DcqlQueryItem>> => {
64
64
  const { filter } = args
65
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
65
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
66
66
  const initialResult = await this.findIds(pdRepository, filter)
67
- const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
67
+ const result: Array<DcqlQueryItemEntity> = await pdRepository.find({
68
68
  where: {
69
- id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
69
+ id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),
70
70
  },
71
71
  order: {
72
72
  version: 'DESC',
73
73
  },
74
74
  })
75
75
 
76
- return result.map((entity: PresentationDefinitionItemEntity) => presentationDefinitionItemFrom(entity))
76
+ return result.map((entity: DcqlQueryItemEntity) => dcqlQueryItemFrom(entity))
77
77
  }
78
78
 
79
- addDefinition = async (item: NonPersistedPresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
80
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
79
+ addDefinition = async (item: NonPersistedDcqlQueryItem): Promise<DcqlQueryItem> => {
80
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
81
81
 
82
- const entity: PresentationDefinitionItemEntity = presentationDefinitionEntityItemFrom(item)
82
+ const entity: DcqlQueryItemEntity = dcqlQueryEntityItemFrom(item)
83
83
  debug('Adding presentation definition entity', item)
84
- const result: PresentationDefinitionItemEntity = await pdRepository.save(entity, {
84
+ const result: DcqlQueryItemEntity = await pdRepository.save(entity, {
85
85
  transaction: true,
86
86
  })
87
87
 
88
- return presentationDefinitionItemFrom(result)
88
+ return dcqlQueryItemFrom(result)
89
89
  }
90
90
 
91
- updateDefinition = async (item: PresentationDefinitionItem): Promise<PresentationDefinitionItem> => {
92
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
91
+ updateDefinition = async (item: DcqlQueryItem): Promise<DcqlQueryItem> => {
92
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
93
93
 
94
- const result: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
94
+ const result: DcqlQueryItemEntity | null = await pdRepository.findOne({
95
95
  where: { id: item.id },
96
96
  })
97
97
  if (!result) {
98
98
  return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`))
99
99
  }
100
100
 
101
- const updatedEntity: Partial<PresentationDefinitionItemEntity> = {
101
+ const updatedEntity: Partial<DcqlQueryItemEntity> = {
102
102
  ...result,
103
103
  }
104
104
  updatedEntity.tenantId = item.tenantId
105
- updatedEntity.definitionId = item.definitionId!
105
+ updatedEntity.queryId = item.queryId!
106
106
  updatedEntity.version = item.version
107
107
  updatedEntity.name = item.name
108
108
  updatedEntity.purpose = item.purpose
109
- updatedEntity.definitionPayload = JSON.stringify(item.definitionPayload!)
109
+ updatedEntity.query = JSON.stringify(item.query)
110
110
 
111
111
  debug('Updating presentation definition entity', updatedEntity)
112
- const updateResult: PresentationDefinitionItemEntity = await pdRepository.save(updatedEntity, {
112
+ const updateResult: DcqlQueryItemEntity = await pdRepository.save(updatedEntity, {
113
113
  transaction: true,
114
114
  })
115
115
 
116
- return presentationDefinitionItemFrom(updateResult)
116
+ return dcqlQueryItemFrom(updateResult)
117
117
  }
118
118
 
119
119
  deleteDefinition = async (args: DeleteDefinitionArgs): Promise<void> => {
120
120
  const { itemId } = args
121
121
 
122
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
123
- const entity: PresentationDefinitionItemEntity | null = await pdRepository.findOne({
122
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
123
+ const entity: DcqlQueryItemEntity | null = await pdRepository.findOne({
124
124
  where: { id: itemId },
125
125
  })
126
126
 
@@ -134,12 +134,12 @@ export class PDStore extends AbstractPDStore {
134
134
 
135
135
  deleteDefinitions = async (args: DeleteDefinitionsArgs): Promise<number> => {
136
136
  const { filter } = args
137
- const pdRepository = (await this.dbConnection).getRepository(PresentationDefinitionItemEntity)
137
+ const pdRepository = (await this.dbConnection).getRepository(DcqlQueryItemEntity)
138
138
  const initialResult = await this.findIds(pdRepository, filter)
139
139
 
140
- const result: Array<PresentationDefinitionItemEntity> = await pdRepository.find({
140
+ const result: Array<DcqlQueryItemEntity> = await pdRepository.find({
141
141
  where: {
142
- id: In(initialResult.map((entity: PresentationDefinitionItemEntity) => entity.id)),
142
+ id: In(initialResult.map((entity: DcqlQueryItemEntity) => entity.id)),
143
143
  },
144
144
  })
145
145
 
@@ -151,9 +151,9 @@ export class PDStore extends AbstractPDStore {
151
151
  }
152
152
 
153
153
  findIds = async (
154
- pdRepository: Repository<PresentationDefinitionItemEntity>,
155
- filter: Array<PresentationDefinitionItemFilter> | undefined,
156
- ): Promise<Array<PresentationDefinitionItemEntity>> => {
154
+ pdRepository: Repository<DcqlQueryItemEntity>,
155
+ filter: Array<DcqlQueryItemFilter> | undefined,
156
+ ): Promise<Array<DcqlQueryItemEntity>> => {
157
157
  const idFilters = filter?.map((f) => f.id).filter((id) => id !== undefined && id !== null)
158
158
  if (idFilters && idFilters.length > 0 && idFilters.length === filter?.length) {
159
159
  return await pdRepository.find({
@@ -167,15 +167,15 @@ export class PDStore extends AbstractPDStore {
167
167
  }
168
168
  }
169
169
 
170
- const cleanFilter = (filter: Array<PresentationDefinitionItemFilter> | undefined): Array<PresentationDefinitionItemFilter> | undefined => {
170
+ const cleanFilter = (filter: Array<DcqlQueryItemFilter> | undefined): Array<DcqlQueryItemFilter> | undefined => {
171
171
  if (filter === undefined) {
172
172
  return undefined
173
173
  }
174
174
 
175
175
  return filter.map((item) => {
176
- const cleanedItem: PresentationDefinitionItemFilter = {}
176
+ const cleanedItem: DcqlQueryItemFilter = {}
177
177
  for (const key in item) {
178
- const value = item[key as keyof PresentationDefinitionItemFilter]
178
+ const value = item[key as keyof DcqlQueryItemFilter]
179
179
  if (value !== undefined) {
180
180
  ;(cleanedItem as any)[key] = value
181
181
  }
@@ -1,7 +1,7 @@
1
1
  import { ManagedIdentifierOptsOrResult } from '@sphereon/ssi-sdk-ext.identifier-resolution'
2
2
  import { IIdentifier } from '@veramo/core'
3
3
  import { IIssuerLocaleBranding } from '../issuanceBranding/issuanceBranding'
4
- import { CredentialRole } from '../digitalCredential'
4
+ import { CredentialRole } from '@sphereon/ssi-types'
5
5
 
6
6
  export type MetadataTypes = string | number | Date | boolean | undefined
7
7
 
@@ -2,7 +2,8 @@ import { HasherSync } from '@sphereon/ssi-types'
2
2
  import { FindOptionsOrder } from 'typeorm'
3
3
  import { DigitalCredentialEntity } from '../../entities/digitalCredential/DigitalCredentialEntity'
4
4
  import { DigitalCredential } from './types'
5
- import { CredentialCorrelationType, CredentialRole, CredentialStateType, RegulationType } from './enums'
5
+ import { CredentialCorrelationType, CredentialStateType, RegulationType } from './enums'
6
+ import { CredentialRole } from '@sphereon/ssi-types'
6
7
 
7
8
  export type GetCredentialArgs = { id: string } | { hash: string }
8
9
 
@@ -56,13 +56,6 @@ export enum CredentialCorrelationType {
56
56
  URL = 'URL',
57
57
  }
58
58
 
59
- export enum CredentialRole {
60
- ISSUER = 'ISSUER',
61
- VERIFIER = 'VERIFIER',
62
- HOLDER = 'HOLDER',
63
- FEDERATION_TRUST_ANCHOR = 'FEDERATION_TRUST_ANCHOR',
64
- }
65
-
66
59
  export enum CredentialStateType {
67
60
  REVOKED = 'REVOKED',
68
61
  VERIFIED = 'VERIFIED',
@@ -1,4 +1,5 @@
1
- import { CredentialCorrelationType, CredentialDocumentFormat, CredentialRole, CredentialStateType, DocumentType, RegulationType } from './enums'
1
+ import { CredentialCorrelationType, CredentialDocumentFormat, CredentialStateType, DocumentType, RegulationType } from './enums'
2
+ import { CredentialRole } from '@sphereon/ssi-types'
2
3
 
3
4
  /**
4
5
  * DigitalCredential
@@ -1,6 +1,6 @@
1
- import { NonPersistedPresentationDefinitionItem, PresentationDefinitionItem, PresentationDefinitionItemFilter } from './presentationDefinition'
1
+ import { NonPersistedDcqlQueryItem, DcqlQueryItem, DcqlQueryItemFilter } from './presentationDefinition'
2
2
 
3
- export type FindDefinitionArgs = Array<PresentationDefinitionItemFilter>
3
+ export type FindDcqlQueryArgs = Array<DcqlQueryItemFilter>
4
4
 
5
5
  export type GetDefinitionArgs = {
6
6
  itemId: string
@@ -9,14 +9,14 @@ export type GetDefinitionArgs = {
9
9
  export type HasDefinitionArgs = GetDefinitionArgs
10
10
 
11
11
  export type GetDefinitionsArgs = {
12
- filter?: FindDefinitionArgs
12
+ filter?: FindDcqlQueryArgs
13
13
  }
14
14
 
15
15
  export type HasDefinitionsArgs = GetDefinitionsArgs
16
16
 
17
- export type AddDefinitionArgs = NonPersistedPresentationDefinitionItem
17
+ export type AddDefinitionArgs = NonPersistedDcqlQueryItem
18
18
 
19
- export type UpdateDefinitionArgs = PresentationDefinitionItem
19
+ export type UpdateDefinitionArgs = DcqlQueryItem
20
20
 
21
21
  export type DeleteDefinitionArgs = {
22
22
  itemId: string