Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
run: yarn lint

- name: Install Expo example dependencies
run: npm --prefix examples/expo-example ci
run: yarn expo-example:install

- name: Typecheck files
run: yarn typecheck
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quick-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
run: yarn lint

- name: Install Expo example dependencies
run: npm --prefix examples/expo-example ci
run: yarn expo-example:install

- name: Typecheck files
run: yarn typecheck
Expand Down
13 changes: 6 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ yarn lint
# Run SDK example (React Native CLI)
yarn sdk-example start

# Run Expo example (standalone — uses npm, not yarn workspace)
cd examples/expo-example && npm install && npm start
# Run Expo example
yarn expo-example:install
yarn expo-example
```

## Testing
Expand All @@ -123,11 +124,9 @@ plan for when automated tests are added.
change.
- The `lib/` directory is generated; never edit it by hand.
- `examples/expo-example` is intentionally outside the Yarn workspace (`!examples/expo-example` in
`package.json#workspaces`) — install its deps with `npm`, not `yarn`.
`package.json#workspaces`) — install its deps from the repo root with `yarn expo-example:install`.
- Native builds (Android/iOS) are slow; validate JS-layer changes with `yarn lint && yarn typecheck`
first; leave full native builds to CI.
- The `resolutions` block in `package.json` pins `0xtrails` / `@0xtrails/*` — update all three
entries together when bumping the trails version.
- Pre-release versions use the `0.x.y-alpha.N` scheme. Publishing steps are in `PUBLISHING.md`.

## CI/CD
Expand All @@ -143,7 +142,8 @@ Android and iOS PR checks pass before merging; validate locally when you need fa
## Common Pitfalls

- Running `yarn` inside `examples/expo-example` will fail — it's not a Yarn workspace member. Use
`npm` there, or `yarn expo-example <script>` from the root.
`yarn expo-example:install` from the root to install dependencies, then run Expo example scripts
from the root.
- `yarn prepare` regenerates `lib/` — if builds look stale, run `yarn clean && yarn prepare`.
- The podspec resolves `oms-client-swift-sdk` and the Android module resolves
`io.github.0xsequence:oms-client-kotlin-sdk` — bump native SDK versions in the podspec and
Expand All @@ -159,6 +159,5 @@ Android and iOS PR checks pass before merging; validate locally when you need fa
| Native SDK version (Swift / Kotlin) | `OmsClientReactNativeSdk.podspec`, `android/build.gradle` |
| `package.json` scripts or test commands | `TESTING.md`, `.github/workflows/ci.yml` |
| Node version (`.nvmrc`) | `turbo.json#globalDependencies`, CI setup action |
| `resolutions` (`0xtrails` / `@0xtrails/*`)| All three resolution entries together |
| Repo structure (new top-level dirs) | `AGENTS.md` structure section |
| Contributing workflow | `CONTRIBUTING.md`, `README.md` |
5 changes: 5 additions & 0 deletions API.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ This document describes the public TypeScript API for
npm install @0xsequence/oms-react-native-sdk
```

## Native Requirements

Android builds need `minSdk` 24 or newer, `compileSdk` 34 or newer, and Java 17
compile options. Supported Android devices need Android 10 / API 29 or newer.

## Client

```ts
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

---

## [0.1.0-alpha.4] — 2026-06-26

### Changed
- Lowered the Android OMS SDK requirement to `minSdk 24`.
- Aligned Android Kotlin, coroutine, and serialization versions with current
React Native and Expo defaults.
- Updated the iOS OMS SDK dependency to `0.1.0-alpha.4`.
- Aligned iOS promise rejection metadata with the current native error contract.

### Fixed
- Expo and bare React Native apps can use the standard Android build
requirements for OMS.

## [0.1.0-alpha.3] — 2026-06-26

### Added
Expand Down
7 changes: 4 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ yarn prepare # build lib/
| `ios/` | ObjC/Swift native module |
| `examples/sdk-example/` | React Native CLI example (Yarn workspace) |
| `examples/trails-actions-example/` | Trails demo (Yarn workspace) |
| `examples/expo-example/` | Expo example — **not** a Yarn workspace; use `npm` here |
| `examples/expo-example/` | Expo example — **not** a Yarn workspace; install with `yarn expo-example:install` from the repo root |

## Development workflow

Expand All @@ -38,8 +38,9 @@ yarn prepare # rebuild lib/ after src/ changes
# Run the SDK example
yarn sdk-example start

