@sphereon/ssi-sdk.vc-status-list 0.33.1-feature.vcdm2.tsup.49 → 0.33.1-feature.vcdm2.tsup.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +40 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +40 -40
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/functions.ts +4 -4
- package/src/impl/IStatusList.ts +3 -3
- package/src/impl/OAuthStatusList.ts +6 -6
- package/src/impl/StatusList2021.ts +14 -6
- package/src/impl/StatusListFactory.ts +1 -1
- package/src/impl/encoding/cbor.ts +58 -53
- package/src/impl/encoding/common.ts +1 -1
- package/src/impl/encoding/jwt.ts +6 -6
- package/src/types/index.ts +13 -13
- package/src/utils.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -459,11 +459,11 @@ var getSigningAlgo = /* @__PURE__ */ __name((type) => {
|
|
|
459
459
|
// src/impl/encoding/cbor.ts
|
|
460
460
|
var import_jwt_status_list2 = require("@sd-jwt/jwt-status-list");
|
|
461
461
|
var import_pako = require("pako");
|
|
462
|
-
var
|
|
462
|
+
var import_kmp_mdoc_core = require("@sphereon/kmp-mdoc-core");
|
|
463
463
|
var import_base64url2 = __toESM(require("base64url"), 1);
|
|
464
|
-
var
|
|
465
|
-
var
|
|
466
|
-
var
|
|
464
|
+
var CborByteString = import_kmp_mdoc_core.com.sphereon.cbor.CborByteString;
|
|
465
|
+
var CborUInt = import_kmp_mdoc_core.com.sphereon.cbor.CborUInt;
|
|
466
|
+
var CborString = import_kmp_mdoc_core.com.sphereon.cbor.CborString;
|
|
467
467
|
var decompressRawStatusList = import_jwt_status_list2.StatusList.decodeStatusList.bind(import_jwt_status_list2.StatusList);
|
|
468
468
|
var CWT_CLAIMS = {
|
|
469
469
|
SUBJECT: 2,
|
|
@@ -480,25 +480,25 @@ var createSignedCbor = /* @__PURE__ */ __name(async (context, statusList, issuer
|
|
|
480
480
|
level: 9
|
|
481
481
|
});
|
|
482
482
|
const compressedBytes = new Int8Array(compressedList);
|
|
483
|
-
const statusListMap = new cbor.CborMap(
|
|
483
|
+
const statusListMap = new import_kmp_mdoc_core.com.sphereon.cbor.CborMap(import_kmp_mdoc_core.kotlin.collections.KtMutableMap.fromJsMap(/* @__PURE__ */ new Map([
|
|
484
484
|
[
|
|
485
|
-
new cbor.CborString("bits"),
|
|
486
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(statusList.getBitsPerStatus()))
|
|
485
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborString("bits"),
|
|
486
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(statusList.getBitsPerStatus()))
|
|
487
487
|
],
|
|
488
488
|
[
|
|
489
|
-
new cbor.CborString("lst"),
|
|
490
|
-
new cbor.CborByteString(compressedBytes)
|
|
489
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborString("lst"),
|
|
490
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborByteString(compressedBytes)
|
|
491
491
|
]
|
|
492
492
|
])));
|
|
493
|
-
const protectedHeader = new cbor.CborMap(
|
|
493
|
+
const protectedHeader = new import_kmp_mdoc_core.com.sphereon.cbor.CborMap(import_kmp_mdoc_core.kotlin.collections.KtMutableMap.fromJsMap(/* @__PURE__ */ new Map([
|
|
494
494
|
[
|
|
495
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(16)),
|
|
496
|
-
new cbor.CborString("statuslist+cwt")
|
|
495
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(16)),
|
|
496
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborString("statuslist+cwt")
|
|
497
497
|
]
|
|
498
498
|
])));
|
|
499
|
-
const protectedHeaderEncoded = cbor.Cbor.encode(protectedHeader);
|
|
499
|
+
const protectedHeaderEncoded = import_kmp_mdoc_core.com.sphereon.cbor.Cbor.encode(protectedHeader);
|
|
500
500
|
const claimsMap = buildClaimsMap(id, issuerString, statusListMap, expiresAt);
|
|
501
|
-
const claimsEncoded = cbor.Cbor.encode(claimsMap);
|
|
501
|
+
const claimsEncoded = import_kmp_mdoc_core.com.sphereon.cbor.Cbor.encode(claimsMap);
|
|
502
502
|
const signedCWT = await context.agent.keyManagerSign({
|
|
503
503
|
keyRef: identifier.kmsKeyRef,
|
|
504
504
|
data: import_base64url2.default.encode(Buffer.from(claimsEncoded)),
|
|
@@ -509,12 +509,12 @@ var createSignedCbor = /* @__PURE__ */ __name(async (context, statusList, issuer
|
|
|
509
509
|
const signatureBytes = import_base64url2.default.decode(signedCWT);
|
|
510
510
|
const signatureInt8 = new Int8Array(Buffer.from(signatureBytes));
|
|
511
511
|
const cwtArrayElements = [
|
|
512
|
-
new
|
|
513
|
-
new
|
|
514
|
-
new
|
|
512
|
+
new CborByteString(protectedHeaderEncodedInt8),
|
|
513
|
+
new CborByteString(claimsEncodedInt8),
|
|
514
|
+
new CborByteString(signatureInt8)
|
|
515
515
|
];
|
|
516
|
-
const cwtArray = new cbor.CborArray(
|
|
517
|
-
const cwtEncoded = cbor.Cbor.encode(cwtArray);
|
|
516
|
+
const cwtArray = new import_kmp_mdoc_core.com.sphereon.cbor.CborArray(import_kmp_mdoc_core.kotlin.collections.KtMutableList.fromJsArray(cwtArrayElements));
|
|
517
|
+
const cwtEncoded = import_kmp_mdoc_core.com.sphereon.cbor.Cbor.encode(cwtArray);
|
|
518
518
|
const cwtBuffer = Buffer.from(cwtEncoded);
|
|
519
519
|
return {
|
|
520
520
|
statusListCredential: import_base64url2.default.encode(cwtBuffer),
|
|
@@ -525,35 +525,35 @@ function buildClaimsMap(id, issuerString, statusListMap, expiresAt) {
|
|
|
525
525
|
const ttl = 65535;
|
|
526
526
|
const claimsEntries = [
|
|
527
527
|
[
|
|
528
|
-
new
|
|
529
|
-
new cbor.CborString(id)
|
|
528
|
+
new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.SUBJECT)),
|
|
529
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborString(id)
|
|
530
530
|
],
|
|
531
531
|
[
|
|
532
|
-
new
|
|
533
|
-
new cbor.CborString(issuerString)
|
|
532
|
+
new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUER)),
|
|
533
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborString(issuerString)
|
|
534
534
|
],
|
|
535
535
|
[
|
|
536
|
-
new
|
|
537
|
-
new
|
|
536
|
+
new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUED_AT)),
|
|
537
|
+
new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(Math.floor(Date.now() / 1e3)))
|
|
538
538
|
]
|
|
539
539
|
];
|
|
540
540
|
if (expiresAt) {
|
|
541
541
|
claimsEntries.push([
|
|
542
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.EXPIRATION)),
|
|
543
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(Math.floor(expiresAt.getTime() / 1e3)))
|
|
542
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.EXPIRATION)),
|
|
543
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(Math.floor(expiresAt.getTime() / 1e3)))
|
|
544
544
|
]);
|
|
545
545
|
}
|
|
546
546
|
if (ttl) {
|
|
547
547
|
claimsEntries.push([
|
|
548
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.TIME_TO_LIVE)),
|
|
549
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(ttl))
|
|
548
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.TIME_TO_LIVE)),
|
|
549
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(ttl))
|
|
550
550
|
]);
|
|
551
551
|
}
|
|
552
552
|
claimsEntries.push([
|
|
553
|
-
new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.STATUS_LIST)),
|
|
553
|
+
new import_kmp_mdoc_core.com.sphereon.cbor.CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.STATUS_LIST)),
|
|
554
554
|
statusListMap
|
|
555
555
|
]);
|
|
556
|
-
const claimsMap = new cbor.CborMap(
|
|
556
|
+
const claimsMap = new import_kmp_mdoc_core.com.sphereon.cbor.CborMap(import_kmp_mdoc_core.kotlin.collections.KtMutableMap.fromJsMap(new Map(claimsEntries)));
|
|
557
557
|
return claimsMap;
|
|
558
558
|
}
|
|
559
559
|
__name(buildClaimsMap, "buildClaimsMap");
|
|
@@ -565,7 +565,7 @@ var getCborValueFromMap = /* @__PURE__ */ __name((map, key) => {
|
|
|
565
565
|
return value;
|
|
566
566
|
}, "getCborValueFromMap");
|
|
567
567
|
var getCborOptionalValueFromMap = /* @__PURE__ */ __name((map, key) => {
|
|
568
|
-
const value = map.get(new
|
|
568
|
+
const value = map.get(new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(key)));
|
|
569
569
|
if (!value) {
|
|
570
570
|
return void 0;
|
|
571
571
|
}
|
|
@@ -574,22 +574,22 @@ var getCborOptionalValueFromMap = /* @__PURE__ */ __name((map, key) => {
|
|
|
574
574
|
var decodeStatusListCWT = /* @__PURE__ */ __name((cwt) => {
|
|
575
575
|
const encodedCbor = import_base64url2.default.toBuffer(cwt);
|
|
576
576
|
const encodedCborArray = new Int8Array(encodedCbor);
|
|
577
|
-
const decodedCbor =
|
|
578
|
-
if (!(decodedCbor instanceof
|
|
577
|
+
const decodedCbor = import_kmp_mdoc_core.com.sphereon.cbor.Cbor.decode(encodedCborArray);
|
|
578
|
+
if (!(decodedCbor instanceof import_kmp_mdoc_core.com.sphereon.cbor.CborArray)) {
|
|
579
579
|
throw new Error("Invalid CWT format: Expected a CBOR array");
|
|
580
580
|
}
|
|
581
581
|
const [, payload] = decodedCbor.value.asJsArrayView();
|
|
582
|
-
if (!(payload instanceof
|
|
582
|
+
if (!(payload instanceof import_kmp_mdoc_core.com.sphereon.cbor.CborByteString)) {
|
|
583
583
|
throw new Error("Invalid payload format: Expected a CBOR ByteString");
|
|
584
584
|
}
|
|
585
|
-
const claims =
|
|
586
|
-
if (!(claims instanceof
|
|
585
|
+
const claims = import_kmp_mdoc_core.com.sphereon.cbor.Cbor.decode(payload.value);
|
|
586
|
+
if (!(claims instanceof import_kmp_mdoc_core.com.sphereon.cbor.CborMap)) {
|
|
587
587
|
throw new Error("Invalid claims format: Expected a CBOR map");
|
|
588
588
|
}
|
|
589
589
|
const claimsMap = claims.value.asJsMapView();
|
|
590
|
-
const statusListMap = claimsMap.get(new
|
|
591
|
-
const bits = Number(statusListMap.get(new
|
|
592
|
-
const decoded = new Uint8Array(statusListMap.get(new
|
|
590
|
+
const statusListMap = claimsMap.get(new CborUInt(import_kmp_mdoc_core.com.sphereon.kmp.LongKMP.fromNumber(65533))).value.asJsMapView();
|
|
591
|
+
const bits = Number(statusListMap.get(new CborString("bits")).value);
|
|
592
|
+
const decoded = new Uint8Array(statusListMap.get(new CborString("lst")).value);
|
|
593
593
|
const uint8Array = (0, import_pako.inflate)(decoded);
|
|
594
594
|
const rawStatusList = decompressRawStatusList(uint8Array, bits);
|
|
595
595
|
const statusList = new import_jwt_status_list2.StatusList(rawStatusList, bits);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/functions.ts","../src/utils.ts","../src/impl/StatusList2021.ts","../src/impl/OAuthStatusList.ts","../src/impl/encoding/jwt.ts","../src/impl/encoding/common.ts","../src/impl/encoding/cbor.ts","../src/impl/StatusListFactory.ts"],"sourcesContent":["/**\n */\n\nexport * from './types'\nexport * from './functions'\n","import { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n ICredential,\n ICredentialStatus,\n IIssuer,\n IVerifiableCredential,\n OrPromise,\n type CredentialProofFormat,\n StatusListCredential,\n StatusListCredentialIdMode,\n StatusListDriverType,\n StatusListIndexingDirection,\n StatusListType,\n StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport {\n CredentialPayload,\n IAgentContext,\n ICredentialIssuer,\n ICredentialPlugin,\n ICredentialVerifier,\n IKeyManager,\n IPluginMethodMap,\n} from '@veramo/core'\nimport { DataSource } from 'typeorm'\nimport { BitsPerStatus } from '@sd-jwt/jwt-status-list'\nimport { SdJwtVcPayload } from '@sd-jwt/sd-jwt-vc'\nimport { StatusListOpts } from '@sphereon/oid4vci-common'\n\nexport enum StatusOAuth {\n Valid = 0,\n Invalid = 1,\n Suspended = 2,\n}\n\nexport enum Status2021 {\n Valid = 0,\n Invalid = 1,\n}\n\nexport type StatusList2021Args = {\n indexingDirection: StatusListIndexingDirection\n statusPurpose?: StatusPurpose2021\n // todo: validFrom and validUntil\n}\n\nexport type OAuthStatusListArgs = {\n bitsPerStatus?: BitsPerStatus\n expiresAt?: Date\n}\n\nexport type BaseCreateNewStatusListArgs = {\n type: StatusListType\n id: string\n issuer: string | IIssuer\n correlationId?: string\n length?: number\n proofFormat?: CredentialProofFormat\n keyRef?: string\n statusList2021?: StatusList2021Args\n oauthStatusList?: OAuthStatusListArgs\n driverType?: StatusListDriverType\n}\n\nexport type UpdateStatusList2021Args = {\n statusPurpose: StatusPurpose2021\n}\n\nexport type UpdateOAuthStatusListArgs = {\n bitsPerStatus: BitsPerStatus\n expiresAt?: Date\n}\n\nexport interface UpdateStatusListFromEncodedListArgs {\n type?: StatusListType\n statusListIndex: number | string\n value: boolean\n proofFormat?: CredentialProofFormat\n keyRef?: string\n correlationId?: string\n encodedList: string\n issuer: string | IIssuer\n id: string\n statusList2021?: UpdateStatusList2021Args\n oauthStatusList?: UpdateOAuthStatusListArgs\n}\n\nexport interface UpdateStatusListFromStatusListCredentialArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n keyRef?: string\n statusListIndex: number | string\n value: number | Status2021 | StatusOAuth\n}\n\nexport interface StatusListResult {\n encodedList: string\n statusListCredential: StatusListCredential\n length: number\n type: StatusListType\n proofFormat: CredentialProofFormat\n id: string\n statuslistContentType: string\n issuer: string | IIssuer\n statusList2021?: StatusList2021Details\n oauthStatusList?: OAuthStatusDetails\n\n // These cannot be deduced from the VC, so they are present when callers pass in these values as params\n correlationId?: string\n driverType?: StatusListDriverType\n credentialIdMode?: StatusListCredentialIdMode\n}\n\ninterface StatusList2021Details {\n indexingDirection: StatusListIndexingDirection\n statusPurpose?: StatusPurpose2021\n}\n\ninterface OAuthStatusDetails {\n bitsPerStatus?: BitsPerStatus\n expiresAt?: Date\n}\n\nexport interface StatusList2021EntryCredentialStatus extends ICredentialStatus {\n type: 'StatusList2021Entry'\n statusPurpose: StatusPurpose2021\n statusListIndex: string\n statusListCredential: string\n}\n\nexport interface StatusListOAuthEntryCredentialStatus extends ICredentialStatus {\n type: 'OAuthStatusListEntry'\n bitsPerStatus: number\n statusListIndex: string\n statusListCredential: string\n expiresAt?: Date\n}\n\nexport interface StatusList2021ToVerifiableCredentialArgs {\n issuer: string | IIssuer\n id: string\n type?: StatusListType\n proofFormat?: CredentialProofFormat\n keyRef?: string\n encodedList: string\n statusPurpose: StatusPurpose2021\n}\n\nexport interface CreateStatusListArgs {\n issuer: string | IIssuer\n id: string\n proofFormat?: CredentialProofFormat\n keyRef?: string\n correlationId?: string\n length?: number\n statusList2021?: StatusList2021Args\n oauthStatusList?: OAuthStatusListArgs\n}\n\nexport interface UpdateStatusListIndexArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n statusListIndex: number | string\n value: number | Status2021 | StatusOAuth\n keyRef?: string\n expiresAt?: Date\n}\n\nexport interface CheckStatusIndexArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n statusListIndex: string | number\n}\n\nexport interface ToStatusListDetailsArgs {\n statusListPayload: StatusListCredential\n correlationId?: string\n driverType?: StatusListDriverType\n}\n\n/**\n * The interface definition for a plugin that can add statuslist info to a credential\n *\n * @remarks Please see {@link https://www.w3.org/TR/vc-data-model | W3C Verifiable Credentials data model}\n *\n * @beta This API is likely to change without a BREAKING CHANGE notice\n */\nexport interface IStatusListPlugin extends IPluginMethodMap {\n /**\n * Create a new status list\n *\n * @param args Status list information like type and size\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n *\n * @returns - The details of the newly created status list\n */\n slCreateStatusList(args: CreateNewStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n /**\n * Ensures status list info like index and list id is added to a credential\n *\n * @param args - Arguments necessary to add the statuslist info.\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n *\n * @returns - a promise that resolves to the credential now with status support\n *\n * @beta This API is likely to change without a BREAKING CHANGE notice\n */\n slAddStatusToCredential(args: IAddStatusToCredentialArgs, context: IRequiredContext): Promise<CredentialWithStatusSupport>\n\n slAddStatusToSdJwtCredential(args: IAddStatusToSdJwtCredentialArgs, context: IRequiredContext): Promise<SdJwtVcPayload>\n\n /**\n * Get the status list using the configured driver for the SL. Normally a correlationId or id should suffice. Optionally accepts a dbName/datasource\n * @param args\n * @param context\n */\n slGetStatusList(args: GetStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n /**\n * Import status lists when noy yet present\n *\n * @param imports Array of status list information like type and size\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n */\n slImportStatusLists(imports: Array<CreateNewStatusListArgs>, context: IRequiredContext): Promise<boolean>\n}\n\nexport type CreateNewStatusListFuncArgs = BaseCreateNewStatusListArgs\n\nexport type CreateNewStatusListArgs = BaseCreateNewStatusListArgs & {\n dbName?: string\n dataSource?: OrPromise<DataSource>\n isDefault?: boolean\n}\n\nexport type IAddStatusToCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n credential: CredentialWithStatusSupport\n}\n\nexport type IAddStatusToSdJwtCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n credential: SdJwtVcPayload\n}\n\nexport interface IIssueCredentialStatusOpts {\n dataSource?: DataSource\n statusLists?: Array<StatusListOpts>\n credentialId?: string // An id to use for the credential. Normally should be set as the crdential.id value\n value?: string\n}\n\nexport type GetStatusListArgs = {\n id?: string\n correlationId?: string\n dataSource?: OrPromise<DataSource>\n dbName?: string\n}\n\nexport type CredentialWithStatusSupport = ICredential | CredentialPayload | IVerifiableCredential\n\nexport type SignedStatusListData = {\n statusListCredential: StatusListCredential\n encodedList: string\n}\n\nexport type IRequiredPlugins = ICredentialPlugin & IIdentifierResolution\nexport type IRequiredContext = IAgentContext<ICredentialIssuer & ICredentialVerifier & IIdentifierResolution & IKeyManager & ICredentialPlugin>\n","import { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n CredentialMapper,\n DocumentFormat,\n type CredentialProofFormat,\n StatusListCredential,\n StatusListDriverType,\n StatusListType,\n StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport { CredentialStatus, DIDDocument, IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\n\nimport { checkStatus } from '@sphereon/vc-status-list'\n\n// @ts-ignore\nimport { CredentialJwtOrJSON, StatusMethod } from 'credential-status'\nimport {\n CreateNewStatusListFuncArgs,\n Status2021,\n StatusList2021ToVerifiableCredentialArgs,\n StatusListResult,\n StatusOAuth,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from './types'\nimport { assertValidProofType, determineStatusListType, getAssertedValue, getAssertedValues } from './utils'\nimport { getStatusListImplementation } from './impl/StatusListFactory'\n\nexport async function fetchStatusListCredential(args: { statusListCredential: string }): Promise<StatusListCredential> {\n const url = getAssertedValue('statusListCredential', args.statusListCredential)\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw Error(`Fetching status list ${url} resulted in an error: ${response.status} : ${response.statusText}`)\n }\n const responseAsText = await response.text()\n if (responseAsText.trim().startsWith('{')) {\n return JSON.parse(responseAsText) as StatusListCredential\n }\n return responseAsText as StatusListCredential\n } catch (error) {\n console.error(`Fetching status list ${url} resulted in an unexpected error: ${error instanceof Error ? error.message : JSON.stringify(error)}`)\n throw error\n }\n}\n\nexport function statusPluginStatusFunction(args: {\n documentLoader: any\n suite: any\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}): StatusMethod {\n return async (credential: CredentialJwtOrJSON, didDoc: DIDDocument): Promise<CredentialStatus> => {\n const result = await checkStatusForCredential({\n ...args,\n documentLoader: args.documentLoader,\n credential: credential as StatusListCredential,\n errorUnknownListType: args.errorUnknownListType,\n })\n\n return {\n revoked: !result.verified || result.error,\n ...(result.error && { error: result.error }),\n }\n }\n}\n\n/**\n * Function that can be used together with @digitalbazar/vc and @digitialcredentials/vc\n * @param args\n */\nexport function vcLibCheckStatusFunction(args: {\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}) {\n const { mandatoryCredentialStatus, verifyStatusListCredential, verifyMatchingIssuers, errorUnknownListType } = args\n return (args: {\n credential: StatusListCredential\n documentLoader: any\n suite: any\n }): Promise<{\n verified: boolean\n error?: any\n }> => {\n return checkStatusForCredential({\n ...args,\n mandatoryCredentialStatus,\n verifyStatusListCredential,\n verifyMatchingIssuers,\n errorUnknownListType,\n })\n }\n}\n\nexport async function checkStatusForCredential(args: {\n credential: StatusListCredential\n documentLoader: any\n suite: any\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}): Promise<{ verified: boolean; error?: any }> {\n const verifyStatusListCredential = args.verifyStatusListCredential ?? true\n const verifyMatchingIssuers = args.verifyMatchingIssuers ?? true\n const uniform = CredentialMapper.toUniformCredential(args.credential)\n if (!('credentialStatus' in uniform) || !uniform.credentialStatus) {\n if (args.mandatoryCredentialStatus) {\n const error = 'No credential status object found in the Verifiable Credential and it is mandatory'\n console.log(error)\n return { verified: false, error }\n }\n return { verified: true }\n }\n if ('credentialStatus' in uniform && uniform.credentialStatus) {\n if (uniform.credentialStatus.type === 'StatusList2021Entry') {\n return checkStatus({ ...args, verifyStatusListCredential, verifyMatchingIssuers })\n } else if (args?.errorUnknownListType) {\n const error = `Credential status type ${uniform.credentialStatus.type} is not supported, and check status has been configured to not allow for that`\n console.log(error)\n return { verified: false, error }\n } else {\n console.log(`Skipped verification of status type ${uniform.credentialStatus.type} as we do not support it (yet)`)\n }\n }\n return { verified: true }\n}\n\nexport async function simpleCheckStatusFromStatusListUrl(args: {\n statusListCredential: string\n statusPurpose?: StatusPurpose2021\n type?: StatusListType | 'StatusList2021Entry'\n id?: string\n statusListIndex: string\n}): Promise<number | Status2021 | StatusOAuth> {\n return checkStatusIndexFromStatusListCredential({\n ...args,\n statusListCredential: await fetchStatusListCredential(args),\n })\n}\n\nexport async function checkStatusIndexFromStatusListCredential(args: {\n statusListCredential: StatusListCredential\n statusPurpose?: StatusPurpose2021\n type?: StatusListType | 'StatusList2021Entry'\n id?: string\n statusListIndex: string | number\n}): Promise<number | Status2021 | StatusOAuth> {\n const statusListType: StatusListType = determineStatusListType(args.statusListCredential)\n const implementation = getStatusListImplementation(statusListType)\n return implementation.checkStatusIndex(args)\n}\n\nexport async function createNewStatusList(\n args: CreateNewStatusListFuncArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const { type } = getAssertedValues(args)\n const implementation = getStatusListImplementation(type)\n return implementation.createNewStatusList(args, context)\n}\n\nexport async function updateStatusIndexFromStatusListCredential(\n args: UpdateStatusListIndexArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n const statusListType: StatusListType = determineStatusListType(credential)\n const implementation = getStatusListImplementation(statusListType)\n return implementation.updateStatusListIndex(args, context)\n}\n\n// Keeping helper function for backward compatibility\nexport async function statusListCredentialToDetails(args: {\n statusListCredential: StatusListCredential\n correlationId?: string\n driverType?: StatusListDriverType\n}): Promise<StatusListResult> {\n const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n\n let statusListType: StatusListType | undefined\n const documentFormat = CredentialMapper.detectDocumentType(credential)\n if (documentFormat === DocumentFormat.JWT) {\n const [header] = credential.split('.')\n const decodedHeader = JSON.parse(Buffer.from(header, 'base64').toString())\n\n if (decodedHeader.typ === 'statuslist+jwt') {\n statusListType = StatusListType.OAuthStatusList\n }\n } else if (documentFormat === DocumentFormat.MSO_MDOC) {\n statusListType = StatusListType.OAuthStatusList\n // TODO check CBOR content?\n }\n if (!statusListType) {\n const uniform = CredentialMapper.toUniformCredential(credential)\n const type = uniform.type.find((t) => t.includes('StatusList2021') || t.includes('OAuth2StatusList'))\n if (!type) {\n throw new Error('Invalid status list credential type')\n }\n statusListType = type.replace('Credential', '') as StatusListType\n }\n\n const implementation = getStatusListImplementation(statusListType)\n return await implementation.toStatusListDetails({\n statusListPayload: credential,\n correlationId: args.correlationId,\n driverType: args.driverType,\n })\n}\n\nexport async function updateStatusListIndexFromEncodedList(\n args: UpdateStatusListFromEncodedListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const { type } = getAssertedValue('type', args)\n const implementation = getStatusListImplementation(type!)\n return implementation.updateStatusListFromEncodedList(args, context)\n}\n\nexport async function statusList2021ToVerifiableCredential(\n args: StatusList2021ToVerifiableCredentialArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListCredential> {\n const { issuer, id, type } = getAssertedValues(args)\n const identifier = await context.agent.identifierManagedGet({\n identifier: typeof issuer === 'string' ? issuer : issuer.id,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true, // FIXME Fix identifier resolution for EBSI\n })\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? 'lds'\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const encodedList = getAssertedValue('encodedList', args.encodedList)\n const statusPurpose = getAssertedValue('statusPurpose', args.statusPurpose)\n const credential = {\n '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n id,\n issuer,\n // issuanceDate: \"2021-03-10T04:24:12.164Z\",\n type: ['VerifiableCredential', `${type}Credential`],\n credentialSubject: {\n id,\n type,\n statusPurpose,\n encodedList,\n },\n }\n // TODO copy statuslist schema to local and disable fetching remote contexts\n const verifiableCredential = await context.agent.createVerifiableCredential({\n credential,\n keyRef: identifier.kmsKeyRef,\n proofFormat: veramoProofFormat,\n fetchRemoteContexts: true,\n })\n\n return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n}\n","import {\n CredentialMapper,\n IIssuer,\n type CredentialProofFormat,\n StatusListType,\n StatusListType as StatusListTypeW3C,\n StatusListCredential,\n DocumentFormat,\n} from '@sphereon/ssi-types'\nimport { jwtDecode } from 'jwt-decode'\n\nexport function getAssertedStatusListType(type?: StatusListType) {\n const assertedType = type ?? StatusListType.StatusList2021\n if (![StatusListType.StatusList2021, StatusListType.OAuthStatusList].includes(assertedType)) {\n throw Error(`StatusList type ${assertedType} is not supported (yet)`)\n }\n return assertedType\n}\n\nexport function getAssertedValue<T>(name: string, value: T): NonNullable<T> {\n if (value === undefined || value === null) {\n throw Error(`Missing required ${name} value`)\n }\n return value\n}\n\nexport function getAssertedValues(args: { issuer: string | IIssuer; id: string; type?: StatusListTypeW3C | StatusListType }) {\n const type = getAssertedStatusListType(args?.type)\n const id = getAssertedValue('id', args.id)\n const issuer = getAssertedValue('issuer', args.issuer)\n return { id, issuer, type }\n}\n\nexport function getAssertedProperty<T extends object>(propertyName: string, obj: T): NonNullable<any> {\n if (!(propertyName in obj)) {\n throw Error(`The input object does not contain required property: ${propertyName}`)\n }\n return getAssertedValue(propertyName, (obj as any)[propertyName])\n}\n\nconst ValidProofTypeMap = new Map<StatusListType, CredentialProofFormat[]>([\n [StatusListType.StatusList2021, ['jwt', 'lds', 'EthereumEip712Signature2021']],\n [StatusListType.OAuthStatusList, ['jwt', 'cbor']],\n])\n\nexport function assertValidProofType(type: StatusListType, proofFormat: CredentialProofFormat) {\n const validProofTypes = ValidProofTypeMap.get(type)\n if (!validProofTypes?.includes(proofFormat)) {\n throw Error(`Invalid proof format '${proofFormat}' for status list type ${type}`)\n }\n}\n\nexport function determineStatusListType(credential: StatusListCredential): StatusListType {\n const proofFormat = determineProofFormat(credential)\n switch (proofFormat) {\n case 'jwt':\n const payload: StatusListCredential = jwtDecode(credential as string)\n const keys = Object.keys(payload)\n if (keys.includes('status_list')) {\n return StatusListType.OAuthStatusList\n } else if (keys.includes('vc')) {\n return StatusListType.StatusList2021\n }\n break\n case 'lds':\n const uniform = CredentialMapper.toUniformCredential(credential)\n const type = uniform.type.find((t) => {\n return Object.values(StatusListType).some((statusType) => t.includes(statusType))\n })\n if (!type) {\n throw new Error('Invalid status list credential type')\n }\n return type.replace('Credential', '') as StatusListType\n\n case 'cbor':\n return StatusListType.OAuthStatusList\n }\n\n throw new Error('Cannot determine status list type from credential payload')\n}\n\nexport function determineProofFormat(credential: StatusListCredential): CredentialProofFormat {\n const type: DocumentFormat = CredentialMapper.detectDocumentType(credential)\n switch (type) {\n case DocumentFormat.JWT:\n return 'jwt'\n case DocumentFormat.MSO_MDOC:\n // Not really mdoc, just assume Cbor for now, I'd need to decode at least the header to what type of Cbor we have\n return 'cbor'\n case DocumentFormat.JSONLD:\n return 'lds'\n default:\n throw Error('Cannot determine credential payload type')\n }\n}\n","import { IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\nimport { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport { CredentialMapper, DocumentFormat, IIssuer, type CredentialProofFormat, StatusListCredential, StatusListType } from '@sphereon/ssi-types'\n\nimport { StatusList } from '@sphereon/vc-status-list'\nimport { IStatusList } from './IStatusList'\nimport {\n CheckStatusIndexArgs,\n CreateStatusListArgs,\n Status2021,\n StatusListResult,\n ToStatusListDetailsArgs,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from '../types'\nimport { assertValidProofType, getAssertedProperty, getAssertedValue, getAssertedValues } from '../utils'\n\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'lds' as VeramoProofFormat\n\nexport class StatusList2021Implementation implements IStatusList {\n async createNewStatusList(\n args: CreateStatusListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n const length = args?.length ?? DEFAULT_LIST_LENGTH\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const { issuer, id } = args\n const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n const list = new StatusList({ length })\n const encodedList = await list.encode()\n const statusPurpose = 'revocation'\n\n const statusListCredential = await this.createVerifiableCredential(\n {\n ...args,\n encodedList,\n proofFormat: veramoProofFormat,\n },\n context,\n )\n\n return {\n encodedList,\n statusListCredential: statusListCredential,\n statusList2021: {\n statusPurpose,\n indexingDirection: 'rightToLeft',\n },\n length,\n type: StatusListType.StatusList2021,\n proofFormat,\n id,\n correlationId,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListIndex(\n args: UpdateStatusListIndexArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n const credential = args.statusListCredential\n const uniform = CredentialMapper.toUniformCredential(credential)\n const { issuer, credentialSubject } = uniform\n const id = getAssertedValue('id', uniform.id)\n const origEncodedList = getAssertedProperty('encodedList', credentialSubject)\n\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n const statusList = await StatusList.decode({ encodedList: origEncodedList })\n statusList.setStatus(index, args.value != 0)\n const encodedList = await statusList.encode()\n\n const proofFormat = CredentialMapper.detectDocumentType(credential) === DocumentFormat.JWT ? 'jwt' : 'lds'\n const updatedCredential = await this.createVerifiableCredential(\n {\n ...args,\n id,\n issuer,\n encodedList,\n proofFormat: proofFormat,\n },\n context,\n )\n\n return {\n statusListCredential: updatedCredential,\n encodedList,\n statusList2021: {\n ...('statusPurpose' in credentialSubject ? { statusPurpose: credentialSubject.statusPurpose } : {}),\n indexingDirection: 'rightToLeft',\n },\n length: statusList.length - 1,\n type: StatusListType.StatusList2021,\n proofFormat: proofFormat,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListFromEncodedList(\n args: UpdateStatusListFromEncodedListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n if (!args.statusList2021) {\n throw new Error('statusList2021 options required for type StatusList2021')\n }\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const { issuer, id } = getAssertedValues(args)\n const statusList = await StatusList.decode({ encodedList: args.encodedList })\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n statusList.setStatus(index, args.value)\n\n const newEncodedList = await statusList.encode()\n const credential = await this.createVerifiableCredential(\n {\n id,\n issuer,\n encodedList: newEncodedList,\n proofFormat: veramoProofFormat,\n keyRef: args.keyRef,\n },\n context,\n )\n\n return {\n type: StatusListType.StatusList2021,\n statusListCredential: credential,\n encodedList: newEncodedList,\n statusList2021: {\n statusPurpose: args.statusList2021.statusPurpose,\n indexingDirection: 'rightToLeft',\n },\n length: statusList.length,\n proofFormat: args.proofFormat ?? 'lds',\n id: id,\n issuer: issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | Status2021> {\n const uniform = CredentialMapper.toUniformCredential(args.statusListCredential)\n const { credentialSubject } = uniform\n const encodedList = getAssertedProperty('encodedList', credentialSubject)\n\n const statusList = await StatusList.decode({ encodedList })\n const status = statusList.getStatus(typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex))\n return status ? Status2021.Invalid : Status2021.Valid\n }\n\n async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n const { statusListPayload } = args\n const uniform = CredentialMapper.toUniformCredential(statusListPayload)\n const { issuer, credentialSubject } = uniform\n const id = getAssertedValue('id', uniform.id)\n const encodedList = getAssertedProperty('encodedList', credentialSubject)\n const proofFormat: CredentialProofFormat = CredentialMapper.detectDocumentType(statusListPayload) === DocumentFormat.JWT ? 'jwt' : 'lds'\n\n const statusPurpose = getAssertedProperty('statusPurpose', credentialSubject)\n const list = await StatusList.decode({ encodedList })\n\n return {\n id,\n encodedList,\n issuer,\n type: StatusListType.StatusList2021,\n proofFormat,\n length: list.length,\n statusListCredential: statusListPayload,\n statuslistContentType: this.buildContentType(proofFormat),\n statusList2021: {\n indexingDirection: 'rightToLeft',\n statusPurpose,\n },\n ...(args.correlationId && { correlationId: args.correlationId }),\n ...(args.driverType && { driverType: args.driverType }),\n }\n }\n\n private async createVerifiableCredential(\n args: {\n id: string\n issuer: string | IIssuer\n encodedList: string\n proofFormat: VeramoProofFormat\n keyRef?: string\n },\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListCredential> {\n const identifier = await context.agent.identifierManagedGet({\n identifier: typeof args.issuer === 'string' ? args.issuer : args.issuer.id,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true,\n })\n\n const credential = {\n '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n id: args.id,\n issuer: args.issuer,\n type: ['VerifiableCredential', 'StatusList2021Credential'],\n credentialSubject: {\n id: args.id,\n type: 'StatusList2021',\n statusPurpose: 'revocation',\n encodedList: args.encodedList,\n },\n }\n\n const verifiableCredential = await context.agent.createVerifiableCredential({\n credential,\n keyRef: args.keyRef ?? identifier.kmsKeyRef,\n proofFormat: args.proofFormat,\n fetchRemoteContexts: true,\n })\n\n return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n }\n\n private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n switch (proofFormat) {\n case 'jwt':\n return `application/statuslist+jwt`\n case 'cbor':\n return `application/statuslist+cwt`\n case 'lds':\n return 'application/statuslist+ld+json'\n default:\n throw Error(`Unsupported content type '${proofFormat}' for status lists`)\n }\n }\n}\n","import { IAgentContext, ICredentialPlugin, IKeyManager } from '@veramo/core'\nimport { CompactJWT, CWT, type CredentialProofFormat, StatusListType } from '@sphereon/ssi-types'\nimport {\n CheckStatusIndexArgs,\n CreateStatusListArgs,\n SignedStatusListData,\n StatusListResult,\n StatusOAuth,\n ToStatusListDetailsArgs,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from '../types'\nimport { determineProofFormat, getAssertedValue, getAssertedValues } from '../utils'\nimport { IStatusList } from './IStatusList'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\nimport { IJwtService } from '@sphereon/ssi-sdk-ext.jwt-service'\nimport { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport { createSignedJwt, decodeStatusListJWT } from './encoding/jwt'\nimport { createSignedCbor, decodeStatusListCWT } from './encoding/cbor'\n\ntype IRequiredContext = IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>\n\nexport const DEFAULT_BITS_PER_STATUS = 1 // 1 bit is sufficient for 0x00 - \"VALID\" 0x01 - \"INVALID\" saving space in the process\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'jwt' as CredentialProofFormat\n\nexport class OAuthStatusListImplementation implements IStatusList {\n async createNewStatusList(args: CreateStatusListArgs, context: IRequiredContext): Promise<StatusListResult> {\n if (!args.oauthStatusList) {\n throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n }\n\n const proofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n const { issuer, id, oauthStatusList, keyRef } = args\n const { bitsPerStatus, expiresAt } = oauthStatusList\n const length = args.length ?? DEFAULT_LIST_LENGTH\n const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n const statusList = new StatusList(new Array(length).fill(0), bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n const encodedList = statusList.compressStatusList()\n const { statusListCredential } = await this.createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef)\n\n return {\n encodedList,\n statusListCredential,\n oauthStatusList: { bitsPerStatus },\n length,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n id,\n correlationId,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListIndex(args: UpdateStatusListIndexArgs, context: IRequiredContext): Promise<StatusListResult> {\n const { statusListCredential, value, expiresAt, keyRef } = args\n if (typeof statusListCredential !== 'string') {\n return Promise.reject('statusListCredential in neither JWT nor CWT')\n }\n\n const proofFormat = determineProofFormat(statusListCredential)\n const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n const { statusList, issuer, id } = decoded\n\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n if (index < 0 || index >= statusList.statusList.length) {\n throw new Error('Status list index out of bounds')\n }\n\n statusList.setStatus(index, value)\n const { statusListCredential: signedCredential, encodedList } = await this.createSignedStatusList(\n proofFormat,\n context,\n statusList,\n issuer,\n id,\n expiresAt,\n keyRef,\n )\n\n return {\n statusListCredential: signedCredential,\n encodedList,\n oauthStatusList: {\n bitsPerStatus: statusList.getBitsPerStatus(),\n },\n length: statusList.statusList.length,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n // FIXME: This still assumes only two values (boolean), whilst this list supports 8 bits max\n async updateStatusListFromEncodedList(args: UpdateStatusListFromEncodedListArgs, context: IRequiredContext): Promise<StatusListResult> {\n if (!args.oauthStatusList) {\n throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n }\n const { proofFormat, oauthStatusList, keyRef } = args\n const { bitsPerStatus, expiresAt } = oauthStatusList\n\n const { issuer, id } = getAssertedValues(args)\n const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n\n const listToUpdate = StatusList.decompressStatusList(args.encodedList, bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n // FIXME: See above.\n listToUpdate.setStatus(index, args.value ? 1 : 0)\n\n const { statusListCredential, encodedList } = await this.createSignedStatusList(\n proofFormat ?? DEFAULT_PROOF_FORMAT,\n context,\n listToUpdate,\n issuerString,\n id,\n expiresAt,\n keyRef,\n )\n\n return {\n encodedList,\n statusListCredential,\n oauthStatusList: {\n bitsPerStatus,\n expiresAt,\n },\n length: listToUpdate.statusList.length,\n type: StatusListType.OAuthStatusList,\n proofFormat: proofFormat ?? DEFAULT_PROOF_FORMAT,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n return `application/statuslist+${proofFormat === 'cbor' ? 'cwt' : 'jwt'}`\n }\n\n async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | StatusOAuth> {\n const { statusListCredential, statusListIndex } = args\n if (typeof statusListCredential !== 'string') {\n return Promise.reject('statusListCredential in neither JWT nor CWT')\n }\n\n const proofFormat = determineProofFormat(statusListCredential)\n const { statusList } = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n\n const index = typeof statusListIndex === 'number' ? statusListIndex : parseInt(statusListIndex)\n if (index < 0 || index >= statusList.statusList.length) {\n throw new Error('Status list index out of bounds')\n }\n\n return statusList.getStatus(index)\n }\n\n async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n const { statusListPayload } = args as { statusListPayload: CompactJWT | CWT }\n const proofFormat = determineProofFormat(statusListPayload)\n const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListPayload) : decodeStatusListCWT(statusListPayload)\n const { statusList, issuer, id, exp } = decoded\n\n return {\n id,\n encodedList: statusList.compressStatusList(),\n issuer,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n length: statusList.statusList.length,\n statusListCredential: statusListPayload,\n statuslistContentType: this.buildContentType(proofFormat),\n oauthStatusList: {\n bitsPerStatus: statusList.getBitsPerStatus(),\n ...(exp && { expiresAt: new Date(exp * 1000) }),\n },\n ...(args.correlationId && { correlationId: args.correlationId }),\n ...(args.driverType && { driverType: args.driverType }),\n }\n }\n\n private async createSignedStatusList(\n proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor',\n context: IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n ): Promise<SignedStatusListData> {\n switch (proofFormat) {\n case 'jwt': {\n return await createSignedJwt(context, statusList, issuerString, id, expiresAt, keyRef)\n }\n case 'cbor': {\n return await createSignedCbor(context, statusList, issuerString, id, expiresAt, keyRef)\n }\n default:\n throw new Error(`Invalid proof format '${proofFormat}' for OAuthStatusList`)\n }\n }\n}\n","import { CompactJWT, JoseSignatureAlgorithm } from '@sphereon/ssi-types'\nimport { createHeaderAndPayload, StatusList, StatusListJWTHeaderParameters, StatusListJWTPayload } from '@sd-jwt/jwt-status-list'\nimport base64url from 'base64url'\nimport { JWTPayload } from 'did-jwt'\nimport { IRequiredContext, SignedStatusListData } from '../../types'\nimport { DecodedStatusListPayload, resolveIdentifier } from './common'\nimport { TKeyType } from '@veramo/core'\nimport { ensureManagedIdentifierResult } from '@sphereon/ssi-sdk-ext.identifier-resolution'\n\nconst STATUS_LIST_JWT_TYP = 'statuslist+jwt'\n\nexport const createSignedJwt = async (\n context: IRequiredContext,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n): Promise<SignedStatusListData> => {\n const identifier = await resolveIdentifier(context, issuerString, keyRef)\n const resolution = await ensureManagedIdentifierResult(identifier, context)\n\n const payload: JWTPayload = {\n iss: issuerString,\n sub: id,\n iat: Math.floor(Date.now() / 1000),\n ...(expiresAt && { exp: Math.floor(expiresAt.getTime() / 1000) }),\n }\n\n const header: StatusListJWTHeaderParameters = {\n alg: getSigningAlgo(resolution.key.type),\n typ: STATUS_LIST_JWT_TYP,\n }\n const values = createHeaderAndPayload(statusList, payload, header)\n const signedJwt = await context.agent.jwtCreateJwsCompactSignature({\n issuer: { ...identifier, noIssPayloadUpdate: false },\n protectedHeader: values.header,\n payload: values.payload,\n })\n\n return {\n statusListCredential: signedJwt.jwt,\n encodedList: (values.payload as StatusListJWTPayload).status_list.lst,\n }\n}\n\nexport const decodeStatusListJWT = (jwt: CompactJWT): DecodedStatusListPayload => {\n const [, payloadBase64] = jwt.split('.')\n const payload = JSON.parse(base64url.decode(payloadBase64))\n\n if (!payload.iss || !payload.sub || !payload.status_list) {\n throw new Error('Missing required fields in JWT payload')\n }\n\n const statusList = StatusList.decompressStatusList(payload.status_list.lst, payload.status_list.bits)\n\n return {\n issuer: payload.iss,\n id: payload.sub,\n statusList,\n exp: payload.exp,\n ttl: payload.ttl,\n iat: payload.iat,\n }\n}\n\nexport const getSigningAlgo = (type: TKeyType): JoseSignatureAlgorithm => {\n switch (type) {\n case 'Ed25519':\n return JoseSignatureAlgorithm.EdDSA\n case 'Secp256k1':\n return JoseSignatureAlgorithm.ES256K\n case 'Secp256r1':\n return JoseSignatureAlgorithm.ES256\n case 'RSA':\n return JoseSignatureAlgorithm.RS256\n default:\n throw Error('Key type not yet supported')\n }\n}\n","import { IRequiredContext } from '../../types'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\n\nexport interface DecodedStatusListPayload {\n issuer: string\n id: string\n statusList: StatusList\n exp?: number\n ttl?: number\n iat: number\n}\n\nexport const resolveIdentifier = async (context: IRequiredContext, issuer: string, keyRef?: string) => {\n return await context.agent.identifierManagedGet({\n identifier: issuer,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true,\n ...(keyRef && { kmsKeyRef: keyRef }), // TODO the getDid resolver should look at this ASAP\n })\n}\n","import { StatusList } from '@sd-jwt/jwt-status-list'\nimport { deflate, inflate } from 'pako'\nimport * as cborpkg from '@sphereon/kmp-cbor'\nimport base64url from 'base64url'\nimport { IRequiredContext, SignedStatusListData } from '../../types'\nimport { DecodedStatusListPayload, resolveIdentifier } from './common'\nimport { BitsPerStatus } from '@sd-jwt/jwt-status-list'\n\nconst cbor = cborpkg.com.sphereon.cbor\nconst kmp = cborpkg.com.sphereon.kmp\nconst kotlin = cborpkg.kotlin\nconst decompressRawStatusList = (StatusList as any).decodeStatusList.bind(StatusList)\n\nconst CWT_CLAIMS = {\n SUBJECT: 2,\n ISSUER: 1,\n ISSUED_AT: 6,\n EXPIRATION: 4,\n TIME_TO_LIVE: 65534,\n STATUS_LIST: 65533,\n} as const\n\nexport const createSignedCbor = async (\n context: IRequiredContext,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n): Promise<SignedStatusListData> => {\n const identifier = await resolveIdentifier(context, issuerString, keyRef)\n\n const encodeStatusList = statusList.encodeStatusList()\n const compressedList = deflate(encodeStatusList, { level: 9 })\n const compressedBytes = new Int8Array(compressedList)\n\n const statusListMap = new cbor.CborMap(\n kotlin.collections.KtMutableMap.fromJsMap(\n new Map<cborpkg.com.sphereon.cbor.CborString, cborpkg.com.sphereon.cbor.CborItem<any>>([\n [new cbor.CborString('bits'), new cbor.CborUInt(kmp.LongKMP.fromNumber(statusList.getBitsPerStatus()))],\n [new cbor.CborString('lst'), new cbor.CborByteString(compressedBytes)],\n ]),\n ),\n )\n\n const protectedHeader = new cbor.CborMap(\n kotlin.collections.KtMutableMap.fromJsMap(\n new Map([[new cbor.CborUInt(kmp.LongKMP.fromNumber(16)), new cbor.CborString('statuslist+cwt')]]), // \"type\"\n ),\n )\n const protectedHeaderEncoded = cbor.Cbor.encode(protectedHeader)\n const claimsMap = buildClaimsMap(id, issuerString, statusListMap, expiresAt)\n const claimsEncoded: Int8Array = cbor.Cbor.encode(claimsMap)\n\n const signedCWT: string = await context.agent.keyManagerSign({\n keyRef: identifier.kmsKeyRef,\n data: base64url.encode(Buffer.from(claimsEncoded)), // TODO test on RN\n encoding: undefined,\n })\n\n const protectedHeaderEncodedInt8 = new Int8Array(protectedHeaderEncoded)\n const claimsEncodedInt8 = new Int8Array(claimsEncoded)\n const signatureBytes = base64url.decode(signedCWT)\n const signatureInt8 = new Int8Array(Buffer.from(signatureBytes))\n\n const cwtArrayElements: Array<cborpkg.com.sphereon.cbor.CborItem<any>> = [\n new cbor.CborByteString(protectedHeaderEncodedInt8),\n new cbor.CborByteString(claimsEncodedInt8),\n new cbor.CborByteString(signatureInt8),\n ]\n const cwtArray = new cbor.CborArray(kotlin.collections.KtMutableList.fromJsArray(cwtArrayElements))\n const cwtEncoded = cbor.Cbor.encode(cwtArray)\n const cwtBuffer = Buffer.from(cwtEncoded)\n return {\n statusListCredential: base64url.encode(cwtBuffer),\n encodedList: base64url.encode(compressedList as Buffer), // JS in @sd-jwt/jwt-status-list drops it in like this, so keep the same method\n }\n}\n\nfunction buildClaimsMap(\n id: string,\n issuerString: string,\n statusListMap: cborpkg.com.sphereon.cbor.CborMap<cborpkg.com.sphereon.cbor.CborString, cborpkg.com.sphereon.cbor.CborItem<any>>,\n expiresAt?: Date,\n) {\n const ttl = 65535 // FIXME figure out what value should be / come from and what the difference is with exp\n const claimsEntries: Array<[cborpkg.com.sphereon.cbor.CborUInt, cborpkg.com.sphereon.cbor.CborItem<any>]> = [\n [new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.SUBJECT)), new cbor.CborString(id)], // \"sub\"\n [new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUER)), new cbor.CborString(issuerString)], // \"iss\"\n [\n new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUED_AT)),\n new cbor.CborUInt(kmp.LongKMP.fromNumber(Math.floor(Date.now() / 1000))), // \"iat\"\n ],\n ]\n\n if (expiresAt) {\n claimsEntries.push([\n new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.EXPIRATION)),\n new cbor.CborUInt(kmp.LongKMP.fromNumber(Math.floor(expiresAt.getTime() / 1000))), // \"exp\"\n ])\n }\n\n if (ttl) {\n claimsEntries.push([\n new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.TIME_TO_LIVE)),\n new cbor.CborUInt(kmp.LongKMP.fromNumber(ttl)), // \"time to live\"\n ])\n }\n\n claimsEntries.push([new cbor.CborUInt(kmp.LongKMP.fromNumber(CWT_CLAIMS.STATUS_LIST)), statusListMap])\n\n const claimsMap = new cbor.CborMap(kotlin.collections.KtMutableMap.fromJsMap(new Map(claimsEntries)))\n return claimsMap\n}\n\nconst getCborValueFromMap = <T>(map: Map<cborpkg.com.sphereon.cbor.CborItem<any>, cborpkg.com.sphereon.cbor.CborItem<any>>, key: number): T => {\n const value = getCborOptionalValueFromMap<T>(map, key)\n if (value === undefined) {\n throw new Error(`Required claim ${key} not found`)\n }\n return value\n}\n\nconst getCborOptionalValueFromMap = <T>(\n map: Map<cborpkg.com.sphereon.cbor.CborItem<any>, cborpkg.com.sphereon.cbor.CborItem<any>>,\n key: number,\n): T | undefined | never => {\n const value = map.get(new cborpkg.com.sphereon.cbor.CborUInt(kmp.LongKMP.fromNumber(key)))\n if (!value) {\n return undefined\n }\n return value.value as T\n}\n\nexport const decodeStatusListCWT = (cwt: string): DecodedStatusListPayload => {\n const encodedCbor = base64url.toBuffer(cwt)\n const encodedCborArray = new Int8Array(encodedCbor)\n const decodedCbor = cborpkg.com.sphereon.cbor.Cbor.decode(encodedCborArray)\n\n if (!(decodedCbor instanceof cborpkg.com.sphereon.cbor.CborArray)) {\n throw new Error('Invalid CWT format: Expected a CBOR array')\n }\n\n const [, payload] = decodedCbor.value.asJsArrayView()\n if (!(payload instanceof cborpkg.com.sphereon.cbor.CborByteString)) {\n throw new Error('Invalid payload format: Expected a CBOR ByteString')\n }\n\n const claims = cborpkg.com.sphereon.cbor.Cbor.decode(payload.value)\n if (!(claims instanceof cborpkg.com.sphereon.cbor.CborMap)) {\n throw new Error('Invalid claims format: Expected a CBOR map')\n }\n\n const claimsMap = claims.value.asJsMapView()\n\n const statusListMap = claimsMap.get(new cborpkg.com.sphereon.cbor.CborUInt(kmp.LongKMP.fromNumber(65533))).value.asJsMapView()\n\n const bits = Number(statusListMap.get(new cborpkg.com.sphereon.cbor.CborString('bits')).value) as BitsPerStatus\n const decoded = new Uint8Array(statusListMap.get(new cborpkg.com.sphereon.cbor.CborString('lst')).value)\n const uint8Array = inflate(decoded)\n const rawStatusList = decompressRawStatusList(uint8Array, bits)\n const statusList = new StatusList(rawStatusList, bits)\n\n return {\n issuer: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.ISSUER),\n id: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.SUBJECT),\n statusList,\n iat: Number(getCborValueFromMap<number>(claimsMap, CWT_CLAIMS.ISSUED_AT)),\n exp: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.EXPIRATION),\n ttl: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.TIME_TO_LIVE),\n }\n}\n","import { IStatusList } from './IStatusList'\nimport { StatusList2021Implementation } from './StatusList2021'\nimport { OAuthStatusListImplementation } from './OAuthStatusList'\nimport { StatusListType } from '@sphereon/ssi-types'\n\nexport class StatusListFactory {\n private static instance: StatusListFactory\n private implementations: Map<StatusListType, IStatusList>\n\n private constructor() {\n this.implementations = new Map()\n this.implementations.set(StatusListType.StatusList2021, new StatusList2021Implementation())\n this.implementations.set(StatusListType.OAuthStatusList, new OAuthStatusListImplementation())\n }\n\n public static getInstance(): StatusListFactory {\n if (!StatusListFactory.instance) {\n StatusListFactory.instance = new StatusListFactory()\n }\n return StatusListFactory.instance\n }\n\n public getByType(type: StatusListType): IStatusList {\n const statusList = this.implementations.get(type)\n if (!statusList) {\n throw new Error(`No implementation found for status list type: ${type}`)\n }\n return statusList\n }\n}\n\nexport function getStatusListImplementation(type: StatusListType): IStatusList {\n return StatusListFactory.getInstance().getByType(type)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AC6BO,IAAKA,cAAAA,yBAAAA,cAAAA;;;;SAAAA;;AAML,IAAKC,aAAAA,yBAAAA,aAAAA;;;SAAAA;;;;AClCZ,IAAAC,oBAQO;AAGP,IAAAC,yBAA4B;;;ACZ5B,uBAQO;AACP,wBAA0B;AAEnB,SAASC,0BAA0BC,MAAqB;AAC7D,QAAMC,eAAeD,QAAQE,gCAAeC;AAC5C,MAAI,CAAC;IAACD,gCAAeC;IAAgBD,gCAAeE;IAAiBC,SAASJ,YAAAA,GAAe;AAC3F,UAAMK,MAAM,mBAAmBL,YAAAA,yBAAqC;EACtE;AACA,SAAOA;AACT;AANgBF;AAQT,SAASQ,iBAAoBC,MAAcC,OAAQ;AACxD,MAAIA,UAAUC,UAAaD,UAAU,MAAM;AACzC,UAAMH,MAAM,oBAAoBE,IAAAA,QAAY;EAC9C;AACA,SAAOC;AACT;AALgBF;AAOT,SAASI,kBAAkBC,MAAyF;AACzH,QAAMZ,OAAOD,0BAA0Ba,MAAMZ,IAAAA;AAC7C,QAAMa,KAAKN,iBAAiB,MAAMK,KAAKC,EAAE;AACzC,QAAMC,SAASP,iBAAiB,UAAUK,KAAKE,MAAM;AACrD,SAAO;IAAED;IAAIC;IAAQd;EAAK;AAC5B;AALgBW;AAOT,SAASI,oBAAsCC,cAAsBC,KAAM;AAChF,MAAI,EAAED,gBAAgBC,MAAM;AAC1B,UAAMX,MAAM,wDAAwDU,YAAAA,EAAc;EACpF;AACA,SAAOT,iBAAiBS,cAAeC,IAAYD,YAAAA,CAAa;AAClE;AALgBD;AAOhB,IAAMG,oBAAoB,oBAAIC,IAA6C;EACzE;IAACjB,gCAAeC;IAAgB;MAAC;MAAO;MAAO;;;EAC/C;IAACD,gCAAeE;IAAiB;MAAC;MAAO;;;CAC1C;AAEM,SAASgB,qBAAqBpB,MAAsBqB,aAAkC;AAC3F,QAAMC,kBAAkBJ,kBAAkBK,IAAIvB,IAAAA;AAC9C,MAAI,CAACsB,iBAAiBjB,SAASgB,WAAAA,GAAc;AAC3C,UAAMf,MAAM,yBAAyBe,WAAAA,0BAAqCrB,IAAAA,EAAM;EAClF;AACF;AALgBoB;AAOT,SAASI,wBAAwBC,YAAgC;AACtE,QAAMJ,cAAcK,qBAAqBD,UAAAA;AACzC,UAAQJ,aAAAA;IACN,KAAK;AACH,YAAMM,cAAgCC,6BAAUH,UAAAA;AAChD,YAAMI,OAAOC,OAAOD,KAAKF,OAAAA;AACzB,UAAIE,KAAKxB,SAAS,aAAA,GAAgB;AAChC,eAAOH,gCAAeE;MACxB,WAAWyB,KAAKxB,SAAS,IAAA,GAAO;AAC9B,eAAOH,gCAAeC;MACxB;AACA;IACF,KAAK;AACH,YAAM4B,UAAUC,kCAAiBC,oBAAoBR,UAAAA;AACrD,YAAMzB,OAAO+B,QAAQ/B,KAAKkC,KAAK,CAACC,MAAAA;AAC9B,eAAOL,OAAOM,OAAOlC,+BAAAA,EAAgBmC,KAAK,CAACC,eAAeH,EAAE9B,SAASiC,UAAAA,CAAAA;MACvE,CAAA;AACA,UAAI,CAACtC,MAAM;AACT,cAAM,IAAIM,MAAM,qCAAA;MAClB;AACA,aAAON,KAAKuC,QAAQ,cAAc,EAAA;IAEpC,KAAK;AACH,aAAOrC,gCAAeE;EAC1B;AAEA,QAAM,IAAIE,MAAM,2DAAA;AAClB;AA3BgBkB;AA6BT,SAASE,qBAAqBD,YAAgC;AACnE,QAAMzB,OAAuBgC,kCAAiBQ,mBAAmBf,UAAAA;AACjE,UAAQzB,MAAAA;IACN,KAAKyC,gCAAeC;AAClB,aAAO;IACT,KAAKD,gCAAeE;AAElB,aAAO;IACT,KAAKF,gCAAeG;AAClB,aAAO;IACT;AACE,YAAMtC,MAAM,0CAAA;EAChB;AACF;AAbgBoB;;;AC/EhB,IAAAmB,oBAA4H;AAE5H,4BAA2B;AAapB,IAAMC,sBAAsB;AAC5B,IAAMC,uBAAuB;AAE7B,IAAMC,+BAAN,MAAMA;EAlBb,OAkBaA;;;EACX,MAAMC,oBACJC,MACAC,SAC2B;AAC3B,UAAMC,SAASF,MAAME,UAAUN;AAC/B,UAAMO,cAAqCH,MAAMG,eAAeN;AAChEO,yBAAqBC,iCAAeC,gBAAgBH,WAAAA;AACpD,UAAMI,oBAAuCJ;AAE7C,UAAM,EAAEK,QAAQC,GAAE,IAAKT;AACvB,UAAMU,gBAAgBC,iBAAiB,iBAAiBX,KAAKU,aAAa;AAE1E,UAAME,OAAO,IAAIC,iCAAW;MAAEX;IAAO,CAAA;AACrC,UAAMY,cAAc,MAAMF,KAAKG,OAAM;AACrC,UAAMC,gBAAgB;AAEtB,UAAMC,uBAAuB,MAAM,KAAKC,2BACtC;MACE,GAAGlB;MACHc;MACAX,aAAaI;IACf,GACAN,OAAAA;AAGF,WAAO;MACLa;MACAG;MACAE,gBAAgB;QACdH;QACAI,mBAAmB;MACrB;MACAlB;MACAmB,MAAMhB,iCAAeC;MACrBH;MACAM;MACAC;MACAF;MACAc,uBAAuB,KAAKC,iBAAiBpB,WAAAA;IAC/C;EACF;EAEA,MAAMqB,sBACJxB,MACAC,SAC2B;AAC3B,UAAMwB,aAAazB,KAAKiB;AACxB,UAAMS,UAAUC,mCAAiBC,oBAAoBH,UAAAA;AACrD,UAAM,EAAEjB,QAAQqB,kBAAiB,IAAKH;AACtC,UAAMjB,KAAKE,iBAAiB,MAAMe,QAAQjB,EAAE;AAC5C,UAAMqB,kBAAkBC,oBAAoB,eAAeF,iBAAAA;AAE3D,UAAMG,QAAQ,OAAOhC,KAAKiC,oBAAoB,WAAWjC,KAAKiC,kBAAkBC,SAASlC,KAAKiC,eAAe;AAC7G,UAAME,aAAa,MAAMtB,iCAAWuB,OAAO;MAAEtB,aAAagB;IAAgB,CAAA;AAC1EK,eAAWE,UAAUL,OAAOhC,KAAKsC,SAAS,CAAA;AAC1C,UAAMxB,cAAc,MAAMqB,WAAWpB,OAAM;AAE3C,UAAMZ,cAAcwB,mCAAiBY,mBAAmBd,UAAAA,MAAgBe,iCAAeC,MAAM,QAAQ;AACrG,UAAMC,oBAAoB,MAAM,KAAKxB,2BACnC;MACE,GAAGlB;MACHS;MACAD;MACAM;MACAX;IACF,GACAF,OAAAA;AAGF,WAAO;MACLgB,sBAAsByB;MACtB5B;MACAK,gBAAgB;QACd,GAAI,mBAAmBU,oBAAoB;UAAEb,eAAea,kBAAkBb;QAAc,IAAI,CAAC;QACjGI,mBAAmB;MACrB;MACAlB,QAAQiC,WAAWjC,SAAS;MAC5BmB,MAAMhB,iCAAeC;MACrBH;MACAM;MACAD;MACAc,uBAAuB,KAAKC,iBAAiBpB,WAAAA;IAC/C;EACF;EAEA,MAAMwC,gCACJ3C,MACAC,SAC2B;AAC3B,QAAI,CAACD,KAAKmB,gBAAgB;AACxB,YAAM,IAAIyB,MAAM,yDAAA;IAClB;AACA,UAAMzC,cAAqCH,MAAMG,eAAeN;AAChEO,yBAAqBC,iCAAeC,gBAAgBH,WAAAA;AACpD,UAAMI,oBAAuCJ;AAE7C,UAAM,EAAEK,QAAQC,GAAE,IAAKoC,kBAAkB7C,IAAAA;AACzC,UAAMmC,aAAa,MAAMtB,iCAAWuB,OAAO;MAAEtB,aAAad,KAAKc;IAAY,CAAA;AAC3E,UAAMkB,QAAQ,OAAOhC,KAAKiC,oBAAoB,WAAWjC,KAAKiC,kBAAkBC,SAASlC,KAAKiC,eAAe;AAC7GE,eAAWE,UAAUL,OAAOhC,KAAKsC,KAAK;AAEtC,UAAMQ,iBAAiB,MAAMX,WAAWpB,OAAM;AAC9C,UAAMU,aAAa,MAAM,KAAKP,2BAC5B;MACET;MACAD;MACAM,aAAagC;MACb3C,aAAaI;MACbwC,QAAQ/C,KAAK+C;IACf,GACA9C,OAAAA;AAGF,WAAO;MACLoB,MAAMhB,iCAAeC;MACrBW,sBAAsBQ;MACtBX,aAAagC;MACb3B,gBAAgB;QACdH,eAAehB,KAAKmB,eAAeH;QACnCI,mBAAmB;MACrB;MACAlB,QAAQiC,WAAWjC;MACnBC,aAAaH,KAAKG,eAAe;MACjCM;MACAD;MACAc,uBAAuB,KAAKC,iBAAiBpB,WAAAA;IAC/C;EACF;EAEA,MAAM6C,iBAAiBhD,MAA0D;AAC/E,UAAM0B,UAAUC,mCAAiBC,oBAAoB5B,KAAKiB,oBAAoB;AAC9E,UAAM,EAAEY,kBAAiB,IAAKH;AAC9B,UAAMZ,cAAciB,oBAAoB,eAAeF,iBAAAA;AAEvD,UAAMM,aAAa,MAAMtB,iCAAWuB,OAAO;MAAEtB;IAAY,CAAA;AACzD,UAAMmC,SAASd,WAAWe,UAAU,OAAOlD,KAAKiC,oBAAoB,WAAWjC,KAAKiC,kBAAkBC,SAASlC,KAAKiC,eAAe,CAAA;AACnI,WAAOgB,SAASE,WAAWC,UAAUD,WAAWE;EAClD;EAEA,MAAMC,oBAAoBtD,MAA0D;AAClF,UAAM,EAAEuD,kBAAiB,IAAKvD;AAC9B,UAAM0B,UAAUC,mCAAiBC,oBAAoB2B,iBAAAA;AACrD,UAAM,EAAE/C,QAAQqB,kBAAiB,IAAKH;AACtC,UAAMjB,KAAKE,iBAAiB,MAAMe,QAAQjB,EAAE;AAC5C,UAAMK,cAAciB,oBAAoB,eAAeF,iBAAAA;AACvD,UAAM1B,cAAqCwB,mCAAiBY,mBAAmBgB,iBAAAA,MAAuBf,iCAAeC,MAAM,QAAQ;AAEnI,UAAMzB,gBAAgBe,oBAAoB,iBAAiBF,iBAAAA;AAC3D,UAAMjB,OAAO,MAAMC,iCAAWuB,OAAO;MAAEtB;IAAY,CAAA;AAEnD,WAAO;MACLL;MACAK;MACAN;MACAa,MAAMhB,iCAAeC;MACrBH;MACAD,QAAQU,KAAKV;MACbe,sBAAsBsC;MACtBjC,uBAAuB,KAAKC,iBAAiBpB,WAAAA;MAC7CgB,gBAAgB;QACdC,mBAAmB;QACnBJ;MACF;MACA,GAAIhB,KAAKU,iBAAiB;QAAEA,eAAeV,KAAKU;MAAc;MAC9D,GAAIV,KAAKwD,cAAc;QAAEA,YAAYxD,KAAKwD;MAAW;IACvD;EACF;EAEA,MAActC,2BACZlB,MAOAC,SAC+B;AAC/B,UAAMwD,aAAa,MAAMxD,QAAQyD,MAAMC,qBAAqB;MAC1DF,YAAY,OAAOzD,KAAKQ,WAAW,WAAWR,KAAKQ,SAASR,KAAKQ,OAAOC;MACxEmD,gBAAgB;MAChBC,4BAA4B;IAC9B,CAAA;AAEA,UAAMpC,aAAa;MACjB,YAAY;QAAC;QAA0C;;MACvDhB,IAAIT,KAAKS;MACTD,QAAQR,KAAKQ;MACba,MAAM;QAAC;QAAwB;;MAC/BQ,mBAAmB;QACjBpB,IAAIT,KAAKS;QACTY,MAAM;QACNL,eAAe;QACfF,aAAad,KAAKc;MACpB;IACF;AAEA,UAAMgD,uBAAuB,MAAM7D,QAAQyD,MAAMxC,2BAA2B;MAC1EO;MACAsB,QAAQ/C,KAAK+C,UAAUU,WAAWM;MAClC5D,aAAaH,KAAKG;MAClB6D,qBAAqB;IACvB,CAAA;AAEA,WAAOrC,mCAAiBsC,8BAA8BH,oBAAAA,EAA8CI;EACtG;EAEQ3C,iBAAiBpB,aAAiF;AACxG,YAAQA,aAAAA;MACN,KAAK;AACH,eAAO;MACT,KAAK;AACH,eAAO;MACT,KAAK;AACH,eAAO;MACT;AACE,cAAMyC,MAAM,6BAA6BzC,WAAAA,oBAA+B;IAC5E;EACF;AACF;;;AC/OA,IAAAgE,oBAA4E;AAa5E,IAAAC,0BAA2B;;;ACd3B,IAAAC,oBAAmD;AACnD,6BAAwG;AACxG,uBAAsB;;;ACUf,IAAMC,oBAAoB,8BAAOC,SAA2BC,QAAgBC,WAAAA;AACjF,SAAO,MAAMF,QAAQG,MAAMC,qBAAqB;IAC9CC,YAAYJ;IACZK,gBAAgB;IAChBC,4BAA4B;IAC5B,GAAIL,UAAU;MAAEM,WAAWN;IAAO;EACpC,CAAA;AACF,GAPiC;;;ADLjC,yBAA8C;AAE9C,IAAMO,sBAAsB;AAErB,IAAMC,kBAAkB,8BAC7BC,SACAC,YACAC,cACAC,IACAC,WACAC,WAAAA;AAEA,QAAMC,aAAa,MAAMC,kBAAkBP,SAASE,cAAcG,MAAAA;AAClE,QAAMG,aAAa,UAAMC,kDAA8BH,YAAYN,OAAAA;AAEnE,QAAMU,UAAsB;IAC1BC,KAAKT;IACLU,KAAKT;IACLU,KAAKC,KAAKC,MAAMC,KAAKC,IAAG,IAAK,GAAA;IAC7B,GAAIb,aAAa;MAAEc,KAAKJ,KAAKC,MAAMX,UAAUe,QAAO,IAAK,GAAA;IAAM;EACjE;AAEA,QAAMC,SAAwC;IAC5CC,KAAKC,eAAed,WAAWe,IAAIC,IAAI;IACvCC,KAAK3B;EACP;AACA,QAAM4B,aAASC,+CAAuB1B,YAAYS,SAASU,MAAAA;AAC3D,QAAMQ,YAAY,MAAM5B,QAAQ6B,MAAMC,6BAA6B;IACjEC,QAAQ;MAAE,GAAGzB;MAAY0B,oBAAoB;IAAM;IACnDC,iBAAiBP,OAAON;IACxBV,SAASgB,OAAOhB;EAClB,CAAA;AAEA,SAAO;IACLwB,sBAAsBN,UAAUO;IAChCC,aAAcV,OAAOhB,QAAiC2B,YAAYC;EACpE;AACF,GAjC+B;AAmCxB,IAAMC,sBAAsB,wBAACJ,QAAAA;AAClC,QAAM,CAAA,EAAGK,aAAAA,IAAiBL,IAAIM,MAAM,GAAA;AACpC,QAAM/B,UAAUgC,KAAKC,MAAMC,iBAAAA,QAAUC,OAAOL,aAAAA,CAAAA;AAE5C,MAAI,CAAC9B,QAAQC,OAAO,CAACD,QAAQE,OAAO,CAACF,QAAQ2B,aAAa;AACxD,UAAM,IAAIS,MAAM,wCAAA;EAClB;AAEA,QAAM7C,aAAa8C,kCAAWC,qBAAqBtC,QAAQ2B,YAAYC,KAAK5B,QAAQ2B,YAAYY,IAAI;AAEpG,SAAO;IACLlB,QAAQrB,QAAQC;IAChBR,IAAIO,QAAQE;IACZX;IACAiB,KAAKR,QAAQQ;IACbgC,KAAKxC,QAAQwC;IACbrC,KAAKH,QAAQG;EACf;AACF,GAlBmC;AAoB5B,IAAMS,iBAAiB,wBAACE,SAAAA;AAC7B,UAAQA,MAAAA;IACN,KAAK;AACH,aAAO2B,yCAAuBC;IAChC,KAAK;AACH,aAAOD,yCAAuBE;IAChC,KAAK;AACH,aAAOF,yCAAuBG;IAChC,KAAK;AACH,aAAOH,yCAAuBI;IAChC;AACE,YAAMT,MAAM,4BAAA;EAChB;AACF,GAb8B;;;AElE9B,IAAAU,0BAA2B;AAC3B,kBAAiC;AACjC,cAAyB;AACzB,IAAAC,oBAAsB;AAKtB,IAAMC,OAAeC,YAAIC,SAASF;AAClC,IAAMG,MAAcF,YAAIC,SAASC;AACjC,IAAMC,UAAiBA;AACvB,IAAMC,0BAA2BC,mCAAmBC,iBAAiBC,KAAKF,kCAAAA;AAE1E,IAAMG,aAAa;EACjBC,SAAS;EACTC,QAAQ;EACRC,WAAW;EACXC,YAAY;EACZC,cAAc;EACdC,aAAa;AACf;AAEO,IAAMC,mBAAmB,8BAC9BC,SACAC,YACAC,cACAC,IACAC,WACAC,WAAAA;AAEA,QAAMC,aAAa,MAAMC,kBAAkBP,SAASE,cAAcG,MAAAA;AAElE,QAAMG,mBAAmBP,WAAWO,iBAAgB;AACpD,QAAMC,qBAAiBC,qBAAQF,kBAAkB;IAAEG,OAAO;EAAE,CAAA;AAC5D,QAAMC,kBAAkB,IAAIC,UAAUJ,cAAAA;AAEtC,QAAMK,gBAAgB,IAAI/B,KAAKgC,QAC7B5B,QAAO6B,YAAYC,aAAaC,UAC9B,oBAAIC,IAAmF;IACrF;MAAC,IAAIpC,KAAKqC,WAAW,MAAA;MAAS,IAAIrC,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAWtB,WAAWuB,iBAAgB,CAAA,CAAA;;IAClG;MAAC,IAAIzC,KAAKqC,WAAW,KAAA;MAAQ,IAAIrC,KAAK0C,eAAeb,eAAAA;;GACtD,CAAA,CAAA;AAIL,QAAMc,kBAAkB,IAAI3C,KAAKgC,QAC/B5B,QAAO6B,YAAYC,aAAaC,UAC9B,oBAAIC,IAAI;IAAC;MAAC,IAAIpC,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW,EAAA,CAAA;MAAM,IAAIxC,KAAKqC,WAAW,gBAAA;;GAAmB,CAAA,CAAA;AAGpG,QAAMO,yBAAyB5C,KAAK6C,KAAKC,OAAOH,eAAAA;AAChD,QAAMI,YAAYC,eAAe5B,IAAID,cAAcY,eAAeV,SAAAA;AAClE,QAAM4B,gBAA2BjD,KAAK6C,KAAKC,OAAOC,SAAAA;AAElD,QAAMG,YAAoB,MAAMjC,QAAQkC,MAAMC,eAAe;IAC3D9B,QAAQC,WAAW8B;IACnBC,MAAMC,kBAAAA,QAAUT,OAAOU,OAAOC,KAAKR,aAAAA,CAAAA;IACnCS,UAAUC;EACZ,CAAA;AAEA,QAAMC,6BAA6B,IAAI9B,UAAUc,sBAAAA;AACjD,QAAMiB,oBAAoB,IAAI/B,UAAUmB,aAAAA;AACxC,QAAMa,iBAAiBP,kBAAAA,QAAUQ,OAAOb,SAAAA;AACxC,QAAMc,gBAAgB,IAAIlC,UAAU0B,OAAOC,KAAKK,cAAAA,CAAAA;AAEhD,QAAMG,mBAAmE;IACvE,IAAIjE,KAAK0C,eAAekB,0BAAAA;IACxB,IAAI5D,KAAK0C,eAAemB,iBAAAA;IACxB,IAAI7D,KAAK0C,eAAesB,aAAAA;;AAE1B,QAAME,WAAW,IAAIlE,KAAKmE,UAAU/D,QAAO6B,YAAYmC,cAAcC,YAAYJ,gBAAAA,CAAAA;AACjF,QAAMK,aAAatE,KAAK6C,KAAKC,OAAOoB,QAAAA;AACpC,QAAMK,YAAYf,OAAOC,KAAKa,UAAAA;AAC9B,SAAO;IACLE,sBAAsBjB,kBAAAA,QAAUT,OAAOyB,SAAAA;IACvCE,aAAalB,kBAAAA,QAAUT,OAAOpB,cAAAA;EAChC;AACF,GAvDgC;AAyDhC,SAASsB,eACP5B,IACAD,cACAY,eACAV,WAAgB;AAEhB,QAAMqD,MAAM;AACZ,QAAMC,gBAAsG;IAC1G;MAAC,IAAI3E,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWC,OAAO,CAAA;MAAI,IAAIV,KAAKqC,WAAWjB,EAAAA;;IACpF;MAAC,IAAIpB,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWE,MAAM,CAAA;MAAI,IAAIX,KAAKqC,WAAWlB,YAAAA;;IACnF;MACE,IAAInB,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWG,SAAS,CAAA;MAC7D,IAAIZ,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAWoC,KAAKC,MAAMC,KAAKC,IAAG,IAAK,GAAA,CAAA,CAAA;;;AAIrE,MAAI1D,WAAW;AACbsD,kBAAcK,KAAK;MACjB,IAAIhF,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWI,UAAU,CAAA;MAC9D,IAAIb,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAWoC,KAAKC,MAAMxD,UAAU4D,QAAO,IAAK,GAAA,CAAA,CAAA;KAC3E;EACH;AAEA,MAAIP,KAAK;AACPC,kBAAcK,KAAK;MACjB,IAAIhF,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWK,YAAY,CAAA;MAChE,IAAId,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAWkC,GAAAA,CAAAA;KAC1C;EACH;AAEAC,gBAAcK,KAAK;IAAC,IAAIhF,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW/B,WAAWM,WAAW,CAAA;IAAIgB;GAAc;AAErG,QAAMgB,YAAY,IAAI/C,KAAKgC,QAAQ5B,QAAO6B,YAAYC,aAAaC,UAAU,IAAIC,IAAIuC,aAAAA,CAAAA,CAAAA;AACrF,SAAO5B;AACT;AAlCSC;AAoCT,IAAMkC,sBAAsB,wBAAIC,KAA4FC,QAAAA;AAC1H,QAAMC,QAAQC,4BAA+BH,KAAKC,GAAAA;AAClD,MAAIC,UAAU1B,QAAW;AACvB,UAAM,IAAI4B,MAAM,kBAAkBH,GAAAA,YAAe;EACnD;AACA,SAAOC;AACT,GAN4B;AAQ5B,IAAMC,8BAA8B,wBAClCH,KACAC,QAAAA;AAEA,QAAMC,QAAQF,IAAIK,IAAI,IAAYvF,YAAIC,SAASF,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW4C,GAAAA,CAAAA,CAAAA;AACpF,MAAI,CAACC,OAAO;AACV,WAAO1B;EACT;AACA,SAAO0B,MAAMA;AACf,GAToC;AAW7B,IAAMI,sBAAsB,wBAACC,QAAAA;AAClC,QAAMC,cAAcpC,kBAAAA,QAAUqC,SAASF,GAAAA;AACvC,QAAMG,mBAAmB,IAAI/D,UAAU6D,WAAAA;AACvC,QAAMG,cAAsB7F,YAAIC,SAASF,KAAK6C,KAAKkB,OAAO8B,gBAAAA;AAE1D,MAAI,EAAEC,uBAA+B7F,YAAIC,SAASF,KAAKmE,YAAY;AACjE,UAAM,IAAIoB,MAAM,2CAAA;EAClB;AAEA,QAAM,CAAA,EAAGQ,OAAAA,IAAWD,YAAYT,MAAMW,cAAa;AACnD,MAAI,EAAED,mBAA2B9F,YAAIC,SAASF,KAAK0C,iBAAiB;AAClE,UAAM,IAAI6C,MAAM,oDAAA;EAClB;AAEA,QAAMU,SAAiBhG,YAAIC,SAASF,KAAK6C,KAAKkB,OAAOgC,QAAQV,KAAK;AAClE,MAAI,EAAEY,kBAA0BhG,YAAIC,SAASF,KAAKgC,UAAU;AAC1D,UAAM,IAAIuD,MAAM,4CAAA;EAClB;AAEA,QAAMxC,YAAYkD,OAAOZ,MAAMa,YAAW;AAE1C,QAAMnE,gBAAgBgB,UAAUyC,IAAI,IAAYvF,YAAIC,SAASF,KAAKsC,SAASnC,IAAIoC,QAAQC,WAAW,KAAA,CAAA,CAAA,EAAS6C,MAAMa,YAAW;AAE5H,QAAMC,OAAOC,OAAOrE,cAAcyD,IAAI,IAAYvF,YAAIC,SAASF,KAAKqC,WAAW,MAAA,CAAA,EAASgD,KAAK;AAC7F,QAAMgB,UAAU,IAAIC,WAAWvE,cAAcyD,IAAI,IAAYvF,YAAIC,SAASF,KAAKqC,WAAW,KAAA,CAAA,EAAQgD,KAAK;AACvG,QAAMkB,iBAAaC,qBAAQH,OAAAA;AAC3B,QAAMI,gBAAgBpG,wBAAwBkG,YAAYJ,IAAAA;AAC1D,QAAMjF,aAAa,IAAIZ,mCAAWmG,eAAeN,IAAAA;AAEjD,SAAO;IACLO,QAAQxB,oBAA4BnC,WAAWtC,WAAWE,MAAM;IAChES,IAAI8D,oBAA4BnC,WAAWtC,WAAWC,OAAO;IAC7DQ;IACAyF,KAAKP,OAAOlB,oBAA4BnC,WAAWtC,WAAWG,SAAS,CAAA;IACvEgG,KAAKtB,4BAAoCvC,WAAWtC,WAAWI,UAAU;IACzE6D,KAAKY,4BAAoCvC,WAAWtC,WAAWK,YAAY;EAC7E;AACF,GArCmC;;;AHhH5B,IAAM+F,0BAA0B;AAChC,IAAMC,uBAAsB;AAC5B,IAAMC,wBAAuB;AAE7B,IAAMC,gCAAN,MAAMA;EAzBb,OAyBaA;;;EACX,MAAMC,oBAAoBC,MAA4BC,SAAsD;AAC1G,QAAI,CAACD,KAAKE,iBAAiB;AACzB,YAAM,IAAIC,MAAM,+DAAA;IAClB;AAEA,UAAMC,cAAcJ,MAAMI,eAAeP;AACzC,UAAM,EAAEQ,QAAQC,IAAIJ,iBAAiBK,OAAM,IAAKP;AAChD,UAAM,EAAEQ,eAAeC,UAAS,IAAKP;AACrC,UAAMQ,SAASV,KAAKU,UAAUd;AAC9B,UAAMe,eAAe,OAAON,WAAW,WAAWA,SAASA,OAAOC;AAClE,UAAMM,gBAAgBC,iBAAiB,iBAAiBb,KAAKY,aAAa;AAE1E,UAAME,aAAa,IAAIC,mCAAW,IAAIC,MAAMN,MAAAA,EAAQO,KAAK,CAAA,GAAIT,iBAAiBb,uBAAAA;AAC9E,UAAMuB,cAAcJ,WAAWK,mBAAkB;AACjD,UAAM,EAAEC,qBAAoB,IAAK,MAAM,KAAKC,uBAAuBjB,aAAaH,SAASa,YAAYH,cAAcL,IAAIG,WAAWF,MAAAA;AAElI,WAAO;MACLW;MACAE;MACAlB,iBAAiB;QAAEM;MAAc;MACjCE;MACAY,MAAMC,iCAAeC;MACrBpB;MACAE;MACAM;MACAP;MACAoB,uBAAuB,KAAKC,iBAAiBtB,WAAAA;IAC/C;EACF;EAEA,MAAMuB,sBAAsB3B,MAAiCC,SAAsD;AACjH,UAAM,EAAEmB,sBAAsBQ,OAAOnB,WAAWF,OAAM,IAAKP;AAC3D,QAAI,OAAOoB,yBAAyB,UAAU;AAC5C,aAAOS,QAAQC,OAAO,6CAAA;IACxB;AAEA,UAAM1B,cAAc2B,qBAAqBX,oBAAAA;AACzC,UAAMY,UAAU5B,gBAAgB,QAAQ6B,oBAAoBb,oBAAAA,IAAwBc,oBAAoBd,oBAAAA;AACxG,UAAM,EAAEN,YAAYT,QAAQC,GAAE,IAAK0B;AAEnC,UAAMG,QAAQ,OAAOnC,KAAKoC,oBAAoB,WAAWpC,KAAKoC,kBAAkBC,SAASrC,KAAKoC,eAAe;AAC7G,QAAID,QAAQ,KAAKA,SAASrB,WAAWA,WAAWJ,QAAQ;AACtD,YAAM,IAAIP,MAAM,iCAAA;IAClB;AAEAW,eAAWwB,UAAUH,OAAOP,KAAAA;AAC5B,UAAM,EAAER,sBAAsBmB,kBAAkBrB,YAAW,IAAK,MAAM,KAAKG,uBACzEjB,aACAH,SACAa,YACAT,QACAC,IACAG,WACAF,MAAAA;AAGF,WAAO;MACLa,sBAAsBmB;MACtBrB;MACAhB,iBAAiB;QACfM,eAAeM,WAAW0B,iBAAgB;MAC5C;MACA9B,QAAQI,WAAWA,WAAWJ;MAC9BY,MAAMC,iCAAeC;MACrBpB;MACAE;MACAD;MACAoB,uBAAuB,KAAKC,iBAAiBtB,WAAAA;IAC/C;EACF;;EAGA,MAAMqC,gCAAgCzC,MAA2CC,SAAsD;AACrI,QAAI,CAACD,KAAKE,iBAAiB;AACzB,YAAM,IAAIC,MAAM,+DAAA;IAClB;AACA,UAAM,EAAEC,aAAaF,iBAAiBK,OAAM,IAAKP;AACjD,UAAM,EAAEQ,eAAeC,UAAS,IAAKP;AAErC,UAAM,EAAEG,QAAQC,GAAE,IAAKoC,kBAAkB1C,IAAAA;AACzC,UAAMW,eAAe,OAAON,WAAW,WAAWA,SAASA,OAAOC;AAElE,UAAMqC,eAAe5B,mCAAW6B,qBAAqB5C,KAAKkB,aAAaV,iBAAiBb,uBAAAA;AACxF,UAAMwC,QAAQ,OAAOnC,KAAKoC,oBAAoB,WAAWpC,KAAKoC,kBAAkBC,SAASrC,KAAKoC,eAAe;AAE7GO,iBAAaL,UAAUH,OAAOnC,KAAK4B,QAAQ,IAAI,CAAA;AAE/C,UAAM,EAAER,sBAAsBF,YAAW,IAAK,MAAM,KAAKG,uBACvDjB,eAAeP,uBACfI,SACA0C,cACAhC,cACAL,IACAG,WACAF,MAAAA;AAGF,WAAO;MACLW;MACAE;MACAlB,iBAAiB;QACfM;QACAC;MACF;MACAC,QAAQiC,aAAa7B,WAAWJ;MAChCY,MAAMC,iCAAeC;MACrBpB,aAAaA,eAAeP;MAC5BS;MACAD;MACAoB,uBAAuB,KAAKC,iBAAiBtB,WAAAA;IAC/C;EACF;EAEQsB,iBAAiBtB,aAAiF;AACxG,WAAO,0BAA0BA,gBAAgB,SAAS,QAAQ,KAAA;EACpE;EAEA,MAAMyC,iBAAiB7C,MAA2D;AAChF,UAAM,EAAEoB,sBAAsBgB,gBAAe,IAAKpC;AAClD,QAAI,OAAOoB,yBAAyB,UAAU;AAC5C,aAAOS,QAAQC,OAAO,6CAAA;IACxB;AAEA,UAAM1B,cAAc2B,qBAAqBX,oBAAAA;AACzC,UAAM,EAAEN,WAAU,IAAKV,gBAAgB,QAAQ6B,oBAAoBb,oBAAAA,IAAwBc,oBAAoBd,oBAAAA;AAE/G,UAAMe,QAAQ,OAAOC,oBAAoB,WAAWA,kBAAkBC,SAASD,eAAAA;AAC/E,QAAID,QAAQ,KAAKA,SAASrB,WAAWA,WAAWJ,QAAQ;AACtD,YAAM,IAAIP,MAAM,iCAAA;IAClB;AAEA,WAAOW,WAAWgC,UAAUX,KAAAA;EAC9B;EAEA,MAAMY,oBAAoB/C,MAA0D;AAClF,UAAM,EAAEgD,kBAAiB,IAAKhD;AAC9B,UAAMI,cAAc2B,qBAAqBiB,iBAAAA;AACzC,UAAMhB,UAAU5B,gBAAgB,QAAQ6B,oBAAoBe,iBAAAA,IAAqBd,oBAAoBc,iBAAAA;AACrG,UAAM,EAAElC,YAAYT,QAAQC,IAAI2C,IAAG,IAAKjB;AAExC,WAAO;MACL1B;MACAY,aAAaJ,WAAWK,mBAAkB;MAC1Cd;MACAiB,MAAMC,iCAAeC;MACrBpB;MACAM,QAAQI,WAAWA,WAAWJ;MAC9BU,sBAAsB4B;MACtBvB,uBAAuB,KAAKC,iBAAiBtB,WAAAA;MAC7CF,iBAAiB;QACfM,eAAeM,WAAW0B,iBAAgB;QAC1C,GAAIS,OAAO;UAAExC,WAAW,IAAIyC,KAAKD,MAAM,GAAA;QAAM;MAC/C;MACA,GAAIjD,KAAKY,iBAAiB;QAAEA,eAAeZ,KAAKY;MAAc;MAC9D,GAAIZ,KAAKmD,cAAc;QAAEA,YAAYnD,KAAKmD;MAAW;IACvD;EACF;EAEA,MAAc9B,uBACZjB,aACAH,SACAa,YACAH,cACAL,IACAG,WACAF,QAC+B;AAC/B,YAAQH,aAAAA;MACN,KAAK,OAAO;AACV,eAAO,MAAMgD,gBAAgBnD,SAASa,YAAYH,cAAcL,IAAIG,WAAWF,MAAAA;MACjF;MACA,KAAK,QAAQ;AACX,eAAO,MAAM8C,iBAAiBpD,SAASa,YAAYH,cAAcL,IAAIG,WAAWF,MAAAA;MAClF;MACA;AACE,cAAM,IAAIJ,MAAM,yBAAyBC,WAAAA,uBAAkC;IAC/E;EACF;AACF;;;AI1MA,IAAAkD,oBAA+B;AAExB,IAAMC,oBAAN,MAAMA,mBAAAA;EAJb,OAIaA;;;EACX,OAAeC;EACPC;EAER,cAAsB;AACpB,SAAKA,kBAAkB,oBAAIC,IAAAA;AAC3B,SAAKD,gBAAgBE,IAAIC,iCAAeC,gBAAgB,IAAIC,6BAAAA,CAAAA;AAC5D,SAAKL,gBAAgBE,IAAIC,iCAAeG,iBAAiB,IAAIC,8BAAAA,CAAAA;EAC/D;EAEA,OAAcC,cAAiC;AAC7C,QAAI,CAACV,mBAAkBC,UAAU;AAC/BD,yBAAkBC,WAAW,IAAID,mBAAAA;IACnC;AACA,WAAOA,mBAAkBC;EAC3B;EAEOU,UAAUC,MAAmC;AAClD,UAAMC,aAAa,KAAKX,gBAAgBY,IAAIF,IAAAA;AAC5C,QAAI,CAACC,YAAY;AACf,YAAM,IAAIE,MAAM,iDAAiDH,IAAAA,EAAM;IACzE;AACA,WAAOC;EACT;AACF;AAEO,SAASG,4BAA4BJ,MAAoB;AAC9D,SAAOZ,kBAAkBU,YAAW,EAAGC,UAAUC,IAAAA;AACnD;AAFgBI;;;APHhB,eAAsBC,0BAA0BC,MAAsC;AACpF,QAAMC,MAAMC,iBAAiB,wBAAwBF,KAAKG,oBAAoB;AAC9E,MAAI;AACF,UAAMC,WAAW,MAAMC,MAAMJ,GAAAA;AAC7B,QAAI,CAACG,SAASE,IAAI;AAChB,YAAMC,MAAM,wBAAwBN,GAAAA,0BAA6BG,SAASI,MAAM,MAAMJ,SAASK,UAAU,EAAE;IAC7G;AACA,UAAMC,iBAAiB,MAAMN,SAASO,KAAI;AAC1C,QAAID,eAAeE,KAAI,EAAGC,WAAW,GAAA,GAAM;AACzC,aAAOC,KAAKC,MAAML,cAAAA;IACpB;AACA,WAAOA;EACT,SAASM,OAAO;AACdC,YAAQD,MAAM,wBAAwBf,GAAAA,qCAAwCe,iBAAiBT,QAAQS,MAAME,UAAUJ,KAAKK,UAAUH,KAAAA,CAAAA,EAAQ;AAC9I,UAAMA;EACR;AACF;AAhBsBjB;AAkBf,SAASqB,2BAA2BpB,MAO1C;AACC,SAAO,OAAOqB,YAAiCC,WAAAA;AAC7C,UAAMC,SAAS,MAAMC,yBAAyB;MAC5C,GAAGxB;MACHyB,gBAAgBzB,KAAKyB;MACrBJ;MACAK,sBAAsB1B,KAAK0B;IAC7B,CAAA;AAEA,WAAO;MACLC,SAAS,CAACJ,OAAOK,YAAYL,OAAOP;MACpC,GAAIO,OAAOP,SAAS;QAAEA,OAAOO,OAAOP;MAAM;IAC5C;EACF;AACF;AArBgBI;AA2BT,SAASS,yBAAyB7B,MAKxC;AACC,QAAM,EAAE8B,2BAA2BC,4BAA4BC,uBAAuBN,qBAAoB,IAAK1B;AAC/G,SAAO,CAACA,UAAAA;AAQN,WAAOwB,yBAAyB;MAC9B,GAAGxB;MACH8B;MACAC;MACAC;MACAN;IACF,CAAA;EACF;AACF;AAvBgBG;AAyBhB,eAAsBL,yBAAyBxB,MAQ9C;AACC,QAAM+B,6BAA6B/B,KAAK+B,8BAA8B;AACtE,QAAMC,wBAAwBhC,KAAKgC,yBAAyB;AAC5D,QAAMC,UAAUC,mCAAiBC,oBAAoBnC,KAAKqB,UAAU;AACpE,MAAI,EAAE,sBAAsBY,YAAY,CAACA,QAAQG,kBAAkB;AACjE,QAAIpC,KAAK8B,2BAA2B;AAClC,YAAMd,QAAQ;AACdC,cAAQoB,IAAIrB,KAAAA;AACZ,aAAO;QAAEY,UAAU;QAAOZ;MAAM;IAClC;AACA,WAAO;MAAEY,UAAU;IAAK;EAC1B;AACA,MAAI,sBAAsBK,WAAWA,QAAQG,kBAAkB;AAC7D,QAAIH,QAAQG,iBAAiBE,SAAS,uBAAuB;AAC3D,iBAAOC,oCAAY;QAAE,GAAGvC;QAAM+B;QAA4BC;MAAsB,CAAA;IAClF,WAAWhC,MAAM0B,sBAAsB;AACrC,YAAMV,QAAQ,0BAA0BiB,QAAQG,iBAAiBE,IAAI;AACrErB,cAAQoB,IAAIrB,KAAAA;AACZ,aAAO;QAAEY,UAAU;QAAOZ;MAAM;IAClC,OAAO;AACLC,cAAQoB,IAAI,uCAAuCJ,QAAQG,iBAAiBE,IAAI,gCAAgC;IAClH;EACF;AACA,SAAO;IAAEV,UAAU;EAAK;AAC1B;AAhCsBJ;AAkCtB,eAAsBgB,mCAAmCxC,MAMxD;AACC,SAAOyC,yCAAyC;IAC9C,GAAGzC;IACHG,sBAAsB,MAAMJ,0BAA0BC,IAAAA;EACxD,CAAA;AACF;AAXsBwC;AAatB,eAAsBC,yCAAyCzC,MAM9D;AACC,QAAM0C,iBAAiCC,wBAAwB3C,KAAKG,oBAAoB;AACxF,QAAMyC,iBAAiBC,4BAA4BH,cAAAA;AACnD,SAAOE,eAAeE,iBAAiB9C,IAAAA;AACzC;AAVsByC;AAYtB,eAAsBM,oBACpB/C,MACAgD,SAAiE;AAEjE,QAAM,EAAEV,KAAI,IAAKW,kBAAkBjD,IAAAA;AACnC,QAAM4C,iBAAiBC,4BAA4BP,IAAAA;AACnD,SAAOM,eAAeG,oBAAoB/C,MAAMgD,OAAAA;AAClD;AAPsBD;AAStB,eAAsBG,0CACpBlD,MACAgD,SAAiE;AAEjE,QAAM3B,aAAanB,iBAAiB,wBAAwBF,KAAKG,oBAAoB;AACrF,QAAMuC,iBAAiCC,wBAAwBtB,UAAAA;AAC/D,QAAMuB,iBAAiBC,4BAA4BH,cAAAA;AACnD,SAAOE,eAAeO,sBAAsBnD,MAAMgD,OAAAA;AACpD;AARsBE;AAWtB,eAAsBE,8BAA8BpD,MAInD;AACC,QAAMqB,aAAanB,iBAAiB,wBAAwBF,KAAKG,oBAAoB;AAErF,MAAIuC;AACJ,QAAMW,iBAAiBnB,mCAAiBoB,mBAAmBjC,UAAAA;AAC3D,MAAIgC,mBAAmBE,iCAAeC,KAAK;AACzC,UAAM,CAACC,MAAAA,IAAUpC,WAAWqC,MAAM,GAAA;AAClC,UAAMC,gBAAgB7C,KAAKC,MAAM6C,OAAOC,KAAKJ,QAAQ,QAAA,EAAUK,SAAQ,CAAA;AAEvE,QAAIH,cAAcI,QAAQ,kBAAkB;AAC1CrB,uBAAiBsB,iCAAeC;IAClC;EACF,WAAWZ,mBAAmBE,iCAAeW,UAAU;AACrDxB,qBAAiBsB,iCAAeC;EAElC;AACA,MAAI,CAACvB,gBAAgB;AACnB,UAAMT,UAAUC,mCAAiBC,oBAAoBd,UAAAA;AACrD,UAAMiB,OAAOL,QAAQK,KAAK6B,KAAK,CAACC,MAAMA,EAAEC,SAAS,gBAAA,KAAqBD,EAAEC,SAAS,kBAAA,CAAA;AACjF,QAAI,CAAC/B,MAAM;AACT,YAAM,IAAI/B,MAAM,qCAAA;IAClB;AACAmC,qBAAiBJ,KAAKgC,QAAQ,cAAc,EAAA;EAC9C;AAEA,QAAM1B,iBAAiBC,4BAA4BH,cAAAA;AACnD,SAAO,MAAME,eAAe2B,oBAAoB;IAC9CC,mBAAmBnD;IACnBoD,eAAezE,KAAKyE;IACpBC,YAAY1E,KAAK0E;EACnB,CAAA;AACF;AAnCsBtB;AAqCtB,eAAsBuB,qCACpB3E,MACAgD,SAAiE;AAEjE,QAAM,EAAEV,KAAI,IAAKpC,iBAAiB,QAAQF,IAAAA;AAC1C,QAAM4C,iBAAiBC,4BAA4BP,IAAAA;AACnD,SAAOM,eAAegC,gCAAgC5E,MAAMgD,OAAAA;AAC9D;AAPsB2B;AAStB,eAAsBE,qCACpB7E,MACAgD,SAAiE;AAEjE,QAAM,EAAE8B,QAAQC,IAAIzC,KAAI,IAAKW,kBAAkBjD,IAAAA;AAC/C,QAAMgF,aAAa,MAAMhC,QAAQiC,MAAMC,qBAAqB;IAC1DF,YAAY,OAAOF,WAAW,WAAWA,SAASA,OAAOC;IACzDI,gBAAgB;IAChBC,4BAA4B;EAC9B,CAAA;AACA,QAAMC,cAAqCrF,MAAMqF,eAAe;AAChEC,uBAAqBtB,iCAAeuB,gBAAgBF,WAAAA;AACpD,QAAMG,oBAAuCH;AAE7C,QAAMI,cAAcvF,iBAAiB,eAAeF,KAAKyF,WAAW;AACpE,QAAMC,gBAAgBxF,iBAAiB,iBAAiBF,KAAK0F,aAAa;AAC1E,QAAMrE,aAAa;IACjB,YAAY;MAAC;MAA0C;;IACvD0D;IACAD;;IAEAxC,MAAM;MAAC;MAAwB,GAAGA,IAAAA;;IAClCqD,mBAAmB;MACjBZ;MACAzC;MACAoD;MACAD;IACF;EACF;AAEA,QAAMG,uBAAuB,MAAM5C,QAAQiC,MAAMY,2BAA2B;IAC1ExE;IACAyE,QAAQd,WAAWe;IACnBV,aAAaG;IACbQ,qBAAqB;EACvB,CAAA;AAEA,SAAO9D,mCAAiB+D,8BAA8BL,oBAAAA,EAA8CM;AACtG;AAtCsBrB;","names":["StatusOAuth","Status2021","import_ssi_types","import_vc_status_list","getAssertedStatusListType","type","assertedType","StatusListType","StatusList2021","OAuthStatusList","includes","Error","getAssertedValue","name","value","undefined","getAssertedValues","args","id","issuer","getAssertedProperty","propertyName","obj","ValidProofTypeMap","Map","assertValidProofType","proofFormat","validProofTypes","get","determineStatusListType","credential","determineProofFormat","payload","jwtDecode","keys","Object","uniform","CredentialMapper","toUniformCredential","find","t","values","some","statusType","replace","detectDocumentType","DocumentFormat","JWT","MSO_MDOC","JSONLD","import_ssi_types","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","StatusList2021Implementation","createNewStatusList","args","context","length","proofFormat","assertValidProofType","StatusListType","StatusList2021","veramoProofFormat","issuer","id","correlationId","getAssertedValue","list","StatusList","encodedList","encode","statusPurpose","statusListCredential","createVerifiableCredential","statusList2021","indexingDirection","type","statuslistContentType","buildContentType","updateStatusListIndex","credential","uniform","CredentialMapper","toUniformCredential","credentialSubject","origEncodedList","getAssertedProperty","index","statusListIndex","parseInt","statusList","decode","setStatus","value","detectDocumentType","DocumentFormat","JWT","updatedCredential","updateStatusListFromEncodedList","Error","getAssertedValues","newEncodedList","keyRef","checkStatusIndex","status","getStatus","Status2021","Invalid","Valid","toStatusListDetails","statusListPayload","driverType","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","verifiableCredential","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original","import_ssi_types","import_jwt_status_list","import_ssi_types","resolveIdentifier","context","issuer","keyRef","agent","identifierManagedGet","identifier","vmRelationship","offlineWhenNoDIDRegistered","kmsKeyRef","STATUS_LIST_JWT_TYP","createSignedJwt","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","resolution","ensureManagedIdentifierResult","payload","iss","sub","iat","Math","floor","Date","now","exp","getTime","header","alg","getSigningAlgo","key","type","typ","values","createHeaderAndPayload","signedJwt","agent","jwtCreateJwsCompactSignature","issuer","noIssPayloadUpdate","protectedHeader","statusListCredential","jwt","encodedList","status_list","lst","decodeStatusListJWT","payloadBase64","split","JSON","parse","base64url","decode","Error","StatusList","decompressStatusList","bits","ttl","JoseSignatureAlgorithm","EdDSA","ES256K","ES256","RS256","import_jwt_status_list","import_base64url","cbor","com","sphereon","kmp","kotlin","decompressRawStatusList","StatusList","decodeStatusList","bind","CWT_CLAIMS","SUBJECT","ISSUER","ISSUED_AT","EXPIRATION","TIME_TO_LIVE","STATUS_LIST","createSignedCbor","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","encodeStatusList","compressedList","deflate","level","compressedBytes","Int8Array","statusListMap","CborMap","collections","KtMutableMap","fromJsMap","Map","CborString","CborUInt","LongKMP","fromNumber","getBitsPerStatus","CborByteString","protectedHeader","protectedHeaderEncoded","Cbor","encode","claimsMap","buildClaimsMap","claimsEncoded","signedCWT","agent","keyManagerSign","kmsKeyRef","data","base64url","Buffer","from","encoding","undefined","protectedHeaderEncodedInt8","claimsEncodedInt8","signatureBytes","decode","signatureInt8","cwtArrayElements","cwtArray","CborArray","KtMutableList","fromJsArray","cwtEncoded","cwtBuffer","statusListCredential","encodedList","ttl","claimsEntries","Math","floor","Date","now","push","getTime","getCborValueFromMap","map","key","value","getCborOptionalValueFromMap","Error","get","decodeStatusListCWT","cwt","encodedCbor","toBuffer","encodedCborArray","decodedCbor","payload","asJsArrayView","claims","asJsMapView","bits","Number","decoded","Uint8Array","uint8Array","inflate","rawStatusList","issuer","iat","exp","DEFAULT_BITS_PER_STATUS","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","OAuthStatusListImplementation","createNewStatusList","args","context","oauthStatusList","Error","proofFormat","issuer","id","keyRef","bitsPerStatus","expiresAt","length","issuerString","correlationId","getAssertedValue","statusList","StatusList","Array","fill","encodedList","compressStatusList","statusListCredential","createSignedStatusList","type","StatusListType","OAuthStatusList","statuslistContentType","buildContentType","updateStatusListIndex","value","Promise","reject","determineProofFormat","decoded","decodeStatusListJWT","decodeStatusListCWT","index","statusListIndex","parseInt","setStatus","signedCredential","getBitsPerStatus","updateStatusListFromEncodedList","getAssertedValues","listToUpdate","decompressStatusList","checkStatusIndex","getStatus","toStatusListDetails","statusListPayload","exp","Date","driverType","createSignedJwt","createSignedCbor","import_ssi_types","StatusListFactory","instance","implementations","Map","set","StatusListType","StatusList2021","StatusList2021Implementation","OAuthStatusList","OAuthStatusListImplementation","getInstance","getByType","type","statusList","get","Error","getStatusListImplementation","fetchStatusListCredential","args","url","getAssertedValue","statusListCredential","response","fetch","ok","Error","status","statusText","responseAsText","text","trim","startsWith","JSON","parse","error","console","message","stringify","statusPluginStatusFunction","credential","didDoc","result","checkStatusForCredential","documentLoader","errorUnknownListType","revoked","verified","vcLibCheckStatusFunction","mandatoryCredentialStatus","verifyStatusListCredential","verifyMatchingIssuers","uniform","CredentialMapper","toUniformCredential","credentialStatus","log","type","checkStatus","simpleCheckStatusFromStatusListUrl","checkStatusIndexFromStatusListCredential","statusListType","determineStatusListType","implementation","getStatusListImplementation","checkStatusIndex","createNewStatusList","context","getAssertedValues","updateStatusIndexFromStatusListCredential","updateStatusListIndex","statusListCredentialToDetails","documentFormat","detectDocumentType","DocumentFormat","JWT","header","split","decodedHeader","Buffer","from","toString","typ","StatusListType","OAuthStatusList","MSO_MDOC","find","t","includes","replace","toStatusListDetails","statusListPayload","correlationId","driverType","updateStatusListIndexFromEncodedList","updateStatusListFromEncodedList","statusList2021ToVerifiableCredential","issuer","id","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","proofFormat","assertValidProofType","StatusList2021","veramoProofFormat","encodedList","statusPurpose","credentialSubject","verifiableCredential","createVerifiableCredential","keyRef","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/functions.ts","../src/utils.ts","../src/impl/StatusList2021.ts","../src/impl/OAuthStatusList.ts","../src/impl/encoding/jwt.ts","../src/impl/encoding/common.ts","../src/impl/encoding/cbor.ts","../src/impl/StatusListFactory.ts"],"sourcesContent":["/**\n */\n\nexport * from './types'\nexport * from './functions'\n","import type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n type ICredential,\n type ICredentialStatus,\n type IIssuer,\n type IVerifiableCredential,\n type OrPromise,\n type CredentialProofFormat,\n type StatusListCredential,\n StatusListCredentialIdMode,\n StatusListDriverType,\n type StatusListIndexingDirection,\n StatusListType,\n type StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport type {\n CredentialPayload,\n IAgentContext,\n ICredentialIssuer,\n ICredentialPlugin,\n ICredentialVerifier,\n IKeyManager,\n IPluginMethodMap,\n} from '@veramo/core'\nimport { DataSource } from 'typeorm'\nimport type { BitsPerStatus } from '@sd-jwt/jwt-status-list'\nimport type { SdJwtVcPayload } from '@sd-jwt/sd-jwt-vc'\nimport type { StatusListOpts } from '@sphereon/oid4vci-common'\n\nexport enum StatusOAuth {\n Valid = 0,\n Invalid = 1,\n Suspended = 2,\n}\n\nexport enum Status2021 {\n Valid = 0,\n Invalid = 1,\n}\n\nexport type StatusList2021Args = {\n indexingDirection: StatusListIndexingDirection\n statusPurpose?: StatusPurpose2021\n // todo: validFrom and validUntil\n}\n\nexport type OAuthStatusListArgs = {\n bitsPerStatus?: BitsPerStatus\n expiresAt?: Date\n}\n\nexport type BaseCreateNewStatusListArgs = {\n type: StatusListType\n id: string\n issuer: string | IIssuer\n correlationId?: string\n length?: number\n proofFormat?: CredentialProofFormat\n keyRef?: string\n statusList2021?: StatusList2021Args\n oauthStatusList?: OAuthStatusListArgs\n driverType?: StatusListDriverType\n}\n\nexport type UpdateStatusList2021Args = {\n statusPurpose: StatusPurpose2021\n}\n\nexport type UpdateOAuthStatusListArgs = {\n bitsPerStatus: BitsPerStatus\n expiresAt?: Date\n}\n\nexport interface UpdateStatusListFromEncodedListArgs {\n type?: StatusListType\n statusListIndex: number | string\n value: boolean\n proofFormat?: CredentialProofFormat\n keyRef?: string\n correlationId?: string\n encodedList: string\n issuer: string | IIssuer\n id: string\n statusList2021?: UpdateStatusList2021Args\n oauthStatusList?: UpdateOAuthStatusListArgs\n}\n\nexport interface UpdateStatusListFromStatusListCredentialArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n keyRef?: string\n statusListIndex: number | string\n value: number | Status2021 | StatusOAuth\n}\n\nexport interface StatusListResult {\n encodedList: string\n statusListCredential: StatusListCredential\n length: number\n type: StatusListType\n proofFormat: CredentialProofFormat\n id: string\n statuslistContentType: string\n issuer: string | IIssuer\n statusList2021?: StatusList2021Details\n oauthStatusList?: OAuthStatusDetails\n\n // These cannot be deduced from the VC, so they are present when callers pass in these values as params\n correlationId?: string\n driverType?: StatusListDriverType\n credentialIdMode?: StatusListCredentialIdMode\n}\n\ninterface StatusList2021Details {\n indexingDirection: StatusListIndexingDirection\n statusPurpose?: StatusPurpose2021\n}\n\ninterface OAuthStatusDetails {\n bitsPerStatus?: BitsPerStatus\n expiresAt?: Date\n}\n\nexport interface StatusList2021EntryCredentialStatus extends ICredentialStatus {\n type: 'StatusList2021Entry'\n statusPurpose: StatusPurpose2021\n statusListIndex: string\n statusListCredential: string\n}\n\nexport interface StatusListOAuthEntryCredentialStatus extends ICredentialStatus {\n type: 'OAuthStatusListEntry'\n bitsPerStatus: number\n statusListIndex: string\n statusListCredential: string\n expiresAt?: Date\n}\n\nexport interface StatusList2021ToVerifiableCredentialArgs {\n issuer: string | IIssuer\n id: string\n type?: StatusListType\n proofFormat?: CredentialProofFormat\n keyRef?: string\n encodedList: string\n statusPurpose: StatusPurpose2021\n}\n\nexport interface CreateStatusListArgs {\n issuer: string | IIssuer\n id: string\n proofFormat?: CredentialProofFormat\n keyRef?: string\n correlationId?: string\n length?: number\n statusList2021?: StatusList2021Args\n oauthStatusList?: OAuthStatusListArgs\n}\n\nexport interface UpdateStatusListIndexArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n statusListIndex: number | string\n value: number | Status2021 | StatusOAuth\n keyRef?: string\n expiresAt?: Date\n}\n\nexport interface CheckStatusIndexArgs {\n statusListCredential: StatusListCredential // | CompactJWT\n statusListIndex: string | number\n}\n\nexport interface ToStatusListDetailsArgs {\n statusListPayload: StatusListCredential\n correlationId?: string\n driverType?: StatusListDriverType\n}\n\n/**\n * The interface definition for a plugin that can add statuslist info to a credential\n *\n * @remarks Please see {@link https://www.w3.org/TR/vc-data-model | W3C Verifiable Credentials data model}\n *\n * @beta This API is likely to change without a BREAKING CHANGE notice\n */\nexport interface IStatusListPlugin extends IPluginMethodMap {\n /**\n * Create a new status list\n *\n * @param args Status list information like type and size\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n *\n * @returns - The details of the newly created status list\n */\n slCreateStatusList(args: CreateNewStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n /**\n * Ensures status list info like index and list id is added to a credential\n *\n * @param args - Arguments necessary to add the statuslist info.\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n *\n * @returns - a promise that resolves to the credential now with status support\n *\n * @beta This API is likely to change without a BREAKING CHANGE notice\n */\n slAddStatusToCredential(args: IAddStatusToCredentialArgs, context: IRequiredContext): Promise<CredentialWithStatusSupport>\n\n slAddStatusToSdJwtCredential(args: IAddStatusToSdJwtCredentialArgs, context: IRequiredContext): Promise<SdJwtVcPayload>\n\n /**\n * Get the status list using the configured driver for the SL. Normally a correlationId or id should suffice. Optionally accepts a dbName/datasource\n * @param args\n * @param context\n */\n slGetStatusList(args: GetStatusListArgs, context: IRequiredContext): Promise<StatusListResult>\n\n /**\n * Import status lists when noy yet present\n *\n * @param imports Array of status list information like type and size\n * @param context - This reserved param is automatically added and handled by the framework, *do not override*\n */\n slImportStatusLists(imports: Array<CreateNewStatusListArgs>, context: IRequiredContext): Promise<boolean>\n}\n\nexport type CreateNewStatusListFuncArgs = BaseCreateNewStatusListArgs\n\nexport type CreateNewStatusListArgs = BaseCreateNewStatusListArgs & {\n dbName?: string\n dataSource?: OrPromise<DataSource>\n isDefault?: boolean\n}\n\nexport type IAddStatusToCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n credential: CredentialWithStatusSupport\n}\n\nexport type IAddStatusToSdJwtCredentialArgs = Omit<IIssueCredentialStatusOpts, 'dataSource'> & {\n credential: SdJwtVcPayload\n}\n\nexport interface IIssueCredentialStatusOpts {\n dataSource?: DataSource\n statusLists?: Array<StatusListOpts>\n credentialId?: string // An id to use for the credential. Normally should be set as the crdential.id value\n value?: string\n}\n\nexport type GetStatusListArgs = {\n id?: string\n correlationId?: string\n dataSource?: OrPromise<DataSource>\n dbName?: string\n}\n\nexport type CredentialWithStatusSupport = ICredential | CredentialPayload | IVerifiableCredential\n\nexport type SignedStatusListData = {\n statusListCredential: StatusListCredential\n encodedList: string\n}\n\nexport type IRequiredPlugins = ICredentialPlugin & IIdentifierResolution\nexport type IRequiredContext = IAgentContext<ICredentialIssuer & ICredentialVerifier & IIdentifierResolution & IKeyManager & ICredentialPlugin>\n","import type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n CredentialMapper,\n DocumentFormat,\n type CredentialProofFormat,\n type StatusListCredential,\n StatusListDriverType,\n StatusListType,\n type StatusPurpose2021,\n} from '@sphereon/ssi-types'\nimport type { CredentialStatus, DIDDocument, IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\n\nimport { checkStatus } from '@sphereon/vc-status-list'\n\n// @ts-ignore\nimport { CredentialJwtOrJSON, StatusMethod } from 'credential-status'\nimport {\n CreateNewStatusListFuncArgs,\n Status2021,\n StatusList2021ToVerifiableCredentialArgs,\n StatusListResult,\n StatusOAuth,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from './types'\nimport { assertValidProofType, determineStatusListType, getAssertedValue, getAssertedValues } from './utils'\nimport { getStatusListImplementation } from './impl/StatusListFactory'\n\nexport async function fetchStatusListCredential(args: { statusListCredential: string }): Promise<StatusListCredential> {\n const url = getAssertedValue('statusListCredential', args.statusListCredential)\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw Error(`Fetching status list ${url} resulted in an error: ${response.status} : ${response.statusText}`)\n }\n const responseAsText = await response.text()\n if (responseAsText.trim().startsWith('{')) {\n return JSON.parse(responseAsText) as StatusListCredential\n }\n return responseAsText as StatusListCredential\n } catch (error) {\n console.error(`Fetching status list ${url} resulted in an unexpected error: ${error instanceof Error ? error.message : JSON.stringify(error)}`)\n throw error\n }\n}\n\nexport function statusPluginStatusFunction(args: {\n documentLoader: any\n suite: any\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}): StatusMethod {\n return async (credential: CredentialJwtOrJSON, didDoc: DIDDocument): Promise<CredentialStatus> => {\n const result = await checkStatusForCredential({\n ...args,\n documentLoader: args.documentLoader,\n credential: credential as StatusListCredential,\n errorUnknownListType: args.errorUnknownListType,\n })\n\n return {\n revoked: !result.verified || result.error,\n ...(result.error && { error: result.error }),\n }\n }\n}\n\n/**\n * Function that can be used together with @digitalbazar/vc and @digitialcredentials/vc\n * @param args\n */\nexport function vcLibCheckStatusFunction(args: {\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}) {\n const { mandatoryCredentialStatus, verifyStatusListCredential, verifyMatchingIssuers, errorUnknownListType } = args\n return (args: {\n credential: StatusListCredential\n documentLoader: any\n suite: any\n }): Promise<{\n verified: boolean\n error?: any\n }> => {\n return checkStatusForCredential({\n ...args,\n mandatoryCredentialStatus,\n verifyStatusListCredential,\n verifyMatchingIssuers,\n errorUnknownListType,\n })\n }\n}\n\nexport async function checkStatusForCredential(args: {\n credential: StatusListCredential\n documentLoader: any\n suite: any\n mandatoryCredentialStatus?: boolean\n verifyStatusListCredential?: boolean\n verifyMatchingIssuers?: boolean\n errorUnknownListType?: boolean\n}): Promise<{ verified: boolean; error?: any }> {\n const verifyStatusListCredential = args.verifyStatusListCredential ?? true\n const verifyMatchingIssuers = args.verifyMatchingIssuers ?? true\n const uniform = CredentialMapper.toUniformCredential(args.credential)\n if (!('credentialStatus' in uniform) || !uniform.credentialStatus) {\n if (args.mandatoryCredentialStatus) {\n const error = 'No credential status object found in the Verifiable Credential and it is mandatory'\n console.log(error)\n return { verified: false, error }\n }\n return { verified: true }\n }\n if ('credentialStatus' in uniform && uniform.credentialStatus) {\n if (uniform.credentialStatus.type === 'StatusList2021Entry') {\n return checkStatus({ ...args, verifyStatusListCredential, verifyMatchingIssuers })\n } else if (args?.errorUnknownListType) {\n const error = `Credential status type ${uniform.credentialStatus.type} is not supported, and check status has been configured to not allow for that`\n console.log(error)\n return { verified: false, error }\n } else {\n console.log(`Skipped verification of status type ${uniform.credentialStatus.type} as we do not support it (yet)`)\n }\n }\n return { verified: true }\n}\n\nexport async function simpleCheckStatusFromStatusListUrl(args: {\n statusListCredential: string\n statusPurpose?: StatusPurpose2021\n type?: StatusListType | 'StatusList2021Entry'\n id?: string\n statusListIndex: string\n}): Promise<number | Status2021 | StatusOAuth> {\n return checkStatusIndexFromStatusListCredential({\n ...args,\n statusListCredential: await fetchStatusListCredential(args),\n })\n}\n\nexport async function checkStatusIndexFromStatusListCredential(args: {\n statusListCredential: StatusListCredential\n statusPurpose?: StatusPurpose2021\n type?: StatusListType | 'StatusList2021Entry'\n id?: string\n statusListIndex: string | number\n}): Promise<number | Status2021 | StatusOAuth> {\n const statusListType: StatusListType = determineStatusListType(args.statusListCredential)\n const implementation = getStatusListImplementation(statusListType)\n return implementation.checkStatusIndex(args)\n}\n\nexport async function createNewStatusList(\n args: CreateNewStatusListFuncArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const { type } = getAssertedValues(args)\n const implementation = getStatusListImplementation(type)\n return implementation.createNewStatusList(args, context)\n}\n\nexport async function updateStatusIndexFromStatusListCredential(\n args: UpdateStatusListIndexArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n const statusListType: StatusListType = determineStatusListType(credential)\n const implementation = getStatusListImplementation(statusListType)\n return implementation.updateStatusListIndex(args, context)\n}\n\n// Keeping helper function for backward compatibility\nexport async function statusListCredentialToDetails(args: {\n statusListCredential: StatusListCredential\n correlationId?: string\n driverType?: StatusListDriverType\n}): Promise<StatusListResult> {\n const credential = getAssertedValue('statusListCredential', args.statusListCredential)\n\n let statusListType: StatusListType | undefined\n const documentFormat = CredentialMapper.detectDocumentType(credential)\n if (documentFormat === DocumentFormat.JWT) {\n const [header] = credential.split('.')\n const decodedHeader = JSON.parse(Buffer.from(header, 'base64').toString())\n\n if (decodedHeader.typ === 'statuslist+jwt') {\n statusListType = StatusListType.OAuthStatusList\n }\n } else if (documentFormat === DocumentFormat.MSO_MDOC) {\n statusListType = StatusListType.OAuthStatusList\n // TODO check CBOR content?\n }\n if (!statusListType) {\n const uniform = CredentialMapper.toUniformCredential(credential)\n const type = uniform.type.find((t) => t.includes('StatusList2021') || t.includes('OAuth2StatusList'))\n if (!type) {\n throw new Error('Invalid status list credential type')\n }\n statusListType = type.replace('Credential', '') as StatusListType\n }\n\n const implementation = getStatusListImplementation(statusListType)\n return await implementation.toStatusListDetails({\n statusListPayload: credential,\n correlationId: args.correlationId,\n driverType: args.driverType,\n })\n}\n\nexport async function updateStatusListIndexFromEncodedList(\n args: UpdateStatusListFromEncodedListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListResult> {\n const { type } = getAssertedValue('type', args)\n const implementation = getStatusListImplementation(type!)\n return implementation.updateStatusListFromEncodedList(args, context)\n}\n\nexport async function statusList2021ToVerifiableCredential(\n args: StatusList2021ToVerifiableCredentialArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n): Promise<StatusListCredential> {\n const { issuer, id, type } = getAssertedValues(args)\n const identifier = await context.agent.identifierManagedGet({\n identifier: typeof issuer === 'string' ? issuer : issuer.id,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true, // FIXME Fix identifier resolution for EBSI\n })\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? 'lds'\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const encodedList = getAssertedValue('encodedList', args.encodedList)\n const statusPurpose = getAssertedValue('statusPurpose', args.statusPurpose)\n const credential = {\n '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n id,\n issuer,\n // issuanceDate: \"2021-03-10T04:24:12.164Z\",\n type: ['VerifiableCredential', `${type}Credential`],\n credentialSubject: {\n id,\n type,\n statusPurpose,\n encodedList,\n },\n }\n // TODO copy statuslist schema to local and disable fetching remote contexts\n const verifiableCredential = await context.agent.createVerifiableCredential({\n credential,\n keyRef: identifier.kmsKeyRef,\n proofFormat: veramoProofFormat,\n fetchRemoteContexts: true,\n })\n\n return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n}\n","import {\n CredentialMapper,\n type IIssuer,\n type CredentialProofFormat,\n StatusListType,\n StatusListType as StatusListTypeW3C,\n type StatusListCredential,\n DocumentFormat,\n} from '@sphereon/ssi-types'\nimport { jwtDecode } from 'jwt-decode'\n\nexport function getAssertedStatusListType(type?: StatusListType) {\n const assertedType = type ?? StatusListType.StatusList2021\n if (![StatusListType.StatusList2021, StatusListType.OAuthStatusList].includes(assertedType)) {\n throw Error(`StatusList type ${assertedType} is not supported (yet)`)\n }\n return assertedType\n}\n\nexport function getAssertedValue<T>(name: string, value: T): NonNullable<T> {\n if (value === undefined || value === null) {\n throw Error(`Missing required ${name} value`)\n }\n return value\n}\n\nexport function getAssertedValues(args: { issuer: string | IIssuer; id: string; type?: StatusListTypeW3C | StatusListType }) {\n const type = getAssertedStatusListType(args?.type)\n const id = getAssertedValue('id', args.id)\n const issuer = getAssertedValue('issuer', args.issuer)\n return { id, issuer, type }\n}\n\nexport function getAssertedProperty<T extends object>(propertyName: string, obj: T): NonNullable<any> {\n if (!(propertyName in obj)) {\n throw Error(`The input object does not contain required property: ${propertyName}`)\n }\n return getAssertedValue(propertyName, (obj as any)[propertyName])\n}\n\nconst ValidProofTypeMap = new Map<StatusListType, CredentialProofFormat[]>([\n [StatusListType.StatusList2021, ['jwt', 'lds', 'EthereumEip712Signature2021']],\n [StatusListType.OAuthStatusList, ['jwt', 'cbor']],\n])\n\nexport function assertValidProofType(type: StatusListType, proofFormat: CredentialProofFormat) {\n const validProofTypes = ValidProofTypeMap.get(type)\n if (!validProofTypes?.includes(proofFormat)) {\n throw Error(`Invalid proof format '${proofFormat}' for status list type ${type}`)\n }\n}\n\nexport function determineStatusListType(credential: StatusListCredential): StatusListType {\n const proofFormat = determineProofFormat(credential)\n switch (proofFormat) {\n case 'jwt':\n const payload: StatusListCredential = jwtDecode(credential as string)\n const keys = Object.keys(payload)\n if (keys.includes('status_list')) {\n return StatusListType.OAuthStatusList\n } else if (keys.includes('vc')) {\n return StatusListType.StatusList2021\n }\n break\n case 'lds':\n const uniform = CredentialMapper.toUniformCredential(credential)\n const type = uniform.type.find((t) => {\n return Object.values(StatusListType).some((statusType) => t.includes(statusType))\n })\n if (!type) {\n throw new Error('Invalid status list credential type')\n }\n return type.replace('Credential', '') as StatusListType\n\n case 'cbor':\n return StatusListType.OAuthStatusList\n }\n\n throw new Error('Cannot determine status list type from credential payload')\n}\n\nexport function determineProofFormat(credential: StatusListCredential): CredentialProofFormat {\n const type: DocumentFormat = CredentialMapper.detectDocumentType(credential)\n switch (type) {\n case DocumentFormat.JWT:\n return 'jwt'\n case DocumentFormat.MSO_MDOC:\n // Not really mdoc, just assume Cbor for now, I'd need to decode at least the header to what type of Cbor we have\n return 'cbor'\n case DocumentFormat.JSONLD:\n return 'lds'\n default:\n throw Error('Cannot determine credential payload type')\n }\n}\n","import type { IAgentContext, ICredentialPlugin, ProofFormat as VeramoProofFormat } from '@veramo/core'\nimport type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport {\n CredentialMapper,\n DocumentFormat,\n type IIssuer,\n type CredentialProofFormat,\n type StatusListCredential,\n StatusListType,\n} from '@sphereon/ssi-types'\n\nimport { StatusList } from '@sphereon/vc-status-list'\nimport type { IStatusList } from './IStatusList'\nimport type {\n CheckStatusIndexArgs,\n CreateStatusListArgs,\n StatusListResult,\n ToStatusListDetailsArgs,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from '../types'\n\nimport { Status2021 } from '../types'\nimport { assertValidProofType, getAssertedProperty, getAssertedValue, getAssertedValues } from '../utils'\n\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'lds' as VeramoProofFormat\n\nexport class StatusList2021Implementation implements IStatusList {\n async createNewStatusList(\n args: CreateStatusListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n const length = args?.length ?? DEFAULT_LIST_LENGTH\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const { issuer, id } = args\n const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n const list = new StatusList({ length })\n const encodedList = await list.encode()\n const statusPurpose = 'revocation'\n\n const statusListCredential = await this.createVerifiableCredential(\n {\n ...args,\n encodedList,\n proofFormat: veramoProofFormat,\n },\n context,\n )\n\n return {\n encodedList,\n statusListCredential: statusListCredential,\n statusList2021: {\n statusPurpose,\n indexingDirection: 'rightToLeft',\n },\n length,\n type: StatusListType.StatusList2021,\n proofFormat,\n id,\n correlationId,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListIndex(\n args: UpdateStatusListIndexArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n const credential = args.statusListCredential\n const uniform = CredentialMapper.toUniformCredential(credential)\n const { issuer, credentialSubject } = uniform\n const id = getAssertedValue('id', uniform.id)\n const origEncodedList = getAssertedProperty('encodedList', credentialSubject)\n\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n const statusList = await StatusList.decode({ encodedList: origEncodedList })\n statusList.setStatus(index, args.value != 0)\n const encodedList = await statusList.encode()\n\n const proofFormat = CredentialMapper.detectDocumentType(credential) === DocumentFormat.JWT ? 'jwt' : 'lds'\n const updatedCredential = await this.createVerifiableCredential(\n {\n ...args,\n id,\n issuer,\n encodedList,\n proofFormat: proofFormat,\n },\n context,\n )\n\n return {\n statusListCredential: updatedCredential,\n encodedList,\n statusList2021: {\n ...('statusPurpose' in credentialSubject ? { statusPurpose: credentialSubject.statusPurpose } : {}),\n indexingDirection: 'rightToLeft',\n },\n length: statusList.length - 1,\n type: StatusListType.StatusList2021,\n proofFormat: proofFormat,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListFromEncodedList(\n args: UpdateStatusListFromEncodedListArgs,\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListResult> {\n if (!args.statusList2021) {\n throw new Error('statusList2021 options required for type StatusList2021')\n }\n const proofFormat: CredentialProofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n assertValidProofType(StatusListType.StatusList2021, proofFormat)\n const veramoProofFormat: VeramoProofFormat = proofFormat as VeramoProofFormat\n\n const { issuer, id } = getAssertedValues(args)\n const statusList = await StatusList.decode({ encodedList: args.encodedList })\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n statusList.setStatus(index, args.value)\n\n const newEncodedList = await statusList.encode()\n const credential = await this.createVerifiableCredential(\n {\n id,\n issuer,\n encodedList: newEncodedList,\n proofFormat: veramoProofFormat,\n keyRef: args.keyRef,\n },\n context,\n )\n\n return {\n type: StatusListType.StatusList2021,\n statusListCredential: credential,\n encodedList: newEncodedList,\n statusList2021: {\n statusPurpose: args.statusList2021.statusPurpose,\n indexingDirection: 'rightToLeft',\n },\n length: statusList.length,\n proofFormat: args.proofFormat ?? 'lds',\n id: id,\n issuer: issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | Status2021> {\n const uniform = CredentialMapper.toUniformCredential(args.statusListCredential)\n const { credentialSubject } = uniform\n const encodedList = getAssertedProperty('encodedList', credentialSubject)\n\n const statusList = await StatusList.decode({ encodedList })\n const status = statusList.getStatus(typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex))\n return status ? Status2021.Invalid : Status2021.Valid\n }\n\n async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n const { statusListPayload } = args\n const uniform = CredentialMapper.toUniformCredential(statusListPayload)\n const { issuer, credentialSubject } = uniform\n const id = getAssertedValue('id', uniform.id)\n const encodedList = getAssertedProperty('encodedList', credentialSubject)\n const proofFormat: CredentialProofFormat = CredentialMapper.detectDocumentType(statusListPayload) === DocumentFormat.JWT ? 'jwt' : 'lds'\n\n const statusPurpose = getAssertedProperty('statusPurpose', credentialSubject)\n const list = await StatusList.decode({ encodedList })\n\n return {\n id,\n encodedList,\n issuer,\n type: StatusListType.StatusList2021,\n proofFormat,\n length: list.length,\n statusListCredential: statusListPayload,\n statuslistContentType: this.buildContentType(proofFormat),\n statusList2021: {\n indexingDirection: 'rightToLeft',\n statusPurpose,\n },\n ...(args.correlationId && { correlationId: args.correlationId }),\n ...(args.driverType && { driverType: args.driverType }),\n }\n }\n\n private async createVerifiableCredential(\n args: {\n id: string\n issuer: string | IIssuer\n encodedList: string\n proofFormat: VeramoProofFormat\n keyRef?: string\n },\n context: IAgentContext<ICredentialPlugin & IIdentifierResolution>,\n ): Promise<StatusListCredential> {\n const identifier = await context.agent.identifierManagedGet({\n identifier: typeof args.issuer === 'string' ? args.issuer : args.issuer.id,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true,\n })\n\n const credential = {\n '@context': ['https://www.w3.org/2018/credentials/v1', 'https://w3id.org/vc/status-list/2021/v1'],\n id: args.id,\n issuer: args.issuer,\n type: ['VerifiableCredential', 'StatusList2021Credential'],\n credentialSubject: {\n id: args.id,\n type: 'StatusList2021',\n statusPurpose: 'revocation',\n encodedList: args.encodedList,\n },\n }\n\n const verifiableCredential = await context.agent.createVerifiableCredential({\n credential,\n keyRef: args.keyRef ?? identifier.kmsKeyRef,\n proofFormat: args.proofFormat,\n fetchRemoteContexts: true,\n })\n\n return CredentialMapper.toWrappedVerifiableCredential(verifiableCredential as StatusListCredential).original as StatusListCredential\n }\n\n private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n switch (proofFormat) {\n case 'jwt':\n return `application/statuslist+jwt`\n case 'cbor':\n return `application/statuslist+cwt`\n case 'lds':\n return 'application/statuslist+ld+json'\n default:\n throw Error(`Unsupported content type '${proofFormat}' for status lists`)\n }\n }\n}\n","import type { IAgentContext, ICredentialPlugin, IKeyManager } from '@veramo/core'\nimport { type CompactJWT, type CWT, type CredentialProofFormat, StatusListType } from '@sphereon/ssi-types'\nimport type {\n CheckStatusIndexArgs,\n CreateStatusListArgs,\n SignedStatusListData,\n StatusListResult,\n StatusOAuth,\n ToStatusListDetailsArgs,\n UpdateStatusListFromEncodedListArgs,\n UpdateStatusListIndexArgs,\n} from '../types'\nimport { determineProofFormat, getAssertedValue, getAssertedValues } from '../utils'\nimport type { IStatusList } from './IStatusList'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\nimport type { IJwtService } from '@sphereon/ssi-sdk-ext.jwt-service'\nimport type { IIdentifierResolution } from '@sphereon/ssi-sdk-ext.identifier-resolution'\nimport { createSignedJwt, decodeStatusListJWT } from './encoding/jwt'\nimport { createSignedCbor, decodeStatusListCWT } from './encoding/cbor'\n\ntype IRequiredContext = IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>\n\nexport const DEFAULT_BITS_PER_STATUS = 1 // 1 bit is sufficient for 0x00 - \"VALID\" 0x01 - \"INVALID\" saving space in the process\nexport const DEFAULT_LIST_LENGTH = 250000\nexport const DEFAULT_PROOF_FORMAT = 'jwt' as CredentialProofFormat\n\nexport class OAuthStatusListImplementation implements IStatusList {\n async createNewStatusList(args: CreateStatusListArgs, context: IRequiredContext): Promise<StatusListResult> {\n if (!args.oauthStatusList) {\n throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n }\n\n const proofFormat = args?.proofFormat ?? DEFAULT_PROOF_FORMAT\n const { issuer, id, oauthStatusList, keyRef } = args\n const { bitsPerStatus, expiresAt } = oauthStatusList\n const length = args.length ?? DEFAULT_LIST_LENGTH\n const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n const correlationId = getAssertedValue('correlationId', args.correlationId)\n\n const statusList = new StatusList(new Array(length).fill(0), bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n const encodedList = statusList.compressStatusList()\n const { statusListCredential } = await this.createSignedStatusList(proofFormat, context, statusList, issuerString, id, expiresAt, keyRef)\n\n return {\n encodedList,\n statusListCredential,\n oauthStatusList: { bitsPerStatus },\n length,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n id,\n correlationId,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n async updateStatusListIndex(args: UpdateStatusListIndexArgs, context: IRequiredContext): Promise<StatusListResult> {\n const { statusListCredential, value, expiresAt, keyRef } = args\n if (typeof statusListCredential !== 'string') {\n return Promise.reject('statusListCredential in neither JWT nor CWT')\n }\n\n const proofFormat = determineProofFormat(statusListCredential)\n const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n const { statusList, issuer, id } = decoded\n\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n if (index < 0 || index >= statusList.statusList.length) {\n throw new Error('Status list index out of bounds')\n }\n\n statusList.setStatus(index, value)\n const { statusListCredential: signedCredential, encodedList } = await this.createSignedStatusList(\n proofFormat,\n context,\n statusList,\n issuer,\n id,\n expiresAt,\n keyRef,\n )\n\n return {\n statusListCredential: signedCredential,\n encodedList,\n oauthStatusList: {\n bitsPerStatus: statusList.getBitsPerStatus(),\n },\n length: statusList.statusList.length,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n // FIXME: This still assumes only two values (boolean), whilst this list supports 8 bits max\n async updateStatusListFromEncodedList(args: UpdateStatusListFromEncodedListArgs, context: IRequiredContext): Promise<StatusListResult> {\n if (!args.oauthStatusList) {\n throw new Error('OAuthStatusList options are required for type OAuthStatusList')\n }\n const { proofFormat, oauthStatusList, keyRef } = args\n const { bitsPerStatus, expiresAt } = oauthStatusList\n\n const { issuer, id } = getAssertedValues(args)\n const issuerString = typeof issuer === 'string' ? issuer : issuer.id\n\n const listToUpdate = StatusList.decompressStatusList(args.encodedList, bitsPerStatus ?? DEFAULT_BITS_PER_STATUS)\n const index = typeof args.statusListIndex === 'number' ? args.statusListIndex : parseInt(args.statusListIndex)\n // FIXME: See above.\n listToUpdate.setStatus(index, args.value ? 1 : 0)\n\n const { statusListCredential, encodedList } = await this.createSignedStatusList(\n proofFormat ?? DEFAULT_PROOF_FORMAT,\n context,\n listToUpdate,\n issuerString,\n id,\n expiresAt,\n keyRef,\n )\n\n return {\n encodedList,\n statusListCredential,\n oauthStatusList: {\n bitsPerStatus,\n expiresAt,\n },\n length: listToUpdate.statusList.length,\n type: StatusListType.OAuthStatusList,\n proofFormat: proofFormat ?? DEFAULT_PROOF_FORMAT,\n id,\n issuer,\n statuslistContentType: this.buildContentType(proofFormat),\n }\n }\n\n private buildContentType(proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor' | undefined) {\n return `application/statuslist+${proofFormat === 'cbor' ? 'cwt' : 'jwt'}`\n }\n\n async checkStatusIndex(args: CheckStatusIndexArgs): Promise<number | StatusOAuth> {\n const { statusListCredential, statusListIndex } = args\n if (typeof statusListCredential !== 'string') {\n return Promise.reject('statusListCredential in neither JWT nor CWT')\n }\n\n const proofFormat = determineProofFormat(statusListCredential)\n const { statusList } = proofFormat === 'jwt' ? decodeStatusListJWT(statusListCredential) : decodeStatusListCWT(statusListCredential)\n\n const index = typeof statusListIndex === 'number' ? statusListIndex : parseInt(statusListIndex)\n if (index < 0 || index >= statusList.statusList.length) {\n throw new Error('Status list index out of bounds')\n }\n\n return statusList.getStatus(index)\n }\n\n async toStatusListDetails(args: ToStatusListDetailsArgs): Promise<StatusListResult> {\n const { statusListPayload } = args as { statusListPayload: CompactJWT | CWT }\n const proofFormat = determineProofFormat(statusListPayload)\n const decoded = proofFormat === 'jwt' ? decodeStatusListJWT(statusListPayload) : decodeStatusListCWT(statusListPayload)\n const { statusList, issuer, id, exp } = decoded\n\n return {\n id,\n encodedList: statusList.compressStatusList(),\n issuer,\n type: StatusListType.OAuthStatusList,\n proofFormat,\n length: statusList.statusList.length,\n statusListCredential: statusListPayload,\n statuslistContentType: this.buildContentType(proofFormat),\n oauthStatusList: {\n bitsPerStatus: statusList.getBitsPerStatus(),\n ...(exp && { expiresAt: new Date(exp * 1000) }),\n },\n ...(args.correlationId && { correlationId: args.correlationId }),\n ...(args.driverType && { driverType: args.driverType }),\n }\n }\n\n private async createSignedStatusList(\n proofFormat: 'jwt' | 'lds' | 'EthereumEip712Signature2021' | 'cbor',\n context: IAgentContext<ICredentialPlugin & IJwtService & IIdentifierResolution & IKeyManager>,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n ): Promise<SignedStatusListData> {\n switch (proofFormat) {\n case 'jwt': {\n return await createSignedJwt(context, statusList, issuerString, id, expiresAt, keyRef)\n }\n case 'cbor': {\n return await createSignedCbor(context, statusList, issuerString, id, expiresAt, keyRef)\n }\n default:\n throw new Error(`Invalid proof format '${proofFormat}' for OAuthStatusList`)\n }\n }\n}\n","import { type CompactJWT, JoseSignatureAlgorithm } from '@sphereon/ssi-types'\nimport { createHeaderAndPayload, StatusList, type StatusListJWTHeaderParameters, type StatusListJWTPayload } from '@sd-jwt/jwt-status-list'\nimport base64url from 'base64url'\nimport type { JWTPayload } from 'did-jwt'\nimport type { IRequiredContext, SignedStatusListData } from '../../types'\nimport { type DecodedStatusListPayload, resolveIdentifier } from './common'\nimport type { TKeyType } from '@veramo/core'\nimport { ensureManagedIdentifierResult } from '@sphereon/ssi-sdk-ext.identifier-resolution'\n\nconst STATUS_LIST_JWT_TYP = 'statuslist+jwt'\n\nexport const createSignedJwt = async (\n context: IRequiredContext,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n): Promise<SignedStatusListData> => {\n const identifier = await resolveIdentifier(context, issuerString, keyRef)\n const resolution = await ensureManagedIdentifierResult(identifier, context)\n\n const payload: JWTPayload = {\n iss: issuerString,\n sub: id,\n iat: Math.floor(Date.now() / 1000),\n ...(expiresAt && { exp: Math.floor(expiresAt.getTime() / 1000) }),\n }\n\n const header: StatusListJWTHeaderParameters = {\n alg: getSigningAlgo(resolution.key.type),\n typ: STATUS_LIST_JWT_TYP,\n }\n const values = createHeaderAndPayload(statusList, payload, header)\n const signedJwt = await context.agent.jwtCreateJwsCompactSignature({\n issuer: { ...identifier, noIssPayloadUpdate: false },\n protectedHeader: values.header,\n payload: values.payload,\n })\n\n return {\n statusListCredential: signedJwt.jwt,\n encodedList: (values.payload as StatusListJWTPayload).status_list.lst,\n }\n}\n\nexport const decodeStatusListJWT = (jwt: CompactJWT): DecodedStatusListPayload => {\n const [, payloadBase64] = jwt.split('.')\n const payload = JSON.parse(base64url.decode(payloadBase64))\n\n if (!payload.iss || !payload.sub || !payload.status_list) {\n throw new Error('Missing required fields in JWT payload')\n }\n\n const statusList = StatusList.decompressStatusList(payload.status_list.lst, payload.status_list.bits)\n\n return {\n issuer: payload.iss,\n id: payload.sub,\n statusList,\n exp: payload.exp,\n ttl: payload.ttl,\n iat: payload.iat,\n }\n}\n\nexport const getSigningAlgo = (type: TKeyType): JoseSignatureAlgorithm => {\n switch (type) {\n case 'Ed25519':\n return JoseSignatureAlgorithm.EdDSA\n case 'Secp256k1':\n return JoseSignatureAlgorithm.ES256K\n case 'Secp256r1':\n return JoseSignatureAlgorithm.ES256\n case 'RSA':\n return JoseSignatureAlgorithm.RS256\n default:\n throw Error('Key type not yet supported')\n }\n}\n","import type { IRequiredContext } from '../../types'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\n\nexport interface DecodedStatusListPayload {\n issuer: string\n id: string\n statusList: StatusList\n exp?: number\n ttl?: number\n iat: number\n}\n\nexport const resolveIdentifier = async (context: IRequiredContext, issuer: string, keyRef?: string) => {\n return await context.agent.identifierManagedGet({\n identifier: issuer,\n vmRelationship: 'assertionMethod',\n offlineWhenNoDIDRegistered: true,\n ...(keyRef && { kmsKeyRef: keyRef }), // TODO the getDid resolver should look at this ASAP\n })\n}\n","import type { BitsPerStatus } from '@sd-jwt/jwt-status-list'\nimport { StatusList } from '@sd-jwt/jwt-status-list'\nimport { deflate, inflate } from 'pako'\nimport { com, kotlin } from '@sphereon/kmp-mdoc-core'\n// import * as cborpkg from '@sphereon/kmp-cbor'\nimport base64url from 'base64url'\nimport type { IRequiredContext, SignedStatusListData } from '../../types'\nimport { type DecodedStatusListPayload, resolveIdentifier } from './common'\n\nexport type IKey = com.sphereon.crypto.IKey\nexport type CborItem<T> = com.sphereon.cbor.CborItem<T>\nexport const CborByteString = com.sphereon.cbor.CborByteString\nexport type CborByteStringType = com.sphereon.cbor.CborByteString\nexport const CborUInt = com.sphereon.cbor.CborUInt\nexport type CborUIntType = com.sphereon.cbor.CborUInt\nexport const CborString = com.sphereon.cbor.CborString\nexport type CborStringType = com.sphereon.cbor.CborString\n\n// const cbor = cborpkg.com.sphereon.cbor\n// const kmp = cborpkg.com.sphereon.kmp\n// const kotlin = cborpkg.kotlin\nconst decompressRawStatusList = (StatusList as any).decodeStatusList.bind(StatusList)\n\nconst CWT_CLAIMS = {\n SUBJECT: 2,\n ISSUER: 1,\n ISSUED_AT: 6,\n EXPIRATION: 4,\n TIME_TO_LIVE: 65534,\n STATUS_LIST: 65533,\n} as const\n\nexport const createSignedCbor = async (\n context: IRequiredContext,\n statusList: StatusList,\n issuerString: string,\n id: string,\n expiresAt?: Date,\n keyRef?: string,\n): Promise<SignedStatusListData> => {\n const identifier = await resolveIdentifier(context, issuerString, keyRef)\n\n const encodeStatusList = statusList.encodeStatusList()\n const compressedList = deflate(encodeStatusList, { level: 9 })\n const compressedBytes = new Int8Array(compressedList)\n\n const statusListMap = new com.sphereon.cbor.CborMap(\n kotlin.collections.KtMutableMap.fromJsMap(\n new Map<CborStringType, CborItem<any>>([\n [\n new com.sphereon.cbor.CborString('bits'),\n new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(statusList.getBitsPerStatus())),\n ],\n [new com.sphereon.cbor.CborString('lst'), new com.sphereon.cbor.CborByteString(compressedBytes)],\n ]),\n ),\n )\n\n const protectedHeader = new com.sphereon.cbor.CborMap(\n kotlin.collections.KtMutableMap.fromJsMap(\n new Map([[new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(16)), new com.sphereon.cbor.CborString('statuslist+cwt')]]), // \"type\"\n ),\n )\n const protectedHeaderEncoded = com.sphereon.cbor.Cbor.encode(protectedHeader)\n const claimsMap = buildClaimsMap(id, issuerString, statusListMap, expiresAt)\n const claimsEncoded: Int8Array = com.sphereon.cbor.Cbor.encode(claimsMap)\n\n const signedCWT: string = await context.agent.keyManagerSign({\n keyRef: identifier.kmsKeyRef,\n data: base64url.encode(Buffer.from(claimsEncoded)), // TODO test on RN\n encoding: undefined,\n })\n\n const protectedHeaderEncodedInt8 = new Int8Array(protectedHeaderEncoded)\n const claimsEncodedInt8 = new Int8Array(claimsEncoded)\n const signatureBytes = base64url.decode(signedCWT)\n const signatureInt8 = new Int8Array(Buffer.from(signatureBytes))\n\n const cwtArrayElements: Array<CborItem<any>> = [\n new CborByteString(protectedHeaderEncodedInt8),\n new CborByteString(claimsEncodedInt8),\n new CborByteString(signatureInt8),\n ]\n const cwtArray = new com.sphereon.cbor.CborArray(kotlin.collections.KtMutableList.fromJsArray(cwtArrayElements))\n const cwtEncoded = com.sphereon.cbor.Cbor.encode(cwtArray)\n const cwtBuffer = Buffer.from(cwtEncoded)\n return {\n statusListCredential: base64url.encode(cwtBuffer),\n encodedList: base64url.encode(compressedList as Buffer), // JS in @sd-jwt/jwt-status-list drops it in like this, so keep the same method\n }\n}\n\nfunction buildClaimsMap(id: string, issuerString: string, statusListMap: com.sphereon.cbor.CborMap<CborStringType, CborItem<any>>, expiresAt?: Date) {\n const ttl = 65535 // FIXME figure out what value should be / come from and what the difference is with exp\n const claimsEntries: Array<[CborUIntType, CborItem<any>]> = [\n [new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.SUBJECT)), new com.sphereon.cbor.CborString(id)], // \"sub\"\n [new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUER)), new com.sphereon.cbor.CborString(issuerString)], // \"iss\"\n [\n new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.ISSUED_AT)),\n new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(Math.floor(Date.now() / 1000))), // \"iat\"\n ],\n ]\n\n if (expiresAt) {\n claimsEntries.push([\n new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.EXPIRATION)),\n new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(Math.floor(expiresAt.getTime() / 1000))), // \"exp\"\n ])\n }\n\n if (ttl) {\n claimsEntries.push([\n new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.TIME_TO_LIVE)),\n new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(ttl)), // \"time to live\"\n ])\n }\n\n claimsEntries.push([new com.sphereon.cbor.CborUInt(com.sphereon.kmp.LongKMP.fromNumber(CWT_CLAIMS.STATUS_LIST)), statusListMap])\n\n const claimsMap = new com.sphereon.cbor.CborMap(kotlin.collections.KtMutableMap.fromJsMap(new Map(claimsEntries)))\n return claimsMap\n}\n\nconst getCborValueFromMap = <T>(map: Map<CborItem<any>, CborItem<any>>, key: number): T => {\n const value = getCborOptionalValueFromMap<T>(map, key)\n if (value === undefined) {\n throw new Error(`Required claim ${key} not found`)\n }\n return value\n}\n\nconst getCborOptionalValueFromMap = <T>(map: Map<CborItem<any>, CborItem<any>>, key: number): T | undefined | never => {\n const value = map.get(new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(key)))\n if (!value) {\n return undefined\n }\n return value.value as T\n}\n\nexport const decodeStatusListCWT = (cwt: string): DecodedStatusListPayload => {\n const encodedCbor = base64url.toBuffer(cwt)\n const encodedCborArray = new Int8Array(encodedCbor)\n const decodedCbor = com.sphereon.cbor.Cbor.decode(encodedCborArray)\n\n if (!(decodedCbor instanceof com.sphereon.cbor.CborArray)) {\n throw new Error('Invalid CWT format: Expected a CBOR array')\n }\n\n const [, payload] = decodedCbor.value.asJsArrayView()\n if (!(payload instanceof com.sphereon.cbor.CborByteString)) {\n throw new Error('Invalid payload format: Expected a CBOR ByteString')\n }\n\n const claims = com.sphereon.cbor.Cbor.decode(payload.value)\n if (!(claims instanceof com.sphereon.cbor.CborMap)) {\n throw new Error('Invalid claims format: Expected a CBOR map')\n }\n\n const claimsMap = claims.value.asJsMapView()\n\n const statusListMap = claimsMap.get(new CborUInt(com.sphereon.kmp.LongKMP.fromNumber(65533))).value.asJsMapView()\n\n const bits = Number(statusListMap.get(new CborString('bits')).value) as BitsPerStatus\n const decoded = new Uint8Array(statusListMap.get(new CborString('lst')).value)\n const uint8Array = inflate(decoded)\n const rawStatusList = decompressRawStatusList(uint8Array, bits)\n const statusList = new StatusList(rawStatusList, bits)\n\n return {\n issuer: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.ISSUER),\n id: getCborValueFromMap<string>(claimsMap, CWT_CLAIMS.SUBJECT),\n statusList,\n iat: Number(getCborValueFromMap<number>(claimsMap, CWT_CLAIMS.ISSUED_AT)),\n exp: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.EXPIRATION),\n ttl: getCborOptionalValueFromMap<number>(claimsMap, CWT_CLAIMS.TIME_TO_LIVE),\n }\n}\n","import type { IStatusList } from './IStatusList'\nimport { StatusList2021Implementation } from './StatusList2021'\nimport { OAuthStatusListImplementation } from './OAuthStatusList'\nimport { StatusListType } from '@sphereon/ssi-types'\n\nexport class StatusListFactory {\n private static instance: StatusListFactory\n private implementations: Map<StatusListType, IStatusList>\n\n private constructor() {\n this.implementations = new Map()\n this.implementations.set(StatusListType.StatusList2021, new StatusList2021Implementation())\n this.implementations.set(StatusListType.OAuthStatusList, new OAuthStatusListImplementation())\n }\n\n public static getInstance(): StatusListFactory {\n if (!StatusListFactory.instance) {\n StatusListFactory.instance = new StatusListFactory()\n }\n return StatusListFactory.instance\n }\n\n public getByType(type: StatusListType): IStatusList {\n const statusList = this.implementations.get(type)\n if (!statusList) {\n throw new Error(`No implementation found for status list type: ${type}`)\n }\n return statusList\n }\n}\n\nexport function getStatusListImplementation(type: StatusListType): IStatusList {\n return StatusListFactory.getInstance().getByType(type)\n}\n"],"mappings":"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","names":["StatusOAuth","Status2021","import_ssi_types","import_vc_status_list","getAssertedStatusListType","type","assertedType","StatusListType","StatusList2021","OAuthStatusList","includes","Error","getAssertedValue","name","value","undefined","getAssertedValues","args","id","issuer","getAssertedProperty","propertyName","obj","ValidProofTypeMap","Map","assertValidProofType","proofFormat","validProofTypes","get","determineStatusListType","credential","determineProofFormat","payload","jwtDecode","keys","Object","uniform","CredentialMapper","toUniformCredential","find","t","values","some","statusType","replace","detectDocumentType","DocumentFormat","JWT","MSO_MDOC","JSONLD","import_ssi_types","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","StatusList2021Implementation","createNewStatusList","args","context","length","proofFormat","assertValidProofType","StatusListType","StatusList2021","veramoProofFormat","issuer","id","correlationId","getAssertedValue","list","StatusList","encodedList","encode","statusPurpose","statusListCredential","createVerifiableCredential","statusList2021","indexingDirection","type","statuslistContentType","buildContentType","updateStatusListIndex","credential","uniform","CredentialMapper","toUniformCredential","credentialSubject","origEncodedList","getAssertedProperty","index","statusListIndex","parseInt","statusList","decode","setStatus","value","detectDocumentType","DocumentFormat","JWT","updatedCredential","updateStatusListFromEncodedList","Error","getAssertedValues","newEncodedList","keyRef","checkStatusIndex","status","getStatus","Status2021","Invalid","Valid","toStatusListDetails","statusListPayload","driverType","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","verifiableCredential","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original","import_ssi_types","import_jwt_status_list","import_ssi_types","resolveIdentifier","context","issuer","keyRef","agent","identifierManagedGet","identifier","vmRelationship","offlineWhenNoDIDRegistered","kmsKeyRef","STATUS_LIST_JWT_TYP","createSignedJwt","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","resolution","ensureManagedIdentifierResult","payload","iss","sub","iat","Math","floor","Date","now","exp","getTime","header","alg","getSigningAlgo","key","type","typ","values","createHeaderAndPayload","signedJwt","agent","jwtCreateJwsCompactSignature","issuer","noIssPayloadUpdate","protectedHeader","statusListCredential","jwt","encodedList","status_list","lst","decodeStatusListJWT","payloadBase64","split","JSON","parse","base64url","decode","Error","StatusList","decompressStatusList","bits","ttl","JoseSignatureAlgorithm","EdDSA","ES256K","ES256","RS256","import_jwt_status_list","import_base64url","CborByteString","com","sphereon","cbor","CborUInt","CborString","decompressRawStatusList","StatusList","decodeStatusList","bind","CWT_CLAIMS","SUBJECT","ISSUER","ISSUED_AT","EXPIRATION","TIME_TO_LIVE","STATUS_LIST","createSignedCbor","context","statusList","issuerString","id","expiresAt","keyRef","identifier","resolveIdentifier","encodeStatusList","compressedList","deflate","level","compressedBytes","Int8Array","statusListMap","CborMap","kotlin","collections","KtMutableMap","fromJsMap","Map","kmp","LongKMP","fromNumber","getBitsPerStatus","protectedHeader","protectedHeaderEncoded","Cbor","encode","claimsMap","buildClaimsMap","claimsEncoded","signedCWT","agent","keyManagerSign","kmsKeyRef","data","base64url","Buffer","from","encoding","undefined","protectedHeaderEncodedInt8","claimsEncodedInt8","signatureBytes","decode","signatureInt8","cwtArrayElements","cwtArray","CborArray","KtMutableList","fromJsArray","cwtEncoded","cwtBuffer","statusListCredential","encodedList","ttl","claimsEntries","Math","floor","Date","now","push","getTime","getCborValueFromMap","map","key","value","getCborOptionalValueFromMap","Error","get","decodeStatusListCWT","cwt","encodedCbor","toBuffer","encodedCborArray","decodedCbor","payload","asJsArrayView","claims","asJsMapView","bits","Number","decoded","Uint8Array","uint8Array","inflate","rawStatusList","issuer","iat","exp","DEFAULT_BITS_PER_STATUS","DEFAULT_LIST_LENGTH","DEFAULT_PROOF_FORMAT","OAuthStatusListImplementation","createNewStatusList","args","context","oauthStatusList","Error","proofFormat","issuer","id","keyRef","bitsPerStatus","expiresAt","length","issuerString","correlationId","getAssertedValue","statusList","StatusList","Array","fill","encodedList","compressStatusList","statusListCredential","createSignedStatusList","type","StatusListType","OAuthStatusList","statuslistContentType","buildContentType","updateStatusListIndex","value","Promise","reject","determineProofFormat","decoded","decodeStatusListJWT","decodeStatusListCWT","index","statusListIndex","parseInt","setStatus","signedCredential","getBitsPerStatus","updateStatusListFromEncodedList","getAssertedValues","listToUpdate","decompressStatusList","checkStatusIndex","getStatus","toStatusListDetails","statusListPayload","exp","Date","driverType","createSignedJwt","createSignedCbor","import_ssi_types","StatusListFactory","instance","implementations","Map","set","StatusListType","StatusList2021","StatusList2021Implementation","OAuthStatusList","OAuthStatusListImplementation","getInstance","getByType","type","statusList","get","Error","getStatusListImplementation","fetchStatusListCredential","args","url","getAssertedValue","statusListCredential","response","fetch","ok","Error","status","statusText","responseAsText","text","trim","startsWith","JSON","parse","error","console","message","stringify","statusPluginStatusFunction","credential","didDoc","result","checkStatusForCredential","documentLoader","errorUnknownListType","revoked","verified","vcLibCheckStatusFunction","mandatoryCredentialStatus","verifyStatusListCredential","verifyMatchingIssuers","uniform","CredentialMapper","toUniformCredential","credentialStatus","log","type","checkStatus","simpleCheckStatusFromStatusListUrl","checkStatusIndexFromStatusListCredential","statusListType","determineStatusListType","implementation","getStatusListImplementation","checkStatusIndex","createNewStatusList","context","getAssertedValues","updateStatusIndexFromStatusListCredential","updateStatusListIndex","statusListCredentialToDetails","documentFormat","detectDocumentType","DocumentFormat","JWT","header","split","decodedHeader","Buffer","from","toString","typ","StatusListType","OAuthStatusList","MSO_MDOC","find","t","includes","replace","toStatusListDetails","statusListPayload","correlationId","driverType","updateStatusListIndexFromEncodedList","updateStatusListFromEncodedList","statusList2021ToVerifiableCredential","issuer","id","identifier","agent","identifierManagedGet","vmRelationship","offlineWhenNoDIDRegistered","proofFormat","assertValidProofType","StatusList2021","veramoProofFormat","encodedList","statusPurpose","credentialSubject","verifiableCredential","createVerifiableCredential","keyRef","kmsKeyRef","fetchRemoteContexts","toWrappedVerifiableCredential","original"]}
|