Skip to content

Commit

Permalink
feat: add eslint in ci
Browse files Browse the repository at this point in the history
  • Loading branch information
prakharmathur82 committed Aug 23, 2023
1 parent b156ae5 commit 183594a
Show file tree
Hide file tree
Showing 19 changed files with 2,274 additions and 99 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/test-js-client.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ jobs:
- name: Check formatting
run: npm run format
working-directory: clients/js
- name: Check linting
run: npm run lint
working-directory: clients/js
- name: Test
run: npm test
working-directory: clients/js
1 change: 1 addition & 0 deletions clients/js/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
protos
17 changes: 17 additions & 0 deletions clients/js/.eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
env:
browser: true
commonjs: true
es2021: true
jest: true
extends:
- airbnb-base
- prettier
parserOptions:
ecmaVersion: 12
rules:
quotes: ["error", "single", { "avoidEscape": true }]
no-console: ["error", allow: ["error"]]
semi:
- error
- always
import/extensions: [0, { <js>: "always" }]
39 changes: 16 additions & 23 deletions clients/js/lib/rest.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
import axios from 'axios';
import { v4 as uuidv4 } from 'uuid';

import { createJsonSerializer } from './serializer/json_serializer.js';
import { createProtobufSerializer } from './serializer/proto_serializer.js';
import { retry } from './retry/retry.js';
import { createProtoMarshaller } from './wire/proto_wire.js';
import { createJsonMarshaller } from './wire/json_wire.js';
import protos from '../protos/proton_compiled.js';
import createJsonSerializer from './serializer/json_serializer.js';
import createProtobufSerializer from './serializer/proto_serializer.js';
import retry from './retry/retry.js';
import SerializationType from './types/serialization_type.js';
import WireType from './types/wire_type.js';
import createProtoMarshaller from './wire/proto_wire.js';
import createJsonMarshaller from './wire/json_wire.js';
import { raystack, google } from '../protos/proton_compiled.js';

const NANOSECONDS_PER_MILLISECOND = 1e6;

const SerializationType = Object.freeze({
JSON: 'json',
PROTOBUF: 'protobuf'
});

const WireType = Object.freeze({
JSON: 'application/json',
PROTOBUF: 'application/proto'
});

class RaccoonClient {
/**
* Creates a new instance of the RaccoonClient.
Expand Down Expand Up @@ -77,21 +69,21 @@ class RaccoonClient {
}
this.logger.info(`started request, url: ${this.url}, req-id: ${requestId}`);
const eventsToSend = [];
for (const event of events) {
events.forEach((event) => {
if (event && event.type && event.data) {
let eventMessage = new protos.raystack.raccoon.v1beta1.Event();
const eventMessage = new raystack.raccoon.v1beta1.Event();
eventMessage.type = event.type;
eventMessage.event_bytes = this.serialize(event.data);
eventsToSend.push(eventMessage);
} else {
throw new Error(`Invalid event: ${JSON.stringify(event)}`);
}
}
const sendEventRequest = new protos.raystack.raccoon.v1beta1.SendEventRequest();
});
const sendEventRequest = new raystack.raccoon.v1beta1.SendEventRequest();
sendEventRequest.req_guid = requestId;

const now = Date.now();
sendEventRequest.sent_time = protos.google.protobuf.Timestamp.create({
sendEventRequest.sent_time = google.protobuf.Timestamp.create({
seconds: Math.floor(now / 1000),
nanos: (now % 1000) * NANOSECONDS_PER_MILLISECOND
});
Expand All @@ -100,12 +92,13 @@ class RaccoonClient {
const response = await retry(
async () => this.executeRequest(this.marshaller.marshal(sendEventRequest)),
this.retryMax,
this.retryWait
this.retryWait,
this.logger
);

const sendEventResponse = this.marshaller.unmarshal(
response,
protos.raystack.raccoon.v1beta1.SendEventResponse
raystack.raccoon.v1beta1.SendEventResponse
);

this.logger.info(`ended request, url: ${this.url}, req-id: ${requestId}`);
Expand Down
9 changes: 6 additions & 3 deletions clients/js/lib/retry/retry.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
export async function retry(callback, maxAttempts, waitTime) {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
async function retry(callback, maxAttempts, waitTime, logger) {
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
try {
return await callback();

Check failure on line 4 in clients/js/lib/retry/retry.js

View workflow job for this annotation

GitHub Actions / test-js-client (20)

Unexpected `await` inside a loop
} catch (error) {
if (attempt === maxAttempts - 1) {
throw error;
}
// eslint-disable-next-line
await new Promise((resolve) => setTimeout(resolve, waitTime));
console.info(
logger.info(
`[Retry ${attempt}]: Retrying after ${waitTime} due to the Error: ${error}`
);
}
}
throw new Error('Retry limit exceeded');
}

export default retry;
4 changes: 3 additions & 1 deletion clients/js/lib/serializer/json_serializer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export function createJsonSerializer() {
function createJsonSerializer() {
return function serialize(data) {
if (!data) {
throw new Error('Invalid data object for serialization');
Expand All @@ -11,3 +11,5 @@ export function createJsonSerializer() {
return Array.from(encoder.encode(jsonString));
};
}

export default createJsonSerializer;
4 changes: 3 additions & 1 deletion clients/js/lib/serializer/proto_serializer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export function createProtobufSerializer() {
function createProtobufSerializer() {
return function serialize(data) {
if (!data) {
throw new Error('Invalid data object for serialization');
Expand All @@ -15,3 +15,5 @@ export function createProtobufSerializer() {
return Array.from(data.constructor.encode(data).finish());
};
}

export default createProtobufSerializer;
6 changes: 6 additions & 0 deletions clients/js/lib/types/serialization_type.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const SerializationType = Object.freeze({
JSON: 'json',
PROTOBUF: 'protobuf'
});

export default SerializationType;
6 changes: 6 additions & 0 deletions clients/js/lib/types/wire_type.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const WireType = Object.freeze({
JSON: 'application/json',
PROTOBUF: 'application/proto'
});

export default WireType;
6 changes: 4 additions & 2 deletions clients/js/lib/wire/json_wire.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { WireType } from '../rest.js';
import WireType from '../types/wire_type.js';

export function createJsonMarshaller() {
function createJsonMarshaller() {
function marshal(data) {
if (!data) {
throw new Error('Invalid data object for marshalling');
Expand Down Expand Up @@ -45,3 +45,5 @@ export function createJsonMarshaller() {
getResponseType
};
}

export default createJsonMarshaller;
6 changes: 4 additions & 2 deletions clients/js/lib/wire/proto_wire.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { WireType } from '../rest.js';
import WireType from '../types/wire_type.js';

export function createProtoMarshaller() {
function createProtoMarshaller() {
function marshal(data) {
if (!data) {
throw new Error('Invalid data object for marshalling');
Expand Down Expand Up @@ -44,3 +44,5 @@ export function createProtoMarshaller() {
getResponseType
};
}

export default createProtoMarshaller;
Loading

0 comments on commit 183594a

Please sign in to comment.