# Run the Expo example (uses npm, not yarn)
cd examples/expo-example && npm install && npm start
# Run the Expo example
yarn expo-example:install
yarn expo-example
```

## Before opening a PR
Expand Down
2 changes: 1 addition & 1 deletion OmsClientReactNativeSdk.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Pod::Spec.new do |s|
s.source_files = "ios/**/*.{h,m,mm,swift,cpp}"
s.private_header_files = "ios/**/*.h"
s.swift_version = "6.0"
s.dependency "oms-client-swift-sdk", "0.1.0-alpha.3"
s.dependency "oms-client-swift-sdk", "0.1.0-alpha.4"
s.pod_target_xcconfig = {
"DEFINES_MODULE" => "YES"
}
Expand Down
23 changes: 17 additions & 6 deletions PUBLISHING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ An npm 404 means the version is available. If npm prints a version, choose a new
Update:

- `package.json` `version`
- `examples/expo-example/package.json` SDK dependency version and lockfile
- `CHANGELOG.md`
- native SDK references if they changed:
- `android/build.gradle`
Expand All @@ -45,12 +46,17 @@ git status --short
yarn lint
yarn typecheck
yarn test
yarn expo-example:install
npm --prefix examples/expo-example run typecheck
yarn sdk-example build:android
yarn sdk-example build:ios
```

Do not publish if any command fails. If native SDK versions changed, confirm those versions are
already available from Maven Central and CocoaPods.
Do not publish if any command fails. `yarn expo-example:install` uses the published npm package
when this SDK version exists, or a local tarball when it has not been published yet.

If native SDK versions changed, confirm those versions are already available from Maven Central and
CocoaPods before merging the release PR.

## 4. Dry Run

