feat: add sample app dashboard, dev URL overrides, and run tooling#127
Closed
ethanpschoen wants to merge 17 commits into
Closed
feat: add sample app dashboard, dev URL overrides, and run tooling#127ethanpschoen wants to merge 17 commits into
ethanpschoen wants to merge 17 commits into
Conversation
Handle ketch-tag nativeStoragePut events via crossPlatformSave and expose crossPlatformRead for downstream native storage consumers.
Introduce KetchAtt native module, auto-resolve ketch_att/ketch_att_prev for WebView init, and harden nativeStoragePut save-before-callback handling.
Expose pre-WebView headless endpoints via KetchHeadless, wire them through KetchServiceProvider, and harden JSON/network error handling in the client.
Merge headless API with ATT stack; wire example dashboard for manual QA, opt-in webResourceUrlOverrides, and Cursor run-sample scripts.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 584720a. Configure here.
Invoke onNativeStoragePut only after crossPlatformSave resolves; log and route save failures to onError instead of swallowing rejected writes.
Remove void operator for no-void and collapse message assignment for prettier.
Adds `nativeStorage` (read/write/remove/removeValues) as the canonical storage façade, matching the iOS and Flutter SDK surfaces. The `nativeStoragePut` bridge handler and the `storePreference` fallback in KetchServiceProvider now route through `nativeStorage.write`.
Introduce KetchAtt native module, auto-resolve ketch_att/ketch_att_prev for WebView init, and harden nativeStoragePut save-before-callback handling.
Stop re-running ATT resolution when webViewReloadNonce changes so load() remounts do not hide the WebView. On resolveAtt rejection, fall back to notDetermined and set isAttReady so iOS is not blocked indefinitely.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Description of this change
Merges ATT stack (#124 → #125) with headless API (#126), adds example dashboard for manual QA, opt-in
webResourceUrlOverrides, and Cursor run-sample scripts.Why is this change being made?
How was this tested? How can the reviewer verify your testing?
cd package && npm run typecheck && npm testbash .cursor/skills/ketch-react-native-run-sample/scripts/run-sample-app.sh ios local(optional manual QA)DEV_URL_OVERRIDES_ENABLED = trueinexample/devUrlOverrides.tsto test local tag redirectRelated issues
Checklist
Note
Medium Risk
Touches consent/ATT WebView initialization and new headless consent HTTP APIs on the public SDK surface; example and tooling changes are lower risk but the library behavior changes warrant careful regression on iOS ATT and consent flows.
Overview
Adds an SDK Health Dashboard to the example app:
DashboardContextplus panels inMain.tsxfor connection state, WebView/experience, privacy protocols, headless CDN calls, and a timestamped event log.App.tsxwiresKetchServiceProvidercallbacks into that state, switches defaults to UAT org/property, setsautoLoad={false}, and optionally passeswebResourceUrlOverridesviadevUrlOverrides.ts.The example also gains iOS ATT manual QA (request + reload WebView,
ketch_attrows) and headless smoke buttons (location, bootstrap, cold-start consent). iOS picks up tracking usage text, CocoaPods 1.16, and a DEBUG Metro fallback to port 8082.Cursor/dev workflow: new
development-workflow.mdc, theketch-react-native-run-sampleskill, andrun-sample-app.sh/configure-sample-package.pyto flip the example between npm andfile:../package, install deps, start Metro, build, launch, and stream logs.This PR’s diff also lands substantial package changes used by the sample: headless web/v3 client exposed on
useKetchService(), iOS ATT native module and WebViewketch_att/ketch_att_prevresolution,webResourceUrlOverridesinjection in WebView HTML,onNativeStoragePut, Jest/unit and opt-in CDN integration tests, and an iOS podspec.Reviewed by Cursor Bugbot for commit 584720a. Configure here.