@sphereon/oid4vci-common 0.7.1-next.11 → 0.7.1-next.13
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.
|
@@ -8,7 +8,7 @@ export declare function getSupportedCredentials(opts?: {
|
|
|
8
8
|
export declare function getSupportedCredential(opts?: {
|
|
9
9
|
issuerMetadata?: CredentialIssuerMetadata | IssuerMetadataV1_0_08;
|
|
10
10
|
version: OpenId4VCIVersion;
|
|
11
|
-
types?: string[];
|
|
11
|
+
types?: string | string[];
|
|
12
12
|
format?: (OID4VCICredentialFormat | string) | (OID4VCICredentialFormat | string)[];
|
|
13
13
|
}): CredentialSupported[];
|
|
14
14
|
export declare function credentialsSupportedV8ToV11(supportedV8: CredentialSupportedTypeV1_0_08): CredentialSupported[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssuerMetadataUtils.d.ts","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAExB,mBAAmB,EACnB,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"IssuerMetadataUtils.d.ts","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAExB,mBAAmB,EACnB,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAEjB,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE;IAC7C,cAAc,CAAC,EAAE,wBAAwB,GAAG,qBAAqB,CAAC;IAClE,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CACpF,GAAG,mBAAmB,EAAE,CAKxB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAC5C,cAAc,CAAC,EAAE,wBAAwB,GAAG,qBAAqB,CAAC;IAClE,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC;CACpF,GAAG,mBAAmB,EAAE,CAmExB;AAaD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,8BAA8B,GAAG,mBAAmB,EAAE,CAM9G;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,GAAG,mBAAmB,EAAE,CAgBtH;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,qBAAqB,EAAE,IAAI,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EAAE,CAMjJ"}
|
|
@@ -41,10 +41,21 @@ function getSupportedCredential(opts) {
|
|
|
41
41
|
/**
|
|
42
42
|
* the following (not array part is a legacy code from version 1_0-08 which JFF plugfest 2 implementors used)
|
|
43
43
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
let initiationTypes;
|
|
45
|
+
if (opts === null || opts === void 0 ? void 0 : opts.types) {
|
|
46
|
+
if (typeof opts.types === 'string') {
|
|
47
|
+
initiationTypes = [opts.types];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
initiationTypes = opts.types;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (version === types_1.OpenId4VCIVersion.VER_1_0_08 && (!initiationTypes || (initiationTypes === null || initiationTypes === void 0 ? void 0 : initiationTypes.length) === 0)) {
|
|
54
|
+
initiationTypes = formats;
|
|
55
|
+
}
|
|
56
|
+
const supportedFormats = formats && formats.length > 0 ? formats : ['jwt_vc_json', 'jwt_vc_json-ld', 'ldp_vc'];
|
|
46
57
|
const credentialSupportedOverlap = [];
|
|
47
|
-
if (initiationTypes.length === 1) {
|
|
58
|
+
if (initiationTypes && Array.isArray(initiationTypes) && initiationTypes.length === 1) {
|
|
48
59
|
const supported = credentialsSupported.filter((sup) => sup.id === initiationTypes[0] || (arrayEqualsIgnoreOrder(sup.types, initiationTypes) && sup.types.includes(initiationTypes[0])));
|
|
49
60
|
if (supported) {
|
|
50
61
|
credentialSupportedOverlap.push(...supported);
|
|
@@ -52,7 +63,7 @@ function getSupportedCredential(opts) {
|
|
|
52
63
|
}
|
|
53
64
|
else {
|
|
54
65
|
// Make sure we include Verifiable Credential both on the offer side as well as in the metadata side, to ensure consistency of the issuer does not.
|
|
55
|
-
if (!initiationTypes.includes('VerifiableCredential')) {
|
|
66
|
+
if (initiationTypes && !initiationTypes.includes('VerifiableCredential')) {
|
|
56
67
|
initiationTypes.push('VerifiableCredential');
|
|
57
68
|
}
|
|
58
69
|
const supported = credentialsSupported.filter((sup) => {
|
|
@@ -60,7 +71,7 @@ function getSupportedCredential(opts) {
|
|
|
60
71
|
if (!supTypes.includes('VerifiableCredential')) {
|
|
61
72
|
supTypes.push('VerifiableCredential');
|
|
62
73
|
}
|
|
63
|
-
return arrayEqualsIgnoreOrder(supTypes, initiationTypes) && supportedFormats.includes(sup.format);
|
|
74
|
+
return (!initiationTypes || arrayEqualsIgnoreOrder(supTypes, initiationTypes)) && supportedFormats.includes(sup.format);
|
|
64
75
|
});
|
|
65
76
|
if (supported) {
|
|
66
77
|
credentialSupportedOverlap.push(...supported);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssuerMetadataUtils.js","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"IssuerMetadataUtils.js","sourceRoot":"","sources":["../../lib/functions/IssuerMetadataUtils.ts"],"names":[],"mappings":";;;AAAA,oCAUiB;AAEjB,SAAgB,uBAAuB,CAAC,IAKvC;IACC,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,KAAK,CAAC,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC,EAAE;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,iCAAM,IAAI,KAAE,KAAK,IAAG,CAAC,CAAC;KAClF;IACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,iCAAM,IAAI,KAAE,KAAK,EAAE,SAAS,IAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAClF,CAAC;AAVD,0DAUC;AAED,SAAgB,sBAAsB,CAAC,IAKtC;IACC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IACtC,IAAI,OAA6C,CAAC;IAClD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC9C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;KACvB;SAAM,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACtD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACzB;SAAM;QACL,OAAO,GAAG,EAAE,CAAC;KACd;IACD,IAAI,oBAA2C,CAAC;IAChD,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,OAAO,EAAE,yBAAiB,CAAC,UAAU,EAAE,CAAC;IAC7E,IAAI,OAAO,KAAK,yBAAiB,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,qBAAqB,CAAC,EAAE;QACpG,oBAAoB,GAAG,2BAA2B,CAAE,cAAwC,CAAC,qBAAqB,CAAC,CAAC;KACrH;SAAM;QACL,oBAAoB,GAAI,cAA2C,CAAC,qBAAqB,CAAC;KAC3F;IAED,IAAI,oBAAoB,KAAK,SAAS,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3E,OAAO,EAAE,CAAC;KACX;SAAM,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACvC,OAAO,oBAAoB,CAAC;KAC7B;IACD;;OAEG;IACH,IAAI,eAAsC,CAAA;IAC1C,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE;QACf,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAClC,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC/B;aAAM;YACL,eAAe,GAAG,IAAI,CAAC,KAAK,CAAA;SAC7B;KACF;IACD,IAAI,OAAO,KAAK,yBAAiB,CAAC,UAAU,IAAI,CAAC,CAAC,eAAe,IAAI,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,MAAK,CAAC,CAAC,EAAE;QACnG,eAAe,GAAG,OAAO,CAAA;KAC1B;IACD,MAAM,gBAAgB,GAAuC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAEnJ,MAAM,0BAA0B,GAA0B,EAAE,CAAC;IAC7D,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;QACrF,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,eAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,eAAgB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5I,CAAC;QACF,IAAI,SAAS,EAAE;YACb,0BAA0B,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;SAC/C;KACF;SAAM;QACL,mJAAmJ;QACnJ,IAAI,eAAe,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;YACxE,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAC9C;QACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;gBAC9C,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;aACvC;YACD,OAAO,CAAC,CAAC,eAAe,IAAI,sBAAsB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1H,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,EAAE;YACb,0BAA0B,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;SAC/C;KACF;IACD,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAxED,wDAwEC;AAED,SAAS,sBAAsB,CAAC,CAAW,EAAE,CAAW;IACtD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;QAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/C,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;KACrC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,2BAA2B,CAAC,WAA2C;IACrF,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,0BAA0B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAND,kEAMC;AAED,SAAgB,0BAA0B,CAAC,GAAW,EAAE,WAAuC;IAC7F,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;YAC9B,MAAM,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClE;QACD,IAAI,iBAAiB,GAAiC,EAAE,CAAC;QACzD,iBAAiB,iCACf,MAAM,EACN,OAAO,EAAE,WAAW,CAAC,OAAO,IACzB,sBAAsB,KACzB,iBAAiB,EAAE,WAAW,CAAC,MAAM,GACtC,CAAC;QACF,OAAO,iBAAwC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAhBD,gEAgBC;AAED,SAAgB,iBAAiB,CAAC,QAA0D,EAAE,IAAgC;;IAC5H,MAAM,eAAe,GACnB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,MAAM,CACtB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CACzI,mCAAI,EAAE,CAAC;IACV,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,EAAA,CAAC,CAAC;AACxH,CAAC;AAND,8CAMC"}
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
IssuerMetadataV1_0_08,
|
|
8
8
|
MetadataDisplay,
|
|
9
9
|
OID4VCICredentialFormat,
|
|
10
|
-
OpenId4VCIVersion
|
|
11
|
-
} from '../types'
|
|
10
|
+
OpenId4VCIVersion
|
|
11
|
+
} from '../types'
|
|
12
12
|
|
|
13
13
|
export function getSupportedCredentials(opts?: {
|
|
14
14
|
issuerMetadata?: CredentialIssuerMetadata | IssuerMetadataV1_0_08;
|
|
@@ -25,7 +25,7 @@ export function getSupportedCredentials(opts?: {
|
|
|
25
25
|
export function getSupportedCredential(opts?: {
|
|
26
26
|
issuerMetadata?: CredentialIssuerMetadata | IssuerMetadataV1_0_08;
|
|
27
27
|
version: OpenId4VCIVersion;
|
|
28
|
-
types?: string[];
|
|
28
|
+
types?: string | string[];
|
|
29
29
|
format?: (OID4VCICredentialFormat | string) | (OID4VCICredentialFormat | string)[];
|
|
30
30
|
}): CredentialSupported[] {
|
|
31
31
|
const { issuerMetadata } = opts ?? {};
|
|
@@ -56,20 +56,30 @@ export function getSupportedCredential(opts?: {
|
|
|
56
56
|
/**
|
|
57
57
|
* the following (not array part is a legacy code from version 1_0-08 which JFF plugfest 2 implementors used)
|
|
58
58
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
let initiationTypes :string[] | undefined
|
|
60
|
+
if (opts?.types) {
|
|
61
|
+
if (typeof opts.types === 'string') {
|
|
62
|
+
initiationTypes = [opts.types]
|
|
63
|
+
} else {
|
|
64
|
+
initiationTypes = opts.types
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (version === OpenId4VCIVersion.VER_1_0_08 && (!initiationTypes || initiationTypes?.length === 0)) {
|
|
68
|
+
initiationTypes = formats
|
|
69
|
+
}
|
|
70
|
+
const supportedFormats: (CredentialOfferFormat | string)[] = formats && formats.length > 0 ? formats : ['jwt_vc_json', 'jwt_vc_json-ld', 'ldp_vc'];
|
|
61
71
|
|
|
62
72
|
const credentialSupportedOverlap: CredentialSupported[] = [];
|
|
63
|
-
if (initiationTypes.length === 1) {
|
|
73
|
+
if (initiationTypes && Array.isArray(initiationTypes) && initiationTypes.length === 1) {
|
|
64
74
|
const supported = credentialsSupported.filter(
|
|
65
|
-
(sup) => sup.id === initiationTypes[0] || (arrayEqualsIgnoreOrder(sup.types, initiationTypes) && sup.types.includes(initiationTypes[0])),
|
|
75
|
+
(sup) => sup.id === initiationTypes![0] || (arrayEqualsIgnoreOrder(sup.types, initiationTypes!) && sup.types.includes(initiationTypes![0])),
|
|
66
76
|
);
|
|
67
77
|
if (supported) {
|
|
68
78
|
credentialSupportedOverlap.push(...supported);
|
|
69
79
|
}
|
|
70
80
|
} else {
|
|
71
81
|
// Make sure we include Verifiable Credential both on the offer side as well as in the metadata side, to ensure consistency of the issuer does not.
|
|
72
|
-
if (!initiationTypes.includes('VerifiableCredential')) {
|
|
82
|
+
if (initiationTypes && !initiationTypes.includes('VerifiableCredential')) {
|
|
73
83
|
initiationTypes.push('VerifiableCredential');
|
|
74
84
|
}
|
|
75
85
|
const supported = credentialsSupported.filter((sup) => {
|
|
@@ -77,7 +87,7 @@ export function getSupportedCredential(opts?: {
|
|
|
77
87
|
if (!supTypes.includes('VerifiableCredential')) {
|
|
78
88
|
supTypes.push('VerifiableCredential');
|
|
79
89
|
}
|
|
80
|
-
return arrayEqualsIgnoreOrder(supTypes, initiationTypes) && supportedFormats.includes(sup.format);
|
|
90
|
+
return (!initiationTypes || arrayEqualsIgnoreOrder(supTypes, initiationTypes)) && supportedFormats.includes(sup.format);
|
|
81
91
|
});
|
|
82
92
|
if (supported) {
|
|
83
93
|
credentialSupportedOverlap.push(...supported);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/oid4vci-common",
|
|
3
|
-
"version": "0.7.1-next.
|
|
3
|
+
"version": "0.7.1-next.13+b79027f",
|
|
4
4
|
"description": "OpenID 4 Verifiable Credential Issuance Common Types",
|
|
5
5
|
"source": "lib/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "b79027fe601ecccb1373ba399419e14f5ec2d7ff"
|
|
49
49
|
}
|