@pagopa/io-react-native-wallet 0.4.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. package/README.md +128 -19
  2. package/lib/commonjs/index.js +16 -23
  3. package/lib/commonjs/index.js.map +1 -1
  4. package/lib/commonjs/pid/index.js +3 -8
  5. package/lib/commonjs/pid/index.js.map +1 -1
  6. package/lib/commonjs/pid/issuing.js +153 -176
  7. package/lib/commonjs/pid/issuing.js.map +1 -1
  8. package/lib/commonjs/rp/__test__/index.test.js +7 -5
  9. package/lib/commonjs/rp/__test__/index.test.js.map +1 -1
  10. package/lib/commonjs/rp/index.js +145 -155
  11. package/lib/commonjs/rp/index.js.map +1 -1
  12. package/lib/commonjs/rp/types.js +1 -21
  13. package/lib/commonjs/rp/types.js.map +1 -1
  14. package/lib/commonjs/trust/index.js +24 -5
  15. package/lib/commonjs/trust/index.js.map +1 -1
  16. package/lib/commonjs/trust/types.js +102 -9
  17. package/lib/commonjs/trust/types.js.map +1 -1
  18. package/lib/commonjs/utils/crypto.js +46 -0
  19. package/lib/commonjs/utils/crypto.js.map +1 -0
  20. package/lib/commonjs/utils/dpop.js +14 -7
  21. package/lib/commonjs/utils/dpop.js.map +1 -1
  22. package/lib/commonjs/wallet-instance-attestation/index.js +3 -3
  23. package/lib/commonjs/wallet-instance-attestation/issuing.js +42 -60
  24. package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -1
  25. package/lib/module/index.js +4 -6
  26. package/lib/module/index.js.map +1 -1
  27. package/lib/module/pid/index.js +1 -1
  28. package/lib/module/pid/index.js.map +1 -1
  29. package/lib/module/pid/issuing.js +152 -180
  30. package/lib/module/pid/issuing.js.map +1 -1
  31. package/lib/module/rp/__test__/index.test.js +3 -3
  32. package/lib/module/rp/__test__/index.test.js.map +1 -1
  33. package/lib/module/rp/index.js +141 -154
  34. package/lib/module/rp/index.js.map +1 -1
  35. package/lib/module/rp/types.js +0 -20
  36. package/lib/module/rp/types.js.map +1 -1
  37. package/lib/module/trust/index.js +19 -5
  38. package/lib/module/trust/index.js.map +1 -1
  39. package/lib/module/trust/types.js +100 -7
  40. package/lib/module/trust/types.js.map +1 -1
  41. package/lib/module/utils/crypto.js +40 -0
  42. package/lib/module/utils/crypto.js.map +1 -0
  43. package/lib/module/utils/dpop.js +13 -5
  44. package/lib/module/utils/dpop.js.map +1 -1
  45. package/lib/module/wallet-instance-attestation/index.js +2 -2
  46. package/lib/module/wallet-instance-attestation/index.js.map +1 -1
  47. package/lib/module/wallet-instance-attestation/issuing.js +40 -58
  48. package/lib/module/wallet-instance-attestation/issuing.js.map +1 -1
  49. package/lib/typescript/index.d.ts +4 -6
  50. package/lib/typescript/index.d.ts.map +1 -1
  51. package/lib/typescript/pid/index.d.ts +1 -1
  52. package/lib/typescript/pid/index.d.ts.map +1 -1
  53. package/lib/typescript/pid/issuing.d.ts +43 -88
  54. package/lib/typescript/pid/issuing.d.ts.map +1 -1
  55. package/lib/typescript/rp/index.d.ts +41 -87
  56. package/lib/typescript/rp/index.d.ts.map +1 -1
  57. package/lib/typescript/rp/types.d.ts +10 -906
  58. package/lib/typescript/rp/types.d.ts.map +1 -1
  59. package/lib/typescript/sd-jwt/index.d.ts +1 -1
  60. package/lib/typescript/sd-jwt/index.d.ts.map +1 -1
  61. package/lib/typescript/trust/index.d.ts +806 -3
  62. package/lib/typescript/trust/index.d.ts.map +1 -1
  63. package/lib/typescript/trust/types.d.ts +9655 -297
  64. package/lib/typescript/trust/types.d.ts.map +1 -1
  65. package/lib/typescript/utils/crypto.d.ts +10 -0
  66. package/lib/typescript/utils/crypto.d.ts.map +1 -0
  67. package/lib/typescript/utils/dpop.d.ts +10 -2
  68. package/lib/typescript/utils/dpop.d.ts.map +1 -1
  69. package/lib/typescript/wallet-instance-attestation/index.d.ts +2 -2
  70. package/lib/typescript/wallet-instance-attestation/index.d.ts.map +1 -1
  71. package/lib/typescript/wallet-instance-attestation/issuing.d.ts +18 -31
  72. package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -1
  73. package/lib/typescript/wallet-instance-attestation/types.d.ts +4 -4
  74. package/package.json +2 -2
  75. package/src/index.ts +14 -13
  76. package/src/pid/index.ts +1 -1
  77. package/src/pid/issuing.ts +233 -232
  78. package/src/rp/__test__/index.test.ts +3 -3
  79. package/src/rp/index.ts +172 -194
  80. package/src/rp/types.ts +0 -24
  81. package/src/sd-jwt/index.ts +1 -1
  82. package/src/trust/index.ts +106 -5
  83. package/src/trust/types.ts +152 -34
  84. package/src/utils/crypto.ts +41 -0
  85. package/src/utils/dpop.ts +17 -7
  86. package/src/wallet-instance-attestation/index.ts +2 -2
  87. package/src/wallet-instance-attestation/issuing.ts +51 -63
  88. package/lib/commonjs/pid/metadata.js +0 -49
  89. package/lib/commonjs/pid/metadata.js.map +0 -1
  90. package/lib/module/pid/metadata.js +0 -41
  91. package/lib/module/pid/metadata.js.map +0 -1
  92. package/lib/typescript/pid/metadata.d.ts +0 -482
  93. package/lib/typescript/pid/metadata.d.ts.map +0 -1
  94. package/src/pid/metadata.ts +0 -46
