@comet/brevo-api 2.1.1-canary-20241001123437 → 2.1.2-canary-20241007102959

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.console.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.console.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAUlE,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAQvD,wBAAgB,+BAA+B,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAkGtH"}
1
+ {"version":3,"file":"brevo-contact-import.console.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.console.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAUlE,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAQvD,wBAAgB,+BAA+B,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAgGtH"}
@@ -64,15 +64,19 @@ function createBrevoContactImportConsole({ Scope }) {
64
64
  this.targetGroupRepository = targetGroupRepository;
65
65
  this.logger = new common_1.Logger(BrevoContactImportConsole_1.name);
66
66
  }
67
- execute(options) {
67
+ execute({ scope, path, targetGroupIds }) {
68
68
  return __awaiter(this, void 0, void 0, function* () {
69
- const redirectUrl = this.config.brevo.resolveConfig(options.scope).redirectUrlForImport;
70
- const content = fs.readFileSync(options.path);
71
- if (!this.validateRedirectUrl(redirectUrl, options.scope)) {
69
+ const redirectUrl = this.config.brevo.resolveConfig(scope).redirectUrlForImport;
70
+ const fileStream = fs.createReadStream(path);
71
+ if (!this.validateRedirectUrl(redirectUrl, scope)) {
72
72
  throw new commander_1.InvalidOptionArgumentError("Invalid scope. Scope is not allowed");
73
73
  }
74
- const targetGroups = yield this.targetGroupRepository.find({ id: { $in: options.targetGroupIds } });
75
- const result = yield this.brevoContactImportService.importContactsFromCsv(content.toString("utf8"), options.scope, redirectUrl, targetGroups);
74
+ const result = yield this.brevoContactImportService.importContactsFromCsv({
75
+ fileStream,
76
+ scope,
77
+ redirectUrl,
78
+ targetGroupIds,
79
+ });
76
80
  this.logger.log(result);
77
81
  });
78
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.console.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brevo-contact-import.console.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.console.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.controller.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkC,IAAI,EAAiC,MAAM,gBAAgB,CAAC;AAOrG,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,wBAAgB,kCAAkC,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CA4CzH"}
1
+ {"version":3,"file":"brevo-contact-import.controller.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,IAAI,EAAiC,MAAM,gBAAgB,CAAC;AAOrG,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAGvD,wBAAgB,kCAAkC,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CA6CzH"}
@@ -23,33 +23,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
24
  exports.createBrevoContactImportController = void 0;
25
25
  const cms_api_1 = require("@comet/cms-api");
26
- const core_1 = require("@mikro-orm/core");
27
- const nestjs_1 = require("@mikro-orm/nestjs");
28
26
  const common_1 = require("@nestjs/common");
29
27
  const platform_express_1 = require("@nestjs/platform-express");
28
+ const stream_1 = require("stream");
30
29
  const brevo_contact_import_service_1 = require("../brevo-contact/brevo-contact-import.service");
31
30
  const brevo_module_constants_1 = require("../config/brevo-module.constants");
32
31
  function createBrevoContactImportController({ Scope }) {
33
32
  let BrevoContactImportController = class BrevoContactImportController {
34
- constructor(config, brevoContactImportService, targetGroupRepository) {
33
+ constructor(config, brevoContactImportService) {
35
34
  this.config = config;
36
35
  this.brevoContactImportService = brevoContactImportService;
37
- this.targetGroupRepository = targetGroupRepository;
38
36
  }
39
37
  upload(file, scope, listIds) {
40
38
  return __awaiter(this, void 0, void 0, function* () {
41
- const content = file.buffer.toString("utf8");
42
39
  const parsedScope = JSON.parse(scope);
43
40
  const redirectUrl = this.config.brevo.resolveConfig(parsedScope).redirectUrlForImport;
44
- const contacts = yield this.brevoContactImportService.parseCsvToBrevoContacts(content, redirectUrl);
45
- if (contacts.length > 100) {
46
- throw new cms_api_1.CometValidationException("Too many contacts in file. Currently we only support 100 contacts at once.");
47
- }
48
- let parsedListIds = undefined;
41
+ let targetGroupIds = undefined;
49
42
  if (listIds)
50
- parsedListIds = JSON.parse(listIds);
51
- const targetGroups = yield this.targetGroupRepository.find({ id: { $in: parsedListIds } });
52
- yield this.brevoContactImportService.importContactsFromCsv(content, parsedScope, redirectUrl, targetGroups);
43
+ targetGroupIds = JSON.parse(listIds);
44
+ const stream = stream_1.Readable.from(file.buffer);
45
+ return this.brevoContactImportService.importContactsFromCsv({
46
+ fileStream: stream,
47
+ scope: parsedScope,
48
+ redirectUrl,
49
+ targetGroupIds,
50
+ isAdminImport: true,
51
+ });
53
52
  });
54
53
  }
55
54
  };
@@ -76,9 +75,7 @@ function createBrevoContactImportController({ Scope }) {
76
75
  (0, common_1.Controller)("brevo-contacts-csv"),
77
76
  __param(0, (0, common_1.Inject)(brevo_module_constants_1.BREVO_MODULE_CONFIG)),
78
77
  __param(1, (0, common_1.Inject)(brevo_contact_import_service_1.BrevoContactImportService)),
79
- __param(2, (0, nestjs_1.InjectRepository)("TargetGroup")),
80
- __metadata("design:paramtypes", [Object, brevo_contact_import_service_1.BrevoContactImportService,
81
- core_1.EntityRepository])
78
+ __metadata("design:paramtypes", [Object, brevo_contact_import_service_1.BrevoContactImportService])
82
79
  ], BrevoContactImportController);
83
80
  return BrevoContactImportController;
84
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.controller.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8E;AAC9E,0CAAmD;AACnD,8CAAqD;AACrD,2CAAqG;AACrG,+DAA2D;AAG3D,gGAA0F;AAE1F,6EAAuE;AAGvE,SAAgB,kCAAkC,CAAC,EAAE,KAAK,EAAgD;IACtG,IACM,4BAA4B,GADlC,MACM,4BAA4B;QAC9B,YACkD,MAAyB,EACnB,yBAAoD,EACtD,qBAA6D;YAFjE,WAAM,GAAN,MAAM,CAAmB;YACnB,8BAAyB,GAAzB,yBAAyB,CAA2B;YACtD,0BAAqB,GAArB,qBAAqB,CAAwC;QAChH,CAAC;QAgBE,MAAM,CAAiB,IAAyB,EAAiB,KAAa,EAAmB,OAAgB;;gBACnH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAgC,CAAC;gBAErE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;gBACtF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAEpG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;oBACvB,MAAM,IAAI,kCAAwB,CAAC,4EAA4E,CAAC,CAAC;iBACpH;gBAED,IAAI,aAAa,GAAG,SAAS,CAAC;gBAC9B,IAAI,OAAO;oBAAE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;gBAE7D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gBAE3F,MAAM,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAChH,CAAC;SAAA;KACJ,CAAA;IAlBS;QAdL,IAAA,aAAI,EAAC,QAAQ,CAAC;QACd,IAAA,wBAAe,EACZ,IAAA,kCAAe,EAAC,MAAM,EAAE;YACpB,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;gBACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;oBAC9B,OAAO,EAAE,CAAC,IAAI,kCAAwB,CAAC,0BAA0B,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;iBAC7F;gBAED,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;SACJ,CAAC,CACL;QACA,IAAA,4BAAkB,EAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACrD,WAAA,IAAA,qBAAY,GAAE,CAAA;QAA6B,WAAA,IAAA,aAAI,EAAC,OAAO,CAAC,CAAA;QAAiB,WAAA,IAAA,aAAI,EAAC,SAAS,CAAC,CAAA;;;;8DAiBrG;IAtCC,4BAA4B;QADjC,IAAA,mBAAU,EAAC,oBAAoB,CAAC;QAGxB,WAAA,IAAA,eAAM,EAAC,4CAAmB,CAAC,CAAA;QAC3B,WAAA,IAAA,eAAM,EAAC,wDAAyB,CAAC,CAAA;QACjC,WAAA,IAAA,yBAAgB,EAAC,aAAa,CAAC,CAAA;iDAD+C,wDAAyB;YAC/B,uBAAgB;OAJ3F,4BAA4B,CAuCjC;IAED,OAAO,4BAA4B,CAAC;AACxC,CAAC;AA5CD,gFA4CC"}
1
+ {"version":3,"file":"brevo-contact-import.controller.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8E;AAC9E,2CAAqG;AACrG,+DAA2D;AAC3D,mCAAkC;AAElC,gGAA0F;AAE1F,6EAAuE;AAIvE,SAAgB,kCAAkC,CAAC,EAAE,KAAK,EAAgD;IACtG,IACM,4BAA4B,GADlC,MACM,4BAA4B;QAC9B,YACkD,MAAyB,EACnB,yBAAoD;YAD1D,WAAM,GAAN,MAAM,CAAmB;YACnB,8BAAyB,GAAzB,yBAAyB,CAA2B;QACzG,CAAC;QAgBE,MAAM,CACQ,IAAyB,EAC1B,KAAa,EACX,OAAgB;;gBAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAgC,CAAC;gBACrE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;gBAEtF,IAAI,cAAc,GAAG,SAAS,CAAC;gBAC/B,IAAI,OAAO;oBAAE,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;gBAE9D,MAAM,MAAM,GAAG,iBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,CAAC;oBACxD,UAAU,EAAE,MAAM;oBAClB,KAAK,EAAE,WAAW;oBAClB,WAAW;oBACX,cAAc;oBACd,aAAa,EAAE,IAAI;iBACtB,CAAC,CAAC;YACP,CAAC;SAAA;KACJ,CAAA;IApBS;QAdL,IAAA,aAAI,EAAC,QAAQ,CAAC;QACd,IAAA,wBAAe,EACZ,IAAA,kCAAe,EAAC,MAAM,EAAE;YACpB,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;YACtC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;gBACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;oBAC9B,OAAO,EAAE,CAAC,IAAI,kCAAwB,CAAC,0BAA0B,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;iBAC7F;gBAED,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;SACJ,CAAC,CACL;QACA,IAAA,4BAAkB,EAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAE9D,WAAA,IAAA,qBAAY,GAAE,CAAA;QACd,WAAA,IAAA,aAAI,EAAC,OAAO,CAAC,CAAA;QACb,WAAA,IAAA,aAAI,EAAC,SAAS,CAAC,CAAA;;;;8DAgBnB;IAvCC,4BAA4B;QADjC,IAAA,mBAAU,EAAC,oBAAoB,CAAC;QAGxB,WAAA,IAAA,eAAM,EAAC,4CAAmB,CAAC,CAAA;QAC3B,WAAA,IAAA,eAAM,EAAC,wDAAyB,CAAC,CAAA;iDAA6C,wDAAyB;OAH1G,4BAA4B,CAwCjC;IAED,OAAO,4BAA4B,CAAC;AACxC,CAAC;AA7CD,gFA6CC"}
@@ -1,22 +1,37 @@
1
- import { BrevoApiContactsService, CreateDoubleOptInContactData } from "../brevo-api/brevo-api-contact.service";
1
+ /// <reference types="node" />
2
+ import { EntityRepository } from "@mikro-orm/core";
3
+ import { TargetGroupInterface } from "src/target-group/entity/target-group-entity.factory";
4
+ import { Readable } from "stream";
5
+ import { BrevoApiContactsService } from "../brevo-api/brevo-api-contact.service";
2
6
  import { BrevoContactsService } from "../brevo-contact/brevo-contacts.service";
3
7
  import { BrevoModuleConfig } from "../config/brevo-module.config";
4
- import { TargetGroupInterface } from "../target-group/entity/target-group-entity.factory";
5
8
  import { TargetGroupsService } from "../target-group/target-groups.service";
6
9
  import { EmailCampaignScopeInterface } from "../types";
10
+ export interface CsvImportInformation {
11
+ created: number;
12
+ updated: number;
13
+ failed: number;
14
+ failedColumns: unknown[];
15
+ errorMessage?: string;
16
+ }
17
+ interface ImportContactsFromCsvParams {
18
+ fileStream: Readable;
19
+ scope: EmailCampaignScopeInterface;
20
+ redirectUrl: string;
21
+ targetGroupIds?: string[];
22
+ isAdminImport?: boolean;
23
+ }
7
24
  export declare class BrevoContactImportService {
8
25
  private readonly config;
9
26
  private readonly brevoApiContactsService;
10
27
  private readonly brevoContactsService;
11
28
  private readonly targetGroupsService;
12
- constructor(config: BrevoModuleConfig, brevoApiContactsService: BrevoApiContactsService, brevoContactsService: BrevoContactsService, targetGroupsService: TargetGroupsService);
13
- importContactsFromCsv(csvContent: string, scope: EmailCampaignScopeInterface, redirectUrl: string, targetGroups?: TargetGroupInterface[]): Promise<{
14
- created: number;
15
- updated: number;
16
- failed: number;
17
- }>;
18
- parseCsvToBrevoContacts(csvContent: string, redirectUrl: string): Promise<CreateDoubleOptInContactData[]>;
19
- private processRow;
20
- private createAndValidateRow;
29
+ private readonly targetGroupRepository;
30
+ constructor(config: BrevoModuleConfig, brevoApiContactsService: BrevoApiContactsService, brevoContactsService: BrevoContactsService, targetGroupsService: TargetGroupsService, targetGroupRepository: EntityRepository<TargetGroupInterface>);
31
+ importContactsFromCsv({ fileStream, scope, redirectUrl, targetGroupIds, isAdminImport, }: ImportContactsFromCsvParams): Promise<CsvImportInformation>;
32
+ private createOrUpdateBrevoContact;
33
+ private processCsvRow;
34
+ private createValidateableCsvRowClass;
21
35
  }
36
+ export {};
22
37
  //# sourceMappingURL=brevo-contact-import.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.service.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAWvD,qBACa,yBAAyB;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAHU,MAAM,EAAE,iBAAiB,EACtD,uBAAuB,EAAE,uBAAuB,EAChD,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB;IAGvD,qBAAqB,CACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,2BAA2B,EAClC,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,oBAAoB,EAAO,GAC1C,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAqD1D,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,EAAE,CAAC;YA0BjG,UAAU;YAcV,oBAAoB;CAYrC"}
1
+ {"version":3,"file":"brevo-contact-import.service.d.ts","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,uBAAuB,EAAgC,MAAM,wCAAwC,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAWvD,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,2BAA2B;IACjC,UAAU,EAAE,QAAQ,CAAC;IACrB,KAAK,EAAE,2BAA2B,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBACa,yBAAyB;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAJzB,MAAM,EAAE,iBAAiB,EACtD,uBAAuB,EAAE,uBAAuB,EAChD,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EACP,qBAAqB,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAG7G,qBAAqB,CAAC,EACxB,UAAU,EACV,KAAK,EACL,WAAW,EACX,cAAmB,EACnB,aAAqB,GACxB,EAAE,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAoEhD,0BAA0B;YAyC1B,aAAa;IA4B3B,OAAO,CAAC,6BAA6B;CAexC"}
@@ -1,10 +1,33 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
19
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
20
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
21
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
22
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
23
  };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
8
31
  var __metadata = (this && this.__metadata) || function (k, v) {
9
32
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
33
  };
@@ -20,6 +43,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
43
  step((generator = generator.apply(thisArg, _arguments || [])).next());
21
44
  });
22
45
  };
