This guide covers the GoDiddy integration for TrustWeave. The GoDiddy plugin provides HTTP integration with GoDiddy services, including Universal Resolver, Registrar, Issuer, and Verifier, supporting 20+ DID methods.
Overview
The did/plugins/godiddy module provides HTTP integration with GoDiddy services for DID operations. This integration enables you to:
Resolve DIDs using GoDiddy Universal Resolver
Register DIDs via GoDiddy Registrar
Issue credentials using GoDiddy Issuer
Verify credentials using GoDiddy Verifier
Support 20+ DID methods through GoDiddy’s universal interfaces
importorg.trustweave.godiddy.*importorg.trustweave.did.*// Create configurationvalconfig=GodiddyConfig(baseUrl="https://api.godiddy.com",// Default public APItimeout=30000,apiKey=null// Optional API key if required)// Create GoDiddy clientvalclient=GodiddyClient(config)// Build a DID method (supplying method name, resolver, and optional registrar)importorg.trustweave.godiddy.resolver.GodiddyResolverimportorg.trustweave.godiddy.registrar.GodiddyRegistrarimportorg.trustweave.godiddy.did.GodiddyDidMethodvalresolver=GodiddyResolver(client)valregistrar=GodiddyRegistrar(client)valmethod=GodiddyDidMethod(method="key",resolver=resolver,registrar=registrar)
Custom Configuration
1
2
3
4
5
6
7
8
9
10
11
// Use self-hosted GoDiddy instancevalconfig=GodiddyConfig(baseUrl="https://godiddy.example.com",timeout=60000,apiKey="your-api-key")valclient=GodiddyClient(config)valresolver=GodiddyResolver(client)valregistrar=GodiddyRegistrar(client)valmethod=GodiddyDidMethod(method="key",resolver=resolver,registrar=registrar)
SPI Auto-Discovery
When the did/plugins/godiddy module is on the classpath, GoDiddy is automatically available:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importorg.trustweave.did.*importorg.trustweave.did.spi.DidMethodProviderimportjava.util.ServiceLoader// Discover GoDiddy provider (matches any method it supports, e.g. "key", "web", "ethr"...)valproviders=ServiceLoader.load(DidMethodProvider::class.java)valgodiddyProvider=providers.find{it.name=="godiddy"}// Create method with configuration. Note: pass the underlying DID method name// (e.g. "key", "web", "ethr") — there is no "godiddy" DID method itself.valoptions=didCreationOptions{property("baseUrl","https://api.godiddy.com")property("timeout",30000L)}valmethod=godiddyProvider?.create("key",options)
importorg.trustweave.godiddy.*importorg.trustweave.godiddy.resolver.GodiddyResolverimportorg.trustweave.did.resolver.DidResolutionResultimportkotlinx.coroutines.runBlockingvalclient=GodiddyClient(GodiddyConfig.default())valresolver=GodiddyResolver(client)// Resolve any DID via Universal Resolver (suspend, so run in a coroutine)runBlocking{valdid="did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"valresolutionResult=resolver.resolveDid(did)when(resolutionResult){isDidResolutionResult.Success->{println("Resolved DID: ${resolutionResult.document.id}")println("Document: ${resolutionResult.document}")}isDidResolutionResult.Failure->{println("Resolution failed: ${resolutionResult::class.simpleName}")}}}
importorg.trustweave.godiddy.*importorg.trustweave.godiddy.registrar.GodiddyRegistrarimportorg.trustweave.did.registrar.model.CreateDidOptionsimportorg.trustweave.did.registrar.model.KeyManagementModeimportorg.trustweave.did.registrar.model.OperationStateimportkotlinx.coroutines.runBlockingvalclient=GodiddyClient(GodiddyConfig.default())valregistrar=GodiddyRegistrar(client)// Register DID via Universal Registrar (returns DidRegistrationResponse with didState)runBlocking{valoptions=CreateDidOptions(keyManagementMode=KeyManagementMode.INTERNAL_SECRET,storeSecrets=false,returnSecrets=false)valresponse=registrar.createDid(method="key",options=options)when(response.didState.state){OperationState.FINISHED->println("Registered DID: ${response.didState.did}")OperationState.WAIT->println("Pending (jobId=${response.jobId})")else->println("Registration failed: ${response.didState.reason}")}}
importorg.trustweave.godiddy.*importorg.trustweave.godiddy.issuer.GodiddyIssuerimportkotlinx.coroutines.runBlockingimportkotlinx.serialization.json.*importorg.trustweave.core.json.jsonDatavalclient=GodiddyClient(GodiddyConfig.default())valissuer=GodiddyIssuer(client)// Issue credential via GoDiddy Issuer (suspend; takes a JsonObject + options map)runBlocking{valcredentialJson:JsonObject=jsonData{"@context"tolistOf("https://www.w3.org/2018/credentials/v1")"type"tolistOf("VerifiableCredential")"issuer"to"did:key:z6Mk...""credentialSubject"{"id"to"did:example:subject""name"to"Alice"}}valissued=issuer.issueCredential(credentialJson)println("Issued credential id: ${(issued["id"] as? JsonPrimitive)?.content}")}
Credential Verification
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
importorg.trustweave.godiddy.*importorg.trustweave.godiddy.verifier.GodiddyVerifierimportkotlinx.coroutines.runBlockingimportkotlinx.serialization.json.JsonObjectvalclient=GodiddyClient(GodiddyConfig.default())valverifier=GodiddyVerifier(client)// verifyCredential is suspend and expects the credential as JsonObjectfunmain()=runBlocking{valcredentialJson:JsonObject=/* build or parse VC JSON */valverificationResult=verifier.verifyCredential(credentialJson)if(verificationResult.verified){println("Credential is valid")}else{println("Credential is invalid: ${verificationResult.error}")}}
Supported DID Methods
GoDiddy supports 20+ DID methods through Universal Resolver, including:
# Run all GoDiddy tests
./gradlew :did/plugins/godiddy:test
# Run specific test class
./gradlew :did/plugins/godiddy:test --tests"GodiddyDidMethodTest"