Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
a5098e9
test(push-gateway): pin App Attest transcript bytes with known-answer…
Jul 15, 2026
88be670
feat(mobile/ios): Swift canonical NIP-PL App Attest transcript encoder
Jul 15, 2026
e4b1e81
feat(mobile/ios): add NIP-PL notification service foundation
Jul 15, 2026
4c99a83
fix(mobile/ios): secure push relay resolution
Jul 24, 2026
14a529d
Merge origin/main into push-ios-blockers-1-2
Jul 24, 2026
e067a39
fix(mobile/ios): synchronize push snapshot lifecycle
Jul 24, 2026
8912fdc
fix(mobile/ios): harden push lifecycle failures
Jul 24, 2026
7a3eae8
feat(mobile/ios): add development push enrollment
Jul 28, 2026
eb02109
fix(push): enable HTTP/2 for APNs
Jul 28, 2026
0f06925
feat(mobile/ios): publish development push leases
Jul 28, 2026
a8eabb6
fix(push): authenticate APNs with certificate
Jul 29, 2026
a352059
Merge origin/main into push-ios-blockers-1-2
Jul 31, 2026
80001b6
fix(push): restrict APNs certificate secret
Jul 31, 2026
424f2fe
refactor(push): remove dead credential refresh path
Jul 31, 2026
c7bbf74
fix(push): reject legacy APNs chart values
Jul 31, 2026
89de724
Merge remote-tracking branch 'origin/main' into apns-http2
Jul 31, 2026
f61f841
Merge apns-http2 (APNs certificate auth) into push-ios-blockers-1-2
Jul 31, 2026
0e3389a
fix(push): pin gateway tag creation contract
Jul 31, 2026
5d236db
feat(push): add gated development App Attest bypass
Jul 31, 2026
421912d
refactor(push): require validated App Attest bypass token
Jul 31, 2026
f2cbd4f
fix(push): reject invalid App Attest bypass flags
Jul 31, 2026
e03b42b
feat(push): allow Debug loopback gateway delivery
Jul 31, 2026
f8a1b12
Merge remote-tracking branch 'origin/main' into push-ios-blockers-1-2
Jul 31, 2026
b1b16b2
revert: keep push gateway delivery HTTPS only
Jul 31, 2026
889501a
revert: restore Debug loopback gateway delivery
Jul 31, 2026
922aa58
fix(push): explicitly gate Debug loopback delivery
Jul 31, 2026
3ace1e8
revert: preserve canonical HTTPS push delivery
Jul 31, 2026
7374575
test(push): pin App Attest bypass as non-default
Jul 31, 2026
4f86c6c
fix(mobile/ios): align Apple app identities
Jul 31, 2026
029828a
test(mobile/ios): assert signing configuration mapping
Jul 31, 2026
b4df1c0
test(mobile/ios): resolve signing config references
Aug 1, 2026
bb5fcd4
test(mobile/ios): follow target configuration graph
Aug 1, 2026
9f5c895
test(mobile/ios): run Swift push tests in CI
Aug 1, 2026
db73dc4
Merge main into push iOS blockers
Aug 1, 2026
32915c5
test(mobile/ios): exercise push notification resolver
Aug 1, 2026
c49dc2b
test(mobile/ios): harden project source checks
Aug 1, 2026
3dd4580
test(mobile/ios): validate project semantics
Aug 1, 2026
c5f6770
test(mobile/ios): pin tracked identity declarations
Aug 1, 2026
aea7821
fix(mobile/ios): enable Debug compilation condition
Aug 1, 2026
52fa0d2
fix(mobile/ios): configure push gateway URL
Aug 1, 2026
f563f83
test(mobile): honor compiled push gateway
Aug 2, 2026
4a9b4d9
test(push): cover strict App Attest verification
Aug 2, 2026
99cb60b
feat(ios): add real App Attest client
Aug 2, 2026
b3875f6
test(ios): harden signing config contract
Aug 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
- 'scripts/check-file-sizes-core.mjs'
- 'scripts/check-file-sizes-core.test.mjs'
- 'mobile/**'
- 'crates/buzz-push-gateway/tests/vectors/**'
- 'scripts/mobile-release.sh'
- 'scripts/mobile-worktree-overrides.sh'
- 'scripts/mobile-worktree-clean.sh'
Expand All @@ -72,6 +73,7 @@
- 'scripts/test-mobile-release-contract.sh'
- 'scripts/test-mobile-release-candidate-publisher.sh'
- 'scripts/test-mobile-worktree-overrides.sh'
- 'scripts/test-ios-pbxproj-semantics.py'
- '.github/workflows/mobile-release-candidate.yml'
- '.github/workflows/ci.yml'
- name: Release workflow source contract
Expand Down Expand Up @@ -860,9 +862,26 @@
- name: Build Android debug APK
run: just mobile-build-android

mobile-swift:
name: Mobile Swift
runs-on: macos-latest
timeout-minutes: 10
needs: [changes]
if: needs.changes.outputs.mobile == 'true'
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Build
run: swift build --package-path mobile/ios/BuzzPushKit
- name: Build release
run: swift build -c release --package-path mobile/ios/BuzzPushKit
- name: Test
run: swift test --package-path mobile/ios/BuzzPushKit
- name: Validate iOS project semantics
run: python3 scripts/test-ios-pbxproj-semantics.py

security:
name: Security
runs-on: ubuntu-latest

Check warning

Code scanning / zizmor

detects commit SHAs that don't match their version comment tags Warning

detects commit SHAs that don't match their version comment tags
timeout-minutes: 20
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true'
Expand Down
11 changes: 11 additions & 0 deletions .intersect/sadscan.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,14 @@
exclude_rules_for_files:
sq.pii.cc.visa:
- Cargo.lock
# Self-signed test fixture generated solely to exercise reqwest identity parsing.
kingfisher.privkey.2:
- "*apns-test-identity.pem"
- "*apns-test-key-only.pem"
- "*apns-test-encrypted-identity.pem"
- "*apns-test-mismatched-identity.pem"
np.pem.1:
- "*apns-test-identity.pem"
- "*apns-test-key-only.pem"
- "*apns-test-encrypted-identity.pem"
- "*apns-test-mismatched-identity.pem"
164 changes: 0 additions & 164 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions crates/buzz-push-gateway/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ rust-version.workspace = true
license.workspace = true
repository.workspace = true

[features]
default = []
dev-app-attest-bypass = []

[lib]
name = "buzz_push_gateway"
path = "src/lib.rs"
Expand All @@ -29,9 +33,8 @@ getrandom = "0.4"
metrics = { workspace = true }
metrics-exporter-prometheus = { workspace = true }
nostr = { workspace = true }
p256 = { version = "0.14", features = ["ecdsa", "pem", "pkcs8"] }
rand = { workspace = true }
reqwest = { workspace = true }
reqwest = { workspace = true, features = ["http2"] }
serde = { workspace = true }
serde_json = { workspace = true }
sqlx = { workspace = true }
Expand Down
Loading
Loading