@roadmapsh/scoop
Version:
NodeJS sdk for Scoop
239 lines (228 loc) • 6.94 kB
text/typescript
interface ErrorResponse {
message: string;
status: number;
}
interface HttpOptionsType extends RequestInit {
headers?: Record<string, any>;
}
interface AssignTagsOptions {
/**
* The email address of the subscriber.
*/
email: string;
/**
* If you want to assign tags to a specific list, you can provide the list ID.
* If you don't provide a list ID, the tags will be assigned to all lists.
*/
listId?: string;
/**
* To assign tags to the subscriber, you can provide the tags.
*
* Default: `[]` - Max 10 tags
*/
tags?: string[];
}
interface AssignTagsRequestOptions extends HttpOptionsType {
}
interface AssignTagsResponseSuccess {
status: 'ok';
}
interface AssignTagsResponse {
data: AssignTagsResponseSuccess | null;
error: ErrorResponse | null;
}
interface DeleteSubscriberByEmailOptions {
email: string;
/**
* If you want to delete from a specific list, you can provide the list ID.
* If you don't provide a list ID, you will be deleted from all lists.
*/
listId?: string;
}
interface DeleteSubscriberByEmailRequestOptions extends HttpOptionsType {
}
interface RemoveTagsOptions {
/**
* The email address of the subscriber.
*/
email: string;
/**
* If you want to assign tags to a specific list, you can provide the list ID.
* If you don't provide a list ID, the tags will be assigned to all lists.
*/
listId?: string;
/**
* To assign tags to the subscriber, you can provide the tags.
*
* Default: `[]` - Max 10 tags
*/
tags?: string[];
}
interface RemoveTagsRequestOptions extends HttpOptionsType {
}
interface RemoveTagsResponseSuccess {
status: 'ok';
}
interface RemoveTagsResponse {
data: RemoveTagsResponseSuccess | null;
error: ErrorResponse | null;
}
interface SubscribeOptions {
listId: string;
name: string;
email: string;
customFields?: Record<string, string>;
/**
* It will mark the subscriber as confirmed.
* and, it'll not send a confirmation email for double opt-in.
*
* Default: `false`
*/
_isConfirmed: boolean;
/**
* If you don't want to send a welcome email, you can set this to true.
*
* Default: `false`
*/
_hasWelcomeEmail: boolean;
/**
* To assign tags to the subscriber, you can provide the tags.
*
* Default: `[]` - Max 10 tags
*/
_tags?: string[];
}
interface SubscribeRequestOptions extends HttpOptionsType {
}
interface SubscribeResponseSuccess {
status: 'success' | 'confirm-subscription' | 'already-subscribed';
}
interface SubscribeResponse {
data: SubscribeResponseSuccess | null;
error: ErrorResponse | null;
}
interface UnsubscribeOptions {
email: string;
/**
* If you want to unsubscribe from a specific list, you can provide the list ID.
* If you don't provide a list ID, you will be unsubscribed from all lists.
*/
listId?: string;
}
interface UnsubscribeRequestOptions extends HttpOptionsType {
}
interface UnsubscribeResponseSuccess {
status: 'ok';
}
interface UnsubscribeResponse {
data: UnsubscribeResponseSuccess | null;
error: ErrorResponse | null;
}
declare class Subscribers {
private readonly scoop;
constructor(scoop: Scoop);
assignTags(payload: AssignTagsOptions, options?: AssignTagsRequestOptions): Promise<AssignTagsResponse>;
removeTags(payload: RemoveTagsOptions, options?: RemoveTagsRequestOptions): Promise<RemoveTagsResponse>;
subscribe(payload: SubscribeOptions, options?: SubscribeRequestOptions): Promise<SubscribeResponse>;
unsubscribe(payload: UnsubscribeOptions, options?: UnsubscribeRequestOptions): Promise<UnsubscribeResponse>;
deleteByEmail(payload: DeleteSubscriberByEmailOptions, options?: DeleteSubscriberByEmailRequestOptions): Promise<UnsubscribeResponse>;
}
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>;
}[keyof T];
interface EmailRenderOptions {
/**
* The plain text content of the email.
*/
text?: string;
/**
* The HTML content of the email.
*/
html?: string;
}
interface EmailOptions extends EmailRenderOptions {
/**
* The email address that appears as the sender of the email.
* Use a friendly name and a valid email address.
*
* Example: `John Doe <johndoe@example.com>`
*/
from: string;
/**
* The recipient(s) of the email. Can be a single email address or an array of email addresses.
*/
to: string | string[];
/**
* The email address that should be used for replies. If not provided, replies will go to the 'from' address.
*/
replyTo?: string;
/**
* The subject line of the email.
*/
subject: string;
/**
* The email addresses to carbon copy.
* The recipients will be visible to other recipients.
*/
cc?: string[];
/**
* The email addresses to blind carbon copy.
* The recipients will not be visible to other recipients. (i.e. in the `to` or `cc` fields)
*/
bcc?: string[];
}
type SendEmailOptions = RequireAtLeastOne<EmailRenderOptions> & EmailOptions;
interface SendEmailRequestOptions extends HttpOptionsType {
}
interface SendEmailResponseSuccess {
status: 'ok';
}
interface SendEmailResponse {
data: SendEmailResponseSuccess | null;
error: ErrorResponse | null;
}
declare class Emails {
private readonly scoop;
constructor(scoop: Scoop);
send(payload: SendEmailOptions, options?: SendEmailRequestOptions): Promise<SendEmailResponse>;
}
interface ScoopConfig {
/**
* The endpoint to use for API requests.
* Default: `https://scoop-api.roadmap.sh`
*/
endpoint?: string;
}
declare class Scoop {
readonly key: string;
readonly config: ScoopConfig;
private headers;
readonly subscribers: Subscribers;
readonly emails: Emails;
constructor(key: string, config?: ScoopConfig);
fetchRequest<T>(path: string, options?: {}): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
post<T>(path: string, entity?: unknown, options?: HttpOptionsType): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
get<T>(path: string, options?: HttpOptionsType): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
put<T>(path: string, entity: any, options?: HttpOptionsType): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
patch<T>(path: string, entity: any, options?: HttpOptionsType): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
delete<T>(path: string, query?: unknown): Promise<{
data: T | null;
error: ErrorResponse | null;
}>;
}
export { type ErrorResponse, Scoop, type ScoopConfig };