Merge branch 'develop' of https://github.com/NodeBB/NodeBB into develop

This commit is contained in:
Barış Soner Uşaklı
2025-09-25 19:20:21 -04:00
7 changed files with 19 additions and 13 deletions

View File

@@ -91,7 +91,7 @@
"lru-cache": "11.2.2", "lru-cache": "11.2.2",
"mime": "3.0.0", "mime": "3.0.0",
"mkdirp": "3.0.1", "mkdirp": "3.0.1",
"mongodb": "6.19.0", "mongodb": "6.20.0",
"morgan": "1.10.1", "morgan": "1.10.1",
"mousetrap": "1.6.5", "mousetrap": "1.6.5",
"multer": "2.0.2", "multer": "2.0.2",
@@ -164,14 +164,14 @@
"@commitlint/config-angular": "19.8.1", "@commitlint/config-angular": "19.8.1",
"coveralls": "3.1.1", "coveralls": "3.1.1",
"@eslint/js": "9.35.0", "@eslint/js": "9.35.0",
"@stylistic/eslint-plugin": "5.3.1", "@stylistic/eslint-plugin": "5.4.0",
"eslint-config-nodebb": "1.1.11", "eslint-config-nodebb": "1.1.11",
"eslint-plugin-import": "2.32.0", "eslint-plugin-import": "2.32.0",
"grunt": "1.6.1", "grunt": "1.6.1",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"husky": "8.0.3", "husky": "8.0.3",
"jsdom": "27.0.0", "jsdom": "27.0.0",
"lint-staged": "16.1.6", "lint-staged": "16.2.1",
"mocha": "11.7.2", "mocha": "11.7.2",
"mocha-lcov-reporter": "1.3.0", "mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5", "mockdate": "3.0.5",

View File

@@ -25,8 +25,14 @@ get:
description: A category identifier description: A category identifier
name: name:
type: string type: string
nickname:
type: string
description: A custom name given to a remote category for de-duplication purposes (not available to local categories.)
description: description:
type: string type: string
descriptionParsed:
type: string
description: A variable-length description of the category (usually displayed underneath the category name). Unlike `description`, this value here will have been run through any parsers installed on the forum (e.g. Markdown)
disabled: disabled:
type: number type: number
icon: icon:

View File

@@ -522,7 +522,7 @@ ActivityPub.record = async ({ id, type, actor }) => {
await Promise.all([ await Promise.all([
db.sortedSetAdd(`activities:datetime`, now, id), db.sortedSetAdd(`activities:datetime`, now, id),
db.sortedSetAdd('domains:lastSeen', now, hostname), ActivityPub.instances.log(hostname),
analytics.increment(['activities', `activities:byType:${type}`, `activities:byHost:${hostname}`]), analytics.increment(['activities', `activities:byType:${type}`, `activities:byHost:${hostname}`]),
]); ]);
}; };

View File

@@ -768,8 +768,8 @@ describe('Controllers', () => {
assert.strictEqual(response.statusCode, 200); assert.strictEqual(response.statusCode, 200);
}); });
it('should return a Article type object', () => { it('should return a Note type object', () => {
assert.strictEqual(body.type, 'Article'); assert.strictEqual(body.type, 'Note');
}); });
}); });

View File

@@ -1,7 +1,7 @@
'use strict'; 'use strict';
const nconf = require('nconf');
const assert = require('assert'); const assert = require('assert');
const nconf = require('nconf');
const db = require('../../src/database'); const db = require('../../src/database');
const controllers = require('../../src/controllers'); const controllers = require('../../src/controllers');
@@ -105,7 +105,7 @@ describe('Analytics', () => {
it('should increment the last seen time of that domain', async () => { it('should increment the last seen time of that domain', async () => {
const id = `https://example.org/activity/${utils.generateUUID()}`; const id = `https://example.org/activity/${utils.generateUUID()}`;
const before = await db.sortedSetScore('domains:lastSeen', 'example.org'); const before = await db.sortedSetScore('instances:lastSeen', 'example.org');
await controllers.activitypub.postInbox({ await controllers.activitypub.postInbox({
body: { body: {
id, id,
@@ -118,7 +118,7 @@ describe('Analytics', () => {
}, },
}, { sendStatus: () => {} }); }, { sendStatus: () => {} });
const after = await db.sortedSetScore('domains:lastSeen', 'example.org'); const after = await db.sortedSetScore('instances:lastSeen', 'example.org');
assert(before && after); assert(before && after);
assert(before < after); assert(before < after);

View File

@@ -63,20 +63,20 @@ describe('FEPs', () => {
activitypub._sent.clear(); activitypub._sent.clear();
}); });
it('should have federated out both Announce(Create(Article)) and Announce(Article)', () => { it('should have federated out both Announce(Create(Note)) and Announce(Note)', () => {
const activities = Array.from(activitypub._sent); const activities = Array.from(activitypub._sent);
const test1 = activities.some((activity) => { const test1 = activities.some((activity) => {
[, activity] = activity; [, activity] = activity;
return activity.type === 'Announce' && return activity.type === 'Announce' &&
activity.object && activity.object.type === 'Create' && activity.object && activity.object.type === 'Create' &&
activity.object.object && activity.object.object.type === 'Article'; activity.object.object && activity.object.object.type === 'Note';
}); });
const test2 = activities.some((activity) => { const test2 = activities.some((activity) => {
[, activity] = activity; [, activity] = activity;
return activity.type === 'Announce' && return activity.type === 'Announce' &&
activity.object && activity.object.type === 'Article'; activity.object && activity.object.type === 'Note';
}); });
assert(test1 && test2); assert(test1 && test2);

View File

@@ -245,7 +245,7 @@ describe('Notes', () => {
const { tid } = await api.topics.create({ uid }, { const { tid } = await api.topics.create({ uid }, {
cid, cid,
title: utils.generateUUID(), title: utils.generateUUID(),
content: utils.generateUUID(), content: 'Guaranteed to be more than 500 characters.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. In vel convallis felis. Phasellus porta erat a elit dignissim efficitur. Sed at sollicitudin erat, finibus sodales ante. Nunc ullamcorper, urna a pulvinar tempor, nunc risus venenatis nunc, id aliquam purus dui ut ante. Nulla sit amet risus sem. Praesent sit amet justo finibus, laoreet odio nec, varius diam. Nullam congue rhoncus lorem, eu accumsan leo aliquam sit amet. Suspendisse fringilla nec libero a tincidunt. Phasellus sapien justo, lacinia ac enim sit amet, pellentesque fermentum neque. Proin sit amet felis vitae libero aliquam pharetra at id nisi. Donec vitae mauris est. Sed hendrerit nisi et nibh auctor hendrerit. Praesent feugiat tortor a dignissim sagittis. Cras sit amet ante justo. Cras consectetur magna vitae volutpat placerat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae',
}); });
assert(tid); assert(tid);