@go.Package { name = "github.com/onsonr/sonr/gen/protocol" } module protocol import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl" class CredentialCreation { response: PublicKeyCredentialCreationOptions = new JsonField { name = "publicKey"; type = "PublicKeyCredentialCreationOptions" } } class CredentialAssertion { response: PublicKeyCredentialRequestOptions = new JsonField { name = "publicKey"; type = "PublicKeyCredentialRequestOptions" } } class PublicKeyCredentialCreationOptions { relyingParty: RelyingPartyEntity = new JsonField { name = "rp"; type = "RelyingPartyEntity" } user: UserEntity = new JsonField { name = "user"; type = "UserEntity" } challenge: URLEncodedBase64 = new JsonField { name = "challenge"; type = "URLEncodedBase64" } parameters: Listing[CredentialParameter]? = new JsonField { name = "pubKeyCredParams"; type = "[]CredentialParameter" } timeout: Int? = new JsonField { name = "timeout"; type = "int" } credentialExcludeList: Listing[CredentialDescriptor]? = new JsonField { name = "excludeCredentials"; type = "[]CredentialDescriptor" } authenticatorSelection: AuthenticatorSelection? = new JsonField { name = "authenticatorSelection"; type = "AuthenticatorSelection" } hints: Listing[PublicKeyCredentialHints]? = new JsonField { name = "hints"; type = "[]PublicKeyCredentialHints" } attestation: ConveyancePreference? = new JsonField { name = "attestation"; type = "ConveyancePreference" } attestationFormats: Listing[AttestationFormat]? = new JsonField { name = "attestationFormats"; type = "[]AttestationFormat" } extensions: AuthenticationExtensions? = new JsonField { name = "extensions"; type = "AuthenticationExtensions" } } class PublicKeyCredentialRequestOptions { challenge: URLEncodedBase64 = new JsonField { name = "challenge"; type = "URLEncodedBase64" } timeout: Int? = new JsonField { name = "timeout"; type = "int" } relyingPartyID: String? = new JsonField { name = "rpId"; type = "string" } allowedCredentials: Listing[CredentialDescriptor]? = new JsonField { name = "allowCredentials"; type = "[]CredentialDescriptor" } userVerification: UserVerificationRequirement? = new JsonField { name = "userVerification"; type = "UserVerificationRequirement" } hints: Listing[PublicKeyCredentialHints]? = new JsonField { name = "hints"; type = "[]PublicKeyCredentialHints" } extensions: AuthenticationExtensions? = new JsonField { name = "extensions"; type = "AuthenticationExtensions" } function getAllowedCredentialIDs(): Listing[Listing[Int8]] { this.allowedCredentials?.map((credential) -> credential.credentialID) ?? Listing() } } class CredentialDescriptor { type: CredentialType = new JsonField { name = "type"; type = "CredentialType" } credentialID: URLEncodedBase64 = new JsonField { name = "id"; type = "URLEncodedBase64" } transport: Listing[AuthenticatorTransport]? = new JsonField { name = "transports"; type = "[]AuthenticatorTransport" } attestationType: String? = new JsonField { name = "-"; type = "string" } } class CredentialParameter { type: CredentialType = new JsonField { name = "type"; type = "CredentialType" } algorithm: Int = new JsonField { name = "alg"; type = "int" } } typealias CredentialType = String const PublicKeyCredentialType: CredentialType = "public-key" typealias AuthenticationExtensions = Mapping[String, Dynamic] class AuthenticatorSelection { authenticatorAttachment: AuthenticatorAttachment? = new JsonField { name = "authenticatorAttachment"; type = "AuthenticatorAttachment" } requireResidentKey: Boolean? = new JsonField { name = "requireResidentKey"; type = "bool" } residentKey: ResidentKeyRequirement? = new JsonField { name = "residentKey"; type = "ResidentKeyRequirement" } userVerification: UserVerificationRequirement? = new JsonField { name = "userVerification"; type = "UserVerificationRequirement" } } typealias ConveyancePreference = String const PreferNoAttestation: ConveyancePreference = "none" const PreferIndirectAttestation: ConveyancePreference = "indirect" const PreferDirectAttestation: ConveyancePreference = "direct" const PreferEnterpriseAttestation: ConveyancePreference = "enterprise" typealias AttestationFormat = String const AttestationFormatPacked: AttestationFormat = "packed" const AttestationFormatTPM: AttestationFormat = "tpm" const AttestationFormatAndroidKey: AttestationFormat = "android-key" const AttestationFormatAndroidSafetyNet: AttestationFormat = "android-safetynet" const AttestationFormatFIDOUniversalSecondFactor: AttestationFormat = "fido-u2f" const AttestationFormatApple: AttestationFormat = "apple" const AttestationFormatNone: AttestationFormat = "none" typealias PublicKeyCredentialHints = String const PublicKeyCredentialHintSecurityKey: PublicKeyCredentialHints = "security-key" const PublicKeyCredentialHintClientDevice: PublicKeyCredentialHints = "client-device" const PublicKeyCredentialHintHybrid: PublicKeyCredentialHints = "hybrid" typealias Extensions = Dynamic class ServerResponse { status: ServerResponseStatus = new JsonField { name = "status"; type = "ServerResponseStatus" } message: String = new JsonField { name = "errorMessage"; type = "string" } } typealias ServerResponseStatus = String const StatusOk: ServerResponseStatus = "ok" const StatusFailed= ServerResponseStatus = "failed"