mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-10-17 06:42:31 +00:00
Use compatible timers for TURN credential requests
Use compatGlobal and CompatTimeoutHandle for request deadlines. Enforce the community no-global-this rule for integrations and make violations fail quiet lint checks.
This commit is contained in:
@@ -52,6 +52,7 @@ export default defineConfig(
|
|||||||
"obsidianmd/rule-custom-message": "off",
|
"obsidianmd/rule-custom-message": "off",
|
||||||
"no-console": "warn",
|
"no-console": "warn",
|
||||||
"obsidianmd/no-unsupported-api": "error",
|
"obsidianmd/no-unsupported-api": "error",
|
||||||
|
// Reject direct globalThis access even when routine checks use --quiet.
|
||||||
"obsidianmd/no-global-this": "error",
|
"obsidianmd/no-global-this": "error",
|
||||||
// Keep legacy type-safety debt visible while reserving errors for directory-review blockers.
|
// Keep legacy type-safety debt visible while reserving errors for directory-review blockers.
|
||||||
"@typescript-eslint/no-unsafe-argument": "warn",
|
"@typescript-eslint/no-unsafe-argument": "warn",
|
||||||
@@ -64,13 +65,6 @@ export default defineConfig(
|
|||||||
"@typescript-eslint/no-unnecessary-type-assertion": "warn",
|
"@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}"],
|
files: ["src/apps/**/*.{ts,js,mjs}"],
|
||||||
rules: {
|
rules: {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
type CloudflareTurnConfiguration,
|
type CloudflareTurnConfiguration,
|
||||||
validateCloudflareTurnConfiguration,
|
validateCloudflareTurnConfiguration,
|
||||||
} from "./settings";
|
} from "./settings";
|
||||||
|
import { compatGlobal, type CompatTimeoutHandle } from "@vrtmrz/livesync-commonlib/compat/common/coreEnvFunctions";
|
||||||
|
|
||||||
/** Fetch-compatible function supplied by the host composition. */
|
/** Fetch-compatible function supplied by the host composition. */
|
||||||
export type CloudflareTurnFetch = (input: string | Request, init?: RequestInit) => Promise<Response>;
|
export type CloudflareTurnFetch = (input: string | Request, init?: RequestInit) => Promise<Response>;
|
||||||
@@ -283,9 +284,9 @@ export async function acquireCloudflareTurnCredentials(
|
|||||||
requestController.abort();
|
requestController.abort();
|
||||||
throw abortError();
|
throw abortError();
|
||||||
}
|
}
|
||||||
let timeoutId: ReturnType<typeof setTimeout> | undefined;
|
let timeoutId: CompatTimeoutHandle | undefined;
|
||||||
const deadline = new Promise<never>((_resolve, reject) => {
|
const deadline = new Promise<never>((_resolve, reject) => {
|
||||||
timeoutId = globalThis.setTimeout(() => {
|
timeoutId = compatGlobal.setTimeout(() => {
|
||||||
timedOut = true;
|
timedOut = true;
|
||||||
requestController.abort();
|
requestController.abort();
|
||||||
reject(credentialFailure("unavailable", true));
|
reject(credentialFailure("unavailable", true));
|
||||||
@@ -293,7 +294,7 @@ export async function acquireCloudflareTurnCredentials(
|
|||||||
});
|
});
|
||||||
|
|
||||||
const cleanup = () => {
|
const cleanup = () => {
|
||||||
if (timeoutId !== undefined) globalThis.clearTimeout(timeoutId);
|
if (timeoutId !== undefined) compatGlobal.clearTimeout(timeoutId);
|
||||||
signal.removeEventListener("abort", onAbort);
|
signal.removeEventListener("abort", onAbort);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user