@sphereon/ssi-sdk.vc-status-list-issuer-drivers 0.34.1-next.3 → 0.34.1-next.323

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.js CHANGED
@@ -4,18 +4,17 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  // src/drivers.ts
5
5
  import { DataSources } from "@sphereon/ssi-sdk.agent-config";
6
6
  import { StatusListStore } from "@sphereon/ssi-sdk.data-store";
7
- import { statusListCredentialToDetails } from "@sphereon/ssi-sdk.vc-status-list";
7
+ import { createCredentialStatusFromStatusList, extractCredentialDetails, toStatusListDetails } from "@sphereon/ssi-sdk.vc-status-list";
8
8
  import { StatusListCredentialIdMode, StatusListDriverType } from "@sphereon/ssi-types";
9
9
 
10
10
  // src/status-list-adapters.ts
11
11
  import { StatusListType } from "@sphereon/ssi-types";
12
- import { OAuthStatusListEntity, StatusList2021Entity } from "@sphereon/ssi-sdk.data-store";
12
+ import { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity } from "@sphereon/ssi-sdk.data-store";
13
13
  function statusListResultToEntity(result) {
14
14
  const baseFields = {
15
15
  id: result.id,
16
16
  correlationId: result.correlationId,
17
17
  driverType: result.driverType,
18
- credentialIdMode: result.credentialIdMode,
19
18
  length: result.length,
20
19
  issuer: result.issuer,
21
20
  type: result.type,
@@ -26,27 +25,42 @@ function statusListResultToEntity(result) {
26
25
  if (!result.statusList2021) {
27
26
  throw new Error("Missing statusList2021 details");
28
27
  }
29
- return Object.assign(new StatusList2021Entity(), {
30
- ...baseFields,
28
+ const entity = new StatusList2021Entity();
29
+ Object.assign(entity, baseFields, {
31
30
  indexingDirection: result.statusList2021.indexingDirection,
32
- statusPurpose: result.statusList2021.statusPurpose
31
+ statusPurpose: result.statusList2021.statusPurpose,
32
+ credentialIdMode: result.statusList2021.credentialIdMode
33
33
  });
34
+ return entity;
34
35
  } else if (result.type === StatusListType.OAuthStatusList) {
35
36
  if (!result.oauthStatusList) {
36
37
  throw new Error("Missing oauthStatusList details");
37
38
  }
38
- return Object.assign(new OAuthStatusListEntity(), {
39
- ...baseFields,
39
+ const entity = new OAuthStatusListEntity();
40
+ Object.assign(entity, baseFields, {
40
41
  bitsPerStatus: result.oauthStatusList.bitsPerStatus,
41
42
  expiresAt: result.oauthStatusList.expiresAt
42
43
  });
44
+ return entity;
45
+ } else if (result.type === StatusListType.BitstringStatusList) {
46
+ if (!result.bitstringStatusList) {
47
+ throw new Error("Missing bitstringStatusList details");
48
+ }
49
+ const entity = new BitstringStatusListEntity();
50
+ Object.assign(entity, baseFields, {
51
+ statusPurpose: result.bitstringStatusList.statusPurpose,
52
+ ttl: result.bitstringStatusList.ttl,
53
+ bitsPerStatus: result.bitstringStatusList.bitsPerStatus,
54
+ validFrom: result.bitstringStatusList.validFrom,
55
+ validUntil: result.bitstringStatusList.validUntil
56
+ });
57
+ return entity;
43
58
  }
44
59
  throw new Error(`Unsupported status list type: ${result.type}`);
45
60
  }
46
61
  __name(statusListResultToEntity, "statusListResultToEntity");
47
62
 
48
63
  // src/drivers.ts
49
- import { OAuthStatusListEntity as OAuthStatusListEntity2, StatusList2021Entity as StatusList2021Entity2 } from "@sphereon/ssi-sdk.data-store";
50
64
  function getOptions(args) {
51
65
  return {
52
66
  id: args.id,
@@ -81,11 +95,23 @@ var AgentDataSourceStatusListDriver = class _AgentDataSourceStatusListDriver {
81
95
  _statusListStore;
82
96
  options;
83
97
  _statusListLength;
98
+ /**
99
+ * Creates a new AgentDataSourceStatusListDriver instance
100
+ * @param _dataSource - TypeORM DataSource for database operations
101
+ * @param _statusListStore - StatusListStore for data persistence
102
+ * @param options - Driver configuration options
103
+ */
84
104
  constructor(_dataSource, _statusListStore, options) {
85
105
  this._dataSource = _dataSource;
86
106
  this._statusListStore = _statusListStore;
87
107
  this.options = options;
88
108
  }
109
+ /**
110
+ * Initializes and creates a new AgentDataSourceStatusListDriver instance
111
+ * @param options - Status list management configuration
112
+ * @param dbArgs - Database connection arguments
113
+ * @returns Promise resolving to initialized driver instance
114
+ */
89
115
  static async init(options, dbArgs) {
90
116
  if (options.driverType !== StatusListDriverType.AGENT_TYPEORM) {
91
117
  throw Error(`TypeORM driver can only be used when the TypeORM driver type is selected in the configuration. Got: ${options.driverType}`);
@@ -108,76 +134,105 @@ var AgentDataSourceStatusListDriver = class _AgentDataSourceStatusListDriver {
108
134
  statusListStore = new StatusListStore(dataSource);
109
135
  return new _AgentDataSourceStatusListDriver(dataSource, statusListStore, options);
110
136
  }
137
+ /**
138
+ * Gets the TypeORM DataSource instance
139
+ * @returns DataSource instance for database operations
140
+ */
111
141
  get dataSource() {
112
142
  if (!this._dataSource) {
113
143
  throw Error(`Datasource not available yet for ${this.options.driverOptions?.dbName}`);
114
144
  }
115
145
  return this._dataSource;
116
146
  }
147
+ /**
148
+ * Gets the StatusListStore instance
149
+ * @returns StatusListStore for data persistence operations
150
+ */
117
151
  get statusListStore() {
118
152
  if (!this._statusListStore) {
119
153
  this._statusListStore = new StatusListStore(this.dataSource);
120
154
  }
121
155
  return this._statusListStore;
122
156
  }
157
+ /**
158
+ * Gets the driver configuration options
159
+ * @returns DriverOptions configuration
160
+ */
123
161
  getOptions() {
124
162
  return this.options.driverOptions ?? {};
125
163
  }
164
+ /**
165
+ * Gets the driver type
166
+ * @returns StatusListDriverType enum value
167
+ */
126
168
  getType() {
127
169
  return this.options.driverType;
128
170
  }
171
+ /**
172
+ * Creates a new status list credential and stores it in the database
173
+ * @param args - Status list creation parameters
174
+ * @returns Promise resolving to StatusListResult
175
+ */
129
176
  async createStatusList(args) {
130
177
  const correlationId = args.correlationId ?? this.options.correlationId;
131
178
  if (!correlationId) {
132
179
  throw Error("Either a correlationId needs to be set as an option, or it needs to be provided when creating a status list. None found");
133
180
  }
134
181
  const credentialIdMode = args.credentialIdMode ?? StatusListCredentialIdMode.ISSUANCE;
135
- const details = await statusListCredentialToDetails({
136
- ...args,
182
+ const implementationResult = await toStatusListDetails({
183
+ statusListCredential: args.statusListCredential,
184
+ statusListType: args.statusListType,
185
+ bitsPerStatus: args.bitsPerStatus,
137
186
  correlationId,
138
187
  driverType: this.getType()
139
188
  });
140
- await this.statusListStore.addStatusList({
141
- ...details,
189
+ const statusListArgs = {
190
+ ...implementationResult,
142
191
  credentialIdMode,
143
192
  correlationId,
144
193
  driverType: this.getType()
145
- });
146
- this._statusListLength = details.length;
147
- return details;
194
+ };
195
+ await this.statusListStore.addStatusList(statusListArgs);
196
+ this._statusListLength = implementationResult.length;
197
+ return implementationResult;
148
198
  }
199
+ /**
200
+ * Updates an existing status list credential in the database
201
+ * @param args - Status list update parameters
202
+ * @returns Promise resolving to StatusListResult
203
+ */
149
204
  async updateStatusList(args) {
150
205
  const correlationId = args.correlationId ?? this.options.correlationId;
151
- const details = await statusListCredentialToDetails({
152
- ...args,
153
- correlationId,
154
- driverType: this.getType()
155
- });
156
- const entity = await (await this.statusListStore.getStatusListRepo(args.type)).findOne({
157
- where: [
158
- {
159
- id: details.id
160
- },
161
- {
162
- correlationId
163
- }
164
- ]
206
+ const extractedDetails = await extractCredentialDetails(args.statusListCredential);
207
+ const entity = await this.statusListStore.getStatusList({
208
+ id: extractedDetails.id,
209
+ correlationId
165
210
  });
166
211
  if (!entity) {
167
- throw Error(`Status list ${details.id}, correlationId ${args.correlationId} could not be found`);
212
+ throw Error(`Status list ${extractedDetails.id}, correlationId ${correlationId} could not be found`);
168
213
  }
169
- await this.statusListStore.updateStatusList({
214
+ entity.statusListCredential = args.statusListCredential;
215
+ const details = await toStatusListDetails({
216
+ extractedDetails,
217
+ statusListEntity: entity
218
+ });
219
+ const updateArgs = {
170
220
  ...entity,
171
221
  ...details,
172
222
  correlationId,
173
223
  driverType: this.getType()
174
- });
224
+ };
225
+ await this.statusListStore.updateStatusList(updateArgs);
175
226
  this._statusListLength = details.length;
176
227
  return {
177
228
  ...entity,
178
229
  ...details
179
230
  };
180
231
  }
232
+ /**
233
+ * Deletes the status list from the database
234
+ * @returns Promise resolving to boolean indicating success
235
+ */
181
236
  async deleteStatusList() {
182
237
  await this.statusListStore.removeStatusList({
183
238
  id: this.options.id,
@@ -185,50 +240,48 @@ var AgentDataSourceStatusListDriver = class _AgentDataSourceStatusListDriver {
185
240
  });
186
241
  return Promise.resolve(true);
187
242
  }
188
- isStatusList2021Entity(statusList) {
189
- return statusList instanceof StatusList2021Entity2;
190
- }
191
- isOAuthStatusListEntity(statusList) {
192
- return statusList instanceof OAuthStatusListEntity2;
193
- }
243
+ /**
244
+ * Updates a status list entry and returns the credential status
245
+ * @param args - Status list entry update parameters
246
+ * @returns Promise resolving to credential status and entry
247
+ */
194
248
  async updateStatusListEntry(args) {
195
- const statusList = args.statusList ? args.statusList : statusListResultToEntity(await this.getStatusList());
249
+ const statusListEntity = statusListResultToEntity(await this.getStatusList());
196
250
  const statusListEntry = await this.statusListStore.updateStatusListEntry({
197
251
  ...args,
198
- statusListId: statusList.id
252
+ statusListId: statusListEntity.id
199
253
  });
200
- if (this.isStatusList2021Entity(statusList)) {
201
- return {
202
- credentialStatus: {
203
- id: `${statusList.id}#${statusListEntry.statusListIndex}`,
204
- type: "StatusList2021Entry",
205
- statusPurpose: statusList.statusPurpose ?? "revocation",
206
- statusListIndex: "" + statusListEntry.statusListIndex,
207
- statusListCredential: statusList.id
208
- },
209
- statusListEntry
210
- };
211
- } else if (this.isOAuthStatusListEntity(statusList)) {
212
- return {
213
- credentialStatus: {
214
- id: `${statusList.id}#${statusListEntry.statusListIndex}`,
215
- type: "OAuthStatusListEntry",
216
- bitsPerStatus: statusList.bitsPerStatus,
217
- statusListIndex: "" + statusListEntry.statusListIndex,
218
- statusListCredential: statusList.id,
219
- expiresAt: statusList.expiresAt
220
- },
221
- statusListEntry
222
- };
223
- }
224
- throw new Error(`Unsupported status list type: ${typeof statusList}`);
254
+ const credentialStatus = await createCredentialStatusFromStatusList({
255
+ statusList: statusListEntity,
256
+ statusListEntry,
257
+ statusListIndex: statusListEntry.statusListIndex
258
+ });
259
+ return {
260
+ credentialStatus,
261
+ statusListEntry
262
+ };
225
263
  }
264
+ /**
265
+ * Retrieves a status list entry by credential ID
266
+ * @param args - Query parameters including credential ID
267
+ * @returns Promise resolving to status list entry or undefined
268
+ */
226
269
  async getStatusListEntryByCredentialId(args) {
227
270
  return await this.statusListStore.getStatusListEntryByCredentialId(args);
228
271
  }
272
+ /**
273
+ * Retrieves a status list entry by index
274
+ * @param args - Query parameters including status list index
275
+ * @returns Promise resolving to status list entry or undefined
276
+ */
229
277
  async getStatusListEntryByIndex(args) {
230
278
  return await this.statusListStore.getStatusListEntryByIndex(args);
231
279
  }
280
+ /**
281
+ * Generates a random available index for new status list entries
282
+ * @param args - Optional correlation ID parameter
283
+ * @returns Promise resolving to available index number
284
+ */
232
285
  async getRandomNewStatusListIndex(args) {
233
286
  let result = -1;
234
287
  let tries = 0;
@@ -237,6 +290,12 @@ var AgentDataSourceStatusListDriver = class _AgentDataSourceStatusListDriver {
237
290
  }
238
291
  return result;
239
292
  }
293
+ /**
294
+ * Implementation for generating random status list indices with retry logic
295
+ * @param tries - Number of attempts made
296
+ * @param args - Optional correlation ID parameter
297
+ * @returns Promise resolving to available index or -1 if none found
298
+ */
240
299
  async getRandomNewStatusListIndexImpl(tries, args) {
241
300
  const statusListId = this.options.id;
242
301
  const correlationId = args?.correlationId ?? this.options.correlationId;
@@ -259,30 +318,57 @@ var AgentDataSourceStatusListDriver = class _AgentDataSourceStatusListDriver {
259
318
  }
260
319
  return -1;
261
320
  }
321
+ /**
322
+ * Gets the length of the status list
323
+ * @param args - Optional correlation ID parameter
324
+ * @returns Promise resolving to status list length
325
+ */
262
326
  async getStatusListLength(args) {
263
327
  if (!this._statusListLength) {
264
328
  this._statusListLength = await this.getStatusList(args).then((details) => details.length);
265
329
  }
266
330
  return this._statusListLength;
267
331
  }
332
+ /**
333
+ * Retrieves the status list details
334
+ * @param args - Optional correlation ID parameter
335
+ * @returns Promise resolving to StatusListResult
336
+ */
268
337
  async getStatusList(args) {
269
338
  const id = this.options.id;
270
339
  const correlationId = args?.correlationId ?? this.options.correlationId;
271
- return await this.statusListStore.getStatusList({
340
+ const statusListEntity = await this.statusListStore.getStatusList({
272
341
  id,
273
342
  correlationId
274
- }).then((statusListEntity) => statusListCredentialToDetails({
275
- statusListCredential: statusListEntity.statusListCredential
276
- }));
343
+ });
344
+ return await toStatusListDetails({
345
+ statusListCredential: statusListEntity.statusListCredential,
346
+ statusListType: statusListEntity.type,
347
+ bitsPerStatus: statusListEntity.bitsPerStatus,
348
+ correlationId: statusListEntity.correlationId,
349
+ driverType: statusListEntity.driverType
350
+ });
277
351
  }
352
+ /**
353
+ * Retrieves all status lists
354
+ * @returns Promise resolving to array of StatusListResult
355
+ */
278
356
  async getStatusLists() {
279
357
  const statusLists = await this.statusListStore.getStatusLists({});
280
358
  return Promise.all(statusLists.map(async (statusListEntity) => {
281
- return statusListCredentialToDetails({
282
- statusListCredential: statusListEntity.statusListCredential
359
+ return toStatusListDetails({
360
+ statusListCredential: statusListEntity.statusListCredential,
361
+ statusListType: statusListEntity.type,
362
+ bitsPerStatus: statusListEntity.bitsPerStatus,
363
+ correlationId: statusListEntity.correlationId,
364
+ driverType: statusListEntity.driverType
283
365
  });
284
366
  }));
285
367
  }
368
+ /**
369
+ * Checks if a status list index is currently in use
370
+ * @returns Promise resolving to boolean indicating usage status
371
+ */
286
372
  isStatusListIndexInUse() {
287
373
  return Promise.resolve(false);
288
374
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/drivers.ts","../src/status-list-adapters.ts"],"sourcesContent":["import { DataSources } from '@sphereon/ssi-sdk.agent-config'\nimport {\n IAddStatusListEntryArgs,\n IGetStatusListEntryByCredentialIdArgs,\n IGetStatusListEntryByIndexArgs,\n IStatusListEntity,\n IStatusListEntryEntity,\n StatusListEntity,\n StatusListStore,\n} from '@sphereon/ssi-sdk.data-store'\nimport {\n StatusList2021EntryCredentialStatus,\n statusListCredentialToDetails,\n StatusListOAuthEntryCredentialStatus,\n StatusListResult,\n} from '@sphereon/ssi-sdk.vc-status-list'\nimport { StatusListCredentialIdMode, StatusListDriverType, StatusListType, StatusListCredential } from '@sphereon/ssi-types'\nimport { DataSource } from 'typeorm'\nimport { IStatusListDriver } from './types'\nimport { statusListResultToEntity } from './status-list-adapters'\nimport { OAuthStatusListEntity, StatusList2021Entity } from '@sphereon/ssi-sdk.data-store'\n\nexport interface StatusListManagementOptions {\n id?: string\n correlationId?: string\n driverType: StatusListDriverType\n driverOptions?: DriverOptions\n}\n\nexport type DriverOptions = TypeORMOptions\n\nexport interface TypeORMOptions {\n dbName?: string\n}\n\nexport interface FilesystemOptions {\n path: string // The base path where statusList Credentials will be persisted. Should be a folder and thus not include the VC/StatusList itself\n}\n\nexport function getOptions(args: { id?: string; correlationId?: string; dbName: string }): StatusListManagementOptions {\n return {\n id: args.id,\n correlationId: args.correlationId,\n driverType: StatusListDriverType.AGENT_TYPEORM,\n driverOptions: { dbName: args.dbName },\n }\n}\n\nexport async function getDriver(args: {\n id?: string\n correlationId?: string\n dbName?: string\n dataSource?: DataSource\n dataSources?: DataSources\n}): Promise<IStatusListDriver> {\n const dbName = args.dbName ?? args.dataSource?.name\n if (!dbName) {\n throw Error(`Please provide either a DB name or data source`)\n }\n const dataSources = args.dataSources ?? DataSources.singleInstance()\n return await AgentDataSourceStatusListDriver.init(\n getOptions({\n ...args,\n dbName,\n }),\n { dataSource: args.dataSource ?? (await dataSources.getDbConnection(dbName)), dataSources },\n )\n}\n\nexport class AgentDataSourceStatusListDriver implements IStatusListDriver {\n private _statusListLength: number | undefined\n\n constructor(\n private _dataSource: DataSource,\n private _statusListStore: StatusListStore,\n private options: StatusListManagementOptions,\n ) {}\n\n public static async init(\n options: StatusListManagementOptions,\n dbArgs?: {\n dataSources?: DataSources\n dataSource?: DataSource\n },\n ): Promise<AgentDataSourceStatusListDriver> {\n if (options.driverType !== StatusListDriverType.AGENT_TYPEORM) {\n throw Error(`TypeORM driver can only be used when the TypeORM driver type is selected in the configuration. Got: ${options.driverType}`)\n } else if (!options.driverOptions) {\n throw Error(`TypeORM driver can only be used when the TypeORM options are provided.`)\n }\n let dataSource: DataSource\n let statusListStore: StatusListStore\n if (dbArgs?.dataSource) {\n dataSource = dbArgs.dataSource\n } else if (options.driverOptions.dbName) {\n if (dbArgs?.dataSources) {\n dataSource = await dbArgs.dataSources.getDbConnection(options.driverOptions.dbName)\n } else {\n dataSource = await DataSources.singleInstance().getDbConnection(options.driverOptions.dbName)\n }\n } else {\n return Promise.reject(Error(`Either a datasource or dbName needs to be provided`))\n }\n\n statusListStore = new StatusListStore(dataSource)\n return new AgentDataSourceStatusListDriver(dataSource, statusListStore, options)\n }\n\n get dataSource(): DataSource {\n if (!this._dataSource) {\n throw Error(`Datasource not available yet for ${this.options.driverOptions?.dbName}`)\n }\n return this._dataSource\n }\n\n get statusListStore(): StatusListStore {\n if (!this._statusListStore) {\n this._statusListStore = new StatusListStore(this.dataSource)\n }\n return this._statusListStore\n }\n\n getOptions(): DriverOptions {\n return this.options.driverOptions ?? {}\n }\n\n getType(): StatusListDriverType {\n return this.options.driverType\n }\n\n async createStatusList(args: {\n statusListCredential: StatusListCredential\n correlationId?: string\n credentialIdMode?: StatusListCredentialIdMode\n }): Promise<StatusListResult> {\n const correlationId = args.correlationId ?? this.options.correlationId\n if (!correlationId) {\n throw Error('Either a correlationId needs to be set as an option, or it needs to be provided when creating a status list. None found')\n }\n const credentialIdMode = args.credentialIdMode ?? StatusListCredentialIdMode.ISSUANCE\n const details = await statusListCredentialToDetails({ ...args, correlationId, driverType: this.getType() })\n\n // (StatusListStore does the duplicate entity check)\n await this.statusListStore.addStatusList({\n ...details,\n credentialIdMode,\n correlationId,\n driverType: this.getType(),\n })\n this._statusListLength = details.length\n return details\n }\n\n async updateStatusList(args: {\n statusListCredential: StatusListCredential\n correlationId: string\n type: StatusListType\n }): Promise<StatusListResult> {\n const correlationId = args.correlationId ?? this.options.correlationId\n const details = await statusListCredentialToDetails({ ...args, correlationId, driverType: this.getType() })\n const entity = await (\n await this.statusListStore.getStatusListRepo(args.type)\n ).findOne({\n where: [\n {\n id: details.id,\n },\n {\n correlationId,\n },\n ],\n })\n if (!entity) {\n throw Error(`Status list ${details.id}, correlationId ${args.correlationId} could not be found`)\n }\n await this.statusListStore.updateStatusList({\n ...entity,\n ...details,\n correlationId,\n driverType: this.getType(),\n })\n this._statusListLength = details.length\n return { ...entity, ...details }\n }\n\n async deleteStatusList(): Promise<boolean> {\n await this.statusListStore.removeStatusList({ id: this.options.id, correlationId: this.options.correlationId })\n return Promise.resolve(true)\n }\n\n private isStatusList2021Entity(statusList: StatusListEntity): statusList is StatusList2021Entity {\n return statusList instanceof StatusList2021Entity\n }\n\n private isOAuthStatusListEntity(statusList: StatusListEntity): statusList is OAuthStatusListEntity {\n return statusList instanceof OAuthStatusListEntity\n }\n\n async updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<{\n credentialStatus: StatusList2021EntryCredentialStatus | StatusListOAuthEntryCredentialStatus\n statusListEntry: IStatusListEntryEntity\n }> {\n const statusList: StatusListEntity = args.statusList ? args.statusList : statusListResultToEntity(await this.getStatusList())\n const statusListEntry = await this.statusListStore.updateStatusListEntry({ ...args, statusListId: statusList.id })\n\n if (this.isStatusList2021Entity(statusList)) {\n return {\n credentialStatus: {\n id: `${statusList.id}#${statusListEntry.statusListIndex}`,\n type: 'StatusList2021Entry',\n statusPurpose: statusList.statusPurpose ?? 'revocation',\n statusListIndex: '' + statusListEntry.statusListIndex,\n statusListCredential: statusList.id,\n },\n statusListEntry,\n }\n } else if (this.isOAuthStatusListEntity(statusList)) {\n return {\n credentialStatus: {\n id: `${statusList.id}#${statusListEntry.statusListIndex}`,\n type: 'OAuthStatusListEntry',\n bitsPerStatus: statusList.bitsPerStatus,\n statusListIndex: '' + statusListEntry.statusListIndex,\n statusListCredential: statusList.id,\n expiresAt: statusList.expiresAt,\n },\n statusListEntry,\n }\n }\n\n throw new Error(`Unsupported status list type: ${typeof statusList}`)\n }\n\n async getStatusListEntryByCredentialId(args: IGetStatusListEntryByCredentialIdArgs): Promise<IStatusListEntryEntity | undefined> {\n return await this.statusListStore.getStatusListEntryByCredentialId(args)\n }\n\n async getStatusListEntryByIndex(args: IGetStatusListEntryByIndexArgs): Promise<IStatusListEntryEntity | undefined> {\n return await this.statusListStore.getStatusListEntryByIndex(args)\n }\n\n async getRandomNewStatusListIndex(args?: { correlationId?: string }): Promise<number> {\n let result = -1\n let tries = 0\n while (result < 0) {\n // no tries guard, because we will throw an error when they are exhausted anyway\n result = await this.getRandomNewStatusListIndexImpl(tries++, args)\n }\n return result\n }\n\n private async getRandomNewStatusListIndexImpl(tries: number, args?: { correlationId?: string }): Promise<number> {\n const statusListId = this.options.id\n const correlationId = args?.correlationId ?? this.options.correlationId\n if (tries >= 10) {\n throw Error(`We could not find any random status list index that is available in the statuslist ${statusListId}`)\n }\n // TODO: Check against DB\n const length = await this.getStatusListLength(args)\n const statusListIndex = Array.from({ length: 20 }, () => Math.floor(Math.random() * length))\n const available = await this.statusListStore.availableStatusListEntries({\n statusListId,\n ...(correlationId && { correlationId }),\n statusListIndex,\n })\n if (available.length > 0) {\n return available[0] // doesn't matter we pick the first element, as they are all random anyway\n }\n return -1\n }\n\n async getStatusListLength(args?: { correlationId?: string }): Promise<number> {\n if (!this._statusListLength) {\n this._statusListLength = await this.getStatusList(args).then((details) => details.length)\n }\n return this._statusListLength!\n }\n\n async getStatusList(args?: { correlationId?: string }): Promise<StatusListResult> {\n const id = this.options.id\n const correlationId = args?.correlationId ?? this.options.correlationId\n return await this.statusListStore\n .getStatusList({ id, correlationId })\n .then((statusListEntity: IStatusListEntity) => statusListCredentialToDetails({ statusListCredential: statusListEntity.statusListCredential! }))\n }\n\n async getStatusLists(): Promise<Array<StatusListResult>> {\n const statusLists = await this.statusListStore.getStatusLists({})\n return Promise.all(\n statusLists.map(async (statusListEntity) => {\n return statusListCredentialToDetails({\n statusListCredential: statusListEntity.statusListCredential!,\n })\n }),\n )\n }\n\n isStatusListIndexInUse(): Promise<boolean> {\n return Promise.resolve(false)\n }\n}\n","import { StatusListType } from '@sphereon/ssi-types'\nimport { OAuthStatusListEntity, StatusList2021Entity } from '@sphereon/ssi-sdk.data-store'\nimport { StatusListResult } from '@sphereon/ssi-sdk.vc-status-list'\n\nexport function statusListResultToEntity(result: StatusListResult): StatusList2021Entity | OAuthStatusListEntity {\n const baseFields = {\n id: result.id,\n correlationId: result.correlationId,\n driverType: result.driverType,\n credentialIdMode: result.credentialIdMode,\n length: result.length,\n issuer: result.issuer,\n type: result.type,\n proofFormat: result.proofFormat,\n statusListCredential: result.statusListCredential,\n }\n\n if (result.type === StatusListType.StatusList2021) {\n if (!result.statusList2021) {\n throw new Error('Missing statusList2021 details')\n }\n return Object.assign(new StatusList2021Entity(), {\n ...baseFields,\n indexingDirection: result.statusList2021.indexingDirection,\n statusPurpose: result.statusList2021.statusPurpose,\n })\n } else if (result.type === StatusListType.OAuthStatusList) {\n if (!result.oauthStatusList) {\n throw new Error('Missing oauthStatusList details')\n }\n return Object.assign(new OAuthStatusListEntity(), {\n ...baseFields,\n bitsPerStatus: result.oauthStatusList.bitsPerStatus,\n expiresAt: result.oauthStatusList.expiresAt,\n })\n }\n throw new Error(`Unsupported status list type: ${result.type}`)\n}\n"],"mappings":"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","names":["DataSources","StatusListStore","statusListCredentialToDetails","StatusListCredentialIdMode","StatusListDriverType","StatusListType","OAuthStatusListEntity","StatusList2021Entity","statusListResultToEntity","result","baseFields","id","correlationId","driverType","credentialIdMode","length","issuer","type","proofFormat","statusListCredential","StatusListType","StatusList2021","statusList2021","Error","Object","assign","StatusList2021Entity","indexingDirection","statusPurpose","OAuthStatusList","oauthStatusList","OAuthStatusListEntity","bitsPerStatus","expiresAt","OAuthStatusListEntity","StatusList2021Entity","getOptions","args","id","correlationId","driverType","StatusListDriverType","AGENT_TYPEORM","driverOptions","dbName","getDriver","dataSource","name","Error","dataSources","DataSources","singleInstance","AgentDataSourceStatusListDriver","init","getDbConnection","_statusListLength","_dataSource","_statusListStore","options","dbArgs","statusListStore","Promise","reject","StatusListStore","getType","createStatusList","credentialIdMode","StatusListCredentialIdMode","ISSUANCE","details","statusListCredentialToDetails","addStatusList","length","updateStatusList","entity","getStatusListRepo","type","findOne","where","deleteStatusList","removeStatusList","resolve","isStatusList2021Entity","statusList","StatusList2021Entity","isOAuthStatusListEntity","OAuthStatusListEntity","updateStatusListEntry","statusListResultToEntity","getStatusList","statusListEntry","statusListId","credentialStatus","statusListIndex","statusPurpose","statusListCredential","bitsPerStatus","expiresAt","getStatusListEntryByCredentialId","getStatusListEntryByIndex","getRandomNewStatusListIndex","result","tries","getRandomNewStatusListIndexImpl","getStatusListLength","Array","from","Math","floor","random","available","availableStatusListEntries","then","statusListEntity","getStatusLists","statusLists","all","map","isStatusListIndexInUse"]}
1
+ {"version":3,"sources":["../src/drivers.ts","../src/status-list-adapters.ts"],"sourcesContent":["/**\n * StatusList Driver Implementation for TypeORM/Agent Data Sources\n *\n * This module provides the database-backed implementation of the IStatusListDriver interface,\n * handling persistence and retrieval of status list credentials and entries using TypeORM.\n * It delegates status list format-specific operations to the functions layer while managing\n * database interactions, driver configuration, and entity lifecycle.\n *\n * Key responsibilities:\n * - Database connection and store management\n * - Status list CRUD operations\n * - Status list entry management\n * - Random index generation for new entries\n * - Integration with multiple data sources\n *\n * @author Sphereon International B.V.\n * @since 2024\n */\n\nimport { DataSources } from '@sphereon/ssi-sdk.agent-config'\nimport {\n BitstringStatusListEntryCredentialStatus,\n IAddStatusListArgs,\n IAddStatusListEntryArgs,\n IBitstringStatusListEntryEntity,\n IGetStatusListEntryByCredentialIdArgs,\n IGetStatusListEntryByIndexArgs,\n IStatusListEntryEntity,\n StatusListEntity,\n StatusListStore,\n} from '@sphereon/ssi-sdk.data-store'\nimport {\n createCredentialStatusFromStatusList,\n extractCredentialDetails,\n StatusList2021EntryCredentialStatus,\n StatusListOAuthEntryCredentialStatus,\n StatusListResult,\n toStatusListDetails,\n} from '@sphereon/ssi-sdk.vc-status-list'\nimport { StatusListCredentialIdMode, StatusListDriverType } from '@sphereon/ssi-types'\nimport { DataSource } from 'typeorm'\nimport {\n ICreateStatusListArgs,\n IGetRandomNewStatusListIndexArgs,\n IGetStatusListArgs,\n IGetStatusListLengthArgs,\n IStatusListDriver,\n IUpdateStatusListArgs,\n} from './types'\nimport { statusListResultToEntity } from './status-list-adapters'\n\n/**\n * Configuration options for status list management\n */\nexport interface StatusListManagementOptions {\n id?: string\n correlationId?: string\n driverType: StatusListDriverType\n driverOptions?: DriverOptions\n}\n\nexport type DriverOptions = TypeORMOptions\n\n/**\n * TypeORM-specific configuration options\n */\nexport interface TypeORMOptions {\n dbName?: string\n}\n\n/**\n * Filesystem-specific configuration options\n */\nexport interface FilesystemOptions {\n path: string // The base path where statusList Credentials will be persisted. Should be a folder and thus not include the VC/StatusList itself\n}\n\n/**\n * Creates status list management options for TypeORM driver\n * @param args - Configuration parameters including id, correlationId, and database name\n * @returns StatusListManagementOptions configured for TypeORM\n */\nexport function getOptions(args: { id?: string; correlationId?: string; dbName: string }): StatusListManagementOptions {\n return {\n id: args.id,\n correlationId: args.correlationId,\n driverType: StatusListDriverType.AGENT_TYPEORM,\n driverOptions: { dbName: args.dbName },\n }\n}\n\n/**\n * Creates and initializes a status list driver instance\n * @param args - Configuration parameters including database connection details\n * @returns Promise resolving to initialized IStatusListDriver instance\n */\nexport async function getDriver(args: {\n id?: string\n correlationId?: string\n dbName?: string\n dataSource?: DataSource\n dataSources?: DataSources\n}): Promise<IStatusListDriver> {\n const dbName = args.dbName ?? args.dataSource?.name\n if (!dbName) {\n throw Error(`Please provide either a DB name or data source`)\n }\n const dataSources = args.dataSources ?? DataSources.singleInstance()\n return await AgentDataSourceStatusListDriver.init(\n getOptions({\n ...args,\n dbName,\n }),\n { dataSource: args.dataSource ?? (await dataSources.getDbConnection(dbName)), dataSources },\n )\n}\n\n/**\n * TypeORM-based implementation of the IStatusListDriver interface\n *\n * Manages status list credentials and entries using a TypeORM data source.\n * Handles database operations while delegating format-specific logic to the functions layer.\n */\nexport class AgentDataSourceStatusListDriver implements IStatusListDriver {\n private _statusListLength: number | undefined\n\n /**\n * Creates a new AgentDataSourceStatusListDriver instance\n * @param _dataSource - TypeORM DataSource for database operations\n * @param _statusListStore - StatusListStore for data persistence\n * @param options - Driver configuration options\n */\n constructor(\n private _dataSource: DataSource,\n private _statusListStore: StatusListStore,\n private options: StatusListManagementOptions,\n ) {}\n\n /**\n * Initializes and creates a new AgentDataSourceStatusListDriver instance\n * @param options - Status list management configuration\n * @param dbArgs - Database connection arguments\n * @returns Promise resolving to initialized driver instance\n */\n public static async init(\n options: StatusListManagementOptions,\n dbArgs?: {\n dataSources?: DataSources\n dataSource?: DataSource\n },\n ): Promise<AgentDataSourceStatusListDriver> {\n if (options.driverType !== StatusListDriverType.AGENT_TYPEORM) {\n throw Error(`TypeORM driver can only be used when the TypeORM driver type is selected in the configuration. Got: ${options.driverType}`)\n } else if (!options.driverOptions) {\n throw Error(`TypeORM driver can only be used when the TypeORM options are provided.`)\n }\n let dataSource: DataSource\n let statusListStore: StatusListStore\n if (dbArgs?.dataSource) {\n dataSource = dbArgs.dataSource\n } else if (options.driverOptions.dbName) {\n if (dbArgs?.dataSources) {\n dataSource = await dbArgs.dataSources.getDbConnection(options.driverOptions.dbName)\n } else {\n dataSource = await DataSources.singleInstance().getDbConnection(options.driverOptions.dbName)\n }\n } else {\n return Promise.reject(Error(`Either a datasource or dbName needs to be provided`))\n }\n\n statusListStore = new StatusListStore(dataSource)\n return new AgentDataSourceStatusListDriver(dataSource, statusListStore, options)\n }\n\n /**\n * Gets the TypeORM DataSource instance\n * @returns DataSource instance for database operations\n */\n get dataSource(): DataSource {\n if (!this._dataSource) {\n throw Error(`Datasource not available yet for ${this.options.driverOptions?.dbName}`)\n }\n return this._dataSource\n }\n\n /**\n * Gets the StatusListStore instance\n * @returns StatusListStore for data persistence operations\n */\n get statusListStore(): StatusListStore {\n if (!this._statusListStore) {\n this._statusListStore = new StatusListStore(this.dataSource)\n }\n return this._statusListStore\n }\n\n /**\n * Gets the driver configuration options\n * @returns DriverOptions configuration\n */\n getOptions(): DriverOptions {\n return this.options.driverOptions ?? {}\n }\n\n /**\n * Gets the driver type\n * @returns StatusListDriverType enum value\n */\n getType(): StatusListDriverType {\n return this.options.driverType\n }\n\n /**\n * Creates a new status list credential and stores it in the database\n * @param args - Status list creation parameters\n * @returns Promise resolving to StatusListResult\n */\n async createStatusList(args: ICreateStatusListArgs): Promise<StatusListResult> {\n const correlationId = args.correlationId ?? this.options.correlationId\n if (!correlationId) {\n throw Error('Either a correlationId needs to be set as an option, or it needs to be provided when creating a status list. None found')\n }\n const credentialIdMode = args.credentialIdMode ?? StatusListCredentialIdMode.ISSUANCE\n\n // Convert credential to implementation details using CREATE/READ context\n const implementationResult = await toStatusListDetails({\n statusListCredential: args.statusListCredential,\n statusListType: args.statusListType,\n bitsPerStatus: args.bitsPerStatus,\n correlationId,\n driverType: this.getType(),\n })\n\n // Add driver-specific fields to create complete entity\n const statusListArgs = {\n ...implementationResult,\n credentialIdMode,\n correlationId,\n driverType: this.getType(),\n } as IAddStatusListArgs\n\n await this.statusListStore.addStatusList(statusListArgs)\n this._statusListLength = implementationResult.length\n return implementationResult\n }\n\n /**\n * Updates an existing status list credential in the database\n * @param args - Status list update parameters\n * @returns Promise resolving to StatusListResult\n */\n async updateStatusList(args: IUpdateStatusListArgs): Promise<StatusListResult> {\n const correlationId = args.correlationId ?? this.options.correlationId\n\n const extractedDetails = await extractCredentialDetails(args.statusListCredential)\n const entity = await this.statusListStore.getStatusList({\n id: extractedDetails.id,\n correlationId,\n })\n if (!entity) {\n throw Error(`Status list ${extractedDetails.id}, correlationId ${correlationId} could not be found`)\n }\n\n entity.statusListCredential = args.statusListCredential\n\n const details = await toStatusListDetails({\n extractedDetails,\n statusListEntity: entity,\n })\n\n // Merge details with existing entity and driver properties\n const updateArgs = {\n ...entity,\n ...details,\n correlationId,\n driverType: this.getType(),\n } as IAddStatusListArgs\n\n await this.statusListStore.updateStatusList(updateArgs)\n this._statusListLength = details.length\n return { ...entity, ...details }\n }\n\n /**\n * Deletes the status list from the database\n * @returns Promise resolving to boolean indicating success\n */\n async deleteStatusList(): Promise<boolean> {\n await this.statusListStore.removeStatusList({ id: this.options.id, correlationId: this.options.correlationId })\n return Promise.resolve(true)\n }\n\n /**\n * Updates a status list entry and returns the credential status\n * @param args - Status list entry update parameters\n * @returns Promise resolving to credential status and entry\n */\n async updateStatusListEntry(args: IAddStatusListEntryArgs): Promise<{\n credentialStatus: StatusList2021EntryCredentialStatus | StatusListOAuthEntryCredentialStatus | BitstringStatusListEntryCredentialStatus\n statusListEntry: IStatusListEntryEntity | IBitstringStatusListEntryEntity\n }> {\n // Get status list entity\n const statusListEntity: StatusListEntity = statusListResultToEntity(await this.getStatusList())\n\n // Update the entry in the store\n const statusListEntry = await this.statusListStore.updateStatusListEntry({ ...args, statusListId: statusListEntity.id })\n\n // Use implementation to create the credential status - this moves type-specific logic to implementations\n const credentialStatus = await createCredentialStatusFromStatusList({\n statusList: statusListEntity,\n statusListEntry,\n statusListIndex: statusListEntry.statusListIndex,\n })\n\n return {\n credentialStatus,\n statusListEntry,\n }\n }\n\n /**\n * Retrieves a status list entry by credential ID\n * @param args - Query parameters including credential ID\n * @returns Promise resolving to status list entry or undefined\n */\n async getStatusListEntryByCredentialId(\n args: IGetStatusListEntryByCredentialIdArgs,\n ): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity | undefined> {\n return await this.statusListStore.getStatusListEntryByCredentialId(args)\n }\n\n /**\n * Retrieves a status list entry by index\n * @param args - Query parameters including status list index\n * @returns Promise resolving to status list entry or undefined\n */\n async getStatusListEntryByIndex(\n args: IGetStatusListEntryByIndexArgs,\n ): Promise<IStatusListEntryEntity | IBitstringStatusListEntryEntity | undefined> {\n return await this.statusListStore.getStatusListEntryByIndex(args)\n }\n\n /**\n * Generates a random available index for new status list entries\n * @param args - Optional correlation ID parameter\n * @returns Promise resolving to available index number\n */\n async getRandomNewStatusListIndex(args?: IGetRandomNewStatusListIndexArgs): Promise<number> {\n let result = -1\n let tries = 0\n while (result < 0) {\n // no tries guard, because we will throw an error when they are exhausted anyway\n result = await this.getRandomNewStatusListIndexImpl(tries++, args)\n }\n return result\n }\n\n /**\n * Implementation for generating random status list indices with retry logic\n * @param tries - Number of attempts made\n * @param args - Optional correlation ID parameter\n * @returns Promise resolving to available index or -1 if none found\n */\n private async getRandomNewStatusListIndexImpl(tries: number, args?: { correlationId?: string }): Promise<number> {\n const statusListId = this.options.id\n const correlationId = args?.correlationId ?? this.options.correlationId\n if (tries >= 10) {\n throw Error(`We could not find any random status list index that is available in the statuslist ${statusListId}`)\n }\n // TODO: Check against DB\n const length = await this.getStatusListLength(args)\n const statusListIndex = Array.from({ length: 20 }, () => Math.floor(Math.random() * length))\n const available = await this.statusListStore.availableStatusListEntries({\n statusListId,\n ...(correlationId && { correlationId }),\n statusListIndex,\n })\n if (available.length > 0) {\n return available[0] // doesn't matter we pick the first element, as they are all random anyway\n }\n return -1\n }\n\n /**\n * Gets the length of the status list\n * @param args - Optional correlation ID parameter\n * @returns Promise resolving to status list length\n */\n async getStatusListLength(args?: IGetStatusListLengthArgs): Promise<number> {\n if (!this._statusListLength) {\n this._statusListLength = await this.getStatusList(args).then((details) => details.length)\n }\n return this._statusListLength!\n }\n\n /**\n * Retrieves the status list details\n * @param args - Optional correlation ID parameter\n * @returns Promise resolving to StatusListResult\n */\n async getStatusList(args?: IGetStatusListArgs): Promise<StatusListResult> {\n const id = this.options.id\n const correlationId = args?.correlationId ?? this.options.correlationId\n\n const statusListEntity = await this.statusListStore.getStatusList({ id, correlationId })\n\n // Convert entity to result using CREATE/READ context\n return await toStatusListDetails({\n statusListCredential: statusListEntity.statusListCredential!,\n statusListType: statusListEntity.type,\n bitsPerStatus: statusListEntity.bitsPerStatus,\n correlationId: statusListEntity.correlationId,\n driverType: statusListEntity.driverType,\n })\n }\n\n /**\n * Retrieves all status lists\n * @returns Promise resolving to array of StatusListResult\n */\n async getStatusLists(): Promise<Array<StatusListResult>> {\n const statusLists = await this.statusListStore.getStatusLists({})\n return Promise.all(\n statusLists.map(async (statusListEntity) => {\n return toStatusListDetails({\n statusListCredential: statusListEntity.statusListCredential!,\n statusListType: statusListEntity.type,\n bitsPerStatus: statusListEntity.bitsPerStatus,\n correlationId: statusListEntity.correlationId,\n driverType: statusListEntity.driverType,\n })\n }),\n )\n }\n\n /**\n * Checks if a status list index is currently in use\n * @returns Promise resolving to boolean indicating usage status\n */\n isStatusListIndexInUse(): Promise<boolean> {\n return Promise.resolve(false)\n }\n}\n","import { StatusListType } from '@sphereon/ssi-types'\nimport { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity } from '@sphereon/ssi-sdk.data-store'\nimport { StatusListResult } from '@sphereon/ssi-sdk.vc-status-list'\n\nexport function statusListResultToEntity(result: StatusListResult): StatusList2021Entity | OAuthStatusListEntity | BitstringStatusListEntity {\n const baseFields = {\n id: result.id,\n correlationId: result.correlationId,\n driverType: result.driverType,\n length: result.length,\n issuer: result.issuer,\n type: result.type,\n proofFormat: result.proofFormat,\n statusListCredential: result.statusListCredential,\n }\n\n if (result.type === StatusListType.StatusList2021) {\n if (!result.statusList2021) {\n throw new Error('Missing statusList2021 details')\n }\n const entity = new StatusList2021Entity()\n Object.assign(entity, baseFields, {\n indexingDirection: result.statusList2021.indexingDirection,\n statusPurpose: result.statusList2021.statusPurpose,\n credentialIdMode: result.statusList2021.credentialIdMode,\n })\n return entity\n } else if (result.type === StatusListType.OAuthStatusList) {\n if (!result.oauthStatusList) {\n throw new Error('Missing oauthStatusList details')\n }\n const entity = new OAuthStatusListEntity()\n Object.assign(entity, baseFields, {\n bitsPerStatus: result.oauthStatusList.bitsPerStatus,\n expiresAt: result.oauthStatusList.expiresAt,\n })\n return entity\n } else if (result.type === StatusListType.BitstringStatusList) {\n if (!result.bitstringStatusList) {\n throw new Error('Missing bitstringStatusList details')\n }\n const entity = new BitstringStatusListEntity()\n Object.assign(entity, baseFields, {\n statusPurpose: result.bitstringStatusList.statusPurpose,\n ttl: result.bitstringStatusList.ttl,\n bitsPerStatus: result.bitstringStatusList.bitsPerStatus,\n validFrom: result.bitstringStatusList.validFrom,\n validUntil: result.bitstringStatusList.validUntil,\n })\n return entity\n }\n throw new Error(`Unsupported status list type: ${result.type}`)\n}\n"],"mappings":"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","names":["DataSources","StatusListStore","createCredentialStatusFromStatusList","extractCredentialDetails","toStatusListDetails","StatusListCredentialIdMode","StatusListDriverType","StatusListType","BitstringStatusListEntity","OAuthStatusListEntity","StatusList2021Entity","statusListResultToEntity","result","baseFields","id","correlationId","driverType","length","issuer","type","proofFormat","statusListCredential","StatusListType","StatusList2021","statusList2021","Error","entity","StatusList2021Entity","Object","assign","indexingDirection","statusPurpose","credentialIdMode","OAuthStatusList","oauthStatusList","OAuthStatusListEntity","bitsPerStatus","expiresAt","BitstringStatusList","bitstringStatusList","BitstringStatusListEntity","ttl","validFrom","validUntil","getOptions","args","id","correlationId","driverType","StatusListDriverType","AGENT_TYPEORM","driverOptions","dbName","getDriver","dataSource","name","Error","dataSources","DataSources","singleInstance","AgentDataSourceStatusListDriver","init","getDbConnection","_statusListLength","_dataSource","_statusListStore","options","dbArgs","statusListStore","Promise","reject","StatusListStore","getType","createStatusList","credentialIdMode","StatusListCredentialIdMode","ISSUANCE","implementationResult","toStatusListDetails","statusListCredential","statusListType","bitsPerStatus","statusListArgs","addStatusList","length","updateStatusList","extractedDetails","extractCredentialDetails","entity","getStatusList","details","statusListEntity","updateArgs","deleteStatusList","removeStatusList","resolve","updateStatusListEntry","statusListResultToEntity","statusListEntry","statusListId","credentialStatus","createCredentialStatusFromStatusList","statusList","statusListIndex","getStatusListEntryByCredentialId","getStatusListEntryByIndex","getRandomNewStatusListIndex","result","tries","getRandomNewStatusListIndexImpl","getStatusListLength","Array","from","Math","floor","random","available","availableStatusListEntries","then","type","getStatusLists","statusLists","all","map","isStatusListIndexInUse"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.vc-status-list-issuer-drivers",
3
3
  "description": "Sphereon SSI-SDK plugin for Status List management, like StatusList2021. Issuer drivers module",
4
- "version": "0.34.1-next.3+6c49ea2f",
4
+ "version": "0.34.1-next.323+d3f5079e",
5
5
  "source": "src/index.ts",
6
6
  "type": "module",
7
7
  "main": "./dist/index.cjs",
@@ -22,14 +22,16 @@
22
22
  "build": "tsup --config ../../tsup.config.ts --tsconfig ../../tsconfig.tsup.json"
23
23
  },
24
24
  "dependencies": {
25
- "@sphereon/ssi-express-support": "0.34.1-next.3+6c49ea2f",
26
- "@sphereon/ssi-sdk-ext.did-utils": "0.29.1-next.3",
27
- "@sphereon/ssi-sdk-ext.identifier-resolution": "0.29.1-next.3",
28
- "@sphereon/ssi-sdk.agent-config": "0.34.1-next.3+6c49ea2f",
29
- "@sphereon/ssi-sdk.core": "0.34.1-next.3+6c49ea2f",
30
- "@sphereon/ssi-sdk.data-store": "0.34.1-next.3+6c49ea2f",
31
- "@sphereon/ssi-sdk.vc-status-list": "0.34.1-next.3+6c49ea2f",
32
- "@sphereon/ssi-types": "0.34.1-next.3+6c49ea2f",
25
+ "@sphereon/ssi-express-support": "0.34.1-next.323+d3f5079e",
26
+ "@sphereon/ssi-sdk-ext.did-utils": "0.34.1-next.323+d3f5079e",
27
+ "@sphereon/ssi-sdk-ext.identifier-resolution": "0.34.1-next.323+d3f5079e",
28
+ "@sphereon/ssi-sdk.agent-config": "0.34.1-next.323+d3f5079e",
29
+ "@sphereon/ssi-sdk.core": "0.34.1-next.323+d3f5079e",
30
+ "@sphereon/ssi-sdk.credential-vcdm": "0.34.1-next.323+d3f5079e",
31
+ "@sphereon/ssi-sdk.data-store": "0.34.1-next.323+d3f5079e",
32
+ "@sphereon/ssi-sdk.data-store-types": "0.34.1-next.323+d3f5079e",
33
+ "@sphereon/ssi-sdk.vc-status-list": "0.34.1-next.323+d3f5079e",
34
+ "@sphereon/ssi-types": "0.34.1-next.323+d3f5079e",
33
35
  "@sphereon/vc-status-list": "7.0.0-next.0",
34
36
  "@veramo/core": "4.2.0",
35
37
  "debug": "^4.3.5",
@@ -60,5 +62,5 @@
60
62
  "SSI",
61
63
  "StatusList2021"
62
64
  ],
63
- "gitHead": "6c49ea2f9c1bc61641ca2c98e3aa0a5b48018d91"
65
+ "gitHead": "d3f5079e9d38e5e63abb8695829b724a03180a47"
64
66
  }