Compare commits

..
2 Commits
7 changed files with 265 additions and 24 deletions
+17 -7
View File
@@ -32,16 +32,26 @@ function build_filters(array $opts): array {
}
}
// Date range filter (from_date / to_date as YYYY-MM-DD)
// Date/time range filter (supports YYYY-MM-DD or YYYY-MM-DD HH:MM)
$from_date = $opts['from_date'] ?? '';
$to_date = $opts['to_date'] ?? '';
if ($from_date !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
if ($from_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::timestamp)::BIGINT';
$params[':from_date'] = $from_date . ':00';
}
}
if ($to_date !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
if ($to_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM :to_date::timestamp)::BIGINT';
$params[':to_date'] = $to_date . ':00';
}
}
// Follows filter
+16 -6
View File
@@ -233,13 +233,23 @@ if ($method === 'POST') {
$from_date = $query['from_date'] ?? '';
$to_date = $query['to_date'] ?? '';
if ($from_date !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
if ($from_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::timestamp)::BIGINT';
$params[':from_date'] = $from_date . ':00';
}
}
if ($to_date !== '' && preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
if ($to_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM :to_date::timestamp)::BIGINT';
$params[':to_date'] = $to_date . ':00';
}
}
$follows_filter = $query['follows_filter'];
+20 -5
View File
@@ -736,23 +736,33 @@ function newCleanupQuery() {
});
document.getElementById('cleanup-kinds').value = '';
document.getElementById('cleanup-from-date').value = '';
document.getElementById('cleanup-from-time').value = '';
document.getElementById('cleanup-to-date').value = '';
document.getElementById('cleanup-to-time').value = '';
document.getElementById('cleanup-max-events').value = '0';
document.getElementById('cleanup-results-group').style.display = 'none';
document.getElementById('cleanup-name').focus();
}
// ── Combine date + time inputs into a single datetime string ───────────
function combineDateTime(dateId, timeId) {
const dateVal = document.getElementById(dateId).value;
const timeVal = document.getElementById(timeId).value;
if (!dateVal) return '';
return timeVal ? dateVal + ' ' + timeVal : dateVal;
}
// ── Read filter values from the form ───────────────────────────────────
function readCleanupFilters() {
const followsEl = document.querySelector('input[name="cleanup-follows"]:checked');
const follows_filter = followsEl ? followsEl.value : 'all';
const kindsRaw = document.getElementById('cleanup-kinds').value.trim();
const kinds = kindsRaw ? kindsRaw.split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n) && n > 0) : [];
const fromDate = document.getElementById('cleanup-from-date').value;
const toDate = document.getElementById('cleanup-to-date').value;
const from_date = combineDateTime('cleanup-from-date', 'cleanup-from-time');
const to_date = combineDateTime('cleanup-to-date', 'cleanup-to-time');
const max_events = parseInt(document.getElementById('cleanup-max-events').value, 10) || 0;
const name = document.getElementById('cleanup-name').value.trim();
return { name, follows_filter, kinds, from_date: fromDate, to_date: toDate, max_events };
return { name, follows_filter, kinds, from_date, to_date, max_events };
}
// ── Preview ────────────────────────────────────────────────────────────
@@ -950,8 +960,13 @@ async function loadSavedCleanupQuery(id) {
r.checked = r.value === q.follows_filter;
});
document.getElementById('cleanup-kinds').value = (q.kinds || []).join(', ');
document.getElementById('cleanup-from-date').value = q.from_date || '';
document.getElementById('cleanup-to-date').value = q.to_date || '';
// Split stored datetime into date + time parts
const fromParts = (q.from_date || '').split(' ');
document.getElementById('cleanup-from-date').value = fromParts[0] || '';
document.getElementById('cleanup-from-time').value = fromParts[1] || '';
const toParts = (q.to_date || '').split(' ');
document.getElementById('cleanup-to-date').value = toParts[0] || '';
document.getElementById('cleanup-to-time').value = toParts[1] || '';
document.getElementById('cleanup-max-events').value = q.max_events;
document.getElementById('cleanup-results-group').style.display = 'none';
+33
View File
@@ -281,6 +281,39 @@ body {
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
/* Cleanup Date/Time Inputs */
.datetime-group {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.cleanup-date-input {
font-family: var(--font-family);
font-size: 13px;
padding: 4px 6px;
border: var(--border-width) solid var(--border-color);
border-radius: var(--border-radius);
background: var(--secondary-color);
color: var(--primary-color);
width: 160px;
}
.cleanup-time-input {
font-family: var(--font-family);
font-size: 13px;
padding: 4px 6px;
border: var(--border-width) solid var(--border-color);
border-radius: var(--border-radius);
background: var(--secondary-color);
color: var(--primary-color);
width: 110px;
}
.datetime-hint {
font-size: 11px;
color: var(--muted-color);
font-style: italic;
}
/* Cleanup Confirmation Modal */
.modal-overlay {
position: fixed;
+12 -4
View File
@@ -453,12 +453,20 @@ $display_name = $relay_version ? ($relay_name . ' ' . $relay_version) : $relay_n
</div>
</div>
<div class="form-group">
<label for="cleanup-from-date">From (delete events after this date, leave empty for no bound):</label>
<input type="date" id="cleanup-from-date" style="width:200px">
<label>From (delete events after this):</label>
<div class="datetime-group">
<input type="date" id="cleanup-from-date" class="cleanup-date-input">
<input type="time" id="cleanup-from-time" class="cleanup-time-input">
<span class="datetime-hint">leave empty for no bound</span>
</div>
</div>
<div class="form-group">
<label for="cleanup-to-date">To (delete events before this date, leave empty for no bound):</label>
<input type="date" id="cleanup-to-date" style="width:200px">
<label>To (delete events before this):</label>
<div class="datetime-group">
<input type="date" id="cleanup-to-date" class="cleanup-date-input">
<input type="time" id="cleanup-to-time" class="cleanup-time-input">
<span class="datetime-hint">leave empty for no bound</span>
</div>
</div>
<div class="form-group">
<label for="cleanup-max-events">Max Events (0 = no limit):</label>
+165
View File
@@ -3843,3 +3843,168 @@ Stack trace:
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 Accepted
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 Closing
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 Accepted
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 Closing
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 Accepted
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 Closing
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 Accepted
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 Closing
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 Accepted
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 Closing
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 Accepted
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 Closing
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 Accepted
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 Closing
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 Accepted
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 Closing
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 Accepted
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 Closing
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 Accepted
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 Closing
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 Accepted
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 Closing
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 Accepted
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 Closing
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 Accepted
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 Closing
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 Accepted
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 Closing
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 Accepted
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 Closing
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 Accepted
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 Closing
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 Accepted
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 Closing
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 Accepted
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 Closing
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 Accepted
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 Closing
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 Accepted
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 Closing
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 Accepted
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 Closing
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 Accepted
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 Closing
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 Accepted
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 Closing
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 Accepted
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 Closing
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 Accepted
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 Closing
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 Accepted
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 Closing
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 Accepted
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 Closing
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 Accepted
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 Closing
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 Accepted
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 Closing
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 Accepted
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 [200]: GET /index.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 [200]: GET /assets/index.css
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 [200]: GET /assets/app.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 [200]: GET /api/stats.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 [200]: GET /favicon.ico
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 [200]: GET /api/stats.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 Closing
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 Accepted
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 [200]: GET /index.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 [200]: GET /assets/index.css
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 [200]: GET /assets/app.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 [200]: GET /api/stats.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 [200]: GET /favicon.ico
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 [200]: GET /api/stats.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 Closing
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 Accepted
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 Closing
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 Accepted
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 Closing
+2 -2
View File
@@ -13,8 +13,8 @@
// Using CRELAY_ prefix to avoid conflicts with nostr_core_lib VERSION macros
#define CRELAY_VERSION_MAJOR 2
#define CRELAY_VERSION_MINOR 1
#define CRELAY_VERSION_PATCH 33
#define CRELAY_VERSION "v2.1.33"
#define CRELAY_VERSION_PATCH 35
#define CRELAY_VERSION "v2.1.35"
// Relay metadata (authoritative source for NIP-11 information)
#define RELAY_NAME "C-Relay-PG"