Skip to content

Commit 5647bed

Browse files
author
Gerald Baulig
committed
fix(external-jobs): replace '.cjs' with '.js' for runtime import
1 parent 838b895 commit 5647bed

8 files changed

+214
-245
lines changed

cfg/config.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
"messageObject": "io.restorecommerce.job.JobList"
102102
},
103103
"deleteJobs": {
104-
"messageObject": "io.restorecommerce.job.Deleted"
104+
"messageObject": "io.restorecommerce.resourcebase.DeleteRequest"
105105
},
106106
"jobsCreated": {
107107
"messageObject": "io.restorecommerce.job.JobList"
@@ -110,7 +110,7 @@
110110
"messageObject": "io.restorecommerce.job.JobList"
111111
},
112112
"jobsDeleted": {
113-
"messageObject": "io.restorecommerce.resourcebase.DeleteRequest"
113+
"messageObject": "io.restorecommerce.resourcebase.Deleted"
114114
},
115115
"jobDone": {
116116
"messageObject": "io.restorecommerce.job.JobDone"
@@ -225,8 +225,8 @@
225225
}
226226
},
227227
"externalJobs": {
228-
"sourcePath": "./lib/external-jobs",
229-
"importPath": "./external-jobs"
228+
"sourcePath": "./lib/external-jobs/",
229+
"importPath": "./external-jobs/"
230230
},
231231
"queue": [
232232
{
File renamed without changes.

src/schedulingService.ts

+189-217
Large diffs are not rendered by default.

src/utilts.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const unmarshallProtobufAny = (data: any, logger: Logger): any => {
8181
unmarshalled = JSON.parse(decoded);
8282
}
8383
}
84-
} catch (error) {
84+
} catch (error: any) {
8585
logger.error('Error unmarshalling job payload', {
8686
data, code: error.code,
8787
message: error.message, stack: error.stack
@@ -119,13 +119,13 @@ export async function checkAccessRequest(ctx: GQLClientContext, resource: Resour
119119

120120
let result: DecisionResponse | PolicySetRQResponse;
121121
try {
122-
result = await accessRequest(subject, resource, action, ctx, { operation, roleScopingEntityURN: cfg?.get('authorization:urns:roleScopingEntityURN') });
123-
} catch (err) {
122+
result = await accessRequest(subject, resource, action, ctx, { operation, /* roleScopingEntityURN: cfg?.get('authorization:urns:roleScopingEntityURN') */ });
123+
} catch (err: any) {
124124
return {
125125
decision: Response_Decision.DENY,
126126
operation_status: {
127-
code: err.code || 500,
128-
message: err.details || err.message,
127+
code: Number.isInteger(err.code) ? err.code : 500,
128+
message: err.details ?? err.message,
129129
}
130130
};
131131
}

src/worker.ts

+10-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import path from 'path';
21
import * as _ from 'lodash-es';
32
import * as chassis from '@restorecommerce/chassis-srv';
43
import { Events, Topic, registerProtoMeta } from '@restorecommerce/kafka-client';
@@ -339,7 +338,7 @@ export class Worker {
339338
const externalJobDir = process.env.EXTERNAL_JOBS_DIR ?? cfg.get('externalJobs:sourcePath') ?? './lib/external-jobs';
340339
let externalJobFiles: Array<string>;
341340
try {
342-
externalJobFiles = fs.readdirSync(process.env.EXTERNAL_JOBS_DIR ?? './lib/external-jobs');
341+
externalJobFiles = fs.readdirSync(externalJobDir);
343342
} catch (err: any) {
344343
if (err.message.includes('no such file or directory')) {
345344
this.logger.info('No files for external job processors found');
@@ -350,23 +349,22 @@ export class Worker {
350349
if (externalJobFiles?.length > 0) {
351350
externalJobFiles.forEach(async (externalFile) => {
352351
if (externalFile.endsWith('.js') || externalFile.endsWith('.cjs')) {
353-
const import_dir = process.env.EXTERNAL_JOBS_REQUIRE_DIR ?? cfg.get('externalJobs:importPath') ?? './external-jobs/';
354-
352+
const import_path = [
353+
process.env.EXTERNAL_JOBS_REQUIRE_DIR ?? cfg.get('externalJobs:importPath') ?? './external-jobs/',
354+
externalFile
355+
].join('').replace(/\.cjs$/, '.js');
355356
try {
356-
const fileImport = await import(path.join(import_dir, externalFile));
357+
const fileImport = await import(import_path);
358+
this.logger?.info('imported:', fileImport);
357359
// check for double default
358360
if (fileImport?.default?.default) {
359-
(async () => (await import(import_dir + externalFile)).default.default(cfg, logger, events, runWorker))().catch(err => {
360-
this.logger.error(`Error scheduling external job ${externalFile}`, { err: err.message });
361-
});
361+
await fileImport.default.default(cfg, logger, events, runWorker);
362362
} else {
363-
(async () => (await import(import_dir + externalFile)).default(cfg, logger, events, runWorker))().catch(err => {
364-
this.logger.error(`Error scheduling external job ${externalFile}`, { err: err.message });
365-
});
363+
await fileImport.default(cfg, logger, events, runWorker);
366364
}
367365
}
368366
catch (err: any) {
369-
this.logger.error(`Error scheduling external job ${externalFile}`, { err });
367+
this.logger?.error(`Error scheduling external job ${import_path}`, { err });
370368
}
371369
}
372370
});

test/grpc_acs.spec.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ const startGrpcMockServer = async (methodWithOutput: MethodWithOutput[]) => {
150150
oneofs: true
151151
});
152152
await mockServer.start();
153-
logger.info('Mock ACS Server started on port 50061');
153+
logger.info(`Mock ACS Server started on ${mockServer.serverAddress}`);
154154
} catch (err) {
155155
logger.error('Error starting mock ACS server', err);
156156
}
@@ -183,7 +183,7 @@ const startIDSGrpcMockServer = async (methodWithOutput: MethodWithOutput[]) => {
183183
oneofs: true
184184
});
185185
await mockServerIDS.start();
186-
logger.info('Mock IDS Server started on port 50051');
186+
logger.info(`Mock IDS Server started on ${mockServerIDS.serverAddress}`);
187187
} catch (err) {
188188
logger.error('Error starting mock IDS server', err);
189189
}
@@ -204,7 +204,6 @@ describe(`testing scheduling-srv ${testSuffix}: gRPC`, () => {
204204
let worker: Worker;
205205
let jobEvents: Topic;
206206
let grpcSchedulingSrv: SchedulingServiceClient;
207-
let cfg: any;
208207

209208
before(async function (): Promise<any> {
210209
this.timeout(40000);
@@ -285,7 +284,7 @@ describe(`testing scheduling-srv ${testSuffix}: gRPC`, () => {
285284
payloadShouldBeEmpty(await grpcSchedulingSrv.read(JobReadRequest.fromPartial({ subject }), {}), false);
286285
});
287286
beforeEach(async () => {
288-
for (let event of ['jobsCreated', 'jobsDeleted']) {
287+
for (const event of ['jobsCreated', 'jobsDeleted']) {
289288
await jobEvents.on(event, () => { });
290289
}
291290
});

test/kafka_acs.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ const startGrpcMockServer = async (methodWithOutput: MethodWithOutput[]) => {
129129
oneofs: true
130130
});
131131
await mockServer.start();
132-
logger.info('Mock ACS Server started on port 50061');
132+
logger.info(`Mock ACS Server started on ${mockServer.serverAddress}`);
133133
} catch (err) {
134134
logger.error('Error starting mock ACS server', err);
135135
}
@@ -162,7 +162,7 @@ const startIDSGrpcMockServer = async (methodWithOutput: MethodWithOutput[]) => {
162162
oneofs: true
163163
});
164164
await mockServerIDS.start();
165-
logger.info('Mock IDS Server started on port 50051');
165+
logger.info(`Mock IDS Server started on ${mockServerIDS.serverAddress}`);
166166
} catch (err) {
167167
logger.error('Error starting mock IDS server', err);
168168
}

test/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { PolicySetRQResponse } from '@restorecommerce/acs-client';
66
import { Effect } from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/rule.js';
77
import { createServiceConfig } from '@restorecommerce/service-config';
88

9-
export const cfg = createServiceConfig(process.cwd() + '/test');
9+
export const cfg = createServiceConfig(process.cwd());
1010

1111
export function validateScheduledJob(job: any, expectedSchedule: string, logger: Logger): void {
1212
should.exist(job.data);

0 commit comments

Comments
 (0)