ai/at
1
0

fix social-app ios proxy registerpushtoken err

This commit is contained in:
2026-03-15 19:22:34 +09:00
parent d2dc3da0ef
commit 210b1dea0a
4 changed files with 174 additions and 78 deletions

View File

@@ -1,30 +1,6 @@
diff --git a/src/lib/api/feed/home.ts b/src/lib/api/feed/home.ts
index 7a0d72d91..93554dc3e 100644
--- a/src/lib/api/feed/home.ts
+++ b/src/lib/api/feed/home.ts
@@ -45,7 +45,7 @@ export class HomeFeedAPI implements FeedAPI {
this.following = new FollowingFeedAPI({agent})
this.discover = new CustomFeedAPI({
agent,
- feedParams: {feed: PROD_DEFAULT_FEED('whats-hot')},
+ feedParams: {feed: PROD_DEFAULT_FEED('app')},
})
this.userInterests = userInterests
}
@@ -54,7 +54,7 @@ export class HomeFeedAPI implements FeedAPI {
this.following = new FollowingFeedAPI({agent: this.agent})
this.discover = new CustomFeedAPI({
agent: this.agent,
- feedParams: {feed: PROD_DEFAULT_FEED('whats-hot')},
+ feedParams: {feed: PROD_DEFAULT_FEED('app')},
userInterests: this.userInterests,
})
this.usingDiscover = false
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index 231447b4f..a44b3da05 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -7,12 +7,12 @@ import {BLUESKY_PROXY_DID, CHAT_PROXY_DID} from '#/env'
--- a/src/lib/constants.ts 2026-03-15 19:17:45
+++ b/src/lib/constants.ts 2026-03-15 19:16:32
@@ -7,12 +7,12 @@
export const LOCAL_DEV_SERVICE =
Platform.OS === 'android' ? 'http://10.0.2.2:2583' : 'http://localhost:2583'
export const STAGING_SERVICE = 'https://staging.bsky.dev'
@@ -42,7 +18,7 @@ index 231447b4f..a44b3da05 100644
export const EMBED_SERVICE = 'https://embed.bsky.app'
export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js`
export const BSKY_DOWNLOAD_URL = 'https://bsky.app/download'
@@ -79,19 +79,17 @@ export function IS_PROD_SERVICE(url?: string) {
@@ -81,19 +81,17 @@
}
export const PROD_DEFAULT_FEED = (rkey: string) =>
@@ -65,7 +41,7 @@ index 231447b4f..a44b3da05 100644
]
export const POST_IMG_MAX = {
@@ -129,7 +127,7 @@ export const LANG_DROPDOWN_HITSLOP = {top: 10, bottom: 10, left: 4, right: 4}
@@ -131,7 +129,7 @@
export const BACK_HITSLOP = HITSLOP_30
export const MAX_POST_LINES = 25
@@ -74,7 +50,7 @@ index 231447b4f..a44b3da05 100644
export const BSKY_FEED_OWNER_DIDS = [
BSKY_APP_ACCOUNT_DID,
@@ -138,9 +136,9 @@ export const BSKY_FEED_OWNER_DIDS = [
@@ -140,7 +138,7 @@
]
export const DISCOVER_FEED_URI =
@@ -83,9 +59,7 @@ index 231447b4f..a44b3da05 100644
export const VIDEO_FEED_URI =
'at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/thevids'
export const STAGING_VIDEO_FEED_URI =
'at://did:plc:yofh3kx63drvfljkibw5zuxo/app.bsky.feed.generator/thevids'
export const VIDEO_FEED_URIS = [VIDEO_FEED_URI, STAGING_VIDEO_FEED_URI]
@@ -209,8 +207,8 @@ export const urls = {
@@ -217,10 +215,43 @@
},
}
@@ -95,8 +69,43 @@ index 231447b4f..a44b3da05 100644
+export const PUBLIC_APPVIEW_DID = 'did:web:bsky.syu.is'
export const PUBLIC_STAGING_APPVIEW_DID = 'did:web:api.staging.bsky.dev'
+// Official Bluesky appview DID (for non-self-hosted accounts)
+export const OFFICIAL_APPVIEW_DID = 'did:web:api.bsky.app'
+export const OFFICIAL_CHAT_DID = 'did:web:api.bsky.chat'
+
+export function isSelfHostedService(url?: string) {
+ return !!url?.includes('syu.is')
+}
+
+export function getAppviewDid(serviceUrl?: string) {
+ return isSelfHostedService(serviceUrl)
+ ? PUBLIC_APPVIEW_DID
+ : OFFICIAL_APPVIEW_DID
+}
+
+export function getProxyHeader(serviceUrl?: string): ProxyHeaderValue {
+ return `${getAppviewDid(serviceUrl)}#bsky_appview` as ProxyHeaderValue
+}
+
+export function getNotifServiceHeaders(serviceUrl?: string) {
+ return {
+ 'atproto-proxy': `${getAppviewDid(serviceUrl)}#bsky_notif`,
+ }
+}
+
+export function getDmServiceHeaders(serviceUrl?: string) {
+ const chatDid = isSelfHostedService(serviceUrl)
+ ? CHAT_PROXY_DID
+ : OFFICIAL_CHAT_DID
+ return {
+ 'atproto-proxy': `${chatDid}#bsky_chat`,
+ }
+}
+
export const DEV_ENV_APPVIEW = `http://localhost:2584` // always the same
@@ -236,8 +234,8 @@ export const BLUESKY_MOD_SERVICE_HEADERS = {
export const DEV_ENV_APPVIEW_DID = `did:plc:dw4kbjf5mn7nhenabiqpkyh3` // always the same
@@ -248,8 +279,8 @@
}
export const webLinks = {
@@ -107,6 +116,28 @@ index 231447b4f..a44b3da05 100644
community: `https://bsky.social/about/support/community-guidelines`,
communityDeprecated: `https://bsky.social/about/support/community-guidelines-deprecated`,
}
diff --git a/src/lib/api/feed/home.ts b/src/lib/api/feed/home.ts
index 7a0d72d91..93554dc3e 100644
--- a/src/lib/api/feed/home.ts
+++ b/src/lib/api/feed/home.ts
@@ -45,7 +45,7 @@ export class HomeFeedAPI implements FeedAPI {
this.following = new FollowingFeedAPI({agent})
this.discover = new CustomFeedAPI({
agent,
- feedParams: {feed: PROD_DEFAULT_FEED('whats-hot')},
+ feedParams: {feed: PROD_DEFAULT_FEED('app')},
})
this.userInterests = userInterests
}
@@ -54,7 +54,7 @@ export class HomeFeedAPI implements FeedAPI {
this.following = new FollowingFeedAPI({agent: this.agent})
this.discover = new CustomFeedAPI({
agent: this.agent,
- feedParams: {feed: PROD_DEFAULT_FEED('whats-hot')},
+ feedParams: {feed: PROD_DEFAULT_FEED('app')},
userInterests: this.userInterests,
})
this.usingDiscover = false
diff --git a/src/lib/demo.ts b/src/lib/demo.ts
index 5ead62c9d..7c80dfe15 100644
--- a/src/lib/demo.ts

View File

@@ -1,3 +1,58 @@
--- a/src/state/session/agent.ts 2026-03-15 19:17:45
+++ b/src/state/session/agent.ts 2026-03-15 19:17:18
@@ -18,6 +18,8 @@
BLUESKY_PROXY_HEADER,
BSKY_SERVICE,
DISCOVER_SAVED_FEED,
+ getProxyHeader,
+ isSelfHostedService,
IS_PROD_SERVICE,
PUBLIC_BSKY_SERVICE,
TIMELINE_SAVED_FEED,
@@ -47,7 +49,9 @@
configureModerationForGuest() // Side effect but only relevant for tests
const agent = new BskyAppAgent({service: PUBLIC_BSKY_SERVICE})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ if (!isSelfHostedService(PUBLIC_BSKY_SERVICE)) {
+ agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ }
return agent
}
@@ -77,7 +81,9 @@
// after session is attached
const aa = prefetchAgeAssuranceData({agent})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ if (!isSelfHostedService(storedAccount.service)) {
+ agent.configureProxy(getProxyHeader(storedAccount.service))
+ }
return agent.prepare({
resolvers: [gates, moderation, aa],
@@ -116,7 +122,9 @@
const moderation = configureModerationForAccount(agent, account)
const aa = prefetchAgeAssuranceData({agent})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ if (!isSelfHostedService(service)) {
+ agent.configureProxy(getProxyHeader(service))
+ }
return agent.prepare({
resolvers: [gates, moderation, aa],
@@ -288,7 +296,9 @@
logger.error(e, {message: `session: failed snoozeEmailConfirmationPrompt`})
}
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ if (!isSelfHostedService(service)) {
+ agent.configureProxy(getProxyHeader(service))
+ }
return agent.prepare({
resolvers: [gates, moderation, aa],
diff --git a/src/App.native.tsx b/src/App.native.tsx
index 2c4d6fa41..b69e2b18d 100644
--- a/src/App.native.tsx
@@ -29,47 +84,3 @@ index f325539c7..3e2c7b3eb 100644
CopyrightPolicy: '/support/copyright',
// hashtags
Hashtag: '/hashtag/:tag',
diff --git a/src/state/session/agent.ts b/src/state/session/agent.ts
index 5c8ce3b97..ee85beb08 100644
--- a/src/state/session/agent.ts
+++ b/src/state/session/agent.ts
@@ -47,7 +47,8 @@ export function createPublicAgent() {
configureModerationForGuest() // Side effect but only relevant for tests
const agent = new BskyAppAgent({service: PUBLIC_BSKY_SERVICE})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ // Disable proxy for self-hosted environments
+ // agent.configureProxy(BLUESKY_PROXY_HEADER.get())
return agent
}
@@ -88,7 +89,8 @@ export async function createAgentAndResume(
// after session is attached
const aa = prefetchAgeAssuranceData({agent})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ // Disable proxy for self-hosted environments
+ // agent.configureProxy(BLUESKY_PROXY_HEADER.get())
return agent.prepare({
resolvers: [gates, moderation, aa],
@@ -127,7 +129,8 @@ export async function createAgentAndLogin(
const moderation = configureModerationForAccount(agent, account)
const aa = prefetchAgeAssuranceData({agent})
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ // Disable proxy for self-hosted environments
+ // agent.configureProxy(BLUESKY_PROXY_HEADER.get())
return agent.prepare({
resolvers: [gates, moderation, aa],
@@ -299,7 +302,8 @@ export async function createAgentAndCreateAccount(
logger.error(e, {message: `session: failed snoozeEmailConfirmationPrompt`})
}
- agent.configureProxy(BLUESKY_PROXY_HEADER.get())
+ // Disable proxy for self-hosted environments
+ // agent.configureProxy(BLUESKY_PROXY_HEADER.get())
return agent.prepare({
resolvers: [gates, moderation, aa],

View File

@@ -0,0 +1,53 @@
--- a/src/lib/notifications/notifications.ts 2026-03-15 19:17:45
+++ b/src/lib/notifications/notifications.ts 2026-03-15 19:17:38
@@ -6,8 +6,8 @@
import debounce from 'lodash.debounce'
import {
- BLUESKY_NOTIF_SERVICE_HEADERS,
- PUBLIC_APPVIEW_DID,
+ getAppviewDid,
+ getNotifServiceHeaders,
PUBLIC_STAGING_APPVIEW_DID,
} from '#/lib/constants'
import {logger as notyLogger} from '#/lib/notifications/util'
@@ -39,7 +39,7 @@
const payload: AppBskyNotificationRegisterPush.InputSchema = {
serviceDid: currentAccount.service?.includes('staging')
? PUBLIC_STAGING_APPVIEW_DID
- : PUBLIC_APPVIEW_DID,
+ : getAppviewDid(currentAccount.service),
platform: Platform.OS,
token: token.data,
appId: 'xyz.blueskyweb.app',
@@ -49,7 +49,7 @@
notyLogger.debug(`registerPushToken: registering`, {...payload})
await agent.app.bsky.notification.registerPush(payload, {
- headers: BLUESKY_NOTIF_SERVICE_HEADERS,
+ headers: getNotifServiceHeaders(currentAccount.service),
})
notyLogger.debug(`registerPushToken: success`)
@@ -301,17 +301,18 @@
const token = await getPushToken()
if (token) {
for (const agent of agents) {
+ const serviceUrl = agent.serviceUrl.toString()
await agent.app.bsky.notification.unregisterPush(
{
- serviceDid: agent.serviceUrl.hostname.includes('staging')
+ serviceDid: serviceUrl.includes('staging')
? PUBLIC_STAGING_APPVIEW_DID
- : PUBLIC_APPVIEW_DID,
+ : getAppviewDid(serviceUrl),
platform: Platform.OS,
token: token.data,
appId: 'xyz.blueskyweb.app',
},
{
- headers: BLUESKY_NOTIF_SERVICE_HEADERS,
+ headers: getNotifServiceHeaders(serviceUrl),
},
)
notyLogger.debug(`Push token unregistered for ${agent.session?.handle}`)

View File

@@ -48,6 +48,7 @@ PATCH_FILES_IOS=(
"041-social-app-ios-splash-custom.patch" # signin-button + splash-video (merged 044)
"045-social-app-ios-composer-cancel.patch"
"046-social-app-ios-null-url-guards.patch"
"047-social-app-ios-dynamic-service.patch" # Dynamic proxy/notif per account (syu.is vs bsky.social)
)
function ios-env() {