UNPKG

@tonightpass/nestjs-mailjet

Version:

NestJS module for integrating Mailjet email service with your NestJS applications

1 lines 14 kB
{"version":3,"sources":["../src/constants/mailjet.constants.ts","../src/email/mailjet.provider.ts","../src/email/mailjet.service.ts","../src/email/mailjet.module.ts"],"names":["MAILJET_MODULE_OPTIONS","createMailjetProviders","options","provide","useValue","MailjetService","constructor","client","Client","apiKey","apiSecret","sandboxMode","perform_api_call","Error","findContact","id","queryData","IsExcludedFromCampaigns","result","get","version","toString","request","response","status","body","Count","Data","addContact","contact","post","subscribeContactToList","contactId","listId","action","ContactsLists","Action","ListID","unsubscribeContactFromList","sendEmail","messages","HttpStatus","CREATED","Messages","length","Status","_MailjetService","MailjetModule","forRoot","module","providers","forRootAsync","createAsyncProviders","imports","useExisting","useFactory","createAsyncOptionsProviders","useClass","inject","__name","optionsFactory","createMailjetOptions","_MailjetModule","HttpModule","exports"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAILJET_MODULE_OPTIONS = \"MAILJET_MODULE_OPTIONS\";\n","import { Provider } from \"@nestjs/common\";\n\nimport { MailjetModuleOptions } from \"./interfaces\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\nexport function createMailjetProviders(\n options: MailjetModuleOptions,\n): Provider[] {\n return [\n {\n provide: MAILJET_MODULE_OPTIONS,\n useValue: options,\n },\n ];\n}\n","import { HttpStatus, Inject, Injectable } from \"@nestjs/common\";\nimport { Client, Contact, LibraryResponse, SendEmailV3_1 } from \"node-mailjet\";\n\nimport type { MailjetModuleOptions } from \"./interfaces\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\n@Injectable()\nexport class MailjetService {\n private readonly client: Client;\n\n constructor(\n @Inject(MAILJET_MODULE_OPTIONS)\n options: MailjetModuleOptions,\n ) {\n this.client = new Client({\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n ...(!!options.sandboxMode && {\n perform_api_call: options.sandboxMode,\n }),\n });\n\n if (!this.client) {\n throw new Error(\"Mailjet client is not initialized\");\n }\n }\n\n async findContact(id: string | number): Promise<Contact.Contact> {\n const queryData: Contact.GetContactQueryParams = {\n IsExcludedFromCampaigns: false,\n };\n\n const result: LibraryResponse<Contact.GetContactResponse> =\n await this.client\n .get(\"contact\", { version: \"v3\" })\n .id(id.toString())\n .request({}, queryData);\n\n if (result.response.status !== 200 || result.body.Count === 0) {\n throw new Error(`Contact with id ${id} not found`);\n }\n\n return result.body.Data[0];\n }\n\n async addContact(contact: Contact.PostContactBody): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client.post(\"contact\", { version: \"v3\" }).request(contact);\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not created\");\n }\n\n return result.body.Data[0];\n }\n\n async subscribeContactToList(\n contactId: string | number,\n listId: string | number,\n ): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client\n .post(\"contact\", { version: \"v3\" })\n .id(contactId.toString())\n .action(\"managecontactslists\")\n .request({\n ContactsLists: [\n {\n Action: \"addforce\",\n ListID: listId,\n },\n ],\n });\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not subscribed\");\n }\n\n return result.body.Data[0];\n }\n\n async unsubscribeContactFromList(\n contactId: string | number,\n listId: string | number,\n ): Promise<Contact.Contact> {\n const result: LibraryResponse<Contact.PostContactResponse> =\n await this.client\n .post(\"contact\", { version: \"v3\" })\n .id(contactId.toString())\n .action(\"managecontactslists\")\n .request({\n ContactsLists: [\n {\n Action: \"unsub\",\n ListID: listId,\n },\n ],\n });\n\n if (result.response.status !== 201 || result.body.Count === 0) {\n throw new Error(\"Contact not unsubscribed\");\n }\n\n return result.body.Data[0];\n }\n\n async sendEmail<TVars>(\n messages: SendEmailV3_1.Body<undefined, TVars>,\n ): Promise<SendEmailV3_1.ResponseMessage[]> {\n const result: LibraryResponse<SendEmailV3_1.Response> = await this.client\n .post(\"send\", { version: \"v3.1\" })\n .request(messages);\n\n if (\n (result.response.status !== HttpStatus.CREATED ||\n result.response.status !== HttpStatus.CREATED) &&\n (result.body.Messages.length === 0 ||\n result.body.Messages[0].Status !== \"success\")\n ) {\n throw new Error(\"Email messages not sent\");\n }\n\n return result.body.Messages;\n }\n}\n","import { HttpModule } from \"@nestjs/axios\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\n\nimport { MailjetModuleOptions } from \"./interfaces\";\nimport {\n MailjetModuleAsyncOptions,\n MailjetOptionsFactory,\n} from \"./interfaces/mailjet-module-async-options.interface\";\nimport { createMailjetProviders } from \"./mailjet.provider\";\nimport { MailjetService } from \"./mailjet.service\";\nimport { MAILJET_MODULE_OPTIONS } from \"../constants/mailjet.constants\";\n\n@Module({\n imports: [HttpModule],\n providers: [MailjetService],\n exports: [MailjetService],\n})\nexport class MailjetModule {\n static forRoot(options: MailjetModuleOptions): DynamicModule {\n return {\n module: MailjetModule,\n providers: createMailjetProviders(options),\n };\n }\n\n static forRootAsync(options: MailjetModuleAsyncOptions): DynamicModule {\n const providers = [...this.createAsyncProviders(options)];\n\n return {\n module: MailjetModule,\n imports: options.imports || [],\n providers,\n };\n }\n\n private static createAsyncProviders(\n options: MailjetModuleAsyncOptions,\n ): Provider[] {\n if (options.useExisting || options.useFactory) {\n return [this.createAsyncOptionsProviders(options)];\n }\n\n return [\n this.createAsyncOptionsProviders(options),\n {\n provide: options.useClass,\n useClass: options.useClass,\n },\n ];\n }\n\n private static createAsyncOptionsProviders(\n options: MailjetModuleAsyncOptions,\n ): Provider {\n if (options.useFactory) {\n return {\n provide: MAILJET_MODULE_OPTIONS,\n useFactory: options.useFactory,\n inject: options.inject || [],\n };\n }\n\n return {\n provide: MAILJET_MODULE_OPTIONS,\n useFactory: async (optionsFactory: MailjetOptionsFactory) =>\n await optionsFactory.createMailjetOptions(),\n inject: [options.useExisting || options.useClass],\n };\n }\n}\n"]}