32028 Commits

Author SHA1 Message Date
Misty Release Bot
633fa1407d chore: incrementing version number - v4.10.2 v4.10.2 2026-04-08 15:37:04 +00:00
Barış Soner Uşaklı
9592c1762b dont set isAPI, it is done by middleware.prepareAPI 2026-04-08 11:24:19 -04:00
Barış Soner Uşaklı
55290da01a refactor: use renderHeaderType instead of two variables
add middleware.admin.buildHeaderAsync so it can be called manually with await middleware.admin.buildHeaderAsync(req, res)
2026-04-08 11:19:13 -04:00
Dirk Plate
4366bdd0d8 fix: use file.exists instead of try/catch to detect missing email logo (#14154)
The previous ENOENT check in getLogoSize never worked because image.size
passes the path directly to sharp, which throws a plain Error with message
"Input file is missing" rather than a Node.js ENOENT error. This caused
saving any admin settings to fail when brand:logo was set but the x50 file
was missing (e.g. after a fresh deployment).
2026-04-07 09:11:54 -04:00
Barış Soner Uşaklı
62b65e69ab fix: closes #14151, handle null req.body 2026-04-06 17:20:06 -04:00
Barış Soner Uşaklı
20e751f0e8 fix: remove optional 2026-04-03 22:04:59 -04:00
Barış Soner Uşaklı
0568ef4310 fix: #14147, dont create wrong backlinks
syncBacklinks expects raw post content, html was passed to it from onNewPost since it was switched to use getPostSummary
backlinkRegex was matching  ${nconf.get('url')}/topic/1aef954c-d0dc-45cf-acf2-e3a59f6cc134/foo and return tid=1 instead of the uuid

remove useless if check in syncBacklinks
fixed parseInts on tids
current - remove are both arrays use .length
2026-04-03 21:54:18 -04:00
Barış Soner Uşaklı
072b1e864d dont escape viewport meta tag 2026-04-03 17:01:48 -04:00
Barış Soner Uşaklı
f66317b7a7 add extension to name, when upload profile pictures 2026-04-03 12:03:46 -04:00
Barış Soner Uşaklı
fb48ab3455 fix: user image og:image 2026-03-30 19:42:58 -04:00
Barış Soner Uşaklı
af0e3d9689 fix: closes #14133, don't modify displayName for system groups
added a helper to just modify it for front end
2026-03-30 09:45:07 -04:00
Barış Soner Uşaklı
203f4cc7ff fix: try a save point in retry 2026-03-28 15:16:15 -04:00
Barış Soner Uşaklı
991e977813 fix: try upsert type if it fails 2026-03-28 14:54:34 -04:00
Barış Soner Uşaklı
b04976ed35 test: dont create users parallel 2026-03-28 13:36:24 -04:00
Michele Di Maria
b8fd88fba9 Fix the saving of the statistics on PosgreSQL #14124 (#14129)
* fix: deduplicate postgres sorted set bulk ops to prevent pkey violation

sortedSetIncrByBulk and sortedSetAddBulk did not deduplicate (key, value)
pairs before INSERT, causing "duplicate key value violates unique constraint
legacy_zset_pkey" errors since PostgreSQL ON CONFLICT only resolves against
existing table rows, not within-statement duplicates.

Also adds missing pageviews:ap metrics to analyticsKeys sorted set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use upsert with RETURNING to prevent postgres analytics write failures

Replace the INSERT ON CONFLICT DO NOTHING + separate SELECT verification
pattern with INSERT ON CONFLICT DO UPDATE RETURNING. The old pattern had
an unreliable gap between INSERT and SELECT causing random "failed to
insert keys for objects" errors that blocked all analytics writes.

The no-op upsert (DO UPDATE SET type = existing type) guarantees every
row is returned via RETURNING, eliminating the need for a separate SELECT
and the "missing keys" check entirely. Also deduplicates the keys array
to prevent "cannot affect row a second time" errors with DO UPDATE.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 13:24:34 -04:00
Barış Soner Uşaklı
6c4e928482 fix: on exit, dont write analytics data on all nodes
if you are running 4 nodebbs each one was calling writeData which could trigger duplicate key errors
2026-03-27 16:45:20 -04:00
Barış Soner Uşaklı
4b503db497 refactor: break long line 2026-03-27 16:44:10 -04:00
Barış Soner Uşaklı
1a0c2a21c7 fix: align-center user and name on post queue 2026-03-26 12:43:21 -04:00
Barış Soner Uşaklı
835723482e feat: add unreadNids to /api/notifications 2026-03-26 11:50:55 -04:00
Barış Soner Uşaklı
82d380a38d fix: ./nodebb upgrade on windows 2026-03-25 12:51:44 -04:00
Misty Release Bot
afe8683ef4 chore: update changelog for v4.10.1 2026-03-25 15:03:20 +00:00
Misty Release Bot
08b348d6af chore: incrementing version number - v4.10.1 v4.10.1 2026-03-25 15:03:19 +00:00
Barış Soner Uşaklı
72f48fd9c4 fix: #14123, aria-hidden fixes
add aria-labels
2026-03-25 10:21:24 -04:00
Barış Soner Uşaklı
a10471fce7 fix: #14121, use normalizedPath when uploading
add test for normalize
2026-03-24 12:43:57 -04:00
Barış Soner Uşaklı
9b88516250 refactor: work with different line-clamp values 2026-03-24 10:17:19 -04:00
Barış Soner Uşaklı
bd0157c3eb allow different clam-fade-xx values
like clamp-fade-4 vs clamp-fade-sm-4
2026-03-24 10:05:52 -04:00
Barış Soner Uşaklı
52e42685e8 fix: key name 2026-03-23 11:24:05 -04:00
Barış Soner Uşaklı
ad1433e14b fix: #14108, reset filter on notif dropdown open 2026-03-23 09:51:56 -04:00
Barış Soner Uşaklı
9bcef6b5ea fix: #14116, don't return ban reason if login credentials are incorrect 2026-03-23 09:43:15 -04:00
Barış Soner Uşaklı
43e7f0abb9 feat: add email share 2026-03-22 21:25:43 -04:00
Barış Soner Uşaklı
361134f9a2 fix: share url for ap posts, fallback to window.location.href if pid doesnt exist
closes #14109
2026-03-20 10:38:03 -04:00
Misty Release Bot
c480df9e9c chore: update changelog for v4.10.0 2026-03-19 16:20:32 +00:00
Misty Release Bot
e9da60db3b chore: incrementing version number - v4.10.0 v4.10.0 2026-03-19 16:20:32 +00:00
Julian Lam
8ca34e74bd fix: improve idempotency of ap test 2026-03-19 12:02:26 -04:00
Julian Lam
ebe709da89 fix: call syncfollowcounts on unfollow as well 2026-03-19 11:36:28 -04:00
renovate[bot]
f51e1b2a28 fix(deps): update dependency cronstrue to v3.14.0 (#14107)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-19 10:32:57 -04:00
renovate[bot]
fa7c1a522b fix(deps): update dependency nodemailer to v8.0.3 (#14104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-18 12:50:13 -04:00
Julian Lam
44e78e4775 fix: sync follow counts on local and remote follows, #14105 2026-03-18 12:13:50 -04:00
Julian Lam
cc606677cb fix: cold load redirect should only affect guests 2026-03-18 11:09:08 -04:00
Julian Lam
58d3aa77cd feat: add /world as a potential home page route 2026-03-18 10:28:54 -04:00
Julian Lam
895997b2b8 docs: wrong type for worldDefaultCid 2026-03-18 09:58:23 -04:00
Julian Lam
7e2c7db3b2 fix: schema fix for new api config value 2026-03-18 09:10:13 -04:00
Barış Soner Uşaklı
11b98583b1 check triggerEl in callbacks 2026-03-18 08:48:46 -04:00
Misty Release Bot
483a63c67b Latest translations and fallbacks 2026-03-18 09:07:37 +00:00
renovate[bot]
bea4602638 chore(deps): update dependency lint-staged to v16.4.0 (#14099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-17 14:11:50 -04:00
Julian Lam
7c65471ba4 fix: close notif drawer on item click, fix crash in module 2026-03-17 12:51:14 -04:00
Julian Lam
efaf8eb996 fix: schema fix for new api config value 2026-03-17 12:42:53 -04:00
Barış Soner Uşaklı
4a01d55f6a chore: up develop 2026-03-17 12:29:22 -04:00
Barış Soner Uşaklı
704150d5f1 Merge branch 'master' into develop 2026-03-17 12:12:38 -04:00
Barış Soner Uşaklı
168b17e828 chore: up mentions 2026-03-17 12:11:28 -04:00