Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions api/gist.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// @ts-check

import { CONSTANTS, renderError, parseBoolean } from "../src/common/utils.js";
import { renderError, parseBoolean } from "../src/common/utils.js";
import { isLocaleAvailable } from "../src/translations.js";
import { renderGistCard } from "../src/cards/gist.js";
import { fetchGist } from "../src/fetchers/gist.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
Expand Down Expand Up @@ -65,9 +66,9 @@ export default async (req, res) => {
const gistData = await fetchGist(id);
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(cache_seconds, 10),
def: CONSTANTS.TWO_DAY,
min: CONSTANTS.TWO_DAY,
max: CONSTANTS.SIX_DAY,
def: CACHE_TTL.GIST_CARD.DEFAULT,
min: CACHE_TTL.GIST_CARD.MIN,
max: CACHE_TTL.GIST_CARD.MAX,
});

setCacheHeaders(res, cacheSeconds);
Expand Down
14 changes: 5 additions & 9 deletions api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
import { renderStatsCard } from "../src/cards/stats.js";
import { guardAccess } from "../src/common/access.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
} from "../src/common/cache.js";
import {
CONSTANTS,
parseArray,
parseBoolean,
renderError,
} from "../src/common/utils.js";
import { parseArray, parseBoolean, renderError } from "../src/common/utils.js";
import { fetchStats } from "../src/fetchers/stats.js";
import { isLocaleAvailable } from "../src/translations.js";

Expand Down Expand Up @@ -94,9 +90,9 @@ export default async (req, res) => {
);
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(cache_seconds, 10),
def: CONSTANTS.CARD_CACHE_SECONDS,
min: CONSTANTS.TWELVE_HOURS,
max: CONSTANTS.TWO_DAY,
def: CACHE_TTL.STATS_CARD.DEFAULT,
min: CACHE_TTL.STATS_CARD.MIN,
max: CACHE_TTL.STATS_CARD.MAX,
});

setCacheHeaders(res, cacheSeconds);
Expand Down
9 changes: 5 additions & 4 deletions api/pin.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import { renderRepoCard } from "../src/cards/repo.js";
import { guardAccess } from "../src/common/access.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
} from "../src/common/cache.js";
import { CONSTANTS, parseBoolean, renderError } from "../src/common/utils.js";
import { parseBoolean, renderError } from "../src/common/utils.js";
import { fetchRepo } from "../src/fetchers/repo.js";
import { isLocaleAvailable } from "../src/translations.js";

Expand Down Expand Up @@ -67,9 +68,9 @@ export default async (req, res) => {
const repoData = await fetchRepo(username, repo);
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(cache_seconds, 10),
def: CONSTANTS.PIN_CARD_CACHE_SECONDS,
min: CONSTANTS.ONE_DAY,
max: CONSTANTS.TEN_DAY,
def: CACHE_TTL.PIN_CARD.DEFAULT,
min: CACHE_TTL.PIN_CARD.MIN,
max: CACHE_TTL.PIN_CARD.MAX,
});

setCacheHeaders(res, cacheSeconds);
Expand Down
14 changes: 5 additions & 9 deletions api/top-langs.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
import { renderTopLanguages } from "../src/cards/top-languages.js";
import { guardAccess } from "../src/common/access.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
} from "../src/common/cache.js";
import {
CONSTANTS,
parseArray,
parseBoolean,
renderError,
} from "../src/common/utils.js";
import { parseArray, parseBoolean, renderError } from "../src/common/utils.js";
import { fetchTopLanguages } from "../src/fetchers/top-languages.js";
import { isLocaleAvailable } from "../src/translations.js";

Expand Down Expand Up @@ -124,9 +120,9 @@ export default async (req, res) => {
);
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(cache_seconds, 10),
def: CONSTANTS.TOP_LANGS_CACHE_SECONDS,
min: CONSTANTS.TWO_DAY,
max: CONSTANTS.TEN_DAY,
def: CACHE_TTL.TOP_LANGS_CARD.DEFAULT,
min: CACHE_TTL.TOP_LANGS_CARD.MIN,
max: CACHE_TTL.TOP_LANGS_CARD.MAX,
});

setCacheHeaders(res, cacheSeconds);
Expand Down
14 changes: 5 additions & 9 deletions api/wakatime.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
// @ts-check

import { renderWakatimeCard } from "../src/cards/wakatime.js";
import {
CONSTANTS,
parseArray,
parseBoolean,
renderError,
} from "../src/common/utils.js";
import { parseArray, parseBoolean, renderError } from "../src/common/utils.js";
import { fetchWakatimeStats } from "../src/fetchers/wakatime.js";
import { isLocaleAvailable } from "../src/translations.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
Expand Down Expand Up @@ -80,9 +76,9 @@ export default async (req, res) => {
const stats = await fetchWakatimeStats({ username, api_domain });
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(cache_seconds, 10),
def: CONSTANTS.CARD_CACHE_SECONDS,
min: CONSTANTS.SIX_HOURS,
max: CONSTANTS.TWO_DAY,
def: CACHE_TTL.WAKATIME_CARD.DEFAULT,
min: CACHE_TTL.WAKATIME_CARD.MIN,
max: CACHE_TTL.WAKATIME_CARD.MAX,
});

