Files
self/scripts/build-webview-bundle.sh
Seshanth.S 60de8d6c1e Feat/webview sdk (#1856)
* feat: add iOS native shell package (NSL-02)

Plain Swift implementation of the WebView host with bridge handlers
for secure storage (Keychain), crypto (EC P-256), and lifecycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add Android native shell package (NSL-01)

Plain Kotlin implementation of the WebView host with bridge handlers
for secure storage (EncryptedSharedPreferences), crypto (Android Keystore
EC P-256), and lifecycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: integrate Sumsub Web SDK into ProviderLaunchScreen (WV-05)

Rewrites ProviderLaunchScreen to launch Sumsub Web SDK, adds KYC
provider types, result normalization, and a ProviderResultScreen
for displaying verification outcomes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update spec status for NSL-01, NSL-02, WV-05 to in-progress

All three items are code-complete but need integration testing
before marking done.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add build-pipeline workstream specs, update NSL-03 and BP-01 status

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add WebView bundle build pipeline (BP-01)

Build script copies webview-app dist into both native shell asset
directories. Gradle preBuild validation fails fast when bundle is
missing. Root package.json gets build:sdk-* scripts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add SDK test apps for Android and iOS (NSL-03)

Minimal test apps to exercise native shells end-to-end:
- Android: Jetpack Compose app using SelfSdk.launch() via composite build
- iOS: SwiftUI app using SelfSdk.createViewController() via local SPM dep

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* update lockfile

* fix: address CodeRabbit PR review findings for native shells

- Fix iOS double callback: add hasEmittedResult flag to LifecycleHandler
  so dismiss() won't fire onCancelled after onResult already emitted
- Fix Android error result codes: use RESULT_FIRST_USER for failed
  verifications instead of always RESULT_OK; add dedicated handler in
  SelfSdk.handleResult
- Fix iOS production query params: append params to file URL via
  URLComponents so WebView receives teeUrl/verificationId/userId
- Fix build:sdk-ios false-green: chain swift build after bundle script
- Add expectedRequestCode param to handleResult for flexibility
- Upgrade security-crypto 1.1.0-alpha06 → 1.1.0 stable
- Improve callback type safety: onSuccess takes raw JSON string,
  onFailure takes SelfSdkException instead of generic Exception
- Add requireBiometric intent comments to both SecureStorageHandlers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address remaining CodeRabbit PR review findings (round 2)

- iOS BridgeResponse: add requestId/success fields, rename result→data to match JS bridge contract
- iOS test app: fix callback deallocation with Coordinator pattern
- ProviderLaunchScreen: fail closed on missing verificationId, fix retry via retryCount state
- ProviderResultScreen: guard unknown status with fallback to error config
- build-webview-bundle.sh: validate index.html before deleting targets
- Package.swift: fix SPM resource path with target path/sources

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 02:26:40 +05:30

76 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-License-Identifier: BUSL-1.1
#
# Builds the webview-app and copies the output to native shell asset directories.
# Usage: ./scripts/build-webview-bundle.sh [--skip-build]
set -euo pipefail
REPO_ROOT="$(git rev-parse --show-toplevel)"
WEBVIEW_DIST="${REPO_ROOT}/packages/webview-app/dist"
ANDROID_ASSETS="${REPO_ROOT}/packages/native-shell-android/src/main/assets/self-wallet"
IOS_RESOURCES="${REPO_ROOT}/packages/native-shell-ios/Resources/self-sdk-web"
SKIP_BUILD=false
for arg in "$@"; do
case "$arg" in
--skip-build) SKIP_BUILD=true ;;
*) echo "Unknown argument: $arg"; exit 1 ;;
esac
done
# Step 1: Build webview-app
if [ "$SKIP_BUILD" = false ]; then
echo "Building webview-app..."
(cd "$REPO_ROOT" && yarn workspace @selfxyz/webview-app build)
else
echo "Skipping build (--skip-build)"
fi
# Verify build output exists
if [ ! -d "$WEBVIEW_DIST" ]; then
echo "ERROR: Build output not found at ${WEBVIEW_DIST}"
echo "Run without --skip-build or build webview-app manually first."
exit 1
fi
if [ ! -f "$WEBVIEW_DIST/index.html" ]; then
echo "ERROR: Build output incomplete — index.html not found at ${WEBVIEW_DIST}/index.html"
exit 1
fi
# Step 2: Clean target directories
echo "Cleaning target directories..."
rm -rf "$ANDROID_ASSETS"
rm -rf "$IOS_RESOURCES"
# Step 3: Create target directories and copy
echo "Copying bundle to Android assets..."
mkdir -p "$ANDROID_ASSETS"
cp -r "$WEBVIEW_DIST"/* "$ANDROID_ASSETS"/
echo "Copying bundle to iOS resources..."
mkdir -p "$IOS_RESOURCES"
cp -r "$WEBVIEW_DIST"/* "$IOS_RESOURCES"/
# Step 4: Verify
FAILED=false
if [ ! -f "$ANDROID_ASSETS/index.html" ]; then
echo "ERROR: Android bundle verification failed — index.html not found at ${ANDROID_ASSETS}/index.html"
FAILED=true
fi
if [ ! -f "$IOS_RESOURCES/index.html" ]; then
echo "ERROR: iOS bundle verification failed — index.html not found at ${IOS_RESOURCES}/index.html"
FAILED=true
fi
if [ "$FAILED" = true ]; then
echo "Bundle copy FAILED."
exit 1
fi
echo "WebView bundle copied successfully to both native shells."