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

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.
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"}