diff --git a/eslint.community.config.mjs b/eslint.community.config.mjs index a825e0e5..e744401c 100644 --- a/eslint.community.config.mjs +++ b/eslint.community.config.mjs @@ -52,6 +52,7 @@ export default defineConfig( "obsidianmd/rule-custom-message": "off", "no-console": "warn", "obsidianmd/no-unsupported-api": "error", + // Reject direct globalThis access even when routine checks use --quiet. "obsidianmd/no-global-this": "error", // Keep legacy type-safety debt visible while reserving errors for directory-review blockers. "@typescript-eslint/no-unsafe-argument": "warn", @@ -64,13 +65,6 @@ export default defineConfig( "@typescript-eslint/no-unnecessary-type-assertion": "warn", }, }, - { - files: ["src/integrations/**/*.ts"], - rules: { - // External-service integrations also run in Node and do not own window UI. - "obsidianmd/no-global-this": "off", - }, - }, { files: ["src/apps/**/*.{ts,js,mjs}"], rules: { diff --git a/src/integrations/cloudflare/turnCredentials.ts b/src/integrations/cloudflare/turnCredentials.ts index a01c4307..924b64b6 100644 --- a/src/integrations/cloudflare/turnCredentials.ts +++ b/src/integrations/cloudflare/turnCredentials.ts @@ -4,6 +4,7 @@ import { type CloudflareTurnConfiguration, validateCloudflareTurnConfiguration, } from "./settings"; +import { compatGlobal, type CompatTimeoutHandle } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions"; /** Fetch-compatible function supplied by the host composition. */ export type CloudflareTurnFetch = (input: string | Request, init?: RequestInit) => Promise; @@ -283,9 +284,9 @@ export async function acquireCloudflareTurnCredentials( requestController.abort(); throw abortError(); } - let timeoutId: ReturnType | undefined; + let timeoutId: CompatTimeoutHandle | undefined; const deadline = new Promise((_resolve, reject) => { - timeoutId = globalThis.setTimeout(() => { + timeoutId = compatGlobal.setTimeout(() => { timedOut = true; requestController.abort(); reject(credentialFailure("unavailable", true)); @@ -293,7 +294,7 @@ export async function acquireCloudflareTurnCredentials( }); const cleanup = () => { - if (timeoutId !== undefined) globalThis.clearTimeout(timeoutId); + if (timeoutId !== undefined) compatGlobal.clearTimeout(timeoutId); signal.removeEventListener("abort", onAbort); };