diff --git a/.dockerignore b/.dockerignore
index 7260a52dd..f3201d93d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,45 +1,46 @@
.dockerignore
.DS_Store
.git
.eslintcache
.vscode
!.vscode/extensions.json
node_modules
landing/node_modules
landing/dist
lib/node_modules
native
!native/package.json
!native/.flowconfig
!native/ios/Podfile
!native/cpp/CommonCpp/grpc
!native/expo-modules/android-lifecycle/package.json
!native/expo-modules/aes-crypto/package.json
+!native/expo-modules/thumbhash/package.json
web/node_modules
web/dist
keyserver/dist
keyserver/node_modules
keyserver/facts
keyserver/secrets
keyserver/*.env
keyserver/*.env.*
services/tunnelbroker/Dockerfile
services/identity/target
services/identity/Dockerfile
services/backup/Dockerfile
services/blob/target
services/blob/Dockerfile
services/electron-update-server/node_modules
native/cpp/**/build
services/*/build
services/build
services/lib/src/build
shared/protos/build
diff --git a/keyserver/Dockerfile b/keyserver/Dockerfile
index a93299b92..cbfd89a8e 100644
--- a/keyserver/Dockerfile
+++ b/keyserver/Dockerfile
@@ -1,205 +1,207 @@
FROM node:16.18.0-bullseye
#-------------------------------------------------------------------------------
# STEP 0: SET UP USER
# Set up Linux user and group for the container
#-------------------------------------------------------------------------------
# We use bind mounts for our backups folder, which means Docker on Linux will
# blindly match the UID/GID for the backups folder on the container with the
# host. In order to make sure the container is able to create backups with the
# right UID/GID, we need to do two things:
# 1. Make sure that the user that runs the Docker container on the host has
# permissions to write to the backups folder on the host. We rely on the host
# to configure this properly
# 2. Make sure we're running this container with the same UID/GID that the host
# is using, so the UID/GID show up correctly on both sides of the bind mount
# To handle 2 correctly, we have the host pass the UID/GID with which they're
# running the container. Our approach is based on this one:
# https://github.com/mhart/alpine-node/issues/48#issuecomment-430902787
ARG HOST_UID
ARG HOST_GID
ARG COMM_JSONCONFIG_secrets_alchemy
ARG COMM_JSONCONFIG_secrets_walletconnect
ARG COMM_JSONCONFIG_secrets_geoip_license
USER root
RUN \
if [ -z "`getent group $HOST_GID`" ]; then \
addgroup --system --gid $HOST_GID comm; \
else \
groupmod --new-name comm `getent group $HOST_GID | cut -d: -f1`; \
fi && \
if [ -z "`getent passwd $HOST_UID`" ]; then \
adduser --system --uid $HOST_UID --ingroup comm --shell /bin/bash comm; \
else \
usermod --login comm --gid $HOST_GID --home /home/comm --move-home \
`getent passwd $HOST_UID | cut -d: -f1`; \
fi
#-------------------------------------------------------------------------------
# STEP 1: INSTALL PREREQS
# Install prereqs first so we don't have to reinstall them if anything changes
#-------------------------------------------------------------------------------
# We need to add the MariaDB repo to apt in order to install mariadb-client
RUN wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup \
&& chmod +x mariadb_repo_setup \
&& ./mariadb_repo_setup \
&& rm mariadb_repo_setup
# We need rsync in the prod-build yarn script
# We need mariadb-client so we can use mysqldump for backups
# We need cmake to install protobuf (prereq for rust-node-addon)
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
rsync \
mariadb-client \
cmake \
&& rm -rf /var/lib/apt/lists/*
# Install protobuf manually to ensure that we have the correct version
COPY scripts/install_protobuf.sh scripts/
RUN cd scripts && ./install_protobuf.sh
#-------------------------------------------------------------------------------
# STEP 2: DEVOLVE PRIVILEGES
# Create another user to run the rest of the commands
#-------------------------------------------------------------------------------
USER comm
WORKDIR /home/comm/app
#-------------------------------------------------------------------------------
# STEP 3: SET UP MYSQL BACKUPS
# Prepare the system to properly handle mysqldump backups
#-------------------------------------------------------------------------------
# Prepare the directory that will hold the backups
RUN mkdir /home/comm/backups
#-------------------------------------------------------------------------------
# STEP 4: SET UP CARGO (RUST PACKAGE MANAGER)
# We use Cargo to build pre-compiled Node.js addons in Rust
#-------------------------------------------------------------------------------
# Install Rust and add Cargo's bin directory to the $PATH environment variable
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH /home/comm/.cargo/bin:$PATH
#-------------------------------------------------------------------------------
# STEP 5: SET UP NVM
# We use nvm to make sure we're running the right Node version
#-------------------------------------------------------------------------------
# First we install nvm
ENV NVM_DIR /home/comm/.nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh \
| bash
# Then we use nvm to install the right version of Node. We call this early so
# Docker build caching saves us from re-downloading Node when any file changes
COPY --chown=comm keyserver/.nvmrc keyserver/
COPY --chown=comm keyserver/bash/source-nvm.sh keyserver/bash/
RUN cd keyserver && . bash/source-nvm.sh
#-------------------------------------------------------------------------------
# STEP 6: YARN CLEANINSTALL
# We run yarn cleaninstall before copying most of the files in for build caching
#-------------------------------------------------------------------------------
# Copy in package.json files, yarn.lock files, and relevant installation scripts
COPY --chown=comm package.json yarn.lock postinstall.sh ./
COPY --chown=comm keyserver/package.json keyserver/.flowconfig keyserver/
COPY --chown=comm lib/package.json lib/.flowconfig lib/
COPY --chown=comm web/package.json web/.flowconfig web/
COPY --chown=comm native/package.json native/.flowconfig native/
COPY --chown=comm landing/package.json landing/.flowconfig landing/
COPY --chown=comm desktop/package.json desktop/
COPY --chown=comm desktop/addons/windows-pushnotifications/package.json \
desktop/addons/windows-pushnotifications/
COPY --chown=comm keyserver/addons/rust-node-addon/package.json \
keyserver/addons/rust-node-addon/install_ci_deps.sh \
keyserver/addons/rust-node-addon/postinstall.sh \
keyserver/addons/rust-node-addon/
COPY --chown=comm native/expo-modules/android-lifecycle/package.json \
native/expo-modules/android-lifecycle/
COPY --chown=comm native/expo-modules/aes-crypto/package.json \
native/expo-modules/aes-crypto/
+COPY --chown=comm native/expo-modules/thumbhash/package.json \
+ native/expo-modules/thumbhash/
COPY --chown=comm services/electron-update-server/package.json \
services/electron-update-server/
# Create empty Rust library and copy in Cargo.toml file
RUN cargo init keyserver/addons/rust-node-addon --lib
COPY --chown=comm keyserver/addons/rust-node-addon/Cargo.toml \
keyserver/addons/rust-node-addon/
# Copy in local dependencies of rust-node-addon
COPY --chown=comm shared/comm-opaque shared/comm-opaque/
COPY --chown=comm shared/comm-opaque2 shared/comm-opaque2/
# Copy protobuf files as a dependency for the shared client libraries
COPY --chown=comm shared/protos shared/protos/
# Copy in files needed for patch-package
COPY --chown=comm patches patches/
# Actually run yarn
RUN yarn cleaninstall
#-------------------------------------------------------------------------------
# STEP 7: GEOIP UPDATE
# We update the GeoIP database for mapping from IP address to timezone
#-------------------------------------------------------------------------------
COPY --chown=comm keyserver/bash/docker-update-geoip.sh keyserver/bash/
RUN cd keyserver && bash/docker-update-geoip.sh
#-------------------------------------------------------------------------------
# STEP 8: WEBPACK BUILD
# We do this first so Docker doesn't rebuild when only keyserver files change
#-------------------------------------------------------------------------------
# These are needed for babel-build-comm-config
COPY --chown=comm keyserver/src keyserver/src
COPY --chown=comm keyserver/bash/source-nvm.sh keyserver/bash/source-nvm.sh
COPY --chown=comm keyserver/babel.config.cjs keyserver/babel.config.cjs
COPY --chown=comm lib lib/
COPY --chown=comm landing landing/
RUN yarn workspace landing prod
COPY --chown=comm web web/
RUN yarn workspace web prod
#-------------------------------------------------------------------------------
# STEP 9: COPY IN SOURCE FILES
# We run this later so the above layers are cached if only source files change
#-------------------------------------------------------------------------------
COPY --chown=comm . .
#-------------------------------------------------------------------------------
# STEP 10: BUILD NODE ADDON
# Now that source files have been copied in, build rust-node-addon
#-------------------------------------------------------------------------------
RUN yarn workspace rust-node-addon build
#-------------------------------------------------------------------------------
# STEP 11: RUN BUILD SCRIPTS
# We need to populate keyserver/dist, among other things
#-------------------------------------------------------------------------------
# Babel transpilation of keyserver src
RUN yarn workspace keyserver prod-build
#-------------------------------------------------------------------------------
# STEP 12: RUN THE SERVER
# Actually run the Node.js keyserver using nvm
#-------------------------------------------------------------------------------
EXPOSE 3000
WORKDIR /home/comm/app/keyserver
CMD bash/run-prod.sh
diff --git a/native/expo-modules/thumbhash/android/build.gradle b/native/expo-modules/thumbhash/android/build.gradle
new file mode 100644
index 000000000..98d71e8ff
--- /dev/null
+++ b/native/expo-modules/thumbhash/android/build.gradle
@@ -0,0 +1,92 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'maven-publish'
+
+group = 'app.comm.android.thumbhash'
+version = '0.0.1'
+
+buildscript {
+ def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
+ if (expoModulesCorePlugin.exists()) {
+ apply from: expoModulesCorePlugin
+ applyKotlinExpoModulesCorePlugin()
+ }
+
+ // Simple helper that allows the root project to override versions declared by this library.
+ ext.safeExtGet = { prop, fallback ->
+ rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
+ }
+
+ // Ensures backward compatibility
+ ext.getKotlinVersion = {
+ if (ext.has("kotlinVersion")) {
+ ext.kotlinVersion()
+ } else {
+ ext.safeExtGet("kotlinVersion", "1.6.10")
+ }
+ }
+
+ repositories {
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinVersion()}")
+ }
+}
+
+// Creating sources with comments
+task androidSourcesJar(type: Jar) {
+ classifier = 'sources'
+ from android.sourceSets.main.java.srcDirs
+}
+
+afterEvaluate {
+ publishing {
+ publications {
+ release(MavenPublication) {
+ from components.release
+ // Add additional sourcesJar to artifacts
+ artifact(androidSourcesJar)
+ }
+ }
+ repositories {
+ maven {
+ url = mavenLocal().url
+ }
+ }
+ }
+}
+
+android {
+ compileSdkVersion safeExtGet("compileSdkVersion", 33)
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_11.majorVersion
+ }
+
+ defaultConfig {
+ minSdkVersion safeExtGet("minSdkVersion", 21)
+ targetSdkVersion safeExtGet("targetSdkVersion", 33)
+ versionCode 1
+ versionName "0.1.0"
+ }
+ lintOptions {
+ abortOnError false
+ }
+}
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ implementation project(':expo-modules-core')
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
+ implementation 'com.facebook.react:react-native:+'
+}
diff --git a/native/expo-modules/thumbhash/android/src/main/AndroidManifest.xml b/native/expo-modules/thumbhash/android/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..671e9f220
--- /dev/null
+++ b/native/expo-modules/thumbhash/android/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/native/expo-modules/thumbhash/android/src/main/java/app/comm/android/thumbhash/ThumbhashModule.kt b/native/expo-modules/thumbhash/android/src/main/java/app/comm/android/thumbhash/ThumbhashModule.kt
new file mode 100644
index 000000000..d7547799a
--- /dev/null
+++ b/native/expo-modules/thumbhash/android/src/main/java/app/comm/android/thumbhash/ThumbhashModule.kt
@@ -0,0 +1,14 @@
+package app.comm.android.thumbhash
+
+import expo.modules.kotlin.modules.Module
+import expo.modules.kotlin.modules.ModuleDefinition
+
+class ThumbhashModule : Module() {
+ override fun definition() = ModuleDefinition {
+ Name("Thumbhash")
+
+ AsyncFunction("generateThumbHash") {
+ "unimplemented"
+ }
+ }
+}
diff --git a/native/expo-modules/thumbhash/expo-module.config.json b/native/expo-modules/thumbhash/expo-module.config.json
new file mode 100644
index 000000000..d69cd4a80
--- /dev/null
+++ b/native/expo-modules/thumbhash/expo-module.config.json
@@ -0,0 +1,9 @@
+{
+ "platforms": ["ios", "android"],
+ "ios": {
+ "modules": ["ThumbhashModule"]
+ },
+ "android": {
+ "modules": ["app.comm.android.thumbhash.ThumbhashModule"]
+ }
+}
diff --git a/native/expo-modules/thumbhash/ios/Thumbhash.podspec b/native/expo-modules/thumbhash/ios/Thumbhash.podspec
new file mode 100644
index 000000000..2d2b5bed9
--- /dev/null
+++ b/native/expo-modules/thumbhash/ios/Thumbhash.podspec
@@ -0,0 +1,27 @@
+require 'json'
+
+package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
+
+Pod::Spec.new do |s|
+ s.name = 'Thumbhash'
+ s.version = package['version']
+ s.summary = package['description']
+ s.description = package['description']
+ s.license = package['license']
+ s.author = 'Comm'
+ s.homepage = 'https://comm.app'
+ s.platform = :ios, '13.0'
+ s.swift_version = '5.4'
+ s.source = { git: 'https://github.com/CommE2E/comm' }
+ s.static_framework = true
+
+ s.dependency 'ExpoModulesCore'
+
+ # Swift/Objective-C compatibility
+ s.pod_target_xcconfig = {
+ 'DEFINES_MODULE' => 'YES',
+ 'SWIFT_COMPILATION_MODE' => 'wholemodule'
+ }
+
+ s.source_files = "**/*.{h,m,swift}"
+end
diff --git a/native/expo-modules/thumbhash/ios/ThumbhashModule.swift b/native/expo-modules/thumbhash/ios/ThumbhashModule.swift
new file mode 100644
index 000000000..8e3025a10
--- /dev/null
+++ b/native/expo-modules/thumbhash/ios/ThumbhashModule.swift
@@ -0,0 +1,11 @@
+import ExpoModulesCore
+
+public class ThumbhashModule: Module {
+ public func definition() -> ModuleDefinition {
+ Name("Thumbhash")
+
+ AsyncFunction("generateThumbHash") { () -> String in
+ "unimplemented"
+ }
+ }
+}
diff --git a/native/expo-modules/thumbhash/package.json b/native/expo-modules/thumbhash/package.json
new file mode 100644
index 000000000..4e025b5bd
--- /dev/null
+++ b/native/expo-modules/thumbhash/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@commapp/thumbhash",
+ "version": "0.0.1",
+ "private": true,
+ "license": "BSD-3-Clause",
+ "description": "Thumbhash generator module",
+ "dependencies": {},
+ "devDependencies": {
+ "expo-module-scripts": "^3.0.3",
+ "expo-modules-core": "1.1.1"
+ },
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*",
+ "react-native": "*"
+ }
+}
diff --git a/native/ios/Podfile.lock b/native/ios/Podfile.lock
index 551083399..75fd3a330 100644
--- a/native/ios/Podfile.lock
+++ b/native/ios/Podfile.lock
@@ -1,941 +1,947 @@
PODS:
- AESCrypto (0.0.1):
- ExpoModulesCore
- boost (1.76.0)
- DoubleConversion (1.1.6)
- DVAssetLoaderDelegate (0.3.3)
- EXApplication (5.1.1):
- ExpoModulesCore
- EXConstants (14.0.2):
- ExpoModulesCore
- EXFileSystem (15.1.1):
- ExpoModulesCore
- EXFont (11.0.1):
- ExpoModulesCore
- EXImageLoader (4.0.0):
- ExpoModulesCore
- React-Core
- EXJSONUtils (0.4.0)
- EXManifests (0.4.0):
- EXJSONUtils
- EXMediaLibrary (15.0.0):
- ExpoModulesCore
- React-Core
- Expo (47.0.14):
- ExpoModulesCore
- expo-dev-client (2.0.1):
- EXManifests
- expo-dev-launcher
- expo-dev-menu
- expo-dev-menu-interface
- EXUpdatesInterface
- expo-dev-launcher (2.0.2):
- EXManifests
- expo-dev-launcher/Main (= 2.0.2)
- expo-dev-menu
- expo-dev-menu-interface
- ExpoModulesCore
- EXUpdatesInterface
- React-Core
- expo-dev-launcher/Main (2.0.2):
- EXManifests
- expo-dev-launcher/Unsafe
- expo-dev-menu
- expo-dev-menu-interface
- ExpoModulesCore
- EXUpdatesInterface
- React-Core
- expo-dev-launcher/Unsafe (2.0.2):
- EXManifests
- expo-dev-menu
- expo-dev-menu-interface
- ExpoModulesCore
- EXUpdatesInterface
- React-Core
- expo-dev-menu (2.0.2):
- expo-dev-menu/Main (= 2.0.2)
- expo-dev-menu-interface (1.0.0)
- expo-dev-menu/GestureHandler (2.0.2)
- expo-dev-menu/Main (2.0.2):
- EXManifests
- expo-dev-menu-interface
- expo-dev-menu/Vendored
- ExpoModulesCore
- React-Core
- expo-dev-menu/Reanimated (2.0.2):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
- glog
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-callinvoker
- React-Core
- React-Core/DevSupport
- React-Core/RCTWebSocket
- React-CoreModules
- React-cxxreact
- React-jsi
- React-jsiexecutor
- React-jsinspector
- React-RCTActionSheet
- React-RCTAnimation
- React-RCTBlob
- React-RCTImage
- React-RCTLinking
- React-RCTNetwork
- React-RCTSettings
- React-RCTText
- React-RCTVibration
- ReactCommon/turbomodule/core
- Yoga
- expo-dev-menu/SafeAreaView (2.0.2)
- expo-dev-menu/Vendored (2.0.2):
- expo-dev-menu/GestureHandler
- expo-dev-menu/Reanimated
- expo-dev-menu/SafeAreaView
- ExpoHaptics (12.0.1):
- ExpoModulesCore
- ExpoImage (1.2.2):
- ExpoModulesCore
- SDWebImage (~> 5.15.0)
- SDWebImageAVIFCoder (~> 0.9.4)
- SDWebImageSVGCoder (~> 1.6.1)
- SDWebImageWebPCoder (~> 0.9.1)
- ExpoImageManipulator (11.0.0):
- EXImageLoader
- ExpoModulesCore
- ExpoImagePicker (14.0.2):
- ExpoModulesCore
- ExpoKeepAwake (11.0.1):
- ExpoModulesCore
- ExpoModulesCore (1.1.1):
- React-Core
- ReactCommon/turbomodule/core
- EXSecureStore (12.0.0):
- ExpoModulesCore
- EXSplashScreen (0.17.5):
- ExpoModulesCore
- React-Core
- EXUpdatesInterface (0.8.1)
- FBLazyVector (0.70.8)
- FBReactNativeSpec (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.8)
- RCTTypeSafety (= 0.70.8)
- React-Core (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.70.8)
- libaom (2.0.2):
- libvmaf
- libavif (0.10.1):
- libavif/libaom (= 0.10.1)
- libavif/core (0.10.1)
- libavif/libaom (0.10.1):
- libaom (>= 2.0.0)
- libavif/core
- libevent (2.1.12)
- libvmaf (2.2.0)
- libwebp (1.2.4):
- libwebp/demux (= 1.2.4)
- libwebp/mux (= 1.2.4)
- libwebp/webp (= 1.2.4)
- libwebp/demux (1.2.4):
- libwebp/webp
- libwebp/mux (1.2.4):
- libwebp/demux
- libwebp/webp (1.2.4)
- lottie-ios (3.4.4)
- lottie-react-native (5.1.4):
- lottie-ios (~> 3.4.0)
- React-Core
- mobile-ffmpeg-min (4.3.1.LTS)
- OLMKit (3.2.14):
- OLMKit/olmc (= 3.2.14)
- OLMKit/olmcpp (= 3.2.14)
- OLMKit/olmc (3.2.14)
- OLMKit/olmcpp (3.2.14)
- OpenSSL-Universal (1.1.1900)
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Default (= 2021.07.22.00)
- RCT-Folly/Default (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Futures (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- libevent
- RCTRequired (0.70.8)
- RCTTypeSafety (0.70.8):
- FBLazyVector (= 0.70.8)
- RCTRequired (= 0.70.8)
- React-Core (= 0.70.8)
- React (0.70.8):
- React-Core (= 0.70.8)
- React-Core/DevSupport (= 0.70.8)
- React-Core/RCTWebSocket (= 0.70.8)
- React-RCTActionSheet (= 0.70.8)
- React-RCTAnimation (= 0.70.8)
- React-RCTBlob (= 0.70.8)
- React-RCTImage (= 0.70.8)
- React-RCTLinking (= 0.70.8)
- React-RCTNetwork (= 0.70.8)
- React-RCTSettings (= 0.70.8)
- React-RCTText (= 0.70.8)
- React-RCTVibration (= 0.70.8)
- React-bridging (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.70.8)
- React-callinvoker (0.70.8)
- React-Codegen (0.70.8):
- FBReactNativeSpec (= 0.70.8)
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.8)
- RCTTypeSafety (= 0.70.8)
- React-Core (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-Core (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.8)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/CoreModulesHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/Default (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/DevSupport (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.8)
- React-Core/RCTWebSocket (= 0.70.8)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-jsinspector (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTActionSheetHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTAnimationHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTBlobHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTImageHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTLinkingHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTNetworkHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTSettingsHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTTextHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTVibrationHeaders (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-Core/RCTWebSocket (0.70.8):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.8)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-perflogger (= 0.70.8)
- Yoga
- React-CoreModules (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.8)
- React-Codegen (= 0.70.8)
- React-Core/CoreModulesHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- React-RCTImage (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-cxxreact (0.70.8):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsinspector (= 0.70.8)
- React-logger (= 0.70.8)
- React-perflogger (= 0.70.8)
- React-runtimeexecutor (= 0.70.8)
- React-hermes (0.70.8):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-jsiexecutor (= 0.70.8)
- React-jsinspector (= 0.70.8)
- React-perflogger (= 0.70.8)
- React-jsi (0.70.8):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-jsi/Default (= 0.70.8)
- React-jsi/Default (0.70.8):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-jsiexecutor (0.70.8):
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-perflogger (= 0.70.8)
- React-jsinspector (0.70.8)
- React-logger (0.70.8):
- glog
- react-native-background-upload (6.6.0):
- React
- react-native-camera (3.31.0):
- React
- react-native-camera/RCT (= 3.31.0)
- react-native-camera/RN (= 3.31.0)
- react-native-camera/RCT (3.31.0):
- React
- react-native-camera/RN (3.31.0):
- React
- react-native-ffmpeg/min-lts (0.4.4):
- mobile-ffmpeg-min (= 4.3.1.LTS)
- React
- react-native-in-app-message (1.0.2):
- React
- react-native-netinfo (9.3.7):
- React-Core
- react-native-orientation-locker (1.5.0):
- React-Core
- react-native-pager-view (6.0.1):
- React-Core
- react-native-safe-area-context (4.4.1):
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-Core
- ReactCommon/turbomodule/core
- react-native-video/Video (5.2.1):
- React-Core
- react-native-video/VideoCaching (5.2.1):
- DVAssetLoaderDelegate (~> 0.3.1)
- React-Core
- react-native-video/Video
- SPTPersistentCache (~> 1.1.0)
- react-native-webview (11.23.0):
- React-Core
- React-perflogger (0.70.8)
- React-RCTActionSheet (0.70.8):
- React-Core/RCTActionSheetHeaders (= 0.70.8)
- React-RCTAnimation (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.8)
- React-Codegen (= 0.70.8)
- React-Core/RCTAnimationHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTBlob (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.8)
- React-Core/RCTBlobHeaders (= 0.70.8)
- React-Core/RCTWebSocket (= 0.70.8)
- React-jsi (= 0.70.8)
- React-RCTNetwork (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTImage (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.8)
- React-Codegen (= 0.70.8)
- React-Core/RCTImageHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- React-RCTNetwork (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTLinking (0.70.8):
- React-Codegen (= 0.70.8)
- React-Core/RCTLinkingHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTNetwork (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.8)
- React-Codegen (= 0.70.8)
- React-Core/RCTNetworkHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTSettings (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.8)
- React-Codegen (= 0.70.8)
- React-Core/RCTSettingsHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-RCTText (0.70.8):
- React-Core/RCTTextHeaders (= 0.70.8)
- React-RCTVibration (0.70.8):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.8)
- React-Core/RCTVibrationHeaders (= 0.70.8)
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (= 0.70.8)
- React-runtimeexecutor (0.70.8):
- React-jsi (= 0.70.8)
- ReactCommon/turbomodule/core (0.70.8):
- DoubleConversion
- glog
- RCT-Folly (= 2021.07.22.00)
- React-bridging (= 0.70.8)
- React-callinvoker (= 0.70.8)
- React-Core (= 0.70.8)
- React-cxxreact (= 0.70.8)
- React-jsi (= 0.70.8)
- React-logger (= 0.70.8)
- React-perflogger (= 0.70.8)
- ReactNativeART (1.2.0):
- React
- ReactNativeKeyboardInput (6.0.1):
- React
- ReactNativeKeyboardTrackingView (5.7.0):
- React
- RNCAsyncStorage (1.17.10):
- React-Core
- RNCClipboard (1.11.1):
- React-Core
- SDWebImage (~> 5.8)
- RNCMaskedView (0.2.8):
- React-Core
- RNDeviceInfo (10.3.0):
- React-Core
- RNFS (2.20.0):
- React-Core
- RNGestureHandler (2.8.0):
- React-Core
- RNKeychain (8.0.0):
- React-Core
- RNReanimated (2.12.0):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
- glog
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-callinvoker
- React-Core
- React-Core/DevSupport
- React-Core/RCTWebSocket
- React-CoreModules
- React-cxxreact
- React-jsi
- React-jsiexecutor
- React-jsinspector
- React-RCTActionSheet
- React-RCTAnimation
- React-RCTBlob
- React-RCTImage
- React-RCTLinking
- React-RCTNetwork
- React-RCTSettings
- React-RCTText
- ReactCommon/turbomodule/core
- Yoga
- RNScreens (3.18.2):
- React-Core
- React-RCTImage
- RNSVG (12.3.0):
- React-Core
- SDWebImage (5.15.5):
- SDWebImage/Core (= 5.15.5)
- SDWebImage/Core (5.15.5)
- SDWebImageAVIFCoder (0.9.5):
- libavif (>= 0.9.1)
- SDWebImage (~> 5.10)
- SDWebImageSVGCoder (1.6.1):
- SDWebImage/Core (~> 5.6)
- SDWebImageWebPCoder (0.9.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.13)
- SPTPersistentCache (1.1.0)
- SQLCipher-Amalgamation (4.4.3):
- OpenSSL-Universal
- SQLCipher-Amalgamation/standard (= 4.4.3)
- SQLCipher-Amalgamation/common (4.4.3):
- OpenSSL-Universal
- SQLCipher-Amalgamation/standard (4.4.3):
- OpenSSL-Universal
- SQLCipher-Amalgamation/common
+ - Thumbhash (0.0.1):
+ - ExpoModulesCore
- Yoga (1.14.0)
DEPENDENCIES:
- AESCrypto (from `../expo-modules/aes-crypto/ios`)
- boost (from `../../node_modules/react-native/third-party-podspecs/boost.podspec`)
- DoubleConversion (from `../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- EXApplication (from `../../node_modules/expo-application/ios`)
- EXConstants (from `../../node_modules/expo-constants/ios`)
- EXFileSystem (from `../../node_modules/expo-file-system/ios`)
- EXFont (from `../../node_modules/expo-font/ios`)
- EXImageLoader (from `../../node_modules/expo-image-loader/ios`)
- EXJSONUtils (from `../../node_modules/expo-json-utils/ios`)
- EXManifests (from `../../node_modules/expo-manifests/ios`)
- EXMediaLibrary (from `../../node_modules/expo-media-library/ios`)
- Expo (from `../../node_modules/expo`)
- expo-dev-client (from `../../node_modules/expo-dev-client/ios`)
- expo-dev-launcher (from `../../node_modules/expo-dev-launcher`)
- expo-dev-menu (from `../../node_modules/expo-dev-menu`)
- expo-dev-menu-interface (from `../../node_modules/expo-dev-menu-interface/ios`)
- ExpoHaptics (from `../../node_modules/expo-haptics/ios`)
- ExpoImage (from `../../node_modules/expo-image/ios`)
- ExpoImageManipulator (from `../../node_modules/expo-image-manipulator/ios`)
- ExpoImagePicker (from `../../node_modules/expo-image-picker/ios`)
- ExpoKeepAwake (from `../../node_modules/expo-keep-awake/ios`)
- ExpoModulesCore (from `../../node_modules/expo-modules-core`)
- EXSecureStore (from `../../node_modules/expo-secure-store/ios`)
- EXSplashScreen (from `../../node_modules/expo-splash-screen/ios`)
- EXUpdatesInterface (from `../../node_modules/expo-updates-interface/ios`)
- FBLazyVector (from `../../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../../node_modules/react-native/React/FBReactNativeSpec`)
- glog (from `../../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../../node_modules/react-native/sdks/hermes/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- lottie-react-native (from `../node_modules/lottie-react-native`)
- OLMKit (from `../node_modules/olm`)
- RCT-Folly (from `../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../../node_modules/react-native/`)
- React-bridging (from `../../node_modules/react-native/ReactCommon`)
- React-callinvoker (from `../../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`)
- React-Core (from `../../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../../node_modules/react-native/`)
- React-CoreModules (from `../../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../../node_modules/react-native/ReactCommon/cxxreact`)
- React-hermes (from `../../node_modules/react-native/ReactCommon/hermes`)
- React-jsi (from `../../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../../node_modules/react-native/ReactCommon/logger`)
- react-native-background-upload (from `../node_modules/react-native-background-upload`)
- react-native-camera (from `../node_modules/react-native-camera`)
- react-native-ffmpeg/min-lts (from `../node_modules/react-native-ffmpeg`)
- react-native-in-app-message (from `../node_modules/react-native-in-app-message`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`)
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-video/VideoCaching (from `../node_modules/react-native-video`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-perflogger (from `../../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTBlob (from `../../node_modules/react-native/Libraries/Blob`)
- React-RCTImage (from `../../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../../node_modules/react-native/Libraries/LinkingIOS`)
- React-RCTNetwork (from `../../node_modules/react-native/Libraries/Network`)
- React-RCTSettings (from `../../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../../node_modules/react-native/Libraries/Vibration`)
- React-runtimeexecutor (from `../../node_modules/react-native/ReactCommon/runtimeexecutor`)
- ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`)
- "ReactNativeART (from `../node_modules/@react-native-community/art`)"
- ReactNativeKeyboardInput (from `../node_modules/react-native-keyboard-input`)
- ReactNativeKeyboardTrackingView (from `../../node_modules/react-native-keyboard-tracking-view`)
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNKeychain (from `../node_modules/react-native-keychain`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNSVG (from `../node_modules/react-native-svg`)
- "SQLCipher-Amalgamation (from `../../node_modules/@commapp/sqlcipher-amalgamation`)"
+ - Thumbhash (from `../expo-modules/thumbhash/ios`)
- Yoga (from `../../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
trunk:
- DVAssetLoaderDelegate
- fmt
- libaom
- libavif
- libevent
- libvmaf
- libwebp
- lottie-ios
- mobile-ffmpeg-min
- OpenSSL-Universal
- SDWebImage
- SDWebImageAVIFCoder
- SDWebImageSVGCoder
- SDWebImageWebPCoder
- SPTPersistentCache
EXTERNAL SOURCES:
AESCrypto:
:path: "../expo-modules/aes-crypto/ios"
boost:
:podspec: "../../node_modules/react-native/third-party-podspecs/boost.podspec"
DoubleConversion:
:podspec: "../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
EXApplication:
:path: "../../node_modules/expo-application/ios"
EXConstants:
:path: "../../node_modules/expo-constants/ios"
EXFileSystem:
:path: "../../node_modules/expo-file-system/ios"
EXFont:
:path: "../../node_modules/expo-font/ios"
EXImageLoader:
:path: "../../node_modules/expo-image-loader/ios"
EXJSONUtils:
:path: "../../node_modules/expo-json-utils/ios"
EXManifests:
:path: "../../node_modules/expo-manifests/ios"
EXMediaLibrary:
:path: "../../node_modules/expo-media-library/ios"
Expo:
:path: "../../node_modules/expo"
expo-dev-client:
:path: "../../node_modules/expo-dev-client/ios"
expo-dev-launcher:
:path: "../../node_modules/expo-dev-launcher"
expo-dev-menu:
:path: "../../node_modules/expo-dev-menu"
expo-dev-menu-interface:
:path: "../../node_modules/expo-dev-menu-interface/ios"
ExpoHaptics:
:path: "../../node_modules/expo-haptics/ios"
ExpoImage:
:path: "../../node_modules/expo-image/ios"
ExpoImageManipulator:
:path: "../../node_modules/expo-image-manipulator/ios"
ExpoImagePicker:
:path: "../../node_modules/expo-image-picker/ios"
ExpoKeepAwake:
:path: "../../node_modules/expo-keep-awake/ios"
ExpoModulesCore:
:path: "../../node_modules/expo-modules-core"
EXSecureStore:
:path: "../../node_modules/expo-secure-store/ios"
EXSplashScreen:
:path: "../../node_modules/expo-splash-screen/ios"
EXUpdatesInterface:
:path: "../../node_modules/expo-updates-interface/ios"
FBLazyVector:
:path: "../../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
:path: "../../node_modules/react-native/React/FBReactNativeSpec"
glog:
:podspec: "../../node_modules/react-native/third-party-podspecs/glog.podspec"
hermes-engine:
:podspec: "../../node_modules/react-native/sdks/hermes/hermes-engine.podspec"
lottie-react-native:
:path: "../node_modules/lottie-react-native"
OLMKit:
:path: "../node_modules/olm"
RCT-Folly:
:podspec: "../../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTRequired:
:path: "../../node_modules/react-native/Libraries/RCTRequired"
RCTTypeSafety:
:path: "../../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../../node_modules/react-native/"
React-bridging:
:path: "../../node_modules/react-native/ReactCommon"
React-callinvoker:
:path: "../../node_modules/react-native/ReactCommon/callinvoker"
React-Codegen:
:path: build/generated/ios
React-Core:
:path: "../../node_modules/react-native/"
React-CoreModules:
:path: "../../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../../node_modules/react-native/ReactCommon/cxxreact"
React-hermes:
:path: "../../node_modules/react-native/ReactCommon/hermes"
React-jsi:
:path: "../../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
:path: "../../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../../node_modules/react-native/ReactCommon/jsinspector"
React-logger:
:path: "../../node_modules/react-native/ReactCommon/logger"
react-native-background-upload:
:path: "../node_modules/react-native-background-upload"
react-native-camera:
:path: "../node_modules/react-native-camera"
react-native-ffmpeg:
:podspec: "../node_modules/react-native-ffmpeg"
react-native-in-app-message:
:path: "../node_modules/react-native-in-app-message"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-orientation-locker:
:path: "../node_modules/react-native-orientation-locker"
react-native-pager-view:
:path: "../node_modules/react-native-pager-view"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-video:
:podspec: "../node_modules/react-native-video"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-perflogger:
:path: "../../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet:
:path: "../../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
:path: "../../node_modules/react-native/Libraries/NativeAnimation"
React-RCTBlob:
:path: "../../node_modules/react-native/Libraries/Blob"
React-RCTImage:
:path: "../../node_modules/react-native/Libraries/Image"
React-RCTLinking:
:path: "../../node_modules/react-native/Libraries/LinkingIOS"
React-RCTNetwork:
:path: "../../node_modules/react-native/Libraries/Network"
React-RCTSettings:
:path: "../../node_modules/react-native/Libraries/Settings"
React-RCTText:
:path: "../../node_modules/react-native/Libraries/Text"
React-RCTVibration:
:path: "../../node_modules/react-native/Libraries/Vibration"
React-runtimeexecutor:
:path: "../../node_modules/react-native/ReactCommon/runtimeexecutor"
ReactCommon:
:path: "../../node_modules/react-native/ReactCommon"
ReactNativeART:
:path: "../node_modules/@react-native-community/art"
ReactNativeKeyboardInput:
:path: "../node_modules/react-native-keyboard-input"
ReactNativeKeyboardTrackingView:
:path: "../../node_modules/react-native-keyboard-tracking-view"
RNCAsyncStorage:
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-clipboard/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-masked-view/masked-view"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFS:
:path: "../node_modules/react-native-fs"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNKeychain:
:path: "../node_modules/react-native-keychain"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
RNSVG:
:path: "../node_modules/react-native-svg"
SQLCipher-Amalgamation:
:path: "../../node_modules/@commapp/sqlcipher-amalgamation"
+ Thumbhash:
+ :path: "../expo-modules/thumbhash/ios"
Yoga:
:path: "../../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
AESCrypto: 3f397599b6b8e66c3b8a16e09bed17e6ad03482d
boost: a7c83b31436843459a1961bfd74b96033dc77234
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
DVAssetLoaderDelegate: 0caec20e4e08b8560b691131539e9180024d4bce
EXApplication: d8f53a7eee90a870a75656280e8d4b85726ea903
EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415
EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
EXImageLoader: 84b65e6bd9d3345d6fbb3ab936a546c54496a64d
EXJSONUtils: 09aef2c1fba1a116ca8c73a2c8299aac00d96b43
EXManifests: 347f49430b63444579aa013f0ad057d16b8d1cc8
EXMediaLibrary: b1c4f78878e45f6a359aff3a059e1660c41b73ab
Expo: 5f4240506a147162542178989696e56e3dd72924
expo-dev-client: d723d52ccfbe2eb47ee24d1ac0cf5b39001589c2
expo-dev-launcher: 953f564f7d006f1af50b119cacb48cafcad40c73
expo-dev-menu: 73476baf8eb6ab44ede1bc0033074fe21aa50f19
expo-dev-menu-interface: 45581093393dacd51ce5e7f641cf9ed5064a2e3f
ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
ExpoImage: 5129495e9981da259c652e23bd87615980864818
ExpoImageManipulator: 5f3c1ab8dd81de11491b5051bb925abc91fe57e4
ExpoImagePicker: d2a1cea4023008ae2fb0d95f33422b80772cc76e
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
ExpoModulesCore: 485dff3a59b036a33b6050c0a5aea3cf1037fdd1
EXSecureStore: daec0117c922a67c658cb229152a9e252e5c1750
EXSplashScreen: 3e989924f61a8dd07ee4ea584c6ba14be9b51949
EXUpdatesInterface: bffd1ead18f0bab04fa784ca159c115607b8a23c
FBLazyVector: ce6c993e675c5e9684e3b83aa0c346eb116c3ec6
FBReactNativeSpec: 3fddd09ba885a2be54efc49fb2d328f01e18d16e
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
hermes-engine: 0b19f33a9c2ec1dbdede3232606eeb1101db4cec
libaom: 9bb51e0f8f9192245e3ca2a1c9e4375d9cbccc52
libavif: e242998ccec1c83bcba0bbdc256f460ad5077348
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libvmaf: 8d61aabc2f4ed3e6591cf7406fa00a223ec11289
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
lottie-ios: 8f97d3271e155c2d688875c29cd3c74908aef5f8
lottie-react-native: b702fab740cdb952a8e2354713d3beda63ff97b0
mobile-ffmpeg-min: d5d22dcef5c8ec56f771258f1f5be245d914f193
OLMKit: a13e1a20579e88d03971c5821360be24949a1a09
OpenSSL-Universal: 84efb8a29841f2764ac5403e0c4119a28b713346
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
RCTRequired: 35a7977a5a3cb2d3830c3fef7352b7b116115829
RCTTypeSafety: 259790fb8b16c94e57e0d3d1e2479e69a2b93f50
React: 89f0551b8f7a555e38ce016a81c50bc68f1972a8
React-bridging: 2e425b6bc8536206918fa55bf9dd37016f99bb33
React-callinvoker: 1c733126b1e4d95d0d412d95c51cedf06b3b979d
React-Codegen: 41d2ddcd966eac2a5f2698d5cd21e3d741e999bd
React-Core: 3021f04b6b1a2064952e166470a58db671ed65b1
React-CoreModules: f569f295874d0864bfd7a686dad3f828f4e8813a
React-cxxreact: a6c952ae24061777510f7e60b808b673e624009e
React-hermes: be32d1db90d052cc025a38ec2ea4e1a493d33c6a
React-jsi: 3d7bafe69dddd780fb3527b7f939dfcbfd6790b5
React-jsiexecutor: bc8556d76f83a1a9075cdee207aad7c0b7b30a33
React-jsinspector: 5e5497c844f2381e8648ec3a7d0ad25b3f27f23e
React-logger: b277ad8f4473f2506fb30b762b6348534a3de10e
react-native-background-upload: 7c608537f87106c93530a3a19a853afd55466823
react-native-camera: b5c8c7a71feecfdd5b39f0dbbf6b64b957ed55f2
react-native-ffmpeg: f9a60452aaa5d478aac205b248224994f3bde416
react-native-in-app-message: f91de5009620af01456531118264c93e249b83ec
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba
react-native-pager-view: 3051346698a0ba0c4e13e40097cc11b00ee03cca
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
react-native-video: 10f689069cb894d75030190a9bc62d9393e1f997
react-native-webview: e771bc375f789ebfa02a26939a57dbc6fa897336
React-perflogger: e9249a18e055cae96fdf685bf6145cbea62506c8
React-RCTActionSheet: a6d2a544a4605a111ce80fa9319cc870ca3ea778
React-RCTAnimation: 21b776b15aa5451a0b5bcb342fd2f346817c1101
React-RCTBlob: 95f54d45305b4103b29d8b2c1e705b5c3183239a
React-RCTImage: 1b76ab9e3b60313edd85bc3fd3e07c29cec6ab68
React-RCTLinking: 7176da2a80f3056152a51587812d6d0c451b1f7b
React-RCTNetwork: d36f896304e6ef2998f58cd4199a0239bd312318
React-RCTSettings: 004b9a1afb5870f4bcd06521c088e738c1558940
React-RCTText: a2606a79fdb52dd2bde0d7fde7726160fa16b70c
React-RCTVibration: 19d21a3ed620352180800447771f68a101f196e9
React-runtimeexecutor: f795fd426264709901c09432c6ce072f8400147e
ReactCommon: c440e7f15075e81eb29802521c58a1f38b1aa903
ReactNativeART: 78edc68dd4a1e675338cd0cd113319cf3a65f2ab
ReactNativeKeyboardInput: 266ba27a2e9921f5bdc0b4cc30289b2a2f46b157
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca
RNCClipboard: f66930407a30948ffdecf43a2459bcf05aa59804
RNCMaskedView: bc0170f389056201c82a55e242e5d90070e18e5a
RNDeviceInfo: 4701f0bf2a06b34654745053db0ce4cb0c53ada7
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
RNKeychain: 4f63aada75ebafd26f4bc2c670199461eab85d94
RNReanimated: f586bc5fd8ce1b6efadffb875319705939843c3b
RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d
RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
SDWebImageAVIFCoder: d759e21cf4efb640cc97250566aa556ad8bb877c
SDWebImageSVGCoder: 6fc109f9c2a82ab44510fff410b88b1a6c271ee8
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
SPTPersistentCache: df36ea46762d7cf026502bbb86a8b79d0080dff4
SQLCipher-Amalgamation: cbd36045fe7b458b8a442958a01aefdbc44c20f8
+ Thumbhash: 38f05b358a74ff8946820dc5f8330071e931925a
Yoga: d6133108734e69e8c0becc6ba587294b94829687
PODFILE CHECKSUM: 60ed9de6b14a66c6022cd82cafcb04594edd7eaf
COCOAPODS: 1.11.3
diff --git a/native/package.json b/native/package.json
index 26075379b..d9da89e34 100644
--- a/native/package.json
+++ b/native/package.json
@@ -1,132 +1,133 @@
{
"name": "native",
"version": "0.0.1",
"private": true,
"license": "BSD-3-Clause",
"scripts": {
"clean": "yarn clean-commoncpp && yarn clean-android && yarn clean-ios && rm -rf node_modules/ && rm -f ios/.xcode.env.local && (yarn clean-rust || true)",
"clean-commoncpp": "rm -rf cpp/CommonCpp/build && rm -rf cpp/CommonCpp/CryptoTools/build && rm -rf cpp/CommonCpp/DatabaseManagers/build && rm -rf cpp/CommonCpp/NativeModules/build && rm -rf cpp/CommonCpp/Tools/build",
"clean-rust": "cargo clean --manifest-path native_rust_library/Cargo.toml",
"clean-android": "rm -rf android/build android/app/build android/app/.cxx",
"clean-ios": "rm -rf ios/Pods/",
"clean-all": "yarn clean && rm -rf ~/Library/Developer/Xcode/DerivedData/Comm-*; cd android && (./gradlew clean || true)",
"start": "COMM_DEV=1 yarn expo start --dev-client",
"dev": "yarn start",
"test": "yarn jest",
"run-ios": "COMM_DEV=1 yarn expo run:ios",
"run-android": "COMM_DEV=1 yarn expo run:android",
"logfirebase": "adb shell logcat | grep -E -i 'FIRMessagingModule|firebase'",
"redux-devtools": "redux-devtools --port=8043 --open",
"codegen-jsi": "flow && babel codegen/src/ -d codegen/dist/ && node codegen/dist",
"react-native": "PATH=/usr/bin:/bin:\"$PATH\" react-native",
"expo": "PATH=/usr/bin:/bin:\"$PATH\" expo",
"xcodebuild": "cd ios && PATH=/usr/bin:/bin:\"$PATH\" xcodebuild"
},
"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.13.14",
"@babel/node": "^7.8.7",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.12",
"@babel/preset-flow": "^7.9.0",
"@redux-devtools/cli": "^1.0.7",
"babel-jest": "^26.6.3",
"babel-plugin-transform-remove-console": "^6.9.4",
"babel-plugin-transform-remove-strict-mode": "0.0.2",
"flow-bin": "^0.182.0",
"flow-typed": "^3.2.1",
"fs-extra": "^8.1.0",
"googleapis": "^89.0.0",
"internal-ip": "4.3.0",
"jest": "^26.6.3",
"jetifier": "^1.6.4",
"jsonwebtoken": "^9.0.0",
"metro-react-native-babel-preset": "^0.72.3",
"react-devtools": "^4.27.0",
"react-native-codegen": "^0.70.6",
"react-test-renderer": "18.1.0",
"remote-redux-devtools": "git+https://git@github.com/zalmoxisus/remote-redux-devtools.git",
"remotedev": "git+https://git@github.com/zalmoxisus/remotedev.git"
},
"dependencies": {
"@commapp/android-lifecycle": "0.0.1",
"@commapp/aes-crypto": "0.0.1",
"@commapp/sqlcipher-amalgamation": "^4.4.3-a",
+ "@commapp/thumbhash": "0.0.1",
"@ethersproject/shims": "^5.7.0",
"@expo/react-native-action-sheet": "^3.14.0",
"@expo/vector-icons": "^13.0.0",
"@gorhom/bottom-sheet": "^4.4.5",
"@react-native-async-storage/async-storage": "^1.17.10",
"@react-native-clipboard/clipboard": "^1.11.1",
"@react-native-community/art": "^1.2.0",
"@react-native-community/netinfo": "^9.3.7",
"@react-native-masked-view/masked-view": "^0.2.8",
"@react-navigation/bottom-tabs": "^6.4.0",
"@react-navigation/devtools": "^6.0.10",
"@react-navigation/drawer": "^6.5.0",
"@react-navigation/elements": "^1.3.6",
"@react-navigation/material-top-tabs": "^6.3.0",
"@react-navigation/native": "^6.0.13",
"@react-navigation/stack": "^6.3.2",
"base-64": "^0.1.0",
"ethers": "^5.7.2",
"expo": "47.0.14",
"expo-application": "^5.1.1",
"expo-dev-client": "~2.0.1",
"expo-font": "~11.0.1",
"expo-haptics": "~12.0.1",
"expo-image": "^1.2.2",
"expo-image-manipulator": "~11.0.0",
"expo-image-picker": "~14.0.2",
"expo-media-library": "~15.0.0",
"expo-secure-store": "~12.0.0",
"expo-splash-screen": "~0.17.4",
"find-root": "^1.1.0",
"invariant": "^2.2.4",
"lib": "0.0.1",
"lodash": "^4.17.21",
"lottie-react-native": "^5.1.4",
"md5": "^2.2.1",
"olm": "git+https://github.com/CommE2E/olm.git#v0.0.10",
"react": "18.1.0",
"react-native": "^0.70.8",
"react-native-background-upload": "^6.6.0",
"react-native-camera": "^3.31.0",
"react-native-device-info": "^10.3.0",
"react-native-ffmpeg": "^0.4.4",
"react-native-figma-squircle": "^0.1.2",
"react-native-floating-action": "^1.22.0",
"react-native-fs": "^2.20.0",
"react-native-gesture-handler": "^2.8.0",
"react-native-in-app-message": "^1.0.2",
"react-native-keyboard-input": "6.0.1",
"react-native-keychain": "^8.0.0",
"react-native-orientation-locker": "^1.5.0",
"react-native-pager-view": "^6.0.1",
"react-native-progress": "^4.1.2",
"react-native-reanimated": "^2.12.0",
"react-native-safe-area-context": "^4.4.1",
"react-native-screens": "^3.18.2",
"react-native-svg": "^12.3.0",
"react-native-tab-view": "^3.3.0",
"react-native-video": "^5.2.1",
"react-native-webview": "^11.23.0",
"react-redux": "^7.1.1",
"reactotron-react-native": "^5.0.3",
"reactotron-redux": "^3.1.3",
"redux": "^4.0.4",
"redux-persist": "^6.0.0",
"redux-thunk": "^2.2.0",
"reselect": "^4.0.0",
"rn-emoji-keyboard": "^1.2.0",
"shallowequal": "^1.0.2",
"simple-markdown": "^0.7.2",
"tinycolor2": "^1.4.1",
"url": "^0.11.0",
"url-parse-lax": "^3.0.0",
"uuid": "^3.4.0"
},
"jest": {
"preset": "react-native"
}
}
diff --git a/native/utils/thumbhash-module.js b/native/utils/thumbhash-module.js
new file mode 100644
index 000000000..470a9a1e2
--- /dev/null
+++ b/native/utils/thumbhash-module.js
@@ -0,0 +1,18 @@
+// @flow
+
+import { requireNativeModule } from 'expo-modules-core';
+import invariant from 'invariant';
+
+const platformUtilsModule: {
+ +generateThumbHash: (photoURI: string) => Promise,
+} = requireNativeModule('Thumbhash');
+
+async function generateThumbHash(photoURI: string): Promise {
+ invariant(
+ platformUtilsModule.generateThumbHash,
+ 'generateThumbHash() unavailable. Check if Thumbhash expo-module is autolinked',
+ );
+ return await platformUtilsModule.generateThumbHash(photoURI);
+}
+
+export { generateThumbHash };
diff --git a/package.json b/package.json
index 9ec840c80..b0c5d6ec5 100644
--- a/package.json
+++ b/package.json
@@ -1,58 +1,59 @@
{
"private": true,
"license": "BSD-3-Clause",
"workspaces": [
"lib",
"web",
"native",
"keyserver",
"landing",
"desktop",
"keyserver/addons/rust-node-addon",
"native/expo-modules/android-lifecycle",
"native/expo-modules/aes-crypto",
+ "native/expo-modules/thumbhash",
"services/electron-update-server",
"web/opaque-ke-wasm"
],
"scripts": {
"clean": "yarn workspace lib clean && yarn workspace web clean && yarn workspace native clean && yarn workspace keyserver clean && yarn workspace landing clean && yarn workspace desktop clean && yarn workspace rust-node-addon clean && yarn workspace electron-update-server clean && rm -rf node_modules/",
"cleaninstall": "(killall flow || pkill flow || true) && yarn clean && yarn",
"ci-cleaninstall": "yarn cleaninstall --frozen-lockfile --skip-optional --network-timeout 180000",
"eslint": "eslint .",
"eslint:fix": "eslint --fix .",
"clang-format-all": "eval `node scripts/get_clang_paths_cli.js` | xargs clang-format -i",
"rust-pre-commit": "./scripts/rust_pre_commit.sh",
"terraform-pre-commit": "./scripts/terraform_pre_commit.sh",
"prepare": "husky install",
"arcpatch": "git pull --all --tags && arc patch",
"postinstall": "bash ./postinstall.sh",
"flow-all": "yarn workspace lib flow && yarn workspace web flow && yarn workspace landing flow && yarn workspace native flow && yarn workspace keyserver flow && yarn workspace desktop flow && yarn workspace electron-update-server flow",
"jest-all": "yarn workspace lib test && yarn workspace keyserver test && yarn workspace web test && yarn workspace native test"
},
"devDependencies": {
"babel-eslint": "^10.1.0",
"clang-format": "^1.8.0",
"core-js": "^3.6.5",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-flowtype": "^5.4.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^24.2.2",
"eslint-plugin-monorepo": "^0.3.2",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-react-native": "^3.10.0",
"find-up": "^5.0.0",
"flow-mono-cli": "^1.5.0",
"gaxios": "^4.3.2",
"husky": "^7.0.0",
"lint-staged": "^12.1.4",
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.0.0",
"prettier": "^2.8.4"
},
"resolutions": {
"react-native-flipper": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.1.tgz"
}
}