@hed-hog/core 0.0.304 → 0.0.306
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -36
- package/dist/auth/auth.controller.d.ts +0 -3
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +4 -7
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +6 -3
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +9 -0
- package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts.map +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.controller.js +12 -0
- package/dist/dashboard/dashboard-core/dashboard-core.controller.js.map +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +7 -0
- package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts.map +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.service.js +45 -1
- package/dist/dashboard/dashboard-core/dashboard-core.service.js.map +1 -1
- package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts +9 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts.map +1 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.js +49 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.js.map +1 -0
- package/dist/mail-sent/mail-sent.controller.d.ts +24 -2
- package/dist/mail-sent/mail-sent.controller.d.ts.map +1 -1
- package/dist/mail-sent/mail-sent.controller.js +5 -3
- package/dist/mail-sent/mail-sent.controller.js.map +1 -1
- package/dist/mail-sent/mail-sent.service.d.ts +28 -3
- package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
- package/dist/mail-sent/mail-sent.service.js +108 -3
- package/dist/mail-sent/mail-sent.service.js.map +1 -1
- package/dist/oauth/oauth-callback-coordinator.service.d.ts +18 -0
- package/dist/oauth/oauth-callback-coordinator.service.d.ts.map +1 -0
- package/dist/oauth/oauth-callback-coordinator.service.js +137 -0
- package/dist/oauth/oauth-callback-coordinator.service.js.map +1 -0
- package/dist/oauth/oauth.controller.d.ts +4 -2
- package/dist/oauth/oauth.controller.d.ts.map +1 -1
- package/dist/oauth/oauth.controller.js +39 -11
- package/dist/oauth/oauth.controller.js.map +1 -1
- package/dist/oauth/oauth.errors.d.ts +16 -0
- package/dist/oauth/oauth.errors.d.ts.map +1 -0
- package/dist/oauth/oauth.errors.js +30 -0
- package/dist/oauth/oauth.errors.js.map +1 -0
- package/dist/oauth/oauth.module.d.ts.map +1 -1
- package/dist/oauth/oauth.module.js +10 -1
- package/dist/oauth/oauth.module.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +9 -1
- package/dist/oauth/oauth.service.d.ts.map +1 -1
- package/dist/oauth/oauth.service.js +97 -24
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/oauth/providers/abstract.provider.d.ts +6 -0
- package/dist/oauth/providers/abstract.provider.d.ts.map +1 -1
- package/dist/oauth/providers/abstract.provider.js +34 -0
- package/dist/oauth/providers/abstract.provider.js.map +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.d.ts +3 -0
- package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.js +40 -22
- package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
- package/dist/security/security.service.d.ts +1 -0
- package/dist/security/security.service.d.ts.map +1 -1
- package/dist/security/security.service.js +9 -10
- package/dist/security/security.service.js.map +1 -1
- package/dist/session/session.service.d.ts +5 -1
- package/dist/session/session.service.d.ts.map +1 -1
- package/dist/session/session.service.js +76 -10
- package/dist/session/session.service.js.map +1 -1
- package/dist/setting/setting.service.js +4 -4
- package/dist/setting/setting.service.js.map +1 -1
- package/dist/token/token.service.d.ts +1 -0
- package/dist/token/token.service.d.ts.map +1 -1
- package/dist/token/token.service.js +23 -12
- package/dist/token/token.service.js.map +1 -1
- package/dist/user/user.service.d.ts +1 -1
- package/dist/user/user.service.d.ts.map +1 -1
- package/dist/user/user.service.js +3 -0
- package/dist/user/user.service.js.map +1 -1
- package/hedhog/data/dashboard.yaml +2 -2
- package/hedhog/data/route.yaml +8 -0
- package/hedhog/frontend/app/account/components/change-email-form.tsx.ejs +87 -8
- package/hedhog/frontend/app/account/components/profile-form.tsx.ejs +90 -10
- package/hedhog/frontend/app/ai_agent/page.tsx.ejs +145 -31
- package/hedhog/frontend/app/configurations/layout.tsx.ejs +1 -1
- package/hedhog/frontend/app/dashboard/[slug]/dashboard-content.tsx.ejs +67 -2
- package/hedhog/frontend/app/dashboard/components/add-widget-selector-dialog.tsx.ejs +13 -9
- package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +250 -45
- package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +111 -15
- package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +110 -15
- package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +113 -15
- package/hedhog/frontend/app/mail/log/page.tsx.ejs +481 -70
- package/hedhog/frontend/app/menu/page.tsx.ejs +202 -30
- package/hedhog/frontend/app/roles/menus.tsx.ejs +1 -1
- package/hedhog/frontend/app/roles/page.tsx.ejs +288 -104
- package/hedhog/frontend/app/users/page.tsx.ejs +168 -23
- package/hedhog/frontend/messages/en.json +45 -6
- package/hedhog/frontend/messages/pt.json +45 -6
- package/package.json +5 -5
- package/src/auth/auth.controller.ts +15 -19
- package/src/auth/auth.service.ts +13 -8
- package/src/dashboard/dashboard-core/dashboard-core.controller.ts +22 -9
- package/src/dashboard/dashboard-core/dashboard-core.service.ts +75 -1
- package/src/mail-sent/dto/query-mail-sent-list.dto.ts +30 -0
- package/src/mail-sent/mail-sent.controller.ts +14 -2
- package/src/mail-sent/mail-sent.service.ts +159 -4
- package/src/oauth/oauth-callback-coordinator.service.ts +158 -0
- package/src/oauth/oauth.controller.ts +58 -1
- package/src/oauth/oauth.errors.ts +32 -0
- package/src/oauth/oauth.module.ts +10 -1
- package/src/oauth/oauth.service.ts +178 -28
- package/src/oauth/providers/abstract.provider.ts +64 -0
- package/src/oauth/providers/microsoft-entra-id.provider.ts +92 -56
- package/src/security/security.service.ts +12 -10
- package/src/session/session.service.ts +84 -9
- package/src/setting/setting.service.ts +10 -10
- package/src/token/token.service.ts +29 -11
- package/src/user/user.service.ts +10 -6
|
@@ -1,20 +1,44 @@
|
|
|
1
1
|
import { DeleteDTO } from '@hed-hog/api';
|
|
2
|
-
import {
|
|
2
|
+
import { PaginationService } from '@hed-hog/api-pagination';
|
|
3
3
|
import { PrismaService } from '@hed-hog/api-prisma';
|
|
4
4
|
import { CreateDTO } from './dto/create.dto';
|
|
5
|
+
import { QueryMailSentListDTO } from './dto/query-mail-sent-list.dto';
|
|
5
6
|
import { UpdateDTO } from './dto/update.dto';
|
|
7
|
+
type MailSentUserStatus = 'received' | 'read' | 'error';
|
|
8
|
+
type MailSentUserLog = {
|
|
9
|
+
id: number;
|
|
10
|
+
recipient_email: string;
|
|
11
|
+
status: MailSentUserStatus;
|
|
12
|
+
read_at: Date | null;
|
|
13
|
+
error_code: string | null;
|
|
14
|
+
error_message: string | null;
|
|
15
|
+
user_id: number;
|
|
16
|
+
user_identifier_id: number | null;
|
|
17
|
+
created_at: Date;
|
|
18
|
+
updated_at: Date;
|
|
19
|
+
};
|
|
6
20
|
export declare class MailSentService {
|
|
7
21
|
private readonly prismaService;
|
|
8
22
|
private readonly paginationService;
|
|
9
23
|
constructor(prismaService: PrismaService, paginationService: PaginationService);
|
|
10
|
-
list(paginationParams:
|
|
24
|
+
list(paginationParams: QueryMailSentListDTO): Promise<{
|
|
25
|
+
data: {
|
|
26
|
+
deliverySummary: {
|
|
27
|
+
totalRecipients: number;
|
|
28
|
+
receivedCount: number;
|
|
29
|
+
readCount: number;
|
|
30
|
+
errorCount: number;
|
|
31
|
+
hasError: boolean;
|
|
32
|
+
lastReadAt: Date | null;
|
|
33
|
+
};
|
|
34
|
+
mail_sent_user?: MailSentUserLog[];
|
|
35
|
+
}[];
|
|
11
36
|
total: any;
|
|
12
37
|
lastPage: number;
|
|
13
38
|
page: number;
|
|
14
39
|
pageSize: number;
|
|
15
40
|
prev: number;
|
|
16
41
|
next: number;
|
|
17
|
-
data: any[];
|
|
18
42
|
}>;
|
|
19
43
|
get(locale: string, id: number): Promise<{
|
|
20
44
|
body: string;
|
|
@@ -59,4 +83,5 @@ export declare class MailSentService {
|
|
|
59
83
|
count: number;
|
|
60
84
|
}>;
|
|
61
85
|
}
|
|
86
|
+
export {};
|
|
62
87
|
//# sourceMappingURL=mail-sent.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-sent.service.d.ts","sourceRoot":"","sources":["../../src/mail-sent/mail-sent.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mail-sent.service.d.ts","sourceRoot":"","sources":["../../src/mail-sent/mail-sent.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQpD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,KAAK,kBAAkB,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAExD,KAAK,eAAe,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC;AAMF,qBACa,eAAe;IAGxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,aAAa,EAAE,aAAa,EAE5B,iBAAiB,EAAE,iBAAiB;IAGjD,IAAI,CAAC,gBAAgB,EAAE,oBAAoB;;;;;;;;4BA2IrB,IAAI,GAAG,IAAI;;6BAvJtB,eAAe,EAAE;;;;;;;;;IAyK5B,GAAG,CAAC,MAAM,EAAC,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;IAY7B,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS;;;;;;;;;;;;IA+B/D,MAAM,CAAC,MAAM,EAAC,MAAM,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE;;;;;;;;;;;;IAelE,MAAM,CAAC,MAAM,EAAC,MAAM,EAAC,EAAE,GAAG,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CA2B3E"}
|
|
@@ -23,16 +23,121 @@ let MailSentService = class MailSentService {
|
|
|
23
23
|
this.paginationService = paginationService;
|
|
24
24
|
}
|
|
25
25
|
async list(paginationParams) {
|
|
26
|
+
var _a, _b, _c, _d;
|
|
26
27
|
const fields = ['subject', 'from', 'to', 'cc', 'bcc', 'body'];
|
|
27
28
|
const OR = this.prismaService.createInsensitiveSearch(fields, paginationParams);
|
|
29
|
+
const AND = [];
|
|
30
|
+
if (paginationParams.status &&
|
|
31
|
+
paginationParams.status !== 'all' &&
|
|
32
|
+
['received', 'read', 'error'].includes(paginationParams.status)) {
|
|
33
|
+
AND.push({
|
|
34
|
+
mail_sent_user: {
|
|
35
|
+
some: {
|
|
36
|
+
status: paginationParams.status,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const recipientEmail = (_a = paginationParams.recipientEmail) === null || _a === void 0 ? void 0 : _a.trim();
|
|
42
|
+
if (recipientEmail) {
|
|
43
|
+
AND.push({
|
|
44
|
+
mail_sent_user: {
|
|
45
|
+
some: {
|
|
46
|
+
recipient_email: {
|
|
47
|
+
contains: recipientEmail,
|
|
48
|
+
mode: 'insensitive',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const hasErrorRaw = (_b = paginationParams.hasError) === null || _b === void 0 ? void 0 : _b.trim().toLowerCase();
|
|
55
|
+
if (hasErrorRaw === 'true' || hasErrorRaw === '1') {
|
|
56
|
+
AND.push({
|
|
57
|
+
mail_sent_user: {
|
|
58
|
+
some: {
|
|
59
|
+
status: 'error',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (hasErrorRaw === 'false' || hasErrorRaw === '0') {
|
|
65
|
+
AND.push({
|
|
66
|
+
mail_sent_user: {
|
|
67
|
+
none: {
|
|
68
|
+
status: 'error',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const createdAt = {};
|
|
74
|
+
const createdAtFrom = (_c = paginationParams.createdAtFrom) === null || _c === void 0 ? void 0 : _c.trim();
|
|
75
|
+
const createdAtTo = (_d = paginationParams.createdAtTo) === null || _d === void 0 ? void 0 : _d.trim();
|
|
76
|
+
if (createdAtFrom) {
|
|
77
|
+
const parsedFrom = new Date(createdAtFrom);
|
|
78
|
+
if (!isNaN(parsedFrom.getTime())) {
|
|
79
|
+
createdAt.gte = parsedFrom;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (createdAtTo) {
|
|
83
|
+
const parsedTo = new Date(createdAtTo);
|
|
84
|
+
if (!isNaN(parsedTo.getTime())) {
|
|
85
|
+
parsedTo.setHours(23, 59, 59, 999);
|
|
86
|
+
createdAt.lte = parsedTo;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
28
89
|
if (paginationParams.search && !isNaN(+paginationParams.search)) {
|
|
29
90
|
OR.push({ id: { equals: +paginationParams.search } });
|
|
30
91
|
}
|
|
31
|
-
|
|
32
|
-
where: {
|
|
33
|
-
|
|
92
|
+
const result = await this.paginationService.paginate(this.prismaService.mail_sent, paginationParams, {
|
|
93
|
+
where: Object.assign(Object.assign(Object.assign({}, (OR.length > 0 ? { OR } : {})), (AND.length > 0 ? { AND } : {})), (Object.keys(createdAt).length > 0 ? { created_at: createdAt } : {})),
|
|
94
|
+
include: {
|
|
95
|
+
mail_sent_user: {
|
|
96
|
+
select: {
|
|
97
|
+
id: true,
|
|
98
|
+
recipient_email: true,
|
|
99
|
+
status: true,
|
|
100
|
+
read_at: true,
|
|
101
|
+
error_code: true,
|
|
102
|
+
error_message: true,
|
|
103
|
+
user_id: true,
|
|
104
|
+
user_identifier_id: true,
|
|
105
|
+
created_at: true,
|
|
106
|
+
updated_at: true,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
34
109
|
},
|
|
35
110
|
});
|
|
111
|
+
const data = result.data.map((item) => {
|
|
112
|
+
var _a;
|
|
113
|
+
const recipientLogs = (_a = item.mail_sent_user) !== null && _a !== void 0 ? _a : [];
|
|
114
|
+
const summary = recipientLogs.reduce((acc, recipient) => {
|
|
115
|
+
if (recipient.status === 'received') {
|
|
116
|
+
acc.receivedCount += 1;
|
|
117
|
+
}
|
|
118
|
+
if (recipient.status === 'read') {
|
|
119
|
+
acc.readCount += 1;
|
|
120
|
+
if (recipient.read_at &&
|
|
121
|
+
(!acc.lastReadAt || recipient.read_at > acc.lastReadAt)) {
|
|
122
|
+
acc.lastReadAt = recipient.read_at;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (recipient.status === 'error') {
|
|
126
|
+
acc.errorCount += 1;
|
|
127
|
+
}
|
|
128
|
+
return acc;
|
|
129
|
+
}, {
|
|
130
|
+
totalRecipients: recipientLogs.length,
|
|
131
|
+
receivedCount: 0,
|
|
132
|
+
readCount: 0,
|
|
133
|
+
errorCount: 0,
|
|
134
|
+
hasError: false,
|
|
135
|
+
lastReadAt: null,
|
|
136
|
+
});
|
|
137
|
+
summary.hasError = summary.errorCount > 0;
|
|
138
|
+
return Object.assign(Object.assign({}, item), { deliverySummary: summary });
|
|
139
|
+
});
|
|
140
|
+
return Object.assign(Object.assign({}, result), { data });
|
|
36
141
|
}
|
|
37
142
|
async get(locale, id) {
|
|
38
143
|
const mailSent = await this.prismaService.mail_sent.findUnique({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-sent.service.js","sourceRoot":"","sources":["../../src/mail-sent/mail-sent.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,oDAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"mail-sent.service.js","sourceRoot":"","sources":["../../src/mail-sent/mail-sent.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PrismaService } from '@hed-hog/api-prisma';
|
|
2
|
+
export declare class OAuthCallbackCoordinatorService {
|
|
3
|
+
private readonly prisma;
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private readonly completedCallbacks;
|
|
6
|
+
private readonly completedTtlMs;
|
|
7
|
+
constructor(prisma: PrismaService);
|
|
8
|
+
execute<T>(callbackKey: string, callback: () => Promise<T>): Promise<T>;
|
|
9
|
+
private executeWithPostgresLock;
|
|
10
|
+
private executeWithMysqlLock;
|
|
11
|
+
private shouldMarkCompleted;
|
|
12
|
+
private isCompleted;
|
|
13
|
+
private markCompleted;
|
|
14
|
+
private pruneCompletedCallbacks;
|
|
15
|
+
private toSignedBigInt;
|
|
16
|
+
private toMysqlLockName;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=oauth-callback-coordinator.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-callback-coordinator.service.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth-callback-coordinator.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAS5D,qBACa,+BAA+B;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;IAC3E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;gBAEpB,MAAM,EAAE,aAAa;IAE5C,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAgC/D,uBAAuB;YA2BvB,oBAAoB;IAiClC,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe;CAIxB"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var OAuthCallbackCoordinatorService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.OAuthCallbackCoordinatorService = void 0;
|
|
14
|
+
const api_prisma_1 = require("@hed-hog/api-prisma");
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const crypto_1 = require("crypto");
|
|
17
|
+
const oauth_errors_1 = require("./oauth.errors");
|
|
18
|
+
let OAuthCallbackCoordinatorService = OAuthCallbackCoordinatorService_1 = class OAuthCallbackCoordinatorService {
|
|
19
|
+
constructor(prisma) {
|
|
20
|
+
this.prisma = prisma;
|
|
21
|
+
this.logger = new common_1.Logger(OAuthCallbackCoordinatorService_1.name);
|
|
22
|
+
this.completedCallbacks = new Map();
|
|
23
|
+
this.completedTtlMs = 10 * 60 * 1000;
|
|
24
|
+
}
|
|
25
|
+
async execute(callbackKey, callback) {
|
|
26
|
+
this.pruneCompletedCallbacks();
|
|
27
|
+
if (this.isCompleted(callbackKey)) {
|
|
28
|
+
throw new oauth_errors_1.OAuthCallbackAlreadyProcessedError();
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
if (this.prisma.isPostgres()) {
|
|
32
|
+
return await this.executeWithPostgresLock(callbackKey, callback);
|
|
33
|
+
}
|
|
34
|
+
if (this.prisma.isMysql()) {
|
|
35
|
+
return await this.executeWithMysqlLock(callbackKey, callback);
|
|
36
|
+
}
|
|
37
|
+
this.logger.warn(`OAuth callback coordination is running without distributed lock support for provider ${this.prisma.getProvider()}.`);
|
|
38
|
+
const result = await callback();
|
|
39
|
+
this.markCompleted(callbackKey);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (this.shouldMarkCompleted(error)) {
|
|
44
|
+
this.markCompleted(callbackKey);
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async executeWithPostgresLock(callbackKey, callback) {
|
|
50
|
+
const lockKey = this.toSignedBigInt(callbackKey);
|
|
51
|
+
return this.prisma.$transaction(async (tx) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const rows = await tx.$queryRaw `
|
|
54
|
+
SELECT pg_try_advisory_xact_lock(${lockKey}) AS locked
|
|
55
|
+
`;
|
|
56
|
+
if (!((_a = rows[0]) === null || _a === void 0 ? void 0 : _a.locked)) {
|
|
57
|
+
throw new oauth_errors_1.OAuthCallbackInProgressError();
|
|
58
|
+
}
|
|
59
|
+
const result = await callback();
|
|
60
|
+
this.markCompleted(callbackKey);
|
|
61
|
+
return result;
|
|
62
|
+
}, {
|
|
63
|
+
maxWait: 5000,
|
|
64
|
+
timeout: 60000,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async executeWithMysqlLock(callbackKey, callback) {
|
|
68
|
+
const lockName = this.toMysqlLockName(callbackKey);
|
|
69
|
+
return this.prisma.$transaction(async (tx) => {
|
|
70
|
+
var _a;
|
|
71
|
+
const rows = await tx.$queryRaw(api_prisma_1.Prisma.sql `
|
|
72
|
+
SELECT GET_LOCK(${lockName}, 0) AS locked
|
|
73
|
+
`);
|
|
74
|
+
if (((_a = rows[0]) === null || _a === void 0 ? void 0 : _a.locked) !== 1) {
|
|
75
|
+
throw new oauth_errors_1.OAuthCallbackInProgressError();
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const result = await callback();
|
|
79
|
+
this.markCompleted(callbackKey);
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
await tx.$queryRaw(api_prisma_1.Prisma.sql `
|
|
84
|
+
SELECT RELEASE_LOCK(${lockName}) AS released
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
maxWait: 5000,
|
|
89
|
+
timeout: 60000,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
shouldMarkCompleted(error) {
|
|
93
|
+
return (error instanceof oauth_errors_1.OAuthCallbackAlreadyProcessedError ||
|
|
94
|
+
(error instanceof oauth_errors_1.OAuthProviderException &&
|
|
95
|
+
error.reason === 'callback_consumed'));
|
|
96
|
+
}
|
|
97
|
+
isCompleted(callbackKey) {
|
|
98
|
+
const expiresAt = this.completedCallbacks.get(callbackKey);
|
|
99
|
+
if (!expiresAt) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (expiresAt <= Date.now()) {
|
|
103
|
+
this.completedCallbacks.delete(callbackKey);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
markCompleted(callbackKey) {
|
|
109
|
+
this.completedCallbacks.set(callbackKey, Date.now() + this.completedTtlMs);
|
|
110
|
+
}
|
|
111
|
+
pruneCompletedCallbacks() {
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
for (const [callbackKey, expiresAt] of this.completedCallbacks.entries()) {
|
|
114
|
+
if (expiresAt <= now) {
|
|
115
|
+
this.completedCallbacks.delete(callbackKey);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
toSignedBigInt(callbackKey) {
|
|
120
|
+
const hex = (0, crypto_1.createHash)('sha256').update(callbackKey).digest('hex').slice(0, 16);
|
|
121
|
+
const unsigned = BigInt(`0x${hex}`);
|
|
122
|
+
const signedBoundary = BigInt(1) << BigInt(63);
|
|
123
|
+
return unsigned >= signedBoundary
|
|
124
|
+
? unsigned - (BigInt(1) << BigInt(64))
|
|
125
|
+
: unsigned;
|
|
126
|
+
}
|
|
127
|
+
toMysqlLockName(callbackKey) {
|
|
128
|
+
const suffix = (0, crypto_1.createHash)('sha256').update(callbackKey).digest('hex').slice(0, 48);
|
|
129
|
+
return `oauth:${suffix}`;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
exports.OAuthCallbackCoordinatorService = OAuthCallbackCoordinatorService;
|
|
133
|
+
exports.OAuthCallbackCoordinatorService = OAuthCallbackCoordinatorService = OAuthCallbackCoordinatorService_1 = __decorate([
|
|
134
|
+
(0, common_1.Injectable)(),
|
|
135
|
+
__metadata("design:paramtypes", [api_prisma_1.PrismaService])
|
|
136
|
+
], OAuthCallbackCoordinatorService);
|
|
137
|
+
//# sourceMappingURL=oauth-callback-coordinator.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-callback-coordinator.service.js","sourceRoot":"","sources":["../../src/oauth/oauth-callback-coordinator.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,14 @@ import { OAuthService } from './oauth.service';
|
|
|
3
3
|
export declare class OAuthController {
|
|
4
4
|
private readonly service;
|
|
5
5
|
private readonly settingService;
|
|
6
|
+
private readonly logger;
|
|
6
7
|
constructor(service: OAuthService, settingService: SettingService);
|
|
8
|
+
private logOAuthRequest;
|
|
7
9
|
githubCallback(code: string, state: string, res: any): Promise<any>;
|
|
8
|
-
login(provider: string, res: any): Promise<any>;
|
|
10
|
+
login(origin: string, referer: string, host: string, provider: string, res: any): Promise<any>;
|
|
9
11
|
register(provider: string, res: any): Promise<any>;
|
|
10
12
|
connect(provider: string, res: any): Promise<any>;
|
|
11
|
-
callbackLogin(locale: string, ipAddress: string, userAgent: string, provider: string, code: string, res: any): Promise<{
|
|
13
|
+
callbackLogin(locale: string, ipAddress: string, userAgent: string, origin: string, referer: string, host: string, forwardedHost: string, provider: string, code: string, res: any): Promise<{
|
|
12
14
|
accessToken: string;
|
|
13
15
|
}>;
|
|
14
16
|
callbackRegister(locale: string, ipAddress: string, userAgent: string, provider: string, code: string, res: any): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.controller.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.controller.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBACa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAgB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAFnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE9B,OAAO,EAAE,YAAY,EAAmB,cAAc,EAAE,cAAc;IAEnG,OAAO,CAAC,eAAe;IAkCjB,cAAc,CACH,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACtB,GAAG,KAAA;IAUN,KAAK,CACU,MAAM,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAC5B,GAAG,KAAA;IAcN,QAAQ,CAAoB,QAAQ,EAAE,MAAM,EAAS,GAAG,KAAA;IAWxD,OAAO,CAAoB,QAAQ,EAAE,MAAM,EAAS,GAAG,KAAA;IAWvD,aAAa,CACP,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACA,aAAa,EAAE,MAAM,EAC/B,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACC,GAAG,KAAA;;;IAkB3B,gBAAgB,CACV,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACC,GAAG,KAAA;;;IAO3B,eAAe,CACT,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EAChC,EAAE,EAAE,EAAE;;KAAA,EACK,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACC,GAAG,KAAA;;;IAO3B,UAAU,CACJ,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACA,GAAG,KAAA;;;CAIlC"}
|
|
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
+
var OAuthController_1;
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
16
|
exports.OAuthController = void 0;
|
|
16
17
|
const api_1 = require("@hed-hog/api");
|
|
@@ -18,10 +19,20 @@ const api_locale_1 = require("@hed-hog/api-locale");
|
|
|
18
19
|
const common_1 = require("@nestjs/common");
|
|
19
20
|
const setting_service_1 = require("../setting/setting.service");
|
|
20
21
|
const oauth_service_1 = require("./oauth.service");
|
|
21
|
-
let OAuthController = class OAuthController {
|
|
22
|
+
let OAuthController = OAuthController_1 = class OAuthController {
|
|
22
23
|
constructor(service, settingService) {
|
|
23
24
|
this.service = service;
|
|
24
25
|
this.settingService = settingService;
|
|
26
|
+
this.logger = new common_1.Logger(OAuthController_1.name);
|
|
27
|
+
}
|
|
28
|
+
logOAuthRequest(action, provider, { locale, origin, referer, host, ipAddress, userAgent, code, }) {
|
|
29
|
+
var _a;
|
|
30
|
+
const summarizedUserAgent = userAgent
|
|
31
|
+
? userAgent.length > 120
|
|
32
|
+
? `${userAgent.slice(0, 117)}...`
|
|
33
|
+
: userAgent
|
|
34
|
+
: 'n/a';
|
|
35
|
+
this.logger.log(`OAuth ${action}: provider=${provider} locale=${locale !== null && locale !== void 0 ? locale : 'n/a'} origin=${origin !== null && origin !== void 0 ? origin : 'n/a'} referer=${referer !== null && referer !== void 0 ? referer : 'n/a'} host=${host !== null && host !== void 0 ? host : 'n/a'} ip=${ipAddress !== null && ipAddress !== void 0 ? ipAddress : 'n/a'} hasCode=${code ? 'yes' : 'no'} codeLength=${(_a = code === null || code === void 0 ? void 0 : code.length) !== null && _a !== void 0 ? _a : 0} userAgent="${summarizedUserAgent}"`);
|
|
25
36
|
}
|
|
26
37
|
async githubCallback(code, state, res) {
|
|
27
38
|
const type = state || 'login';
|
|
@@ -29,7 +40,8 @@ let OAuthController = class OAuthController {
|
|
|
29
40
|
const redirectURL = `${frontendURL}/callback/github/${type}?code=${encodeURIComponent(code)}`;
|
|
30
41
|
return res.redirect(redirectURL);
|
|
31
42
|
}
|
|
32
|
-
async login(provider, res) {
|
|
43
|
+
async login(origin, referer, host, provider, res) {
|
|
44
|
+
this.logOAuthRequest('login-init', provider, { origin, referer, host });
|
|
33
45
|
const url = await this.service.getAuthUrl(provider, `/callback/${provider}/login`);
|
|
34
46
|
return res.redirect(url);
|
|
35
47
|
}
|
|
@@ -41,7 +53,16 @@ let OAuthController = class OAuthController {
|
|
|
41
53
|
const url = this.service.getAuthUrl(provider, `/callback/${provider}/connect`);
|
|
42
54
|
return res.redirect(url);
|
|
43
55
|
}
|
|
44
|
-
async callbackLogin(locale, ipAddress, userAgent, provider, code, res) {
|
|
56
|
+
async callbackLogin(locale, ipAddress, userAgent, origin, referer, host, forwardedHost, provider, code, res) {
|
|
57
|
+
this.logOAuthRequest('callback-login', provider, {
|
|
58
|
+
locale,
|
|
59
|
+
origin,
|
|
60
|
+
referer,
|
|
61
|
+
host: forwardedHost || host,
|
|
62
|
+
ipAddress,
|
|
63
|
+
userAgent,
|
|
64
|
+
code,
|
|
65
|
+
});
|
|
45
66
|
return this.service.handleCallback({ res, locale, ipAddress, userAgent, provider: provider, code, type: 'login' });
|
|
46
67
|
}
|
|
47
68
|
async callbackRegister(locale, ipAddress, userAgent, provider, code, res) {
|
|
@@ -68,10 +89,13 @@ __decorate([
|
|
|
68
89
|
__decorate([
|
|
69
90
|
(0, api_1.Public)(),
|
|
70
91
|
(0, common_1.Get)(':provider/login'),
|
|
71
|
-
__param(0, (0, common_1.
|
|
72
|
-
__param(1, (0, common_1.
|
|
92
|
+
__param(0, (0, common_1.Headers)('origin')),
|
|
93
|
+
__param(1, (0, common_1.Headers)('referer')),
|
|
94
|
+
__param(2, (0, common_1.Headers)('host')),
|
|
95
|
+
__param(3, (0, common_1.Param)('provider')),
|
|
96
|
+
__param(4, (0, common_1.Res)()),
|
|
73
97
|
__metadata("design:type", Function),
|
|
74
|
-
__metadata("design:paramtypes", [String, Object]),
|
|
98
|
+
__metadata("design:paramtypes", [String, String, String, String, Object]),
|
|
75
99
|
__metadata("design:returntype", Promise)
|
|
76
100
|
], OAuthController.prototype, "login", null);
|
|
77
101
|
__decorate([
|
|
@@ -98,11 +122,15 @@ __decorate([
|
|
|
98
122
|
__param(0, (0, api_locale_1.Locale)()),
|
|
99
123
|
__param(1, (0, common_1.Ip)()),
|
|
100
124
|
__param(2, (0, common_1.Headers)('user-agent')),
|
|
101
|
-
__param(3, (0, common_1.
|
|
102
|
-
__param(4, (0, common_1.
|
|
103
|
-
__param(5, (0, common_1.
|
|
125
|
+
__param(3, (0, common_1.Headers)('origin')),
|
|
126
|
+
__param(4, (0, common_1.Headers)('referer')),
|
|
127
|
+
__param(5, (0, common_1.Headers)('host')),
|
|
128
|
+
__param(6, (0, common_1.Headers)('x-forwarded-host')),
|
|
129
|
+
__param(7, (0, common_1.Param)('provider')),
|
|
130
|
+
__param(8, (0, common_1.Query)('code')),
|
|
131
|
+
__param(9, (0, common_1.Res)({ passthrough: true })),
|
|
104
132
|
__metadata("design:type", Function),
|
|
105
|
-
__metadata("design:paramtypes", [String, String, String, String, String, Object]),
|
|
133
|
+
__metadata("design:paramtypes", [String, String, String, String, String, String, String, String, String, Object]),
|
|
106
134
|
__metadata("design:returntype", Promise)
|
|
107
135
|
], OAuthController.prototype, "callbackLogin", null);
|
|
108
136
|
__decorate([
|
|
@@ -143,7 +171,7 @@ __decorate([
|
|
|
143
171
|
__metadata("design:paramtypes", [String, String, String, String, String, Object]),
|
|
144
172
|
__metadata("design:returntype", Promise)
|
|
145
173
|
], OAuthController.prototype, "disconnect", null);
|
|
146
|
-
exports.OAuthController = OAuthController = __decorate([
|
|
174
|
+
exports.OAuthController = OAuthController = OAuthController_1 = __decorate([
|
|
147
175
|
(0, common_1.Controller)('oauth'),
|
|
148
176
|
__metadata("design:paramtypes", [oauth_service_1.OAuthService, setting_service_1.SettingService])
|
|
149
177
|
], OAuthController);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.controller.js","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.controller.js","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type OAuthProviderFailureReason = 'callback_consumed' | 'invalid_callback' | 'upstream_failure';
|
|
2
|
+
export declare class OAuthProviderException extends Error {
|
|
3
|
+
readonly provider: string;
|
|
4
|
+
readonly reason: OAuthProviderFailureReason;
|
|
5
|
+
readonly status?: number;
|
|
6
|
+
readonly providerError?: string;
|
|
7
|
+
readonly providerErrorCode?: string;
|
|
8
|
+
constructor(provider: string, reason: OAuthProviderFailureReason, message: string, status?: number, providerError?: string, providerErrorCode?: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class OAuthCallbackAlreadyProcessedError extends Error {
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
export declare class OAuthCallbackInProgressError extends Error {
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=oauth.errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.errors.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAClC,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,0BAA0B;aAElC,MAAM,CAAC,EAAE,MAAM;aACf,aAAa,CAAC,EAAE,MAAM;aACtB,iBAAiB,CAAC,EAAE,MAAM;gBAL1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,0BAA0B,EAClD,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,MAAM;CAK7C;AAED,qBAAa,kCAAmC,SAAQ,KAAK;;CAK5D;AAED,qBAAa,4BAA6B,SAAQ,KAAK;;CAKtD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OAuthCallbackInProgressError = exports.OAuthCallbackAlreadyProcessedError = exports.OAuthProviderException = void 0;
|
|
4
|
+
class OAuthProviderException extends Error {
|
|
5
|
+
constructor(provider, reason, message, status, providerError, providerErrorCode) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.provider = provider;
|
|
8
|
+
this.reason = reason;
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.providerError = providerError;
|
|
11
|
+
this.providerErrorCode = providerErrorCode;
|
|
12
|
+
this.name = 'OAuthProviderException';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.OAuthProviderException = OAuthProviderException;
|
|
16
|
+
class OAuthCallbackAlreadyProcessedError extends Error {
|
|
17
|
+
constructor() {
|
|
18
|
+
super('OAuth callback already processed.');
|
|
19
|
+
this.name = 'OAuthCallbackAlreadyProcessedError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.OAuthCallbackAlreadyProcessedError = OAuthCallbackAlreadyProcessedError;
|
|
23
|
+
class OAuthCallbackInProgressError extends Error {
|
|
24
|
+
constructor() {
|
|
25
|
+
super('OAuth callback is already in progress.');
|
|
26
|
+
this.name = 'OAuthCallbackInProgressError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.OAuthCallbackInProgressError = OAuthCallbackInProgressError;
|
|
30
|
+
//# sourceMappingURL=oauth.errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.errors.js","sourceRoot":"","sources":["../../src/oauth/oauth.errors.ts"],"names":[],"mappings":";;;AAKA,MAAa,sBAAuB,SAAQ,KAAK;IAC/C,YACkB,QAAgB,EAChB,MAAkC,EAClD,OAAe,EACC,MAAe,EACf,aAAsB,EACtB,iBAA0B;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;QAPC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAA4B;QAElC,WAAM,GAAN,MAAM,CAAS;QACf,kBAAa,GAAb,aAAa,CAAS;QACtB,sBAAiB,GAAjB,iBAAiB,CAAS;QAG1C,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAZD,wDAYC;AAED,MAAa,kCAAmC,SAAQ,KAAK;IAC3D;QACE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,oCAAoC,CAAC;IACnD,CAAC;CACF;AALD,gFAKC;AAED,MAAa,4BAA6B,SAAQ,KAAK;IACrD;QACE,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AALD,oEAKC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.module.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.module.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":"AAoBA,qBAyBa,WAAW;CAAG"}
|
|
@@ -18,6 +18,7 @@ const mail_module_1 = require("../mail/mail.module");
|
|
|
18
18
|
const security_module_1 = require("../security/security.module");
|
|
19
19
|
const token_module_1 = require("../token/token.module");
|
|
20
20
|
const user_module_1 = require("../user/user.module");
|
|
21
|
+
const oauth_callback_coordinator_service_1 = require("./oauth-callback-coordinator.service");
|
|
21
22
|
const oauth_controller_1 = require("./oauth.controller");
|
|
22
23
|
const oauth_service_1 = require("./oauth.service");
|
|
23
24
|
const facebook_provider_1 = require("./providers/facebook.provider");
|
|
@@ -43,7 +44,15 @@ exports.OAuthModule = OAuthModule = __decorate([
|
|
|
43
44
|
(0, common_1.forwardRef)(() => user_module_1.UserModule),
|
|
44
45
|
],
|
|
45
46
|
controllers: [oauth_controller_1.OAuthController],
|
|
46
|
-
providers: [
|
|
47
|
+
providers: [
|
|
48
|
+
oauth_callback_coordinator_service_1.OAuthCallbackCoordinatorService,
|
|
49
|
+
oauth_service_1.OAuthService,
|
|
50
|
+
google_provider_1.GoogleProvider,
|
|
51
|
+
facebook_provider_1.FacebookProvider,
|
|
52
|
+
github_provider_1.GithubProvider,
|
|
53
|
+
microsoft_provider_1.MicrosoftProvider,
|
|
54
|
+
microsoft_entra_id_provider_1.MicrosoftEntraIdProvider,
|
|
55
|
+
],
|
|
47
56
|
exports: [oauth_service_1.OAuthService],
|
|
48
57
|
})
|
|
49
58
|
], OAuthModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gDAAiE;AACjE,oDAAmD;AACnD,yCAA2C;AAC3C,2CAAoD;AACpD,2CAA8C;AAC9C,qDAAiD;AACjD,qDAAiD;AACjD,qDAAiD;AACjD,iEAA6D;AAC7D,wDAAoD;AACpD,qDAAiD;AACjD,yDAAqD;AACrD,mDAA+C;AAC/C,qEAAiE;AACjE,iEAA6D;AAC7D,iEAA6D;AAC7D,yFAAmF;AACnF,uEAAmE;
|
|
1
|
+
{"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gDAAiE;AACjE,oDAAmD;AACnD,yCAA2C;AAC3C,2CAAoD;AACpD,2CAA8C;AAC9C,qDAAiD;AACjD,qDAAiD;AACjD,qDAAiD;AACjD,iEAA6D;AAC7D,wDAAoD;AACpD,qDAAiD;AACjD,6FAAuF;AACvF,yDAAqD;AACrD,mDAA+C;AAC/C,qEAAiE;AACjE,iEAA6D;AAC7D,iEAA6D;AAC7D,yFAAmF;AACnF,uEAAmE;AA2B5D,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAzBvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,kBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAc,CAAC;YAChC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;YAChC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC;YAC7B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;SAC7B;QACD,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE;YACT,oEAA+B;YAC/B,4BAAY;YACZ,gCAAc;YACd,oCAAgB;YAChB,gCAAc;YACd,sCAAiB;YACjB,sDAAwB;SACzB;QACD,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
|