summaryrefslogtreecommitdiff
path: root/packages/backend/src/models
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2024-11-14 12:11:37 -0500
committerHazelnoot <acomputerdog@gmail.com>2025-02-16 19:25:02 -0500
commitb65b4ecadcd364adeede80f71a2f106671fb434f (patch)
tree3eb2446c9caeef850444cccc0c905823b66cf039 /packages/backend/src/models
parentmerge: Merge upstream 2025.2.0 (!886) (diff)
downloadsharkey-b65b4ecadcd364adeede80f71a2f106671fb434f.tar.gz
sharkey-b65b4ecadcd364adeede80f71a2f106671fb434f.tar.bz2
sharkey-b65b4ecadcd364adeede80f71a2f106671fb434f.zip
add inbound activity logger for debugging
Diffstat (limited to 'packages/backend/src/models')
-rw-r--r--packages/backend/src/models/RepositoryModule.ts20
-rw-r--r--packages/backend/src/models/SkActivityContext.ts24
-rw-r--r--packages/backend/src/models/SkActivityLog.ts82
-rw-r--r--packages/backend/src/models/_.ts6
4 files changed, 131 insertions, 1 deletions
diff --git a/packages/backend/src/models/RepositoryModule.ts b/packages/backend/src/models/RepositoryModule.ts
index 3a1158a42a..37c4e4fd92 100644
--- a/packages/backend/src/models/RepositoryModule.ts
+++ b/packages/backend/src/models/RepositoryModule.ts
@@ -80,7 +80,9 @@ import {
MiUserPublickey,
MiUserSecurityKey,
MiWebhook,
- NoteEdit
+ NoteEdit,
+ SkActivityContext,
+ SkActivityLog,
} from './_.js';
import type { DataSource } from 'typeorm';
@@ -126,6 +128,18 @@ const $latestNotesRepository: Provider = {
inject: [DI.db],
};
+const $activityContextRepository: Provider = {
+ provide: DI.activityContextRepository,
+ useFactory: (db: DataSource) => db.getRepository(SkActivityContext).extend(miRepository as MiRepository<SkActivityContext>),
+ inject: [DI.db],
+};
+
+const $activityLogsRepository: Provider = {
+ provide: DI.activityLogsRepository,
+ useFactory: (db: DataSource) => db.getRepository(SkActivityLog).extend(miRepository as MiRepository<SkActivityLog>),
+ inject: [DI.db],
+};
+
const $noteFavoritesRepository: Provider = {
provide: DI.noteFavoritesRepository,
useFactory: (db: DataSource) => db.getRepository(MiNoteFavorite).extend(miRepository as MiRepository<MiNoteFavorite>),
@@ -526,6 +540,8 @@ const $noteScheduleRepository: Provider = {
$appsRepository,
$avatarDecorationsRepository,
$latestNotesRepository,
+ $activityContextRepository,
+ $activityLogsRepository,
$noteFavoritesRepository,
$noteThreadMutingsRepository,
$noteReactionsRepository,
@@ -600,6 +616,8 @@ const $noteScheduleRepository: Provider = {
$appsRepository,
$avatarDecorationsRepository,
$latestNotesRepository,
+ $activityContextRepository,
+ $activityLogsRepository,
$noteFavoritesRepository,
$noteThreadMutingsRepository,
$noteReactionsRepository,
diff --git a/packages/backend/src/models/SkActivityContext.ts b/packages/backend/src/models/SkActivityContext.ts
new file mode 100644
index 0000000000..9fdd0a9525
--- /dev/null
+++ b/packages/backend/src/models/SkActivityContext.ts
@@ -0,0 +1,24 @@
+/*
+ * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Column, PrimaryColumn, Entity, Index } from 'typeorm';
+
+@Entity('activity_context')
+export class SkActivityContext {
+ @PrimaryColumn('text')
+ @Index()
+ public md5: string;
+
+ @Column('jsonb')
+ // https://github.com/typeorm/typeorm/issues/8559
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ public json: any;
+
+ constructor(data?: Partial<SkActivityContext>) {
+ if (data) {
+ Object.assign(this, data);
+ }
+ }
+}
diff --git a/packages/backend/src/models/SkActivityLog.ts b/packages/backend/src/models/SkActivityLog.ts
new file mode 100644
index 0000000000..229c333588
--- /dev/null
+++ b/packages/backend/src/models/SkActivityLog.ts
@@ -0,0 +1,82 @@
+/*
+ * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
+import { SkActivityContext } from '@/models/SkActivityContext.js';
+import { MiUser } from '@/models/_.js';
+import { id } from './util/id.js';
+
+@Entity('activity_log')
+export class SkActivityLog {
+ @PrimaryColumn(id())
+ public id: string;
+
+ @Index()
+ @Column('timestamptz')
+ public at: Date;
+
+ @Column({
+ type: 'text',
+ name: 'key_id',
+ })
+ public keyId: string;
+
+ @Index()
+ @Column('text')
+ public host: string;
+
+ @Column('boolean')
+ public verified: boolean;
+
+ @Column('boolean')
+ public accepted: boolean;
+
+ @Column('text')
+ public result: string;
+
+ @Column('jsonb')
+ // https://github.com/typeorm/typeorm/issues/8559
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ public activity: any;
+
+ @Column({
+ type: 'text',
+ name: 'context_hash',
+ nullable: true,
+ })
+ public contextHash: string | null;
+
+ @ManyToOne(() => SkActivityContext, {
+ onDelete: 'CASCADE',
+ nullable: true,
+ })
+ @JoinColumn({
+ name: 'context_hash',
+ })
+ public context: SkActivityContext | null;
+
+ @Column({
+ type: 'varchar' as const,
+ length: 32,
+ name: 'auth_user_id',
+ nullable: true,
+ })
+ public authUserId: string | null;
+
+ @ManyToOne(() => MiUser, {
+ onDelete: 'CASCADE',
+ nullable: true,
+ })
+ @JoinColumn({
+ name: 'auth_user_id',
+ })
+ public authUser: MiUser | null;
+
+ constructor(data?: Partial<SkActivityLog>) {
+ if (data) {
+ Object.assign(this, data);
+ }
+ }
+}
diff --git a/packages/backend/src/models/_.ts b/packages/backend/src/models/_.ts
index 9a4ebfc90f..aeb6133d70 100644
--- a/packages/backend/src/models/_.ts
+++ b/packages/backend/src/models/_.ts
@@ -82,6 +82,8 @@ import { NoteEdit } from '@/models/NoteEdit.js';
import { MiBubbleGameRecord } from '@/models/BubbleGameRecord.js';
import { MiReversiGame } from '@/models/ReversiGame.js';
import { MiNoteSchedule } from '@/models/NoteSchedule.js';
+import { SkActivityLog } from '@/models/SkActivityLog.js';
+import { SkActivityContext } from './SkActivityContext.js';
import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js';
export interface MiRepository<T extends ObjectLiteral> {
@@ -129,6 +131,8 @@ export const miRepository = {
export {
SkLatestNote,
+ SkActivityContext,
+ SkActivityLog,
MiAbuseUserReport,
MiAbuseReportNotificationRecipient,
MiAccessToken,
@@ -229,6 +233,8 @@ export type HashtagsRepository = Repository<MiHashtag> & MiRepository<MiHashtag>
export type InstancesRepository = Repository<MiInstance> & MiRepository<MiInstance>;
export type MetasRepository = Repository<MiMeta> & MiRepository<MiMeta>;
export type LatestNotesRepository = Repository<SkLatestNote> & MiRepository<SkLatestNote>;
+export type ActivityContextRepository = Repository<SkActivityContext> & MiRepository<SkActivityContext>;
+export type ActivityLogsRepository = Repository<SkActivityLog> & MiRepository<SkActivityLog>;
export type ModerationLogsRepository = Repository<MiModerationLog> & MiRepository<MiModerationLog>;
export type MutingsRepository = Repository<MiMuting> & MiRepository<MiMuting>;
export type RenoteMutingsRepository = Repository<MiRenoteMuting> & MiRepository<MiRenoteMuting>;