alexbruf/elm-clerk/2.0.0

Clerk.User

The Clerk user resource, with the fields listed in coverage.json.

Fields that ClerkJS exposes but this package does not decode are simply ignored, so a Clerk release that adds a field cannot break decoding.

type alias User =
{ id : String
, externalId : Maybe String
, username : Maybe String
, fullName : Maybe String
, firstName : Maybe String
, lastName : Maybe String
, imageUrl : String
, hasImage : Bool
, primaryEmailAddressId : Maybe String
, primaryEmailAddress : Maybe String
, primaryPhoneNumberId : Maybe String
, primaryPhoneNumber : Maybe String
, primaryWeb3WalletId : Maybe String
, primaryWeb3Wallet : Maybe String
, emailAddresses : List EmailAddress
, phoneNumbers : List PhoneNumber
, web3Wallets : List Web3Wallet
, externalAccounts : List ExternalAccount
, enterpriseAccounts : List EnterpriseAccount
, passkeys : List Passkey
, organizationMemberships : List OrganizationMembership
, passwordEnabled : Bool
, totpEnabled : Bool
, backupCodeEnabled : Bool
, twoFactorEnabled : Bool
, publicMetadata : Value
, unsafeMetadata : Value
, lastSignInAt : Maybe Posix
, legalAcceptedAt : Maybe Posix
, createdAt : Maybe Posix
, updatedAt : Maybe Posix
}

A signed-in Clerk user.

primaryEmailAddress, primaryPhoneNumber and primaryWeb3Wallet are the identifier strings themselves (user.primaryEmailAddress?.emailAddress in ClerkJS), not resource objects; the full resources are in the matching lists, keyed by the primary...Id fields. publicMetadata and unsafeMetadata are passed through untouched as JSON values, always objects.

decoder : Decoder User

Decode a User from the JSON the shim sends.

{ "id": "user_1"
, "externalId": null
, "username": "ada"
, "fullName": "Ada Lovelace"
, "firstName": "Ada"
, "lastName": "Lovelace"
, "imageUrl": "https://img.clerk.com/ada"
, "hasImage": true
, "primaryEmailAddressId": "idn_1"
, "primaryEmailAddress": "[email protected]"
, "primaryPhoneNumberId": null
, "primaryPhoneNumber": null
, "primaryWeb3WalletId": null
, "primaryWeb3Wallet": null
, "emailAddresses": [ EmailAddress ]
, "phoneNumbers": []
, "web3Wallets": []
, "externalAccounts": []
, "enterpriseAccounts": []
, "passkeys": []
, "organizationMemberships": []
, "passwordEnabled": true
, "totpEnabled": false
, "backupCodeEnabled": false
, "twoFactorEnabled": false
, "publicMetadata": {}
, "unsafeMetadata": {}
, "lastSignInAt": 1700000000000
, "legalAcceptedAt": null
, "createdAt": 1699990000000
, "updatedAt": 1700000000000
}

Every nullable field accepts null; lists may be empty. Timestamps arrive as epoch milliseconds.