about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--package.json22
-rw-r--r--patches/expo-notifications+0.28.3.patch (renamed from patches/expo-notifications+0.28.1.patch)44
-rw-r--r--patches/expo-notifications-0.28.3.patch.md (renamed from patches/expo-notifications-0.27.6.patch.md)0
-rw-r--r--patches/react-native-reanimated+3.11.0.patch209
-rw-r--r--src/lib/hooks/usePermissions.ts5
-rw-r--r--yarn.lock102
6 files changed, 290 insertions, 92 deletions
diff --git a/package.json b/package.json
index 5ba185632..38c450c34 100644
--- a/package.json
+++ b/package.json
@@ -70,7 +70,7 @@
     "@radix-ui/react-dropdown-menu": "^2.0.6",
     "@react-native-async-storage/async-storage": "1.23.1",
     "@react-native-masked-view/masked-view": "0.3.0",
-    "@react-native-menu/menu": "^0.8.0",
+    "@react-native-menu/menu": "^1.1.0",
     "@react-native-picker/picker": "2.6.1",
     "@react-navigation/bottom-tabs": "^6.5.20",
     "@react-navigation/drawer": "^6.6.15",
@@ -114,28 +114,28 @@
     "expo": "^51.0.8",
     "expo-application": "^5.9.1",
     "expo-build-properties": "^0.12.1",
-    "expo-camera": "~14.1.3",
-    "expo-clipboard": "^5.0.1",
-    "expo-constants": "~15.4.6",
+    "expo-camera": "~15.0.9",
+    "expo-clipboard": "^6.0.3",
+    "expo-constants": "~16.0.1",
     "expo-dev-client": "^4.0.14",
-    "expo-device": "~5.9.3",
-    "expo-file-system": "^16.0.9",
-    "expo-haptics": "^12.8.1",
+    "expo-device": "~6.0.2",
+    "expo-file-system": "^17.0.1",
+    "expo-haptics": "^13.0.1",
     "expo-image": "~1.12.9",
-    "expo-image-manipulator": "^12.0.3",
-    "expo-image-picker": "~15.0.4",
+    "expo-image-manipulator": "^12.0.5",
+    "expo-image-picker": "~15.0.5",
     "expo-linear-gradient": "^13.0.2",
     "expo-linking": "^6.3.1",
     "expo-localization": "~15.0.3",
     "expo-media-library": "~16.0.3",
     "expo-navigation-bar": "~3.0.4",
-    "expo-notifications": "~0.28.1",
+    "expo-notifications": "~0.28.3",
     "expo-sharing": "^12.0.1",
     "expo-splash-screen": "~0.27.4",
     "expo-status-bar": "~1.12.1",
     "expo-system-ui": "~3.0.4",
     "expo-task-manager": "~11.8.1",
-    "expo-updates": "~0.25.11",
+    "expo-updates": "~0.25.14",
     "expo-web-browser": "~13.0.3",
     "fast-text-encoding": "^1.0.6",
     "history": "^5.3.0",
