Resolve did:jwks documents using did-resolver
npm install jwks-did-resolverA did:jwks resolver plugin for the standard did-resolver library.
``bash`
npm install jwks-did-resolver did-resolver
`typescript
import { Resolver } from "did-resolver"
import { getResolver } from "jwks-did-resolver"
const resolver = new Resolver({
...getResolver()
})
const result = await resolver.resolve("did:jwks:accounts.google.com")
console.log(result.didDocument)
`
Returns a resolver registry for use with did-resolver.
`typescript
import { Resolver } from "did-resolver"
import { getResolver } from "jwks-did-resolver"
const resolver = new Resolver({
...getResolver()
// Add other DID method resolvers
})
`
`typescript
import { Resolver } from "did-resolver"
import { getResolver } from "jwks-did-resolver"
const resolver = new Resolver(getResolver())
// Resolve Google's OAuth2 JWKS as a DID
const googleResult = await resolver.resolve("did:jwks:accounts.google.com")
// Resolve GitHub Actions JWKS as a DID
const githubResult = await resolver.resolve(
"did:jwks:token.actions.githubusercontent.com"
)
// Resolve custom domain with path
const customResult = await resolver.resolve(
"did:jwks:auth.mycompany.com:api:v1"
)
`
`typescript
import { Resolver } from "did-resolver"
import { getResolver as getWebResolver } from "web-did-resolver"
import { getResolver as getJwksResolver } from "jwks-did-resolver"
const resolver = new Resolver({
...getWebResolver(),
...getJwksResolver()
// Other resolvers...
})
// Now supports both did:web and did:jwks
const webResult = await resolver.resolve("did:web:example.com")
const jwksResult = await resolver.resolve("did:jwks:example.com")
`
1. Parse DID: Extracts domain and path components
2. JWKS Discovery:
- Direct: https://domain{/path}/.well-known/jwks.jsonhttps://domain{/path}/.well-known/openid-configuration
- OAuth2 Discovery:
3. Transform: Converts JWKS to DID verification methods
4. Return: Standard DID Resolution result
Returns standard DID Resolution error types:
`typescript
const result = await resolver.resolve("did:jwks:invalid.domain")
switch (result.didResolutionMetadata.error) {
case "invalidDid":
// DID syntax error
break
case "notFound":
// JWKS endpoint not found
break
case "representationNotSupported":
// Invalid accept header
break
}
`
Copyright (c) 2025 Catena Labs, Inc. See LICENSE` for details.