npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@partiu-vantagens/partiu-sdk

v1.3.1

Published

Library for communicating with Partiu API

Downloads

48

Readme

Partiu SDK

Library made to integrate Partiu React/React-Native/JS front-end applications with the Partiu servers.

The SDK is divided in modules that are responsible for communicating with certain parts of the API. All the developed modules can be found below.

Glossary

Installing

yarn add @partiu-vantagens/partiu-sdk
# or
npm install @partiu-vantagens/partiu-sdk
import Partiu from "@partiu-vantagens/partiu-sdk";

const partiu = new Partiu();
const partiu = new Partiu(true); // Initialize in beta mode (access beta api servers for testing)

const data = await partiu.promotions.list(); // Example for listing promotions

Modules:

Auth

The Auth module is responsible for setting and removing the token from all the other requests. Each user has a unique token that's used by the API for verifying the client. For now, the token is fixed and is never refreshed, altough this functionality will probably be implemented soon.

Commands

Login

Adds a token to all request to server.

const token = "asdjhasdijuhg12312312asdasdsad";

partiu.auth.setToken(token);
Logout

Removes a token to all request to server.

partiu.auth.clearToken();

Profile

The Profile module is responsible for retrieving and updating user profile. Requires token.

Model

export interface Profile {
  id: number;
  full_name: string;
  email: string;
  telephone: string;
  image: string;
  city: string;
  cpf: string;
  active_agreement: object;
  allowed_push_notifications: boolean;
  allowed_promotional_emails: boolean;
}

Commands

Retrieve
const profile: Profile = await partiu.profile.retrieve();
Update

This endpoint uses the PATCH HTTP verb, so it's not necessary to pass the whole profile.

const updatedData = {
  full_name: "New Name",
  allowed_push_notifications: false,
};

await partiu.profile.update(updatedData);

Categories

The Categories module is responsible for listing Category models from the server.

Model

export interface Category {
  id: number;
  name: string;
  icon: string;
  image: string;
}

Commands

List
const data: Category[] = await partiu.categories.list();
List (Paginated)

For more details on pagination, see Pagination.

Promotions

The Promotions module is responsible for listing and retrieving Promotion models from the server.

OBS: When listing with promotions.list(), promotions from same company or stores are aggregated in the same object. After retrieving the promotion using the promotions.retrieve() all the promotions will be listed in the promotions attribute.

OBS 2: Link and Coupon fields are only given if the user is logged and have a valid subscription.

Model

declare enum PromotionModes {
  online = "online",
  local = "local",
}

declare enum PromotionTypes {
  discount = "discount",
  buy_and_gain = "buy_and_gain",
  treat = "treat",
}

export interface Promotion {
  id: number;
  mode: PromotionModes;
  type: PromotionTypes;
  original_price: number;
  discount: number;
  image: string;
  rules: string;
  link?: string;
  coupon?: string;
  featured: boolean;
  limited_codes: boolean;
}

export interface PromotionAggregator {
  id: number;
  image: string;
  show_name: string;
  subtitle: string;
  category: string;
  percentage: number;
  mode: PromotionModes;
  type: PromotionTypes;
  distance: string;
  favorite: boolean;
  featured: boolean;
  new: boolean;
}

export interface StorePromotions {
  id: number;
  image: string;
  show_name: string;
  subtitle: string;
  category: string;
  mode: PromotionModes;
  type: PromotionTypes;
  description: string;
  promotions: Promotion[];
  site: string;
  latitude: number;
  longitude: number;
}

export interface CompanyPromotions {
  id: number;
  image: string;
  show_name: string;
  subtitle: string;
  category: string;
  mode: PromotionModes;
  type: PromotionTypes;
  description: string;
  promotions: Promotion[];
  site: string;
}

Commands

List
const data: PromotionAggregator[] = await partiu.promotions.list();
AvailableFilters
export interface PromotionsFilters {
  category: string;
  mode: PromotionModes;
  name: string; // Company name
  type: PromotionTypes;
  featured: boolean;
  new: boolean;
  latitude: number; // Required for local discounts
  longitude: number; // Required for local discounts
}

Example:

const data = PromotionAggregator[] = await partiu.promotions.list({type: "buy_and_gain", new: true})
List (Paginated)

For more details on pagination, see Pagination.

Retrieve
const company_promotions: CompanyPromotions = await partiu.promotions.retrieve(
  "online_10"
);
const store_promotions: StorePromotions = await partiu.promotions.retrieve(
  "local_10"
);

Utilizations

