Repository navigation
Expand file tree
/
Copy pathconfig.ts
More file actions
145 lines (121 loc) 路 4.32 KB
/
Copy pathconfig.ts
File metadata and controls
145 lines (121 loc) 路 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import { PostTypeOpts } from '@/src/app/components/PostsList'
import { PreviewImage } from 'notion-types'
import { cn } from './utils'
export const numPostsToShow = 12
export const defaultBlurDataURL =
'data:image/webp;base64,UklGRu4CAABXRUJQVlA4WAoAAAAgAAAA+wAApwAASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADZWUDggAAEAAHAPAJ0BKvwAqAA+7Xa3VqmnJSOgKAEwHYlpbt1fqZxA/IArN2vFych77iezf2IwQKTtQI/RqjOdjq6pcOr5lpldrCjSn5FYIDAK5T0+7vcmKybbL6g6tSn7tWOv2ZxfWQNgEU/JeCq/k9zzuPl8W5gNqTbm15NB3zOe+XPb6vkmRHm8AAD+7o9aHj3aLa14yWQgMZs8TuamPLH5rZylxChra4B5dWHgwOps5SFJeulgIDP3UYKDX745YTtU1tek9VoKCM1AtUiD8IcS+R9XAhJ4zdKfFy6pI6GocwBeHqw2Ccx6spAjE6DfRuYxQAa1Low2YbwG8MRsesGFW6AAAAA='
export const defaultCustomPreviewImage: PreviewImage = {
originalWidth: 252,
originalHeight: 168,
dataURIBase64: defaultBlurDataURL
}
export const defaultPostTitle = 'Untitled'
export const defaultPostDate = new Date().toISOString().split('T')[0]
export const defaultPostTypeOpts: PostTypeOpts = {
fontClassName: 'font-sans text-[0.95rem]',
newLabel: 'new',
updatedLabel: 'updated',
humanizeDate: true,
maxDaysWinthin: 14,
autoHideAddedDate: true,
hideOldDate: true
}
export const sectionOuterClass = cn('border-border-muted bg-bg overflow-hidden rounded-lg border')
export const postSimpleListContainerClass = cn(
'divide-border-muted flex flex-col divide-y overflow-hidden',
sectionOuterClass
)
export const postFontClassName = 'font-quicksand'
// ============================================================================
// ERROR NOTIFICATIONS CONFIGURATION
// ============================================================================
export const errorNotificationsConfig = {
rateLimitMs: 60 * 60 * 1000, // 1 hour
adminEmail: process.env.ADMIN_EMAIL ?? ''
}
// ============================================================================
// REDIS CACHE TTL CONFIGURATION
// ============================================================================
/**
* Cache TTL (Time-To-Live) Configuration
*
* Two TTL Strategy (Refresh-Ahead Pattern):
* - softTTL: When cache is considered "stale" and should refresh in BACKGROUND
* (user gets instant response, refresh happens async)
* - hardTTL: When Redis actually DELETES the cache key
* (safety net for long Notion API outages)
*
* Guidelines:
* - softTTL: Short for frequently updated content, long for stable data
* - hardTTL: Always long (7-14 days) to survive API outages
*/
const MINUTE = 60
const HOUR = 60 * MINUTE
const DAY = 24 * HOUR
const FIXED_HARD_TTL = 30 * DAY
export const redisCacheTTL = {
/**
* Posts cache (official Notion DB API)
* Updates frequently, needs fresh data
*/
posts: {
softTTL: 6 * HOUR,
hardTTL: FIXED_HARD_TTL
},
/**
* Unofficial posts cache (published Notion page)
* Large dataset, less frequent updates
*/
unofficialPosts: {
softTTL: 6 * HOUR,
hardTTL: FIXED_HARD_TTL
},
/**
* Topics/Tags cache
* Taxonomy rarely changes
*/
topics: {
softTTL: 2 * DAY,
hardTTL: FIXED_HARD_TTL
},
/**
* Books cache (reading list)
* Stable collection, infrequent updates
*/
books: {
softTTL: 2 * DAY,
hardTTL: FIXED_HARD_TTL
},
/**
* Tools cache
* Tool collection rarely changes
*/
tools: {
softTTL: 2 * DAY,
hardTTL: FIXED_HARD_TTL
},
/**
* Blocks cache (page content)
* Content updates moderately
*/
blocks: {
softTTL: 3 * HOUR,
hardTTL: FIXED_HARD_TTL
},
/**
* Custom emoji cache
* URLs almost never change
*/
emoji: {
softTTL: 2 * DAY,
hardTTL: FIXED_HARD_TTL
},
/**
* Record map cache
* Page content changes moderately
*/
recordMap: {
softTTL: 1 * HOUR, // 1 hour - page content changes moderately
hardTTL: FIXED_HARD_TTL
}
} as const