46
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
47
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
48
+ var m = o[Symbol.asyncIterator], i;
49
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
50
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
51
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
52
+ };
23
53
  var __rest = (this && this.__rest) || function (s, e) {
24
54
  var t = {};
25
55
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -31,135 +61,198 @@ var __rest = (this && this.__rest) || function (s, e) {
31
61
  }
32
62
  return t;
33
63
  };
64
+ var __importDefault = (this && this.__importDefault) || function (mod) {
65
+ return (mod && mod.__esModule) ? mod : { "default": mod };
66
+ };
34
67
  Object.defineProperty(exports, "__esModule", { value: true });
35
68
  exports.BrevoContactImportService = void 0;
36
- const parse_1 = require("@fast-csv/parse");
69
+ const csv = __importStar(require("@fast-csv/parse"));
70
+ const core_1 = require("@mikro-orm/core");
71
+ const nestjs_1 = require("@mikro-orm/nestjs");
37
72
  const common_1 = require("@nestjs/common");
38
73
  const class_validator_1 = require("class-validator");
74
+ const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
39
75
  const brevo_api_utils_1 = require("../brevo-api/brevo-api.utils");
40
76
  const brevo_api_contact_service_1 = require("../brevo-api/brevo-api-contact.service");
41
77
  const brevo_contacts_service_1 = require("../brevo-contact/brevo-contacts.service");
