Files
app.zeusln.zeus/fetch-libraries.sh

329 lines
11 KiB
Bash

# All library versions and hashes are defined in fetch-libraries-versions.json
LV="fetch-libraries-versions.json"
jq() { python3 -c "import json; print(json.load(open('$LV'))$1)"; }
EMBEDDED_LND_VERSION=$(jq "['embedded-lnd']['version']")
EMBEDDED_LND_ANDROID_SHA256=$(jq "['embedded-lnd']['androidSha256']")
EMBEDDED_LND_IOS_SHA256=$(jq "['embedded-lnd']['iosSha256']")
LDK_NODE_VERSION=$(jq "['ldk-node']['version']")
LDK_NODE_ANDROID_SHA256=$(jq "['ldk-node']['androidSha256']")
LDK_NODE_IOS_SHA256=$(jq "['ldk-node']['iosSha256']")
CDK_VERSION=$(jq "['cdk']['version']")
CDK_ANDROID_SHA256=$(jq "['cdk']['androidSha256']")
CDK_IOS_SHA256=$(jq "['cdk']['iosSha256']")
RESTORE_VERSION=$(jq "['zeus-cashu-restore']['version']")
RESTORE_ANDROID_SHA256=$(jq "['zeus-cashu-restore']['androidSha256']")
RESTORE_IOS_SHA256=$(jq "['zeus-cashu-restore']['iosSha256']")
EMBEDDED_LND_ANDROID_FILE=Lndmobile.aar
EMBEDDED_LND_IOS_FILE=Lndmobile.xcframework
EMBEDDED_LND_FILE_PATH=https://github.com/ZeusLN/lnd/releases/download/$EMBEDDED_LND_VERSION/
EMBEDDED_LND_ANDROID_LINK=$EMBEDDED_LND_FILE_PATH$EMBEDDED_LND_ANDROID_FILE
EMBEDDED_LND_IOS_LINK=$EMBEDDED_LND_FILE_PATH$EMBEDDED_LND_IOS_FILE.zip
# LDK Node
LDK_NODE_ANDROID_FILE=ldk-node-android-jniLibs.zip
LDK_NODE_ANDROID_LINK=https://github.com/ZeusLN/ldk-node/releases/download/$LDK_NODE_VERSION/$LDK_NODE_ANDROID_FILE
LDK_NODE_IOS_FILE=LDKNodeFFI.xcframework
LDK_NODE_IOS_LINK=https://github.com/ZeusLN/ldk-node/releases/download/$LDK_NODE_VERSION/$LDK_NODE_IOS_FILE.zip
# test that curl and unzip are installed
if ! command -v curl &> /dev/null
then
echo "curl could not be found. Please install it and run the script again."
exit
fi
if ! command -v unzip &> /dev/null
then
echo "unzip could not be found. Please install it and run the script again."
exit
fi
###########
# Android #
###########
if ! echo "$EMBEDDED_LND_ANDROID_SHA256 android/lndmobile/$EMBEDDED_LND_ANDROID_FILE" | sha256sum -c -; then
echo "Android library file missing or checksum failed" >&2
# delete old instance of library file
rm android/lndmobile/$EMBEDDED_LND_ANDROID_FILE
# download Android LND library file
curl -L $EMBEDDED_LND_ANDROID_LINK > android/lndmobile/$EMBEDDED_LND_ANDROID_FILE
# check checksum
if ! echo "$EMBEDDED_LND_ANDROID_SHA256 android/lndmobile/$EMBEDDED_LND_ANDROID_FILE" | sha256sum -c -; then
echo "Android checksum failed" >&2
exit 1
fi
fi
#######
# iOS #
#######
mkdir ios/LndMobileLibZipFile
if ! echo "$EMBEDDED_LND_IOS_SHA256 ios/LndMobileLibZipFile/$EMBEDDED_LND_IOS_FILE.zip" | sha256sum -c -; then
echo "iOS library file missing or checksum failed" >&2
# delete old instance of library file
rm ios/LndMobileLibZipFile/$EMBEDDED_LND_IOS_FILE.zip
# download iOS LND library file
curl -L $EMBEDDED_LND_IOS_LINK > ios/LndMobileLibZipFile/$EMBEDDED_LND_IOS_FILE.zip
# check checksum
if ! echo "$EMBEDDED_LND_IOS_SHA256 ios/LndMobileLibZipFile/$EMBEDDED_LND_IOS_FILE.zip" | sha256sum -c -; then
echo "iOS checksum failed" >&2
exit 1
fi
fi
# delete old instances of library files
rm -rf ios/LncMobile/$EMBEDDED_LND_IOS_FILE
# unzip LND library file
unzip ios/LndMobileLibZipFile/$EMBEDDED_LND_IOS_FILE.zip -d ios/LncMobile
###############
# CashuDevKit #
###############
# Local filename (what we save as)
CDK_ANDROID_FILE=cashudevkit.aar
CDK_IOS_FILE=cdkFFI.xcframework
# Remote filename (what's on GitHub releases)
CDK_ANDROID_REMOTE=cdk-kotlin-$CDK_VERSION.aar
CDK_FILE_PATH=https://github.com/cashubtc/cdk-kotlin/releases/download/v$CDK_VERSION/
CDK_IOS_PATH=https://github.com/cashubtc/cdk-swift/releases/download/v$CDK_VERSION/
CDK_ANDROID_LINK=$CDK_FILE_PATH$CDK_ANDROID_REMOTE
CDK_IOS_LINK=$CDK_IOS_PATH$CDK_IOS_FILE.zip
# Android CDK
mkdir -p android/cdk
NEED_CDK_ANDROID=false
if [ ! -f "android/cdk/$CDK_ANDROID_FILE" ]; then
NEED_CDK_ANDROID=true
elif [ -n "$CDK_ANDROID_SHA256" ]; then
if ! echo "$CDK_ANDROID_SHA256 android/cdk/$CDK_ANDROID_FILE" | sha256sum -c - 2>/dev/null; then
NEED_CDK_ANDROID=true
fi
fi
if [ "$NEED_CDK_ANDROID" = true ]; then
echo "Downloading CDK Android library..." >&2
rm -f android/cdk/$CDK_ANDROID_FILE
curl -L $CDK_ANDROID_LINK > android/cdk/$CDK_ANDROID_FILE
if [ -n "$CDK_ANDROID_SHA256" ]; then
if ! echo "$CDK_ANDROID_SHA256 android/cdk/$CDK_ANDROID_FILE" | sha256sum -c -; then
echo "CDK Android checksum failed" >&2
exit 1
fi
else
echo "CDK Android downloaded (checksum verification skipped)"
echo "SHA256: $(sha256sum android/cdk/$CDK_ANDROID_FILE | cut -d' ' -f1)"
fi
fi
# iOS CDK
mkdir -p ios/CashuDevKitLibZipFile
mkdir -p ios/Cdk
NEED_CDK_IOS=false
if [ ! -f "ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip" ]; then
NEED_CDK_IOS=true
elif [ -n "$CDK_IOS_SHA256" ]; then
if ! echo "$CDK_IOS_SHA256 ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip" | sha256sum -c - 2>/dev/null; then
NEED_CDK_IOS=true
fi
fi
if [ "$NEED_CDK_IOS" = true ]; then
echo "Downloading CDK iOS library..." >&2
rm -f ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip
curl -L $CDK_IOS_LINK > ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip
if [ -n "$CDK_IOS_SHA256" ]; then
if ! echo "$CDK_IOS_SHA256 ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip" | sha256sum -c -; then
echo "CDK iOS checksum failed" >&2
exit 1
fi
else
echo "CDK iOS downloaded (checksum verification skipped)"
echo "SHA256: $(sha256sum ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip | cut -d' ' -f1)"
fi
fi
# Extract to ios/Cdk directory (used by Podfile)
rm -rf ios/Cdk/$CDK_IOS_FILE
unzip ios/CashuDevKitLibZipFile/$CDK_IOS_FILE.zip -d ios/Cdk
echo "CashuDevKit iOS framework installed to ios/Cdk/$CDK_IOS_FILE"
# Download matching Swift bindings from cdk-swift repo
CDK_SWIFT_BINDINGS_URL="https://raw.githubusercontent.com/cashubtc/cdk-swift/v$CDK_VERSION/Sources/CashuDevKit/CashuDevKit.swift"
mkdir -p ios/CashuDevKit
echo "Downloading CDK Swift bindings..." >&2
curl -L "$CDK_SWIFT_BINDINGS_URL" > ios/CashuDevKit/CashuDevKit.swift
echo "CashuDevKit Swift bindings updated to v$CDK_VERSION"
######################
# Zeus Cashu Restore #
######################
RESTORE_ANDROID_FILE=zeus-cashu-restore.aar
RESTORE_IOS_FILE=zeusRestoreFFI.xcframework
RESTORE_PATH=https://github.com/ZeusLN/zeus-cashu-restore/releases/download/v$RESTORE_VERSION/
RESTORE_ANDROID_LINK=$RESTORE_PATH$RESTORE_ANDROID_FILE
RESTORE_IOS_LINK=$RESTORE_PATH$RESTORE_IOS_FILE.zip
RESTORE_SWIFT_BINDINGS_URL="https://raw.githubusercontent.com/ZeusLN/zeus-cashu-restore/v$RESTORE_VERSION/bindings/swift/zeus_cashu_restore.swift"
RESTORE_KOTLIN_BINDINGS_URL="https://raw.githubusercontent.com/ZeusLN/zeus-cashu-restore/v$RESTORE_VERSION/bindings/kotlin/uniffi/zeus_cashu_restore/zeus_cashu_restore.kt"
# Android Restore
mkdir -p android/zeus-restore
NEED_RESTORE_ANDROID=false
if [ ! -f "android/zeus-restore/$RESTORE_ANDROID_FILE" ]; then
NEED_RESTORE_ANDROID=true
elif [ -n "$RESTORE_ANDROID_SHA256" ]; then
if ! echo "$RESTORE_ANDROID_SHA256 android/zeus-restore/$RESTORE_ANDROID_FILE" | sha256sum -c - 2>/dev/null; then
NEED_RESTORE_ANDROID=true
fi
fi
if [ "$NEED_RESTORE_ANDROID" = true ]; then
echo "Downloading Zeus Cashu Restore Android library..." >&2
rm -f android/zeus-restore/$RESTORE_ANDROID_FILE
curl -L $RESTORE_ANDROID_LINK > android/zeus-restore/$RESTORE_ANDROID_FILE
if [ -n "$RESTORE_ANDROID_SHA256" ]; then
if ! echo "$RESTORE_ANDROID_SHA256 android/zeus-restore/$RESTORE_ANDROID_FILE" | sha256sum -c -; then
echo "Restore Android checksum failed" >&2
exit 1
fi
else
echo "Restore Android downloaded (checksum verification skipped)"
echo "SHA256: $(sha256sum android/zeus-restore/$RESTORE_ANDROID_FILE | cut -d' ' -f1)"
fi
fi
# iOS Restore
mkdir -p ios/ZeusRestoreLibZipFile
mkdir -p ios/ZeusRestore
NEED_RESTORE_IOS=false
if [ ! -f "ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip" ]; then
NEED_RESTORE_IOS=true
elif [ -n "$RESTORE_IOS_SHA256" ]; then
if ! echo "$RESTORE_IOS_SHA256 ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip" | sha256sum -c - 2>/dev/null; then
NEED_RESTORE_IOS=true
fi
fi
if [ "$NEED_RESTORE_IOS" = true ]; then
echo "Downloading Zeus Cashu Restore iOS library..." >&2
rm -f ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip
curl -L $RESTORE_IOS_LINK > ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip
if [ -n "$RESTORE_IOS_SHA256" ]; then
if ! echo "$RESTORE_IOS_SHA256 ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip" | sha256sum -c -; then
echo "Restore iOS checksum failed" >&2
exit 1
fi
else
echo "Restore iOS downloaded (checksum verification skipped)"
echo "SHA256: $(sha256sum ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip | cut -d' ' -f1)"
fi
fi
# Extract to ios/ZeusRestore directory
rm -rf ios/ZeusRestore/$RESTORE_IOS_FILE
unzip ios/ZeusRestoreLibZipFile/$RESTORE_IOS_FILE.zip -d ios/ZeusRestore
echo "Zeus Cashu Restore iOS framework installed to ios/ZeusRestore/$RESTORE_IOS_FILE"
# Download matching Swift bindings
mkdir -p ios/CashuDevKit
echo "Downloading Zeus Cashu Restore Swift bindings..." >&2
curl -L "$RESTORE_SWIFT_BINDINGS_URL" > ios/CashuDevKit/zeus_cashu_restore.swift
echo "Zeus Cashu Restore Swift bindings updated to v$RESTORE_VERSION"
# Download matching Kotlin bindings
RESTORE_KOTLIN_DIR=android/app/src/main/java/uniffi/zeus_cashu_restore
mkdir -p "$RESTORE_KOTLIN_DIR"
echo "Downloading Zeus Cashu Restore Kotlin bindings..." >&2
curl -L "$RESTORE_KOTLIN_BINDINGS_URL" > "$RESTORE_KOTLIN_DIR/zeus_cashu_restore.kt"
echo "Zeus Cashu Restore Kotlin bindings updated to v$RESTORE_VERSION"
#####################
# LDK Node Android #
#####################
mkdir -p android/app/src/main/jniLibs
if ! echo "$LDK_NODE_ANDROID_SHA256 android/ldk-node/$LDK_NODE_ANDROID_FILE" | sha256sum -c -; then
echo "LDK Node Android library file missing or checksum failed" >&2
rm -f android/ldk-node/$LDK_NODE_ANDROID_FILE
mkdir -p android/ldk-node
curl -L $LDK_NODE_ANDROID_LINK > android/ldk-node/$LDK_NODE_ANDROID_FILE
if ! echo "$LDK_NODE_ANDROID_SHA256 android/ldk-node/$LDK_NODE_ANDROID_FILE" | sha256sum -c -; then
echo "LDK Node Android checksum failed" >&2
exit 1
fi
fi
# extract .so files into jniLibs
rm -rf android/app/src/main/jniLibs/arm64-v8a/libldk_node.so
rm -rf android/app/src/main/jniLibs/armeabi-v7a/libldk_node.so
rm -rf android/app/src/main/jniLibs/x86_64/libldk_node.so
unzip -o android/ldk-node/$LDK_NODE_ANDROID_FILE -d android/app/src/main/
################
# LDK Node iOS #
################
mkdir -p ios/LdkNodeLibZipFile
if ! echo "$LDK_NODE_IOS_SHA256 ios/LdkNodeLibZipFile/$LDK_NODE_IOS_FILE.zip" | sha256sum -c -; then
echo "LDK Node iOS library file missing or checksum failed" >&2
# delete old instance of library file
rm -f ios/LdkNodeLibZipFile/$LDK_NODE_IOS_FILE.zip
# download LDK Node iOS library file
curl -L $LDK_NODE_IOS_LINK > ios/LdkNodeLibZipFile/$LDK_NODE_IOS_FILE.zip
# check checksum
if ! echo "$LDK_NODE_IOS_SHA256 ios/LdkNodeLibZipFile/$LDK_NODE_IOS_FILE.zip" | sha256sum -c -; then
echo "LDK Node iOS checksum failed" >&2
exit 1
fi
fi
# delete old instances of library files
rm -rf ios/LdkNodeMobile/$LDK_NODE_IOS_FILE
# unzip LDK Node library file
unzip ios/LdkNodeLibZipFile/$LDK_NODE_IOS_FILE.zip -d ios/LdkNodeMobile