@antelopejs/dms-mailing 0.5.1 → 0.6.0

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.
Files changed (70) hide show
  1. package/README.md +1 -1
  2. package/dist/db/models/send-events.model.d.ts +1 -0
  3. package/dist/db/models/send-events.model.js +11 -0
  4. package/dist/db/models/send-events.model.js.map +1 -1
  5. package/dist/db/models/sends.model.d.ts +2 -0
  6. package/dist/db/models/sends.model.js +13 -0
  7. package/dist/db/models/sends.model.js.map +1 -1
  8. package/dist/db/models/template-versions.model.d.ts +3 -1
  9. package/dist/db/models/template-versions.model.js +35 -2
  10. package/dist/db/models/template-versions.model.js.map +1 -1
  11. package/dist/db/models/templates.model.d.ts +1 -0
  12. package/dist/db/models/templates.model.js +22 -0
  13. package/dist/db/models/templates.model.js.map +1 -1
  14. package/dist/db/tables/settings.table.d.ts +1 -0
  15. package/dist/db/tables/settings.table.js +4 -0
  16. package/dist/db/tables/settings.table.js.map +1 -1
  17. package/dist/db/tables/templates.table.d.ts +5 -0
  18. package/dist/db/tables/templates.table.js +27 -0
  19. package/dist/db/tables/templates.table.js.map +1 -1
  20. package/dist/hooks/database-ready.d.ts +7 -0
  21. package/dist/hooks/database-ready.js +26 -0
  22. package/dist/hooks/database-ready.js.map +1 -0
  23. package/dist/hooks/index.d.ts +1 -0
  24. package/dist/hooks/index.js +1 -0
  25. package/dist/hooks/index.js.map +1 -1
  26. package/dist/implementations/dms-mailing/index.d.ts +3 -0
  27. package/dist/implementations/dms-mailing/index.js +7 -1
  28. package/dist/implementations/dms-mailing/index.js.map +1 -1
  29. package/dist/index.js +1 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/services/declaration-error.d.ts +6 -0
  32. package/dist/services/declaration-error.js +26 -0
  33. package/dist/services/declaration-error.js.map +1 -0
  34. package/dist/services/declarations.d.ts +3 -0
  35. package/dist/services/declarations.js +244 -0
  36. package/dist/services/declarations.js.map +1 -0
  37. package/dist/services/events.d.ts +4 -1
  38. package/dist/services/events.js.map +1 -1
  39. package/dist/services/fingerprint.d.ts +1 -0
  40. package/dist/services/fingerprint.js +20 -0
  41. package/dist/services/fingerprint.js.map +1 -0
  42. package/dist/services/send-import.d.ts +2 -0
  43. package/dist/services/send-import.js +136 -0
  44. package/dist/services/send-import.js.map +1 -0
  45. package/dist/services/templates.d.ts +1 -0
  46. package/dist/services/templates.js +49 -48
  47. package/dist/services/templates.js.map +1 -1
  48. package/dist/validation/declarations.schema.d.ts +299 -0
  49. package/dist/validation/declarations.schema.js +55 -0
  50. package/dist/validation/declarations.schema.js.map +1 -0
  51. package/package.json +2 -2
  52. package/skills/dms-mailing/SKILL.md +41 -3
  53. package/src/db/models/send-events.model.ts +13 -0
  54. package/src/db/models/sends.model.ts +22 -0
  55. package/src/db/models/template-versions.model.ts +48 -2
  56. package/src/db/models/templates.model.ts +31 -0
  57. package/src/db/tables/settings.table.ts +8 -0
  58. package/src/db/tables/templates.table.ts +38 -0
  59. package/src/hooks/database-ready.ts +47 -0
  60. package/src/hooks/index.ts +1 -0
  61. package/src/implementations/dms-mailing/index.ts +17 -0
  62. package/src/index.ts +6 -1
  63. package/src/services/declaration-error.ts +39 -0
  64. package/src/services/declarations.ts +450 -0
  65. package/src/services/events.ts +8 -2
  66. package/src/services/fingerprint.ts +22 -0
  67. package/src/services/send-import.ts +235 -0
  68. package/src/services/templates.ts +64 -72
  69. package/src/validation/declarations.schema.ts +77 -0
  70. package/frontend-vue/pnpm-workspace.yaml +0 -2
