@pagopa/io-react-native-wallet 1.8.0 → 1.8.1
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/lib/commonjs/credential/issuance/02-get-issuer-config.js +10 -24
- package/lib/commonjs/credential/issuance/02-get-issuer-config.js.map +1 -1
- package/lib/commonjs/utils/misc.js +23 -1
- package/lib/commonjs/utils/misc.js.map +1 -1
- package/lib/module/credential/issuance/02-get-issuer-config.js +10 -24
- package/lib/module/credential/issuance/02-get-issuer-config.js.map +1 -1
- package/lib/module/utils/misc.js +20 -0
- package/lib/module/utils/misc.js.map +1 -1
- package/lib/typescript/credential/issuance/02-get-issuer-config.d.ts +1 -1
- package/lib/typescript/credential/issuance/02-get-issuer-config.d.ts.map +1 -1
- package/lib/typescript/utils/misc.d.ts +8 -0
- package/lib/typescript/utils/misc.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/credential/issuance/02-get-issuer-config.ts +14 -34
- package/src/utils/misc.ts +24 -0
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.getIssuerConfigOIDFED = exports.getIssuerConfig = void 0;
|
7
|
+
var _misc = require("../../utils/misc");
|
7
8
|
var _issuer = require("../../entity/openid-connect/issuer");
|
8
9
|
var _ioReactNativeWallet = require("@pagopa/io-react-native-wallet");
|
9
10
|
/**
|
@@ -78,31 +79,16 @@ const credentialIssuerRationalizationOIDFED = issuerMetadata => {
|
|
78
79
|
const adapted_credential_configurations_supported = Object.fromEntries(Object.entries(issuerMetadata.payload.metadata.openid_credential_issuer.credential_configurations_supported).map(_ref => {
|
79
80
|
let [key, config] = _ref;
|
80
81
|
const claimsRaw = config.claims;
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
let [, v] = _ref2;
|
88
|
-
return [[v.path[0]], {
|
89
|
-
mandatory: true,
|
82
|
+
const claims = Object.entries(claimsRaw).map(_ref2 => {
|
83
|
+
let [, v] = _ref2;
|
84
|
+
return {
|
85
|
+
path: v.path,
|
86
|
+
details: {
|
87
|
+
mandatory: v.mandatory,
|
90
88
|
display: v.display
|
91
|
-
}
|
92
|
-
}
|
93
|
-
}
|
94
|
-
// claims is Record<string, Record<string, { mandatory; display }>>
|
95
|
-
claims = Object.fromEntries(Object.entries(claimsRaw).map(_ref3 => {
|
96
|
-
let [k, inner] = _ref3;
|
97
|
-
return [[k], Object.fromEntries(Object.entries(inner).map(_ref4 => {
|
98
|
-
let [innerK, v] = _ref4;
|
99
|
-
return [[innerK], {
|
100
|
-
mandatory: v.mandatory,
|
101
|
-
display: v.display
|
102
|
-
}];
|
103
|
-
}))];
|
104
|
-
}));
|
105
|
-
}
|
89
|
+
}
|
90
|
+
};
|
91
|
+
}).reduce((cumulated, entry) => (0, _misc.pathInsert)(cumulated, entry.path, entry.details), {});
|
106
92
|
const newConfig = {
|
107
93
|
...config,
|
108
94
|
claims,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["
|
1
|
+
{"version":3,"names":["_misc","require","_issuer","_ioReactNativeWallet","getIssuerConfig","issuerUrl","context","arguments","length","undefined","res","getCredentialIssuerMetadata","appFetch","credentialIssuerRationalization","exports","getIssuerConfigOIDFED","getCredentialIssuerEntityConfiguration","credentialIssuerRationalizationOIDFED","issuerMetadata","issuerConf","credential_configurations_supported","pushed_authorization_request_endpoint","authorization_endpoint","token_endpoint","credential_endpoint","keys","jwks","issuer","adapted_credential_configurations_supported","Object","fromEntries","entries","payload","metadata","openid_credential_issuer","map","_ref","key","config","claimsRaw","claims","_ref2","v","path","details","mandatory","display","reduce","cumulated","entry","pathInsert","newConfig","cryptographic_suites_supported","credential_signing_alg_values_supported","oauth_authorization_server","nonce_endpoint"],"sourceRoot":"../../../../src","sources":["credential/issuance/02-get-issuer-config.ts"],"mappings":"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"}
|
@@ -3,7 +3,9 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
6
|
+
exports.parseRawHttpResponse = exports.hasStatusOrThrow = exports.getCredentialHashWithouDiscloures = exports.generateRandomAlphaNumericString = void 0;
|
7
|
+
exports.pathInsert = pathInsert;
|
8
|
+
exports.safeJsonParse = void 0;
|
7
9
|
var _errors = require("./errors");
|
8
10
|
var _jsSha = require("js-sha256");
|
9
11
|
/**
|
@@ -67,5 +69,25 @@ const safeJsonParse = (text, withDefault) => {
|
|
67
69
|
return withDefault ?? null;
|
68
70
|
}
|
69
71
|
};
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Helper function to insert a value at a specified object path
|
75
|
+
* @param object The object in which to insert the value
|
76
|
+
* @param path The path at which the value should be inserted
|
77
|
+
* @param value The value to insert at the specified path
|
78
|
+
* @returns A new object with the property at path set to value, on-path objects are recreated
|
79
|
+
*/
|
70
80
|
exports.safeJsonParse = safeJsonParse;
|
81
|
+
function pathInsert(object, path, value) {
|
82
|
+
if (path.length === 1) {
|
83
|
+
return {
|
84
|
+
...object,
|
85
|
+
[path[0]]: value
|
86
|
+
};
|
87
|
+
}
|
88
|
+
return {
|
89
|
+
...object,
|
90
|
+
[path[0]]: pathInsert(path[0] in object ? object[path[0]] : {}, path.slice(1), value)
|
91
|
+
};
|
92
|
+
}
|
71
93
|
//# sourceMappingURL=misc.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_errors","require","_jsSha","hasStatusOrThrow","status","customError","res","ErrorClass","UnexpectedStatusCodeError","message","url","statusCode","reason","parseRawHttpResponse","exports","response","_response$headers$get","headers","get","includes","json","text","generateRandomAlphaNumericString","size","Array","from","Math","floor","random","toString","join","getCredentialHashWithouDiscloures","credential","tildeIndex","indexOf","IoWalletError","sha256","slice","safeJsonParse","withDefault","JSON","parse","_"],"sourceRoot":"../../../src","sources":["utils/misc.ts"],"mappings":"
|
1
|
+
{"version":3,"names":["_errors","require","_jsSha","hasStatusOrThrow","status","customError","res","ErrorClass","UnexpectedStatusCodeError","message","url","statusCode","reason","parseRawHttpResponse","exports","response","_response$headers$get","headers","get","includes","json","text","generateRandomAlphaNumericString","size","Array","from","Math","floor","random","toString","join","getCredentialHashWithouDiscloures","credential","tildeIndex","indexOf","IoWalletError","sha256","slice","safeJsonParse","withDefault","JSON","parse","_","pathInsert","object","path","value","length"],"sourceRoot":"../../../src","sources":["utils/misc.ts"],"mappings":"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"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { pathInsert } from "../../utils/misc";
|
1
2
|
import { getCredentialIssuerMetadata } from "../../entity/openid-connect/issuer";
|
2
3
|
import { getCredentialIssuerEntityConfiguration } from "@pagopa/io-react-native-wallet";
|
3
4
|
|
@@ -71,31 +72,16 @@ const credentialIssuerRationalizationOIDFED = issuerMetadata => {
|
|
71
72
|
const adapted_credential_configurations_supported = Object.fromEntries(Object.entries(issuerMetadata.payload.metadata.openid_credential_issuer.credential_configurations_supported).map(_ref => {
|
72
73
|
let [key, config] = _ref;
|
73
74
|
const claimsRaw = config.claims;
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
let [, v] = _ref2;
|
81
|
-
return [[v.path[0]], {
|
82
|
-
mandatory: true,
|
75
|
+
const claims = Object.entries(claimsRaw).map(_ref2 => {
|
76
|
+
let [, v] = _ref2;
|
77
|
+
return {
|
78
|
+
path: v.path,
|
79
|
+
details: {
|
80
|
+
mandatory: v.mandatory,
|
83
81
|
display: v.display
|
84
|
-
}
|
85
|
-
}
|
86
|
-
}
|
87
|
-
// claims is Record<string, Record<string, { mandatory; display }>>
|
88
|
-
claims = Object.fromEntries(Object.entries(claimsRaw).map(_ref3 => {
|
89
|
-
let [k, inner] = _ref3;
|
90
|
-
return [[k], Object.fromEntries(Object.entries(inner).map(_ref4 => {
|
91
|
-
let [innerK, v] = _ref4;
|
92
|
-
return [[innerK], {
|
93
|
-
mandatory: v.mandatory,
|
94
|
-
display: v.display
|
95
|
-
}];
|
96
|
-
}))];
|
97
|
-
}));
|
98
|
-
}
|
82
|
+
}
|
83
|
+
};
|
84
|
+
}).reduce((cumulated, entry) => pathInsert(cumulated, entry.path, entry.details), {});
|
99
85
|
const newConfig = {
|
100
86
|
...config,
|
101
87
|
claims,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getCredentialIssuerMetadata","getCredentialIssuerEntityConfiguration","getIssuerConfig","issuerUrl","context","arguments","length","undefined","res","appFetch","credentialIssuerRationalization","getIssuerConfigOIDFED","credentialIssuerRationalizationOIDFED","issuerMetadata","issuerConf","credential_configurations_supported","pushed_authorization_request_endpoint","authorization_endpoint","token_endpoint","credential_endpoint","keys","jwks","issuer","adapted_credential_configurations_supported","Object","fromEntries","entries","payload","metadata","openid_credential_issuer","map","_ref","key","config","claimsRaw","claims","
|
1
|
+
{"version":3,"names":["pathInsert","getCredentialIssuerMetadata","getCredentialIssuerEntityConfiguration","getIssuerConfig","issuerUrl","context","arguments","length","undefined","res","appFetch","credentialIssuerRationalization","getIssuerConfigOIDFED","credentialIssuerRationalizationOIDFED","issuerMetadata","issuerConf","credential_configurations_supported","pushed_authorization_request_endpoint","authorization_endpoint","token_endpoint","credential_endpoint","keys","jwks","issuer","adapted_credential_configurations_supported","Object","fromEntries","entries","payload","metadata","openid_credential_issuer","map","_ref","key","config","claimsRaw","claims","_ref2","v","path","details","mandatory","display","reduce","cumulated","entry","newConfig","cryptographic_suites_supported","credential_signing_alg_values_supported","oauth_authorization_server","nonce_endpoint"],"sourceRoot":"../../../../src","sources":["credential/issuance/02-get-issuer-config.ts"],"mappings":"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"}
|
package/lib/module/utils/misc.js
CHANGED
@@ -58,4 +58,24 @@ export const safeJsonParse = (text, withDefault) => {
|
|
58
58
|
return withDefault ?? null;
|
59
59
|
}
|
60
60
|
};
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Helper function to insert a value at a specified object path
|
64
|
+
* @param object The object in which to insert the value
|
65
|
+
* @param path The path at which the value should be inserted
|
66
|
+
* @param value The value to insert at the specified path
|
67
|
+
* @returns A new object with the property at path set to value, on-path objects are recreated
|
68
|
+
*/
|
69
|
+
export function pathInsert(object, path, value) {
|
70
|
+
if (path.length === 1) {
|
71
|
+
return {
|
72
|
+
...object,
|
73
|
+
[path[0]]: value
|
74
|
+
};
|
75
|
+
}
|
76
|
+
return {
|
77
|
+
...object,
|
78
|
+
[path[0]]: pathInsert(path[0] in object ? object[path[0]] : {}, path.slice(1), value)
|
79
|
+
};
|
80
|
+
}
|
61
81
|
//# sourceMappingURL=misc.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["IoWalletError","UnexpectedStatusCodeError","sha256","hasStatusOrThrow","status","customError","res","ErrorClass","message","url","statusCode","reason","parseRawHttpResponse","response","_response$headers$get","headers","get","includes","json","text","generateRandomAlphaNumericString","size","Array","from","Math","floor","random","toString","join","getCredentialHashWithouDiscloures","credential","tildeIndex","indexOf","slice","safeJsonParse","withDefault","JSON","parse","_"],"sourceRoot":"../../../src","sources":["utils/misc.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,yBAAyB,QAAQ,UAAU;AACnE,SAASC,MAAM,QAAQ,WAAW;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAC3BA,CAACC,MAAc,EAAEC,WAA8C,KAC/D,MAAOC,GAAa,IAAwB;EAC1C,IAAIA,GAAG,CAACF,MAAM,KAAKA,MAAM,EAAE;IACzB,MAAMG,UAAU,GAAGF,WAAW,IAAIJ,yBAAyB;IAC3D,MAAM,IAAIM,UAAU,CAAC;MACnBC,OAAO,EAAG,iCAAgCJ,MAAO,SAAQE,GAAG,CAACF,MAAO,UAASE,GAAG,CAACG,GAAI,EAAC;MACtFC,UAAU,EAAEJ,GAAG,CAACF,MAAM;MACtBO,MAAM,EAAE,MAAMC,oBAAoB,CAACN,GAAG,CAAC,CAAE;IAC3C,CAAC,CAAC;EACJ;;EACA,OAAOA,GAAG;AACZ,CAAC;;AAEH;AACA;AACA;AACA,OAAO,MAAMM,oBAAoB,GAC/BC,QAAkB;EAAA,IAAAC,qBAAA;EAAA,OAElB,CAAAA,qBAAA,GAAAD,QAAQ,CAACE,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC,cAAAF,qBAAA,eAApCA,qBAAA,CAAsCG,QAAQ,CAAC,kBAAkB,CAAC,GAC7DJ,QAAQ,CAACK,IAAI,CAAC,CAAC,GAChBL,QAAQ,CAACM,IAAI,CAAC,CAAC;AAAA;;AAErB;AACA;AAOA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gCAAgC,GAAIC,IAAY,IAC3DC,KAAK,CAACC,IAAI,CAACD,KAAK,CAACD,IAAI,CAAC,EAAE,MACtBG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAC5C,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iCAAiC,GAAG,MAC/CC,UAAkB,IACE;EACpB,MAAMC,UAAU,GAAGD,UAAU,CAACE,OAAO,CAAC,GAAG,CAAC;EAC1C,IAAID,UAAU,KAAK,CAAC,CAAC,EAAE;IACrB,MAAM,IAAI/B,aAAa,CAAC,2BAA2B,CAAC;EACtD;EACA,OAAOE,MAAM,CAAC4B,UAAU,CAACG,KAAK,CAAC,CAAC,EAAEF,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,OAAO,MAAMG,aAAa,GAAGA,CAAIf,IAAY,EAAEgB,WAAe,KAAe;EAC3E,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAAClB,IAAI,CAAC;EACzB,CAAC,CAAC,OAAOmB,CAAC,EAAE;IACV,OAAOH,WAAW,IAAI,IAAI;EAC5B;AACF,CAAC"}
|
1
|
+
{"version":3,"names":["IoWalletError","UnexpectedStatusCodeError","sha256","hasStatusOrThrow","status","customError","res","ErrorClass","message","url","statusCode","reason","parseRawHttpResponse","response","_response$headers$get","headers","get","includes","json","text","generateRandomAlphaNumericString","size","Array","from","Math","floor","random","toString","join","getCredentialHashWithouDiscloures","credential","tildeIndex","indexOf","slice","safeJsonParse","withDefault","JSON","parse","_","pathInsert","object","path","value","length"],"sourceRoot":"../../../src","sources":["utils/misc.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,yBAAyB,QAAQ,UAAU;AACnE,SAASC,MAAM,QAAQ,WAAW;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAC3BA,CAACC,MAAc,EAAEC,WAA8C,KAC/D,MAAOC,GAAa,IAAwB;EAC1C,IAAIA,GAAG,CAACF,MAAM,KAAKA,MAAM,EAAE;IACzB,MAAMG,UAAU,GAAGF,WAAW,IAAIJ,yBAAyB;IAC3D,MAAM,IAAIM,UAAU,CAAC;MACnBC,OAAO,EAAG,iCAAgCJ,MAAO,SAAQE,GAAG,CAACF,MAAO,UAASE,GAAG,CAACG,GAAI,EAAC;MACtFC,UAAU,EAAEJ,GAAG,CAACF,MAAM;MACtBO,MAAM,EAAE,MAAMC,oBAAoB,CAACN,GAAG,CAAC,CAAE;IAC3C,CAAC,CAAC;EACJ;;EACA,OAAOA,GAAG;AACZ,CAAC;;AAEH;AACA;AACA;AACA,OAAO,MAAMM,oBAAoB,GAC/BC,QAAkB;EAAA,IAAAC,qBAAA;EAAA,OAElB,CAAAA,qBAAA,GAAAD,QAAQ,CAACE,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC,cAAAF,qBAAA,eAApCA,qBAAA,CAAsCG,QAAQ,CAAC,kBAAkB,CAAC,GAC7DJ,QAAQ,CAACK,IAAI,CAAC,CAAC,GAChBL,QAAQ,CAACM,IAAI,CAAC,CAAC;AAAA;;AAErB;AACA;AAOA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gCAAgC,GAAIC,IAAY,IAC3DC,KAAK,CAACC,IAAI,CAACD,KAAK,CAACD,IAAI,CAAC,EAAE,MACtBG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAC5C,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iCAAiC,GAAG,MAC/CC,UAAkB,IACE;EACpB,MAAMC,UAAU,GAAGD,UAAU,CAACE,OAAO,CAAC,GAAG,CAAC;EAC1C,IAAID,UAAU,KAAK,CAAC,CAAC,EAAE;IACrB,MAAM,IAAI/B,aAAa,CAAC,2BAA2B,CAAC;EACtD;EACA,OAAOE,MAAM,CAAC4B,UAAU,CAACG,KAAK,CAAC,CAAC,EAAEF,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,OAAO,MAAMG,aAAa,GAAGA,CAAIf,IAAY,EAAEgB,WAAe,KAAe;EAC3E,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAAClB,IAAI,CAAC;EACzB,CAAC,CAAC,OAAOmB,CAAC,EAAE;IACV,OAAOH,WAAW,IAAI,IAAI;EAC5B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,UAAUA,CAACC,MAAW,EAAEC,IAAc,EAAEC,KAAU,EAAO;EACvE,IAAID,IAAI,CAACE,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO;MACL,GAAGH,MAAM;MACT,CAACC,IAAI,CAAC,CAAC,CAAC,GAAIC;IACd,CAAC;EACH;EACA,OAAO;IACL,GAAGF,MAAM;IACT,CAACC,IAAI,CAAC,CAAC,CAAC,GAAIF,UAAU,CACpBE,IAAI,CAAC,CAAC,CAAC,IAAKD,MAAM,GAAGA,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAC1CA,IAAI,CAACR,KAAK,CAAC,CAAC,CAAC,EACbS,KACF;EACF,CAAC;AACH"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { StartFlow } from "./01-start-flow";
|
2
|
-
import type
|
2
|
+
import { type Out } from "../../utils/misc";
|
3
3
|
import type { JWK } from "src/utils/jwk";
|
4
4
|
import type { CredentialConfigurationSupported } from "../../entity/openid-connect/issuer/types";
|
5
5
|
export type GetIssuerConfig = (issuerUrl: Out<StartFlow>["issuerUrl"], context?: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"02-get-issuer-config.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/02-get-issuer-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"02-get-issuer-config.d.ts","sourceRoot":"","sources":["../../../../src/credential/issuance/02-get-issuer-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAc,KAAK,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAGjG,MAAM,MAAM,eAAe,GAAG,CAC5B,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,EACtC,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,KACE,OAAO,CAAC;IAAE,UAAU,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAE3C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,mCAAmC,EAAE,gCAAgC,CAAC;IACtE,qCAAqC,EAAE,MAAM,CAAC;IAC9C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,eAS7B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,eASnC,CAAC"}
|
@@ -26,4 +26,12 @@ export declare const generateRandomAlphaNumericString: (size: number) => string;
|
|
26
26
|
*/
|
27
27
|
export declare const getCredentialHashWithouDiscloures: (credential: string) => Promise<string>;
|
28
28
|
export declare const safeJsonParse: <T>(text: string, withDefault?: T | undefined) => T | null;
|
29
|
+
/**
|
30
|
+
* Helper function to insert a value at a specified object path
|
31
|
+
* @param object The object in which to insert the value
|
32
|
+
* @param path The path at which the value should be inserted
|
33
|
+
* @param value The value to insert at the specified path
|
34
|
+
* @returns A new object with the property at path set to value, on-path objects are recreated
|
35
|
+
*/
|
36
|
+
export declare function pathInsert(object: any, path: string[], value: any): any;
|
29
37
|
//# sourceMappingURL=misc.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/utils/misc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGpE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,WAClB,MAAM,gBAAgB,gCAAgC,WACnD,QAAQ,KAAG,QAAQ,QAAQ,CAUtC,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,oBAAoB,gDACrB,QAAQ,iCAIC,CAAC;AAItB,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC7D,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GACvB,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAChC,UAAU,CAAC,EAAE,CAAC,GACd,KAAK,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,SAAU,MAAM,WAGjD,CAAC;AAEb;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,eAChC,MAAM,KACjB,QAAQ,MAAM,CAMhB,CAAC;AAEF,eAAO,MAAM,aAAa,YAAa,MAAM,0CAM5C,CAAC"}
|
1
|
+
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/utils/misc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAGpE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,WAClB,MAAM,gBAAgB,gCAAgC,WACnD,QAAQ,KAAG,QAAQ,QAAQ,CAUtC,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,oBAAoB,gDACrB,QAAQ,iCAIC,CAAC;AAItB,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,GAC7D,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GACvB,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAChC,UAAU,CAAC,EAAE,CAAC,GACd,KAAK,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,SAAU,MAAM,WAGjD,CAAC;AAEb;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,eAChC,MAAM,KACjB,QAAQ,MAAM,CAMhB,CAAC;AAEF,eAAO,MAAM,aAAa,YAAa,MAAM,0CAM5C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CAevE"}
|
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { StartFlow } from "./01-start-flow";
|
2
|
-
import type
|
2
|
+
import { pathInsert, type Out } from "../../utils/misc";
|
3
3
|
import type { JWK } from "src/utils/jwk";
|
4
4
|
import { getCredentialIssuerMetadata } from "../../entity/openid-connect/issuer";
|
5
5
|
import type { CredentialConfigurationSupported } from "../../entity/openid-connect/issuer/types";
|
@@ -110,42 +110,22 @@ const credentialIssuerRationalizationOIDFED = (
|
|
110
110
|
.credential_configurations_supported
|
111
111
|
).map(([key, config]) => {
|
112
112
|
const claimsRaw = config.claims;
|
113
|
-
// we need to evaluate how claims is in oder to support Federation and OID4VCI
|
114
|
-
// claim structure is different in both case
|
115
|
-
let claims: CredentialConfigurationSupported[string]["claims"];
|
116
113
|
|
117
|
-
|
118
|
-
claimsRaw
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
claims = Object.fromEntries(
|
124
|
-
Object.entries(claimsRaw).map(([, v]) => [
|
125
|
-
[v.path[0]],
|
126
|
-
{
|
127
|
-
mandatory: true,
|
114
|
+
const claims: CredentialConfigurationSupported[string]["claims"] =
|
115
|
+
Object.entries(claimsRaw)
|
116
|
+
.map(([, v]) => ({
|
117
|
+
path: v.path,
|
118
|
+
details: {
|
119
|
+
mandatory: v.mandatory,
|
128
120
|
display: v.display,
|
129
121
|
},
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
Object.fromEntries(
|
138
|
-
Object.entries(inner).map(([innerK, v]: any) => [
|
139
|
-
[innerK],
|
140
|
-
{
|
141
|
-
mandatory: v.mandatory,
|
142
|
-
display: v.display,
|
143
|
-
},
|
144
|
-
])
|
145
|
-
),
|
146
|
-
])
|
147
|
-
);
|
148
|
-
}
|
122
|
+
}))
|
123
|
+
.reduce(
|
124
|
+
(cumulated, entry) =>
|
125
|
+
pathInsert(cumulated, entry.path, entry.details),
|
126
|
+
{}
|
127
|
+
);
|
128
|
+
|
149
129
|
const newConfig: CredentialConfigurationSupported[string] = {
|
150
130
|
...config,
|
151
131
|
claims,
|
package/src/utils/misc.ts
CHANGED
@@ -73,3 +73,27 @@ export const safeJsonParse = <T>(text: string, withDefault?: T): T | null => {
|
|
73
73
|
return withDefault ?? null;
|
74
74
|
}
|
75
75
|
};
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Helper function to insert a value at a specified object path
|
79
|
+
* @param object The object in which to insert the value
|
80
|
+
* @param path The path at which the value should be inserted
|
81
|
+
* @param value The value to insert at the specified path
|
82
|
+
* @returns A new object with the property at path set to value, on-path objects are recreated
|
83
|
+
*/
|
84
|
+
export function pathInsert(object: any, path: string[], value: any): any {
|
85
|
+
if (path.length === 1) {
|
86
|
+
return {
|
87
|
+
...object,
|
88
|
+
[path[0]!]: value,
|
89
|
+
};
|
90
|
+
}
|
91
|
+
return {
|
92
|
+
...object,
|
93
|
+
[path[0]!]: pathInsert(
|
94
|
+
path[0]! in object ? object[path[0]!] : {},
|
95
|
+
path.slice(1),
|
96
|
+
value
|
97
|
+
),
|
98
|
+
};
|
99
|
+
}
|