@@ -5,6 +5,29 @@ import * as z from "zod";
5
5
  export const TrustMark = z.object({ id: z.string(), trust_mark: z.string() });
6
6
  export type TrustMark = z.infer<typeof TrustMark>;
7
7
 
8
+ // Display metadata for a credential, used by the issuer to
9
+ // instruct the Wallet Solution on how to render the credential correctly
10
+ type CredentialDisplayMetadata = z.infer<typeof CredentialDisplayMetadata>;
11
+ const CredentialDisplayMetadata = z.object({
12
+ name: z.string(),
13
+ locale: z.string(),
14
+ logo: z.object({
15
+ url: z.string(),
16
+ alt_text: z.string(),
17
+ }),
18
+ background_color: z.string(),
19
+ text_color: z.string(),
20
+ });
21
+
22
+ // Metadata for a credentia which i supported by a Issuer
23
+ type SupportedCredentialMetadata = z.infer<typeof SupportedCredentialMetadata>;
24
+ const SupportedCredentialMetadata = z.object({
25
+ format: z.literal("vc+sd-jwt"),
26
+ cryptographic_binding_methods_supported: z.array(z.string()),
27
+ cryptographic_suites_supported: z.array(z.string()),
28
+ display: z.array(CredentialDisplayMetadata),
29
+ });
30
+
8
31
  export type EntityStatement = z.infer<typeof EntityStatement>;
