Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import { Injectable, ProviderScope } from '@graphql-modules/di';
import dataloader from 'dataloader';
import nodeFetch, { Response } from 'node-fetch';
import { Products, Product } from '../../../_graphql';
import { checkStatus } from '../../../helpers';
import { CREDENTIALS, BOL_API } from '../../../constants';
import { productDataLoader } from './product-data-loader';
@Injectable({
scope: ProviderScope.Session,
})
export class ProductProvider {
private dataLoaderProduct: any;
constructor() {
this.dataLoaderProduct = new dataloader(keys =>
productDataLoader(keys),
);
}
/**
* Example 1: not dataloader used while it should
*/
public async getProducts(id: string): Promise {
const url = `${BOL_API}/lists/?ids=${id}&limit=12&format=json&${CREDENTIALS}`;
console.log(`[BAD] no dataloader: ${url.slice(0, -40)}`);
import { Injectable, Inject, ProviderScope } from '@graphql-modules/di';
import { ModuleSessionInfo } from '@graphql-modules/core';
import { Response } from 'express';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import { secret, expiration } from '../../env';
import { validateLength, validatePassword } from '../../validators';
import { Users } from './users.provider';
import { User } from '../../db';
@Injectable({
scope: ProviderScope.Session,
})
export class Auth {
@Inject() private users: Users;
@Inject() private module: ModuleSessionInfo;
private get req() {
return this.module.session.req || this.module.session.request;
}
private get res(): Response {
return this.module.session.res;
}
async signIn({ username, password }: { username: string; password: string }) {
const user = await this.users.findByUsername(username);
import { Injectable, Inject, ProviderScope } from '@graphql-modules/di';
import sql from 'sql-template-strings';
import bcrypt from 'bcrypt';
import { Database } from '../common/database.provider';
const DEFAULT_PROFILE_PIC = 'https://raw.githubusercontent.com/Urigo/WhatsApp-Clone-Client-React/legacy/public/assets/default-profile-pic.jpg'
@Injectable({
scope: ProviderScope.Session,
})
export class Users {
@Inject() private db: Database;
async findById(userId: string) {
const db = await this.db.getClient();
const { rows } = await db.query(
sql`SELECT * FROM users WHERE id = ${userId}`
);
return rows[0] || null;
}
async findAllExcept(userId: string) {
const db = await this.db.getClient();
const { rows } = await db.query(
type ChatsByUser = { userId: string };
type ChatByUser = { userId: string; chatId: string };
type ChatById = { chatId: string };
type ChatsKey = ChatById | ChatByUser | ChatsByUser;
function isChatsByUser(query: any): query is ChatsByUser {
return query.userId && !query.chatId;
}
function isChatByUser(query: any): query is ChatByUser {
return query.userId && query.chatId;
}
@Injectable({
scope: ProviderScope.Session,
})
export class Chats {
@Inject() private db: Database;
@Inject() private pubsub: PubSub;
private chatsCache = new Map();
private loaders = {
chats: new DataLoader(keys => {
return Promise.all(
keys.map(async query => {
if (isChatsByUser(query)) {
return this._findChatsByUser(query.userId);
}
if (this.chatsCache.has(query.chatId)) {
return [this._readChatFromCache(query.chatId)];