@sphereon/ssi-sdk.data-store 0.23.5-unstable.88 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +77 -77
  3. package/dist/index.d.ts +3 -9
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -15
  6. package/dist/index.js.map +1 -1
  7. package/dist/migrations/generic/index.d.ts +0 -2
  8. package/dist/migrations/generic/index.d.ts.map +1 -1
  9. package/dist/migrations/generic/index.js +1 -4
  10. package/dist/migrations/generic/index.js.map +1 -1
  11. package/dist/migrations/index.d.ts +1 -1
  12. package/dist/migrations/index.d.ts.map +1 -1
  13. package/dist/migrations/index.js +1 -2
  14. package/dist/migrations/index.js.map +1 -1
  15. package/dist/migrations/postgres/1690925872592-CreateContacts.js +1 -1
  16. package/dist/migrations/postgres/1690925872592-CreateContacts.js.map +1 -1
  17. package/dist/migrations/postgres/1708525189001-CreateDigitalCredential.js +22 -22
  18. package/dist/migrations/postgres/1708797018115-CreateMachineStateStore.js +16 -16
  19. package/dist/migrations/sqlite/1708525189002-CreateDigitalCredential.js +21 -21
  20. package/dist/migrations/sqlite/1708796002272-CreateMachineStateStore.js +15 -15
  21. package/dist/types/index.d.ts +0 -2
  22. package/dist/types/index.d.ts.map +1 -1
  23. package/dist/types/index.js +0 -2
  24. package/dist/types/index.js.map +1 -1
  25. package/package.json +4 -5
  26. package/src/__tests__/contact.entities.test.ts +2542 -2542
  27. package/src/__tests__/contact.store.test.ts +2471 -2471
  28. package/src/__tests__/digitalCredential.entities.test.ts +254 -254
  29. package/src/__tests__/digitalCredential.store.test.ts +294 -294
  30. package/src/__tests__/eventLogger.entities.test.ts +73 -73
  31. package/src/__tests__/eventLogger.store.test.ts +136 -136
  32. package/src/__tests__/issuanceBranding.entities.test.ts +844 -844
  33. package/src/__tests__/issuanceBranding.store.test.ts +1884 -1884
  34. package/src/__tests__/machineState.entities.test.ts +51 -51
  35. package/src/__tests__/machineState.store.test.ts +174 -174
  36. package/src/contact/AbstractContactStore.ts +71 -71
  37. package/src/contact/ContactStore.ts +723 -723
  38. package/src/digitalCredential/AbstractDigitalCredentialStore.ts +17 -17
  39. package/src/digitalCredential/DigitalCredentialStore.ts +127 -127
  40. package/src/entities/contact/BaseContactEntity.ts +39 -39
  41. package/src/entities/contact/ConnectionEntity.ts +29 -29
  42. package/src/entities/contact/CorrelationIdentifierEntity.ts +37 -37
  43. package/src/entities/contact/DidAuthConfigEntity.ts +14 -14
  44. package/src/entities/contact/ElectronicAddressEntity.ts +63 -63
  45. package/src/entities/contact/IdentityEntity.ts +97 -97
  46. package/src/entities/contact/IdentityMetadataItemEntity.ts +35 -35
  47. package/src/entities/contact/NaturalPersonEntity.ts +38 -38
  48. package/src/entities/contact/OpenIdConfigEntity.ts +26 -26
  49. package/src/entities/contact/OrganizationEntity.ts +34 -34
  50. package/src/entities/contact/PartyEntity.ts +110 -110
  51. package/src/entities/contact/PartyRelationshipEntity.ts +61 -61
  52. package/src/entities/contact/PartyTypeEntity.ts +62 -62
  53. package/src/entities/contact/PhysicalAddressEntity.ts +87 -87
  54. package/src/entities/digitalCredential/DigitalCredentialEntity.ts +64 -64
  55. package/src/entities/eventLogger/AuditEventEntity.ts +99 -99
  56. package/src/entities/issuanceBranding/CredentialBrandingEntity.ts +78 -78
  57. package/src/entities/issuanceBranding/ImageAttributesEntity.ts +57 -57
  58. package/src/entities/issuanceBranding/IssuerBrandingEntity.ts +72 -72
  59. package/src/entities/machineState/MachineStateInfoEntity.ts +58 -58
  60. package/src/entities/statusList2021/StatusList2021Entity.ts +96 -96
  61. package/src/eventLogger/AbstractEventLoggerStore.ts +7 -7
  62. package/src/eventLogger/EventLoggerStore.ts +62 -62
  63. package/src/index.ts +141 -154
  64. package/src/issuanceBranding/IssuanceBrandingStore.ts +559 -559
  65. package/src/machineState/IAbstractMachineStateStore.ts +65 -65
  66. package/src/machineState/MachineStateStore.ts +149 -149
  67. package/src/migrations/generic/1-CreateContacts.ts +66 -66
  68. package/src/migrations/generic/2-CreateIssuanceBranding.ts +64 -64
  69. package/src/migrations/generic/3-CreateContacts.ts +66 -66
  70. package/src/migrations/generic/4-CreateStatusList.ts +54 -54
  71. package/src/migrations/generic/5-CreateAuditEvents.ts +66 -66
  72. package/src/migrations/generic/6-CreateDigitalCredential.ts +66 -66
  73. package/src/migrations/generic/7-CreateMachineStateStore.ts +66 -66
  74. package/src/migrations/generic/index.ts +33 -36
  75. package/src/migrations/index.ts +9 -10
  76. package/src/migrations/postgres/1659463079428-CreateContacts.ts +63 -63
  77. package/src/migrations/postgres/1685628974232-CreateIssuanceBranding.ts +85 -85
  78. package/src/migrations/postgres/1690925872592-CreateContacts.ts +104 -104
  79. package/src/migrations/postgres/1693866470001-CreateStatusList.ts +24 -24
  80. package/src/migrations/postgres/1701634812183-CreateAuditEvents.ts +33 -33
  81. package/src/migrations/postgres/1708525189001-CreateDigitalCredential.ts +44 -44
  82. package/src/migrations/postgres/1708797018115-CreateMachineStateStore.ts +29 -29
  83. package/src/migrations/sqlite/1659463069549-CreateContacts.ts +110 -110
  84. package/src/migrations/sqlite/1685628973231-CreateIssuanceBranding.ts +119 -119
  85. package/src/migrations/sqlite/1690925872693-CreateContacts.ts +161 -161
  86. package/src/migrations/sqlite/1693866470000-CreateStatusList.ts +24 -24
  87. package/src/migrations/sqlite/1701634819487-CreateAuditEvents.ts +15 -15
  88. package/src/migrations/sqlite/1708525189002-CreateDigitalCredential.ts +34 -34
  89. package/src/migrations/sqlite/1708796002272-CreateMachineStateStore.ts +28 -28
  90. package/src/statusList/StatusListStore.ts +237 -237
  91. package/src/types/contact/IAbstractContactStore.ts +161 -161
  92. package/src/types/contact/contact.ts +237 -237
  93. package/src/types/digitalCredential/IAbstractDigitalCredentialStore.ts +37 -37
  94. package/src/types/digitalCredential/digitalCredential.ts +46 -46
  95. package/src/types/eventLogger/IAbstractEventLoggerStore.ts +12 -12
  96. package/src/types/eventLogger/eventLogger.ts +3 -3
  97. package/src/types/index.ts +10 -12
  98. package/src/types/machineState/IAbstractMachineStateStore.ts +68 -68
  99. package/src/utils/SortingUtils.ts +16 -16
  100. package/src/utils/contact/MappingUtils.ts +385 -385
  101. package/src/utils/digitalCredential/MappingUtils.ts +122 -122
  102. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.d.ts +0 -13
  103. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.d.ts.map +0 -1
  104. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.js +0 -71
  105. package/dist/entities/presentationDefinitions/PresentationDefinitionItemEntity.js.map +0 -1
  106. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts +0 -7
  107. package/dist/migrations/generic/8-CreatePresentationDefinitions.d.ts.map +0 -1
  108. package/dist/migrations/generic/8-CreatePresentationDefinitions.js +0 -78
  109. package/dist/migrations/generic/8-CreatePresentationDefinitions.js.map +0 -1
  110. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts +0 -7
  111. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.d.ts.map +0 -1
  112. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js +0 -40
  113. package/dist/migrations/postgres/1716475165345-CreatePresentationDefinitions.js.map +0 -1
  114. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts +0 -7
  115. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.d.ts.map +0 -1
  116. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js +0 -37
  117. package/dist/migrations/sqlite/1716475165344-CreatePresentationDefinitions.js.map +0 -1
  118. package/dist/pd/AbstractPDStore.d.ts +0 -10
  119. package/dist/pd/AbstractPDStore.d.ts.map +0 -1
  120. package/dist/pd/AbstractPDStore.js +0 -7
  121. package/dist/pd/AbstractPDStore.js.map +0 -1
  122. package/dist/pd/PDStore.d.ts +0 -14
  123. package/dist/pd/PDStore.d.ts.map +0 -1
  124. package/dist/pd/PDStore.js +0 -90
  125. package/dist/pd/PDStore.js.map +0 -1
  126. package/dist/types/pd/IAbstractPDStore.d.ts +0 -14
  127. package/dist/types/pd/IAbstractPDStore.d.ts.map +0 -1
  128. package/dist/types/pd/IAbstractPDStore.js +0 -3
  129. package/dist/types/pd/IAbstractPDStore.js.map +0 -1
  130. package/dist/types/pd/pd.d.ts +0 -15
  131. package/dist/types/pd/pd.d.ts.map +0 -1
  132. package/dist/types/pd/pd.js +0 -3
  133. package/dist/types/pd/pd.js.map +0 -1
  134. package/dist/utils/presentationDefinitions/MappingUtils.d.ts +0 -6
  135. package/dist/utils/presentationDefinitions/MappingUtils.d.ts.map +0 -1
  136. package/dist/utils/presentationDefinitions/MappingUtils.js +0 -50
  137. package/dist/utils/presentationDefinitions/MappingUtils.js.map +0 -1
  138. package/src/entities/presentationDefinitions/PresentationDefinitionItemEntity.ts +0 -41
  139. package/src/migrations/generic/8-CreatePresentationDefinitions.ts +0 -66
  140. package/src/migrations/postgres/1716475165345-CreatePresentationDefinitions.ts +0 -24
  141. package/src/migrations/sqlite/1716475165344-CreatePresentationDefinitions.ts +0 -23
  142. package/src/pd/AbstractPDStore.ts +0 -10
  143. package/src/pd/PDStore.ts +0 -103
  144. package/src/types/pd/IAbstractPDStore.ts +0 -19
  145. package/src/types/pd/pd.ts +0 -16
  146. package/src/utils/presentationDefinitions/MappingUtils.ts +0 -54
