Skip to content

Commit

Permalink
chore: redefine exports (#22)
Browse files Browse the repository at this point in the history
* feat(repo): adding npm skel files

* feat(class): core function

* feat(deps): update packages

* Update README.md

* feat(core): finished initial commit

* Update tslint.json

* Create npm-publish.yml

* Update npm-publish.yml

* Update package.json

* Update package.json

* Update package-lock.json

* Update npm-publish.yml

* Update README.md

* chore: remove test package

* Update package.json

* Update package.json

* feat(test): added jest test and test ci

* chore(deps): update package

* chore(core): refactored

* chore(test): fix error

* Update tsconfig.json

* Update tsconfig.json

* Update package.json

* Update tsconfig.json

* Update jest-test.yml

* Update jest-test.yml

* Update index.test.ts

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* chore(workflows): updated ci

* Update jest-test.yml

* Update jest-test.yml

* chore(workflows): add coverage

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* Update jest-test.yml

* feat(workflow): separate coverage ci

* Update index.test.ts

* Create CODE_OF_CONDUCT.md

* Update package.json

* Update README.md

* Update index.ts

* Update npm-publish.yml

- fix typo

* Update package.json

- bump version

* fix: exclude dist file on test

* bump: v0.0.8

* bump: version 0.1.0

- rename to adasms-sdk

* fix: package.json

- update main and types

* fix: exports

- bump v0.1.2

* chore: update lock

* fix: tests

* chore: redefine exports

* bump: v0.1.3
  • Loading branch information
neko1101 authored Nov 10, 2022
1 parent 7713814 commit a71329b
Show file tree
Hide file tree
Showing 3 changed files with 342 additions and 337 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "adasms-sdk",
"homepage": "https://adasms.com/",
"version": "0.1.2",
"version": "0.1.3",
"type": "module",
"description": "Non-Official ADASMS Client SDK",
"main": "dist/index.js",
Expand Down
341 changes: 5 additions & 336 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,336 +1,5 @@
import fetch from 'node-fetch'
import * as type from './types'
import querystring from 'querystring'
import axios from 'axios'

export default class Client {
private token: string
private apiUrl: string

/**
* Client constructor
* @param option type.ClientOption
*/
constructor(option: type.ClientOption) {
this.apiUrl = "https://terminal.adasms.com/api"
if(process.env.ADASMS_APPLICATION_SECRET) {
this.token = process.env.ADASMS_APPLICATION_SECRET
} else {
this.token = option.token
}
}

/**
* Send SMS API
* @param params type.SendSMSResponse
* @returns Promise<type.SendSMSResponse>
*/
public async sendSMS(params: type.SendSMSObject): Promise<type.SendSMSResponse> {
let query: string
query = "?_token=" + this.token

if (params.phone) {
query = query + "&phone=" + params.phone!.toString()
}

if (params.message) {
query = query + "&message=" + querystring.escape(params.message.toString())
} else {
query = query + "&message=" + querystring.escape("Sent from adasms-client.")
}

if(params.callbackUrl) {
query = query + "&callback_url=" + params.callbackUrl.toString()
}

if(params.previewMode) {
query = query + "&preview=1"
}

if(params.lead_id) {
query = query + "&lead_id=" + params.lead_id.toString()
}

if(params.send_at) {
query = query + "&send_at=" + params.send_at.toString()
}
// console.log(query)
const response = await fetch(this.apiUrl
+ "/v1/send" + query,
{
"method": "GET"
}
)

const data = await response.json()
// console.log(data)
if(response.ok) {
const ok: type.SendSMSResponse = {
success: data.success,
message: data.message,
error: data.error,
explain: data.explain
}
return ok
} else {
const err: type.SendSMSResponse = {
success: false,
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Get ADASMS credit balance
* @returns Promise<type.BalanceResponse>
*/
public async getCreditBalance(): Promise<type.BalanceResponse> {
const response = await fetch(this.apiUrl
+ "/v1/balance"
+ "?_token=" + this.token,
{
"method": "GET"
}
)

const data = await response.json()
if(response.ok) {
const ok: type.BalanceResponse = {
balance: data.balance
}
return ok
} else {
const err: type.BalanceResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* List scheduled "sendAt" messages in queue
* @returns Promise<type.ScheduledMessage[] | type.ErrorResponse>
*/
public async listScheduledMessage(): Promise<type.ScheduledMessage[] | type.ErrorResponse> {
const response = await axios.get(this.apiUrl
+ "/v1/scheduled"
+ "?_token=" + this.token
)

const data = await response.data as type.ListScheduledMessageResponse
if(data.length > 0) {
const ok: type.ScheduledMessage[] = data
return ok
} else {
const err: type.ErrorResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Delete scheduled message by message ID
* @param params type.DeleteMessageObject
* @returns Promise<type.DeleteScheduledMessageResponse>
*/
public async deleteScheduledMessage(params : type.DeleteMessageObject): Promise<type.DeleteScheduledMessageResponse> {
const response = await fetch(this.apiUrl
+ "/v1/scheduled/"
+ params.message_id
+ "?_token="
+ this.token,
{
"method": "DELETE"
}
)

const data = await response.json()
if(response.ok) {
const ok: type.DeleteScheduledMessageResponse = data
return ok
} else {
const err: type.DeleteScheduledMessageResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Create a lead
* @param params type.CreateLeadOption
* @returns Promise<type.CreateLeadResponse>
*/
public async createLead(params: type.CreateLeadOption): Promise<type.CreateLeadResponse> {
const form = new URLSearchParams({
name: params.name.toString()
})
const response = await axios.post(this.apiUrl
+ "/v1/leads"
+ "?_token="
+ this.token,
form
)
const data = await response.data as type.CreateLeadResponse
if(!data.error) {
const ok: type.CreateLeadResponse = data
return ok
} else {
const err: type.CreateLeadResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Get the list of leads
* @returns Promise<type.GetLeadResponse[] | type.ErrorResponse>
*/
public async getLeads(): Promise<type.GetLeadResponse[] | type.ErrorResponse> {
const response = await fetch(
this.apiUrl
+ "/v1/leads?_token="
+ this.token,
{
"method": "GET"
}
)
const data = await response.json()

if(response.ok) {
const ok: type.GetLeadResponse[] = data
return ok
} else {
const err: type.ErrorResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Create contact with lead_id
* @param params type.CreateContactOption
* @returns Promise<type.CreateContactResponse>
*/
public async createContact(params: type.CreateContactOption): Promise<type.CreateContactResponse> {
const form = new URLSearchParams({
phone: params.phone.toString()
})

const response = await axios.post(this.apiUrl
+ "/v1/leads/"
+ params.lead_id
+ "?_token="
+ this.token,
form
)
const data = response.data as type.CreateContactResponse
if(!data.error) {
const ok: type.CreateContactResponse = data
return ok
} else {
const err: type.CreateContactResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Get the list of contact by lead_id
* @param params type.GetContactListOption
* @returns Promise<type.GetContactListResponse | type.ErrorResponse>
*/
public async getContactList(params: type.GetContactListOption): Promise<type.GetContactListResponse | type.ErrorResponse> {
const response = await fetch(this.apiUrl
+ "/v1/leads/"
+ params.lead_id
+ "?_token=" + this.token,
{
"method": "GET"
}
)

const data = await response.json()
if(response.ok) {
const ok: type.GetContactListResponse = data
return ok
} else {
const err: type.ErrorResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* Delete lead
* @param params type.DeleteLeadOption
* @returns Promise<type.DeleteLeadResponse>
*/
public async deleteLead(params: type.DeleteLeadOption): Promise<type.DeleteLeadResponse> {
const response = await fetch(this.apiUrl
+ "/v1/leads/"
+ params.lead_id
+ "?_token=" + this.token,
{
"method": "DELETE"
}
)

const data = await response.json()
if(response.ok) {
const ok: type.DeleteLeadResponse = data
return ok
} else {
const err: type.DeleteLeadResponse = {
error: data.error,
explain: data.explain
}
return err
}
}

/**
* delete contact
* @param params type.DeleteContactOption
* @returns Promise<type.DeleteContactResponse>
*/
public async deleteContact(params: type.DeleteContactOption): Promise<type.DeleteContactResponse> {
const response = await fetch(this.apiUrl
+ "/v1/leads/"
+ params.lead_id
+ "/" + params.contact_id
+ "?_token=" + this.token,
{
"method": "DELETE"
}
)

const data = await response.json()
if(response.ok) {
const ok: type.DeleteContactResponse = data
return ok
} else {
const err: type.DeleteContactResponse = {
error: data.error,
explain: data.explain
}
return err
}
}
}

export { Client }
import Client from "./main"
export * from "./main"
export * from "./types"
export * as types from "./types"
export default Client
Loading

0 comments on commit a71329b

Please sign in to comment.