The Utilizations module is responsible for:

  1. Storing the history of the user's promotion usage.
  2. Generating a code that will be use in the PDV for validating the user usage.
  3. Storing the value of the discount that was given, together with the feedback of the whole experience.

Once the user has chosen a promotion to use, the system must call the utilizations.create(promotionId) action to keep history of the usage. In case of local promotions, this is essencial since it will return a code that will be input in the PDV system for validation that the user is subscribed to Partiu.

Once the user used (accessed the site if online or had the code validated if local), it can give two aditional information: How much it payed and the feedback (good or bad experience). It must be passed using the utilizations.update(code, {user_given_value: 23.00, feedback: true /* True if good false if bad */ }) action.

Model

export interface Utilization {
  code: string;
  created_at: Date;
  expires_at: Date;
  company: string;
  used: boolean;
  feedback: boolean;
  user_given_total: number;
  pdv_given_total: number;
  display_name: string;
}

export interface CategoryReport {
  name: string;
  usage: number;
  economized: number;
}

Commands

Create

Creates a utilization from a promotion.

const utilization: Utilization = await partiu.utilizations.create("3881");
Update

Adds more information about the utilization, such as: total paid and feedback.

const utilization = await partiu.utilizations.update("UFP12A", {
  user_given_total: 30.4,
  feedback: true,
});
List

Lists all user utilizations.

const utilizations: Utilization[] = await partiu.utilizations.paginated.list();
List (Paginated)

For more details on pagination, see Pagination.

Report

Lists user usage grouped by category. Receives two parameters for filtering: month and year.

const report: CategoryReport[] = await partiu.utilizations.report(4, 2022);

Contact

The Contact module is responsible for creating support tickets.

Model

export interface ContactForm {
  name: string;
  email: string;
  subject: string;
  telephone: string;
  message: string;
  landing: string; // This is about where the contact came from (landing, app, iframe, etc...)
}

Commands

Create
const response: ContactForm = await partiu.contact.create(
  "Test",
  "[email protected]",
  "test subject",
  "21995150897",
  "Help, everything is on fire!!!",
  "smartfit landing"
);

Banners

The Banners module is responsible for listing Banner models from the server.

Model

export interface Banner {
  name: string;
  image: string;
}

Commands

List

Lists all banners.

const banners: Banner[] = await partiu.banner.list();

APIs

Partiu uses some third party APIs to fetch extra information when needed.

CEP API (ViaCEP)

Returns an address from CEP.

const address = await partiu.api.getAddressFromCEP("99999-999");
export interface Address {
  cep: string;
  logradouro: string;
  complemento: string;
  bairro: string;
  localidade: string;
  uf: string;
  ibge: string;
  gia: string;
  ddd: string;
  siafi: string;
}

CNPJ API (ReceitaWS)

Returns company data from CNPJ.

const companyData: CompanyData = await partiu.api.getCompanyDataFromCNPJ(
  "99.999.999/9999-99"
);
declare enum CompanyTypes {
  MATRIZ = "MATRIZ",
  FILIAL = "FILIAL",
}

export interface CompanyActivity {
  code: string;
  text: string;
}

export interface CompanyOwner {
  nome: string;
  qual: string;
  pais_origem: string;
  nome_rep_legal: string;
  qual_rep_legal: string;
}

export interface CompanyData {
  ultima_atualizacao: string;
  cnpj: string;
  cep: string;
  nome: string;
  tipo: CompanyTypes;
  porte: string;
  fantasia: string;
  abertura: string;
  atividade_principal: CompanyActivity;
  atividades_secundarias: CompanyActivity[];
  natureza_juridica: string;
  logradouro: string;
  numero: string;
  complemento: string;
  bairro: string;
  municipio: string;
  uf: string;
  email: string;
  telefone: string;
  efr: string;
  situacao: string;
  data_situacao: string;
  motivo_situacao: string;
  situacao_especial: string;
  data_situacao_especial: string;
  capital_social: string;
  qsa: CompanyOwner[];
}

Pagination

Some modules provides a pagination object to easily deal with paginated endponts. They can be used as described below (using the promotions module as an example):

const data: PromotionAggregator[] = await partiu.promotions.paginated.list({
  mode: "online",
  type: "discount",
});
const moreData: PromotionAggregator[] =
  await partiu.promotions.paginated.next();

partiu.promotions.reset(); // Resets pagination to default

As seen by the code above, the paginated.next() command will call the next page of models, with the the filters already applied.

To reset the pagination, you can call paginated.list() command again or the paginated.reset() command.

This implementation of pagination is focused on infinite scrolling, so the page data is not provided. However, a paginated.previous() command is provided if needed.