Files
2026-05-05 14:34:55 -05:00

79 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Sends a sample APNS payload to a booted iOS simulator. Useful for testing
# BlueskyNSE and useNotificationsHandler without a real APNS round-trip.
#
# Usage:
# scripts/push-test/send.sh <payload-name> [--did <did>] [--device <udid>] [--bundle <id>]
#
# Examples:
# scripts/push-test/send.sh like --did did:plc:abc123
# BLUESKY_TEST_DID=did:plc:abc123 scripts/push-test/send.sh chat-message
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PAYLOAD_DIR="$SCRIPT_DIR/payloads"
device="booted"
bundle="xyz.blueskyweb.app"
did="${BLUESKY_TEST_DID:-}"
name=""
while [[ $# -gt 0 ]]; do
case "$1" in
--did) did="$2"; shift 2;;
--device) device="$2"; shift 2;;
--bundle) bundle="$2"; shift 2;;
-h|--help)
cat <<EOF
Usage: $0 <payload-name> [--did <did>] [--device <udid>] [--bundle <id>]
Available payloads:
$(ls "$PAYLOAD_DIR" 2>/dev/null | sed 's/\.apns$//' | sed 's/^/ /')
Pass --did or set BLUESKY_TEST_DID to substitute the recipient DID. The DID
must match the account currently signed in to the app, otherwise chat
notifications will trigger an account-switch flow and other reasons will be
silently dropped by the handler.
EOF
exit 0
;;
*)
if [[ -z "$name" ]]; then
name="$1"
else
echo "Unknown arg: $1" >&2
exit 1
fi
shift
;;
esac
done
if [[ -z "$name" ]]; then
echo "Error: payload name required. Run with --help for options." >&2
exit 1
fi
src="$PAYLOAD_DIR/${name}.apns"
if [[ ! -f "$src" ]]; then
echo "Error: payload not found: $src" >&2
echo "Available:" >&2
ls "$PAYLOAD_DIR" | sed 's/\.apns$//' | sed 's/^/ /' >&2
exit 1
fi
if [[ -z "$did" ]]; then
echo "Error: missing recipient DID. Pass --did or set BLUESKY_TEST_DID." >&2
echo " The DID must match the account currently signed in to the app." >&2
exit 1
fi
tmp="$(mktemp -t bluesky-push.XXXXXX).apns"
trap 'rm -f "$tmp"' EXIT
sed "s|__RECIPIENT_DID__|$did|g" "$src" > "$tmp"
echo "Pushing '$name' to $device ($bundle)"
xcrun simctl push "$device" "$bundle" "$tmp"
echo "Delivered."