Compare commits

...
36 Commits
Author SHA1 Message Date
Gabriel Amorim 68e5534edb Merge pull request #115 from dadosfera/fix/recreate-input
FIX: recreating input getting id the right way
2022-07-06 11:54:42 -03:00
Gabriel Rosa 51c7bdfebf FIX: recreating input getting id the right way 2022-07-06 11:53:22 -03:00
Rodrigo Zamboni 9f6d2c7c9c Merge pull request #114 from dadosfera/feat/logs-lib
HOTFIX - FIX: delete info field before using it
2022-07-06 11:11:20 -03:00
rodrigo.zamboni 02955b99fe FIX: delete info field before using it 2022-07-06 11:06:52 -03:00
Rodrigo Zamboni 93505d3268 Merge pull request #112 from dadosfera/feat/logs-lib
Add Logs Lib and APM to prd
2022-07-06 09:55:48 -03:00
rodrigo.zamboni e5bf5b23e7 FIX: Kibana Transactions working 2022-07-05 17:00:12 -03:00
rodrigo.zamboni 0d20b4dcab UPDATE: Prepared Maestro for APM 2022-07-01 17:53:15 -03:00
rodrigo.zamboni bb5cf0494d FIX: Remove health check logs message 2022-07-01 17:02:52 -03:00
rodrigo.zamboni c058e54c90 FIX: Remove health check logs message 2022-07-01 16:51:21 -03:00
rodrigo.zamboni e82166f2c7 FIX: fix Capital letter service name 2022-07-01 16:30:41 -03:00
rodrigo.zamboni f8b495036d Merge branch 'passport/facebook' into feat/logs-lib 2022-06-30 14:13:23 -03:00
Gabriel Rosa b03b8f3b08 FEAT: passport facebook 2022-06-30 12:35:47 -03:00
Gabriel Amorim aaf99b8c2e FEAT: passport salesforce and improvements connector manager
Merge pull request #111 from dadosfera/feature/passport-salesforce
2022-06-30 10:28:58 -03:00
rodrigo.zamboni 426ff2141f FIX: Changed registry after adding protospack to codeartifact 2022-06-29 17:59:53 -03:00
Gabriel Rosa 8060cd769f merge connector-manager 2022-06-29 17:27:21 -03:00
rodrigo.zamboni ac021ea7e1 FIX: dockerfile 2022-06-29 17:25:53 -03:00
Gabriel Rosa 89eed11561 FIX: get salesforce access token and refresh token 2022-06-29 17:25:29 -03:00
rodrigo.zamboni abe78bff9b FIX: dockerfile 2022-06-29 16:46:28 -03:00
rodrigo.zamboni 3a26c5bebf FIX: dockerfile 2022-06-29 15:45:04 -03:00
rodrigo.zamboni 2af0b3af52 FIX: dockerfile 2022-06-29 15:39:36 -03:00
rodrigo.zamboni c28bc74b3f FIX: fix commands 2022-06-29 15:23:08 -03:00
rodrigo.zamboni 7eae88b5cd FIX: Added aws cli installation on dockerfile 2022-06-29 15:15:13 -03:00
rodrigo.zamboni 1e66065a21 FIC: add codeartifact login on dockerfile 2022-06-29 15:06:01 -03:00
rodrigo.zamboni 1e407f081e added package.lock 2022-06-29 14:49:49 -03:00
rodrigo.zamboni 31c507d667 FIX: Merged with radaels branch 2022-06-29 14:27:17 -03:00
rodrigo.zamboni a39622bfa1 UPDATE: Added log-lib on more routes and services 2022-06-29 14:12:13 -03:00
Victor Radael 0895922b1c Merge main 2022-06-29 14:12:01 -03:00
Victor Radael 1cc094d40b Merge main 2022-06-29 14:09:33 -03:00
Victor Radael d13aa2b72a Swagger 2022-06-29 13:59:46 -03:00
Victor Radael a98ec4bf32 Merge branch 'merge/auth+connectors-manager' of github.com:dadosfera/maestro into merge/auth+connectors-manager 2022-06-29 13:59:15 -03:00
Victor Radael d5b1cb51b4 Search Adapt fields 2022-06-29 13:58:32 -03:00
Arthur Simas 5d3510639e FEAT: salesforce passport 2022-06-29 12:39:54 -03:00
rodrigo.zamboni bc0d456c2a merge with main 2022-06-29 12:28:00 -03:00
rodrigo.zamboni b658eacce6 pull from main 2022-06-29 10:56:43 -03:00
rodrigo.zamboni 9c124be191 UPGRADE: Added LOgs lib 2022-06-29 10:50:03 -03:00
rodrigo.zamboni 3c660738f4 installed logs lib 2022-06-22 10:23:54 -03:00
40 changed files with 4650 additions and 4063 deletions
+6
View File
@@ -4,6 +4,12 @@ ARG NPM_TOKEN
COPY package.json .
COPY package-lock.json .
COPY .npmrc .
RUN apk update && apk add curl unzip
RUN apk add --no-cache aws-cli
RUN aws codeartifact login --tool npm --repository dadosfera-npm --domain dadosfera --domain-owner 611330257153 --region us-east-1
RUN npm install
RUN rm -f ./.npmrc
+3819 -3715
View File
File diff suppressed because it is too large Load Diff
+7 -4
View File
@@ -36,16 +36,19 @@
"@nestjs/platform-express": "^8.4.7",
"@nestjs/schedule": "^1.1.0",
"@nestjs/swagger": "^5.2.1",
"@victorradael/protospack": "2.5.0",
"@victorradael/protospack-v2": "1.1.1",
"protospack": "2.5.1",
"protospack-v2": "1.1.1",
"axios": "^0.25.0",
"cron-parser": "^4.4.0",
"dadosfera-logs": "^1.0.0-alpha.10",
"elastic-apm-node": "^3.36.0",
"dotenv": "^14.3.2",
"helmet": "^5.1.0",
"jsonwebtoken": "^8.5.1",
"jwk-to-pem": "^2.0.5",
"passport": "^0.6.0",
"passport-facebook": "^3.0.0",
"passport-forcedotcom": "^0.1.5",
"passport-google-oauth20": "^2.0.0",
"passport-hubspot-oauth2": "^1.0.3",
"passport-mailchimp": "^1.1.0",
@@ -65,11 +68,11 @@
"@types/jest": "27.0.2",
"@types/jsonwebtoken": "^8.5.8",
"@types/jwk-to-pem": "^2.0.1",
"@types/multer": "^1.4.7",
"@types/node": "^16.11.41",
"@types/passport-facebook": "^2.1.11",
"@types/passport-google-oauth20": "^2.0.11",
"@types/passport-oauth2": "^1.4.11",
"@types/multer": "^1.4.7",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^5.29.0",
"@typescript-eslint/parser": "^5.29.0",
@@ -104,4 +107,4 @@
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
}
+4 -4
View File
@@ -1,6 +1,7 @@
import { Module } from '@nestjs/common';
import { ClientsModule } from '@nestjs/microservices';
import { ConfigModule } from '@nestjs/config';
import { DadosferaLogger } from 'dadosfera-logs';
import { InputsController } from './modules/inputs/inputs.controller';
import { TransformationsController } from './modules/transformations/transformations.controller';
@@ -37,6 +38,7 @@ import { AuthenticationGuard } from './authentication/authentication.guard';
import { APP_GUARD } from '@nestjs/core';
import { GoogleStrategy } from './modules/oauth/passport-strategies/google-strategy';
import { MailChimpStrategy } from './modules/oauth/passport-strategies/mailchimp-strategy';
import { SalesforceStrategy } from './modules/oauth/passport-strategies/salesforce-strategy';
import { ConnectorClientConfiguration } from './clients/connector/client.config';
import { ConnectorController } from './modules/connector/connector.controller';
import { ConnectorClientService } from './clients/connector/client.service';
@@ -61,6 +63,7 @@ const connectorClient = new ConnectorClientConfiguration();
ConnectorController,
],
providers: [
DadosferaLogger,
{ provide: 'OAUTH_SECRETS', useValue: getOauthSecrets() },
InputsService,
TransformationsService,
@@ -75,14 +78,11 @@ const connectorClient = new ConnectorClientConfiguration();
AuthClientService,
PermissionsClientService,
CatalogService,
{
provide: APP_GUARD,
useClass: AuthenticationGuard,
},
HubspotStrategy,
FacebookStrategy,
GoogleStrategy,
MailChimpStrategy,
SalesforceStrategy,
{
provide: APP_GUARD,
useClass: AuthenticationGuard,
+7 -3
View File
@@ -4,11 +4,12 @@ import {
OnApplicationBootstrap,
ExecutionContext,
Logger,
Inject,
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import assert from 'assert';
import jwt from 'jsonwebtoken';
import { DadosferaLogger } from 'dadosfera-logs';
import { AuthClientService } from '../clients/auth/client.service';
import { Permission } from './permissions.enum';
import {
@@ -24,15 +25,18 @@ import ErrorCodes from '../utils/errorCodes';
export class AuthenticationGuard
implements CanActivate, OnApplicationBootstrap
{
private readonly logger = new Logger(AuthenticationGuard.name);
logger: any;
pems: Map<string, string>;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private reflector: Reflector,
private authClient: AuthClientService,
) {
this.pems = new Map();
this.logger = dadosferaLogger.logger;
}
async onApplicationBootstrap() {
@@ -125,7 +129,7 @@ export class AuthenticationGuard
} catch (err) {
// log errors if authentication is required
if (mustBeAuthenticated) {
this.logger.log('Unable to verify duc access token\n' + err.stack);
this.logger.error('Unable to verify duc access token\n' + err.stack);
}
return false;
+24 -17
View File
@@ -1,8 +1,9 @@
import { Logger, OnModuleInit, Inject } from '@nestjs/common';
import { OnModuleInit, Inject } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { DadosferaLogger } from 'dadosfera-logs';
import { ProtoServices } from '@victorradael/protospack-v2/dist/lib/Duc';
import { AuthProtoService as AuthServiceInterface } from '@victorradael/protospack-v2/dist/lib/Duc/interfaces/write-service';
import { ProtoServices } from 'protospack-v2/dist/lib/Duc';
import { AuthProtoService as AuthServiceInterface } from 'protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
AuthGetPublicKeysResponse,
AuthSignInRequest,
@@ -25,15 +26,21 @@ import {
AuthVerifyResetPasswordCodeResponse,
AuthConfirmResetPasswordRequest,
AuthConfirmResetPasswordResponse,
} from '@victorradael/protospack-v2/dist/lib/Duc/interfaces/messages';
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
import grpcHandler from '../../utils/grpcHandler';
export class AuthClientService implements OnModuleInit {
private readonly logger = new Logger(AuthClientService.name);
logger: any;
private authService: AuthServiceInterface;
constructor(@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc) {}
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc,
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.authService = this.grpcClient.getService<AuthServiceInterface>(
@@ -42,7 +49,7 @@ export class AuthClientService implements OnModuleInit {
}
async getPublicKeys() {
this.logger.log('GetPublicKeys');
this.logger.info('GetPublicKeys');
return grpcHandler<AuthGetPublicKeysResponse>(
this.authService.AuthGetPublicKeys({}),
@@ -50,7 +57,7 @@ export class AuthClientService implements OnModuleInit {
}
async signIn({ username, password, totp }: AuthSignInRequest) {
this.logger.log('SignIn');
this.logger.info('SignIn');
return grpcHandler<AuthSignInResponse>(
this.authService.AuthSignIn({ username, password, totp }),
@@ -58,7 +65,7 @@ export class AuthClientService implements OnModuleInit {
}
async refreshAccessToken({ refreshToken }: AuthRefreshAccessTokenRequest) {
this.logger.log('RefreshAccessToken');
this.logger.info('RefreshAccessToken');
return grpcHandler<AuthRefreshAccessTokenResponse>(
this.authService.AuthRefreshAccessToken({ refreshToken }),
@@ -70,7 +77,7 @@ export class AuthClientService implements OnModuleInit {
oldPassword,
newPassword,
}: AuthChangePasswordRequest) {
this.logger.log('ChangePassword');
this.logger.info('ChangePassword');
return grpcHandler<AuthChangePasswordResponse>(
this.authService.AuthChangePassword({
@@ -82,7 +89,7 @@ export class AuthClientService implements OnModuleInit {
}
async resetPassword({ username }: AuthResetPasswordRequest) {
this.logger.log('resetPassword');
this.logger.info('resetPassword');
return grpcHandler<AuthResetPasswordResponse>(
this.authService.AuthResetPassword({ username }),
@@ -93,7 +100,7 @@ export class AuthClientService implements OnModuleInit {
username,
code,
}: AuthVerifyResetPasswordCodeRequest) {
this.logger.log('verifyResetPasswordCode');
this.logger.info('verifyResetPasswordCode');
return grpcHandler<AuthVerifyResetPasswordCodeResponse>(
this.authService.AuthVerifyResetPasswordCode({ username, code }),
@@ -105,7 +112,7 @@ export class AuthClientService implements OnModuleInit {
code,
newPassword,
}: AuthConfirmResetPasswordRequest) {
this.logger.log('confirmResetPassword');
this.logger.info('confirmResetPassword');
return grpcHandler<AuthConfirmResetPasswordResponse>(
this.authService.AuthConfirmResetPassword({
@@ -117,7 +124,7 @@ export class AuthClientService implements OnModuleInit {
}
async enableTotpMFA({ accessToken, password }: AuthEnableTotpMfaRequest) {
this.logger.log('enableTotpMFA');
this.logger.info('enableTotpMFA');
return grpcHandler<AuthEnableTotpMfaResponse>(
this.authService.AuthEnableTotpMfa({ accessToken, password }),
@@ -125,7 +132,7 @@ export class AuthClientService implements OnModuleInit {
}
async disableTotpMFA({ accessToken, password }: AuthDisableTotpMfaRequest) {
this.logger.log('disableTotpMFA');
this.logger.info('disableTotpMFA');
return grpcHandler<AuthDisableTotpMfaResponse>(
this.authService.AuthDisableTotpMfa({ accessToken, password }),
@@ -133,7 +140,7 @@ export class AuthClientService implements OnModuleInit {
}
async dismissTotpMFA({ accessToken }: AuthDismissTotpMfaRequest) {
this.logger.log('dismissTotpMFA');
this.logger.info('dismissTotpMFA');
return grpcHandler<AuthDismissTotpMfaResponse>(
this.authService.AuthDismissTotpMfa({ accessToken }),
@@ -141,7 +148,7 @@ export class AuthClientService implements OnModuleInit {
}
async verifyTotp({ accessToken, totp }: AuthVerifyTotpMfaRequest) {
this.logger.log('disableTotpMFA');
this.logger.info('disableTotpMFA');
return grpcHandler<AuthVerifyTotpMfaResponse>(
this.authService.AuthVerifyTotpMfa({ accessToken, totp }),
+1 -1
View File
@@ -1,6 +1,6 @@
import { credentials } from '@grpc/grpc-js';
import { ClientOptions, Transport } from '@nestjs/microservices';
import { ConnectorManager } from '@victorradael/protospack-v2';
import { ConnectorManager } from 'protospack-v2';
export class ConnectorClientConfiguration {
config(): ClientOptions {
+108 -67
View File
@@ -4,16 +4,22 @@ import {
HttpException,
HttpStatus,
} from '@nestjs/common';
import { DadosferaLogger } from 'dadosfera-logs';
import { ClientGrpc } from '@nestjs/microservices';
import { ConnectorManager } from '@victorradael/protospack-v2';
import { ConnectorManager } from 'protospack-v2';
import { from } from 'rxjs';
export class ConnectorClientService implements OnModuleInit {
private connectorServiceRead: ConnectorManager.ReadService.ConnectorManagerReadServices;
private connectorServiceWrite: ConnectorManager.WriteService.ConnectorManagerWriteServices;
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('CONNECTOR_PACKAGE') private readonly grpcClient: ClientGrpc,
) {}
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.connectorServiceWrite =
@@ -49,22 +55,27 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
console.log(err.details);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.details);
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'Upload');
this.logger.info('ConnectorClientService - Upload');
return result;
}
@@ -86,22 +97,27 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
console.log(err.details);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.details);
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'Upload');
this.logger.info('ConnectorClientService - Upload');
return result;
}
@@ -119,21 +135,26 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'getAllConnectors');
this.logger.info('ConnectorClientService - getAllConnectors');
return result;
}
@@ -150,21 +171,26 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'getAllConnectors');
this.logger.info('ConnectorClientService - getAllConnectors');
return result;
}
@@ -181,21 +207,26 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'getAllConnectors');
this.logger.info('ConnectorClientService - getAllConnectors');
return result;
}
@@ -213,21 +244,26 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'getAllConnectors');
this.logger.info('ConnectorClientService - getAllConnectors');
return result;
}
@@ -245,21 +281,26 @@ export class ConnectorClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
}).catch((err) => {
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
})
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err);
throw new HttpException(
err.details,
err.code === 6 ? HttpStatus.CONFLICT : 400,
);
});
console.log('ConnectorClientService', 'getAllConnectors');
this.logger.info('ConnectorClientService - getAllConnectors');
return result;
}
+1 -1
View File
@@ -3,7 +3,7 @@ import { ClientOptions, Transport } from '@nestjs/microservices';
import {
ProtoPackages,
ProtoPaths,
} from '@victorradael/protospack-v2/dist/lib/Duc';
} from 'protospack-v2/dist/lib/Duc';
export class DucClient {
config(): ClientOptions {
+1 -1
View File
@@ -1,7 +1,7 @@
import { credentials } from '@grpc/grpc-js';
import { ClientOptions, Transport } from '@nestjs/microservices';
import { InputPackages, InputProtoFilePath } from '@victorradael/protospack';
import { InputPackages, InputProtoFilePath } from 'protospack';
export class InputsClientConfiguration {
config(): ClientOptions {
+47 -27
View File
@@ -15,7 +15,7 @@ import {
InputService,
TestConnectionGetColumnsRequest,
TestConnectionRequest,
} from '@victorradael/protospack';
} from 'protospack';
import axios, { AxiosRequestConfig } from 'axios';
import { lastValueFrom } from 'rxjs';
import { InputModel } from 'src/modules/inputs/dtos/input.model';
@@ -24,16 +24,22 @@ import {
objectSnakeToCamel,
} from 'src/utils/CaseConverter';
import { mustache } from 'src/utils/mustache';
import { DadosferaLogger } from 'dadosfera-logs';
import { OauthSecrets } from 'src/utils/OauthSecrets';
import { URLSearchParams } from 'url';
import { IIdRequest, UpdateInputRequest } from './interfaces';
export class InputsClientService implements OnModuleInit {
private inputService: InputService;
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('INPUTS_PACKAGE') private readonly grpcClient: ClientGrpc,
@Inject('OAUTH_SECRETS') private readonly oauthSecrets: OauthSecrets,
) {}
) {
this.logger = dadosferaLogger.logger;
}
async onModuleInit() {
this.inputService =
@@ -41,7 +47,7 @@ export class InputsClientService implements OnModuleInit {
}
async newCreate(createInputDto: InputNewCreateRequest) {
console.log('InputClientService', 'Create');
this.logger.info('InputClientService - Create');
const input = await lastValueFrom(
this.inputService.NewCreate(objectSnakeToCamel(createInputDto)),
@@ -51,7 +57,7 @@ export class InputsClientService implements OnModuleInit {
}
async createGeneric(createInputGeneric) {
console.log('InputClientService', 'Create');
this.logger.info('InputClientService - Create');
const { info, ...data } = createInputGeneric;
// data.credentials = await this.getInputTokens(data);
if (data.options) delete data.options;
@@ -76,23 +82,24 @@ export class InputsClientService implements OnModuleInit {
}
async createS3Inputs(createInputDto: InputCreateS3Request) {
console.log('InputClientService', 'Create');
this.logger.info('InputClientService - Create');
objectSnakeToCamel(createInputDto);
const createInputResponse = await lastValueFrom(
this.inputService.CreateS3(createInputDto),
).catch((e) => {
throw new HttpException(e.details, 500);
});
console.log('done');
this.logger.info('Done');
objectCamelToSnake(createInputResponse);
return createInputResponse;
}
async findOne(data: IIdRequest) {
console.log('InputClientService', 'FindOne');
this.logger.info('InputClientService - FindOne');
const findOneInputResponse = await lastValueFrom(
this.inputService.FindOne(objectSnakeToCamel(data)),
).catch((e) => {
this.logger.error(e.details);
throw new HttpException(e.details, HttpStatus.INTERNAL_SERVER_ERROR);
});
objectCamelToSnake(findOneInputResponse);
@@ -100,10 +107,11 @@ export class InputsClientService implements OnModuleInit {
}
async findAll(data) {
console.log('InputClientService', 'FindAll');
this.logger.info('InputClientService - FindAll');
const findAllInputResponse = await lastValueFrom(
this.inputService.FindAll(objectSnakeToCamel(data)),
).catch((e) => {
this.logger.error(e.details);
throw new HttpException(e.details, HttpStatus.INTERNAL_SERVER_ERROR);
});
findAllInputResponse.inputs.forEach((input) => objectCamelToSnake(input));
@@ -112,23 +120,26 @@ export class InputsClientService implements OnModuleInit {
}
async update(updateInputDTO: UpdateInputRequest) {
console.log('InputClientService', 'Update');
this.logger.info('InputClientService - Update');
const updateInputResponse = await new Promise((resolve, reject) => {
this.inputService.Update(objectSnakeToCamel(updateInputDTO)).subscribe({
next(x) {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -136,7 +147,7 @@ export class InputsClientService implements OnModuleInit {
}
async remove(idRequest: IIdRequest) {
console.log('InputClientService', 'Remove');
this.logger.info('InputClientService - Remove');
const removeInputResponse = await new Promise((resolve, reject) => {
this.inputService.Remove(objectSnakeToCamel(idRequest)).subscribe({
@@ -144,16 +155,19 @@ export class InputsClientService implements OnModuleInit {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -161,23 +175,26 @@ export class InputsClientService implements OnModuleInit {
}
async testConnection(data: TestConnectionRequest) {
console.log('InputClientService', 'TestConnection');
this.logger.info('InputClientService - TestConnection');
const testConnectionResponse = await new Promise((resolve, reject) => {
this.inputService.NewTestConnection(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -185,23 +202,26 @@ export class InputsClientService implements OnModuleInit {
}
async getColumns(data: TestConnectionGetColumnsRequest) {
console.log('InputClientService', 'TestConnection/Get-Columns');
this.logger.info('InputClientService - TestConnection/Get-Columns');
const getColumnsResponse = await new Promise((resolve, reject) => {
this.inputService.GetColumns(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -260,7 +280,7 @@ export class InputsClientService implements OnModuleInit {
};
const { data } = await axios(axiosRequestConfig).catch((err) => {
console.log(err.response.data);
this.logger.error(err.response.data);
throw new HttpException(err.response.data.message, err.response.status);
});
for (const key in get_tokens_set_response) {
@@ -273,12 +293,12 @@ export class InputsClientService implements OnModuleInit {
}
async getAvailableEntities(data) {
console.log('InputClientService', 'GetAvailableEntities');
this.logger.info('InputClientService - GetAvailableEntities');
objectSnakeToCamel(data);
const response = await lastValueFrom(
this.inputService.GetAvailableEntities(data),
).catch((err) => {
console.log(err);
this.logger.info(err.details);
if (err.details && err.details.includes('400'))
throw new HttpException('Plugin inválido', HttpStatus.BAD_REQUEST);
throw new HttpException(err.details, HttpStatus.INTERNAL_SERVER_ERROR);
+3 -1
View File
@@ -29,8 +29,10 @@ interface Cron {
}
export interface Info {
costumer_id: string;
customer_id: string;
user_id: string;
customer: string;
customer_tier: string;
}
export interface ICreateInputRequest {
+1 -1
View File
@@ -1,4 +1,4 @@
import { OutputPackages, OutputProtoFilePath } from '@victorradael/protospack';
import { OutputPackages, OutputProtoFilePath } from 'protospack';
import { ClientOptions, Transport } from '@nestjs/microservices';
import { credentials } from '@grpc/grpc-js';
+43 -22
View File
@@ -1,9 +1,10 @@
import { Controller, Inject, OnModuleInit } from '@nestjs/common';
import { ClientGrpc, Payload } from '@nestjs/microservices';
import { DadosferaLogger } from 'dadosfera-logs';
import {
OutputServicesNames,
OutputsServiceInterface,
} from '@victorradael/protospack';
} from 'protospack';
import {
objectCamelToSnake,
objectSnakeToCamel,
@@ -17,9 +18,14 @@ import {
@Controller('output')
export class OutputsClientService implements OnModuleInit {
private outputService: OutputsServiceInterface;
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('OUTPUTS_PACKAGE') private readonly grpcClient: ClientGrpc,
) {}
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.outputService = this.grpcClient.getService<OutputsServiceInterface>(
@@ -28,7 +34,7 @@ export class OutputsClientService implements OnModuleInit {
}
async create(@Payload() createOutputDto: ICreateOutputRequest) {
console.log('OutputClientService', 'Create');
this.logger.info('OutputClientService - Create');
const createOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Create(objectSnakeToCamel(createOutputDto)).subscribe({
@@ -36,16 +42,19 @@ export class OutputsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -55,7 +64,7 @@ export class OutputsClientService implements OnModuleInit {
}
async findAll(data) {
console.log('OutputClientService', 'FindAll');
this.logger.info('OutputClientService - FindAll');
const findAllOutputResponse = await new Promise((resolve, reject) => {
this.outputService.FindAll(objectSnakeToCamel(data)).subscribe({
@@ -63,16 +72,19 @@ export class OutputsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -84,7 +96,7 @@ export class OutputsClientService implements OnModuleInit {
}
async findOne(data: IIdRequest) {
console.log('OutputClientService', 'FindOne');
this.logger.info('OutputClientService - FindOne');
const findOneOutputResponse = await new Promise((resolve, reject) => {
this.outputService.FindOne(objectSnakeToCamel(data)).subscribe({
@@ -92,16 +104,19 @@ export class OutputsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -109,7 +124,7 @@ export class OutputsClientService implements OnModuleInit {
}
async update(updateOutPutDTO: IOutputUpdateRequest) {
console.log('OutputClientService', 'Update');
this.logger.info('OutputClientService - Update');
const updateOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Update(objectSnakeToCamel(updateOutPutDTO)).subscribe({
@@ -117,16 +132,19 @@ export class OutputsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -134,7 +152,7 @@ export class OutputsClientService implements OnModuleInit {
}
async remove(data: IIdRequest) {
console.log('OutputClientService', 'Remove');
this.logger.info('OutputClientService - Remove');
const removeOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Remove(objectSnakeToCamel(data)).subscribe({
@@ -142,16 +160,19 @@ export class OutputsClientService implements OnModuleInit {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
+14 -8
View File
@@ -1,20 +1,26 @@
import { Logger, OnModuleInit, Inject } from '@nestjs/common';
import { OnModuleInit, Inject } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { ProtoServices } from '@victorradael/protospack-v2/dist/lib/Duc';
import { PermissionsProtoService as PermissionsServiceInterface } from '@victorradael/protospack-v2/dist/lib/Duc/interfaces/write-service';
import { ProtoServices } from 'protospack-v2/dist/lib/Duc';
import { PermissionsProtoService as PermissionsServiceInterface } from 'protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
Empty,
InjectPermissionsRequest,
} from '@victorradael/protospack-v2/dist/lib/Duc/interfaces/messages';
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
import { DadosferaLogger } from 'dadosfera-logs';
import grpcHandler from '../../utils/grpcHandler';
export class PermissionsClientService implements OnModuleInit {
private readonly logger = new Logger(PermissionsClientService.name);
logger: any;
private permissionsService: PermissionsServiceInterface;
constructor(@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc) {}
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc,
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.permissionsService =
@@ -24,7 +30,7 @@ export class PermissionsClientService implements OnModuleInit {
}
async injectPermissions({ permissions }: InjectPermissionsRequest) {
this.logger.log('InjectPermissions');
this.logger.info('InjectPermissions');
return grpcHandler<Empty>(
this.permissionsService.InjectPermissions({ permissions }),
+1 -1
View File
@@ -2,7 +2,7 @@ import { ClientOptions, Transport } from '@nestjs/microservices';
import {
PipelinePackages,
PipelineProtoFilePath,
} from '@victorradael/protospack';
} from 'protospack';
import { credentials } from '@grpc/grpc-js';
export class PipelinesClientConfiguration {
+72 -43
View File
@@ -5,10 +5,7 @@ import {
OnModuleInit,
} from '@nestjs/common';
import { ClientGrpc, Payload } from '@nestjs/microservices';
import {
PipelineServicesNames,
PipelinesServiceInterface,
} from '@victorradael/protospack';
import { PipelineServicesNames, PipelinesServiceInterface } from 'protospack';
import { lastValueFrom } from 'rxjs';
import {
objectCamelToSnake,
@@ -20,12 +17,18 @@ import {
IIdRequest,
IUpdatePipelineRequest,
} from './interfaces';
import { DadosferaLogger } from 'dadosfera-logs';
export class PipelinesClientService implements OnModuleInit {
private pipelineService: PipelinesServiceInterface;
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('PIPELINES_PACKAGE') private readonly grpcClient: ClientGrpc,
) {}
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.pipelineService =
@@ -35,40 +38,47 @@ export class PipelinesClientService implements OnModuleInit {
}
async create(@Payload() createPipelineDto: ICreatePipelineDto) {
console.log('PipelinesClientService', 'Create');
this.logger.info('PipelinesClientService - Create');
const createPipelineResponse = await lastValueFrom(
this.pipelineService.Create(objectSnakeToCamel(createPipelineDto)),
).catch((error: { details: string }) => {
if (error.details.includes('INVALID_REQUEST')) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [errorType, message] = error.details.split('|');
throw new BadRequestException(message);
}
throw new InternalServerErrorException(error.details);
});
)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((error: { details: string }) => {
if (error.details.includes('INVALID_REQUEST')) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [errorType, message] = error.details.split('|');
throw new BadRequestException(message);
}
throw new InternalServerErrorException(error.details);
});
return createPipelineResponse;
}
async findAll(data: IIdRequest) {
console.log('PipelinesClientService', 'FindAll');
this.logger.info('PipelinesClientService - FindAll');
const findAllPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.FindAll(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x.pipelines);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -76,7 +86,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async findOne(data: IIdRequest) {
console.log('PipelinesClientService', 'FindOne');
this.logger.info('PipelinesClientService - FindOne');
const findOnePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.FindOne(objectSnakeToCamel(data)).subscribe({
@@ -84,16 +94,19 @@ export class PipelinesClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -101,7 +114,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async update(UpdatePipelineRequest: IUpdatePipelineRequest) {
console.log('PipelinesClientService', 'Update');
this.logger.info('PipelinesClientService - Update');
const updatePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService
@@ -111,16 +124,19 @@ export class PipelinesClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
//console.log('done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -128,7 +144,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async remove(data: IIdRequest) {
console.log('PipelinesClientService', 'Remove');
this.logger.info('PipelinesClientService - Remove');
const removePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.remove(objectSnakeToCamel(data)).subscribe({
@@ -136,16 +152,19 @@ export class PipelinesClientService implements OnModuleInit {
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// this.logger.info('Done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -153,7 +172,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async getPipelineLogsMessages(data: IGetPipelineLogsRequest) {
console.log('PipelinesClientService', 'GetPipelineLogsMessages');
this.logger.info('PipelinesClientService - GetPipelineLogsMessages');
const logsPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.getPipelineLogs(data).subscribe({
@@ -161,16 +180,19 @@ export class PipelinesClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// this.logger.info('Done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -178,7 +200,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async getPipelineStatus(data) {
console.log('PipelinesClientService', 'GetPipelineStatus');
this.logger.info('PipelinesClientService - GetPipelineStatus');
const statusPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService
@@ -195,16 +217,19 @@ export class PipelinesClientService implements OnModuleInit {
resolve({ status: statusArray });
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// this.logger.info('Done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -212,7 +237,7 @@ export class PipelinesClientService implements OnModuleInit {
}
async runPipeline({ id, info }: IIdRequest) {
console.log('PipelinesClientService', 'RunPipeline');
this.logger.info('PipelinesClientService - RunPipeline');
const statusPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService
.triggerPipeline(objectSnakeToCamel({ id, info }))
@@ -226,16 +251,20 @@ export class PipelinesClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
this.logger.error('Observable Error');
reject(err);
},
complete() {
console.log('done');
this.logger.info('Done');
},
});
})
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
+1 -1
View File
@@ -2,7 +2,7 @@ import { ClientOptions, Transport } from '@nestjs/microservices';
import {
TransformationPackages,
TransformationProtoFilePath,
} from '@victorradael/protospack';
} from 'protospack';
import { credentials } from '@grpc/grpc-js';
export class TransformationsClientConfiguration {
+43 -22
View File
@@ -1,6 +1,7 @@
import { Controller, Inject, OnModuleInit, Post } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { TransformationsServiceInterface } from '@victorradael/protospack';
import { TransformationsServiceInterface } from 'protospack';
import { DadosferaLogger } from 'dadosfera-logs';
import {
objectCamelToSnake,
objectSnakeToCamel,
@@ -10,9 +11,14 @@ import { ICreateTransformationsRequest, IIdRequest } from './interfaces';
@Controller('transformation')
export class TransformationsClientService implements OnModuleInit {
private transformationService: TransformationsServiceInterface;
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('TRANSFORMATIONS_PACKAGE') private readonly grpcClient: ClientGrpc,
) {}
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.transformationService =
@@ -23,7 +29,7 @@ export class TransformationsClientService implements OnModuleInit {
@Post()
async create(createTransformationsDto: ICreateTransformationsRequest) {
console.log('TransformationClientService', 'Create');
this.logger.info('TransformationClientService - Create');
const createTransformationResponse = await new Promise(
(resolve, reject) => {
@@ -34,17 +40,20 @@ export class TransformationsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
},
)
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -58,7 +67,7 @@ export class TransformationsClientService implements OnModuleInit {
}
async findAll(data) {
console.log('TransformationClientService', 'FindAll');
this.logger.info('TransformationClientService - FindAll');
const findAllTransformationResponse = await new Promise(
(resolve, reject) => {
@@ -67,17 +76,20 @@ export class TransformationsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
},
)
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
const convertedTransforms = findAllTransformationResponse[
@@ -89,7 +101,7 @@ export class TransformationsClientService implements OnModuleInit {
}
async findOne(data: IIdRequest) {
console.log('TransformationClientService', 'FindOne');
this.logger.info('TransformationClientService - FindOne');
const findOneTransformationResponse = await new Promise(
(resolve, reject) => {
@@ -98,17 +110,20 @@ export class TransformationsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
},
)
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -116,7 +131,7 @@ export class TransformationsClientService implements OnModuleInit {
}
async update(updateTransformationDTO) {
console.log('TransformationClientService', 'Update');
this.logger.info('TransformationClientService - Update');
const updateTransformationResponse = await new Promise(
(resolve, reject) => {
@@ -127,17 +142,20 @@ export class TransformationsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
},
)
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
@@ -145,7 +163,7 @@ export class TransformationsClientService implements OnModuleInit {
}
async remove(data: IIdRequest) {
console.log('TransformationClientService', 'Remove');
this.logger.info('TransformationClientService - Remove');
const removeTransformationResponse = await new Promise(
(resolve, reject) => {
@@ -154,17 +172,20 @@ export class TransformationsClientService implements OnModuleInit {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
// console.log('done');
},
});
},
)
.then((res) => res)
.then((res) => {
this.logger.info('Done');
return res;
})
.catch((err) => {
this.logger.error(err.message);
throw new Error(err);
});
+22 -1
View File
@@ -1,14 +1,35 @@
import 'elastic-apm-node/start';
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { writeFileSync } from 'fs';
import helmet from 'helmet';
import { DadosferaLogger } from 'dadosfera-logs';
import documentEmpty from '../swagger_empty.json';
import { AppModule } from './app.module';
async function bootstrap() {
DadosferaLogger.setupLogger({
serviceName: 'maestro',
serviceEnvironment: process.env.ENV,
});
const logger = new DadosferaLogger().logger;
const orginalWinstonLog = logger.log.bind(logger);
logger.log = function (...kwargs: any[]) {
if (kwargs[0] in logger.levels) {
if (kwargs[0] == 'error') {
orginalWinstonLog('error', kwargs[2]);
}
} else {
orginalWinstonLog('info', ...kwargs);
}
};
const app = await NestFactory.create(AppModule, {
logger: logger,
cors: {
origin: '*',
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
@@ -27,7 +48,7 @@ async function bootstrap() {
.build();
const document = SwaggerModule.createDocument(app, config);
writeFileSync('./swagger.json', JSON.stringify(document));
if (process.env.ENV != 'stg' && process.env.ENV != 'prd')
SwaggerModule.setup('api', app, document);
+21 -18
View File
@@ -1,5 +1,4 @@
import {
Logger,
Body,
Controller,
Headers,
@@ -7,6 +6,7 @@ import {
HttpCode,
HttpStatus,
OnApplicationBootstrap,
Inject,
} from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import {
@@ -19,28 +19,31 @@ import {
AuthEnableTotpMfaRequest,
AuthDisableTotpMfaRequest,
AuthVerifyTotpMfaRequest,
} from '@victorradael/protospack-v2/dist/lib/Duc/interfaces/messages';
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
import { AuthClientService } from '../../clients/auth/client.service';
import { PermissionsClientService } from '../../clients/permissions/client.service';
import { Permissions } from '../../authentication/permissions.enum';
import { DadosferaLogger } from 'dadosfera-logs';
import ErrorBuilder from '../../utils/ErrorBuilder';
import { LoginDto } from './dtos/login';
@ApiTags('Auth')
@Controller('auth')
export class AuthController implements OnApplicationBootstrap {
private readonly logger = new Logger(AuthController.name);
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private authClient: AuthClientService,
private permissionsClient: PermissionsClientService,
) {}
) {
this.logger = dadosferaLogger.logger;
}
// internally used to send permissions to duc on microservice startup
async onApplicationBootstrap() {
this.logger.log('sending permissions to DUC...');
this.logger.info('sending permissions to DUC...');
const permissions = Object.values(Permissions).flatMap((namespace) =>
Object.values(namespace),
@@ -53,7 +56,7 @@ export class AuthController implements OnApplicationBootstrap {
err.code === 'No connection established' &&
process.env.LOCAL_ENV === 'true'
) {
return this.logger.log(
return this.logger.info(
"couldn't connect to DUC. suppresing in local env",
);
}
@@ -65,7 +68,7 @@ export class AuthController implements OnApplicationBootstrap {
@Post('sign-in')
@HttpCode(HttpStatus.OK)
async signIn(@Body() { username, password, totp }: AuthSignInRequest) {
this.logger.log(`/auth`, 'SignIn');
this.logger.info('/auth - SignIn');
return this.authClient.signIn({ username, password, totp });
}
@@ -75,7 +78,7 @@ export class AuthController implements OnApplicationBootstrap {
async refreshAccessToken(
@Body() { refreshToken }: AuthRefreshAccessTokenRequest,
) {
this.logger.log(`/auth`, 'RefreshAccessToken');
this.logger.info('/auth - RefreshAccessToken');
return this.authClient.refreshAccessToken({ refreshToken });
}
@@ -86,7 +89,7 @@ export class AuthController implements OnApplicationBootstrap {
@Body() body: AuthChangePasswordRequest,
@Headers() headers,
) {
this.logger.log(`/auth`, 'change-password');
this.logger.info('/auth - change-password');
const { oldPassword, newPassword } = body;
const { authorization: accessToken } = headers;
@@ -101,7 +104,7 @@ export class AuthController implements OnApplicationBootstrap {
@Post('reset-password')
@HttpCode(HttpStatus.OK)
async resetPassword(@Body() body: AuthResetPasswordRequest) {
this.logger.log(`/auth`, 'reset-password');
this.logger.info('/auth - reset-password');
const { username } = body;
@@ -113,7 +116,7 @@ export class AuthController implements OnApplicationBootstrap {
async verifyResetPasswordCode(
@Body() body: AuthVerifyResetPasswordCodeRequest,
) {
this.logger.log(`/auth`, 'verify-reset-password-code');
this.logger.info('/auth - verify-reset-password-code');
const { username, code } = body;
@@ -123,7 +126,7 @@ export class AuthController implements OnApplicationBootstrap {
@Post('confirm-reset-password')
@HttpCode(HttpStatus.OK)
async confirmResetPassword(@Body() body: AuthConfirmResetPasswordRequest) {
this.logger.log(`/auth`, 'confirm-reset-password');
this.logger.info('/auth - confirm-reset-password');
const { username, code, newPassword } = body;
@@ -140,7 +143,7 @@ export class AuthController implements OnApplicationBootstrap {
@Body() body: AuthEnableTotpMfaRequest,
@Headers() headers,
) {
this.logger.log(`/auth`, 'enable-totp');
this.logger.info('/auth - enable-totp');
const { password } = body;
const { authorization: accessToken } = headers;
@@ -154,7 +157,7 @@ export class AuthController implements OnApplicationBootstrap {
@Body() body: AuthDisableTotpMfaRequest,
@Headers() headers,
) {
this.logger.log(`/auth`, 'disable-totp');
this.logger.info('/auth - disable-totp');
const { password } = body;
const { authorization: accessToken } = headers;
@@ -165,7 +168,7 @@ export class AuthController implements OnApplicationBootstrap {
@Post('dismiss-totp')
@HttpCode(HttpStatus.OK)
async dismissTotpMFA(@Headers() headers) {
this.logger.log(`/auth`, 'disable-totp');
this.logger.info('/auth - disable-totp');
const { authorization: accessToken } = headers;
@@ -175,7 +178,7 @@ export class AuthController implements OnApplicationBootstrap {
@Post('verify-totp')
@HttpCode(HttpStatus.OK)
async verifyTotp(@Body() body: AuthVerifyTotpMfaRequest, @Headers() headers) {
this.logger.log(`/auth`, 'enable-totp');
this.logger.info('/auth - enable-totp');
const { totp } = body;
const { authorization: accessToken } = headers;
+127 -31
View File
@@ -3,6 +3,7 @@ import {
Controller,
Delete,
Get,
Inject,
Param,
Post,
Query,
@@ -11,6 +12,7 @@ import { ApiTags } from '@nestjs/swagger';
import { AuthenticateCondition } from '../../authentication/authentication.decorator';
import { Permissions } from '../../authentication/permissions.enum';
import { CatalogService } from './catalog.service';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('Catalog')
@Controller('catalog')
@@ -33,11 +35,21 @@ import { CatalogService } from './catalog.service';
return user.permissions.includes(Permissions.CATALOG[action].seqid);
})
export class CatalogController {
constructor(private catalogService: CatalogService) {}
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private catalogService: CatalogService,
) {
this.logger = dadosferaLogger.logger;
}
@Get('all')
async catalogAll(@Body() body) {
console.log(`/catalog`, 'ON CATALOG ALL ROUTE');
this.logger.info(`/catalog - ON CATALOG ALL ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.catalogAll(body);
@@ -46,7 +58,10 @@ export class CatalogController {
@Get('data_apps')
async dataAppsAll(@Body() body) {
console.log(`/catalog`, 'ON FIND ALL DATA APPS ROUTE');
this.logger.info(`/catalog - ON FIND ALL DATA APPS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.dataAppsAll(body);
@@ -55,7 +70,10 @@ export class CatalogController {
@Delete('data_apps/:id')
async dataAppsOne(@Param() params, @Body() body) {
console.log(`/catalog`, 'ON FIND ONE DATA APP ROUTE');
this.logger.info(`/catalog - ON FIND ONE DATA APP ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const { id } = params;
const res = await this.catalogService.dataAppsOne(id, body);
@@ -65,7 +83,10 @@ export class CatalogController {
@Get('dashboard-metabase')
async getAllDashboardMetabase(@Body() body) {
console.log(`/catalog`, 'ON GET ALL DASHBOARDS METABASE ROUTE');
this.logger.info(`/catalog - ON GET ALL DASHBOARDS METABASE ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getAllDashboardMetabase(body);
@@ -75,7 +96,10 @@ export class CatalogController {
@Get('dashboard-metabase/:id')
async getOneDashboardMetabase(@Body() body, @Param() params) {
const { id } = params;
console.log(`/catalog`, 'ON GET ONE DASHBOARD METABASE ROUTE');
this.logger.info(`/catalog - ON GET ONE DASHBOARD METABASE ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getOneDashboardMetabase(id, body);
@@ -84,7 +108,10 @@ export class CatalogController {
@Get('table-metadata')
async getAllTableMetadata(@Body() body, @Query() query) {
console.log(`/catalog`, 'ON GET ALL TABLES METADATA ROUTE');
this.logger.info(`/catalog - ON GET ALL TABLES METADATA ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
if (!query) {
const res = await this.catalogService.getAllTableMetadata(body);
@@ -98,7 +125,10 @@ export class CatalogController {
@Delete('table-metadata/:id')
async deleteOneTableMetadata(@Param() params, @Body() body) {
const { id } = params;
console.log(`/catalog`, 'ON DELETE ONE TABLE METADATA ROUTE');
this.logger.info(`/catalog - ON DELETE ONE TABLE METADATA ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.deleteOneTableMetadata(id, body);
@@ -107,7 +137,10 @@ export class CatalogController {
@Get('column-metadata')
async getOneColumnMetadata(@Body() body, @Query() params) {
console.log(`/catalog`, 'ON GET ONE COLUMN METADATA ROUTE');
this.logger.info(`/catalog - ON GET ONE COLUMN METADATA ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getOneColumnMetadata(body, params);
@@ -116,7 +149,10 @@ export class CatalogController {
@Delete('column-metadata/:id')
async deleteOneColumnMetadata(@Param() params, @Body() body) {
console.log(`/catalog`, 'ON DELETE ONE COLUMN METADATA ROUTE');
this.logger.info(`/catalog - ON DELETE ONE COLUMN METADATA ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const { id } = params;
const res = await this.catalogService.deleteOneColumnMetadata(id, body);
@@ -126,7 +162,10 @@ export class CatalogController {
@Get('data-preview')
async getOneDataPreview(@Body() body, @Query() params) {
console.log(`/catalog`, 'ON GET ONE DATAPREVIEW ROUTE');
this.logger.info(`/catalog - ON GET ONE DATAPREVIEW ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getOneDataPreview(body, params);
@@ -135,7 +174,10 @@ export class CatalogController {
@Get('data-status')
async getDataStatus(@Body() body) {
console.log(`/catalog`, 'ON GET DATA STATUS ROUTE');
this.logger.info(`/catalog - ON GET DATA STATUS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataStatus(body);
@@ -144,7 +186,10 @@ export class CatalogController {
@Get('data-status')
async createDataStatus(@Body() body) {
console.log(`/catalog`, 'ON CREATE DATA STATUS ROUTE');
this.logger.info(`/catalog - ON CREATE DATA STATUS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createDataStatus(body);
@@ -153,7 +198,10 @@ export class CatalogController {
@Get('data-description')
async getDataDescription(@Body() body) {
console.log(`/catalog`, 'ON GET DATA DESCRIPTION ROUTE');
this.logger.info(`/catalog - ON GET DATA DESCRIPTION ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataDescription(body);
@@ -162,7 +210,10 @@ export class CatalogController {
@Post('data-description')
async createDataDescription(@Body() body) {
console.log(`/catalog`, 'ON CREATE DATA DESCRIPTION ROUTE');
this.logger.info(`/catalog - ON CREATE DATA DESCRIPTION ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createDataDescription(body);
@@ -171,7 +222,10 @@ export class CatalogController {
@Get('data-docs')
async getDataDocs(@Body() body) {
console.log(`/catalog`, 'ON GET DATA DOCS ROUTE');
this.logger.info(`/catalog - ON GET DATA DOCS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataDocs(body);
@@ -180,7 +234,10 @@ export class CatalogController {
@Post('data-docs')
async createDataDocs(@Body() body) {
console.log(`/catalog`, 'ON CREATE DATA DOCS ROUTE');
this.logger.info(`/catalog - ON CREATE DATA DOCS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createDataDocs(body);
@@ -189,7 +246,10 @@ export class CatalogController {
@Get('data-rating')
async getDataRating(@Body() body) {
console.log(`/catalog`, 'ON GET DATA RATING ROUTE');
this.logger.info(`/catalog - ON GET DATA RATING ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataRating(body);
@@ -198,7 +258,10 @@ export class CatalogController {
@Post('data-rating')
async createDataRating(@Body() body) {
console.log(`/catalog`, 'ON GET DATA RATING ROUTE');
this.logger.info(`/catalog - ON GET DATA RATING ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createDataRating(body);
@@ -207,7 +270,7 @@ export class CatalogController {
@Get('summary-rating/:id')
async getSummaryRating() {
console.log(`/catalog`, 'ON GET SUMMARY RATING ROUTE');
this.logger.info(`/catalog - ON GET SUMMARY RATING ROUTE`);
//const { id } = params;
//
@@ -222,7 +285,10 @@ export class CatalogController {
@Get('data-comment')
async getDataComment(@Body() body) {
console.log(`/catalog`, 'ON GET DATA COMMENT ROUTE');
this.logger.info(`/catalog - ON GET DATA COMMENT ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataComment(body);
@@ -231,7 +297,10 @@ export class CatalogController {
@Post('data-comment')
async createDataComment(@Body() body) {
console.log(`/catalog`, 'ON GET DATA COMMENT ROUTE');
this.logger.info(`/catalog - ON GET DATA COMMENT ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createDataComment(body);
@@ -240,7 +309,10 @@ export class CatalogController {
@Get('data-review')
async getDataReview(@Body() body, @Query() params) {
console.log(`/catalog`, 'ON GET DATA REVIEW ROUTE');
this.logger.info(`/catalog - ON GET DATA REVIEW ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getDataReview(body, params);
@@ -249,7 +321,10 @@ export class CatalogController {
@Post('tags')
async createTags(@Body() body) {
console.log(`/catalog`, 'ON CREATE TAG ROUTE');
this.logger.info(`/catalog - ON CREATE TAG ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createTags(body);
@@ -258,7 +333,10 @@ export class CatalogController {
@Get('tags')
async findAllTags(@Body() body) {
console.log(`/catalog`, 'ON FIND ALL TAGS ROUTE');
this.logger.info(`/catalog - ON FIND ALL TAGS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.findAllTags(body);
@@ -267,7 +345,10 @@ export class CatalogController {
@Delete('tags/:id')
async deleteTags(@Param() params, @Body() body) {
console.log(`/catalog`, 'ON DELETE TAG ROUTE');
this.logger.info(`/catalog - ON DELETE TAG ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const { id } = params;
const res = await this.catalogService.deleteTags(id, body);
@@ -277,7 +358,10 @@ export class CatalogController {
@Post('table-tags')
async createTableTags(@Body() body) {
console.log(`/catalog`, 'ON CREATE TABLE TAG ROUTE');
this.logger.info(`/catalog - ON CREATE TABLE TAG ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.createTableTags(body);
@@ -286,7 +370,10 @@ export class CatalogController {
@Get('table-tags')
async getAllTableTags(@Body() body) {
console.log(`/catalog`, 'ON GET ALL TABLE TAGS ROUTE');
this.logger.info(`/catalog - ON GET ALL TABLE TAGS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.findAllTableTags(body);
@@ -295,7 +382,10 @@ export class CatalogController {
@Delete('table-tags/:id')
async deleteTableTags(@Param() params, @Body() body) {
console.log(`/catalog`, 'ON CREATE TABLE TAGS ROUTE');
this.logger.info(`/catalog - ON CREATE TABLE TAGS ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const { id } = params;
const res = await this.catalogService.deleteTableTags(id, body);
@@ -305,7 +395,10 @@ export class CatalogController {
@Get('table-rules')
async getTableRules(@Body() body) {
console.log(`/catalog`, 'ON GET TABLE RULES ROUTE');
this.logger.info(`/catalog - ON GET TABLE RULES ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const res = await this.catalogService.getTableRules(body);
@@ -314,7 +407,10 @@ export class CatalogController {
@Delete('table-rules/:id')
async deleteTableRules(@Param() params, @Body() body) {
console.log(`/catalog`, 'ON DELETE TABLE RULES ROUTE');
this.logger.info(`/catalog - ON DELETE TABLE RULES ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const { id } = params;
const res = await this.catalogService.deleteTableRules(id, body);
-1
View File
@@ -46,7 +46,6 @@ class CatalogService {
const { data } = await axios.get(
`${nimbusUrl}/api/catalog/dashboard-metabase/${id}`,
);
console.log(data);
// const [, path] = data.iframe_url.split('.dadosfera');
// const host = `httpss://metabase-${body.info.customer.toLowerCase()}.dadosfera.ai`;
+20 -11
View File
@@ -10,6 +10,7 @@ import {
Query,
UploadedFile,
UseInterceptors,
Inject,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { ApiBearerAuth, ApiConsumes, ApiTags } from '@nestjs/swagger';
@@ -21,12 +22,20 @@ import { GetAllDto } from './dtos/get-all';
import { RemoveTagDto } from './dtos/remove-tag';
import { UpdateDto } from './dtos/update';
import { UploadFileDto } from './dtos/upload-file';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('connectors')
@ApiBearerAuth()
@Controller('connectors')
export class ConnectorController {
constructor(private connectorClientService: ConnectorClientService) {}
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private connectorClientService: ConnectorClientService,
) {
this.logger = dadosferaLogger.logger;
}
@Post()
@ApiConsumes('multipart/form-data')
@@ -35,7 +44,7 @@ export class ConnectorController {
@UploadedFile() file,
@Body() body: CreateConnectorDto,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const response = await this.connectorClientService.uploadConnector({
file,
@@ -49,7 +58,7 @@ export class ConnectorController {
@ApiConsumes('multipart/form-data')
@UseInterceptors(FileInterceptor('file'))
async uploadFile(@UploadedFile() file, @Body() { name }: UploadFileDto) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const response = await this.connectorClientService.uploadFile({
file,
@@ -61,9 +70,9 @@ export class ConnectorController {
@Get()
async getAllConnectors(@Query() queries: GetAllDto) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const { filters, search } = queries;
const { search, ...filters } = queries;
const response: any = await this.connectorClientService.getAllConnectors({
filters: filters || {},
@@ -83,7 +92,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Query('version') version: string,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const pluginId = `${plugin}-${version}`;
@@ -102,7 +111,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Query('version') version: string,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const pluginId = `${plugin}-${version}`;
@@ -122,7 +131,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Body() body: UpdateDto,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const changes = body;
@@ -142,7 +151,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Body() body: AddTagDto,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const { tags } = body;
@@ -168,7 +177,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Body() body: RemoveTagDto,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const { tags } = body;
const remove = tags;
@@ -195,7 +204,7 @@ export class ConnectorController {
@Param('plugin') plugin: string,
@Body() { version }: DeleteConnectorDto,
) {
console.log(`/upload`, 'Upload Connector Route');
this.logger.info('/upload - Upload Connector Route');
const response: any = await this.connectorClientService.deleteConnector(
plugin,
+1 -1
View File
@@ -5,5 +5,5 @@ export class GetAllDto {
search: string;
@ApiProperty()
filters: object;
filters: any;
}
+10 -3
View File
@@ -1,15 +1,22 @@
import { Controller, Get } from '@nestjs/common';
import { Controller, Get, Inject } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { HealthService } from './health.service';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('Health')
@Controller('health')
export class HealthController {
constructor(private readonly healthService: HealthService) {}
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private readonly healthService: HealthService,
) {
this.logger = dadosferaLogger.logger;
}
@Get()
check() {
console.log(`/health`, 'check');
return this.healthService.check();
}
}
+9 -2
View File
@@ -1,9 +1,16 @@
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { DadosferaLogger } from 'dadosfera-logs';
@Injectable()
export class HealthService {
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
) {
this.logger = dadosferaLogger.logger;
}
check() {
console.log('HEALTH');
return { message: 'Ok' };
}
}
+9
View File
@@ -1,4 +1,5 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Info } from 'src/clients/inputs/interfaces';
import { Method } from 'axios';
export class InputModel {
@@ -149,6 +150,8 @@ export class TestConnectionGetColumnsReq {
credentials: CredentialsJdbc;
@ApiPropertyOptional()
id: string;
@ApiPropertyOptional()
info: Info;
}
export class TestConnectionGetColumnsRes {
@ApiProperty()
@@ -160,6 +163,8 @@ export class TestConnectionReq {
plugin: string;
@ApiProperty()
credentials: CredentialsJdbc;
@ApiPropertyOptional()
info: Info;
}
export class TestConnectionRes {
@ApiProperty()
@@ -182,6 +187,8 @@ export class CreateInputReq {
name: string;
@ApiPropertyOptional()
options: InputOptions;
@ApiPropertyOptional()
info: Info;
}
export class Input {
@@ -203,4 +210,6 @@ export class Input {
created_at: string;
@ApiProperty()
updated_at: string;
@ApiPropertyOptional()
info: Info;
}
+41 -13
View File
@@ -3,11 +3,13 @@ import {
Controller,
Delete,
Get,
Inject,
Param,
Patch,
Post,
} from '@nestjs/common';
import { InputsService } from './inputs.service';
import { DadosferaLogger } from 'dadosfera-logs';
import { InputsClientService } from 'src/clients/inputs/client.service';
import { UpdateInputRequest } from 'src/clients/inputs/interfaces';
import { Permissions } from '../../authentication/permissions.enum';
@@ -27,7 +29,7 @@ import {
@ApiTags('inputs')
@Controller('inputs')
@AuthenticateCondition((req, user) => {
let action;
let action: any;
switch (req.method) {
case 'POST':
@@ -57,7 +59,13 @@ import {
})
export class InputsController {
inputService: InputsService;
constructor(private inputsClientService: InputsClientService) {
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private inputsClientService: InputsClientService,
) {
this.logger = dadosferaLogger.logger;
this.inputService = new InputsService(this.inputsClientService);
}
@@ -75,7 +83,10 @@ export class InputsController {
@Post('/test-connection')
@ApiOkResponse({ type: TestConnectionRes })
async testConnection(@Body() data: TestConnectionReq) {
console.log(`/test-connection`, 'ON TEST CONNECTION ROUTE');
this.logger.info(`/test-connection - ON TEST CONNECTION ROUTE`, {
user: data.info.user_id,
customer: data.info.customer,
});
const response = await this.inputService.testConnection(data);
@@ -85,9 +96,12 @@ export class InputsController {
@Post('/test-connection/get-columns')
@ApiOkResponse({ type: TestConnectionGetColumnsRes })
async getColumns(@Body() data: TestConnectionGetColumnsReq) {
console.log(
`/test-connection/get-columns`,
'ON TEST CONNECTION GET COLUMNS ROUTE',
this.logger.info(
`/test-connection/get-columns - ON TEST CONNECTION GET COLUMNS ROUTE`,
{
user: data.info.user_id,
customer: data.info.customer,
},
);
const response = await this.inputService.getColumns(data);
@@ -98,7 +112,10 @@ export class InputsController {
@Post()
@ApiOkResponse({ type: Input })
async create(@Body() createInputDto: CreateInputReq) {
console.log(`/input`, 'ON CREATE ROUTE');
this.logger.info(`/input - ON CREATE ROUTE`, {
user: createInputDto.info.user_id,
customer: createInputDto.info.customer,
});
const response = await this.inputService.create(createInputDto);
@@ -109,7 +126,7 @@ export class InputsController {
@ApiOkResponse({ type: Input })
async reCreate(@Param('id') id: string, @Body() input: CreateInputReq) {
if (!input.id) input.id = id;
console.log(`POST /${input.id}`, 'ON RECREATE ROUTE');
this.logger.info(`POST /${id}`, 'ON RECREATE ROUTE');
const response = await this.inputService.reCreate(input);
@@ -118,7 +135,10 @@ export class InputsController {
@Get()
async findAll(@Body() body) {
console.log(`/input`, 'ON FIND ALL ROUTE');
this.logger.info(`/input - ON FIND ALL ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const response = await this.inputService.findAll(body);
@@ -128,7 +148,10 @@ export class InputsController {
@Get('/:id')
async findOne(@Body() body, @Param() params) {
const { id } = params;
console.log(`/input/${id}`, 'ON FIND ONE ROUTE');
this.logger.info(`/input/${id} - ON FIND ONE ROUTE`, {
user: body.info.user_id,
customer: body.info.customer,
});
const response = await this.inputService.findOne({ id, ...body });
@@ -139,10 +162,12 @@ export class InputsController {
async update(@Body() updateInputDto: UpdateInputRequest, @Param() params) {
const { id } = params;
const { info } = updateInputDto;
this.logger.info(`/input/${id} - ON UPDATE ROUTE`, {
user: info.user_id,
customer: info.customer_id,
});
delete updateInputDto.info;
console.log(`/input/${id}`, 'ON UPDATE ROUTE');
const response = await this.inputService.update(id, updateInputDto, info);
return response;
@@ -152,7 +177,10 @@ export class InputsController {
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(`/input/${id}`, 'ON DELETE ROUTE');
this.logger.info(`/input/${id} - ON DELETE ROUTE`, {
user: data.info.user_id,
customer: data.info.customer,
});
const response = await this.inputService.remove({ id, ...data });
+2 -2
View File
@@ -1,13 +1,13 @@
import { Body, HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { Timeout } from '@nestjs/schedule';
import { DecodeGrpcStruct } from '@victorradael/protospack';
import { DecodeGrpcStruct } from 'protospack';
import CronParser, { CronExpression } from 'cron-parser';
import { InputsClientService } from 'src/clients/inputs/client.service';
import { IIdRequest, Info } from 'src/clients/inputs/interfaces';
@Injectable()
export class InputsService {
constructor(private inputClient: InputsClientService) {}
constructor(private inputClient: InputsClientService) { }
secondsInADay = 60 * 60 * 24;
secondsInAnHour = 60 * 60;
+13
View File
@@ -89,6 +89,19 @@ export class OauthController {
return await this.callback(req, 'mailchimp');
}
@Get('salesforce')
@UseGuards(AuthGuard('salesforce'))
async oauthSalesforce() {
return true;
}
@Get('salesforce/callback')
@UseGuards(AuthGuard('salesforce'))
@Redirect()
async oauthSalesforceCallback(@Req() req) {
return await this.callback(req, 'salesforce');
}
async callback(@Req() req: Request, plugin) {
const { error, state: customer_id } = req.query;
@@ -1,12 +1,15 @@
import {
Profile,
Strategy,
StrategyOptionWithRequest,
StrategyOption,
VerifyFunction,
} from 'passport-facebook';
import { PassportStrategy } from '@nestjs/passport';
import { Inject, Injectable } from '@nestjs/common';
import { OauthSecrets } from 'src/utils/OauthSecrets';
import { Request } from 'express';
import { ParamsDictionary } from 'express-serve-static-core';
import { ParsedQs } from 'qs';
@Injectable()
export class FacebookStrategy extends PassportStrategy(Strategy) {
@@ -14,19 +17,29 @@ export class FacebookStrategy extends PassportStrategy(Strategy) {
@Inject('OAUTH_SECRETS')
private readonly oauthSecrets: OauthSecrets,
) {
const options: StrategyOptionWithRequest = {
const options: StrategyOption = {
clientID: oauthSecrets.facebook.client_id,
clientSecret: oauthSecrets.facebook.client_secret,
callbackURL: oauthSecrets.facebook.redirect_uri,
passReqToCallback: true,
};
const verify: VerifyFunction = (
accessToken: string,
refreshToken: string,
profile: Profile,
done: (error: any, user?: any, info?: any) => void,
) => done(null, profile, { accessToken, refreshToken });
) => {
return done(null, profile, { accessToken, refreshToken });
};
super(options, verify);
}
authenticate(
req: Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>,
options?: any,
): void {
const { customer_id } = req.query;
options.state = customer_id;
options.scope = 'ads_read ads_management';
super.authenticate(req, options);
}
}
@@ -14,7 +14,6 @@ export class HubspotStrategy extends PassportStrategy(Strategy) {
clientID: oauthSecrets.hubspot.client_id,
clientSecret: oauthSecrets.hubspot.client_secret,
callbackURL: oauthSecrets.hubspot.redirect_uri,
redirectUri: oauthSecrets.hubspot.redirect_uri,
scope:
'automation business-intelligence oauth forms integration-sync sales-email-read crm.lists.read crm.objects.contacts.read crm.schemas.contacts.read crm.objects.companies.read crm.objects.deals.read crm.schemas.companies.read crm.schemas.deals.read crm.objects.owners.read crm.objects.quotes.read crm.schemas.quotes.read crm.objects.line_items.read crm.schemas.line_items.read',
passReqToCallback: true,
@@ -0,0 +1,47 @@
import { Strategy } from 'passport-forcedotcom';
import { PassportStrategy } from '@nestjs/passport';
import { Inject, Injectable } from '@nestjs/common';
import { OauthSecrets } from 'src/utils/OauthSecrets';
@Injectable()
export class SalesforceStrategy extends PassportStrategy(
Strategy,
'salesforce',
) {
constructor(
@Inject('OAUTH_SECRETS')
private readonly oauthSecrets: OauthSecrets,
) {
const options = {
clientID: oauthSecrets.salesforce.client_id,
clientSecret: oauthSecrets.salesforce.client_secret,
callbackURL: oauthSecrets.salesforce.redirect_uri,
scope: [
'wave_api',
'chatter_api',
'chatbot_api',
'cdp_ingest_api',
'cdp_profile_api',
'api',
'pardot_api',
'cdp_segment_api',
'cdp_query_api',
'refresh_token',
'offline_access',
],
};
const verify = ({ params }, refreshToken: string, profile: any, done) => {
return done(null, profile, {
accessToken: params.access_token,
refreshToken,
});
};
super(options, verify);
}
authenticate(req, options) {
const { customer_id } = req.query;
options.state = customer_id;
super.authenticate(req, options);
}
}
+33 -7
View File
@@ -3,6 +3,7 @@ import {
Controller,
Delete,
Get,
Inject,
Param,
Post,
Put,
@@ -13,6 +14,7 @@ import { OutputsClientService } from 'src/clients/outputs/client.service';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { Permissions } from '../../authentication/permissions.enum';
import { OutputsService } from './outputs.service';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('Outputs')
@Controller('outputs')
@@ -35,11 +37,21 @@ import { OutputsService } from './outputs.service';
return user.permissions.includes(Permissions.OUTPUT[action].seqid);
})
export class OutputsController {
constructor(private outputsClientService: OutputsClientService) { }
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private outputsClientService: OutputsClientService,
) {
this.logger = dadosferaLogger.logger;
}
@Post()
async create(@Body() createOutputDto) {
console.log(process.env.DEV_URL + `/output`, 'ON CREATE ROUTE');
this.logger.info(process.env.DEV_URL + `/output - ON CREATE ROUTE`, {
user: createOutputDto.info.user_id,
customer: createOutputDto.info.customer,
});
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.create(createOutputDto);
@@ -49,7 +61,10 @@ export class OutputsController {
@Get()
async findAll(@Body() data) {
console.log(process.env.DEV_URL + `/output`, 'ON Find All ROUTE');
this.logger.info(process.env.DEV_URL + `/output - ON Find All ROUTE`, {
user: data.info.user_id,
customer: data.info.customer,
});
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.findAll(data);
@@ -60,7 +75,13 @@ export class OutputsController {
@Get('/:id')
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON Find One ROUTE');
this.logger.info(
process.env.DEV_URL + `/output/${id} - ON Find One ROUTE`,
{
user: data.info.user_id,
customer: data.info.customer,
},
);
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.findOne({ id, ...data });
@@ -72,10 +93,12 @@ export class OutputsController {
async update(@Payload() updateOutputDto, @Param() params) {
const { id } = params;
const { info } = updateOutputDto;
this.logger.info(process.env.DEV_URL + `/output/${id} - ON UPDATE ROUTE`, {
user: updateOutputDto.info.user_id,
customer: updateOutputDto.info.customer,
});
delete updateOutputDto.info;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON UPDATE ROUTE');
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.update(id, updateOutputDto, info);
@@ -85,7 +108,10 @@ export class OutputsController {
@Delete(':id')
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON DELETE ROUTE');
this.logger.info(process.env.DEV_URL + `/output/${id} - ON DELETE ROUTE`, {
user: data.info.user_id,
customer: data.info.customer,
});
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.remove({ id, ...data });
+33 -15
View File
@@ -3,6 +3,7 @@ import {
Controller,
Delete,
Get,
Inject,
Param,
Post,
Put,
@@ -12,6 +13,7 @@ import { PipelinesClientService } from 'src/clients/pipelines/client.service';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { Permissions } from '../../authentication/permissions.enum';
import { PipelinesService } from './pipelines.service';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('Pipelines')
@Controller('pipelines')
@@ -34,16 +36,26 @@ import { PipelinesService } from './pipelines.service';
return user.permissions.includes(Permissions.PIPELINE[action].seqid);
})
export class PipelinesController {
constructor(private pipelinesClientService: PipelinesClientService) {}
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private pipelinesClientService: PipelinesClientService,
) {
this.logger = dadosferaLogger.logger;
}
@Post('start/:id')
async activate(@Param() params, @Body() body) {
const { id } = params;
const { info } = body;
console.log(
process.env.DEV_URL + `/pipeline/start/${id}`,
'ON START PIPELINE ROUTE',
this.logger.info(
process.env.DEV_URL + `/pipeline/start/${id} - ON START PIPELINE ROUTE`,
{
user: body.info.user_id,
customer: body.info.customer,
},
);
const pipelineService = new PipelinesService(this.pipelinesClientService);
@@ -57,9 +69,12 @@ export class PipelinesController {
const { id } = params;
body.id = id;
console.log(
process.env.DEV_URL + `/pipeline/${id}`,
'ON GET PIPELINE STATUS ROUTE',
this.logger.info(
process.env.DEV_URL + `/pipeline/${id} - ON GET PIPELINE STATUS ROUTE`,
{
user: body.info.user_id,
customer: body.info.customer,
},
);
const pipelineService = new PipelinesService(this.pipelinesClientService);
@@ -71,9 +86,9 @@ export class PipelinesController {
@Get(':id/:details')
async getPipelineLogs(@Param() params) {
const { id, details } = params;
console.log(
process.env.DEV_URL + `/pipeline/${id}`,
'ON GET PIPELINE LOGS ROUTE',
this.logger.info(
process.env.DEV_URL + `/pipeline/${id} - ON GET PIPELINE LOGS ROUTE`,
{},
);
const pipelineService = new PipelinesService(this.pipelinesClientService);
@@ -84,7 +99,7 @@ export class PipelinesController {
@Post()
async create(@Body() createPipelineDto) {
console.log(process.env.DEV_URL + `/pipelines`, 'ON CREATE ROUTE');
this.logger.info(process.env.DEV_URL + `/pipelines ON CREATE ROUTE`);
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.create(createPipelineDto);
@@ -94,7 +109,10 @@ export class PipelinesController {
@Get()
async findAll(@Body() data) {
console.log(process.env.DEV_URL + `/pipeline`, 'ON Find All ROUTE');
this.logger.info(process.env.DEV_URL + `/pipeline ON Find All ROUTE`, {
user: data.info.user_id,
customer: data.info.customer,
});
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.findAll(data);
@@ -105,7 +123,7 @@ export class PipelinesController {
@Get('/:id')
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON Find One ROUTE');
this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON Find One ROUTE`);
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.findOne({ id, ...data });
@@ -119,7 +137,7 @@ export class PipelinesController {
const { info } = updatePipelineDto;
delete updatePipelineDto.info;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON UPDATE ROUTE');
this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON UPDATE ROUTE`);
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.update(id, updatePipelineDto, info);
@@ -130,7 +148,7 @@ export class PipelinesController {
@Delete(':id')
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON DELETE ROUTE');
this.logger.info(process.env.DEV_URL + `/pipeline/${id} ON DELETE ROUTE`);
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.remove({ id, ...data });
+1 -1
View File
@@ -1,5 +1,5 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { DecodeGrpcStruct } from '@victorradael/protospack';
import { DecodeGrpcStruct } from 'protospack';
import { PipelinesClientService } from 'src/clients/pipelines/client.service';
import { IIdRequest, Info } from 'src/clients/pipelines/interfaces';
import { objectCamelToSnake } from 'src/utils/CaseConverter';
@@ -3,6 +3,7 @@ import {
Controller,
Delete,
Get,
Inject,
Param,
Post,
Put,
@@ -14,6 +15,7 @@ import { IIdRequest } from 'src/clients/transformations/interfaces';
import { AuthenticateCondition } from 'src/authentication/authentication.decorator';
import { Permissions } from '../../authentication/permissions.enum';
import { TransformationsService } from './transformations.service';
import { DadosferaLogger } from 'dadosfera-logs';
@ApiTags('Transformations')
@Controller('transformations')
@@ -36,13 +38,24 @@ import { TransformationsService } from './transformations.service';
return user.permissions.includes(Permissions.TRANSFORMATIONS[action].seqid);
})
export class TransformationsController {
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private transformationsClientService: TransformationsClientService,
) {}
) {
this.logger = dadosferaLogger.logger;
}
@Post()
async create(@Body() createTransformationDto) {
console.log(process.env.DEV_URL + `/transformation`, 'ON CREATE ROUTE');
this.logger.info(
process.env.DEV_URL + `/transformation - ON CREATE ROUTE`,
{
user: createTransformationDto.info.user_id,
customer: createTransformationDto.info.customer,
},
);
const transformationService = new TransformationsService(
this.transformationsClientService,
@@ -56,7 +69,13 @@ export class TransformationsController {
@Get()
async findAll(@Body() data: IIdRequest) {
console.log(process.env.DEV_URL + `/transformation`, 'ON Find All ROUTE');
this.logger.info(
process.env.DEV_URL + `/transformation - ON Find All ROUTE`,
{
user: data.info.user_id,
customer: data.info.customer_id,
},
);
const transformationService = new TransformationsService(
this.transformationsClientService,
@@ -69,9 +88,12 @@ export class TransformationsController {
@Get('/:id')
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(
process.env.DEV_URL + `/transformation/${id}`,
'ON Find One ROUTE',
this.logger.info(
process.env.DEV_URL + `/transformation/${id} - ON Find One ROUTE`,
{
user: data.info.user_id,
customer: data.info.customer,
},
);
const transformationService = new TransformationsService(
@@ -85,9 +107,12 @@ export class TransformationsController {
@Put(':id')
async update(@Payload() updateTransformationDto, @Param() params) {
const { id } = params;
console.log(
process.env.DEV_URL + `/transformation/${id}`,
'ON UPDATE ROUTE',
this.logger.info(
process.env.DEV_URL + `/transformation/${id} - ON UPDATE ROUTE`,
{
user: updateTransformationDto.info.user_id,
customer: updateTransformationDto.info.customer,
},
);
const transformationService = new TransformationsService(
@@ -104,9 +129,12 @@ export class TransformationsController {
@Delete(':id')
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(
process.env.DEV_URL + `/transformation/${id}`,
'ON DELETE ROUTE',
this.logger.info(
process.env.DEV_URL + `/transformation/${id} - ON DELETE ROUTE`,
{
user: data.info.user_id,
customer: data.info.customer,
},
);
const transformationService = new TransformationsService(
+1
View File
@@ -14,6 +14,7 @@ export class OauthSecrets {
google = new OauthSecretsObject();
mailchimp = new OauthSecretsObject();
facebook = new OauthSecretsObject();
salesforce = new OauthSecretsObject();
}
export async function getOauthSecrets() {
const secrets = new OauthSecrets();
-1
View File
File diff suppressed because one or more lines are too long