Skip to content

leoferreiralima/tabnews-sdk

Repository files navigation

TabNews SDK

CI Coverage Quality Gate Status Bugs Code Smells Vulnerabilities

Esse projeto foi criado com o intuito de fornecer uma interface amigável de intergração com o tabnews

Sumário

Instalação

Para começar a usar o tabnews-sdk dentro do seu projeto basta instalar com o seu gerenciador de pacotes favorito

npm install tabnews-sdk
yarn add tabnews-sdk
pnpm add tabnews-sdk

Exemplos

Para iniciar o cliente do basta instanciar a classe TabNews, as credencias são opcionais, mas podem ser setadas por um arquivo .env ou direto no código conforme abaixo

TabNews

Instanciar sem credentials

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

Instanciar com credentials no arquivo .env

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();
TABNEWS_CREDENTIALS_EMAIL=<seu email>
TABNEWS_CREDENTIALS_PASSWORD=<sua senha>

Instanciar com credentials no código

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews({
  credentials: {
    email: '<seu email>',
    password: '<sua senha>',
  },
});

Sessão

A sessão tem dois métodos create e destroy, após a criação da sessão a biblioteca ira gerenciar automaticamente a sessão criando uma nova quando houver expiração do token, caso deseje consultar a api sem uma sessão apenas não chame o método create, contudo algumas rotas gerarão erros por falta de permissão

Exemplo com sessão gerenciada

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const session = await tabNews.session.create(); // sessão criada

const contents = await tabNews.contents.getAll();

await tabNews.session.destroy(); // sessão destruida

Exemplo com sessão não gerenciada

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { contents } = await tabNews.contents.getAll();

Usuário

A api de usuários permite que buscar dados do usuário logado, atualizar e listar.

Buscar usuário logado

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

const user = await tabNews.user.me();

Conteúdos

A api conteúdos permite listar todos os posts/comentários dentro do tabnews, alguns dos exemplos de como interagir com essa api está abaixo:

Buscar Conteúdos

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { pagination, contents } = await tabNews.contents.getAll();

Buscar Conteúdos Paginados

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { pagination, contents } = await tabNews.contents.getAll({
  page: 1,
  per_page: 30,
  strategy: 'relevant',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { pagination, contents } = await tabNews.contents.getAll({
  page: 2,
  per_page: 50,
  strategy: 'relevant',
});

const prevContents = await tabNews.contents.getAll({
  page: pagination.previous_page,
  per_page: 50,
  strategy: 'relevant',
});

const nextContents = await tabNews.contents.getAll({
  page: pagination.next_page,
  per_page: 50,
  strategy: 'relevant',
});

Buscar Conteúdos de um Usuário

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { pagination, contents } = await tabNews.contents.getAll({
  username: '<any_username>',
  page: 1,
  per_page: 30,
  strategy: 'relevant',
});

Buscar Conteúdos para o Usuário atual

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

const { pagination, contents } = await tabNews.contents.getMy({
  page: 1,
  per_page: 30,
  strategy: 'relevant',
});

Buscar Detalhe do Conteúdo

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const content = await tabNews.contents.getBySlug({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const content = await tabNews.contents.getBySlug({
  slug: '<slug>',
});

Buscar Comentarios do Conteúdo

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const contentChildren = await tabNews.contents.getChildren({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const contentChildren = await tabNews.contents.getChildren({
  slug: '<slug>',
});

Buscar Conteúdo Pai

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const parentContent = await tabNews.contents.getParent({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const parentContent = await tabNews.contents.getParent({
  slug: '<slug>',
});

Buscar Conteúdo Raiz

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const rootContent = await tabNews.contents.getRoot({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const rootContent = await tabNews.contents.getRoot({
  slug: '<slug>',
});

Up or Down Vote Conteúdo

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const tabcoins1 = await tabNews.contents.tabcoins({
  slug: '<slug>',
  username: '<username>',
  transaction_type: 'credit',
});

// or

const tabcoins2 = await tabNews.contents.upVote({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const tabcoins1 = await tabNews.contents.tabcoins({
  slug: '<slug>',
  username: '<username>',
  transaction_type: 'debit',
});

// or

const tabcoins2 = await tabNews.contents.downVote({
  slug: '<slug>',
  username: '<username>',
});

Criar Conteúdo

Na rota de criação de conteúdos, todos os campos são opcionais exceto o body, que é o seu post ou comentario, e o title que é opcional apenas quando há um parent_id

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

const response = await tabNews.contents.create({
  parent_id: undefined,
  slug: 'e-opcional',
  title: 'test',
  body: 'test',
  status: 'published',
  source_url: 'https://google.com',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const { contents } = await tabNews.contents.getAll();

await tabNews.session.create();

const response = await tabNews.contents.create({
  parent_id: contents[0].id,
  body: 'comentando em um conteúdo',
  status: 'published',
});

Atualizar Conteúdo

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const content = await tabNews.contents.update({
  slug: '<slug>',
  username: '<username>',
  title: 'title',
  body: 'body',
  status: 'published',
  source_url: 'https://some.url',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const content = await tabNews.contents.update({
  slug: '<slug>',
  title: 'title',
  body: 'body',
  status: 'published',
  source_url: 'https://some.url',
});

Deletar Conteúdo

import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

const content = await tabNews.contents.delete({
  slug: '<slug>',
  username: '<username>',
});
import { TabNews } from 'tabnews-sdk';

const tabNews = new TabNews();

await tabNews.session.create();

// Não é preciso passar o username pois internamente a bliblioteca ira realizar o fecth do usuario atual

const content = await tabNews.contents.delete({
  slug: '<slug>',
});