-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
142 lines (123 loc) · 6.2 KB
/
Copy path.env.example
File metadata and controls
142 lines (123 loc) · 6.2 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
# rssamplifier.com — copy to .env and fill in.
# Team copy lives in logicsrc: `logicsrc teams pull profullstack rssamplifier-com prod`
# Turso / libSQL. A file: URL needs no auth token, which is how the tests and
# local development run without a Turso account:
# TURSO_DATABASE_URL=file:./local.db
TURSO_DATABASE_URL=libsql://YOUR-DB.turso.io
TURSO_AUTH_TOKEN=
# Maximum statements from queued callers folded into one remote transaction.
# Disabled by default: production's throttled primary timed out when five
# otherwise-valid first crawls shared a transaction. Raise only after measuring
# the provider path with representative first-crawl statements.
TURSO_WRITE_GROUP_STATEMENTS=1
# Recovery mode for a large first-crawl backlog. Turso's explicit transaction
# path can be much slower than autocommit writes on a saturated database. The
# first switch uses two serialized autocommits per feed; the second reserves
# writes for feeds/posts until the backlog is under control.
TURSO_CRAWL_AUTOCOMMIT=0
CRAWL_AUXILIARY_WRITES=1
CRAWL_CATCHUP=0
# Public origin, used for canonical URLs, OPML, llms.txt and JSON-LD.
SITE_URL=https://rssamplifier.com
# Selling crawl access to AI training crawlers (GPTBot, ClaudeBot, CCBot,
# meta-externalagent, …): a dollar buys a day, settled in USDC by CoinPay. See
# apps/web/src/lib/crawl-gateway.js. A SCOPED CoinPay key (cp_live_…, from the
# business's API Keys tab, with payments:create — the legacy business key is
# refused) and the EVM address the USDC is paid to. With either unset the
# training crawlers are still answered 402, just with nothing for sale.
COINPAY_X402_KEY=
CRAWL_PAY_TO=
# Salt for HMAC-hashing submitter IPs in the audit log. Generate with:
# node -e "console.log(crypto.randomUUID())"
# Leave unset to disable IP hashing entirely rather than fall back to a
# predictable digest.
IP_HASH_SALT=
# Poller daemon
POLL_INTERVAL_SECONDS=60
POLL_BATCH_SIZE=25
# Looking up what each feed offers as its picture: its site's og:image, fetched
# and measured. Feeds per pass and how often a pass runs. Small and unhurried on
# purpose — it is speculative work against other people's servers, every feed is
# answered exactly once, and nothing on the site is waiting for it. Set the
# switch to 0 to pause the work without changing its tuning.
CARD_BACKFILL=1
CARD_BACKFILL_BATCH=8
CARD_BACKFILL_SECONDS=20
# OpenWebring (logicsrc.com/openwebring). The crawler seeds one ring per
# well-covered topic and reads every member's front page for a link back, one
# site at a time, oldest verdict first. RING_VERIFY=0 pauses the pass and the
# seeding without changing their tuning. RING_TOPICS is how many topics get a
# ring (the most covered, at least five eligible feeds each); RING_BATCH
# members are checked per pass, every RING_SECONDS; a verdict stands
# RING_RECHECK_DAYS before the member is looked at again; the rings are
# re-seeded every RING_SEED_SECONDS so a feed new to a topic joins at the end.
# One-off: `node --env-file=.env scripts/seed-rings.mjs`.
RING_VERIFY=1
RING_TOPICS=20
RING_BATCH=25
RING_SECONDS=60
RING_RECHECK_DAYS=7
RING_SEED_SECONDS=21600
# Nonessential maintenance can be paused while a large first-crawl backlog owns
# the database write path. The work is resumable when these are switched on.
CLUSTER_BACKFILL=1
# --------------------------------------------------------------------- X / Twitter
# X publishes no feeds, so posts are collected through a provider and mirrored
# at /x/<handle>. Off by default: with this unset nothing is collected, existing
# X feeds keep serving what they hold, and no source is marked unhealthy for it.
X_ENABLED=false
# Failover order. The provider never appears in a public URL, so this can change
# under a live subscriber without their reader noticing.
X_PRIMARY_PROVIDER=rsshub
X_FALLBACK_PROVIDERS=teapot,official
# Self-hosted, alongside the app, and not exposed publicly. A provider whose
# base URL is unset is skipped rather than guessed at.
RSSHUB_BASE_URL=
RSSHUB_ACCESS_KEY=
TEAPOT_BASE_URL=
# The official API: the only provider that costs money per request, hence the
# caps. 0 means unlimited.
X_API_BEARER_TOKEN=
X_API_DAILY_READS=0
X_API_MONTHLY_READS=0
X_API_MAX_RPM=0
# Logged-in X sessions for the unofficial providers, as JSON:
# [{"id":"x-1","authToken":"...","ct0":"..."}]
#
# These are a full login to an X account - whoever holds them can post as it and
# change its password. They live here rather than in a table so that a leaked
# database dump carries none of them; x_sessions holds health state only. Use
# dedicated accounts, and separate ones for production and development.
#
# The positional pair X_AUTH_TOKENS / X_CT0_TOKENS also works and is a trap:
# the lists are matched by index, so removing one dead account from the middle
# of the first and forgetting the second pairs every later token with the wrong
# cookie. Prefer the JSON form, which cannot express that.
X_SESSIONS=
X_FETCH_TIMEOUT_MS=15000
X_SESSION_COOLDOWN_SECONDS=900
# ------------------------------------------------------------------- Instagram
# Collected through the same embedded RSSHub daemon as X, so it needs no base
# URL of its own — only a logged-in Instagram cookie on the RSSHub side.
# Accounts and hashtags only; stories expire and are not collected.
IG_COOKIE=
# -------------------------------------------------------------------- Facebook
# Facebook publishes no feed and shows nothing without a login, so a Page is
# read with a logged-in session off mbasic.facebook.com - the same bargain as
# the X and Instagram cookies above, not a different one.
#
# A normal browser session, copied from devtools. c_user and xs are the two that
# matter; extra cookies are harmless.
#
# FB_COOKIE='c_user=...; xs=...'
#
# This is a login to somebody's Facebook account. Vault, not a service env, and
# never a database column. Use a dedicated account: expect it to be challenged,
# and expect /fb/ to be the least dependable namespace on the site.
FB_COOKIE=
# Optional, and almost never applicable. Meta's Graph API returns a Page's posts
# only to somebody who ADMINISTERS that Page; where a token exists it is used in
# preference to scraping, because a supported API beats guessing at markup.
#
# FB_PAGE_TOKENS=[{"page":"MyPage","token":"EAA..."}]
FB_PAGE_TOKENS=