package/README.md CHANGED
@@ -61,7 +61,7 @@ await SendTemplate("order-confirmation", {
61
61
  | `@antelopejs/dms` | `>=0.9.0 <1.0.0` |
62
62
  | `@antelopejs/interface-dms` | `>=0.7.1 <1.0.0` |
63
63
  | `@antelopejs/dms-frontend` (renderer, playground range) | `>=0.6.1 <0.7.0` |
64
- | `@antelopejs/interface-dms-mailing` | `>=0.7.0 <0.8.0` |
64
+ | `@antelopejs/interface-dms-mailing` | `>=0.8.0 <0.9.0` |
65
65
  | E-mail provider | an `@antelopejs/interface-email` implementation, such as `@antelopejs/nodemailer` |
66
66
 
67
67
  On DMS 0.8, use `@antelopejs/dms-mailing` 0.4.
@@ -22,6 +22,7 @@ declare const SendEventModel_base: {
22
22
  export declare class SendEventModel extends SendEventModel_base {
23
23
  getBySend(sendId: string): Promise<MailingSendEvent[]>;
24
24
  insertForActiveSend(event: NewSendEvent): Promise<boolean>;
25
+ insertImported(event: MailingSendEvent): Promise<void>;
25
26
  listAfter(after: string, size: number): Promise<MailingSendEvent[]>;
26
27
  deleteBySend(sendId: string): Promise<number>;
27
28
  }
@@ -17,6 +17,17 @@ class SendEventModel extends (0, interface_database_decorators_1.BasicDataModel)
17
17
  await this.delete(id);
18
18
  return false;
19
19
  }
20
+ async insertImported(event) {
21
+ if (await this.get(event._id))
22
+ return;
23
+ try {
24
+ await this.insert(event);
25
+ }
26
+ catch (error) {
27
+ if (!(await this.get(event._id)))
28
+ throw error;
29
+ }
30
+ }
20
31
  listAfter(after, size) {
21
32
  return this.table
22
33
  .filter((row) => row.key("_id").gt(after))
@@ -1 +1 @@
1
- {"version":3,"file":"send-events.model.js","sourceRoot":"","sources":["../../../src/db/models/send-events.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,sCAA6E;AAC7E,+CAA0C;AAI1C,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAa,cAAe,SAAQ,IAAA,8CAAc,EAChD,yBAAgB,EAChB,uCAA8B,CAC/B;IACC,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAGD,KAAK,CAAC,mBAAmB,CAAC,KAAmB;QAC3C,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,uBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,SAAS,CAAC,KAAa,EAAE,IAAY;QACnC,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;aACzC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC;aAC7B,GAAG,EAAE,CAAC;IACX,CAAC;IAOD,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;aAC7C,MAAM,EAAE;aACR,GAAG,EAAE,CAAC;IACX,CAAC;CACF;AArCD,wCAqCC"}
1
+ {"version":3,"file":"send-events.model.js","sourceRoot":"","sources":["../../../src/db/models/send-events.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,sCAA6E;AAC7E,+CAA0C;AAI1C,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAa,cAAe,SAAQ,IAAA,8CAAc,EAChD,yBAAgB,EAChB,uCAA8B,CAC/B;IACC,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAGD,KAAK,CAAC,mBAAmB,CAAC,KAAmB;QAC3C,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,uBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,KAAK,CAAC,cAAc,CAAC,KAAuB;QAC1C,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,KAAK,CAAC;QAChD,CAAC;IACH,CAAC;IAGD,SAAS,CAAC,KAAa,EAAE,IAAY;QACnC,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;aACzC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC;aAC7B,GAAG,EAAE,CAAC;IACX,CAAC;IAOD,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;aAC7C,MAAM,EAAE;aACR,GAAG,EAAE,CAAC;IACX,CAAC;CACF;AAlDD,wCAkDC"}
@@ -1,5 +1,6 @@
1
1
  import { MailingSend } from "../tables";
2
2
  type NewSend = Omit<MailingSend, "_id" | "createdAt" | "revision" | "isRetiring" | "lastActivityAt">;
3
+ export type ImportedSendRow = Omit<MailingSend, "revision" | "isRetiring" | "lastActivityAt">;
3
4
  export type SendSummary = Omit<MailingSend, "json_variables">;
4
5
  type SendActivity = Pick<MailingSend, "status" | "opens" | "clicks" | "lastEventAt" | "provider" | "error" | "isSoftBounce">;
5
6
  export interface SendReplay {
@@ -27,6 +28,7 @@ declare const SendModel_base: {
27
28
  };
28
29
  export declare class SendModel extends SendModel_base {
29
30
  insertSend(send: NewSend): Promise<string[]>;
31
+ insertImported(send: ImportedSendRow): Promise<boolean>;
30
32
  getSnapshot(sendId: string): Promise<MailingSend | undefined>;
31
33
  getByProviderMessageId(messageId: string): Promise<MailingSend | undefined>;
32
34
  listBetween(from: Date, to: Date): Promise<SendSummary[]>;
@@ -38,6 +38,19 @@ class SendModel extends (0, interface_database_decorators_1.BasicDataModel)(tabl
38
38
  })
39
39
  .run();
40
40
  }
41
+ async insertImported(send) {
42
+ if (await this.get(send._id))
43
+ return false;
44
+ try {
45
+ await this.table.insert({ ...send, revision: (0, node_crypto_1.randomUUID)() }).run();
46
+ return true;
47
+ }
48
+ catch (error) {
49
+ if (await this.get(send._id))
50
+ return false;
51
+ throw error;
52
+ }
53
+ }
41
54
  getSnapshot(sendId) {
42
55
  return this.table.get(sendId).run();
43
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sends.model.js","sourceRoot":"","sources":["../../../src/db/models/sends.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sends.model.js","sourceRoot":"","sources":["../../../src/db/models/sends.model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { MailingTemplateVersion } from "../tables";
1
+ import { type MailingTemplate, MailingTemplateVersion } from "../tables";
2
+ export declare function committedVersionOf(template: Pick<MailingTemplate, "json_published_version">): MailingTemplateVersion | undefined;
2
3
  declare const TemplateVersionModel_base: {
3
4
  new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
4
5
  readonly table: import("@antelopejs/interface-database").Table<MailingTemplateVersion>;
@@ -19,6 +20,7 @@ declare const TemplateVersionModel_base: {
19
20
  validate(obj: unknown, options?: import("@antelopejs/interface-database-decorators").ValidateInputOptions): import("@antelopejs/interface-database-decorators").ValidationResult;
20
21
  };
21
22
  export declare class TemplateVersionModel extends TemplateVersionModel_base {
23
+ materialize(template: Pick<MailingTemplate, "json_published_version">): Promise<void>;
22
24
  listForTemplate(templateId: string): Promise<MailingTemplateVersion[]>;
23
25
  getVersion(templateId: string, version: number): Promise<MailingTemplateVersion | undefined>;
24
26
  }
@@ -1,15 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TemplateVersionModel = void 0;
4
+ exports.committedVersionOf = committedVersionOf;
4
5
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
5
6
  const tables_1 = require("../tables");
7
+ const templates_model_1 = require("./templates.model");
8
+ function committedVersionOf(template) {
9
+ if (!template.json_published_version)
10
+ return undefined;
11
+ const row = JSON.parse(template.json_published_version);
12
+ row.publishedAt = new Date(row.publishedAt);
13
+ return row;
14
+ }
6
15
  class TemplateVersionModel extends (0, interface_database_decorators_1.BasicDataModel)(tables_1.MailingTemplateVersion, tables_1.MAILING_TEMPLATE_VERSIONS_TABLE_NAME) {
16
+ async materialize(template) {
17
+ const version = committedVersionOf(template);
18
+ if (!version)
19
+ return;
20
+ if (await this.get(version._id))
21
+ return;
22
+ try {
23
+ await this.insert(version);
24
+ }
25
+ catch (error) {
26
+ const stored = await this.get(version._id);
27
+ if (!stored ||
28
+ Object.entries(version).some(([key, value]) => JSON.stringify(stored[key]) !==
29
+ JSON.stringify(value)))
30
+ throw error;
31
+ }
32
+ }
7
33
  async listForTemplate(templateId) {
34
+ const template = await new templates_model_1.TemplateModel(this.database).get(templateId);
35
+ if (!template)
36
+ return [];
8
37
  const rows = await this.getBy("templateId", templateId);
9
- return rows.sort((left, right) => right.version - left.version);
38
+ const current = committedVersionOf(template);
39
+ const history = rows.filter((row) => row.version <= template.publishedVersion);
40
+ if (current && !history.some((row) => row.version === current.version))
41
+ history.push(current);
42
+ return history.sort((left, right) => right.version - left.version);
10
43
  }
11
44
  async getVersion(templateId, version) {
12
- const rows = await this.getBy("templateId", templateId);
45
+ const rows = await this.listForTemplate(templateId);
13
46
  return rows.find((row) => row.version === version);
14
47
  }
15
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template-versions.model.js","sourceRoot":"","sources":["../../../src/db/models/template-versions.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,sCAGmB;AAEnB,MAAa,oBAAqB,SAAQ,IAAA,8CAAc,EACtD,+BAAsB,EACtB,6CAAoC,CACrC;IACC,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,UAAkB,EAClB,OAAe;QAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAhBD,oDAgBC"}
1
+ {"version":3,"file":"template-versions.model.js","sourceRoot":"","sources":["../../../src/db/models/template-versions.model.ts"],"names":[],"mappings":";;;AASA,gDASC;AAlBD,6FAA2E;AAC3E,sCAImB;AACnB,uDAAkD;AAGlD,SAAgB,kBAAkB,CAChC,QAAyD;IAEzD,IAAI,CAAC,QAAQ,CAAC,sBAAsB;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,QAAQ,CAAC,sBAAsB,CACN,CAAC;IAC5B,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAa,oBAAqB,SAAQ,IAAA,8CAAc,EACtD,+BAAsB,EACtB,6CAAoC,CACrC;IAEC,KAAK,CAAC,WAAW,CACf,QAAyD;QAEzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3C,IACE,CAAC,MAAM;gBACP,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAC1B,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAmC,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB;gBAED,MAAM,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QAEtC,MAAM,QAAQ,GAAG,MAAM,IAAI,+BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CACzB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAClD,CAAC;QACF,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,UAAkB,EAClB,OAAe;QAEf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAhDD,oDAgDC"}
@@ -20,6 +20,7 @@ declare const TemplateModel_base: {
20
20
  validate(obj: unknown, options?: import("@antelopejs/interface-database-decorators").ValidateInputOptions): import("@antelopejs/interface-database-decorators").ValidationResult;
21
21
  };
22
22
  export declare class TemplateModel extends TemplateModel_base {
23
+ publishIfCurrent(template: MailingTemplate, patch: Partial<MailingTemplate>): Promise<boolean>;
23
24
  getBySlug(slug: string): Promise<MailingTemplate | undefined>;
24
25
  writeAttention(id: string, fields: TemplateAttentionFields): Promise<void>;
25
26
  }
@@ -1,11 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TemplateModel = void 0;
4
+ const node_crypto_1 = require("node:crypto");
4
5
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
5
6
  const tables_1 = require("../tables");
7
+ const template_slugs_model_1 = require("./template-slugs.model");
6
8
  class TemplateModel extends (0, interface_database_decorators_1.BasicDataModel)(tables_1.MailingTemplate, tables_1.MAILING_TEMPLATES_TABLE_NAME) {
9
+ async publishIfCurrent(template, patch) {
10
+ const outcome = await this.table
11
+ .atomicMutation(template._id, {
12
+ type: "update",
13
+ revisionField: "revision",
14
+ expectedRevision: template.revision ?? { kind: "missing" },
15
+ nextRevision: (0, node_crypto_1.randomUUID)(),
16
+ patch: { ...patch, updatedAt: new Date() },
17
+ })
18
+ .run();
19
+ if (outcome === "unknown")
20
+ throw new Error("Mailing publication outcome is unknown; not retrying");
21
+ return outcome === "applied";
22
+ }
7
23
  async getBySlug(slug) {
8
24
  const rows = await this.getBy("slug", slug);
25
+ if (rows.length > 1) {
26
+ const claims = await new template_slugs_model_1.TemplateSlugModel(this.database).getBy("templateId", ...rows.map((row) => row._id));
27
+ const claim = claims.find((candidate) => candidate.slug === slug);
28
+ if (claim)
29
+ return rows.find((row) => row._id === claim.templateId);
30
+ }
9
31
  return rows[0];
10
32
  }
11
33
  async writeAttention(id, fields) {
@@ -1 +1 @@
1
- {"version":3,"file":"templates.model.js","sourceRoot":"","sources":["../../../src/db/models/templates.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,sCAA0E;AAQ1E,MAAa,aAAc,SAAQ,IAAA,8CAAc,EAC/C,wBAAe,EACf,qCAA4B,CAC7B;IACC,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAMD,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,MAA+B;QAE/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;CACF;AAnBD,sCAmBC"}
1
+ {"version":3,"file":"templates.model.js","sourceRoot":"","sources":["../../../src/db/models/templates.model.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,6FAA2E;AAC3E,sCAA0E;AAC1E,iEAA2D;AAQ3D,MAAa,aAAc,SAAQ,IAAA,8CAAc,EAC/C,wBAAe,EACf,qCAA4B,CAC7B;IAEC,KAAK,CAAC,gBAAgB,CACpB,QAAyB,EACzB,KAA+B;QAE/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5B,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,UAAU;YACzB,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1D,YAAY,EAAE,IAAA,wBAAU,GAAE;YAC1B,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;SAC3C,CAAC;aACD,GAAG,EAAE,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,OAAO,OAAO,KAAK,SAAS,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAG5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,wCAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC7D,YAAY,EACZ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAC9B,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAClE,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAMD,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,MAA+B;QAE/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;CACF;AAhDD,sCAgDC"}
@@ -12,4 +12,5 @@ export declare class MailingSettings extends Table {
12
12
  replyTo: string;
13
13
  json_categories: string;
14
14
  webhookSecret: string;
15
+ json_declared_categories?: string;
15
16
  }
@@ -62,6 +62,10 @@ __decorate([
62
62
  (0, interface_database_decorators_1.Field)("string"),
63
63
  __metadata("design:type", String)
64
64
  ], MailingSettings.prototype, "webhookSecret", void 0);
65
+ __decorate([
66
+ (0, interface_database_decorators_1.Field)("string"),
67
+ __metadata("design:type", String)
68
+ ], MailingSettings.prototype, "json_declared_categories", void 0);
65
69
  exports.MailingSettings = MailingSettings = __decorate([
66
70
  (0, interface_database_decorators_1.RegisterTable)(exports.MAILING_SETTINGS_TABLE_NAME, constants_1.TENANT_SCHEMA_NAME)
67
71
  ], MailingSettings);
@@ -1 +1 @@
1
- {"version":3,"file":"settings.table.js","sourceRoot":"","sources":["../../../src/db/tables/settings.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAMmD;AACnD,mEAAyE;AAE5D,QAAA,2BAA2B,GAAG,kBAAkB,CAAC;AAGvD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CAoCzC,CAAA;AApCY,0CAAe;AAElB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACI;AAIZ;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAIhB;IAFP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;gEACwB;AAGjC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACW;AAGnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACY;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDACQ;AAIhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACgB;AAGxB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACc;0BAnCnB,eAAe;IAD3B,IAAA,6CAAa,EAAC,mCAA2B,EAAE,8BAAkB,CAAC;GAClD,eAAe,CAoC3B"}
1
+ {"version":3,"file":"settings.table.js","sourceRoot":"","sources":["../../../src/db/tables/settings.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAMmD;AACnD,mEAAyE;AAE5D,QAAA,2BAA2B,GAAG,kBAAkB,CAAC;AAGvD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CA4CzC,CAAA;AA5CY,0CAAe;AAElB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACI;AAIZ;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAIhB;IAFP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;gEACwB;AAGjC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACW;AAGnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACY;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDACQ;AAIhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACgB;AAGxB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACc;AAQtB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iEAC0B;0BA3C/B,eAAe;IAD3B,IAAA,6CAAa,EAAC,mCAA2B,EAAE,8BAAkB,CAAC;GAClD,eAAe,CA4C3B"}
@@ -26,4 +26,9 @@ export declare class MailingTemplate extends Table {
26
26
  attention: string;
27
27
  needsAttention: boolean;
28
28
  unpublishedAt?: Date;
29
+ declaredHash?: string;
30
+ revision?: string;
31
+ declarationSeedRevision?: string;
32
+ pendingDeclaredHash?: string;
33
+ json_published_version?: string;
29
34
  }
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.MailingTemplate = exports.MAILING_TEMPLATES_TABLE_NAME = void 0;
13
+ const node_crypto_1 = require("node:crypto");
13
14
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
14
15
  const constants_1 = require("@antelopejs/interface-dms/constants");
15
16
  exports.MAILING_TEMPLATES_TABLE_NAME = "mailing_templates";
@@ -119,7 +120,33 @@ __decorate([
119
120
  (0, interface_database_decorators_1.Field)("date"),
120
121
  __metadata("design:type", Date)
121
122
  ], MailingTemplate.prototype, "unpublishedAt", void 0);
123
+ __decorate([
124
+ (0, interface_database_decorators_1.Field)("string"),
125
+ __metadata("design:type", String)
126
+ ], MailingTemplate.prototype, "declaredHash", void 0);
127
+ __decorate([
128
+ (0, interface_database_decorators_1.Field)("string"),
129
+ __metadata("design:type", String)
130
+ ], MailingTemplate.prototype, "revision", void 0);
131
+ __decorate([
132
+ (0, interface_database_decorators_1.Field)("string"),
133
+ __metadata("design:type", String)
134
+ ], MailingTemplate.prototype, "declarationSeedRevision", void 0);
135
+ __decorate([
136
+ (0, interface_database_decorators_1.Field)("string"),
137
+ __metadata("design:type", String)
138
+ ], MailingTemplate.prototype, "pendingDeclaredHash", void 0);
139
+ __decorate([
140
+ (0, interface_database_decorators_1.Field)("string"),
141
+ __metadata("design:type", String)
142
+ ], MailingTemplate.prototype, "json_published_version", void 0);
122
143
  exports.MailingTemplate = MailingTemplate = __decorate([
123
144
  (0, interface_database_decorators_1.RegisterTable)(exports.MAILING_TEMPLATES_TABLE_NAME, constants_1.TENANT_SCHEMA_NAME)
124
145
  ], MailingTemplate);
146
+ class TemplateRevisionModifier extends interface_database_decorators_1.Modifier {
147
+ update(object, field) {
148
+ object[field] = (0, node_crypto_1.randomUUID)();
149
+ }
150
+ }
151
+ (0, interface_database_decorators_1.attachModifier)(MailingTemplate, TemplateRevisionModifier, "revision", {});
125
152
  //# sourceMappingURL=templates.table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.table.js","sourceRoot":"","sources":["../../../src/db/tables/templates.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAOmD;AACnD,mEAAyE;AAG5D,QAAA,4BAA4B,GAAG,mBAAmB,CAAC;AAGzD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CAoHzC,CAAA;AApHY,0CAAe;AAElB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACI;AAIZ;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAKhB;IAHP,IAAA,qCAAK,GAAE;IACP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAIhB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACK;AAGb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACK;AAIb;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACS;AAIjB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;+CACe;AAOvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;qDACa;AAOrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACY;AAIpB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uDACgB;AAGzB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACW,IAAI;uDAAC;AAGtB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACgB;AAOxB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACc;AAItB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACa;AAQrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AAOvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6DACsB;AAI9B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AASvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDACQ;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACU;AAGlB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACQ,IAAI;oDAAC;AAQnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACU;AAKlB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uDACe;AAIxB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACU,IAAI;sDAAC;0BAnHlB,eAAe;IAD3B,IAAA,6CAAa,EAAC,oCAA4B,EAAE,8BAAkB,CAAC;GACnD,eAAe,CAoH3B"}
1
+ {"version":3,"file":"templates.table.js","sourceRoot":"","sources":["../../../src/db/tables/templates.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAyC;AACzC,6FASmD;AACnD,mEAAyE;AAG5D,QAAA,4BAA4B,GAAG,mBAAmB,CAAC;AAGzD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CA8IzC,CAAA;AA9IY,0CAAe;AAElB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACI;AAIZ;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAKhB;IAHP,IAAA,qCAAK,GAAE;IACP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;kDAAC;AAIhB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACK;AAGb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6CACK;AAIb;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACS;AAIjB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;+CACe;AAOvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;qDACa;AAOrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACY;AAIpB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uDACgB;AAGzB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACW,IAAI;uDAAC;AAGtB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACgB;AAOxB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACc;AAItB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yDACiB;AAGzB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACa;AAQrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AAOvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;6DACsB;AAI9B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uDACe;AASvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDACQ;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACU;AAGlB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACQ,IAAI;oDAAC;AAQnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACU;AAKlB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uDACe;AAIxB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACU,IAAI;sDAAC;AAQrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;qDACc;AAItB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACU;AAIlB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gEACyB;AAGjC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4DACqB;AAO7B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;+DACwB;0BA7I7B,eAAe;IAD3B,IAAA,6CAAa,EAAC,oCAA4B,EAAE,8BAAkB,CAAC;GACnD,eAAe,CA8I3B;AAGD,MAAM,wBAAyB,SAAQ,wCAAQ;IAC7C,MAAM,CAAC,MAA+B,EAAE,KAAa;QACnD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC/B,CAAC;CACF;AAED,IAAA,8CAAc,EAAC,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ReadyGate {
2
+ open(): void;
3
+ after<Args extends unknown[], Result>(task: (...args: Args) => Promise<Result>): (...args: Args) => Promise<Result>;
4
+ }
5
+ export declare function createReadyGate(): ReadyGate;
6
+ export declare function registerDatabaseReady(): void;
7
+ export declare const afterDatabaseReady: ReadyGate["after"];
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.afterDatabaseReady = void 0;
4
+ exports.createReadyGate = createReadyGate;
5
+ exports.registerDatabaseReady = registerDatabaseReady;
6
+ const hooks_1 = require("@antelopejs/interface-dms/hooks");
7
+ function createReadyGate() {
8
+ let open = () => undefined;
9
+ const opened = new Promise((resolve) => {
10
+ open = resolve;
11
+ });
12
+ return {
13
+ open: () => open(),
14
+ after: (task) => async (...args) => {
15
+ await opened;
16
+ return task(...args);
17
+ },
18
+ };
19
+ }
20
+ const databaseGate = createReadyGate();
21
+ function registerDatabaseReady() {
22
+ (0, hooks_1.RegisterHook)(hooks_1.Hook.DATABASE_INITIALIZED, () => databaseGate.open());
23
+ }
24
+ const afterDatabaseReady = (task) => databaseGate.after(task);
25
+ exports.afterDatabaseReady = afterDatabaseReady;
26
+ //# sourceMappingURL=database-ready.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-ready.js","sourceRoot":"","sources":["../../src/hooks/database-ready.ts"],"names":[],"mappings":";;;AAWA,0CAcC;AAeD,sDAEC;AA1CD,2DAAqE;AAWrE,SAAgB,eAAe;IAC7B,IAAI,IAAI,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,GAAG,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAClB,KAAK,EACH,CAAC,IAAI,EAAE,EAAE,CACT,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YAChB,MAAM,MAAM,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,CAAC;KACJ,CAAC;AACJ,CAAC;AAOD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AAQvC,SAAgB,qBAAqB;IACnC,IAAA,oBAAY,EAAC,YAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAGM,MAAM,kBAAkB,GAAuB,CAAC,IAAI,EAAE,EAAE,CAC7D,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AADd,QAAA,kBAAkB,sBACJ"}
@@ -1 +1,2 @@
1
+ export * from "./database-ready";
1
2
  export * from "./tenant-export";
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./database-ready"), exports);
17
18
  __exportStar(require("./tenant-export"), exports);
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,kDAAgC"}
@@ -1,2 +1,5 @@
1
1
  export { recordEmailEvent as RecordEmailEvent } from "../../services/events";
2
2
  export { sendUnlessSuppressed as SendTemplate } from "../../services/checked-send";
3
+ export declare const DeclareTemplate: (input: import("@antelopejs/interface-dms-mailing").TemplateDeclaration) => Promise<import("@antelopejs/interface-dms-mailing").DeclareTemplateResult>;
4
+ export declare const DeclareTemplateCategory: (input: import("@antelopejs/interface-dms-mailing").TemplateCategoryDeclaration) => Promise<import("@antelopejs/interface-dms-mailing").DeclareTemplateCategoryResult>;
5
+ export declare const ImportSends: (input: import("@antelopejs/interface-dms-mailing").SendImport) => Promise<import("@antelopejs/interface-dms-mailing").ImportSendsResult>;
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SendTemplate = exports.RecordEmailEvent = void 0;
3
+ exports.ImportSends = exports.DeclareTemplateCategory = exports.DeclareTemplate = exports.SendTemplate = exports.RecordEmailEvent = void 0;
4
+ const database_ready_1 = require("../../hooks/database-ready");
5
+ const declarations_1 = require("../../services/declarations");
6
+ const send_import_1 = require("../../services/send-import");
4
7
  var events_1 = require("../../services/events");
5
8
  Object.defineProperty(exports, "RecordEmailEvent", { enumerable: true, get: function () { return events_1.recordEmailEvent; } });
6
9
  var checked_send_1 = require("../../services/checked-send");
7
10
  Object.defineProperty(exports, "SendTemplate", { enumerable: true, get: function () { return checked_send_1.sendUnlessSuppressed; } });
11
+ exports.DeclareTemplate = (0, database_ready_1.afterDatabaseReady)(declarations_1.declareTemplate);
12
+ exports.DeclareTemplateCategory = (0, database_ready_1.afterDatabaseReady)(declarations_1.declareTemplateCategory);
13
+ exports.ImportSends = (0, database_ready_1.afterDatabaseReady)(send_import_1.importSends);
8
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/dms-mailing/index.ts"],"names":[],"mappings":";;;AAAA,gDAA6E;AAApE,0GAAA,gBAAgB,OAAoB;AAC7C,4DAAmF;AAA1E,4GAAA,oBAAoB,OAAgB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/dms-mailing/index.ts"],"names":[],"mappings":";;;AAAA,+DAAgE;AAChE,8DAGqC;AACrC,4DAAyD;AAEzD,gDAA6E;AAApE,0GAAA,gBAAgB,OAAoB;AAC7C,4DAAmF;AAA1E,4GAAA,oBAAoB,OAAgB;AAMhC,QAAA,eAAe,GAAG,IAAA,mCAAkB,EAAC,8BAAe,CAAC,CAAC;AACtD,QAAA,uBAAuB,GAAG,IAAA,mCAAkB,EACvD,sCAAuB,CACxB,CAAC;AACW,QAAA,WAAW,GAAG,IAAA,mCAAkB,EAAC,yBAAW,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -68,6 +68,7 @@ const PROVIDER_WEBHOOK_ENDPOINT = {
68
68
  };
69
69
  let scheduledJobs = [];
70
70
  async function construct(config = {}) {
71
+ (0, hooks_1.registerDatabaseReady)();
71
72
  (0, config_1.setConfig)(config);
72
73
  (0, interface_core_1.ImplementInterface)(await Promise.resolve().then(() => __importStar(require("@antelopejs/interface-dms-mailing"))), await Promise.resolve().then(() => __importStar(require("./implementations/dms-mailing"))));
73
74
  (0, automation_1.registerAutomationNodes)();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,8BAiBC;AAED,0BAGC;AAED,sBAEC;AAED,oBAIC;AA7ED,yBAAuB;AACvB,gBAAc;AACd,0DAA6B;AAC7B,+DAAgE;AAChE,yDAAmE;AACnE,6CAGsB;AACtB,qCAA4D;AAC5D,2CAAkE;AAClE,mCAMiB;AACjB,mCAAuE;AACvE,yCAAoD;AACpD,8DAAkE;AAElE,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,kDAAgC;AAChC,2CAAyB;AAGzB,MAAM,SAAS,GAAG,CAAC,qBAAa,EAAE,qBAAa,CAAC,CAAC;AAQjD,MAAM,yBAAyB,GAAG;IAChC,IAAI,EAAE,GAAG,yBAAa,aAAa;IACnC,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,sCAAqB,CAAC;CACjC,CAAC;AAEF,IAAI,aAAa,GAAmB,EAAE,CAAC;AAEhC,KAAK,UAAU,SAAS,CAAC,SAA2B,EAAE;IAC3D,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;IAClB,IAAA,mCAAkB,EAChB,wDAAa,mCAAmC,GAAC,EACjD,wDAAa,+BAA+B,GAAC,CAC9C,CAAC;IACF,IAAA,oCAAuB,GAAE,CAAC;IAC1B,IAAA,4BAAoB,GAAE,CAAC;IACvB,IAAA,iCAAsB,GAAE,CAAC;IACzB,MAAM,IAAA,wBAAiB,EAAC;QACtB,IAAI,EAAE,gCAAoB;QAC1B,UAAU,EAAE,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACnD,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;QACvC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3B,QAAQ,EAAE,CAAC;QACX,eAAe,EAAE,CAAC,yBAAyB,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,OAAO;IACrB,IAAA,sCAAyB,GAAE,CAAC;IAC5B,IAAA,8BAAsB,GAAE,CAAC;AAC3B,CAAC;AAED,SAAgB,KAAK;IACnB,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,aAAa,GAAG,EAAE,CAAC;IACnB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAO,CAAC,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,8BAkBC;AAED,0BAGC;AAED,sBAEC;AAED,oBAIC;AAlFD,yBAAuB;AACvB,gBAAc;AACd,0DAA6B;AAC7B,+DAAgE;AAChE,yDAAmE;AACnE,6CAGsB;AACtB,qCAA4D;AAC5D,2CAAkE;AAClE,mCAMiB;AACjB,mCAIiB;AACjB,yCAAoD;AACpD,8DAAkE;AAElE,yCAAuB;AACvB,+CAA6B;AAC7B,0CAAwB;AACxB,kDAAgC;AAChC,2CAAyB;AAGzB,MAAM,SAAS,GAAG,CAAC,qBAAa,EAAE,qBAAa,CAAC,CAAC;AAQjD,MAAM,yBAAyB,GAAG;IAChC,IAAI,EAAE,GAAG,yBAAa,aAAa;IACnC,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,sCAAqB,CAAC;CACjC,CAAC;AAEF,IAAI,aAAa,GAAmB,EAAE,CAAC;AAEhC,KAAK,UAAU,SAAS,CAAC,SAA2B,EAAE;IAC3D,IAAA,6BAAqB,GAAE,CAAC;IACxB,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;IAClB,IAAA,mCAAkB,EAChB,wDAAa,mCAAmC,GAAC,EACjD,wDAAa,+BAA+B,GAAC,CAC9C,CAAC;IACF,IAAA,oCAAuB,GAAE,CAAC;IAC1B,IAAA,4BAAoB,GAAE,CAAC;IACvB,IAAA,iCAAsB,GAAE,CAAC;IACzB,MAAM,IAAA,wBAAiB,EAAC;QACtB,IAAI,EAAE,gCAAoB;QAC1B,UAAU,EAAE,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACnD,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;QACvC,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3B,QAAQ,EAAE,CAAC;QACX,eAAe,EAAE,CAAC,yBAAyB,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,OAAO;IACrB,IAAA,sCAAyB,GAAE,CAAC;IAC5B,IAAA,8BAAsB,GAAE,CAAC;AAC3B,CAAC;AAED,SAAgB,KAAK;IACnB,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,IAAI;IACxB,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,aAAa,GAAG,EAAE,CAAC;IACnB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAO,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ZodType, ZodTypeDef } from "zod";
2
+ export declare class DeclarationError extends Error {
3
+ readonly code: string;
4
+ constructor(code: string, message: string);
5
+ }
6
+ export declare function parseDeclared<Output, Input>(schema: ZodType<Output, ZodTypeDef, Input>, input: unknown, code: string, subject: string): Output;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeclarationError = void 0;
4
+ exports.parseDeclared = parseDeclared;
5
+ class DeclarationError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.code = code;
10
+ }
11
+ }
12
+ exports.DeclarationError = DeclarationError;
13
+ const ISSUE_SEPARATOR = "; ";
14
+ const ROOT_PATH = "(root)";
15
+ function describeIssues(error) {
16
+ return error.issues
17
+ .map((issue) => `${issue.path.join(".") || ROOT_PATH}: ${issue.message}`)
18
+ .join(ISSUE_SEPARATOR);
19
+ }
20
+ function parseDeclared(schema, input, code, subject) {
21
+ const parsed = schema.safeParse(input);
22
+ if (parsed.success)
23
+ return parsed.data;
24
+ throw new DeclarationError(code, `Invalid ${subject}: ${describeIssues(parsed.error)}`);
25
+ }
26
+ //# sourceMappingURL=declaration-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration-error.js","sourceRoot":"","sources":["../../src/services/declaration-error.ts"],"names":[],"mappings":";;;AA0BA,sCAYC;AA/BD,MAAa,gBAAiB,SAAQ,KAAK;IAEvB;IADlB,YACkB,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;IAI9B,CAAC;CACF;AAPD,4CAOC;AAED,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE3B,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;SACxE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3B,CAAC;AAGD,SAAgB,aAAa,CAC3B,MAA0C,EAC1C,KAAc,EACd,IAAY,EACZ,OAAe;IAEf,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACvC,MAAM,IAAI,gBAAgB,CACxB,IAAI,EACJ,WAAW,OAAO,KAAK,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DeclareTemplateCategoryResult, DeclareTemplateResult, TemplateCategoryDeclaration, TemplateDeclaration } from "@antelopejs/interface-dms-mailing";
2
+ export declare function declareTemplate(input: TemplateDeclaration): Promise<DeclareTemplateResult>;
3
+ export declare function declareTemplateCategory(input: TemplateCategoryDeclaration): Promise<DeclareTemplateCategoryResult>;