ProveSDK 1.1.0
dotnet add package ProveSDK --version 1.1.0
NuGet\Install-Package ProveSDK -Version 1.1.0
<PackageReference Include="ProveSDK" Version="1.1.0" />
<PackageVersion Include="ProveSDK" Version="1.1.0" />
<PackageReference Include="ProveSDK" />
paket add ProveSDK --version 1.1.0
#r "nuget: ProveSDK, 1.1.0"
#:package ProveSDK@1.1.0
#addin nuget:?package=ProveSDK&version=1.1.0
#tool nuget:?package=ProveSDK&version=1.1.0
Unofficial .NET client for Prove
You can use this from C# or F#.
Supported services:
- Identity (IDV)
- Pre-Fill
- TrustScore
- Sms Delivery
- InstantLink SMS
Usage examples
Here are some examples how to use this library. The test data here (e.g. phone "2001001686") is not real, just Prove test-environment data. For simplicity we use F#.
Identity, TrustScore and Pre-Fill take a ConsentStatus: say what consent you hold from the person (OptedIn, OptedOut, NotCollected or Unknown).
They refuse a phone number that starts with a trunk 0 or has one in brackets, such as 07700 900123 or +44 (0)7700 900123, as the number sent would be a different one: write +44 7700 900123.
After +44 or 0044, a trunk 0 without brackets is dropped, as E.164 says for the UK: +44 07700 900123 goes as 447700900123. What follows must be 7 to 10 digits. 44 07700 900123, without + or 00, is refused.
After any other country code every digit goes as typed, so write those numbers in E.164: Italy's +39 06 keeps its zero, and this library has no rule for countries that drop theirs.
Sms and InstantLink refuse every number the other three refuse. One they accept goes as typed, except the two UK forms above, which go as +447700900123.
The failure for a refused number gives how many digits it holds and at most its last two.
A 2xx answer whose body can't be read, an InstantLink answer without a status, and an Identity answer whose response has no readable verified come back as each call's own failure, never an exception or a success. The failure holds the status and the body's length and kind, nothing from the body.
The failure for a non-2xx answer also holds these fields when the body is a JSON object: status, code, failureCode, responseCode, error, description, message, additionalInfo and error_description. Email addresses and digits in the worded ones are masked; a name in them can't be recognised. Other fields and a body that isn't a JSON object stay out.
Identity (IDV)
With Identity you send a customer information to Prove and they verify if that customer is match in their record.
/// ProveSDK.ServiceLicense: Get your license details from Prove
let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testVerifyProve1() = ProveSDK.Identity.callProveVerify license ConsentStatus.OptedIn "2001001686" "Tod" "Weedall" (Some "San Antonio") (Some "78285") (Some "TX") (Some (DateTime(1984,12,10))) (Some "565-22-8370") |> Async.RunSynchronously
let testVerifyProve2() = ProveSDK.Identity.callProveVerify license ConsentStatus.OptedIn "2001001687" "Agretha" "Chene" (Some "Boston") (Some "2208") (Some "MA") (Some (DateTime(1994,12,29))) (Some "369-95-6933") |> Async.RunSynchronously
TrustScore
Trustscore gives a trust-score (from 0-1000) of how reliable the phone number is.
let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testTrustScoreProve1() = ProveSDK.TrustScore.callProveTrustScore license ConsentStatus.OptedIn "2001001686" |> Async.RunSynchronously //Some 925
Pre-Fill
Prefill needs a verified phone number and consent from customer. It fetches data of a customer based on a few key factors.
let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testIdentityProve1() = ProveSDK.Prefill.provePrefillIdentity license ConsentStatus.OptedIn "2001001686" (DateTime(1984,12,10)) (Some "565-22-8370") |> Async.RunSynchronously
SMS Delivery
You can send SMS text messages via Prove, if you have that service enabled in your contract.
let smsLicense : ProveSDK.Sms.License = { Environment = ProveEnvironment.Staging; ClientId = "123"; LicenseKey = "456" }
ProveSDK.Sms.send smsLicense "2001001686" "Hello World."
InstantLink
InstantLink is a phone verification service. It sends a code to customer and expects to validate it.
let sesssionId = System.Guid.NewGuid().ToString()
let myReturnUrl = "http://localhost" //your service return
let instaLicense = { Environment = ProveEnvironment.Staging; ApiClientId = "123"; SubClientId = Some "123" }
let! genResult = ProveSDK.InstantLink.generate instaLicense myReturnUrl "123.123.123.123" "2001001686" sessionId
match genResult with
| Ok (InstantLink.InstantLink instantLink) ->
// send instantLink to user via sms (see above)
instantLink
| _ -> ""
let fingerPring = ProveSDK.InstantLink.validate instaLicense sessionId verificationFingerprint
let result =
match fingerPring with
| Ok res when res.LinkClicked -> true
| _ -> false
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- FSharp.Core (>= 10.1.201)
- FSharp.Data (>= 8.1.11)
- FSharp.Data.JsonProvider.Serializer (>= 1.0.7)
- Newtonsoft.Json (>= 13.0.3)
-
net10.0
- FSharp.Core (>= 10.1.201)
- FSharp.Data (>= 8.1.11)
- FSharp.Data.JsonProvider.Serializer (>= 1.0.7)
- Newtonsoft.Json (>= 13.0.3)
-
net8.0
- FSharp.Core (>= 10.1.201)
- FSharp.Data (>= 8.1.11)
- FSharp.Data.JsonProvider.Serializer (>= 1.0.7)
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.1.0:
- BREAKING: callProveVerify, provePrefillIdentity and callProveTrustScore take a ConsentStatus, sent as Consent-Status, instead of always sending optedIn
- BREAKING: Identity, Pre-Fill and TrustScore refuse a number with a leading or bracketed trunk 0, or a 00 prefix without a whole number after it, which was sent as a different number
- BREAKING: callProveTrustScore gives ValueNone, not ValueSome 0, for a number refused here
- FIXED: callProveVerify sent the state code as extendedAddress; it goes as region
- FIXED: request bodies are UTF-8, so names outside ASCII reach Prove intact
- FIXED: the sign-in form encodes its values
- FIXED: a sign-in that fails or gives no token sends nothing further and returns the failure
- FIXED: a non-200 answer without a readable error becomes an error naming the status
- FIXED: dates of birth and added timestamps are Gregorian whatever the culture
- FIXED: printing a license or an SMS or InstantLink request (%A, ToString) hides its keys and the person's number
- FIXED: Readme examples match the API
- FIXED: a UK number written +44 0 or 0044 0 drops the trunk 0; other country codes keep every digit
- FIXED: a 2xx answer with an unreadable or empty body on any data call is that call's failure, with the status and the body's length and kind, not an exception or a success
- FIXED: an answer of the typed InstantLink calls without a status is a failure, not a success with PhoneMatch = Yes
- FIXED: callProveVerify fails on a response without a readable verified, instead of isDone = true and an exception in the caller
- FIXED: failure text holds the status, the body's length and kind, and only named JSON error fields with digits and emails masked, never the body's text
- FIXED: a refused number isn't echoed whole: the failure gives its digit count and at most its last two digits
- BREAKING: Sms.send and InstantLink.generate refuse every number Identity refuses, such as 07700 900123