Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
42e8491
feat(sdk-browser): add ScreebMaskText, ScreebNoCapture and ScreebId D…
Alexays Jun 18, 2026
711e2f1
feat(*): recover Svelte SDK, example and publish workflow from dev
Alexays Jun 18, 2026
13a59c2
feat(*): recover SDK version-sync tooling from dev
Alexays Jun 18, 2026
383f8be
fix(*): use npm install in CI to tolerate lockfile/npm version skew
Alexays Jun 18, 2026
8375e4f
feat(*): expose ScreebMaskText/ScreebNoCapture/ScreebId in react, vue…
Alexays Jun 18, 2026
1f6d6e9
chore(*): recover example apps and remaining npm scripts from dev
Alexays Jun 18, 2026
5b472ac
feat(*): recover release/size/local-ios helper scripts from dev
Alexays Jun 18, 2026
f1cfd0a
feat(*): recover ScreebView privacy helpers for MAUI from dev
Alexays Jun 18, 2026
c4773c0
feat(*): recover privacy helpers/hooks for Flutter and React Native f…
Alexays Jun 18, 2026
f10b419
ci(*): run flutter tests and react-native typecheck for recovered fea…
Alexays Jun 18, 2026
6ab3237
fix(*): enable MAUI in csproj for ScreebView and drop 4.0.0-only bind…
Alexays Jun 18, 2026
e73cb6a
chore(*): preserve 4.0.0-readiness (local native SDK build support, M…
Alexays Jun 18, 2026
242ca1e
test(*): recover MAUI hooks tests and nested-property util from dev
Alexays Jun 18, 2026
6308c6e
feat(*): migrate wrappers to native SDK 4.0.0
Alexays Jun 18, 2026
6cb9b77
test(*): re-enable browser unit tests and make test scripts intention…
Alexays Jun 18, 2026
59e5312
chore(*): stop tracking generated docs, fix commitlint scopes, pin No…
Alexays Jun 18, 2026
1d1d7cb
fix(*): correct READMEs, repo URLs, angular type exports; wire CI checks
Alexays Jun 18, 2026
17c30f0
perf(*): target es2020 and minify SDK bundles with terser
Alexays Jun 18, 2026
fa814f9
chore(*): deps hygiene (devDeps, eslint-config jest, tarballs, svelte…
Alexays Jun 18, 2026
818cd56
ci(*): pin actions to commit SHA and use npm ci for reproducible inst…
Alexays Jun 18, 2026
261e260
ci(*): drop docs:reference:check from CI (needs sibling docs repo)
Alexays Jun 18, 2026
11a5d36
fix(*): native robustness — MAUI privacy-marker crash, KMP cancellati…
Alexays Jun 18, 2026
ca82d60
fix(*): handle list hook results in MAUI Android marshaller (match iOS)
Alexays Jun 18, 2026
47a12de
feat(*): deep-link API, 4.0.1 native bump, Flutter replay semantics
Alexays Jul 2, 2026
f89cc75
chore(*): interactive example demos, deep-link wiring, expo deps
Alexays Jul 2, 2026
1000acf
fix(*): unblock red CI on 4.0.0 PR
Alexays Jul 2, 2026
0c27d83
fix(*): sync package-lock with npm 10.8.2 (CI) for nested picomatch
Alexays Jul 2, 2026
446707a
feat(example-ios): complete runnable Xcode project (was a stub)
Alexays Jul 6, 2026
7786daa
feat(example-ios): switch to the local sdk-ios checkout via SCREEB_US…
Alexays Jul 6, 2026
0ce309d
fix(example-ios): register the deep-link URL scheme
Alexays Jul 6, 2026
6c53a91
feat(example-expo): expo-updates repro for the post-OTA invisible-sur…
Alexays Jul 7, 2026
3ea2774
fix(example-expo): keep the reload button reachable while a survey is…
Alexays Jul 7, 2026
1b1c456
feat(sdk-reactnative,sdk-maui): expose handleDeepLink in both wrappers
Alexays Jul 8, 2026
896bd9e
feat(*): iOS example parity — KMP host app, deep links and local-SDK …
Alexays Jul 8, 2026
63ac7a4
chore(*): local iOS xcframework tooling + README debug-mode defaults
Alexays Jul 8, 2026
777521a
fix(sdk-kmp): forward deep links to the native iOS SDK (the actual wa…
Alexays Jul 8, 2026
24cb07f
chore(example-flutter): resolve the locally-published Android SDK whe…
Alexays Jul 8, 2026
56ff077
chore(*): pin the native Android SDK to 4.0.2 across wrappers
Alexays Jul 8, 2026
0bc7ab0
chore(*): release 4.0.2 across every wrapper SDK
Alexays Jul 8, 2026
60b0eb3
docs(sdk-flutter): changelog 4.0.2
Alexays Jul 8, 2026
4778de8
chore(sdk-maui): fix the iOS native LICENSE copyright holder and year
Alexays Jul 8, 2026
65b02d8
chore(*): sync package-lock with the 4.0.2 wrapper bump
Alexays Jul 8, 2026
03bced5
ci(*): pin the .NET 9 SDK in the MAUI publish (runner defaults to .NE…
Alexays Jul 8, 2026
3d7a335
fix(sdk-kmp): use the cinterop selector name for handleDeepLink; sync…
Alexays Jul 8, 2026
5aaed1e
ci(*): the MAUI binding needs the maui-android/maui-ios workloads
Alexays Jul 8, 2026
863773b
ci(*): restore the npm upgrade before publish — trusted publishing ne…
Alexays Jul 8, 2026
37e978f
ci(*): authenticated xcframework download in the KMP publish (anonymo…
Alexays Jul 8, 2026
763989a
ci(sdk-kmp): publish via the Central Portal, legacy s01 endpoint retu…
Alexays Jul 8, 2026
303ed80
fix(sdk-kmp): publish tasks depend on all sign tasks (shared javadoc …
Alexays Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# https://editorconfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[*.{kt,kts,java,swift,cs,dart}]
indent_size = 4

[*.{gradle,xml}]
indent_size = 4

[Makefile]
indent_style = tab
37 changes: 20 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,49 +31,52 @@ jobs:
name: JS/TS packages
runs-on: [self-hosted]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20'
- run: npm ci --ignore-scripts
- run: npm run versions:check
- run: npm run build
- run: npm run lint
- run: npm test
- run: npm run typecheck --workspace=@screeb/react-native

flutter:
name: Flutter package
runs-on: [self-hosted]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
java-version: '17'
distribution: 'temurin'
- uses: android-actions/setup-android@v3
- uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3
with:
packages: tools platform-tools build-tools;35.0.0 platforms;android-35
- uses: subosito/flutter-action@v2
- uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2
with:
flutter-version: '3.x'
channel: 'stable'
- name: Trust Flutter SDK checkout
run: git config --global --add safe.directory "$FLUTTER_ROOT"
- run: cd packages/sdk-flutter && flutter pub get
- run: cd packages/sdk-flutter && flutter analyze
- run: cd packages/sdk-flutter && flutter test

maui-android:
name: .NET MAUI Android SDK
runs-on: [self-hosted]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
java-version: '17'
distribution: 'temurin'
- uses: android-actions/setup-android@v3
- uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3
with:
packages: tools platform-tools build-tools;35.0.0 platforms;android-35
- uses: actions/setup-dotnet@v4
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: '9.0.x'
- name: Install MAUI workloads
Expand All @@ -90,8 +93,8 @@ jobs:
runs-on: macos-latest
if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_macos_native }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: '9.0.x'
- name: Install MAUI workloads
Expand All @@ -113,7 +116,7 @@ jobs:
name: Kotlin Multiplatform Android SDK
runs-on: [self-hosted]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Check native Android artifact
id: native-android
run: |
Expand All @@ -126,12 +129,12 @@ jobs:
echo "::warning::app.screeb.sdk:survey:${version} is not published yet; skipping KMP Android build."
echo "available=false" >> "$GITHUB_OUTPUT"
fi
- uses: actions/setup-java@v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
if: steps.native-android.outputs.available == 'true'
with:
java-version: '17'
distribution: 'temurin'
- uses: android-actions/setup-android@v3
- uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3
if: steps.native-android.outputs.available == 'true'
with:
packages: tools platform-tools build-tools;35.0.0 platforms;android-35
Expand All @@ -147,8 +150,8 @@ jobs:
runs-on: macos-latest
if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_macos_native }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
java-version: '17'
distribution: 'temurin'
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/publish-angular.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
- run: npm install -g npm@latest
- run: npm install --ignore-scripts
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-angular --access public --provenance
7 changes: 3 additions & 4 deletions .github/workflows/publish-browser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
- run: npm install -g npm@latest
- run: npm install --ignore-scripts
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-browser --access public --provenance
4 changes: 2 additions & 2 deletions .github/workflows/publish-flutter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2
with:
flutter-version: '3.x'
channel: 'stable'
Expand Down
16 changes: 9 additions & 7 deletions .github/workflows/publish-kmp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,28 @@ jobs:
publish:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20'

- uses: actions/setup-java@v4
- uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
java-version: '17'
distribution: 'temurin'

- run: npm run versions:check

- name: Download Screeb iOS XCFramework
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
SCREEB_IOS_SDK_VERSION=$(grep '^SCREEB_IOS_SDK_VERSION=' packages/sdk-kmp/gradle.properties | cut -d= -f2)
SCREEB_IOS_URL=$(curl -sL "https://api.github.com/repos/ScreebApp/sdk-ios-public/releases/tags/v${SCREEB_IOS_SDK_VERSION}" \
| python3 -c "import sys,json; print(next(a['browser_download_url'] for a in json.load(sys.stdin)['assets'] if a['name']=='Screeb.zip'))")
curl -sL "$SCREEB_IOS_URL" -o /tmp/Screeb.zip
# Authenticated download (anonymous api.github.com calls are rate-limited
# on shared runners and come back without 'assets').
gh release download "${SCREEB_IOS_SDK_VERSION}" --repo ScreebApp/sdk-ios-public --pattern 'Screeb.zip' --output /tmp/Screeb.zip --clobber
unzip -q /tmp/Screeb.zip -d /tmp/screeb_ios
mkdir -p packages/sdk-kmp/native/ios
cp -r /tmp/screeb_ios/Screeb.xcframework packages/sdk-kmp/native/ios/
Expand All @@ -45,4 +47,4 @@ jobs:
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
GPG_KEY: ${{ secrets.GPG_KEY }}
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
run: ./gradlew publishAllPublicationsToOSSRHRepository --no-daemon
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository --no-daemon
23 changes: 18 additions & 5 deletions .github/workflows/publish-maui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,34 @@ jobs:
permissions:
id-token: write # enable GitHub OIDC token issuance for NuGet Trusted Publishing
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- uses: actions/setup-dotnet@v4
- uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: '9.0.x'

# macos-latest also preinstalls .NET 10; without a global.json `dotnet`
# resolves to the newest SDK, whose workload set no longer matches the
# net9.0 targets (NETSDK1147 asking for maui-android).
- name: Pin the .NET 9 SDK
run: |
set -euo pipefail
DOTNET9=$(dotnet --list-sdks | awk '/^9\./{v=$1} END{print v}')
test -n "$DOTNET9"
printf '{"sdk":{"version":"%s","rollForward":"latestFeature"}}\n' "$DOTNET9" > global.json
dotnet --version

- name: Install MAUI workloads
run: dotnet workload install android ios
run: dotnet workload install maui-android maui-ios

- name: Download Screeb iOS XCFramework
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
SCREEB_IOS_SDK_VERSION=$(node -p "require('./sdk-versions.json').native.ios")
mkdir -p packages/sdk-maui/native/ios
gh release download --repo ScreebApp/sdk-ios-public --pattern 'Screeb.zip' --output /tmp/Screeb.zip --clobber
gh release download "${SCREEB_IOS_SDK_VERSION}" --repo ScreebApp/sdk-ios-public --pattern 'Screeb.zip' --output /tmp/Screeb.zip --clobber
unzip -q /tmp/Screeb.zip -d /tmp/screeb_ios
cp -r /tmp/screeb_ios/Screeb.xcframework packages/sdk-maui/native/ios/

Expand All @@ -43,7 +56,7 @@ jobs:

- name: NuGet login (OIDC -> temporary API key)
id: login
uses: NuGet/login@v1
uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 # v1
with:
user: alexays

Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/publish-react.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
- run: npm install -g npm@latest
- run: npm install --ignore-scripts
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-react --access public --provenance
7 changes: 4 additions & 3 deletions .github/workflows/publish-reactnative.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
# npm Trusted Publishing (tokenless OIDC) needs npm >= 11.5 — node 22 ships 10.x
- run: npm install -g npm@latest
- run: npm install --ignore-scripts
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-reactnative --access public --provenance
22 changes: 22 additions & 0 deletions .github/workflows/publish-svelte.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Publish @screeb/sdk-svelte

on:
push:
tags:
- '@screeb/sdk-svelte@*'

jobs:
publish:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-svelte --access public --provenance
7 changes: 3 additions & 4 deletions .github/workflows/publish-vue.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,11 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '22'
registry-url: 'https://registry.npmjs.org'
- run: npm install -g npm@latest
- run: npm install --ignore-scripts
- run: npm ci --ignore-scripts
- run: npm run build
- run: npm publish --workspace=packages/sdk-vue --access public --provenance
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ build
dist
storybook-static

# Android native build output (NDK/CMake), e.g. RN prefab under example-*/android/app/.cxx
.cxx/

# generated API reference (typedoc) — regenerate with `npm run build:doc`
packages/*/docs/

# misc
.DS_Store
.env.local
Expand Down Expand Up @@ -43,3 +49,12 @@ packages/sdk-maui/bin/
packages/sdk-maui/obj/
examples/example-maui/bin/
examples/example-maui/obj/

# build-local-ios-xcframework.mjs temp workdirs (cleaned by the script; belt and braces)
packages/*/native/ios/.build-*/

# CocoaPods install output (regenerated by `pod install`)
examples/example-reactnative/ios/Pods/

# React Native local env (per-machine node path, written by pod install)
.xcode.env.local
1 change: 0 additions & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@
. "$(dirname -- "$0")/_/husky.sh"

npm run lint
npm run build:doc && git add -A packages/*/docs
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
20
12 changes: 11 additions & 1 deletion commitlint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,22 @@ module.exports = {
"example-angular",
"sdk-vue",
"example-vue",
"sdk-svelte",
"example-svelte",
"sdk-maui",
"example-maui",
"sdk-flutter",
"example-flutter",
"sdk-kmp",
"example-kmp",
"sdk-react-native",
"example-react-native"
"sdk-reactnative",
"example-react-native",
"example-reactnative",
"example-android",
"example-ios",
"example-ionic",
"example-expo"
]],
"scope-empty": [2, "never"],
"scope-min-length": [2, "always", 1],
Expand Down
2 changes: 1 addition & 1 deletion examples/example-android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ android {
}

dependencies {
implementation 'app.screeb.sdk:survey:4.0.0'
implementation 'app.screeb.sdk:survey:4.0.2'
}
Loading
Loading