setCacheHeaders(res, cacheSeconds);
Expand Down
76 changes: 70 additions & 6 deletions src/common/cache.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,64 @@
// @ts-check

import { clampValue, CONSTANTS } from "./utils.js";
import { clampValue } from "./utils.js";

const MIN = 60;
const HOUR = 60 * MIN;
const DAY = 24 * HOUR;

/**
* Common durations in seconds.
*/
const DURATIONS = {
ONE_MINUTE: MIN,
FIVE_MINUTES: 5 * MIN,
TEN_MINUTES: 10 * MIN,
FIFTEEN_MINUTES: 15 * MIN,
THIRTY_MINUTES: 30 * MIN,

TWO_HOURS: 2 * HOUR,
FOUR_HOURS: 4 * HOUR,
SIX_HOURS: 6 * HOUR,
EIGHT_HOURS: 8 * HOUR,
TWELVE_HOURS: 12 * HOUR,

ONE_DAY: DAY,
TWO_DAY: 2 * DAY,
SIX_DAY: 6 * DAY,
TEN_DAY: 10 * DAY,
};

/**
* Common cache TTL values in seconds.
*/
const CACHE_TTL = {
STATS_CARD: {
DEFAULT: DURATIONS.ONE_DAY,
MIN: DURATIONS.TWELVE_HOURS,
MAX: DURATIONS.TWO_DAY,
},
TOP_LANGS_CARD: {
DEFAULT: DURATIONS.SIX_DAY,
MIN: DURATIONS.TWO_DAY,
MAX: DURATIONS.TEN_DAY,
},
PIN_CARD: {
DEFAULT: DURATIONS.TEN_DAY,
MIN: DURATIONS.ONE_DAY,
MAX: DURATIONS.TEN_DAY,
},
GIST_CARD: {
DEFAULT: DURATIONS.TWO_DAY,
MIN: DURATIONS.ONE_DAY,
MAX: DURATIONS.TEN_DAY,
},
WAKATIME_CARD: {
DEFAULT: DURATIONS.ONE_DAY,
MIN: DURATIONS.TWELVE_HOURS,
MAX: DURATIONS.TWO_DAY,
},
ERROR: DURATIONS.TEN_MINUTES,
};

/**
* Resolves the cache seconds based on the requested, default, min, and max values.
Expand Down Expand Up @@ -56,7 +114,7 @@ const setCacheHeaders = (res, cacheSeconds) => {
"Cache-Control",
`max-age=${cacheSeconds}, ` +
`s-maxage=${cacheSeconds}, ` +
`stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
`stale-while-revalidate=${DURATIONS.ONE_DAY}`,
);
};

Expand All @@ -80,10 +138,16 @@ const setErrorCacheHeaders = (res) => {
// Use lower cache period for errors.
res.setHeader(
"Cache-Control",
`max-age=${CONSTANTS.ERROR_CACHE_SECONDS}, ` +
`s-maxage=${CONSTANTS.ERROR_CACHE_SECONDS}, ` +
`stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
`max-age=${CACHE_TTL.ERROR}, ` +
`s-maxage=${CACHE_TTL.ERROR}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`,
);
};

export { resolveCacheSeconds, setCacheHeaders, setErrorCacheHeaders };
export {
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
DURATIONS,
CACHE_TTL,
};
3 changes: 2 additions & 1 deletion src/common/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @ts-check

export { blacklist } from "./blacklist.js";
export { Card } from "./Card.js";
export { createProgressNode } from "./createProgressNode.js";
Expand All @@ -20,7 +22,6 @@ export {
getCardColors,
wrapTextMultiline,
logger,
CONSTANTS,
CustomError,
MissingParamError,
measureText,
Expand Down
29 changes: 0 additions & 29 deletions src/common/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -452,34 +452,6 @@ const noop = () => {};
const logger =
process.env.NODE_ENV === "test" ? { log: noop, error: noop } : console;

const MIN = 60;
const HOUR = 60 * MIN;
const DAY = 24 * HOUR;

const CONSTANTS = {
ONE_MINUTE: MIN,
FIVE_MINUTES: 5 * MIN,
TEN_MINUTES: 10 * MIN,
FIFTEEN_MINUTES: 15 * MIN,
THIRTY_MINUTES: 30 * MIN,

TWO_HOURS: 2 * HOUR,
FOUR_HOURS: 4 * HOUR,
SIX_HOURS: 6 * HOUR,
EIGHT_HOURS: 8 * HOUR,
TWELVE_HOURS: 12 * HOUR,

ONE_DAY: DAY,
TWO_DAY: 2 * DAY,
SIX_DAY: 6 * DAY,
TEN_DAY: 10 * DAY,

CARD_CACHE_SECONDS: DAY,
TOP_LANGS_CACHE_SECONDS: 6 * DAY,
PIN_CARD_CACHE_SECONDS: 10 * DAY,
ERROR_CACHE_SECONDS: 10 * MIN,
};

/**
* Missing query parameter class.
*/
Expand Down Expand Up @@ -648,7 +620,6 @@ export {
getCardColors,
wrapTextMultiline,
logger,
CONSTANTS,
CustomError,
MissingParamError,
measureText,
Expand Down
Loading
Loading