Skip to content

Commit 6199d29

Browse files
committed
chore: Throw error if deprecation endpoint deprecated should be removed (#36647)
1 parent 125256c commit 6199d29

File tree

5 files changed

+41
-26
lines changed

5 files changed

+41
-26
lines changed

.changeset/twelve-feet-repeat.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/meteor': major
3+
---
4+
5+
Removes deprecated 'e2e.updateGroupKey' method and related type declarations

apps/meteor/app/api/server/ApiClass.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,11 @@ export class APIClass<TBasePath extends string = '', TOperations extends Record<
813813
}
814814
// Add a try/catch for each endpoint
815815
const originalAction = (operations[method as keyof Operations<TPathPattern, TOptions>] as Record<string, any>).action;
816+
817+
if (options.deprecation && shouldBreakInVersion(options.deprecation.version)) {
818+
throw new Meteor.Error('error-deprecated', `The endpoint ${route} should be removed`);
819+
}
820+
816821
// eslint-disable-next-line @typescript-eslint/no-this-alias
817822
const api = this;
818823
(operations[method as keyof Operations<TPathPattern, TOptions>] as Record<string, any>).action =

apps/meteor/app/api/server/helpers/parseJsonQuery.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export async function parseJsonQuery(api: GenericRouteExecutionContext): Promise
5757
let fields: Record<string, 0 | 1> | undefined;
5858
if (typeof params?.fields === 'string' && isUnsafeQueryParamsAllowed) {
5959
try {
60-
apiDeprecationLogger.parameter(route, 'fields', '8.0.0', response, messageGenerator);
60+
apiDeprecationLogger.parameter(route, 'fields', '9.0.0', response, messageGenerator);
6161
fields = JSON.parse(params.fields) as Record<string, 0 | 1>;
6262
Object.entries(fields).forEach(([key, value]) => {
6363
if (value !== 1 && value !== 0) {
@@ -106,7 +106,7 @@ export async function parseJsonQuery(api: GenericRouteExecutionContext): Promise
106106

107107
let query: Record<string, any> = {};
108108
if (typeof params?.query === 'string' && isUnsafeQueryParamsAllowed) {
109-
apiDeprecationLogger.parameter(route, 'query', '8.0.0', response, messageGenerator);
109+
apiDeprecationLogger.parameter(route, 'query', '9.0.0', response, messageGenerator);
110110
try {
111111
query = ejson.parse(params.query);
112112
query = clean(query, pathAllowConf.def);
Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
1-
import type { ServerMethods } from '@rocket.chat/ddp-client';
21
import { Subscriptions, Rooms } from '@rocket.chat/models';
3-
import { Meteor } from 'meteor/meteor';
42

5-
import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger';
63
import {
74
notifyOnSubscriptionChangedById,
85
notifyOnSubscriptionChanged,
96
notifyOnRoomChangedById,
107
} from '../../../lib/server/lib/notifyListener';
118

12-
declare module '@rocket.chat/ddp-client' {
13-
// eslint-disable-next-line @typescript-eslint/naming-convention
14-
interface ServerMethods {
15-
'e2e.updateGroupKey'(rid: string, uid: string, key: string): Promise<void>;
16-
}
17-
}
18-
199
export async function updateGroupKey(rid: string, uid: string, key: string, callerUserId: string) {
2010
// I have a subscription to this room
2111
const mySub = await Subscriptions.findOneByRoomIdAndUserId(rid, callerUserId);
@@ -46,16 +36,3 @@ export async function updateGroupKey(rid: string, uid: string, key: string, call
4636
}
4737
}
4838
}
49-
50-
Meteor.methods<ServerMethods>({
51-
async 'e2e.updateGroupKey'(rid, uid, key) {
52-
methodDeprecationLogger.method('e2e.updateGroupKey', '8.0.0', '/v1/e2e.acceptSuggestedGroupKey');
53-
54-
const userId = Meteor.userId();
55-
if (!userId) {
56-
throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'e2e.acceptSuggestedGroupKey' });
57-
}
58-
59-
return updateGroupKey(rid, uid, key, userId);
60-
},
61-
});

apps/meteor/app/lib/server/lib/deprecationWarningLogger.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@ const compareVersions = (version: string, message: string) => {
2424
}
2525
};
2626

27-
export type DeprecationLoggerNextPlannedVersion = '7.0.0' | '8.0.0';
27+
export type DeprecationLoggerNextPlannedVersion = '9.0.0';
2828

2929
export const apiDeprecationLogger = ((logger) => {
3030
return {
3131
endpoint: (endpoint: string, version: DeprecationLoggerNextPlannedVersion, res: Response, info = '') => {
3232
const message = `The endpoint "${endpoint}" is deprecated and will be removed on version ${version}${info ? ` (${info})` : ''}`;
3333

34+
if (process.env.TEST_MODE === 'true') {
35+
throw new Error(message);
36+
}
37+
3438
compareVersions(version, message);
3539

3640
writeDeprecationHeader(res, 'endpoint-deprecation', message, version);
@@ -54,6 +58,10 @@ export const apiDeprecationLogger = ((logger) => {
5458
}) ?? `The parameter "${parameter}" in the endpoint "${endpoint}" is deprecated and will be removed on version ${version}`;
5559
compareVersions(version, message);
5660

61+
if (process.env.TEST_MODE === 'true') {
62+
throw new Error(message);
63+
}
64+
5765
metrics.deprecations.inc({ type: 'parameter-deprecation', kind: 'endpoint', name: endpoint, params: parameter });
5866

5967
writeDeprecationHeader(res, 'parameter-deprecation', message, version);
@@ -76,6 +84,11 @@ export const apiDeprecationLogger = ((logger) => {
7684
endpoint,
7785
version,
7886
}) ?? `The usage of the endpoint "${endpoint}" is deprecated and will be removed on version ${version}`;
87+
88+
if (process.env.TEST_MODE === 'true') {
89+
throw new Error(message);
90+
}
91+
7992
compareVersions(version, message);
8093

8194
metrics.deprecations.inc({ type: 'invalid-usage', kind: 'endpoint', name: endpoint, params: parameter });
@@ -96,12 +109,18 @@ export const methodDeprecationLogger = ((logger) => {
96109
) => {
97110
const replacement = typeof info === 'string' ? info : `Use the ${info} endpoint instead`;
98111
const message = `The method "${method}" is deprecated and will be removed on version ${version}${replacement ? ` (${replacement})` : ''}`;
112+
if (process.env.TEST_MODE === 'true') {
113+
throw new Error(message);
114+
}
99115
compareVersions(version, message);
100116
metrics.deprecations.inc({ type: 'deprecation', name: method, kind: 'method' });
101117
logger.warn(message);
102118
},
103119
parameter: (method: string, parameter: string, version: DeprecationLoggerNextPlannedVersion) => {
104120
const message = `The parameter "${parameter}" in the method "${method}" is deprecated and will be removed on version ${version}`;
121+
if (process.env.TEST_MODE === 'true') {
122+
throw new Error(message);
123+
}
105124

106125
metrics.deprecations.inc({ type: 'parameter-deprecation', name: method, params: parameter });
107126

@@ -122,6 +141,11 @@ export const methodDeprecationLogger = ((logger) => {
122141
method,
123142
version,
124143
}) ?? `The usage of the method "${method}" is deprecated and will be removed on version ${version}`;
144+
145+
if (process.env.TEST_MODE === 'true') {
146+
throw new Error(message);
147+
}
148+
125149
compareVersions(version, message);
126150

127151
metrics.deprecations.inc({ type: 'invalid-usage', name: method, params: parameter, kind: 'method' });
@@ -130,6 +154,10 @@ export const methodDeprecationLogger = ((logger) => {
130154
},
131155
/** @deprecated */
132156
warn: (message: string) => {
157+
if (process.env.TEST_MODE === 'true') {
158+
throw new Error(message);
159+
}
160+
133161
compareVersions('0.0.0', message);
134162
logger.warn(message);
135163
},

0 commit comments

Comments
 (0)