summaryrefslogtreecommitdiff
path: root/packages/backend/src/models/SystemWebhook.ts
blob: d6c27eae510d103e6f739baa02a9c1ef720feaed (plain)
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
/*
 * SPDX-FileCopyrightText: syuilo and misskey-project
 * SPDX-License-Identifier: AGPL-3.0-only
 */

import { Column, Entity, Index, PrimaryColumn } from 'typeorm';
import { Serialized } from '@/types.js';
import { id } from './util/id.js';

export const systemWebhookEventTypes = [
	// ユーザからの通報を受けたとき
	'abuseReport',
	// 通報を処理したとき
	'abuseReportResolved',
	// ユーザが作成された時
	'userCreated',
] as const;
export type SystemWebhookEventType = typeof systemWebhookEventTypes[number];

@Entity('system_webhook')
export class MiSystemWebhook {
	@PrimaryColumn(id())
	public id: string;

	/**
	 * 有効かどうか.
	 */
	@Index('IDX_system_webhook_isActive', { synchronize: false })
	@Column('boolean', {
		default: true,
	})
	public isActive: boolean;

	/**
	 * 更新日時.
	 */
	@Column('timestamp with time zone', {
		default: () => 'CURRENT_TIMESTAMP',
	})
	public updatedAt: Date;

	/**
	 * 最後に送信された日時.
	 */
	@Column('timestamp with time zone', {
		nullable: true,
	})
	public latestSentAt: Date | null;

	/**
	 * 最後に送信されたステータスコード
	 */
	@Column('integer', {
		nullable: true,
	})
	public latestStatus: number | null;

	/**
	 * 通知設定名.
	 */
	@Column('varchar', {
		length: 255,
	})
	public name: string;

	/**
	 * イベント種別.
	 */
	@Index('IDX_system_webhook_on', { synchronize: false })
	@Column('varchar', {
		length: 128,
		array: true,
		default: '{}',
	})
	public on: SystemWebhookEventType[];

	/**
	 * Webhook送信先のURL.
	 */
	@Column('varchar', {
		length: 1024,
	})
	public url: string;

	/**
	 * Webhook検証用の値.
	 */
	@Column('varchar', {
		length: 1024,
	})
	public secret: string;

	static deserialize(obj: Serialized<MiSystemWebhook>): MiSystemWebhook {
		return {
			...obj,
			updatedAt: new Date(obj.updatedAt),
			latestSentAt: obj.latestSentAt ? new Date(obj.latestSentAt) : null,
		};
	}
}