| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: add live location sharing cookbook (#2659) * feat: add live location ui cookbook * fix: prettier lint * Update docusaurus/docs/reactnative/guides/live-location-sharing.mdx Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> * lint fixes * fix lint issues * fix locks * move to ruby 3.1 and greater --------- Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> | 1 年前 | |
fix: keyboard jump on samsung non edge-to-edge devices (#3718) ## 🎯 Goal This PR fixes a transient issue on `Android`, opening the keyboard inside a channel could make the composer and the message list briefly shoot up to a random high point and then drop back down onto the keyboard. It's most obvious on Samsung (Android 13) and it's intermittent, since it comes down to timing. `KeyboardCompatibleView` calculates a JS offset to lift the composer above the keyboard. But on a non edge-to-edge app the OS is already doing that for us with `adjustResize` and it shrinks the window when the keyboard shows up. The catch is our layout `frame` only reflects that resize one render *after* `keyboardDidShow` fires, so for a frame or two we compute the offset from the old, full height frame and stack it on top of the native resize. That extra offset is the jump we see. ## 🛠 Implementation details I split the behaviour based on whether the OS resizes the window for the keyboard: - **Non edge-to-edge** - the window resizes, so we don't need a JS offset at all. We return `0` and let `adjustResize` handle it. No double offset, nothing to race against, no jump. - **Edge-to-edge** (the default on Android 15 / API 35+, opt-in below that) - the window is *not* resized, RN dispatches insets instead, so our JS offset is the only thing keeping the composer above the keyboard and we have to apply it. The annoying part is you can't tell those two apart from `screen - window` on its own. Below API 35 the system bars get reported as an inset in *both* modes, so a plain `screen - window > 0` check wrongly triggers under edge-to-edge and ends up hiding the composer behind the keyboard. So on top of the inset check we read RN's `isEdgeToEdge`, `DeviceInfo` flag, and we only skip the JS offset when there's a bar inset (room for `adjustResize` to shrink into) *and* the app isn't edge-to-edge. The table below provides a report of where and how this has been tested on: | Device | Android / API | Mode | Result | | --- | --- | --- | --- | | Samsung Galaxy A51 (SM-A515F) | 13 / 33 | non edge-to-edge (default) | keyboard open/close repeatedly, no jump | | Samsung Galaxy A51 (SM-A515F) | 13 / 33 | edge-to-edge (`edgeToEdgeEnabled=true`) | composer stays above keyboard (this is the case a plain inset check breaks) | | Xiaomi 23124RA7EO | 15 / 35 | edge-to-edge (platform-enforced) | unchanged, composer stays above keyboard | Opened and closed the keyboard a bunch of times on each to make sure the jump is gone and nothing regressed. ## 🎨 UI Changes <!-- Add relevant screenshots --> <details> <summary>iOS</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> <details> <summary>Android</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [ ] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [ ] PR targets the `develop` branch - [ ] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 1 个月前 | |
fix: fastlane issues | 5 个月前 | |
feat: offline db encryption (#3780) ## 🎯 Goal Let integrators encrypt the offline database at rest. The offline cache stores channels, messages, members, drafts and reminders, and right now we write all of it as plaintext `SQLite`. It's opt-in. Apps that don't pass the new prop behave exactly as they do today. One thing to know up front, since it shapes the rest of the PR: `op-sqlite` accepts an `encryptionKey` on a build without `SQLCipher` and then ignores it. You get a plaintext database and no error at any layer. So part of this change is detecting that and refusing to open the database, instead of passing the key along and assuming it was used. Accompanying docs PR: https://github.com/GetStream/docs-content/pull/1521 ## 🛠 Implementation details ### API `Chat` takes one new prop: ```tsx <Chat client={client} enableOfflineSupport getEncryptionKey={getEncryptionKey}> ``` `getEncryptionKey?: () => Promise<string | undefined>` runs once per database open, so once per launch and again after a sign-out. Its result is passed to `SQLCipher` through `op-sqlite`. `SqliteClientError` and `SqliteClientErrorCode` are exported too. ### We throw instead of recovering When the database can't be opened with the encryption that was asked for, `Chat` throws a `SqliteClientError` from render and the integrator's error boundary handles it. We don't fall back to plaintext, we don't switch offline support off, and we don't delete anything. The reason is that all of those recoveries have a security consequence and there's no default that's right for everyone. Falling back to plaintext defeats the point of the feature and nothing tells you it happened. Dropping the cache decides a compliance question for the integrator. Deleting the file throws away offline actions that are still queued. We also can't tell "the Keystore isn't unlocked yet, try again shortly" from "something is wrong here, sign this device out". So we detect the failure and classify it, and the app decides what to do about it. ### Scenarios | Scenario | What it means | What the SDK does | Recommended recovery | | ------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------ | | No `getEncryptionKey` passed | Encryption not requested | Opens plaintext, same as today | n/a | | Key supplied, fresh install | Nothing on disk yet | Creates the database encrypted with that key | n/a | | Key supplied, plaintext database already on disk | Integrator is turning encryption on for an existing install | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | Key differs from the one the database was written with | Key rotated, or read from the wrong place | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` removed, encrypted database on disk | Integrator is turning encryption off again | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` throws | Key isn't available yet, e.g. Keystore still locked | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | `getEncryptionKey` resolves `undefined` | Same as above | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | Key supplied, native build has no `SQLCipher` | The key would be ignored and the database left plaintext | Throws `SQLCIPHER_BUILD_MISSING`, doesn't open | Not fixable at runtime, remount with `enableOfflineSupport={false}` | | Database file corrupted | Nothing to do with encryption | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | Two of those rows need a closer look in review. `OFFLINE_DB_UNREADABLE` is not gated on `getEncryptionKey` being set, and that's on purpose, because of the "turning encryption off again" row. If we only threw it when a key was supplied, an integrator removing the prop would get a blank screen instead of an error they can recover from. I hit that on device. The last row is why the boundary is useful even for apps that never use encryption. A corrupted database gives you the same code, so anything using `enableOfflineSupport` can end up there. ### Where the error comes from `AbstractOfflineDB.init` in the LLC catches whatever `initializeDB` throws and doesn't re-throw it, so a caller can't find out why initialisation failed. I left that alone, because changing it would tie this PR to an LLC release. `OfflineDB` stores the reason on the instance on the way out instead, and the new hook reads it back once `init` has settled. No LLC changes needed for this. - `SqliteClient` resolves the key, opens through `SQLCipher` and maps failures onto the codes above. It also gets `preflightEncryption()`, which runs before `setOfflineDBApi`. Without that ordering the client attaches a database that's already dead, and the unguarded `await this.offlineDb.upsertChannels(...)` inside `queryChannels` rejects. You end up on a loading screen that never resolves. - `useInitializeOfflineDb()` is new and does preflight, attach, init and raise, with the init options behind an `options` param. It's pulled out of `Chat`, which loses 72 lines. - `OfflineDB` records `initializationError` and re-throws, so `init` still marks the database uninitialised. ## 🎨 UI Changes ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [x] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [x] PR targets the `develop` branch - [x] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 16 天前 | |
feat: offline db encryption (#3780) ## 🎯 Goal Let integrators encrypt the offline database at rest. The offline cache stores channels, messages, members, drafts and reminders, and right now we write all of it as plaintext `SQLite`. It's opt-in. Apps that don't pass the new prop behave exactly as they do today. One thing to know up front, since it shapes the rest of the PR: `op-sqlite` accepts an `encryptionKey` on a build without `SQLCipher` and then ignores it. You get a plaintext database and no error at any layer. So part of this change is detecting that and refusing to open the database, instead of passing the key along and assuming it was used. Accompanying docs PR: https://github.com/GetStream/docs-content/pull/1521 ## 🛠 Implementation details ### API `Chat` takes one new prop: ```tsx <Chat client={client} enableOfflineSupport getEncryptionKey={getEncryptionKey}> ``` `getEncryptionKey?: () => Promise<string | undefined>` runs once per database open, so once per launch and again after a sign-out. Its result is passed to `SQLCipher` through `op-sqlite`. `SqliteClientError` and `SqliteClientErrorCode` are exported too. ### We throw instead of recovering When the database can't be opened with the encryption that was asked for, `Chat` throws a `SqliteClientError` from render and the integrator's error boundary handles it. We don't fall back to plaintext, we don't switch offline support off, and we don't delete anything. The reason is that all of those recoveries have a security consequence and there's no default that's right for everyone. Falling back to plaintext defeats the point of the feature and nothing tells you it happened. Dropping the cache decides a compliance question for the integrator. Deleting the file throws away offline actions that are still queued. We also can't tell "the Keystore isn't unlocked yet, try again shortly" from "something is wrong here, sign this device out". So we detect the failure and classify it, and the app decides what to do about it. ### Scenarios | Scenario | What it means | What the SDK does | Recommended recovery | | ------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------ | | No `getEncryptionKey` passed | Encryption not requested | Opens plaintext, same as today | n/a | | Key supplied, fresh install | Nothing on disk yet | Creates the database encrypted with that key | n/a | | Key supplied, plaintext database already on disk | Integrator is turning encryption on for an existing install | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | Key differs from the one the database was written with | Key rotated, or read from the wrong place | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` removed, encrypted database on disk | Integrator is turning encryption off again | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` throws | Key isn't available yet, e.g. Keystore still locked | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | `getEncryptionKey` resolves `undefined` | Same as above | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | Key supplied, native build has no `SQLCipher` | The key would be ignored and the database left plaintext | Throws `SQLCIPHER_BUILD_MISSING`, doesn't open | Not fixable at runtime, remount with `enableOfflineSupport={false}` | | Database file corrupted | Nothing to do with encryption | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | Two of those rows need a closer look in review. `OFFLINE_DB_UNREADABLE` is not gated on `getEncryptionKey` being set, and that's on purpose, because of the "turning encryption off again" row. If we only threw it when a key was supplied, an integrator removing the prop would get a blank screen instead of an error they can recover from. I hit that on device. The last row is why the boundary is useful even for apps that never use encryption. A corrupted database gives you the same code, so anything using `enableOfflineSupport` can end up there. ### Where the error comes from `AbstractOfflineDB.init` in the LLC catches whatever `initializeDB` throws and doesn't re-throw it, so a caller can't find out why initialisation failed. I left that alone, because changing it would tie this PR to an LLC release. `OfflineDB` stores the reason on the instance on the way out instead, and the new hook reads it back once `init` has settled. No LLC changes needed for this. - `SqliteClient` resolves the key, opens through `SQLCipher` and maps failures onto the codes above. It also gets `preflightEncryption()`, which runs before `setOfflineDBApi`. Without that ordering the client attaches a database that's already dead, and the unguarded `await this.offlineDb.upsertChannels(...)` inside `queryChannels` rejects. You end up on a loading screen that never resolves. - `useInitializeOfflineDb()` is new and does preflight, attach, init and raise, with the init options behind an `options` param. It's pulled out of `Chat`, which loses 72 lines. - `OfflineDB` records `initializationError` and re-throws, so `init` still marks the database uninitialised. ## 🎨 UI Changes ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [x] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [x] PR targets the `develop` branch - [x] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 16 天前 | |
upgrade packages and make corresponding changes | 5 年前 | |
chore: add android build and deploy workflows and improve ios workflow (#3334) The following are the changes in the PR: - The android package name for sample app is changed to `io.getstream.reactnative.sampleapp` as it was `com.sampleapp` before. Doesn't make any sense. - Added lanes for android firebase build and upload. - Improved the ios lanes for tesflight build and upload. Our first firebase deployment build after a long time(lane was run manually locally): <img width="1008" height="891" alt="Screenshot 2025-12-18 at 1 48 03 PM" src="https://github.com/user-attachments/assets/90710664-1ce3-4ddc-84e1-d9eb52b0d03b" /> | 7 个月前 | |
feat: upgrade version of React Native in Sample App to 0.72.6 (#2259) * chore: upgrade version of React Native in Sample App to 0.72.6 * fix: lint issues * fix: linting issues in SampleApp | 2 年前 | |
feat: offline db encryption (#3780) ## 🎯 Goal Let integrators encrypt the offline database at rest. The offline cache stores channels, messages, members, drafts and reminders, and right now we write all of it as plaintext `SQLite`. It's opt-in. Apps that don't pass the new prop behave exactly as they do today. One thing to know up front, since it shapes the rest of the PR: `op-sqlite` accepts an `encryptionKey` on a build without `SQLCipher` and then ignores it. You get a plaintext database and no error at any layer. So part of this change is detecting that and refusing to open the database, instead of passing the key along and assuming it was used. Accompanying docs PR: https://github.com/GetStream/docs-content/pull/1521 ## 🛠 Implementation details ### API `Chat` takes one new prop: ```tsx <Chat client={client} enableOfflineSupport getEncryptionKey={getEncryptionKey}> ``` `getEncryptionKey?: () => Promise<string | undefined>` runs once per database open, so once per launch and again after a sign-out. Its result is passed to `SQLCipher` through `op-sqlite`. `SqliteClientError` and `SqliteClientErrorCode` are exported too. ### We throw instead of recovering When the database can't be opened with the encryption that was asked for, `Chat` throws a `SqliteClientError` from render and the integrator's error boundary handles it. We don't fall back to plaintext, we don't switch offline support off, and we don't delete anything. The reason is that all of those recoveries have a security consequence and there's no default that's right for everyone. Falling back to plaintext defeats the point of the feature and nothing tells you it happened. Dropping the cache decides a compliance question for the integrator. Deleting the file throws away offline actions that are still queued. We also can't tell "the Keystore isn't unlocked yet, try again shortly" from "something is wrong here, sign this device out". So we detect the failure and classify it, and the app decides what to do about it. ### Scenarios | Scenario | What it means | What the SDK does | Recommended recovery | | ------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------------ | | No `getEncryptionKey` passed | Encryption not requested | Opens plaintext, same as today | n/a | | Key supplied, fresh install | Nothing on disk yet | Creates the database encrypted with that key | n/a | | Key supplied, plaintext database already on disk | Integrator is turning encryption on for an existing install | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | Key differs from the one the database was written with | Key rotated, or read from the wrong place | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` removed, encrypted database on disk | Integrator is turning encryption off again | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | | `getEncryptionKey` throws | Key isn't available yet, e.g. Keystore still locked | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | `getEncryptionKey` resolves `undefined` | Same as above | Throws `ENCRYPTION_KEY_UNAVAILABLE` | Remount to retry, e.g. on next app foreground | | Key supplied, native build has no `SQLCipher` | The key would be ignored and the database left plaintext | Throws `SQLCIPHER_BUILD_MISSING`, doesn't open | Not fixable at runtime, remount with `enableOfflineSupport={false}` | | Database file corrupted | Nothing to do with encryption | Throws `OFFLINE_DB_UNREADABLE` | Delete the database, remount `Chat` | Two of those rows need a closer look in review. `OFFLINE_DB_UNREADABLE` is not gated on `getEncryptionKey` being set, and that's on purpose, because of the "turning encryption off again" row. If we only threw it when a key was supplied, an integrator removing the prop would get a blank screen instead of an error they can recover from. I hit that on device. The last row is why the boundary is useful even for apps that never use encryption. A corrupted database gives you the same code, so anything using `enableOfflineSupport` can end up there. ### Where the error comes from `AbstractOfflineDB.init` in the LLC catches whatever `initializeDB` throws and doesn't re-throw it, so a caller can't find out why initialisation failed. I left that alone, because changing it would tie this PR to an LLC release. `OfflineDB` stores the reason on the instance on the way out instead, and the new hook reads it back once `init` has settled. No LLC changes needed for this. - `SqliteClient` resolves the key, opens through `SQLCipher` and maps failures onto the codes above. It also gets `preflightEncryption()`, which runs before `setOfflineDBApi`. Without that ordering the client attaches a database that's already dead, and the unguarded `await this.offlineDb.upsertChannels(...)` inside `queryChannels` rejects. You end up on a loading screen that never resolves. - `useInitializeOfflineDb()` is new and does preflight, attach, init and raise, with the init options behind an `options` param. It's pulled out of `Chat`, which loses 72 lines. - `OfflineDB` records `initializationError` and re-throws, so `init` still marks the database uninitialised. ## 🎨 UI Changes ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [x] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [x] PR targets the `develop` branch - [x] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 16 天前 | |
chore(release): 4.14.7 [skip ci] | 21 天前 | |
chore: rn 0.85 upgrade of SampleApp and rngh 3 support (#3629) ## 🎯 Goal This PR bumps our `SampleApp` to React Native 0.85 as well adding support for some major dependencies, such as: - `react-native-gesture-handler` - `3.0.0` - `react-native-reanimated` `4.4` ## 🛠 Implementation details <!-- Provide a description of the implementation --> ## 🎨 UI Changes <!-- Add relevant screenshots --> <details> <summary>iOS</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> <details> <summary>Android</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [ ] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [ ] PR targets the `develop` branch - [ ] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 3 个月前 | |
chore: rn 0.85 upgrade of SampleApp and rngh 3 support (#3629) ## 🎯 Goal This PR bumps our `SampleApp` to React Native 0.85 as well adding support for some major dependencies, such as: - `react-native-gesture-handler` - `3.0.0` - `react-native-reanimated` `4.4` ## 🛠 Implementation details <!-- Provide a description of the implementation --> ## 🎨 UI Changes <!-- Add relevant screenshots --> <details> <summary>iOS</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> <details> <summary>Android</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [ ] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [ ] PR targets the `develop` branch - [ ] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 3 个月前 | |
chore(yarn): migrate to Yarn 4 + native workspaces (#3594) ## 🎯 Goal Move us onto Yarn 4 with native workspaces and drop Lerna. The `.yarnrc.yml` was already half-migrated, but `yarnPath` still pointed at the v1 binary — this finishes that off. ## 🛠 Implementation details Tooling only; nothing in `package/src` changes. Roughly: - `.yarn/releases/` swapped to 4.14.1, and all seven `yarn.lock` files migrated v1 → v8 in place — resolutions preserved, no drift. - Single root `workspaces` array now covers `package/`, both native wrapper packages, and all three example apps. `link:../../package/*` becomes `workspace:^`, nested lockfiles are gone, and the install-and-build-sdk composite action collapses to one `yarn install --immutable`. - Shared-native sync + husky setup run from the core SDK workspace's `postinstall` (Yarn 4 doesn't run root-workspace lifecycle scripts on install). - Lerna removed: `release/release.config.js` no longer reads `lerna.json`, and `release` / `release-next` / `extract-changelog` use `yarn workspaces foreach`. - Husky 6 → 9 (the v6 hook boilerplate is on the deprecation path). - `.yarnrc.yml` picks up the conservative hardening tier: `enableHardenedMode`, `npmMinimalAgeGate: 3d`, `enableScripts: false` with a small `dependenciesMeta` allowlist for the packages that genuinely need to build (`@swc/core`, `better-sqlite3`, `react-native-nitro-modules`, `unrs-resolver`). - CI workflows cache `.yarn/` via setup-node; drive-by fix for the deprecated `::set-output` calls in `changelog-preview.yml`. ## 🎨 UI Changes N/A. ## 🧪 Testing Locally: `yarn install --immutable` is clean, `yarn lint` + `yarn build` pass, husky hooks fired on every commit in this PR. Can't verify locally: example apps on real devices, and the release flow itself. The Lerna → `yarn workspaces foreach` rewrite is the riskiest single change — worth a dry-run on a throwaway branch before merging. ## ☑️ Checklist - [x] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [x] PR targets the `develop` branch - [x] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android --------- Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io> | 3 个月前 | |
upgrade packages and make corresponding changes | 5 年前 | |
chore(e2e): make internal libs use parent project min sdk version | 4 年前 | |
Merge pull request #3279 from GetStream/perf/react-compiler feat: enable react compiler in the Sample and Expo app | 9 个月前 | |
feat: show delivery status and read status on the message and channel preview (#3258) * fix: add expo PN entitelments on app.json * fix: useChannelPreviewData types * feat: add delivery count to the message status * fix: useMessageDeliveryStatus * fix: refine the schema for offline support * fix: add useMessageReadData optimization * fix: hook * fix: hook * feat: add delivery receipt support inside push notification * feat: add delivery receipt support inside push notification * feat: add delivery receipt support inside push notification * perf: optimization in the hook * fix: change deliveredBy to deliveredToCount * fix: further optimize Message status component * fix: further optimize Message status component | 9 个月前 | |
chore(yarn): migrate to Yarn 4 + native workspaces (#3594) ## 🎯 Goal Move us onto Yarn 4 with native workspaces and drop Lerna. The `.yarnrc.yml` was already half-migrated, but `yarnPath` still pointed at the v1 binary — this finishes that off. ## 🛠 Implementation details Tooling only; nothing in `package/src` changes. Roughly: - `.yarn/releases/` swapped to 4.14.1, and all seven `yarn.lock` files migrated v1 → v8 in place — resolutions preserved, no drift. - Single root `workspaces` array now covers `package/`, both native wrapper packages, and all three example apps. `link:../../package/*` becomes `workspace:^`, nested lockfiles are gone, and the install-and-build-sdk composite action collapses to one `yarn install --immutable`. - Shared-native sync + husky setup run from the core SDK workspace's `postinstall` (Yarn 4 doesn't run root-workspace lifecycle scripts on install). - Lerna removed: `release/release.config.js` no longer reads `lerna.json`, and `release` / `release-next` / `extract-changelog` use `yarn workspaces foreach`. - Husky 6 → 9 (the v6 hook boilerplate is on the deprecation path). - `.yarnrc.yml` picks up the conservative hardening tier: `enableHardenedMode`, `npmMinimalAgeGate: 3d`, `enableScripts: false` with a small `dependenciesMeta` allowlist for the packages that genuinely need to build (`@swc/core`, `better-sqlite3`, `react-native-nitro-modules`, `unrs-resolver`). - CI workflows cache `.yarn/` via setup-node; drive-by fix for the deprecated `::set-output` calls in `changelog-preview.yml`. ## 🎨 UI Changes N/A. ## 🧪 Testing Locally: `yarn install --immutable` is clean, `yarn lint` + `yarn build` pass, husky hooks fired on every commit in this PR. Can't verify locally: example apps on real devices, and the release flow itself. The Lerna → `yarn workspaces foreach` rewrite is the riskiest single change — worth a dry-run on a throwaway branch before merging. ## ☑️ Checklist - [x] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [x] PR targets the `develop` branch - [x] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android --------- Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io> | 3 个月前 | |
perf: message content styles and perf scripts (#3626) ## 🎯 Goal <!-- Describe why we are making this change --> ## 🛠 Implementation details <!-- Provide a description of the implementation --> ## 🎨 UI Changes <!-- Add relevant screenshots --> <details> <summary>iOS</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> <details> <summary>Android</summary> <table> <thead> <tr> <td>Before</td> <td>After</td> </tr> </thead> <tbody> <tr> <td> <!--<img src="" /> --> </td> <td> <!--<img src="" /> --> </td> </tr> </tbody> </table> </details> ## 🧪 Testing <!-- Explain how this change can be tested (or why it can't be tested) --> ## ☑️ Checklist - [ ] I have signed the [Stream CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform) (required) - [ ] PR targets the `develop` branch - [ ] Documentation is updated - [ ] New code is tested in main example apps, including all possible scenarios - [ ] SampleApp iOS and Android - [ ] Expo iOS and Android | 3 个月前 | |
chore(release): 4.14.7 [skip ci] | 21 天前 | |
feat!: V6.0.0 (#2844) BREAKING CHANGE: v6 release * fix: remove netinfo from native handlers and add it as dev dependency of core (#2538) * fix: add expo-clipboard to peer deps of expo-package (#2537) * fix: remove netinfo from native handlers and add it as dev dependency of core * fix: lint issues * fix: revert back isMounted logic * fix: change peer dep * feat: remove usage of flatlist-mvcp in favour of mvcp support in RN >= 0.72 (#2539) * fix: add expo-clipboard to peer deps of expo-package (#2537) * feat: remove usage of flatlist-mvcp in favour of mvcp support in RN >= 0.72 * fix: remove flatlist-mvcp from example apps * chore: update peer dep of react native * fix: change quotedMessage type to MessageType or undefined (#2527) * fix: change quotedMessage type to MessageType or undefined * docs: fix lint issues * fix: change react-native-image-resizer to @bam.tech/react-native-image-resizer (#2534) * fix: reaction list reactions sorting order based on created_at * fix: show reactions using reactions_group * fix: tests * fix: useProcessReactions hook * fix: useProcessReactions hook and Channel message spread * fix: change react-native-image-resizer to @bam.tech/react-native-image-resizer * fix: remove reaction_counts from offline DB * chore: update yarn.lock files * fix: add reanimated and gesture handler as peer deps to package * fix: change old gesture handler useAnimatedGestureHandler to the new API (#2563) * feat: configure ReactionList reaction theme (#2561) * fix: expo sample app keyboardVerticalOffset for channel and thread screen * fix: change old gesture handler useAnimatedGestureHandler to the new API * feat: move react-native-quick-sqlite to op-sqlite (#2541) * feat: move react-native-quick-sqlite to op-sqlite * docs: update docs * fix: podfile changes * docs: add troubleshoot guide * fix: issues with import * fix: update yarn.lock * chore: update deps of expo messaging app * feat: use react-native-blob-util instead of the react-native-fs and make it optional dependency (#2578) * feat: use react-native-blob-util instead of the react-native-fs and make it optional dependency * chore: fix peerdeps and add dcos * fix: deps version on package.json * docs: add migration guide for v5 to v6 * docs: add migration guide for v5 to v6 * docs: add migration guide for v5 to v6 * fix: upgrade cameraroll, documentpicker, haptics feedback and image crop picker to new arch compatible version * fix: change react-native-image-crop-picker to react-native-image-picker and make it optional * docs: add migration guide * fix: make expo-image-picker optional * fix: make expo-image-picker optional * docs: apply docs changes * fix: add check for handlers in native.ts * fix: resolve conflicts from branch develop to v6 (#2621) * fix: resolve conflicts from branch develop to v6 * fix: remove cameraroll on ts messaging app * fix: remove shared folder * chore: bump vale version * chore: bump vale version * chore: update vale version * chore: resolve conflicts from develop * chore: fix vale issues * chore: fix vale issues * fix: react-native-safe-area-context ios build issue * fix: bottom sheet version * fix: remove flipper debugger * fix: issue with rn-svg on android and rn-video fabric compatibility * fix: animations usage in ImageGallery (#2627) * fix: remove rn-sqlite patch * fix: animations laginess on the ImageGallery and MessageOverlay on new architecture (#2633) * chore: resolve conflicts from develop (#2682) * fix: upgrade firebase versions to fix crash (#2646) * fix: audio recording variety bugs (#2648) * fix: variety of bugs in async audio feature * fix: upload of empty messages and console.log cleanup * fix: expo permission race conditions * fix: create pure version of stopRecording() for usage on unmount * fix: remove redundant export * fix: actually amend failing test suites * chore: remove constructors as they are not needed * fix: pr remarks * chore: write some simplistic functionality tests * chore: return class instance rather than class itself for better usability * chore: add more robust tests * fix: linter errors * fix: only display waveform whenever the mic is locked * docs: add Deep Linking guide for the chat SDK (#2651) * fix: change Block user action to Ban user action and UI cookbook for blocking users (#2649) * fix: change Block user action to Ban user action * fix: change Block user action to Ban user action * fix: add back blockUser action and deprecate it * docs: UI Cookbook for Blocking users * chore(release): 5.36.1 [skip ci] * chore(release): 1.28.1 [skip ci] * fix: issue with loading app settings when the connectUser is not called on app (#2654) * fix: issue with loading app settings when the connectUser is not called on app * fix: add comments * fix: add comments * fix: unable to upload file due to special characters in the file name (#2656) * fix: sdk size pr (#2657) * [CI] Update SDK Size (#2653) Co-authored-by: Khushal Agarwal <khushal.agarwal987@gmail.com> Co-authored-by: Stream Bot <runner@fv-az1148-731.o3ts4yn1huletmfehy03vvfvxg.dx.internal.cloudapp.net> * chore(release): 5.36.2 [skip ci] * chore(release): 1.28.2 [skip ci] * feat: add live location sharing cookbook (#2659) * feat: add live location ui cookbook * fix: prettier lint * Update docusaurus/docs/reactnative/guides/live-location-sharing.mdx Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> * lint fixes * fix lint issues * fix locks * move to ruby 3.1 and greater --------- Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> * chore(release): 5.37.0 [skip ci] * chore(release): 1.29.0 [skip ci] * fix: avoid prepending http before native supported url schemes (#2661) * fix: avoid prepending http before native supported url schemes * fix: move check to link parsing module * fix: bad memoisation in window, screen dimension listener hooks (#2664) * fix: bad memoisation in window, screen dimension listener hooks * remove unused variable * feat: add create chat client hook for easy usage (#2660) * feat: add create chat client hook for easy usage * docs: use useCreateChatClient hook for client creation * fix: bump fastlane plugin version (#2665) * fix: add theme properties for EmptyStateIndicator for message list (#2667) * fix: add theme properties for EmptyStateIndicator for message list * fix: update snapshots * fix: apply card cover theme property order * fix: pagination typescript errors and db synchronization bugs (#2669) * fix: pagination typescript errors and db synchronization bugs * chore: write test for db serialization issue * fix: linter issues * [CI] Bump max tolerance for sdk size analysis (#2674) * chore: bump sample app version to v1.30.0 * fix: remove nin and ne operator usage in the SDK and the sample app (#2672) * fix: remove and operator usage in the SDK and the sample app * fix: remove console log * fix: change console log to warn * fix: add improvemnts * fix: import of debouncefunc * fix: import of debouncefunc * fix: restructure queryMembers, queryUsers and ACItriggersettings * fix: error bubbling for suggestions in auto complete input * fix: request image access permissions for iOS only for native image picking (#2677) * fix: properly resolve sendMessage during memoization (#2675) * fix: properly resolve sendMessage during memoization * fix: remedy change so that it does not cause performance issues * chore: revert sendMessage in the dep array * fix: deprecate messageReactions prop and use isMessageActionsVisible instead for messageActions (#2676) * fix: deprecate messageReactions prop and use isMessageActionsVisible instead for messageActions * docs: fix custom message actions * fix: execution logic for showMessageOverlay * chore(release): 5.38.0 [skip ci] * chore(release): 1.29.1 [skip ci] * fix: update yarn.lock for the project (#2681) * fix: copy message action type for message actions (#2679) * chore: update sdk size (#2678) Co-authored-by: Khushal Agarwal <khushal.agarwal987@gmail.com> Co-authored-by: Stream Bot <runner@fv-az1756-392.rxb2ubmju23uthz3oztawtjyeg.dx.internal.cloudapp.net> * chore: resolve conflicts from develop * fix: vale lint issues * fix: new arch project config --------- Co-authored-by: Ivan Sekovanikj <31964049+isekovanic@users.noreply.github.com> Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: Alexey Alter-Pesotskiy <alex@testableapple.com> Co-authored-by: Stream SDK Bot <60655709+Stream-SDK-Bot@users.noreply.github.com> Co-authored-by: Stream Bot <runner@fv-az1148-731.o3ts4yn1huletmfehy03vvfvxg.dx.internal.cloudapp.net> Co-authored-by: Santhosh Vaiyapuri <3846977+santhoshvai@users.noreply.github.com> Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io> Co-authored-by: Stream Bot <runner@fv-az1756-392.rxb2ubmju23uthz3oztawtjyeg.dx.internal.cloudapp.net> * fix: chat.test.ts * chore: cleanup v3 docs setup and e2e tests from project (#2701) * feat: add new message action list and reaction selector UI (#2686) * feat: remove StreamChatRN in favour of a global context ChatConfigContext that allows providing global values (#2703) * fix: remove deprecated code from v6 branch (#2702) * fix: remove deprecated code from v6 branch * fix: remove deprecated code from v6 branch * docs: add deprecated docs * docs: add deprecated docs * chore: resolve conflicts from base branch * docs: improve deprecated docs * chore: resolve conflicts from develop * feat: new reaction list design and improvements to MessageSimple component (#2700) * feat: add new message action list and reaction selector UI * fix: remove unnecessary props from OverlayContext * docs: add comments for the props * tests: add tests for the components * tests: add tests for the components * fix: chat.test.ts * fix: chat.test.ts * fix: add tests for the code * fix: use rn animated to create new modal and add docs * fix: add opacity for the message action list item when pressed * fix: make modal better and change component names * fix: update test snapdhots * docs: message actions customizations * docs: message actions customizations * fix: theme improvements * fix: message component render improvements * docs: update migration guide * feat: new reaction list design and improvements to MessageSimple component * tests: add tests for the components * docs: reaction list new design docs * docs: add changes to migration guide * docs: add changes to migration guide * docs: add changes to migration guide * chore: resolve conflicts from base branch * chore: resolve conflicts from base branch * fix: sample app overlay backdrop bug * fix: reaction list type * feat: add FlatList for Reaction Picker * feat: add FlatList for Reaction Picker * feat: add FlatList for Reaction Picker * fix: circular dependency issue * fix: upgrade expo to latest in expo messaging app * fix: padding for reaction picker * fix: update dependencies for native cli apps * fix: add Flatlist mvcp as optional package and peer deps versions (#2720) * fix: add Flatlist mvcp as optional package and peer deps versions * fix: add Flatlist mvcp as optional package and peer deps versions * docs: fix native handler docs * docs: fix vale issues * docs: remove native handler docs * fix: lint issues * fix: design issues with ReactionList bottom UI (#2717) * fix: design issues with ReactionList bottom UI * fix: vale issues * fix: add a log that complains for removal for mvcp package on RN version <0.72 (#2724) * fix: add a log that complains for removal for mvcp package on RN version <0.72 * fix: add a log that complains for removal for mvcp package on RN version <0.72 * fix: build issues * fix: add variable under the if block Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> * fix: log --------- Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> * fix: bottom sheet modal improvements * fix: use process reactions improvements for thread list * docs: docusaurus setup for v6 release (#2721) * docs: docusaurus setup for v6 release * docs: docusaurus setup for v6 release * docs: fix vale issues * docs: add v5 docs to v5 folder * chore: setup workflow and improve migration guide for v6 rc release (#2727) * fix: linting issues * featv6 rc release * feat!: v6 rc release * feat!: v6 rc release * BREAKING CHANGE: v6 rc release * fix: upgrade react native version in sample apps to 0.73.10 (#2728) * feat!: rc release v6 (#2729) * feat: styles changes for MessageActionList * feat: styles changes for MessageUserReactions * chore: fix noteKeywords in release config * feat: improve Message.tsx render conditional (#2733) BREAKING CHANGE: Update the Message.tsx conditional in the component to use ternary * feat: remove dry run mode from release config BREAKING CHANGE: Update the release config * fix: way of reading the value from animated shared values in the components (#2738) * fix: way of reading the value from animated shared values in the components * fix: unify styles to one hook * fix: lint issues * fix: upgrade the RN version in example apps to 0.75.4 (#2739) * fix: upgrade the RN version in example apps to 0.74.6 * fix: upgrade the RN version in example apps to 0.75.4 * fix: upgrade the RN version in example apps to 0.75.4 * fix: pod install issue * fix: pod install issue * fix: pod install issue * fix: pod install issue * fix: pod install issue * feat: move react native image resizer native module to the SDK (#2751) * feat: move react native image resizer to the native package natively * fix: android and ios native module * fix: add StreamChatReactNative module for ios * fix: add StreamChatReactNative module for ios and android * fix: add StreamChatReactNative module for ios and android * docs: update docs for the removal of the image resizer package * fix: tests for audio controller * fix: tests for audio controller * fix: update sample app * fix: update sample app * fix: update sample app * fix: attachment picker image picker icon visibility as per dependency * fix: changes after merge * fix: lint issues * fix: revalidate pod cache * chore: revert cache revalidation * fix: sender and receiver message theme colors * fix: sender and receiver message theme colors (#2767) * fix: upgrade op-sqlite version to be compatible with latest react native version (#2761) * fix: upgrade op-sqlite version to be compatible with latest react native version * fix: lint issues * docs: add new architecture guide docs * revert: "docs: add new architecture guide docs" This reverts commit be16a66e7759f5737b174777110eaef798922c0c. * docs: fix migration guide * fix: add back set initial state * chore: backport the polls docs to v5 too * fix: add versioned sidebar update as well * chore: upgrade sample apps to RN 0.76.1 and added new arch docs (#2756) * chore: upgrade sample apps to RN 0.76.1 * docs: add new architecture guide * docs: add new architecture guide * fix: vale issues * chore: update the sample apps * fix: poll offline fixes (#2772) * fix: message disallowed indicator display (#2754) * fix: native image picker poll control (#2762) * fix: check for channel validity before consuming config (#2760) * fix: receiverMessageBackgroundColor hotfix (#2763) * fix: receiverMessageBackgroundColor hotfix * fix: tests * chore(release): 5.41.3 [skip ci] * chore(release): 1.31.4 [skip ci] * fix: theme for the message bubble and replies (#2766) * fix: theme for the message bubble and replies * fix: theme for the message bubble and replies * fix: add null coleasing operator * fix: poll edge cases (#2768) * fix: poll related edge cases with offline storage * feat: offline db for polls wip * fix: reconcile own_votes properly * fix: all underlying offline store issues with polls * fix: properly resolve own_votes and latest_answers * fix: remove faulty poll check * chore: remove commented out code * chore: remove log * fix: multiple answers bug and remove logs * chore: remove index as we have primary key * chore(release): 5.41.4 [skip ci] * chore(release): 1.31.5 [skip ci] * fix: errors during resolving conflicts and yarn.locks * fix: pod cache revalidation * fix: lint issues --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: Khushal Agarwal <khushal.agarwal987@gmail.com> * fix: revert cache revalidation and introduce dummy change in docs to trigger build * fix: resolve lint issues once again * fix: remove channel constants - isAdmin, isOwner and isModerator * fix: offline mode channel hydration issues * fix: remove channel constants - isAdmin, isOwner and isModerator (#2778) * fix: sender and receiver message theme colors * fix: remove channel constants - isAdmin, isOwner and isModerator * fix: faulty build for sample apps * fix: update yarn.lock files to fix build * fix: android modal size * fix: race conditions on db open and close * fix: move dropTables into check as well * fix: crash in some instances of useIsChannelMuted hook invocation * fix: properly use hook in channel preview * fix: edge cases and test * fix: regex state machine stack depth crash * fix: update test * fix: channel hook regressions * fix: expo media library permissions race conditions * feat: enable moderation v2 on the sdk and sample apps * fix: listen to correct channel read events * fix: add FlatList default for Expo * feat: add support for membership customization * fix: modify deployment workflow of SampleApp so that we get a release * fix: try bumping firebase version * fix: revert FB changes and CODE_SIGN_STYLE regression * fix: PROVISIONING_PROFILE_SPECIFIER specific val * fix: certificate distribution settings * fix: upgrade bottom sheet and fix reanimated errors in new arch (#2806) * fix: upgrade bottom sheet to get rid of warnings * fix: add sample app yarn.lock as well * fix: all remnants of reanimated errors * fix: update peer dependencies * fix: channel.state break on going to background * fix: expo media library exceptions in new arch * chore: resolve conflicts from develop on v6 (#2813) * chore(release): 5.42.0 [skip ci] * chore(release): 1.31.6 [skip ci] * fix: android modal size (#2784) * fix: backport crash fix (#2787) * fix: crash in some instances of useIsChannelMuted hook invocation * fix: properly use hook in channel preview * fix: edge cases and test * chore(release): 5.42.1 [skip ci] * chore(release): 1.31.7 [skip ci] * fix: recursion depth on regex parse issue (#2790) * fix: channel hook regressions * fix: expo media library permissions race conditions * fix: listen to correct channel read events * chore(release): 5.42.2 [skip ci] * chore(release): 1.31.8 [skip ci] * feat: moderation v2 support (#2801) * feat: enable moderation v2 on the sdk and sample apps * chore: update yarn.lock files as well * feat: add support for membership customization (#2802) * feat: add support for membership customization * fix: lint issues * chore(release): 5.43.0 [skip ci] * chore(release): 1.32.0 [skip ci] * fix: channel.state break on going to background (#2809) * chore(release): 5.43.1 [skip ci] * chore(release): 1.32.1 [skip ci] * chore: resolve conflicts from develop on v6 --------- Co-authored-by: Ivan Sekovanikj <31964049+isekovanic@users.noreply.github.com> Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io> * fix: camera roll issues * fix: refactor photo resolution to native level * fix: expo media library * fix: properly resolve videos too * chore: remove console.log * chore: update yarn.lock files for example apps * fix: bring back camera-roll to SampleApp * fix: also podfile.lock * fix: remove console.log * fix: issues with video preview * chore: remove console.log * chore: resolve conflicts from develop * feat: ai-bot integration poc (#2819) * feat: add StreamingMessageView to kick off ai feature * fix: issues with message view * feat: add AITypingIndicatorView * feat: make send message button react to ai state * fix: improve typewriter animation * fix: improvements in ui and typewriter * chore: add customizations to StreamingMessageView * fix: hook deps * chore: extract logic in hook * fix: custom events * fix: revert the type change in favor of changes in the LLC * feat: codeblock scrollable view * feat: table initial reimpl * feat: finish table impl * fix: horizontal scroll list performance issues * feat: add markdown parsing fixes, optimistic code capture and various improvements * fix: theme prop and theming in general * fix: remove edited lalbel for ai messages * fix: bug with stop streaming button and types * fix: colors in md rendering * fix: rename custom scrollview * chore: translations * fix: remove TODO * chore: extract indicator styles in theme * fix: safeguard if channel does not exist * fix: get rid of enum and introduce proper type * fix: allow only message overrides * chore: update event names as per the changes * fix: bump stream-chat-js version to v8.46.0 * fix: use channel method for sending events * fix: cover background mode case * fix: use type from LLC * chore: add jsdocs * fix: move check to checker fn * fix: add overrides for StreamingMessageView * chore: add override for stop streaming button * chore: upgrade expo sample app to expo 52 * fix: remove unnecessary android and ios permissions * chore: update yarn.lock files * refactor: remove stale subscriber count logic and types refactor (#2832) * refactor: remove stale subscriber count logic and types refactor (#2782) * fix: lint issues * feat: Message list pagination implementation using hasPrev and hasNext (#2799) * refactor: remove stale subscriber count logic and types refactor (#2782) * feat: new message list pagination implementation * fix: channel state initial data * fix: revert back the onStartReached change * fix: lint and tests * fix: added tests for the hooks and message pagination * fix: podlock file for sample app * fix: throttle logic for the copy message state * fix: add back channel.deleted event * fix: useeffect deps * fix: add theme for the bottom sheet styles and message user reactions item (#2827) * fix: refactor some of the buttons * fix: refactor context usage * fix: solve final cyclical dep * fix: add corrected app.json * fix: convert all poll buttons to pressables * fix: lint issues (that somehow passed without issues before) * chore: move add comment button to correct file * fix: move vote button to correct file too * fix: image gallery issues (#2835) * fix: infinite image loading issue * fix: image gallery animations issue * fix: remove unnecessary logs * fix: image gallery header and footer safe area view (#2840) * chore: remove disable if frozen channel (#2841) * chore: write tests for disallowed sending messages (#2839) * chore: write tests for disallowed sending messages * fix: make test name more concise * chore: remove redundant assertion * chore: add test for the editing state as well * fix: only disable message input ui when capabilities change (#2836) * chore: remove disableIfFrozenChannel prop * fix: lint issues * fix: old arch image resizer native module spec file name fix (#2842) * fix: image gallery header and footer safe area view * fix: old arch image resizer native module spec file name fix * chore: fix all of the GH workflow stuff related to v6 in prep for releasing (#2843) --------- Co-authored-by: Khushal Agarwal <khushal.agarwal987@gmail.com> Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> Co-authored-by: Alexey Alter-Pesotskiy <alex@testableapple.com> Co-authored-by: Stream SDK Bot <60655709+Stream-SDK-Bot@users.noreply.github.com> Co-authored-by: Stream Bot <runner@fv-az1148-731.o3ts4yn1huletmfehy03vvfvxg.dx.internal.cloudapp.net> Co-authored-by: Santhosh Vaiyapuri <3846977+santhoshvai@users.noreply.github.com> Co-authored-by: Oliver Lazoroski <oliver.lazoroski@gmail.com> Co-authored-by: Stream Bot <runner@fv-az1756-392.rxb2ubmju23uthz3oztawtjyeg.dx.internal.cloudapp.net> | 1 年前 | |
chore: upgrade to TypeScript 6.0.3, ES2022 target, and shared ts-config presets (#3663) ## What & why Upgrades every workspace to **TypeScript 6.0.3** with **`target: ES2022`**, and removes tsconfig duplication via a new shared preset package. Enabling type-checking across the previously-unchecked packages also surfaced (and this PR fixes) a pre-existing bug in the core package's published type resolution plus a batch of latent type errors. ## Changes ### Shared config - New **private** `@stream-io/typescript-config` workspace (`configs/typescript-config/`): - `base.json` — cross-cutting policy (ES2022 target, strict, interop, …) - `library.json` — full React Native library config (extends `base`) - Core, the native/expo wrappers, and all 3 example apps extend these instead of duplicating compiler options. Example apps array-extend `["<framework base>", "@stream-io/typescript-config/base.json"]`. ### TypeScript 6.0.3 / ES2022 - TS `6.0.3` in all 7 manifests; `target: ES2022` everywhere. - `lib` kept at `ESNext` — the SDK uses the ES2023 `Array.prototype.toReversed()`. - TS 6.0 no longer auto-includes `@types/jest`, so it's referenced explicitly from a test-only `package/src/__tests__/jest-globals.d.ts` (excluded from the published build). ### Core publishing fix (consumer-facing) - `react-native-builder-bob` emitted declarations under `lib/typescript/src/` while `package.json#types` pointed at `lib/typescript/index.d.ts` — so TS consumers couldn't resolve the SDK's types via `types`. Added `rootDir: "./src"` so declarations emit flat to match `types`. This was also the root cause that blocked the wrappers/examples from resolving core's types. - Exported `PickImageOptions` from the core entrypoint (defined+exported in `native.ts` but never surfaced from `index`). ### Wrappers (`stream-chat-react-native`, `stream-chat-expo`) - Added a `typecheck` script + tsconfig (they had neither). The dynamic optional-`require` shims relax `noImplicitAny`/`strictNullChecks`/unused checks (kept `noImplicitReturns`). - Fixed real bugs: missing `return`s in `shareImage`, missing `resizeMode`/`rate` on the video shim, an inconsistent `startRecording` return shape. ### Example apps - Fixed ~60 pre-existing latent type errors unmasked by enabling typecheck: theme palette typing (the legacy flat `colors` palette, read via a local `AppTheme` cast — behavior-preserving), null-safety guards, and several SDK-API-drift fixes. ### CI - `check-pr.yml` now runs `yarn typecheck` across the whole workspace (core + 2 wrappers + 3 examples) instead of only the core package; the root `typecheck` aggregate includes the wrappers. ## Verification - `yarn build` ✅ - `yarn typecheck` (core + 2 wrappers + 3 examples) ✅ **0 errors** - `yarn lint` ✅ ## Notes for reviewers - **Commit type**: filed as `chore:` (release-neutral). The core changes (flat `types` path + `PickImageOptions` export) are genuinely consumer-facing — if you want them shipped, retype as `fix:` to cut a patch. - **Wrapper strictness**: `strictNullChecks`/`noImplicitAny` are relaxed **only** for the two wrapper packages (dynamic optional-dep shims), not for core. - **Example theming**: the apps' custom `colors` palette was already inert for SDK theming (the SDK reads semantics/primitives, not `theme.colors`); this PR preserves that behavior. Migrating the palette to the token model to restore custom branding would be a separate enhancement. - Did not run the full unit suite locally (the only core source change is the additive `PickImageOptions` export); CI runs `test:coverage`. --------- Co-authored-by: Ivan Sekovanikj <ivan.sekovanikj@getstream.io> | 1 个月前 |
Fully featured messaging application
How to run the app
- Please make sure you have installed necessary dependencies depending on your development OS and target OS. Follow the guidelines given on official React Native documentation for installing dependencies: https://facebook.github.io/react-native/docs/getting-started
- Make sure node version is >= v10.13.0
Clone the project
git clone https://github.com/GetStream/stream-chat-react-native.git
Install the dependencies
- In the root install the dependencies:
yarn install
- Move to the
packagedirectory and install the dependencies:
cd package && yarn install
- Move to the
native-packagedirectory and install the dependencies:
cd native-package && yarn install
- Finally, Move to the app directory and install the dependencies:
cd ../../examples/SampleApp && yarn install
Install Pods for iOS
cd ios && pod install
Run
To run the application for different platforms, use the following commands:
yarn start
- For iOS
yarn ios
- For android
yarn android
If you run into following error on android:
Execution failed for task ':app:validateSigningDebug'.
> Keystore file '/path_to_project/stream-chat-react-native/examples/NativeMessaging/android/app/debug.keystore' not found for signing config 'debug'.
You can generate the debug Keystore by running this command in the android/app/ directory: keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 - Reference
