Skip to content

Commit 54bb2d9

Browse files
authored
chore(server): Support async/promises for ContextAcceptor (#7109)
1 parent 5516f23 commit 54bb2d9

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

packages/cubejs-api-gateway/src/SubscriptionServer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class SubscriptionServer {
5555
if (message.authorization) {
5656
authContext = { isSubscription: true };
5757
await this.apiGateway.checkAuthFn(authContext, message.authorization);
58-
const acceptanceResult = this.contextAcceptor(authContext);
58+
const acceptanceResult = await this.contextAcceptor(authContext);
5959
if (!acceptanceResult.accepted) {
6060
this.sendMessage(connectionId, acceptanceResult.rejectMessage);
6161
return;

packages/cubejs-api-gateway/src/interfaces.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,13 @@ export type ContextRejectionMiddlewareFn =
9191
next: ExpressNextFunction,
9292
) => void;
9393

94+
type ContextAcceptorResult = { accepted: boolean; rejectMessage?: any };
95+
9496
/**
9597
* ContextAcceptorFn type that matches the ContextAcceptor.shouldAcceptWs
9698
* signature from the server-core package
9799
*/
98-
export type ContextAcceptorFn = (context: RequestContext) => { accepted: boolean; rejectMessage?: any };
100+
export type ContextAcceptorFn = (context: RequestContext) => Promise<ContextAcceptorResult> | ContextAcceptorResult;
99101

100102
/**
101103
* Logger middleware.

packages/cubejs-server-core/src/core/server.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@ function wrapToFnIfNeeded<T, R>(possibleFn: T | ((a: R) => T)): (a: R) => T {
5959
return () => possibleFn;
6060
}
6161

62-
class AcceptAllAcceptor {
63-
public shouldAccept(): ContextAcceptanceResult {
62+
class AcceptAllAcceptor implements ContextAcceptor {
63+
public async shouldAccept(): Promise<ContextAcceptanceResult> {
6464
return { accepted: true };
6565
}
6666

67-
public shouldAcceptHttp(): ContextAcceptanceResultHttp {
67+
public async shouldAcceptHttp(): Promise<ContextAcceptanceResultHttp> {
6868
return { accepted: true };
6969
}
7070

71-
public shouldAcceptWs(): ContextAcceptanceResultWs {
71+
public async shouldAcceptWs(): Promise<ContextAcceptanceResultWs> {
7272
return { accepted: true };
7373
}
7474
}
@@ -475,7 +475,7 @@ export class CubejsServerCore {
475475

476476
protected async contextRejectionMiddleware(req, res, next) {
477477
if (!this.standalone) {
478-
const result = this.contextAcceptor.shouldAcceptHttp(req.context);
478+
const result = await this.contextAcceptor.shouldAcceptHttp(req.context);
479479
if (!result.accepted) {
480480
res.writeHead(result.rejectStatusCode!, result.rejectHeaders!);
481481
res.send();
@@ -707,9 +707,17 @@ export class CubejsServerCore {
707707
error: 'At least one context should be returned by scheduledRefreshContexts'
708708
});
709709
}
710-
const contexts = allContexts.filter(
711-
(context) => this.contextAcceptor.shouldAccept(this.migrateBackgroundContext(context)).accepted
712-
);
710+
711+
const contexts = [];
712+
713+
for (const allContext of allContexts) {
714+
const res = await this.contextAcceptor.shouldAccept(
715+
this.migrateBackgroundContext(allContext)
716+
);
717+
if (res.accepted) {
718+
contexts.push(allContext);
719+
}
720+
}
713721

714722
const batchLimit = pLimit(this.options.scheduledRefreshBatchSize);
715723
return Promise.all(

packages/cubejs-server-core/src/core/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ export type ContextAcceptanceResultWs = ContextAcceptanceResult & {
256256
};
257257

258258
export interface ContextAcceptor {
259-
shouldAccept(context: RequestContext | null): ContextAcceptanceResult;
260-
shouldAcceptHttp(context: RequestContext | null): ContextAcceptanceResultHttp;
261-
shouldAcceptWs(context: RequestContext | null): ContextAcceptanceResultWs;
259+
shouldAccept(context: RequestContext | null): Promise<ContextAcceptanceResult> | ContextAcceptanceResult;
260+
shouldAcceptHttp(context: RequestContext | null): Promise<ContextAcceptanceResultHttp> | ContextAcceptanceResultHttp;
261+
shouldAcceptWs(context: RequestContext | null): Promise<ContextAcceptanceResultWs> | ContextAcceptanceResultWs;
262262
}

0 commit comments

Comments
 (0)