mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-20 11:56:38 +00:00
✨ add flags for enabling notifications for product updates & new releases
This commit is contained in:
@@ -21,6 +21,14 @@ const envSchema = z.object({
|
||||
.transform((val) => val === "true"),
|
||||
APP_VERSION: z.string(),
|
||||
DASHBOARD_URL: z.string(),
|
||||
PRODUCT_UPDATES_NOTIFICATION_ENABLED: z
|
||||
.string()
|
||||
.default("true")
|
||||
.transform((val) => val === "true"),
|
||||
NEW_RELEASES_NOTIFICATION_ENABLED: z
|
||||
.string()
|
||||
.default("true")
|
||||
.transform((val) => val === "true"),
|
||||
|
||||
// Email configuration
|
||||
EMAIL_ENABLED: z
|
||||
@@ -112,7 +120,11 @@ export function pullEnv(): Env {
|
||||
environment: env.ENVIRONMENT,
|
||||
sandbox_mode: env.SANDBOX_MODE,
|
||||
version: env.APP_VERSION,
|
||||
dashboardUrl: env.DASHBOARD_URL
|
||||
dashboardUrl: env.DASHBOARD_URL,
|
||||
notifications: {
|
||||
product_updates: env.PRODUCT_UPDATES_NOTIFICATION_ENABLED,
|
||||
new_releases: env.NEW_RELEASES_NOTIFICATION_ENABLED
|
||||
}
|
||||
},
|
||||
email: {
|
||||
emailEnabled: env.EMAIL_ENABLED
|
||||
|
||||
@@ -15,47 +15,53 @@ export type ProductUpdate = {
|
||||
showUntil: Date;
|
||||
};
|
||||
|
||||
export const productUpdatesQueries = {
|
||||
list: queryOptions({
|
||||
queryKey: ["PRODUCT_UPDATES"] as const,
|
||||
queryFn: async ({ signal }) => {
|
||||
const sp = new URLSearchParams({
|
||||
build
|
||||
});
|
||||
const data = await remote.get<ResponseT<ProductUpdate[]>>(
|
||||
`/product-updates?${sp.toString()}`,
|
||||
{ signal }
|
||||
);
|
||||
return data.data;
|
||||
},
|
||||
refetchInterval: (query) => {
|
||||
if (query.state.data) {
|
||||
return durationToMs(5, "minutes");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}),
|
||||
latestVersion: queryOptions({
|
||||
queryKey: ["LATEST_VERSION"] as const,
|
||||
queryFn: async ({ signal }) => {
|
||||
const data = await remote.get<
|
||||
ResponseT<{
|
||||
pangolin: {
|
||||
latestVersion: string;
|
||||
releaseNotes: string;
|
||||
};
|
||||
}>
|
||||
>("/versions", { signal });
|
||||
return data.data;
|
||||
},
|
||||
placeholderData: keepPreviousData,
|
||||
refetchInterval: (query) => {
|
||||
if (query.state.data) {
|
||||
return durationToMs(30, "minutes");
|
||||
}
|
||||
return false;
|
||||
},
|
||||
enabled: build === "oss" || build === "enterprise" // disabled in cloud version
|
||||
// because we don't need to listen for new versions there
|
||||
})
|
||||
export type LatestVersionResponse = {
|
||||
pangolin: {
|
||||
latestVersion: string;
|
||||
releaseNotes: string;
|
||||
};
|
||||
};
|
||||
|
||||
export const productUpdatesQueries = {
|
||||
list: (enabled: boolean) =>
|
||||
queryOptions({
|
||||
queryKey: ["PRODUCT_UPDATES"] as const,
|
||||
queryFn: async ({ signal }) => {
|
||||
const sp = new URLSearchParams({
|
||||
build
|
||||
});
|
||||
const data = await remote.get<ResponseT<ProductUpdate[]>>(
|
||||
`/product-updates?${sp.toString()}`,
|
||||
{ signal }
|
||||
);
|
||||
return data.data;
|
||||
},
|
||||
refetchInterval: (query) => {
|
||||
if (query.state.data) {
|
||||
return durationToMs(5, "minutes");
|
||||
}
|
||||
return false;
|
||||
},
|
||||
enabled
|
||||
}),
|
||||
latestVersion: (enabled: boolean) =>
|
||||
queryOptions({
|
||||
queryKey: ["LATEST_VERSION"] as const,
|
||||
queryFn: async ({ signal }) => {
|
||||
const data = await remote.get<ResponseT<LatestVersionResponse>>(
|
||||
"/versions",
|
||||
{ signal }
|
||||
);
|
||||
return data.data;
|
||||
},
|
||||
placeholderData: keepPreviousData,
|
||||
refetchInterval: (query) => {
|
||||
if (query.state.data) {
|
||||
return durationToMs(30, "minutes");
|
||||
}
|
||||
return false;
|
||||
},
|
||||
enabled: enabled && (build === "oss" || build === "enterprise") // disabled in cloud version
|
||||
// because we don't need to listen for new versions there
|
||||
})
|
||||
};
|
||||
|
||||
@@ -4,6 +4,10 @@ export type Env = {
|
||||
sandbox_mode: boolean;
|
||||
version: string;
|
||||
dashboardUrl: string;
|
||||
notifications: {
|
||||
product_updates: boolean;
|
||||
new_releases: boolean;
|
||||
};
|
||||
};
|
||||
server: {
|
||||
externalPort: string;
|
||||
|
||||
Reference in New Issue
Block a user