42
78
  const brevo_module_constants_1 = require("../config/brevo-module.constants");
43
79
  const target_groups_service_1 = require("../target-group/target-groups.service");
44
- class ValidateableRow {
80
+ class BasicValidateableRow {
45
81
  }
46
82
  __decorate([
47
83
  (0, class_validator_1.IsEmail)(),
48
84
  (0, class_validator_1.IsNotEmpty)(),
49
85
  __metadata("design:type", String)
50
- ], ValidateableRow.prototype, "email", void 0);
86
+ ], BasicValidateableRow.prototype, "email", void 0);
51
87
  let BrevoContactImportService = class BrevoContactImportService {
52
- constructor(config, brevoApiContactsService, brevoContactsService, targetGroupsService) {
88
+ constructor(config, brevoApiContactsService, brevoContactsService, targetGroupsService, targetGroupRepository) {
53
89
  this.config = config;
54
90
  this.brevoApiContactsService = brevoApiContactsService;
55
91
  this.brevoContactsService = brevoContactsService;
56
92
  this.targetGroupsService = targetGroupsService;
93
+ this.targetGroupRepository = targetGroupRepository;
57
94
  }
58
- importContactsFromCsv(csvContent, scope, redirectUrl, targetGroups = []) {
95
+ importContactsFromCsv({ fileStream, scope, redirectUrl, targetGroupIds = [], isAdminImport = false, }) {
96
+ var _a, e_1, _b, _c;
59
97
  return __awaiter(this, void 0, void 0, function* () {
98
+ const failedColumns = [];
99
+ const targetGroups = yield this.targetGroupRepository.find({ id: { $in: targetGroupIds } });
100
+ for (const targetGroup of targetGroups) {
101
+ if (targetGroup.isMainList) {
102
+ throw new Error("Main lists are not allowed as target groups for import");
103
+ }
104
+ if (!(0, lodash_isequal_1.default)(Object.assign({}, targetGroup.scope), scope)) {
105
+ throw new Error("Target group scope does not match the scope of the import file");
106
+ }
107
+ }
108
+ const manuallyAssignedBrevoContacts = yield Promise.all(targetGroups.map((targetGroup) => {
109
+ return this.targetGroupsService.createIfNotExistsManuallyAssignedContactsTargetGroup(targetGroup);
110
+ }));
111
+ const targetGroupBrevoIds = [...targetGroups.map((targetGroup) => targetGroup.brevoId), ...manuallyAssignedBrevoContacts];
112
+ const rows = fileStream.pipe(csv.parse({ headers: true, delimiter: ";", ignoreEmpty: true })).on("error", (error) => {
113
+ throw error;
114
+ });
60
115
  let created = 0;
61
116
  let updated = 0;
62
117
  let failed = 0;
63
- const contacts = yield this.parseCsvToBrevoContacts(csvContent, redirectUrl);
64
- const targetGroupBrevoIds = yield Promise.all(targetGroups.map((targetGroup) => {
65
- return this.targetGroupsService.createIfNotExistsManuallyAssignedContactsTargetGroup(targetGroup);
66
- }));
67
- for (const contact of contacts) {
68
- try {
69
- let brevoContact;
118
+ try {
119
+ for (var _d = true, rows_1 = __asyncValues(rows), rows_1_1; rows_1_1 = yield rows_1.next(), _a = rows_1_1.done, !_a;) {
120
+ _c = rows_1_1.value;
121
+ _d = false;
70
122
  try {
71
- brevoContact = yield this.brevoApiContactsService.findContact(contact.email, scope);
72
- }
73
- catch (error) {
74
- if (!(0, brevo_api_utils_1.isErrorFromBrevo)(error)) {
75
- throw error;
123
+ const row = _c;
124
+ if (isAdminImport && created + updated + failed > 100) {
125
+ return {
126
+ created,
127
+ updated,
128
+ failed,
129
+ failedColumns,
130
+ errorMessage: "Too many contacts. Currently we only support 100 contacts at once, the first 100 contacts were handled. Please split the file and try again with the remaining contacts.",
131
+ };
76
132
  }
77
- if (error.response.statusCode !== 404) {
78
- throw error;
133
+ try {
134
+ const contactData = yield this.processCsvRow(row, redirectUrl);
135
+ const result = yield this.createOrUpdateBrevoContact(contactData, scope, targetGroupBrevoIds);
136
+ switch (result) {
137
+ case "created":
138
+ created++;
139
+ break;
140
+ case "updated":
141
+ updated++;
142
+ break;
143
+ case "error":
144
+ failedColumns.push(row);
145
+ failed++;
146
+ break;
147
+ }
79
148
  }
80
- }
81
- if (brevoContact && !brevoContact.emailBlacklisted) {
82
- const mainTargetGroupForScope = yield this.targetGroupsService.createIfNotExistMainTargetGroupForScope(scope);
83
- const updatedBrevoContact = yield this.brevoApiContactsService.updateContact(brevoContact.id, Object.assign(Object.assign({}, contact), { listIds: [mainTargetGroupForScope.brevoId, ...targetGroupBrevoIds, ...brevoContact.listIds] }), scope);
84
- if (updatedBrevoContact)
85
- updated++;
86
- else
149
+ catch (validationError) {
150
+ console.error(validationError);
151
+ failedColumns.push(row);
87
152
  failed++;
153
+ }
88
154
  }
89
- else if (!brevoContact) {
90
- const success = yield this.brevoContactsService.createDoubleOptInContact(Object.assign(Object.assign({}, contact), { scope, templateId: this.config.brevo.resolveConfig(scope).doubleOptInTemplateId, listIds: targetGroupBrevoIds }));
91
- if (success)
92
- created++;
93
- else
94
- failed++;
155
+ finally {
156
+ _d = true;
95
157
  }
96
158
  }
97
- catch (err) {
98
- console.error(err);
99
- failed++;
159
+ }
160
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
161
+ finally {
162
+ try {
163
+ if (!_d && !_a && (_b = rows_1.return)) yield _b.call(rows_1);
100
164
  }
165
+ finally { if (e_1) throw e_1.error; }
166
+ }
167
+ if (created + updated + failed === 0) {
168
+ return { created, updated, failed, failedColumns, errorMessage: "No contacts found." };
101
169
  }
102
- return { created, updated, failed };
170
+ return { created, updated, failed, failedColumns };
103
171
  });
104
172
  }
105
- parseCsvToBrevoContacts(csvContent, redirectUrl) {
173
+ createOrUpdateBrevoContact(contact, scope, targetGroupBrevoIds) {
106
174
  return __awaiter(this, void 0, void 0, function* () {
107
- const brevoContacts = [];
108
- return new Promise((resolve, reject) => {
109
- (0, parse_1.parseString)(csvContent, { headers: true, delimiter: ";" })
110
- .on("error", (error) => {
111
- console.error(error);
112
- reject(error);
113
- })
114
- .on("data", (row) => __awaiter(this, void 0, void 0, function* () {
115
- try {
116
- const contactData = yield this.processRow(row, redirectUrl);
117
- brevoContacts.push(contactData);
175
+ try {
176
+ let brevoContact;
177
+ try {
178
+ brevoContact = yield this.brevoApiContactsService.findContact(contact.email, scope);
179
+ }
180
+ catch (error) {
181
+ if (!(0, brevo_api_utils_1.isErrorFromBrevo)(error)) {
182
+ throw error;
118
183
  }
119
- catch (validationError) {
120
- console.error(validationError);
121
- reject(validationError);
184
+ if (error.response.statusCode !== 404) {
185
+ throw error;
122
186
  }
123
- }))
124
- .on("end", (rowCount) => {
125
- console.log(`Parsed ${rowCount} rows`);
126
- resolve(brevoContacts);
127
- });
128
- });
129
- });
130
- }
131
- processRow(row, redirectUrlForImport) {
132
- return __awaiter(this, void 0, void 0, function* () {
133
- const _a = yield this.createAndValidateRow(row), { email } = _a, data = __rest(_a, ["email"]);
134
- return {
135
- email,
136
- redirectionUrl: redirectUrlForImport,
137
- attributes: Object.assign({}, data),
138
- };
187
+ }
188
+ const mainTargetGroupForScope = yield this.targetGroupsService.createIfNotExistMainTargetGroupForScope(scope);
189
+ if (brevoContact && !brevoContact.emailBlacklisted) {
190
+ const updatedBrevoContact = yield this.brevoApiContactsService.updateContact(brevoContact.id, Object.assign(Object.assign({}, contact), { listIds: [mainTargetGroupForScope.brevoId, ...targetGroupBrevoIds, ...brevoContact.listIds] }), scope);
191
+ if (updatedBrevoContact)
192
+ return "updated";
193
+ }
194
+ else if (!brevoContact) {
195
+ const success = yield this.brevoContactsService.createDoubleOptInContact(Object.assign(Object.assign({}, contact), { scope, templateId: this.config.brevo.resolveConfig(scope).doubleOptInTemplateId, listIds: [mainTargetGroupForScope.brevoId, ...targetGroupBrevoIds] }));
196
+ if (success)
197
+ return "created";
198
+ }
199
+ }
200
+ catch (err) {
201
+ console.error(err);
202
+ }
203
+ return "error";
139
204
  });
140
205
  }
141
- createAndValidateRow(row) {
206
+ processCsvRow(row, redirectUrlForImport) {
142
207
  return __awaiter(this, void 0, void 0, function* () {
143
- const mappedRow = new ValidateableRow();
144
- Object.keys(row).forEach((key) => {
208
+ const mappedRow = this.createValidateableCsvRowClass();
209
+ for (const key in row) {
145
210
  if (key.toLowerCase() === "email") {
146
211
  mappedRow.email = row[key];
147
212
  }
148
213
  else {
149
- mappedRow[key] = row[key];
214
+ mappedRow[key.toUpperCase()] = row[key];
150
215
  }
151
- });
152
- yield (0, class_validator_1.validateOrReject)(mappedRow);
153
- return mappedRow;
216
+ }
217
+ const errors = (0, class_validator_1.validateSync)(mappedRow);
218
+ if (errors.length > 0) {
219
+ throw errors;
220
+ }
221
+ const { email } = mappedRow, data = __rest(mappedRow, ["email"]);
222
+ return {
223
+ email: mappedRow.email,
224
+ redirectionUrl: redirectUrlForImport,
225
+ attributes: Object.assign({}, data),
226
+ };
154
227
  });
155
228
  }
229
+ createValidateableCsvRowClass() {
230
+ if (this.config.brevo.BrevoContactAttributes) {
231
+ const BrevoContactAttributesClass = this.config.brevo.BrevoContactAttributes;
232
+ class ValidateableRow extends BrevoContactAttributesClass {
233
+ }
234
+ __decorate([
235
+ (0, class_validator_1.IsEmail)(),
236
+ (0, class_validator_1.IsNotEmpty)(),
237
+ __metadata("design:type", String)
238
+ ], ValidateableRow.prototype, "email", void 0);
239
+ return new ValidateableRow();
240
+ }
241
+ else {
242
+ class ValidateableRow extends BasicValidateableRow {
243
+ }
244
+ return new ValidateableRow();
245
+ }
246
+ }
156
247
  };
157
248
  BrevoContactImportService = __decorate([
158
249
  (0, common_1.Injectable)(),
159
250
  __param(0, (0, common_1.Inject)(brevo_module_constants_1.BREVO_MODULE_CONFIG)),
251
+ __param(4, (0, nestjs_1.InjectRepository)("TargetGroup")),
160
252
  __metadata("design:paramtypes", [Object, brevo_api_contact_service_1.BrevoApiContactsService,
161
253
  brevo_contacts_service_1.BrevoContactsService,
162
- target_groups_service_1.TargetGroupsService])
254
+ target_groups_service_1.TargetGroupsService,
255
+ core_1.EntityRepository])
163
256
  ], BrevoContactImportService);
164
257
  exports.BrevoContactImportService = BrevoContactImportService;
165
258
  //# sourceMappingURL=brevo-contact-import.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"brevo-contact-import.service.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brevo-contact-import.service.js","sourceRoot":"","sources":["../../src/brevo-contact/brevo-contact-import.service.ts"],"names":[],"mappings":"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"}