Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db184c1ae | ||
|
|
ae891480be | ||
|
|
aaff62fff2 | ||
|
|
c01fd723ee |
No files matched your search
@@ -3,6 +3,7 @@ import { escapeForRegEx } from "@tiptap/react";
|
|||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
|
||||||
import { decryptSecret } from "@homarr/common/server";
|
import { decryptSecret } from "@homarr/common/server";
|
||||||
|
import { createLogger } from "@homarr/core/infrastructure/logs";
|
||||||
import { eq } from "@homarr/db";
|
import { eq } from "@homarr/db";
|
||||||
import { boards, items, widgetSecrets } from "@homarr/db/schema";
|
import { boards, items, widgetSecrets } from "@homarr/db/schema";
|
||||||
import { releaseProviderKinds } from "@homarr/definitions";
|
import { releaseProviderKinds } from "@homarr/definitions";
|
||||||
@@ -11,6 +12,8 @@ import { releasesRequestHandler } from "@homarr/request-handler/releases";
|
|||||||
import { createTRPCRouter, publicProcedure } from "../../trpc";
|
import { createTRPCRouter, publicProcedure } from "../../trpc";
|
||||||
import { throwIfActionForbiddenAsync } from "../board/board-access";
|
import { throwIfActionForbiddenAsync } from "../board/board-access";
|
||||||
|
|
||||||
|
const logger = createLogger({ module: "releasesRouter" });
|
||||||
|
|
||||||
const formatVersionFilterRegex = (versionFilter: z.infer<typeof releaseVersionFilterSchema> | undefined) => {
|
const formatVersionFilterRegex = (versionFilter: z.infer<typeof releaseVersionFilterSchema> | undefined) => {
|
||||||
if (!versionFilter) return undefined;
|
if (!versionFilter) return undefined;
|
||||||
|
|
||||||
@@ -71,13 +74,13 @@ export const releasesRouter = createTRPCRouter({
|
|||||||
for (const secret of secrets) {
|
for (const secret of secrets) {
|
||||||
try {
|
try {
|
||||||
tokensByProvider.set(secret.kind, decryptSecret(secret.value));
|
tokensByProvider.set(secret.kind, decryptSecret(secret.value));
|
||||||
} catch {
|
} catch (error) {
|
||||||
// Skip corrupt secrets
|
logger.warn("Failed to decrypt widget secret", { itemId: input.itemId, kind: secret.kind, error });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch (error) {
|
||||||
// Access denied or table not yet migrated -- proceed without tokens
|
logger.warn("Failed to load release widget tokens", { itemId: input.itemId, error });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,33 @@ const getGithubApi = (baseUrl: string, userAgent: string, token?: string) =>
|
|||||||
baseUrl,
|
baseUrl,
|
||||||
auth: token,
|
auth: token,
|
||||||
request: { fetch: fetchWithTrustedCertificatesAsync },
|
request: { fetch: fetchWithTrustedCertificatesAsync },
|
||||||
throttle: { enabled: true },
|
throttle: {
|
||||||
|
enabled: true,
|
||||||
|
onRateLimit: (
|
||||||
|
retryAfter: number,
|
||||||
|
options: { url?: string; method?: string },
|
||||||
|
_octokit: unknown,
|
||||||
|
retryCount: number,
|
||||||
|
) => {
|
||||||
|
logger.warn(`GitHub rate limit exceeded, retrying after ${retryAfter}s (attempt ${retryCount + 1})`, {
|
||||||
|
url: options.url,
|
||||||
|
method: options.method,
|
||||||
|
});
|
||||||
|
return retryCount < 1;
|
||||||
|
},
|
||||||
|
onSecondaryRateLimit: (
|
||||||
|
retryAfter: number,
|
||||||
|
options: { url?: string; method?: string },
|
||||||
|
_octokit: unknown,
|
||||||
|
retryCount: number,
|
||||||
|
) => {
|
||||||
|
logger.warn(`GitHub secondary rate limit exceeded, retrying after ${retryAfter}s (attempt ${retryCount + 1})`, {
|
||||||
|
url: options.url,
|
||||||
|
method: options.method,
|
||||||
|
});
|
||||||
|
return retryCount < 1;
|
||||||
|
},
|
||||||
|
},
|
||||||
userAgent,
|
userAgent,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user