diff --git a/patches/expo-notifications+0.28.1.patch b/patches/expo-notifications+0.28.3.patch
index 41e91446e..3a9985c7b 100644
--- a/patches/expo-notifications+0.28.1.patch
+++ b/patches/expo-notifications+0.28.3.patch
@@ -4,10 +4,10 @@ index d233e1f..cc2f856 100644
 +++ b/node_modules/expo-notifications/android/build.gradle
 @@ -32,6 +32,7 @@ dependencies {
    api 'com.google.firebase:firebase-messaging:22.0.0'
- 
+
    api 'me.leolin:ShortcutBadger:1.1.22@aar'
 +  implementation project(':expo-background-notification-handler')
- 
+
    if (project.findProject(':expo-modules-test-core')) {
      testImplementation project(':expo-modules-test-core')
 diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java
@@ -16,14 +16,14 @@ index 0af7fe0..8f2c8d8 100644
 +++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java
 @@ -14,6 +14,7 @@ import expo.modules.notifications.notifications.enums.NotificationPriority;
  import expo.modules.notifications.notifications.model.NotificationContent;
- 
+
  public class JSONNotificationContentBuilder extends NotificationContent.Builder {
 +  private static final String CHANNEL_ID_KEY = "channelId";
    private static final String TITLE_KEY = "title";
    private static final String TEXT_KEY = "message";
    private static final String SUBTITLE_KEY = "subtitle";
 @@ -36,6 +37,7 @@ public class JSONNotificationContentBuilder extends NotificationContent.Builder
- 
+
    public NotificationContent.Builder setPayload(JSONObject payload) {
      this.setTitle(getTitle(payload))
 +      .setChannelId(getChannelId(payload))
@@ -33,7 +33,7 @@ index 0af7fe0..8f2c8d8 100644
 @@ -60,6 +62,14 @@ public class JSONNotificationContentBuilder extends NotificationContent.Builder
      return this;
    }
- 
+
 +  protected String getChannelId(JSONObject payload) {
 +    try {
 +      return payload.getString(CHANNEL_ID_KEY);
@@ -46,21 +46,21 @@ index 0af7fe0..8f2c8d8 100644
      try {
        return payload.getString(TITLE_KEY);
 diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
-index f1fed19..166b34f 100644
+index f1fed19..80afe9e 100644
 --- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
 +++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
 @@ -20,6 +20,7 @@ import expo.modules.notifications.notifications.enums.NotificationPriority;
   * should be created using {@link NotificationContent.Builder}.
   */
  public class NotificationContent implements Parcelable, Serializable {
-+  private string mChannelId;
++  private String mChannelId;
    private String mTitle;
    private String mText;
    private String mSubtitle;
 @@ -50,6 +51,11 @@ public class NotificationContent implements Parcelable, Serializable {
      }
    };
- 
+
 +  @Nullable
 +  public String getChannelId() {
 +    return mTitle;
@@ -71,14 +71,14 @@ index f1fed19..166b34f 100644
      return mTitle;
 @@ -121,6 +127,7 @@ public class NotificationContent implements Parcelable, Serializable {
    }
- 
+
    protected NotificationContent(Parcel in) {
 +    mChannelId = in.readString();
      mTitle = in.readString();
      mText = in.readString();
      mSubtitle = in.readString();
 @@ -146,6 +153,7 @@ public class NotificationContent implements Parcelable, Serializable {
- 
+
    @Override
    public void writeToParcel(Parcel dest, int flags) {
 +    dest.writeString(mChannelId);
@@ -87,7 +87,7 @@ index f1fed19..166b34f 100644
      dest.writeString(mSubtitle);
 @@ -166,6 +174,7 @@ public class NotificationContent implements Parcelable, Serializable {
    private static final long serialVersionUID = 397666843266836802L;
- 
+
    private void writeObject(java.io.ObjectOutputStream out) throws IOException {
 +    out.writeObject(mChannelId);
      out.writeObject(mTitle);
@@ -95,7 +95,7 @@ index f1fed19..166b34f 100644
      out.writeObject(mSubtitle);
 @@ -190,6 +199,7 @@ public class NotificationContent implements Parcelable, Serializable {
    }
- 
+
    private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
 +    mChannelId = (String) in.readObject();
      mTitle = (String) in.readObject();
@@ -103,16 +103,16 @@ index f1fed19..166b34f 100644
      mSubtitle = (String) in.readObject();
 @@ -240,6 +250,7 @@ public class NotificationContent implements Parcelable, Serializable {
    }
- 
+
    public static class Builder {
-+    private string mChannelId;
++    private String mChannelId;
      private String mTitle;
      private String mText;
      private String mSubtitle;
 @@ -260,6 +271,11 @@ public class NotificationContent implements Parcelable, Serializable {
        useDefaultVibrationPattern();
      }
- 
+
 +    public Builder setChannelId(String channelId) {
 +      mChannelId = channelId;
 +      return this;
@@ -122,7 +122,7 @@ index f1fed19..166b34f 100644
        mTitle = title;
        return this;
 @@ -336,6 +352,7 @@ public class NotificationContent implements Parcelable, Serializable {
- 
+
      public NotificationContent build() {
        NotificationContent content = new NotificationContent();
 +      content.mChannelId = mChannelId;
@@ -134,16 +134,16 @@ index 6bd9928..ee93d70 100644
 --- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
 +++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java
 @@ -48,6 +48,10 @@ public class ExpoNotificationBuilder extends ChannelAwareNotificationBuilder {
- 
+
      NotificationContent content = getNotificationContent();
- 
+
 +    if (content.getChannelId() != null) {
 +      builder.setChannelId(content.getChannelId());
 +    }
 +
      builder.setAutoCancel(content.isAutoDismiss());
      builder.setOngoing(content.isSticky());
- 
+
 diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
 index 55b3a8d..1b99d5b 100644
 --- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
@@ -158,7 +158,7 @@ index 55b3a8d..1b99d5b 100644
  import org.json.JSONObject
  import java.lang.ref.WeakReference
  import java.util.*
- 
+
 -open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate {
 +open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate, BackgroundNotificationHandlerInterface {
    companion object {
@@ -166,7 +166,7 @@ index 55b3a8d..1b99d5b 100644
      // than by static properties. Fortunately, using weak references we can
 @@ -89,12 +92,21 @@ open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseM
    fun getBackgroundTasks() = sBackgroundTaskConsumerReferences.values.mapNotNull { it.get() }
- 
+
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
 -    NotificationsService.receive(context, createNotification(remoteMessage))
 -    getBackgroundTasks().forEach {
@@ -181,7 +181,7 @@ index 55b3a8d..1b99d5b 100644
 +      }
      }
    }
- 
+
 +  override fun showMessage(remoteMessage: RemoteMessage) {
 +    NotificationsService.receive(context, createNotification(remoteMessage))
 +  }
diff --git a/patches/expo-notifications-0.27.6.patch.md b/patches/expo-notifications-0.28.3.patch.md
index 59b2598f3..59b2598f3 100644
--- a/patches/expo-notifications-0.27.6.patch.md
+++ b/patches/expo-notifications-0.28.3.patch.md
diff --git a/patches/react-native-reanimated+3.11.0.patch b/patches/react-native-reanimated+3.11.0.patch
index f18985385..9147cf08e 100644
--- a/patches/react-native-reanimated+3.11.0.patch
+++ b/patches/react-native-reanimated+3.11.0.patch
@@ -1,3 +1,212 @@
+diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
+index 92ebe62..5f8207e 100644
+--- a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
++++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts
+@@ -96,7 +96,8 @@ export interface AnimatedComponentRef extends Component {
+ export interface IAnimatedComponentInternal {
+   _styles: StyleProps[] | null;
+   _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;
+-  _viewTag: number;
++  _componentViewTag: number;
++  _eventViewTag: number;
+   _isFirstRender: boolean;
+   jestAnimatedStyle: { value: StyleProps };
+   _component: AnimatedComponentRef | HTMLElement | null;
+diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
+index 88b3fdf..2488ebc 100644
+--- a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
++++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx
+@@ -122,7 +122,8 @@ export function createAnimatedComponent(
+   {
+     _styles: StyleProps[] | null = null;
+     _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;
+-    _viewTag = -1;
++    _componentViewTag = -1;
++    _eventViewTag = -1;
+     _isFirstRender = true;
+     jestAnimatedStyle: { value: StyleProps } = { value: {} };
+     _component: AnimatedComponentRef | HTMLElement | null = null;
+@@ -143,7 +144,8 @@ export function createAnimatedComponent(
+     }
+
+     componentDidMount() {
+-      this._viewTag = this._getViewInfo().viewTag as number;
++      this._setComponentViewTag();
++      this._setEventViewTag();
+       this._attachNativeEvents();
+       this._jsPropsUpdater.addOnJSPropsChangeListener(this);
+       this._attachAnimatedStyles();
+@@ -185,7 +187,10 @@ export function createAnimatedComponent(
+       if (this.props.sharedTransitionTag) {
+         this._configureSharedTransition(true);
+       }
+-      this._sharedElementTransition?.unregisterTransition(this._viewTag, true);
++      this._sharedElementTransition?.unregisterTransition(
++        this._componentViewTag,
++        true
++      );
+
+       const exiting = this.props.exiting;
+       if (
+@@ -209,7 +214,7 @@ export function createAnimatedComponent(
+             : getReduceMotionFromConfig();
+         if (!reduceMotionInExiting) {
+           updateLayoutAnimations(
+-            this._viewTag,
++            this._componentViewTag,
+             LayoutAnimationType.EXITING,
+             maybeBuild(
+               exiting,
+@@ -221,12 +226,22 @@ export function createAnimatedComponent(
+       }
+     }
+
+-    _getEventViewRef() {
+-      // Make sure to get the scrollable node for components that implement
+-      // `ScrollResponder.Mixin`.
+-      return (this._component as AnimatedComponentRef)?.getScrollableNode
+-        ? (this._component as AnimatedComponentRef).getScrollableNode?.()
+-        : this._component;
++    _setComponentViewTag() {
++      this._componentViewTag = this._getViewInfo().viewTag as number;
++    }
++
++    _setEventViewTag() {
++      // Setting the tag for registering events - since the event emitting view can be nested inside the main component
++      const componentAnimatedRef = this._component as AnimatedComponentRef;
++      if (componentAnimatedRef.getScrollableNode) {
++        const scrollableNode = componentAnimatedRef.getScrollableNode();
++        this._eventViewTag = findNodeHandle(scrollableNode) ?? -1;
++      } else {
++        this._eventViewTag =
++          findNodeHandle(
++            options?.setNativeProps ? this : componentAnimatedRef
++          ) ?? -1;
++      }
+     }
+
+     _attachNativeEvents() {
+@@ -236,7 +251,7 @@ export function createAnimatedComponent(
+           has('workletEventHandler', prop) &&
+           prop.workletEventHandler instanceof WorkletEventHandler
+         ) {
+-          prop.workletEventHandler.registerForEvents(this._viewTag, key);
++          prop.workletEventHandler.registerForEvents(this._eventViewTag, key);
+         }
+       }
+     }
+@@ -248,7 +263,7 @@ export function createAnimatedComponent(
+           has('workletEventHandler', prop) &&
+           prop.workletEventHandler instanceof WorkletEventHandler
+         ) {
+-          prop.workletEventHandler.unregisterFromEvents(this._viewTag);
++          prop.workletEventHandler.unregisterFromEvents(this._eventViewTag);
+         }
+       }
+     }
+@@ -258,15 +273,17 @@ export function createAnimatedComponent(
+         for (const style of this._styles) {
+           style.viewsRef.remove(this);
+         }
+-      } else if (this._viewTag !== -1 && this._styles !== null) {
++      } else if (this._componentViewTag !== -1 && this._styles !== null) {
+         for (const style of this._styles) {
+-          style.viewDescriptors.remove(this._viewTag);
++          style.viewDescriptors.remove(this._componentViewTag);
+         }
+         if (this.props.animatedProps?.viewDescriptors) {
+-          this.props.animatedProps.viewDescriptors.remove(this._viewTag);
++          this.props.animatedProps.viewDescriptors.remove(
++            this._componentViewTag
++          );
+         }
+         if (isFabric()) {
+-          removeFromPropsRegistry(this._viewTag);
++          removeFromPropsRegistry(this._componentViewTag);
+         }
+       }
+     }
+@@ -283,15 +300,19 @@ export function createAnimatedComponent(
+           const newProp = this.props[key];
+           if (!newProp) {
+             // Prop got deleted
+-            prevProp.workletEventHandler.unregisterFromEvents(this._viewTag);
++            prevProp.workletEventHandler.unregisterFromEvents(
++              this._eventViewTag
++            );
+           } else if (
+             has('workletEventHandler', newProp) &&
+             newProp.workletEventHandler instanceof WorkletEventHandler &&
+             newProp.workletEventHandler !== prevProp.workletEventHandler
+           ) {
+             // Prop got changed
+-            prevProp.workletEventHandler.unregisterFromEvents(this._viewTag);
+-            newProp.workletEventHandler.registerForEvents(this._viewTag);
++            prevProp.workletEventHandler.unregisterFromEvents(
++              this._eventViewTag
++            );
++            newProp.workletEventHandler.registerForEvents(this._eventViewTag);
+           }
+         }
+       }
+@@ -304,7 +325,7 @@ export function createAnimatedComponent(
+           !prevProps[key]
+         ) {
+           // Prop got added
+-          newProp.workletEventHandler.registerForEvents(this._viewTag);
++          newProp.workletEventHandler.registerForEvents(this._eventViewTag);
+         }
+       }
+     }
+@@ -381,7 +402,7 @@ export function createAnimatedComponent(
+         adaptViewConfig(viewConfig);
+       }
+
+-      this._viewTag = viewTag as number;
++      this._componentViewTag = viewTag as number;
+
+       // remove old styles
+       if (prevStyles) {
+@@ -487,7 +508,11 @@ export function createAnimatedComponent(
+             AnimatedComponent.displayName
+           )
+         : undefined;
+-      updateLayoutAnimations(this._viewTag, LayoutAnimationType.LAYOUT, layout);
++      updateLayoutAnimations(
++        this._componentViewTag,
++        LayoutAnimationType.LAYOUT,
++        layout
++      );
+     }
+
+     _configureSharedTransition(isUnmounting = false) {
+@@ -497,7 +522,7 @@ export function createAnimatedComponent(
+       const { sharedTransitionTag } = this.props;
+       if (!sharedTransitionTag) {
+         this._sharedElementTransition?.unregisterTransition(
+-          this._viewTag,
++          this._componentViewTag,
+           isUnmounting
+         );
+         this._sharedElementTransition = null;
+@@ -508,7 +533,7 @@ export function createAnimatedComponent(
+         this._sharedElementTransition ??
+         new SharedTransition();
+       sharedElementTransition.registerTransition(
+-        this._viewTag,
++        this._componentViewTag,
+         sharedTransitionTag,
+         isUnmounting
+       );
+@@ -527,7 +552,7 @@ export function createAnimatedComponent(
+           ? (ref as HTMLElement)
+           : findNodeHandle(ref as Component);
+
+-        this._viewTag = tag as number;
++        this._componentViewTag = tag as number;
+
+         const { layout, entering, exiting, sharedTransitionTag } = this.props;
+         if (
 diff --git a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js b/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
 index ac9be5d..86d4605 100644
 --- a/node_modules/react-native-reanimated/lib/module/reanimated2/index.js
diff --git a/src/lib/hooks/usePermissions.ts b/src/lib/hooks/usePermissions.ts
index 138f3eaca..baf9f7b8a 100644
--- a/src/lib/hooks/usePermissions.ts
+++ b/src/lib/hooks/usePermissions.ts
@@ -1,6 +1,7 @@
-import {Camera} from 'expo-camera'
-import * as MediaLibrary from 'expo-media-library'
 import {Linking} from 'react-native'
+import {Camera} from 'expo-camera/legacy' // TODO: Migrate to the new one.
+import * as MediaLibrary from 'expo-media-library'
+
 import {isWeb} from 'platform/detection'
 import {Alert} from 'view/com/util/Alert'
 
diff --git a/yarn.lock b/yarn.lock
index f8a3824a0..2b105f00e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3572,10 +3572,10 @@
     p-limit "^3.1.0"
     resolve-from "^5.0.0"
 
-"@expo/fingerprint@^0.7.0":
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.7.1.tgz#5778c79f6be2471b4c703381e26e9ee0691fa8c6"
-  integrity sha512-lbTwFiIk0lOm9zzPRvnC45GfPqXqPB3w4hDDKVma+8FDAbPCWhNN42ltLhx/ekwcHFQxURmg0fHm59k0Vy+jtw==
+"@expo/fingerprint@^0.8.0":
+  version "0.8.0"
+  resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.8.0.tgz#631a64c5db23e121228546502ae6a0eeab19aaf7"
+  integrity sha512-LBNweJnpG16p7SbvFGINF5Q44bDErIcm1li9SuvYQgrrSey3ErIPmZsiMsNBxlvVie6eTp4wmFO6IFmeaqEhbg==
   dependencies:
     "@expo/spawn-async" "^1.7.2"
     chalk "^4.1.2"
@@ -5482,10 +5482,10 @@
   resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.0.tgz#bd29fae18d148a685331910a3c7b766ce87eafcc"
   integrity sha512-qLyoObcjzrkpNcoJjXquUePXfL1dXjHtuv+yX0zZ0Q4kG5yvVqd620+tSh7WbRoHkjpXhFBfLwvGhcWB2I0Lpw==
 
-"@react-native-menu/menu@^0.8.0":
-  version "0.8.0"
-  resolved "https://registry.yarnpkg.com/@react-native-menu/menu/-/menu-0.8.0.tgz#dbf227c2081e5ffd3d2073ee68ecc84cf8639727"
-  integrity sha512-kxiT6ySZsDbBvNWovrKVAfs4AQvAytKIf0f8KQLkVO6eNYMUmONBQPzi6onTTbVujXtZHambo7qr/PcedaR8Tg==
+"@react-native-menu/menu@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@react-native-menu/menu/-/menu-1.1.0.tgz#e89c0850f7e5aa4c671c44a9c10edafadb23c35a"
+  integrity sha512-vf9zp0M4nbAFnSKz5NJYKUPM5UzXWmLyGcjtuPaKWYxxloz9C0Pp6XdZRJnoOSlfRShE8NksX3bVY8W4wGnlCQ==
 
 "@react-native-picker/picker@2.6.1":
   version "2.6.1"
@@ -12063,17 +12063,17 @@ expo-build-properties@^0.12.1:
     ajv "^8.11.0"
     semver "^7.6.0"
 
-expo-camera@~14.1.3:
-  version "14.1.3"
-  resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-14.1.3.tgz#c3b36c7ed28613e7423b6c4df192549f4f9ee0dd"
-  integrity sha512-JodpVjOY8JDuSp/RkphS8Bxqaj/gwg0h0UbQB9MLr1LoxbL9brvJt7IZnmTf7+ON8jRKUx9E5o/F02pRNbmSbQ==
+expo-camera@~15.0.9:
+  version "15.0.9"
+  resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-15.0.9.tgz#a6a175638bdd9914aca061c6090001452329fcea"
+  integrity sha512-xH+y8gA/3rNLostIw+z4kDGA+AYzsI9+QYb7G1uCFyxr3SxUGhapz+oMBFDU++vmyo9G7Ax0n52nghqIrNBJxQ==
   dependencies:
     invariant "^2.2.4"
 
-expo-clipboard@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/expo-clipboard/-/expo-clipboard-5.0.1.tgz#a62a021a9444740d180d60f915cca8242a323716"
-  integrity sha512-JH853QJPr5W3h87If3aDTnMK+ESSIrwzU2TdfZrqZttVDY2pMIf/w37mVHHNYodXM4ATHXadtOkjKbAa0DWwUg==
+expo-clipboard@^6.0.3:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/expo-clipboard/-/expo-clipboard-6.0.3.tgz#dfea74d4a004dce59ecefd063d6fb9f1c356a03f"
+  integrity sha512-RIKDsuHkYfaspifbFpVC8sBVFKR05L7Pj7mU2/XkbrW9m01OBNvdpGraXEMsTFCx97xMGsZpEw9pPquL4j4xVg==
 
 expo-constants@^13.0.2:
   version "13.2.4"
@@ -12083,14 +12083,7 @@ expo-constants@^13.0.2:
     "@expo/config" "~7.0.0"
     uuid "^3.3.2"
 
-expo-constants@~15.4.6:
-  version "15.4.6"
-  resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-15.4.6.tgz#d4e9b21b70c5602457962700f2e90a75356b487b"
-  integrity sha512-vizE69dww2Vl0PTWWvDmK0Jo2/J+WzdcMZlA05YEnEYofQuhKxTVsiuipf79mSOmFavt4UQYC1UnzptzKyfmiQ==
-  dependencies:
-    "@expo/config" "~8.5.0"
-
-expo-constants@~16.0.0:
+expo-constants@~16.0.0, expo-constants@~16.0.1:
   version "16.0.1"
   resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-16.0.1.tgz#1285e29c85513c6e88e118289e2baab72596d3f7"
   integrity sha512-s6aTHtglp926EsugWtxN7KnpSsE9FCEjb7CgEjQQ78Gpu4btj4wB+IXot2tlqNwqv+x7xFe5veoPGfJDGF/kVg==
@@ -12139,10 +12132,10 @@ expo-device@~4.1.1:
   dependencies:
     ua-parser-js "^0.7.19"
 
-expo-device@~5.9.3:
-  version "5.9.4"
-  resolved "https://registry.yarnpkg.com/expo-device/-/expo-device-5.9.4.tgz#7dc8ba3695e1c0891bbc840a255faac479310c08"
-  integrity sha512-nleq3GghLWWJrj4YH8HiCumnTF/gy4zRd3jedCkO8lMKQg6R1yn3v0ch8NtgPDci749FkNzOtXx/vmFImQalwg==
+expo-device@~6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/expo-device/-/expo-device-6.0.2.tgz#9bc3eccd16509c2819c225cc2ca8f7c3e3bdd11e"
+  integrity sha512-sCt91CuTmAuMXX4SlFOn4lIos2UIr8vb0jDstDDZXys6kErcj0uynC7bQAMreU5uRUTKMAl4MAMpKt9ufCXPBw==
   dependencies:
     ua-parser-js "^0.7.33"
 
@@ -12151,12 +12144,7 @@ expo-eas-client@~0.12.0:
   resolved "https://registry.yarnpkg.com/expo-eas-client/-/expo-eas-client-0.12.0.tgz#e8b6f7d33873e6f630f37f7bfc41646ae7b0b2a9"
   integrity sha512-Jkww9Cwpv0z7DdLYiRX0r4fqBEcI9cKqTn7cHx63S09JaZ2rcwEE4zYHgrXwjahO+tU2VW8zqH+AJl6RhhW4zA==
 
-expo-file-system@^16.0.9:
-  version "16.0.9"
-  resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-16.0.9.tgz#cbd6c4b228b60a6b6c71fd1b91fe57299fb24da7"
-  integrity sha512-3gRPvKVv7/Y7AdD9eHMIdfg5YbUn2zbwKofjsloTI5sEC57SLUFJtbLvUCz9Pk63DaSQ7WIE1JM0EASyvuPbuw==
-
-expo-file-system@~17.0.1:
+expo-file-system@^17.0.1, expo-file-system@~17.0.1:
   version "17.0.1"
   resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-17.0.1.tgz#b9f8af8c1c06ec71d96fd7a0d2567fa9e1c88f15"
   integrity sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw==
@@ -12168,27 +12156,27 @@ expo-font@~12.0.5:
   dependencies:
     fontfaceobserver "^2.1.0"
 
-expo-haptics@^12.8.1:
-  version "12.8.1"
-  resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-12.8.1.tgz#42b996763be33d661bd33bbc3b3958c3f2734b9d"
-  integrity sha512-ntLsHkfle8K8w9MW8pZEw92ZN3sguaGUSSIxv30fPKNeQFu7Cq/h47Qv3tONv2MO3wU48N9FbKnant6XlfptpA==
+expo-haptics@^13.0.1:
+  version "13.0.1"
+  resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-13.0.1.tgz#35679c7fde4ae1c21ae3bc2d2cb34c266049dc2c"
+  integrity sha512-qG0EOLDE4bROVT3DtUSyV9g3iB3YFu9j3711X7SNNEnBDXc+2/p3wGDPTnJvPW0ao6HG3/McAOrBQA5hVSdWng==
 
 expo-image-loader@~4.7.0:
   version "4.7.0"
   resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.7.0.tgz#d403106822de80bda12d644c82b7a3b7983c0f0b"
   integrity sha512-cx+MxxsAMGl9AiWnQUzrkJMJH4eNOGlu7XkLGnAXSJrRoIiciGaKqzeaD326IyCTV+Z1fXvIliSgNW+DscvD8g==
 
-expo-image-manipulator@^12.0.3:
-  version "12.0.3"
-  resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-12.0.3.tgz#797fda98f606a65c6be9d2c0f53256f3fb3f798c"
-  integrity sha512-gosW32roHbXRKPiBVbQDFpxaZf8sjOJ9aaqbe085Qfcenvvr1lNFMx9M9BFYhAoKd23oEWlyvNHDnAayV4gAFA==
+expo-image-manipulator@^12.0.5:
+  version "12.0.5"
+  resolved "https://registry.yarnpkg.com/expo-image-manipulator/-/expo-image-manipulator-12.0.5.tgz#e3dd2810d27025705f73523cd4ba47b0d091a662"
+  integrity sha512-zJ8yINjckYw/yfoSuICt4yJ9xr112+W9e5QVXwK3nCAHr7sv45RQ5sxte0qppf594TPl+UoV6Tjim7WpoKipRQ==
   dependencies:
     expo-image-loader "~4.7.0"
 
-expo-image-picker@~15.0.4:
-  version "15.0.4"
-  resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-15.0.4.tgz#b01121b26c88ee14bf49133160e408c1e7972b4d"
-  integrity sha512-Jo78o3DQfqpYC4fsnayxTEVGDFSbaNMwx5gQ2PPlEYMK5AmD5qexQjxhlxM1mZ0e1xkJKJfN7XEdcf53jW9vIg==
+expo-image-picker@~15.0.5:
+  version "15.0.5"
+  resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-15.0.5.tgz#8a3d4c3ecdb5bcf58f09e024597dd69edf7baa9c"
+  integrity sha512-Qqp16udsadx/YpNcNaWzfbmO0tbMxyX9bS1aFiDVC+Zffh8LY8S4HJJcnWqSC2TeuAl+9SxUwTloJagvPeMBBw==
   dependencies:
     expo-image-loader "~4.7.0"
 
@@ -12268,10 +12256,10 @@ expo-navigation-bar@~3.0.4:
     "@react-native/normalize-colors" "~0.74.83"
     debug "^4.3.2"
 
-expo-notifications@~0.28.1:
-  version "0.28.1"
-  resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.28.1.tgz#9152cb17100ce72b66f2bf642fb097c3ae2d2019"
-  integrity sha512-qBVcq3lc+FIvcYt/8M+JB1c60g0hVuyGY4MVGTY56ciU6nMOCiBiz4XPc3DeiZA16jVtfriooWA26wqBkQfkHg==
+expo-notifications@~0.28.3:
+  version "0.28.3"
+  resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.28.3.tgz#9076c2bd69c3de3338a2e2161c8bd5f18cb440cb"
+  integrity sha512-Xaj82eQUJzJXa8+giZr708ih86GGtkGS8N01epoiDkTKC8Z9783UJ8Pf8+PSFSfHsY3Sd8TJpQrD9n7QnGHwGQ==
   dependencies:
     "@expo/image-utils" "^0.5.0"
     "@ide/backoff" "^1.0.0"
@@ -12334,15 +12322,15 @@ expo-updates-interface@~0.16.2:
   resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-0.16.2.tgz#ad1ac2ca8ee5a8cc84052ea3c18a11da64da569b"
   integrity sha512-929XBU70q5ELxkKADj1xL0UIm3HvhYhNAOZv5DSk7rrKvLo7QDdPyl+JVnwZm9LrkNbH4wuE2rLoKu1KMgZ+9A==
 
-expo-updates@~0.25.11:
-  version "0.25.11"
-  resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.25.11.tgz#a477139cfd5f67c7b5fdf41eba3f6dad471eeb14"
-  integrity sha512-ZO+e6bLsEBMz+JdEOlJXGf+3w606si7zKKEEzkwDQWJWP20W0WQAG+MDYgTEgxQboc+jTC+T0MvvOvkVb8cFIQ==
+expo-updates@~0.25.14:
+  version "0.25.14"
+  resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.25.14.tgz#d0838780d0fa91558df72ca0f8b25b02466da11c"
+  integrity sha512-taYa6Q/882MxPaMZEoU0Tr4Ivtq0B0XUmCgj7GcKv0pDDhB7vuQ4uxXhWYn5udX+nJM0KH+dtEVFNVyeucVArg==
   dependencies:
     "@expo/code-signing-certificates" "0.0.5"
-    "@expo/config" "~9.0.0-beta.0"
-    "@expo/config-plugins" "~8.0.0-beta.0"
-    "@expo/fingerprint" "^0.7.0"
+    "@expo/config" "~9.0.0"
+    "@expo/config-plugins" "~8.0.0"
+    "@expo/fingerprint" "^0.8.0"
     "@expo/spawn-async" "^1.7.2"
     arg "4.1.0"
     chalk "^4.1.2"