9
32
  export const EntityStatement = z.object({
10
33
  header: z.object({
@@ -22,43 +45,138 @@ export const EntityStatement = z.object({
22
45
  }),
23
46
  });
24
47
 
25
- export type EntityConfiguration = z.infer<typeof EntityConfiguration>;
26
- export const EntityConfiguration = z.object({
27
- header: z.object({
28
- typ: z.literal("entity-statement+jwt"),
29
- alg: z.string(),
30
- kid: z.string(),
31
- }),
32
- payload: z.object({
33
- exp: UnixTime,
34
- iat: UnixTime,
35
- iss: z.string(),
36
- sub: z.string(),
37
- jwks: z.object({
38
- keys: z.array(JWK),
48
+ export type EntityConfigurationHeader = z.infer<
49
+ typeof EntityConfigurationHeader
50
+ >;
51
+ export const EntityConfigurationHeader = z.object({
52
+ typ: z.literal("entity-statement+jwt"),
53
+ alg: z.string(),
54
+ kid: z.string(),
55
+ });
56
+
57
+ // Structuire common to every Entity Configuration document
58
+ const BaseEntityConfiguration = z.object({
59
+ header: EntityConfigurationHeader,
60
+ payload: z
61
+ .object({
62
+ exp: UnixTime,
63
+ iat: UnixTime,
64
+ iss: z.string(),
65
+ sub: z.string(),
66
+ jwks: z.object({
67
+ keys: z.array(JWK),
68
+ }),
69
+ metadata: z
70
+ .object({
71
+ federation_entity: z
72
+ .object({
73
+ federation_fetch_endpoint: z.string().optional(),
74
+ federation_list_endpoint: z.string().optional(),
75
+ federation_resolve_endpoint: z.string().optional(),
76
+ federation_trust_mark_status_endpoint: z.string().optional(),
77
+ federation_trust_mark_list_endpoint: z.string().optional(),
78
+ homepage_uri: z.string().optional(),
79
+ policy_uri: z.string().optional(),
80
+ logo_uri: z.string().optional(),
81
+ contacts: z.array(z.string()).optional(),
82
+ })
83
+ .passthrough(),
84
+ })
85
+ .passthrough(),
86
+ authority_hints: z.array(z.string()).optional(),
87
+ })
88
+ .passthrough(),
89
+ });
90
+
91
+ // Entity configuration for a Trust Anchor (it has no specific metadata section)
92
+ export type TrustAnchorEntityConfiguration = z.infer<
93
+ typeof TrustAnchorEntityConfiguration
94
+ >;
95
+ export const TrustAnchorEntityConfiguration = BaseEntityConfiguration;
96
+
97
+ // Entity configuration for a Credential Issuer
98
+ export type CredentialIssuerEntityConfiguration = z.infer<
99
+ typeof CredentialIssuerEntityConfiguration
100
+ >;
101
+ export const CredentialIssuerEntityConfiguration = BaseEntityConfiguration.and(
102
+ z.object({
103
+ payload: z.object({
104
+ jwks: z.object({ keys: z.array(JWK) }),
105
+ metadata: z.object({
106
+ openid_credential_issuer: z.object({
107
+ credential_issuer: z.string(),
108
+ authorization_endpoint: z.string(),
109
+ token_endpoint: z.string(),
110
+ pushed_authorization_request_endpoint: z.string(),
111
+ dpop_signing_alg_values_supported: z.array(z.string()),
112
+ credential_endpoint: z.string(),
113
+ credentials_supported: z.array(SupportedCredentialMetadata),
114
+ jwks: z.object({ keys: z.array(JWK) }),
115
+ }),
116
+ }),
39
117
  }),
40
- metadata: z
41
- .object({
42
- federation_entity: z
118
+ })
119
+ );
120
+
121
+ // Entity configuration for a Wallet Provider
122
+ export type WalletProviderEntityConfiguration = z.infer<
123
+ typeof WalletProviderEntityConfiguration
124
+ >;
125
+ export const WalletProviderEntityConfiguration = BaseEntityConfiguration.and(
126
+ z.object({
127
+ payload: z.object({
128
+ metadata: z.object({
129
+ wallet_provider: z
43
130
  .object({
44
- federation_fetch_endpoint: z.string().optional(),
45
- federation_list_endpoint: z.string().optional(),
46
- federation_resolve_endpoint: z.string().optional(),
47
- federation_trust_mark_status_endpoint: z.string().optional(),
48
- federation_trust_mark_list_endpoint: z.string().optional(),
49
- homepage_uri: z.string().optional(),
50
- policy_uri: z.string().optional(),
51
- logo_uri: z.string().optional(),
52
- contacts: z.array(z.string()).optional(),
131
+ token_endpoint: z.string(),
132
+ attested_security_context_values_supported: z
133
+ .array(z.string())
134
+ .optional(),
135
+ grant_types_supported: z.array(z.string()),
136
+ token_endpoint_auth_methods_supported: z.array(z.string()),
137
+ token_endpoint_auth_signing_alg_values_supported: z.array(
138
+ z.string()
139
+ ),
140
+ jwks: z.object({ keys: z.array(JWK) }),
53
141
  })
54
142
  .passthrough(),
55
- })
56
- .passthrough(),
57
- authority_hints: z.array(z.string()).optional(),
58
- }),
59
- });
143
+ }),
144
+ }),
145
+ })
146
+ );
60
147
 
61
- export type TrustAnchorEntityConfiguration = z.infer<
62
- typeof TrustAnchorEntityConfiguration
148
+ // Entity configuration for a Relying Party
149
+ export type RelyingPartyEntityConfiguration = z.infer<
150
+ typeof RelyingPartyEntityConfiguration
63
151
  >;
64
- export const TrustAnchorEntityConfiguration = EntityConfiguration;
152
+ export const RelyingPartyEntityConfiguration = BaseEntityConfiguration.and(
153
+ z.object({
154
+ payload: z.object({
155
+ metadata: z.object({
156
+ wallet_relying_party: z
157
+ .object({
158
+ application_type: z.string().optional(),
159
+ client_id: z.string().optional(),
160
+ client_name: z.string().optional(),
161
+ jwks: z.array(JWK),
162
+ contacts: z.array(z.string()).optional(),
163
+ })
164
+ .passthrough(),
165
+ }),
166
+ }),
167
+ })
168
+ );
169
+
170
+ // Maps any entity configuration by the union of every possible shapes
171
+ export type EntityConfiguration = z.infer<typeof EntityConfiguration>;
172
+ export const EntityConfiguration = z.union(
173
+ [
174
+ WalletProviderEntityConfiguration,
175
+ CredentialIssuerEntityConfiguration,
176
+ TrustAnchorEntityConfiguration,
177
+ RelyingPartyEntityConfiguration,
178
+ ],
179
+ {
180
+ description: "Any kind of Entity Configuration allowed in the ecosystem",
181
+ }
182
+ );
@@ -0,0 +1,41 @@
1
+ import { getPublicKey, sign } from "@pagopa/io-react-native-crypto";
2
+ import { thumbprint, type CryptoContext } from "@pagopa/io-react-native-jwt";
3
+ import { fixBase64EncodingOnKey } from "./jwk";
4
+
5
+ /**
6
+ * Create a CryptoContext bound to a key pair.
7
+ * Key pair is supposed to exist already in the device's keychain.
8
+ * It's identified by its unique keytag.
9
+ *
10
+ * @returns the crypto context
11
+ */
12
+ export const createCryptoContextFor = (keytag: string): CryptoContext => {
13
+ return {
14
+ /**
15
+ * Retrieve the public key of the pair.
16
+ * If the key pair doesn't exist yet, an error is raised
17
+ * @returns The public key.
18
+ */
19
+ async getPublicKey() {
20
+ return getPublicKey(keytag)
21
+ .then(fixBase64EncodingOnKey)
22
+ .then(async (jwk) => ({
23
+ ...jwk,
24
+ // Keys in the TEE are not stored with their KID, which is supposed to be assigned when they are included in JWK sets.
25
+ // (that is, KID is not a propoerty of the key itself, but it's property used to identify a key in a set).
26
+ // We assume the convention we use the thumbprint of the public key as KID, thus for easy development we decided to evaluate KID here
27
+ // However the values is an arbitrary string that might be anything
28
+ kid: await thumbprint(jwk),
29
+ }));
30
+ },
31
+ /**
32
+ * Get a signature for a provided value.
33
+ * If the key pair doesn't exist yet, an error is raised.
34
+ * @param value
35
+ * @returns The signature for the value
36
+ */
37
+ async getSignature(value: string) {
38
+ return sign(value, keytag);
39
+ },
40
+ };
41
+ };
package/src/utils/dpop.ts CHANGED
@@ -1,19 +1,29 @@
1
1
  import * as z from "zod";
2
2
 
3
- import { SignJWT } from "@pagopa/io-react-native-jwt";
4
- import type { JWK } from "./jwk";
3
+ import { SignJWT, type CryptoContext } from "@pagopa/io-react-native-jwt";
5
4
 
6
- export const getUnsignedDPop = (jwk: JWK, payload: DPoPPayload): string => {
7
- const dPop = new SignJWT(payload)
5
+ /**
6
+ * Create a signed DPoP token
7
+ *
8
+ * @param payload The payload to be included in the token.
9
+ * @param crypto The crypto context that handles the key bound to the DPoP.
10
+ *
11
+ * @returns The signed crypto token.
12
+ */
13
+ export const createDPopToken = async (
14
+ payload: DPoPPayload,
15
+ crypto: CryptoContext
16
+ ): Promise<string> => {
17
+ const jwk = await crypto.getPublicKey();
18
+ return new SignJWT(crypto)
19
+ .setPayload(payload)
8
20
  .setProtectedHeader({
9
- alg: "ES256",
10
21
  typ: "dpop+jwt",
11
22
  jwk,
12
23
  })
13
24
  .setIssuedAt()
14
25
  .setExpirationTime("1h")
15
- .toSign();
16
- return dPop;
26
+ .sign();
17
27
  };
18
28
 
19
29
  export type DPoPPayload = z.infer<typeof DPoPPayload>;
@@ -2,8 +2,8 @@ import { WalletInstanceAttestationJwt } from "./types";
2
2
  import { decode as decodeJwt } from "@pagopa/io-react-native-jwt";
3
3
  import { verify as verifyJwt } from "@pagopa/io-react-native-jwt";
4
4
 
5
- import { Issuing } from "./issuing";
6
- export { Issuing };
5
+ import { getAttestation } from "./issuing";
6
+ export { getAttestation };
7
7
  /**
8
8
  * Decode a given JWT to get the parsed Wallet Instance Attestation object they define.
9
9
  * It ensures provided data is in a valid shape.
@@ -1,78 +1,65 @@
1
- import { decode as decodeJwt } from "@pagopa/io-react-native-jwt";
1
+ import {
2
+ type CryptoContext,
3
+ decode as decodeJwt,
4
+ } from "@pagopa/io-react-native-jwt";
2
5
  import { verify as verifyJwt } from "@pagopa/io-react-native-jwt";
3
6
  import { SignJWT, thumbprint } from "@pagopa/io-react-native-jwt";
4
7
  import { JWK, fixBase64EncodingOnKey } from "../utils/jwk";
5
8
  import { WalletInstanceAttestationRequestJwt } from "./types";
6
9
  import uuid from "react-native-uuid";
7
10
  import { WalletInstanceAttestationIssuingError } from "../utils/errors";
11
+ import type { WalletProviderEntityConfiguration } from "../trust/types";
8
12
 
9
- export class Issuing {
10
- walletProviderBaseUrl: string;
11
- appFetch: GlobalFetch["fetch"];
12
- constructor(
13
- walletProviderBaseUrl: string,
14
- appFetch: GlobalFetch["fetch"] = fetch
15
- ) {
16
- this.walletProviderBaseUrl = walletProviderBaseUrl;
17
- this.appFetch = appFetch;
18
- }
13
+ async function getAttestationRequest(
14
+ wiaCryptoContext: CryptoContext,
15
+ walletProviderEntityConfiguration: WalletProviderEntityConfiguration
16
+ ): Promise<string> {
17
+ const jwk = await wiaCryptoContext.getPublicKey();
18
+ const parsedJwk = JWK.parse(jwk);
19
+ const keyThumbprint = await thumbprint(parsedJwk);
20
+ const publicKey = { ...parsedJwk, kid: keyThumbprint };
19
21
 
20
- /**
21
- * Get the Wallet Instance Attestation Request to sign
22
- *
23
- * @async @function
24
- *
25
- * @param jwk Public key of the wallet instance
26
- *
27
- * @returns {string} Wallet Instance Attestation Request to sign
28
- *
29
- */
30
- async getAttestationRequestToSign(jwk: JWK): Promise<string> {
31
- const parsedJwk = JWK.parse(jwk);
32
- const keyThumbprint = await thumbprint(parsedJwk);
33
- const publicKey = { ...parsedJwk, kid: keyThumbprint };
34
-
35
- const walletInstanceAttestationRequest = new SignJWT({
22
+ return new SignJWT(wiaCryptoContext)
23
+ .setPayload({
36
24
  iss: keyThumbprint,
37
- aud: this.walletProviderBaseUrl,
25
+ aud: walletProviderEntityConfiguration.payload.iss,
38
26
  jti: `${uuid.v4()}`,
39
27
  nonce: `${uuid.v4()}`,
40
28
  cnf: {
41
29
  jwk: fixBase64EncodingOnKey(publicKey),
42
30
  },
43
31
  })
44
- .setProtectedHeader({
45
- alg: "ES256",
46
- kid: publicKey.kid,
47
- typ: "wiar+jwt",
48
- })
49
- .setIssuedAt()
50
- .setExpirationTime("1h")
51
- .toSign();
52
-
53
- return walletInstanceAttestationRequest;
54
- }
32
+ .setProtectedHeader({
33
+ kid: publicKey.kid,
34
+ typ: "wiar+jwt",
35
+ })
36
+ .setIssuedAt()
37
+ .setExpirationTime("1h")
38
+ .sign();
39
+ }
55
40
 
56
- /**
57
- * Get the Wallet Instance Attestation given a
58
- * Wallet Instance Attestation Request and signature
59
- *
60
- * @async @function
61
- *
62
- * @param attestationRequest Wallet Instance Attestaion Request
63
- * obtained with {@link getAttestationRequestToSign}
64
- * @param signature Signature of the Wallet Instance Attestaion Request
65
- *
66
- * @returns {string} Wallet Instance Attestation
67
- *
68
- */
69
- async getAttestation(
70
- attestationRequest: string,
71
- signature: string
72
- ): Promise<string> {
73
- const signedAttestationRequest = await SignJWT.appendSignature(
74
- attestationRequest,
75
- signature
41
+ /**
42
+ * Request a Wallet Instance Attestation (WIA) to the Wallet provider
43
+ *
44
+ * @param params.wiaCryptoContext The key pair associated with the WIA. Will be use to prove the ownership of the attestation.
45
+ * @param params.appFetch (optional) Http client
46
+ * @param walletProviderBaseUrl Base url for the Wallet Provider
47
+ * @returns The retrieved Wallet Instance Attestation token
48
+ */
49
+ export const getAttestation =
50
+ ({
51
+ wiaCryptoContext,
52
+ appFetch = fetch,
53
+ }: {
54
+ wiaCryptoContext: CryptoContext;
55
+ appFetch?: GlobalFetch["fetch"];
56
+ }) =>
57
+ async (
58
+ walletProviderEntityConfiguration: WalletProviderEntityConfiguration
59
+ ): Promise<string> => {
60
+ const signedAttestationRequest = await getAttestationRequest(
61
+ wiaCryptoContext,
62
+ walletProviderEntityConfiguration
76
63
  );
77
64
 
78
65
  const decodedRequest = decodeJwt(signedAttestationRequest);
@@ -84,13 +71,15 @@ export class Issuing {
84
71
 
85
72
  await verifyJwt(signedAttestationRequest, publicKey);
86
73
 
87
- const tokenUrl = new URL("token", this.walletProviderBaseUrl).href;
74
+ const tokenUrl =
75
+ walletProviderEntityConfiguration.payload.metadata.wallet_provider
76
+ .token_endpoint;
88
77
  const requestBody = {
89
78
  grant_type:
90
79
  "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation",
91
80
  assertion: signedAttestationRequest,
92
81
  };
93
- const response = await this.appFetch(tokenUrl, {
82
+ const response = await appFetch(tokenUrl, {
94
83
  method: "POST",
95
84
  headers: {
96
85
  "Content-Type": "application/json",
@@ -106,5 +95,4 @@ export class Issuing {
106
95
  "Unable to obtain wallet instance attestation from wallet provider",
107
96
  `Response code: ${response.status}`
108
97
  );
109
- }
110
- }
98
+ };
@@ -1,49 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.PidIssuerEntityConfiguration = exports.PidDisplayMetadata = void 0;
7
- var _jwk = require("../utils/jwk");
8
- var _zod = require("zod");
9
- const PidDisplayMetadata = _zod.z.object({
10
- name: _zod.z.string(),
11
- locale: _zod.z.string(),
12
- logo: _zod.z.object({
13
- url: _zod.z.string(),
14
- alt_text: _zod.z.string()
15
- }),
16
- background_color: _zod.z.string(),
17
- text_color: _zod.z.string()
18
- });
19
- exports.PidDisplayMetadata = PidDisplayMetadata;
20
- const PidIssuerEntityConfiguration = _zod.z.object({
21
- jwks: _zod.z.object({
22
- keys: _zod.z.array(_jwk.JWK)
23
- }),
24
- metadata: _zod.z.object({
25
- openid_credential_issuer: _zod.z.object({
26
- credential_issuer: _zod.z.string(),
27
- authorization_endpoint: _zod.z.string(),
28
- token_endpoint: _zod.z.string(),
29
- pushed_authorization_request_endpoint: _zod.z.string(),
30
- dpop_signing_alg_values_supported: _zod.z.array(_zod.z.string()),
31
- credential_endpoint: _zod.z.string(),
32
- credentials_supported: _zod.z.array(_zod.z.object({
33
- format: _zod.z.literal("vc+sd-jwt"),
34
- cryptographic_binding_methods_supported: _zod.z.array(_zod.z.string()),
35
- cryptographic_suites_supported: _zod.z.array(_zod.z.string()),
36
- display: _zod.z.array(PidDisplayMetadata)
37
- }))
38
- }),
39
- federation_entity: _zod.z.object({
40
- organization_name: _zod.z.string(),
41
- homepage_uri: _zod.z.string(),
42
- policy_uri: _zod.z.string(),
43
- tos_uri: _zod.z.string(),
44
- logo_uri: _zod.z.string()
45
- })
46
- })
47
- });
48
- exports.PidIssuerEntityConfiguration = PidIssuerEntityConfiguration;
49
- //# sourceMappingURL=metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_jwk","require","_zod","PidDisplayMetadata","z","object","name","string","locale","logo","url","alt_text","background_color","text_color","exports","PidIssuerEntityConfiguration","jwks","keys","array","JWK","metadata","openid_credential_issuer","credential_issuer","authorization_endpoint","token_endpoint","pushed_authorization_request_endpoint","dpop_signing_alg_values_supported","credential_endpoint","credentials_supported","format","literal","cryptographic_binding_methods_supported","cryptographic_suites_supported","display","federation_entity","organization_name","homepage_uri","policy_uri","tos_uri","logo_uri"],"sourceRoot":"../../../src","sources":["pid/metadata.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAGO,MAAME,kBAAkB,GAAGC,MAAC,CAACC,MAAM,CAAC;EACzCC,IAAI,EAAEF,MAAC,CAACG,MAAM,CAAC,CAAC;EAChBC,MAAM,EAAEJ,MAAC,CAACG,MAAM,CAAC,CAAC;EAClBE,IAAI,EAAEL,MAAC,CAACC,MAAM,CAAC;IACbK,GAAG,EAAEN,MAAC,CAACG,MAAM,CAAC,CAAC;IACfI,QAAQ,EAAEP,MAAC,CAACG,MAAM,CAAC;EACrB,CAAC,CAAC;EACFK,gBAAgB,EAAER,MAAC,CAACG,MAAM,CAAC,CAAC;EAC5BM,UAAU,EAAET,MAAC,CAACG,MAAM,CAAC;AACvB,CAAC,CAAC;AAACO,OAAA,CAAAX,kBAAA,GAAAA,kBAAA;AAKI,MAAMY,4BAA4B,GAAGX,MAAC,CAACC,MAAM,CAAC;EACnDW,IAAI,EAAEZ,MAAC,CAACC,MAAM,CAAC;IAAEY,IAAI,EAAEb,MAAC,CAACc,KAAK,CAACC,QAAG;EAAE,CAAC,CAAC;EACtCC,QAAQ,EAAEhB,MAAC,CAACC,MAAM,CAAC;IACjBgB,wBAAwB,EAAEjB,MAAC,CAACC,MAAM,CAAC;MACjCiB,iBAAiB,EAAElB,MAAC,CAACG,MAAM,CAAC,CAAC;MAC7BgB,sBAAsB,EAAEnB,MAAC,CAACG,MAAM,CAAC,CAAC;MAClCiB,cAAc,EAAEpB,MAAC,CAACG,MAAM,CAAC,CAAC;MAC1BkB,qCAAqC,EAAErB,MAAC,CAACG,MAAM,CAAC,CAAC;MACjDmB,iCAAiC,EAAEtB,MAAC,CAACc,KAAK,CAACd,MAAC,CAACG,MAAM,CAAC,CAAC,CAAC;MACtDoB,mBAAmB,EAAEvB,MAAC,CAACG,MAAM,CAAC,CAAC;MAC/BqB,qBAAqB,EAAExB,MAAC,CAACc,KAAK,CAC5Bd,MAAC,CAACC,MAAM,CAAC;QACPwB,MAAM,EAAEzB,MAAC,CAAC0B,OAAO,CAAC,WAAW,CAAC;QAC9BC,uCAAuC,EAAE3B,MAAC,CAACc,KAAK,CAACd,MAAC,CAACG,MAAM,CAAC,CAAC,CAAC;QAC5DyB,8BAA8B,EAAE5B,MAAC,CAACc,KAAK,CAACd,MAAC,CAACG,MAAM,CAAC,CAAC,CAAC;QACnD0B,OAAO,EAAE7B,MAAC,CAACc,KAAK,CAACf,kBAAkB;MACrC,CAAC,CACH;IACF,CAAC,CAAC;IACF+B,iBAAiB,EAAE9B,MAAC,CAACC,MAAM,CAAC;MAC1B8B,iBAAiB,EAAE/B,MAAC,CAACG,MAAM,CAAC,CAAC;MAC7B6B,YAAY,EAAEhC,MAAC,CAACG,MAAM,CAAC,CAAC;MACxB8B,UAAU,EAAEjC,MAAC,CAACG,MAAM,CAAC,CAAC;MACtB+B,OAAO,EAAElC,MAAC,CAACG,MAAM,CAAC,CAAC;MACnBgC,QAAQ,EAAEnC,MAAC,CAACG,MAAM,CAAC;IACrB,CAAC;EACH,CAAC;AACH,CAAC,CAAC;AAACO,OAAA,CAAAC,4BAAA,GAAAA,4BAAA"}
@@ -1,41 +0,0 @@
1
- import { JWK } from "../utils/jwk";
2
- import { z } from "zod";
3
- export const PidDisplayMetadata = z.object({
4
- name: z.string(),
5
- locale: z.string(),
6
- logo: z.object({
7
- url: z.string(),
8
- alt_text: z.string()
9
- }),
10
- background_color: z.string(),
11
- text_color: z.string()
12
- });
13
- export const PidIssuerEntityConfiguration = z.object({
14
- jwks: z.object({
15
- keys: z.array(JWK)
16
- }),
17
- metadata: z.object({
18
- openid_credential_issuer: z.object({
19
- credential_issuer: z.string(),
20
- authorization_endpoint: z.string(),
21
- token_endpoint: z.string(),
22
- pushed_authorization_request_endpoint: z.string(),
23
- dpop_signing_alg_values_supported: z.array(z.string()),
24
- credential_endpoint: z.string(),
25
- credentials_supported: z.array(z.object({
26
- format: z.literal("vc+sd-jwt"),
27
- cryptographic_binding_methods_supported: z.array(z.string()),
28
- cryptographic_suites_supported: z.array(z.string()),
29
- display: z.array(PidDisplayMetadata)
30
- }))
31
- }),
32
- federation_entity: z.object({
33
- organization_name: z.string(),
34
- homepage_uri: z.string(),
35
- policy_uri: z.string(),
36
- tos_uri: z.string(),
37
- logo_uri: z.string()
38
- })
39
- })
40
- });
41
- //# sourceMappingURL=metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["JWK","z","PidDisplayMetadata","object","name","string","locale","logo","url","alt_text","background_color","text_color","PidIssuerEntityConfiguration","jwks","keys","array","metadata","openid_credential_issuer","credential_issuer","authorization_endpoint","token_endpoint","pushed_authorization_request_endpoint","dpop_signing_alg_values_supported","credential_endpoint","credentials_supported","format","literal","cryptographic_binding_methods_supported","cryptographic_suites_supported","display","federation_entity","organization_name","homepage_uri","policy_uri","tos_uri","logo_uri"],"sourceRoot":"../../../src","sources":["pid/metadata.ts"],"mappings":"AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,CAAC,QAAQ,KAAK;AAGvB,OAAO,MAAMC,kBAAkB,GAAGD,CAAC,CAACE,MAAM,CAAC;EACzCC,IAAI,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC;EAChBC,MAAM,EAAEL,CAAC,CAACI,MAAM,CAAC,CAAC;EAClBE,IAAI,EAAEN,CAAC,CAACE,MAAM,CAAC;IACbK,GAAG,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC;IACfI,QAAQ,EAAER,CAAC,CAACI,MAAM,CAAC;EACrB,CAAC,CAAC;EACFK,gBAAgB,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC;EAC5BM,UAAU,EAAEV,CAAC,CAACI,MAAM,CAAC;AACvB,CAAC,CAAC;AAKF,OAAO,MAAMO,4BAA4B,GAAGX,CAAC,CAACE,MAAM,CAAC;EACnDU,IAAI,EAAEZ,CAAC,CAACE,MAAM,CAAC;IAAEW,IAAI,EAAEb,CAAC,CAACc,KAAK,CAACf,GAAG;EAAE,CAAC,CAAC;EACtCgB,QAAQ,EAAEf,CAAC,CAACE,MAAM,CAAC;IACjBc,wBAAwB,EAAEhB,CAAC,CAACE,MAAM,CAAC;MACjCe,iBAAiB,EAAEjB,CAAC,CAACI,MAAM,CAAC,CAAC;MAC7Bc,sBAAsB,EAAElB,CAAC,CAACI,MAAM,CAAC,CAAC;MAClCe,cAAc,EAAEnB,CAAC,CAACI,MAAM,CAAC,CAAC;MAC1BgB,qCAAqC,EAAEpB,CAAC,CAACI,MAAM,CAAC,CAAC;MACjDiB,iCAAiC,EAAErB,CAAC,CAACc,KAAK,CAACd,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC;MACtDkB,mBAAmB,EAAEtB,CAAC,CAACI,MAAM,CAAC,CAAC;MAC/BmB,qBAAqB,EAAEvB,CAAC,CAACc,KAAK,CAC5Bd,CAAC,CAACE,MAAM,CAAC;QACPsB,MAAM,EAAExB,CAAC,CAACyB,OAAO,CAAC,WAAW,CAAC;QAC9BC,uCAAuC,EAAE1B,CAAC,CAACc,KAAK,CAACd,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC;QAC5DuB,8BAA8B,EAAE3B,CAAC,CAACc,KAAK,CAACd,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC;QACnDwB,OAAO,EAAE5B,CAAC,CAACc,KAAK,CAACb,kBAAkB;MACrC,CAAC,CACH;IACF,CAAC,CAAC;IACF4B,iBAAiB,EAAE7B,CAAC,CAACE,MAAM,CAAC;MAC1B4B,iBAAiB,EAAE9B,CAAC,CAACI,MAAM,CAAC,CAAC;MAC7B2B,YAAY,EAAE/B,CAAC,CAACI,MAAM,CAAC,CAAC;MACxB4B,UAAU,EAAEhC,CAAC,CAACI,MAAM,CAAC,CAAC;MACtB6B,OAAO,EAAEjC,CAAC,CAACI,MAAM,CAAC,CAAC;MACnB8B,QAAQ,EAAElC,CAAC,CAACI,MAAM,CAAC;IACrB,CAAC;EACH,CAAC;AACH,CAAC,CAAC"}