Expand Down Expand Up @@ -80,12 +86,17 @@ Use `--tag alpha` for alpha releases so prereleases do not become the default `l
Verify npm sees the published version:

```sh
npm view @0xsequence/oms-react-native-sdk@<version> version
npm view @0xsequence/oms-react-native-sdk@<version> version dist.integrity
```

Refresh and verify the standalone Expo example lockfile against the published npm tarball:

```sh
npm --prefix examples/expo-example install --package-lock-only --ignore-scripts
git diff --exit-code examples/expo-example/package-lock.json
```

If the release updates APIs used by the standalone Expo example, update
`examples/expo-example` to depend on the newly published npm version after npm
confirms it is available.
If the lockfile changes, commit the refreshed `examples/expo-example/package-lock.json`.

If the package should become the default install later, move the npm dist-tag deliberately in a
separate step.
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ See [API.md](./API.md) for the public API surface and TypeScript shapes.
## Native SDK Dependencies

The React Native SDK owns its native SDK dependencies. Android resolves
`io.github.0xsequence:oms-client-kotlin-sdk:0.1.0-alpha.3` from Maven, and iOS
resolves `oms-client-swift-sdk` `0.1.0-alpha.3` from CocoaPods.
`io.github.0xsequence:oms-client-kotlin-sdk:0.1.0-alpha.4` from Maven, and iOS
resolves `oms-client-swift-sdk` `0.1.0-alpha.4` from CocoaPods.

The React Native wrapper itself is distributed through npm. React Native
autolinking consumes the wrapper podspec and Android project from
Expand All @@ -159,8 +159,9 @@ on the underlying native SDKs.
- Bare React Native apps are supported through normal React Native autolinking.
- Expo apps must use a development build, Expo prebuild/EAS Build, or the bare
workflow. Expo Go cannot load this SDK because it includes custom native code.
- Android apps need `minSdk 26`, `compileSdk 34` or newer, and Java 17 compile
- Android builds need `minSdk 24`, `compileSdk 34` or newer, and Java 17 compile
options.
- Supported Android devices need Android 10 / API 29 or newer.
- iOS apps need deployment target 15.0 or newer.
- OIDC redirect auth requires the consuming app to configure its own URL scheme
or app links.
Expand All @@ -171,9 +172,8 @@ on the underlying native SDKs.
- `examples/trails-actions-example` is the bare React Native demo for OMS wallet
flow with Trails action resolution.
- `examples/expo-example` is a standalone Expo development-build demo that uses
`expo-web-browser` and the published npm package. It is intentionally
excluded from the root Yarn workspace so it is not linked to the local SDK
source. Its dependency is not updated until this SDK version is published.
`expo-web-browser` and the npm package. It is intentionally excluded from the
root Yarn workspace so it is not linked to the local SDK source.

## Publishing

Expand Down
3 changes: 2 additions & 1 deletion TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ yarn typecheck
yarn test

# TypeScript type-check (Expo example)
npm --prefix examples/expo-example ci
yarn expo-example:install
npm --prefix examples/expo-example run typecheck

# Build the library
Expand Down Expand Up @@ -72,6 +72,7 @@ Android and iOS CI checks pass before merging; validate locally when you need fa
|-----------------------------|----------------------------------------------|
| Lint | `yarn lint` |
| Typecheck (library) | `yarn typecheck` |
| Install Expo example deps | `yarn expo-example:install` |
| Typecheck (Expo example) | `npm --prefix examples/expo-example run typecheck` |
| Build library | `yarn prepare` |
| Run unit tests | `yarn test` |
Expand Down
10 changes: 5 additions & 5 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
buildscript {
ext.OmsClientReactNativeSdk = [
kotlinVersion: "2.3.20",
minSdkVersion: 26,
kotlinVersion: "2.1.20",
minSdkVersion: 24,
compileSdkVersion: 36,
targetSdkVersion: 36,
omsClientKotlinSdkVersion: "0.1.0-alpha.3",
kotlinxCoroutinesVersion: "1.11.0",
kotlinxSerializationJsonVersion: "1.11.0"
omsClientKotlinSdkVersion: "0.1.0-alpha.4",
kotlinxCoroutinesVersion: "1.10.2",
kotlinxSerializationJsonVersion: "1.8.1"
]

ext.getExtOrDefault = { prop ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class OmsClientReactNativeSdkModule(reactContext: ReactApplicationContext) :
Arguments.createMap().apply {
putString("clientId", clientId)
putMap("session", sessionMap(event.session))
putString("expiredAt", event.expiredAt.toString())
putString("expiredAt", event.expiredAt)
}
)
}
Expand Down Expand Up @@ -707,7 +707,7 @@ class OmsClientReactNativeSdkModule(reactContext: ReactApplicationContext) :
private fun sessionMap(session: OMSClientSessionState?): WritableMap =
Arguments.createMap().apply {
putNullableString("walletAddress", session?.walletAddress)
putNullableString("expiresAt", session?.expiresAt?.toString())
putNullableString("expiresAt", session?.expiresAt)
putNullableString("loginType", session?.loginType?.name)
putNullableString("sessionEmail", session?.sessionEmail)
}
Expand Down
16 changes: 8 additions & 8 deletions examples/expo-example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,25 @@ Expo development-build example for `@0xsequence/oms-react-native-sdk`.

This app mirrors the SDK demo flow with email login, Google redirect login,
wallet selection, message signing, signature verification, and transaction
sending. It uses `expo-web-browser` for redirect auth and depends on the
published npm package:

```json
"@0xsequence/oms-react-native-sdk": "0.1.0-alpha.2"
```
sending. It uses `expo-web-browser` for redirect auth and depends on the SDK
version declared in `package.json`.

This example is intentionally excluded from the root Yarn workspace. It is not
linked to the local SDK package, which keeps it useful as a consumer-style smoke
test for the published npm artifact.

## Run

Install dependencies from this folder:
Install dependencies from the repo root:

```sh
npm install
yarn expo-example:install
```

The install helper uses the published npm package when this SDK version exists.
Before publication, it packs the local SDK and installs that tarball into this
example.

Build and launch a development build:

```sh
Expand Down
10 changes: 1 addition & 9 deletions examples/expo-example/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,7 @@
"package": "com.sequence.oms.expoexample"
},
"plugins": [
"expo-web-browser",
[
"expo-build-properties",
{
"android": {
"minSdkVersion": 26
}
}
]
"expo-web-browser"
]
}
}
35 changes: 4 additions & 31 deletions examples/expo-example/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions examples/expo-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@0xsequence/oms-react-native-sdk": "0.1.0-alpha.2",
"@0xsequence/oms-react-native-sdk": "0.1.0-alpha.4",
"expo": "~56.0.8",
"expo-build-properties": "~56.0.17",
"expo-dev-client": "~56.0.19",
"expo-web-browser": "~56.0.5",
"react": "19.2.7",
Expand Down
Loading
Loading