UNPKG

web-identity-schemas

Version:

TypeScript types and validation schemas for Web Identity and JOSE standards, including:

251 lines (191 loc) 10.7 kB
# Web Identity Schemas TypeScript types and validation schemas for Web Identity and JOSE standards, including: - Decentralized Identifiers (DID) - Verifiable Credentials (VC) v1.1 and v2.0, with StatusList2021, Bitstring Status List - Verifiable Presentations (VP) - JSON Web Tokens (JWT) - JSON Web Keys (JWK) - JSON Web Signatures (JWS) - [See the full list](#available-schemas) This library provides both Valibot and Zod (v4) validation implementations with comprehensive type safety. ## Installation ```bash npm install web-identity-schemas ``` ## Quick Start ### Valibot ```typescript import * as v from "valibot" import { DidSchema, JwkSchema, VerifiableCredentialSchema } from "web-identity-schemas/valibot" // Validate a DID const validDid = v.parse(DidSchema, "did:example:123456789abcdefghi") // Validate a Verifiable Credential const validVc = v.parse(VerifiableCredentialSchema, { "@context": "https://www.w3.org/2018/credentials/v1", type: "VerifiableCredential", issuer: "did:example:issuer", issuanceDate: "2023-01-01T00:00:00Z", credentialSubject: { id: "did:example:subject", degree: "Bachelor of Science" } }) // Validate cryptographic keys const validKey = v.parse(JsonWebKeySchema, { kty: "EC", crv: "P-256", x: "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", y: "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM" }) ``` ### Zod v4 ```typescript import * as z from "zod" import { DidSchema, JwkSchema, VerifiableCredentialSchema } from "web-identity-schemas/zod" // Validate a DID const validDid = DidSchema.parse("did:example:123456789abcdefghi") // Validate a Verifiable Credential const validVc = VerifiableCredentialSchema.parse({ "@context": "https://www.w3.org/2018/credentials/v1", type: "VerifiableCredential", issuer: "did:example:issuer", issuanceDate: "2023-01-01T00:00:00Z", credentialSubject: { id: "did:example:subject", degree: "Bachelor of Science" } }) // Validate cryptographic keys const validKey = JsonWebKeySchema.parse({ kty: "EC", crv: "P-256", x: "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4", y: "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM" }) ``` ## Type Safety All types are also available as Typescript types at the root of the package, and in each schema export ```typescript import type { Did, DidDocument, JwtString } from "web-identity-schemas" // or from "web-identity-schemas/valibot" // or from "web-identity-schemas/zod" const jwt: JwtString = "..." const did: Did = "did:method:something" const didWeb: Did<"web"> = "did:web:example.com" const didDocument: DidDocument = { // ... } ``` ## Available Schemas This library exports comprehensive schemas for Web Identity and JOSE standards. All schemas are available in both Valibot and Zod implementations, with corresponding TypeScript types. ### Core Web Identity Schemas #### Decentralized Identifiers (DIDs) - **`DidSchema`** - Validates DID strings (e.g., `did:example:123`) - [Types](./src/types/did/did.ts) | [Valibot](./src/valibot/did/did.ts) | [Zod](./src/zod/did/did.ts) - **`DidUrlSchema`** - Validates DID URLs with paths/queries/fragments - [Types](./src/types/did/did.ts) | [Valibot](./src/valibot/did/did.ts) | [Zod](./src/zod/did/did.ts) - **`DidDocumentSchema`** - Validates DID Documents - [Types](./src/types/did/did.ts) | [Valibot](./src/valibot/did/did.ts) | [Zod](./src/zod/did/did.ts) - **`VerificationMethodSchema`** - Validates verification methods in DID Documents - [Types](./src/types/did/did.ts) | [Valibot](./src/valibot/did/did.ts) | [Zod](./src/zod/did/did.ts) - **`ServiceSchema`** - Validates service endpoints in DID Documents - [Types](./src/types/did/did.ts) | [Valibot](./src/valibot/did/did.ts) | [Zod](./src/zod/did/did.ts) #### Verifiable Credentials (VCs) - **`VerifiableCredentialSchema`** - Universal VC validator (v1.1 and v2.0) - [Types](./src/types/vc/vc.ts) | [Valibot](./src/valibot/vc/vc.ts) | [Zod](./src/zod/vc/vc.ts) - **`VerifiableCredentialV1Schema`** - Specific v1.1 VC validator - [Types](./src/types/vc/v1.ts) | [Valibot](./src/valibot/vc/v1.ts) | [Zod](./src/zod/vc/v1.ts) - **`VerifiableCredentialV2Schema`** - Specific v2.0 VC validator - [Types](./src/types/vc/v2.ts) | [Valibot](./src/valibot/vc/v2.ts) | [Zod](./src/zod/vc/v2.ts) - **`VerifiablePresentationSchema`** - Validates verifiable presentations - [Types](./src/types/vc/core.ts) | [Valibot](./src/valibot/vc/vp.ts) | [Zod](./src/zod/vc/vp.ts) #### JSON Web Tokens (JWTs) - **`JwtObjectSchema`** - Validates JWT objects (header + payload) - [Types](./src/types/jose/jwt.ts) | [Valibot](./src/valibot/jose/jwt.ts) | [Zod](./src/zod/jose/jwt.ts) - **`JwtStringSchema`** - Validates JWT strings in compact format - [Types](./src/types/jose/jwt-string.ts) | [Valibot](./src/valibot/jose/jwt-string.ts) | [Zod](./src/zod/jose/jwt-string.ts) - **`JwtHeaderSignedSchema`** - Validates JWT headers for signed tokens - [Types](./src/types/jose/jwt.ts) | [Valibot](./src/valibot/jose/jwt.ts) | [Zod](./src/zod/jose/jwt.ts) - **`JwtPayloadSchema`** - Validates JWT payloads - [Types](./src/types/jose/jwt.ts) | [Valibot](./src/valibot/jose/jwt.ts) | [Zod](./src/zod/jose/jwt.ts) #### JSON Web Keys (JWKs) - **`JsonWebKeySchema`** - Universal JWK validator (all key types) - [Types](./src/types/jose/jwk.ts) | [Valibot](./src/valibot/jose/jwk.ts) | [Zod](./src/zod/jose/jwk.ts) - **`JsonWebKeySetSchema`** - Validates JWK Sets - [Types](./src/types/jose/jwks.ts) | [Valibot](./src/valibot/jose/jwks.ts) | [Zod](./src/zod/jose/jwks.ts) ### Cryptographic Schemas #### Specific JWK Types - **`RsaJwkSchema`** - RSA keys (kty: "RSA") - [Types](./src/types/jose/jwk.ts) | [Valibot](./src/valibot/jose/jwk.ts) | [Zod](./src/zod/jose/jwk.ts) - **`EcJwkSchema`** - Elliptic Curve keys (kty: "EC") - [Types](./src/types/jose/jwk.ts) | [Valibot](./src/valibot/jose/jwk.ts) | [Zod](./src/zod/jose/jwk.ts) - **`OctJwkSchema`** - Symmetric keys (kty: "oct") - [Types](./src/types/jose/jwk.ts) | [Valibot](./src/valibot/jose/jwk.ts) | [Zod](./src/zod/jose/jwk.ts) - **`OkpJwkSchema`** - Octet Key Pair keys (kty: "OKP") - [Types](./src/types/jose/jwk.ts) | [Valibot](./src/valibot/jose/jwk.ts) | [Zod](./src/zod/jose/jwk.ts) #### Cryptographic Curves - **`EllipticCurveSchema`** - Elliptic curve names (P-256, P-384, etc.) - [Types](./src/types/shared/curves.ts) | [Valibot](./src/valibot/shared/curves.ts) | [Zod](./src/zod/shared/curves.ts) - **`OctetKeyPairCurveSchema`** - OKP curve names (Ed25519, X25519) - [Types](./src/types/shared/curves.ts) | [Valibot](./src/valibot/shared/curves.ts) | [Zod](./src/zod/shared/curves.ts) ### JOSE Specifications #### JSON Web Signatures (JWS) - **`JwsObjectSchema`** - JWS in object format - [Types](./src/types/jose/jws.ts) | [Valibot](./src/valibot/jose/jws.ts) | [Zod](./src/zod/jose/jws.ts) - **`JwsStringSchema`** - JWS in compact string format - [Types](./src/types/jose/jws.ts) | [Valibot](./src/valibot/jose/jws.ts) | [Zod](./src/zod/jose/jws.ts) - **`JwsJsonSerializationSchema`** - JWS JSON General Serialization - [Types](./src/types/jose/jws.ts) | [Valibot](./src/valibot/jose/jws.ts) | [Zod](./src/zod/jose/jws.ts) - **`JwsFlattenedJsonSerializationSchema`** - JWS JSON Flattened Serialization - [Types](./src/types/jose/jws.ts) | [Valibot](./src/valibot/jose/jws.ts) | [Zod](./src/zod/jose/jws.ts) #### JSON Web Encryption (JWE) - **`JweObjectSchema`** - JWE in object format - [Types](./src/types/jose/jwe.ts) | [Valibot](./src/valibot/jose/jwe.ts) | [Zod](./src/zod/jose/jwe.ts) - **`JweStringSchema`** - JWE in compact string format - [Types](./src/types/jose/jwe.ts) | [Valibot](./src/valibot/jose/jwe.ts) | [Zod](./src/zod/jose/jwe.ts) - **`JweJsonSerializationSchema`** - JWE JSON General Serialization - [Types](./src/types/jose/jwe.ts) | [Valibot](./src/valibot/jose/jwe.ts) | [Zod](./src/zod/jose/jwe.ts) - **`JweFlattenedJsonSerializationSchema`** - JWE JSON Flattened Serialization - [Types](./src/types/jose/jwe.ts) | [Valibot](./src/valibot/jose/jwe.ts) | [Zod](./src/zod/jose/jwe.ts) #### JOSE Algorithms - **`JoseAlgorithmSchema`** - All JOSE algorithms - [Types](./src/types/shared/algorithms.ts) | [Valibot](./src/valibot/jose/jwa.ts) | [Zod](./src/zod/jose/jwa.ts) - **`JoseSignatureAlgorithmSchema`** - Signature algorithms (RS256, ES256, etc.) - [Types](./src/types/shared/algorithms.ts) | [Valibot](./src/valibot/jose/jwa.ts) | [Zod](./src/zod/jose/jwa.ts) - **`JweContentEncryptionAlgorithmSchema`** - Content encryption algorithms - [Types](./src/types/shared/algorithms.ts) | [Valibot](./src/valibot/jose/jwa.ts) | [Zod](./src/zod/jose/jwa.ts) - **`JweKeyManagementAlgorithmSchema`** - Key management algorithms - [Types](./src/types/shared/algorithms.ts) | [Valibot](./src/valibot/jose/jwa.ts) | [Zod](./src/zod/jose/jwa.ts) ### Status and Proof Schemas #### Credential Status - **`StatusList2021CredentialSchema`** - StatusList2021 credentials - [Types](./src/types/vc/status/statuslist2021.ts) | [Valibot](./src/valibot/vc/status/statuslist2021.ts) | [Zod](./src/zod/vc/status/statuslist2021.ts) - **`BitstringStatusListCredentialSchema`** - Bitstring status credentials - [Types](./src/types/vc/status/bitstring.ts) | [Valibot](./src/valibot/vc/status/bitstring.ts) | [Zod](./src/zod/vc/status/bitstring.ts) #### Proof Systems - **`ProofSchema`** - Cryptographic proof objects - [Types](./src/types/vc/proof.ts) | [Valibot](./src/valibot/vc/core.ts) | [Zod](./src/zod/vc/core.ts) ### Utility Schemas #### Common Formats - **`UriSchema`** - URI format validation - [Types](./src/types/shared/uri.ts) | [Valibot](./src/valibot/shared/uri.ts) | [Zod](./src/zod/shared/uri.ts) - **`Base64UrlSchema`** - Base64url encoded strings - [Types](./src/types/shared/base-64.ts) | [Valibot](./src/valibot/shared/base-64.ts) | [Zod](./src/zod/shared/base-64.ts) - **`Base64Schema`** - Base64 encoded strings - [Types](./src/types/shared/base-64.ts) | [Valibot](./src/valibot/shared/base-64.ts) | [Zod](./src/zod/shared/base-64.ts) - **`DateTimeStampSchema`** - ISO 8601 datetime strings - [Types](./src/types/shared/json-ld.ts) | [Valibot](./src/valibot/shared/json-ld.ts) | [Zod](./src/zod/shared/json-ld.ts) ## Contributing Contributions are welcome. This library maintains strict type safety and comprehensive test coverage. Both Valibot and Zod implementations must pass identical test suites to ensure consistency. See [`CLAUDE.md`](./CLAUDE.md) for detailed development guidelines and schema patterns. ## License (MIT) Copyright (c) 2025 [Catena Labs, Inc](https://catenalabs.com). See [`LICENSE`](./LICENSE) for details.