diff --git a/extensions/tlon/src/account-fields.ts b/extensions/tlon/src/account-fields.ts index 1888db2e091..ab43c061739 100644 --- a/extensions/tlon/src/account-fields.ts +++ b/extensions/tlon/src/account-fields.ts @@ -2,7 +2,7 @@ export type TlonAccountFieldsInput = { ship?: string; url?: string; code?: string; - allowPrivateNetwork?: boolean; + dangerouslyAllowPrivateNetwork?: boolean; groupChannels?: string[]; dmAllowlist?: string[]; autoDiscoverChannels?: boolean; @@ -14,10 +14,10 @@ export function buildTlonAccountFields(input: TlonAccountFieldsInput) { ...(input.ship ? { ship: input.ship } : {}), ...(input.url ? { url: input.url } : {}), ...(input.code ? { code: input.code } : {}), - ...(typeof input.allowPrivateNetwork === "boolean" + ...(typeof input.dangerouslyAllowPrivateNetwork === "boolean" ? { network: { - dangerouslyAllowPrivateNetwork: input.allowPrivateNetwork, + dangerouslyAllowPrivateNetwork: input.dangerouslyAllowPrivateNetwork, }, } : {}), diff --git a/extensions/tlon/src/channel.runtime.ts b/extensions/tlon/src/channel.runtime.ts index c00199eeb9b..560e5ce7538 100644 --- a/extensions/tlon/src/channel.runtime.ts +++ b/extensions/tlon/src/channel.runtime.ts @@ -37,9 +37,9 @@ async function createHttpPokeApi(params: { url: string; code: string; ship: string; - allowPrivateNetwork?: boolean; + dangerouslyAllowPrivateNetwork?: boolean; }) { - const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(params.allowPrivateNetwork); + const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(params.dangerouslyAllowPrivateNetwork); const cookie = await authenticate(params.url, params.code, { ssrfPolicy }); const channelId = `${Math.floor(Date.now() / 1000)}-${crypto.randomUUID()}`; const channelPath = `/~/channel/${channelId}`; @@ -119,7 +119,7 @@ async function withHttpPokeAccountApi( url: account.url, ship: account.ship, code: account.code, - allowPrivateNetwork: account.allowPrivateNetwork ?? undefined, + dangerouslyAllowPrivateNetwork: account.dangerouslyAllowPrivateNetwork ?? undefined, }); try { @@ -167,7 +167,7 @@ export const tlonRuntimeOutbound: ChannelOutboundAdapter = { shipName: account.ship.replace(/^~/, ""), verbose: false, getCode: async () => account.code, - allowPrivateNetwork: account.allowPrivateNetwork ?? undefined, + dangerouslyAllowPrivateNetwork: account.dangerouslyAllowPrivateNetwork ?? undefined, }); const uploadedUrl = mediaUrl ? await uploadImageFromUrl(mediaUrl) : undefined; @@ -197,7 +197,7 @@ export const tlonRuntimeOutbound: ChannelOutboundAdapter = { export async function probeTlonAccount(account: ConfiguredTlonAccount) { try { - const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(account.allowPrivateNetwork); + const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(account.dangerouslyAllowPrivateNetwork); const cookie = await authenticate(account.url, account.code, { ssrfPolicy }); const { response, release } = await urbitFetch({ baseUrl: account.url, diff --git a/extensions/tlon/src/monitor/index.ts b/extensions/tlon/src/monitor/index.ts index a111d2122df..7c41000ac40 100644 --- a/extensions/tlon/src/monitor/index.ts +++ b/extensions/tlon/src/monitor/index.ts @@ -73,7 +73,7 @@ export async function monitorTlonProvider(opts: MonitorTlonOpts = {}): Promise Promise; - allowPrivateNetwork?: boolean; + dangerouslyAllowPrivateNetwork?: boolean; }; type StorageService = "presigned-url" | "credentials"; @@ -112,7 +112,7 @@ function sanitizeFileName(fileName: string): string { async function getAuthCookie(config: ClientConfig): Promise { return await authenticate(config.shipUrl, await config.getCode(), { - ssrfPolicy: ssrfPolicyFromAllowPrivateNetwork(config.allowPrivateNetwork), + ssrfPolicy: ssrfPolicyFromAllowPrivateNetwork(config.dangerouslyAllowPrivateNetwork), }); } @@ -121,7 +121,7 @@ async function scryJson(config: ClientConfig, cookie: string, path: string): { baseUrl: config.shipUrl, cookie, - ssrfPolicy: ssrfPolicyFromAllowPrivateNetwork(config.allowPrivateNetwork), + ssrfPolicy: ssrfPolicyFromAllowPrivateNetwork(config.dangerouslyAllowPrivateNetwork), }, { path, auditContext: "tlon-storage-scry" }, )) as T; diff --git a/extensions/tlon/src/types.ts b/extensions/tlon/src/types.ts index d9a3e39baab..a13a81293cc 100644 --- a/extensions/tlon/src/types.ts +++ b/extensions/tlon/src/types.ts @@ -5,7 +5,10 @@ import { resolveMergedAccountConfig, } from "openclaw/plugin-sdk/account-resolution"; import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; -import { hasLegacyFlatAllowPrivateNetworkAlias, isPrivateNetworkOptInEnabled } from "openclaw/plugin-sdk/ssrf-runtime"; +import { + hasLegacyFlatAllowPrivateNetworkAlias, + isPrivateNetworkOptInEnabled, +} from "openclaw/plugin-sdk/ssrf-runtime"; type TlonAccountConfig = { name?: string; @@ -36,7 +39,7 @@ export type TlonResolvedAccount = { ship: string | null; url: string | null; code: string | null; - allowPrivateNetwork: boolean | null; + dangerouslyAllowPrivateNetwork: boolean | null; groupChannels: string[]; dmAllowlist: string[]; /** Ships allowed to invite us to groups (security: prevent malicious group invites) */ @@ -88,7 +91,7 @@ export function resolveTlonAccount( ship: null, url: null, code: null, - allowPrivateNetwork: null, + dangerouslyAllowPrivateNetwork: null, groupChannels: [], dmAllowlist: [], groupInviteAllowlist: [], @@ -105,15 +108,14 @@ export function resolveTlonAccount( const ship = (merged.ship ?? null) as string | null; const url = (merged.url ?? null) as string | null; const code = (merged.code ?? null) as string | null; - const allowPrivateNetwork = - isPrivateNetworkOptInEnabled(merged) - ? true - : typeof merged.network?.dangerouslyAllowPrivateNetwork === "boolean" - ? merged.network.dangerouslyAllowPrivateNetwork - : hasLegacyFlatAllowPrivateNetworkAlias(merged) && - typeof merged.allowPrivateNetwork === "boolean" - ? merged.allowPrivateNetwork - : null; + const dangerouslyAllowPrivateNetwork = isPrivateNetworkOptInEnabled(merged) + ? true + : typeof merged.network?.dangerouslyAllowPrivateNetwork === "boolean" + ? merged.network.dangerouslyAllowPrivateNetwork + : hasLegacyFlatAllowPrivateNetworkAlias(merged) && + typeof merged.allowPrivateNetwork === "boolean" + ? merged.allowPrivateNetwork + : null; const groupChannels = (merged.groupChannels ?? []) as string[]; const dmAllowlist = (merged.dmAllowlist ?? []) as string[]; const groupInviteAllowlist = (merged.groupInviteAllowlist ?? []) as string[]; @@ -133,7 +135,7 @@ export function resolveTlonAccount( ship, url, code, - allowPrivateNetwork, + dangerouslyAllowPrivateNetwork, groupChannels, dmAllowlist, groupInviteAllowlist,