clariodesk 0.3.0
clariodesk: ^0.3.0 copied to clipboard
ClarioDesk Flutter SDK — in-app customer support chat, bug reporting with auto screenshots, and feedback for mobile apps. Prebuilt UI or headless API.
0.3.0 — Attention-aware push and private tap routing #
- Replies now alert immediately unless the support inbox or exact ticket is visibly focused and acknowledges that specific realtime delivery.
- Removed the app-wide 30-second presence suppression blind spot; a stale focused-surface lease can delay an alert by at most two seconds.
- Added
SupportSurface,setVisibleSupportSurface, andclearVisibleSupportSurfacefor custom support screens. The prebuilt UI manages these automatically. - Added privacy-safe
resolvePushTarget; ticket ids are returned only by the signed API after a tap, never placed in FCM/APNs data. - Added
ClarioDeskWidgets.openFromPushfor prebuilt notification routing.
0.2.0 — Verified identity, compatibility controls #
Adds verified customer identity: with a host-signed or OIDC identity token,
one person's support history follows them across devices, survives logout and
login, and survives a reinstall onto a new device key. Without a token the SDK
behaves exactly as before — identify() with only an externalId remains an
unverified label, and existing integrations need no changes.
IdentityTokenProviderhost seam;identify()accepts an identity mode and collects a proof bound to this device's key.clearIdentity()for sign-out, ordered againstidentify()so a slow in-flight call can never resurrect the previous account.- Request signature v2 carrying an identity epoch, so a request signed before an account switch cannot read or write after it.
- RFC 7638 device-key thumbprints.
- Forced token refresh after a proof collision.
- Push payloads no longer carry message content; the SDK fetches after authorizing as the current identity.
- Acknowledged device reset, and realtime reconnects over one-time grants.
- After a verified-identity failure the SDK suspends the support UI rather than falling back to an unverified label.
- Reports its name and version to the server, and honours remote per-feature switches, a minimum-version floor, and an update notice. Config parsing fails open; security behaviour fails closed.
app_suspendedis now the single terminal code for an unavailable app.
0.1.3 — Documentation cleanup (native plugin comments) #
- Comment cleanup in the iOS/Android plugin sources (podspec, build.gradle, the platform key bridges). No functional changes.
0.1.2 — Documentation cleanup #
- README and code-comment cleanup. No functional changes.
0.1.1 — Wider Flutter support #
- Lowered the SDK floors to the true minimum: Dart
^3.10.0(was^3.11.5), Flutter>=3.38.1(was>=3.41.0). No code changes — the previous floors were an artifact of the publishing machine's toolchain, not a real requirement. The binding constraint is the plugin dependencies (device_info_plus/package_info_plus/share_plusneed Flutter 3.38.1).
0.1.0 — Device-Is-Identity protocol #
Full rewrite of the auth layer around the Device-Is-Identity protocol.
New
- Hardware-bound ECDSA P-256 keypair via iOS Secure Enclave (
SecKeywithkSecAttrTokenIDSecureEnclave) and Android Keystore (KeyGenParameterSpecwithsetIsStrongBoxBackedwhen available, TEE fallback). Generated on first launch, never extractable. - Challenge-response device registration replaces JWT exchange.
- Per-request
X-ClarioDesk-Device/Timestamp/Nonce/Signatureheaders on every authenticated call. - Signed SSE handshake (no more
?token=query string). - Transparent retry on
X-ClarioDesk-Auth-Error: clock_skewusing theX-Server-Timeresponse header to realign the SDK's clock offset. device.revokedSSE event handler: tears down local state without a restart when the dashboard or a sibling install revokes the device.- Plugin-class package — adds
ios/(Swift) andandroid/(Kotlin) for the native key wrappers. - New dependencies:
crypto,flutter_secure_storage.pointycastlein dev for the test fake server.
Breaking
ClarioDesk.init(...)is nowFuture<void>. First call runs device registration inline. Awaiting is optional — subsequent methods auto-await the in-flight bootstrap if you don't.ClarioDesk.identify(...)has all parameters optional. It writes a label onto the device's end-user row and grants no access; identity comes from the hardware key.- The publishable API key prefix changed from
sk_*topk_*to reflect that it ships in app binaries by design. Authorizationheader for registration changed fromBearer pk_*toApiKey pk_*.ClarioDesk.reset()now revokes server-side and wipes the hardware key. The nextinit()registers a fresh device.
Removed
- JWT-based session auth. There are no bearer tokens in the protocol anymore — every call is signed.
ClarioDesk.init(...)'s legacy synchronous return type.
0.0.1 #
- Initial preview release on the JWT-based identify model. Superseded by 0.1.0.