@@ -1,51 +1,51 @@
1
- import { DataSource } from 'typeorm'
2
- import { MachineStateInfoEntity } from '../entities/machineState/MachineStateInfoEntity'
3
-
4
- import { DataStoreMachineStateEntities, DataStoreMachineStateMigrations, StoreMachineStatePersistArgs, MachineStateStore } from '../index'
5
-
6
- describe('Machine State Info Database entities tests', (): void => {
7
- let dbConnection: DataSource
8
-
9
- beforeEach(async (): Promise<void> => {
10
- dbConnection = await new DataSource({
11
- type: 'sqlite',
12
- database: ':memory:',
13
- //logging: 'all',
14
- migrationsRun: false,
15
- migrations: DataStoreMachineStateMigrations,
16
- synchronize: false,
17
- entities: [...DataStoreMachineStateEntities],
18
- }).initialize()
19
- await dbConnection.runMigrations()
20
- expect(await dbConnection.showMigrations()).toBeFalsy()
21
- })
22
-
23
- afterEach(async (): Promise<void> => {
24
- await dbConnection.destroy()
25
- })
26
-
27
- it('should save machine state info to database', async (): Promise<void> => {
28
- const expiresAt = new Date()
29
- expiresAt.setTime(expiresAt.getTime() + 100000)
30
- const machineInfo: StoreMachineStatePersistArgs = {
31
- instanceId: 'Onboarding1',
32
- latestStateName: 'acceptAgreement',
33
- machineName: 'Onboarding',
34
- updatedCount: 0,
35
- latestEventType: 'SET_TOC',
36
- state: JSON.stringify({ myState: 'test_state' }),
37
- tenantId: 'test_tenant_id',
38
- expiresAt,
39
- }
40
- const fromDb: MachineStateInfoEntity = await dbConnection
41
- .getRepository(MachineStateInfoEntity)
42
- .save(MachineStateStore.machineStateInfoEntityFrom(machineInfo))
43
-
44
- expect(fromDb).toBeDefined()
45
- expect(fromDb?.instanceId).not.toBeNull()
46
- expect(fromDb?.machineName).toEqual(machineInfo.machineName)
47
- expect(fromDb?.state).toEqual(machineInfo.state)
48
- expect(fromDb?.tenantId).toEqual(machineInfo.tenantId)
49
- expect(fromDb?.completedAt).toBeNull()
50
- })
51
- })
1
+ import { DataSource } from 'typeorm'
2
+ import { MachineStateInfoEntity } from '../entities/machineState/MachineStateInfoEntity'
3
+
4
+ import { DataStoreMachineStateEntities, DataStoreMachineStateMigrations, StoreMachineStatePersistArgs, MachineStateStore } from '../index'
5
+
6
+ describe('Machine State Info Database entities tests', (): void => {
7
+ let dbConnection: DataSource
8
+
9
+ beforeEach(async (): Promise<void> => {
10
+ dbConnection = await new DataSource({
11
+ type: 'sqlite',
12
+ database: ':memory:',
13
+ //logging: 'all',
14
+ migrationsRun: false,
15
+ migrations: DataStoreMachineStateMigrations,
16
+ synchronize: false,
17
+ entities: [...DataStoreMachineStateEntities],
18
+ }).initialize()
19
+ await dbConnection.runMigrations()
20
+ expect(await dbConnection.showMigrations()).toBeFalsy()
21
+ })
22
+
23
+ afterEach(async (): Promise<void> => {
24
+ await dbConnection.destroy()
25
+ })
26
+
27
+ it('should save machine state info to database', async (): Promise<void> => {
28
+ const expiresAt = new Date()
29
+ expiresAt.setTime(expiresAt.getTime() + 100000)
30
+ const machineInfo: StoreMachineStatePersistArgs = {
31
+ instanceId: 'Onboarding1',
32
+ latestStateName: 'acceptAgreement',
33
+ machineName: 'Onboarding',
34
+ updatedCount: 0,
35
+ latestEventType: 'SET_TOC',
36
+ state: JSON.stringify({ myState: 'test_state' }),
37
+ tenantId: 'test_tenant_id',
38
+ expiresAt,
39
+ }
40
+ const fromDb: MachineStateInfoEntity = await dbConnection
41
+ .getRepository(MachineStateInfoEntity)
42
+ .save(MachineStateStore.machineStateInfoEntityFrom(machineInfo))
43
+
44
+ expect(fromDb).toBeDefined()
45
+ expect(fromDb?.instanceId).not.toBeNull()
46
+ expect(fromDb?.machineName).toEqual(machineInfo.machineName)
47
+ expect(fromDb?.state).toEqual(machineInfo.state)
48
+ expect(fromDb?.tenantId).toEqual(machineInfo.tenantId)
49
+ expect(fromDb?.completedAt).toBeNull()
50
+ })
51
+ })
@@ -1,174 +1,174 @@
1
- import { DataSource } from 'typeorm'
2
- import { DataStoreMachineStateEntities, MachineStateStore, StoreMachineStatesFindActiveArgs, StoreMachineStatePersistArgs } from '../index'
3
- import { DataStoreMachineStateMigrations } from '../migrations'
4
-
5
- describe('Machine State store tests', (): void => {
6
- let dbConnection: DataSource
7
- let store: MachineStateStore
8
-
9
- beforeEach(async (): Promise<void> => {
10
- dbConnection = await new DataSource({
11
- type: 'sqlite',
12
- database: ':memory:',
13
- logging: 'all',
14
- migrationsRun: false,
15
- migrations: DataStoreMachineStateMigrations,
16
- synchronize: false,
17
- entities: DataStoreMachineStateEntities,
18
- }).initialize()
19
- await dbConnection.runMigrations()
20
- expect(await dbConnection.showMigrations()).toBeFalsy()
21
- store = new MachineStateStore(dbConnection)
22
- })
23
-
24
- afterEach(async (): Promise<void> => {
25
- await dbConnection.destroy()
26
- })
27
-
28
- it('should store machine state info', async (): Promise<void> => {
29
- const persistArgs: StoreMachineStatePersistArgs = {
30
- instanceId: 'Onboarding1',
31
- machineName: 'Onboarding',
32
- updatedCount: 0,
33
- latestStateName: 'enterPersonalDetails',
34
- latestEventType: 'SET_PERSONAL_DATA',
35
- state: 'test_state',
36
- expiresAt: new Date(new Date().getDate() + 100000),
37
- tenantId: 'test_tenant_id',
38
- }
39
-
40
- const persistMachineStateResult = await store.persistMachineState(persistArgs)
41
- expect(persistMachineStateResult).toBeDefined()
42
- })
43
-
44
- it('should get all machines with their current state', async (): Promise<void> => {
45
- const persistArgs: StoreMachineStatePersistArgs = {
46
- instanceId: 'Onboarding1',
47
- machineName: 'Onboarding',
48
- latestStateName: 'enterPersonalDetails',
49
- latestEventType: 'SET_PERSONAL_DATA',
50
- updatedCount: 0,
51
- state: 'test_state',
52
- expiresAt: new Date(new Date().getDate() + 100000),
53
- tenantId: 'test_tenant_id',
54
- }
55
-
56
- const stateEvent1 = await store.persistMachineState({ ...persistArgs })
57
- expect(stateEvent1).toBeDefined()
58
-
59
- const stateEvent2 = await store.persistMachineState({ ...persistArgs, instanceId: 'Onboarding2' })
60
- expect(stateEvent2).toBeDefined()
61
-
62
- const result = await store.findMachineStates()
63
- expect(result).toHaveLength(2)
64
- })
65
-
66
- it('should retrieve a machine state', async (): Promise<void> => {
67
- const expiresAt = new Date()
68
- expiresAt.setTime(expiresAt.getTime() + 100000)
69
- const persistArgs: StoreMachineStatePersistArgs = {
70
- instanceId: 'Onboarding1',
71
- machineName: 'Onboarding',
72
- latestStateName: 'enterPersonalDetails',
73
- latestEventType: 'SET_PERSONAL_DATA',
74
- state: 'test_state',
75
- updatedCount: 0,
76
- expiresAt,
77
- tenantId: 'test_tenant_id',
78
- }
79
-
80
- const machineStatePersisted = await store.persistMachineState(persistArgs)
81
- expect(machineStatePersisted).toBeDefined()
82
- const result = await store.findActiveMachineStates({ machineName: persistArgs.machineName, tenantId: persistArgs.tenantId })
83
- expect(result).toBeDefined()
84
- })
85
-
86
- it('should delete a machine state', async (): Promise<void> => {
87
- const persistArgs: StoreMachineStatePersistArgs = {
88
- instanceId: 'Onboarding1',
89
- machineName: 'Onboarding',
90
- updatedCount: 0,
91
- latestStateName: 'enterPersonalDetails',
92
- latestEventType: 'SET_PERSONAL_DATA',
93
- state: 'test_state',
94
- expiresAt: new Date(new Date().getDate() + 100000),
95
- tenantId: 'test_tenant_id',
96
- }
97
-
98
- const persistedState = await store.persistMachineState(persistArgs)
99
- expect(persistedState).toBeDefined()
100
-
101
- const result: boolean = await store.deleteMachineState({ instanceId: persistedState.instanceId })
102
- expect(result).toBeTruthy()
103
- })
104
-
105
- it('should return an error if type filter does not match', async (): Promise<void> => {
106
- const args: StoreMachineStatesFindActiveArgs = {
107
- machineName: 'unknown_machine',
108
- }
109
-
110
- await expect(store.findActiveMachineStates(args)).resolves.toEqual([])
111
- })
112
-
113
- it('should delete the expired records', async () => {
114
- const futureExpiresAt = new Date()
115
- futureExpiresAt.setTime(futureExpiresAt.getTime() + 100000) // Future expiration
116
-
117
- const pastExpiresAt = new Date()
118
- pastExpiresAt.setTime(pastExpiresAt.getTime() - 100000) // Past expiration, already expired
119
-
120
- const oldestXstateEvent: StoreMachineStatePersistArgs = {
121
- instanceId: 'Onboarding1',
122
- machineName: 'Onboarding',
123
- latestStateName: 'enterPersonalDetails',
124
- latestEventType: 'SET_TOC',
125
- updatedCount: 0,
126
- state: 'test_state',
127
- expiresAt: futureExpiresAt,
128
- tenantId: 'test_tenant_id',
129
- }
130
- const middleXstateEvent: StoreMachineStatePersistArgs = {
131
- instanceId: 'Onboarding1',
132
- machineName: 'Onboarding',
133
- latestStateName: 'TOC',
134
- latestEventType: 'SET_POLICY2',
135
- updatedCount: 1,
136
- state: 'test_state',
137
- expiresAt: futureExpiresAt,
138
- tenantId: 'test_tenant_id',
139
- }
140
- const newestXstateEvent: StoreMachineStatePersistArgs = {
141
- instanceId: 'OnboardingExpired',
142
- machineName: 'Onboarding',
143
- latestStateName: 'POLICY',
144
- latestEventType: 'SET_PERSONAL_DATA',
145
- updatedCount: 0,
146
- state: 'test_state',
147
- expiresAt: pastExpiresAt, // This event should be already expired
148
- tenantId: 'test_tenant_id',
149
- }
150
-
151
- await store.persistMachineState(oldestXstateEvent)
152
- await store.persistMachineState(middleXstateEvent)
153
- await store.persistMachineState(newestXstateEvent)
154
-
155
- await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toHaveLength(1)
156
-
157
- await store.deleteExpiredMachineStates({})
158
- await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toHaveLength(1)
159
- await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toMatchObject([
160
- {
161
- completedAt: null,
162
- createdAt: expect.anything(),
163
- expiresAt: expect.anything(),
164
- instanceId: 'Onboarding1',
165
- latestEventType: 'SET_POLICY2',
166
- latestStateName: 'TOC',
167
- machineName: 'Onboarding',
168
- state: 'test_state',
169
- tenantId: 'test_tenant_id',
170
- updatedAt: expect.anything(),
171
- },
172
- ])
173
- })
174
- })
1
+ import { DataSource } from 'typeorm'
2
+ import { DataStoreMachineStateEntities, MachineStateStore, StoreMachineStatesFindActiveArgs, StoreMachineStatePersistArgs } from '../index'
3
+ import { DataStoreMachineStateMigrations } from '../migrations'
4
+
5
+ describe('Machine State store tests', (): void => {
6
+ let dbConnection: DataSource
7
+ let store: MachineStateStore
8
+
9
+ beforeEach(async (): Promise<void> => {
10
+ dbConnection = await new DataSource({
11
+ type: 'sqlite',
12
+ database: ':memory:',
13
+ logging: 'all',
14
+ migrationsRun: false,
15
+ migrations: DataStoreMachineStateMigrations,
16
+ synchronize: false,
17
+ entities: DataStoreMachineStateEntities,
18
+ }).initialize()
19
+ await dbConnection.runMigrations()
20
+ expect(await dbConnection.showMigrations()).toBeFalsy()
21
+ store = new MachineStateStore(dbConnection)
22
+ })
23
+
24
+ afterEach(async (): Promise<void> => {
25
+ await dbConnection.destroy()
26
+ })
27
+
28
+ it('should store machine state info', async (): Promise<void> => {
29
+ const persistArgs: StoreMachineStatePersistArgs = {
30
+ instanceId: 'Onboarding1',
31
+ machineName: 'Onboarding',
32
+ updatedCount: 0,
33
+ latestStateName: 'enterPersonalDetails',
34
+ latestEventType: 'SET_PERSONAL_DATA',
35
+ state: 'test_state',
36
+ expiresAt: new Date(new Date().getDate() + 100000),
37
+ tenantId: 'test_tenant_id',
38
+ }
39
+
40
+ const persistMachineStateResult = await store.persistMachineState(persistArgs)
41
+ expect(persistMachineStateResult).toBeDefined()
42
+ })
43
+
44
+ it('should get all machines with their current state', async (): Promise<void> => {
45
+ const persistArgs: StoreMachineStatePersistArgs = {
46
+ instanceId: 'Onboarding1',
47
+ machineName: 'Onboarding',
48
+ latestStateName: 'enterPersonalDetails',
49
+ latestEventType: 'SET_PERSONAL_DATA',
50
+ updatedCount: 0,
51
+ state: 'test_state',
52
+ expiresAt: new Date(new Date().getDate() + 100000),
53
+ tenantId: 'test_tenant_id',
54
+ }
55
+
56
+ const stateEvent1 = await store.persistMachineState({ ...persistArgs })
57
+ expect(stateEvent1).toBeDefined()
58
+
59
+ const stateEvent2 = await store.persistMachineState({ ...persistArgs, instanceId: 'Onboarding2' })
60
+ expect(stateEvent2).toBeDefined()
61
+
62
+ const result = await store.findMachineStates()
63
+ expect(result).toHaveLength(2)
64
+ })
65
+
66
+ it('should retrieve a machine state', async (): Promise<void> => {
67
+ const expiresAt = new Date()
68
+ expiresAt.setTime(expiresAt.getTime() + 100000)
69
+ const persistArgs: StoreMachineStatePersistArgs = {
70
+ instanceId: 'Onboarding1',
71
+ machineName: 'Onboarding',
72
+ latestStateName: 'enterPersonalDetails',
73
+ latestEventType: 'SET_PERSONAL_DATA',
74
+ state: 'test_state',
75
+ updatedCount: 0,
76
+ expiresAt,
77
+ tenantId: 'test_tenant_id',
78
+ }
79
+
80
+ const machineStatePersisted = await store.persistMachineState(persistArgs)
81
+ expect(machineStatePersisted).toBeDefined()
82
+ const result = await store.findActiveMachineStates({ machineName: persistArgs.machineName, tenantId: persistArgs.tenantId })
83
+ expect(result).toBeDefined()
84
+ })
85
+
86
+ it('should delete a machine state', async (): Promise<void> => {
87
+ const persistArgs: StoreMachineStatePersistArgs = {
88
+ instanceId: 'Onboarding1',
89
+ machineName: 'Onboarding',
90
+ updatedCount: 0,
91
+ latestStateName: 'enterPersonalDetails',
92
+ latestEventType: 'SET_PERSONAL_DATA',
93
+ state: 'test_state',
94
+ expiresAt: new Date(new Date().getDate() + 100000),
95
+ tenantId: 'test_tenant_id',
96
+ }
97
+
98
+ const persistedState = await store.persistMachineState(persistArgs)
99
+ expect(persistedState).toBeDefined()
100
+
101
+ const result: boolean = await store.deleteMachineState({ instanceId: persistedState.instanceId })
102
+ expect(result).toBeTruthy()
103
+ })
104
+
105
+ it('should return an error if type filter does not match', async (): Promise<void> => {
106
+ const args: StoreMachineStatesFindActiveArgs = {
107
+ machineName: 'unknown_machine',
108
+ }
109
+
110
+ await expect(store.findActiveMachineStates(args)).resolves.toEqual([])
111
+ })
112
+
113
+ it('should delete the expired records', async () => {
114
+ const futureExpiresAt = new Date()
115
+ futureExpiresAt.setTime(futureExpiresAt.getTime() + 100000) // Future expiration
116
+
117
+ const pastExpiresAt = new Date()
118
+ pastExpiresAt.setTime(pastExpiresAt.getTime() - 100000) // Past expiration, already expired
119
+
120
+ const oldestXstateEvent: StoreMachineStatePersistArgs = {
121
+ instanceId: 'Onboarding1',
122
+ machineName: 'Onboarding',
123
+ latestStateName: 'enterPersonalDetails',
124
+ latestEventType: 'SET_TOC',
125
+ updatedCount: 0,
126
+ state: 'test_state',
127
+ expiresAt: futureExpiresAt,
128
+ tenantId: 'test_tenant_id',
129
+ }
130
+ const middleXstateEvent: StoreMachineStatePersistArgs = {
131
+ instanceId: 'Onboarding1',
132
+ machineName: 'Onboarding',
133
+ latestStateName: 'TOC',
134
+ latestEventType: 'SET_POLICY2',
135
+ updatedCount: 1,
136
+ state: 'test_state',
137
+ expiresAt: futureExpiresAt,
138
+ tenantId: 'test_tenant_id',
139
+ }
140
+ const newestXstateEvent: StoreMachineStatePersistArgs = {
141
+ instanceId: 'OnboardingExpired',
142
+ machineName: 'Onboarding',
143
+ latestStateName: 'POLICY',
144
+ latestEventType: 'SET_PERSONAL_DATA',
145
+ updatedCount: 0,
146
+ state: 'test_state',
147
+ expiresAt: pastExpiresAt, // This event should be already expired
148
+ tenantId: 'test_tenant_id',
149
+ }
150
+
151
+ await store.persistMachineState(oldestXstateEvent)
152
+ await store.persistMachineState(middleXstateEvent)
153
+ await store.persistMachineState(newestXstateEvent)
154
+
155
+ await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toHaveLength(1)
156
+
157
+ await store.deleteExpiredMachineStates({})
158
+ await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toHaveLength(1)
159
+ await expect(store.findActiveMachineStates({ machineName: 'Onboarding' })).resolves.toMatchObject([
160
+ {
161
+ completedAt: null,
162
+ createdAt: expect.anything(),
163
+ expiresAt: expect.anything(),
164
+ instanceId: 'Onboarding1',
165
+ latestEventType: 'SET_POLICY2',
166
+ latestStateName: 'TOC',
167
+ machineName: 'Onboarding',
168
+ state: 'test_state',
169
+ tenantId: 'test_tenant_id',
170
+ updatedAt: expect.anything(),
171
+ },
172
+ ])
173
+ })
174
+ })
@@ -1,71 +1,71 @@
1
- import {
2
- AddElectronicAddressArgs,
3
- AddIdentityArgs,
4
- AddPartyArgs,
5
- AddPartyTypeArgs,
6
- AddPhysicalAddressArgs,
7
- AddRelationshipArgs,
8
- ElectronicAddress,
9
- GetElectronicAddressArgs,
10
- GetElectronicAddressesArgs,
11
- GetIdentitiesArgs,
12
- GetIdentityArgs,
13
- GetPartiesArgs,
14
- GetPartyArgs,
15
- GetPartyTypeArgs,
16
- GetPartyTypesArgs,
17
- GetPhysicalAddressArgs,
18
- GetPhysicalAddressesArgs,
19
- GetRelationshipArgs,
20
- GetRelationshipsArgs,
21
- Identity,
22
- Party,
23
- PartyRelationship,
24
- PartyType,
25
- PhysicalAddress,
26
- RemoveElectronicAddressArgs,
27
- RemoveIdentityArgs,
28
- RemovePartyArgs,
29
- RemovePartyTypeArgs,
30
- RemovePhysicalAddressArgs,
31
- RemoveRelationshipArgs,
32
- UpdateElectronicAddressArgs,
33
- UpdateIdentityArgs,
34
- UpdatePartyArgs,
35
- UpdatePartyTypeArgs,
36
- UpdatePhysicalAddressArgs,
37
- UpdateRelationshipArgs,
38
- } from '../types'
39
-
40
- export abstract class AbstractContactStore {
41
- abstract getParty(args: GetPartyArgs): Promise<Party>
42
- abstract getParties(args?: GetPartiesArgs): Promise<Array<Party>>
43
- abstract addParty(args: AddPartyArgs): Promise<Party>
44
- abstract updateParty(args: UpdatePartyArgs): Promise<Party>
45
- abstract removeParty(args: RemovePartyArgs): Promise<void>
46
- abstract getIdentity(args: GetIdentityArgs): Promise<Identity>
47
- abstract getIdentities(args?: GetIdentitiesArgs): Promise<Array<Identity>>
48
- abstract addIdentity(args: AddIdentityArgs): Promise<Identity>
49
- abstract updateIdentity(args: UpdateIdentityArgs): Promise<Identity>
50
- abstract removeIdentity(args: RemoveIdentityArgs): Promise<void>
51
- abstract getRelationship(args: GetRelationshipArgs): Promise<PartyRelationship>
52
- abstract getRelationships(args?: GetRelationshipsArgs): Promise<Array<PartyRelationship>>
53
- abstract addRelationship(args: AddRelationshipArgs): Promise<PartyRelationship>
54
- abstract updateRelationship(args: UpdateRelationshipArgs): Promise<PartyRelationship>
55
- abstract removeRelationship(args: RemoveRelationshipArgs): Promise<void>
56
- abstract getPartyType(args: GetPartyTypeArgs): Promise<PartyType>
57
- abstract getPartyTypes(args?: GetPartyTypesArgs): Promise<Array<PartyType>>
58
- abstract addPartyType(args: AddPartyTypeArgs): Promise<PartyType>
59
- abstract updatePartyType(args: UpdatePartyTypeArgs): Promise<PartyType>
60
- abstract removePartyType(args: RemovePartyTypeArgs): Promise<void>
61
- abstract getElectronicAddress(args: GetElectronicAddressArgs): Promise<ElectronicAddress>
62
- abstract getElectronicAddresses(args?: GetElectronicAddressesArgs): Promise<Array<ElectronicAddress>>
63
- abstract addElectronicAddress(args: AddElectronicAddressArgs): Promise<ElectronicAddress>
64
- abstract updateElectronicAddress(args: UpdateElectronicAddressArgs): Promise<ElectronicAddress>
65
- abstract removeElectronicAddress(args: RemoveElectronicAddressArgs): Promise<void>
66
- abstract getPhysicalAddress(args: GetPhysicalAddressArgs): Promise<PhysicalAddress>
67
- abstract getPhysicalAddresses(args?: GetPhysicalAddressesArgs): Promise<Array<PhysicalAddress>>
68
- abstract addPhysicalAddress(args: AddPhysicalAddressArgs): Promise<PhysicalAddress>
69
- abstract updatePhysicalAddress(args: UpdatePhysicalAddressArgs): Promise<PhysicalAddress>
70
- abstract removePhysicalAddress(args: RemovePhysicalAddressArgs): Promise<void>
71
- }
1
+ import {
2
+ AddElectronicAddressArgs,
3
+ AddIdentityArgs,
4
+ AddPartyArgs,
5
+ AddPartyTypeArgs,
6
+ AddPhysicalAddressArgs,
7
+ AddRelationshipArgs,
8
+ ElectronicAddress,
9
+ GetElectronicAddressArgs,
10
+ GetElectronicAddressesArgs,
11
+ GetIdentitiesArgs,
12
+ GetIdentityArgs,
13
+ GetPartiesArgs,
14
+ GetPartyArgs,
15
+ GetPartyTypeArgs,
16
+ GetPartyTypesArgs,
17
+ GetPhysicalAddressArgs,
18
+ GetPhysicalAddressesArgs,
19
+ GetRelationshipArgs,
20
+ GetRelationshipsArgs,
21
+ Identity,
22
+ Party,
23
+ PartyRelationship,
24
+ PartyType,
25
+ PhysicalAddress,
26
+ RemoveElectronicAddressArgs,
27
+ RemoveIdentityArgs,
28
+ RemovePartyArgs,
29
+ RemovePartyTypeArgs,
30
+ RemovePhysicalAddressArgs,
31
+ RemoveRelationshipArgs,
32
+ UpdateElectronicAddressArgs,
33
+ UpdateIdentityArgs,
34
+ UpdatePartyArgs,
35
+ UpdatePartyTypeArgs,
36
+ UpdatePhysicalAddressArgs,
37
+ UpdateRelationshipArgs,
38
+ } from '../types'
39
+
40
+ export abstract class AbstractContactStore {
41
+ abstract getParty(args: GetPartyArgs): Promise<Party>
42
+ abstract getParties(args?: GetPartiesArgs): Promise<Array<Party>>
43
+ abstract addParty(args: AddPartyArgs): Promise<Party>
44
+ abstract updateParty(args: UpdatePartyArgs): Promise<Party>
45
+ abstract removeParty(args: RemovePartyArgs): Promise<void>
46
+ abstract getIdentity(args: GetIdentityArgs): Promise<Identity>
47
+ abstract getIdentities(args?: GetIdentitiesArgs): Promise<Array<Identity>>
48
+ abstract addIdentity(args: AddIdentityArgs): Promise<Identity>
49
+ abstract updateIdentity(args: UpdateIdentityArgs): Promise<Identity>
50
+ abstract removeIdentity(args: RemoveIdentityArgs): Promise<void>
51
+ abstract getRelationship(args: GetRelationshipArgs): Promise<PartyRelationship>
52
+ abstract getRelationships(args?: GetRelationshipsArgs): Promise<Array<PartyRelationship>>
53
+ abstract addRelationship(args: AddRelationshipArgs): Promise<PartyRelationship>
54
+ abstract updateRelationship(args: UpdateRelationshipArgs): Promise<PartyRelationship>
55
+ abstract removeRelationship(args: RemoveRelationshipArgs): Promise<void>
56
+ abstract getPartyType(args: GetPartyTypeArgs): Promise<PartyType>
57
+ abstract getPartyTypes(args?: GetPartyTypesArgs): Promise<Array<PartyType>>
58
+ abstract addPartyType(args: AddPartyTypeArgs): Promise<PartyType>
59
+ abstract updatePartyType(args: UpdatePartyTypeArgs): Promise<PartyType>
60
+ abstract removePartyType(args: RemovePartyTypeArgs): Promise<void>
61
+ abstract getElectronicAddress(args: GetElectronicAddressArgs): Promise<ElectronicAddress>
62
+ abstract getElectronicAddresses(args?: GetElectronicAddressesArgs): Promise<Array<ElectronicAddress>>
63
+ abstract addElectronicAddress(args: AddElectronicAddressArgs): Promise<ElectronicAddress>
64
+ abstract updateElectronicAddress(args: UpdateElectronicAddressArgs): Promise<ElectronicAddress>
65
+ abstract removeElectronicAddress(args: RemoveElectronicAddressArgs): Promise<void>
66
+ abstract getPhysicalAddress(args: GetPhysicalAddressArgs): Promise<PhysicalAddress>
67
+ abstract getPhysicalAddresses(args?: GetPhysicalAddressesArgs): Promise<Array<PhysicalAddress>>
68
+ abstract addPhysicalAddress(args: AddPhysicalAddressArgs): Promise<PhysicalAddress>
69
+ abstract updatePhysicalAddress(args: UpdatePhysicalAddressArgs): Promise<PhysicalAddress>
70
+ abstract removePhysicalAddress(args: RemovePhysicalAddressArgs): Promise<void>
71
+ }