@proca/cli 3.3.1 → 3.8.3

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 (145) hide show
  1. package/README.md +1992 -60
  2. package/package.json +88 -71
  3. package/proca-cli +8 -0
  4. package/src/commands/action/add.mjs +192 -0
  5. package/src/commands/action/confirm.mjs +93 -0
  6. package/src/commands/action/count.mjs +61 -0
  7. package/src/commands/action/list.mjs +204 -0
  8. package/src/commands/action/replay.mjs +56 -0
  9. package/src/commands/action/requeue.mjs +156 -0
  10. package/src/commands/campaign/add.mjs +113 -0
  11. package/src/commands/campaign/copy.mjs +91 -0
  12. package/src/commands/campaign/delete.mjs +41 -0
  13. package/src/commands/campaign/get.mjs +132 -0
  14. package/src/commands/campaign/list.mjs +161 -0
  15. package/src/commands/campaign/mtt.mjs +131 -0
  16. package/src/commands/campaign/queries.graphql +19 -0
  17. package/src/commands/campaign/status.mjs +63 -0
  18. package/src/commands/campaign/widget/archive.mjs +124 -0
  19. package/src/commands/campaign/widget/copy.mjs +175 -0
  20. package/src/commands/campaign/widget/get.mjs +19 -0
  21. package/src/commands/campaign/widget/index.mjs +17 -0
  22. package/src/commands/campaign/widget/rebuild.mjs +50 -0
  23. package/src/commands/config/add.mjs +97 -0
  24. package/src/commands/config/folder.mjs +42 -0
  25. package/src/commands/config/server.mjs +33 -0
  26. package/src/commands/config/set.mjs +103 -0
  27. package/src/commands/config/user.mjs +79 -0
  28. package/src/commands/contact/count.mjs +41 -0
  29. package/src/commands/contact/list.mjs +207 -0
  30. package/src/commands/org/add.mjs +75 -0
  31. package/src/commands/org/crm.mjs +88 -0
  32. package/src/commands/org/delete.mjs +48 -0
  33. package/src/commands/org/email.mjs +111 -0
  34. package/src/commands/org/get.mjs +152 -0
  35. package/src/commands/service/add.mjs +78 -0
  36. package/src/commands/service/list.mjs +24 -0
  37. package/src/commands/target/add.mjs +94 -0
  38. package/src/commands/template/add.mjs +97 -0
  39. package/src/commands/template/list.mjs +61 -0
  40. package/src/commands/user/get.mjs +91 -0
  41. package/src/commands/user/invite.mjs +56 -0
  42. package/src/commands/user/join.mjs +81 -0
  43. package/src/commands/user/leave.mjs +57 -0
  44. package/src/commands/user/list.mjs +80 -0
  45. package/src/commands/user/reset.mjs +83 -0
  46. package/src/commands/widget/add.mjs +116 -0
  47. package/src/commands/widget/delete.mjs +45 -0
  48. package/src/commands/widget/get.mjs +60 -0
  49. package/src/commands/widget/list.mjs +135 -0
  50. package/src/commands/widget/rebuild.mjs +64 -0
  51. package/src/commands/widget/update.mjs +174 -0
  52. package/src/config.mjs +49 -0
  53. package/src/generated/schema.json +10677 -0
  54. package/src/hooks/help.mjs +14 -0
  55. package/src/hooks/init.mjs +41 -0
  56. package/src/index.mjs +1 -0
  57. package/src/procaCommand.mjs +316 -0
  58. package/src/queries/campaign.mjs +35 -0
  59. package/src/queries/widget.mjs +25 -0
  60. package/src/urql.mjs +60 -0
  61. package/src/util/twitter.mjs +23 -0
  62. package/theme.json +29 -0
  63. package/LICENSE +0 -661
  64. package/bin/proca-cli +0 -4
  65. package/dist/a.d.ts +0 -1
  66. package/dist/a.js +0 -21
  67. package/dist/a.js.map +0 -1
  68. package/dist/browser.d.ts +0 -1
  69. package/dist/browser.js +0 -24
  70. package/dist/browser.js.map +0 -1
  71. package/dist/campaign.d.ts +0 -156
  72. package/dist/campaign.js +0 -188
  73. package/dist/campaign.js.map +0 -1
  74. package/dist/cli.d.ts +0 -40
  75. package/dist/cli.js +0 -411
  76. package/dist/cli.js.map +0 -1
  77. package/dist/client.d.ts +0 -2
  78. package/dist/client.js +0 -18
  79. package/dist/client.js.map +0 -1
  80. package/dist/config.d.ts +0 -35
  81. package/dist/config.js +0 -71
  82. package/dist/config.js.map +0 -1
  83. package/dist/crypto.d.ts +0 -40
  84. package/dist/crypto.js +0 -53
  85. package/dist/crypto.js.map +0 -1
  86. package/dist/decrypt.d.ts +0 -7
  87. package/dist/decrypt.js +0 -29
  88. package/dist/decrypt.js.map +0 -1
  89. package/dist/export.d.ts +0 -15
  90. package/dist/export.js +0 -141
  91. package/dist/export.js.map +0 -1
  92. package/dist/format.d.ts +0 -37
  93. package/dist/format.js +0 -200
  94. package/dist/format.js.map +0 -1
  95. package/dist/index.d.ts +0 -8
  96. package/dist/index.js +0 -35
  97. package/dist/index.js.map +0 -1
  98. package/dist/keys.d.ts +0 -4
  99. package/dist/keys.js +0 -38
  100. package/dist/keys.js.map +0 -1
  101. package/dist/org.d.ts +0 -11
  102. package/dist/org.js +0 -93
  103. package/dist/org.js.map +0 -1
  104. package/dist/proca.d.ts +0 -2066
  105. package/dist/proca.js +0 -396
  106. package/dist/proca.js.map +0 -1
  107. package/dist/queue.d.ts +0 -8
  108. package/dist/queue.js +0 -126
  109. package/dist/queue.js.map +0 -1
  110. package/dist/queueMessage.d.ts +0 -102
  111. package/dist/queueMessage.js +0 -109
  112. package/dist/queueMessage.js.map +0 -1
  113. package/dist/scalarLocations.d.ts +0 -4
  114. package/dist/scalarLocations.js +0 -236
  115. package/dist/scalarLocations.js.map +0 -1
  116. package/dist/service/actionnetwork.d.ts +0 -10
  117. package/dist/service/actionnetwork.js +0 -302
  118. package/dist/service/actionnetwork.js.map +0 -1
  119. package/dist/service/distance.d.ts +0 -3
  120. package/dist/service/distance.js +0 -92
  121. package/dist/service/distance.js.map +0 -1
  122. package/dist/service/echo.d.ts +0 -4
  123. package/dist/service/echo.js +0 -19
  124. package/dist/service/echo.js.map +0 -1
  125. package/dist/service/email.d.ts +0 -14
  126. package/dist/service/email.js +0 -67
  127. package/dist/service/email.js.map +0 -1
  128. package/dist/service/identity.d.ts +0 -58
  129. package/dist/service/identity.js +0 -190
  130. package/dist/service/identity.js.map +0 -1
  131. package/dist/service/index.d.ts +0 -14
  132. package/dist/service/index.js +0 -61
  133. package/dist/service/index.js.map +0 -1
  134. package/dist/setup.d.ts +0 -2
  135. package/dist/setup.js +0 -287
  136. package/dist/setup.js.map +0 -1
  137. package/dist/test.d.ts +0 -1
  138. package/dist/test.js +0 -33
  139. package/dist/test.js.map +0 -1
  140. package/dist/util.d.ts +0 -5
  141. package/dist/util.js +0 -30
  142. package/dist/util.js.map +0 -1
  143. package/dist/watch.d.ts +0 -9
  144. package/dist/watch.js +0 -76
  145. package/dist/watch.js.map +0 -1
@@ -1,4 +0,0 @@
1
- import { ActionMessage } from '../queueMessage';
2
- import { CliConfig } from '../config';
3
- import { ServiceOpts } from '.';
4
- export declare function syncAction(action: ActionMessage, _1: ServiceOpts, _2: CliConfig): Promise<void>;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.syncAction = void 0;
13
- function syncAction(action, _1, _2) {
14
- return __awaiter(this, void 0, void 0, function* () {
15
- console.log(JSON.stringify(action, null, 2));
16
- });
17
- }
18
- exports.syncAction = syncAction;
19
- //# sourceMappingURL=echo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/service/echo.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,SAAsB,UAAU,CAAC,MAAsB,EAAE,EAAgB,EAAE,EAAc;;QACvF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC;CAAA;AAFD,gCAEC"}
@@ -1,14 +0,0 @@
1
- import mailjet from "node-mailjet";
2
- import { ActionMessageV2 } from '../queueMessage';
3
- import { CliConfig } from '../config';
4
- import { ServiceOpts } from '.';
5
- export declare function syncAction(action: ActionMessageV2, _1: ServiceOpts, _2: CliConfig): Promise<mailjet.Email.Response>;
6
- export declare function connect(): mailjet.Email.Client;
7
- export declare function varsFromAction(action: ActionMessageV2): {
8
- first_name: string;
9
- email: string;
10
- ref: any;
11
- campaign_name: string;
12
- campaign_title: string;
13
- action_page_name: string;
14
- };
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.varsFromAction = exports.connect = exports.syncAction = void 0;
16
- const node_mailjet_1 = __importDefault(require("node-mailjet"));
17
- function syncAction(action, _1, _2) {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- const conn = connect();
20
- const tmplId = process.env['MAILJET_TEMPLATE'] || action.actionPage.thankYouTemplateRef;
21
- if (!tmplId)
22
- throw new Error('No MAILJET_TEMPLATE set not thankYouTemplateRef on action page');
23
- const vars = varsFromAction(action);
24
- // console.log(vars)
25
- let res = yield conn.post("send").request({
26
- FromEmail: 'noreply@proca.app',
27
- FromName: 'Is this correct',
28
- 'Mj-TemplateID': tmplId,
29
- 'Mj-TemplateLanguage': true,
30
- Recipients: [{ 'Email': 'marcin@cahoots.pl', 'Vars': vars }]
31
- });
32
- return res;
33
- });
34
- }
35
- exports.syncAction = syncAction;
36
- function connect() {
37
- const mjKey = process.env['MAILJET_KEY'];
38
- const mjSec = process.env['MAILJET_SECRET'];
39
- if (!mjKey || !mjSec) {
40
- throw new Error('No MAILJET_KEY or MAILJET_SECRET set');
41
- }
42
- const conn = node_mailjet_1.default.connect(mjKey, mjSec);
43
- return conn;
44
- }
45
- exports.connect = connect;
46
- function varsFromAction(action) {
47
- let vars = {
48
- first_name: action.contact ? action.contact.firstName : null,
49
- email: action.contact ? action.contact.email : null,
50
- ref: action.contact ? action.contact.ref : null,
51
- campaign_name: action.campaign ? action.campaign.name : null,
52
- campaign_title: action.campaign ? action.campaign.title : null,
53
- action_page_name: action.actionPage ? action.actionPage.name : null,
54
- };
55
- if (action.tracking) {
56
- vars = Object.assign(vars, {
57
- utm_source: action.tracking.source,
58
- utm_medium: action.tracking.medium,
59
- utm_campaign: action.tracking.campaign,
60
- utm_content: action.tracking.content
61
- });
62
- }
63
- vars = Object.assign(vars, action.action.customFields);
64
- return vars;
65
- }
66
- exports.varsFromAction = varsFromAction;
67
- //# sourceMappingURL=email.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/service/email.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,gEAAkC;AAKlC,SAAsB,UAAU,CAAC,MAAwB,EAAE,EAAe,EAAE,EAAc;;QACxF,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QAEtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAA;QACvF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;QAE9F,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,oBAAoB;QAEpB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACxC,SAAS,EAAE,mBAAmB;YAC9B,QAAQ,EAAE,iBAAiB;YAC7B,eAAe,EAAE,MAAM;YACvB,qBAAqB,EAAE,IAAI;YACzB,UAAU,EAAE,CAAC,EAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;SAC3D,CAAC,CAAA;QAEF,OAAO,GAAG,CAAA;IACZ,CAAC;CAAA;AAlBD,gCAkBC;AAED,SAAgB,OAAO;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC3C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;KACxD;IACD,MAAM,IAAI,GAAG,sBAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAA;AACb,CAAC;AARD,0BAQC;AAED,SAAgB,cAAc,CAAC,MAAwB;IACrD,IAAI,IAAI,GAAG;QACT,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QAC5D,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACnD,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QAC/C,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC5D,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9D,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;KACpE,CAAA;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACzB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAClC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAClC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YACtC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;SACrC,CAAC,CAAA;KACH;IAED,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAEtD,OAAO,IAAI,CAAA;AACb,CAAC;AAtBD,wCAsBC"}
@@ -1,58 +0,0 @@
1
- import { ActionMessageV2 } from '../queueMessage';
2
- import { CliConfig } from '../config';
3
- import { ServiceOpts } from '.';
4
- declare type ConsentConfig = {
5
- [key: string]: Consent;
6
- };
7
- declare type Consent = {
8
- level: "communication" | "double_opt_in" | "none_given" | "implicit" | "explicit_not_opt_out" | "explicit_opt_in";
9
- locale?: string;
10
- };
11
- export declare function syncAction(action: ActionMessageV2, argv: ServiceOpts, config: CliConfig): Promise<string | false | {
12
- [key: string]: any;
13
- [key: number]: any;
14
- }>;
15
- declare type DataApiCustomField = {
16
- name: string;
17
- value: string;
18
- };
19
- declare type DataApiSource = {
20
- source: string;
21
- medium: string;
22
- campaign: string;
23
- };
24
- export declare function toDataApi(action: ActionMessageV2, consent_map: ConsentConfig, action_fields: string[], contact_fields: string[]): {
25
- api_token: string;
26
- metadata: Record<string, string>;
27
- source: DataApiSource;
28
- action_type: string;
29
- action_technical_type: string;
30
- create_dt: string;
31
- action_name: string;
32
- action_public_name: string;
33
- language: string;
34
- external_id: number;
35
- consents: {
36
- public_id: string;
37
- consent_level: string;
38
- }[];
39
- cons_hash: {
40
- firstname: string;
41
- lastname: any;
42
- emails: {
43
- email: string;
44
- }[];
45
- custom_fields: DataApiCustomField[];
46
- addresses: {
47
- postcode: any;
48
- country: any;
49
- town: any;
50
- state: any;
51
- }[];
52
- };
53
- };
54
- export declare function toConsent(action: ActionMessageV2, consent_id: string, consent: Consent): {
55
- public_id: string;
56
- consent_level: string;
57
- };
58
- export {};
@@ -1,190 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.toConsent = exports.toDataApi = exports.syncAction = void 0;
16
- const bent_1 = __importDefault(require("bent"));
17
- const debug_1 = __importDefault(require("debug"));
18
- const util_1 = require("../util");
19
- /*
20
- * How to configure Identity consent.
21
- *
22
- * Consents in speakout/identity have levels:
23
- * - none_given # complex way to say: opt out
24
- * - implicit # complex way to say: no checkbox, opt in assumed
25
- * - explicit_not_opt_out # complex way to say: prechecked opt in
26
- * - explicit_opt_in # complex way to say: checked opt in
27
- *
28
- * In Proca we have:
29
- * - opt_in: false/true
30
- * - email_status: null/double_opt_in
31
- *
32
- * Identity might require a few different consents (each for some different goal)
33
- * For identity we want to configure mapping
34
- * {
35
- * data_processing_2022: { level: 'explicit_opt_in' }
36
- * newsletter_v2: { level: 'communication' } # will depend on Proca optIn ? 'explicit_opt_in' : 'none_given',
37
- * newsletter_v3: { level: 'double_opt_in' } # will depend on Proca double_opt_in ? 'explicit_opt_in' : 'none_given'
38
- * }
39
- *
40
- */
41
- const log = debug_1.default('proca:service:identity');
42
- function syncAction(action, argv, config) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const url = argv.service_url || config.identity_url;
45
- const api_token = config.identity_api_token;
46
- const comm_consent = config.identity_consent;
47
- const only_opt_in = 'IDENTITY_ONLY_OPT_IN' in process.env;
48
- const only_double_opt_in = 'IDENTITY_ONLY_DOUBLE_OPT_IN' in process.env;
49
- if (!url)
50
- throw new Error("identity url not set");
51
- if (!api_token)
52
- throw new Error("identity api token not set");
53
- // XXX the only_* mode indents to drop data where
54
- if (only_double_opt_in && action.privacy.emailStatus !== 'double_opt_in') {
55
- return false;
56
- }
57
- if (only_opt_in && action.privacy.optIn === false) {
58
- return false;
59
- }
60
- let consent = null;
61
- if (comm_consent === null || comm_consent === undefined) {
62
- log('ProcaCli argv.identity_consent is not set');
63
- throw "Please set IDENTITY_CONSENT";
64
- }
65
- if (comm_consent[0] == "{") {
66
- log('ProcaCli argv.identity_consent has JSON argv');
67
- // this is a hash with consent map
68
- consent = JSON.parse(comm_consent);
69
- }
70
- else {
71
- log(`ProcaCli argv.identity_consent uses ${comm_consent} as commmunication consent`);
72
- consent = {};
73
- consent[comm_consent] = { level: 'communication' };
74
- }
75
- const payload = toDataApi(action, consent, config.identity_action_fields, config.identity_contact_fields);
76
- log(`Identity DATA API payload (without api_token)`, payload);
77
- payload.api_token = api_token;
78
- const post = bent_1.default(url, 'POST', 200);
79
- const r = yield post('/api/actions', util_1.removeBlank(payload));
80
- return r;
81
- });
82
- }
83
- exports.syncAction = syncAction;
84
- /* identity uses these keys to find Action
85
- * - external_id
86
- * - action_technical_type
87
- * - language
88
- */
89
- function toDataApi(action, consent_map, action_fields, contact_fields) {
90
- const ah = {
91
- api_token: null,
92
- metadata: {},
93
- source: null,
94
- action_type: action.action.actionType,
95
- action_technical_type: `proca:${action.action.actionType}`,
96
- create_dt: action.action.createdAt,
97
- action_name: action.campaign.name,
98
- action_public_name: action.campaign.name,
99
- language: action.actionPage.locale,
100
- external_id: action.actionPageId,
101
- consents: Object.entries(consent_map).map(([pub_id, con_conf]) => toConsent(action, pub_id, con_conf)).filter(x => x),
102
- cons_hash: {
103
- firstname: action.contact.firstName,
104
- lastname: action.contact.lastName,
105
- emails: [{ email: action.contact.email }],
106
- custom_fields: [],
107
- addresses: [{
108
- postcode: action.contact.postcode,
109
- country: action.contact.country,
110
- town: action.contact.locality,
111
- state: action.contact.region
112
- }]
113
- }
114
- };
115
- const custom_fields = [];
116
- const metadata = {};
117
- custom_fields.push({ name: "contactRef", value: action.contact.ref });
118
- for (const [key, value] of Object.entries(action.action.customFields)) {
119
- if ((action_fields || []).includes(key.toLowerCase())) {
120
- metadata[key] = `${value}`;
121
- }
122
- if ((contact_fields || []).includes(key.toLowerCase())) {
123
- custom_fields.push({ name: key, value: `${value}` });
124
- }
125
- }
126
- if (Object.keys(metadata).length > 0)
127
- ah.metadata = metadata;
128
- if (custom_fields.length > 0)
129
- ah.cons_hash.custom_fields = custom_fields;
130
- if (action.tracking) {
131
- ah.source = {
132
- campaign: action.tracking.campaign,
133
- source: action.tracking.source,
134
- medium: action.tracking.medium,
135
- };
136
- }
137
- return ah;
138
- }
139
- exports.toDataApi = toDataApi;
140
- function toConsent(action, consent_id, consent) {
141
- const { level, locale } = consent;
142
- // Skip if this is not this locale
143
- if (locale && locale.toLowerCase() != action.actionPage.locale.toLowerCase())
144
- return null;
145
- // If it's a hardcoded consent, send it
146
- if (level == 'implicit' || level == 'explicit_opt_in')
147
- return {
148
- public_id: consent_id,
149
- consent_level: level
150
- };
151
- // Handle opt in to communication
152
- if (level === 'communication') {
153
- if (action.privacy) {
154
- if (action.privacy.optIn === true) {
155
- return {
156
- public_id: consent_id,
157
- consent_level: 'explicit_opt_in'
158
- };
159
- }
160
- else if (action.privacy.optIn === false) {
161
- return {
162
- public_id: consent_id,
163
- consent_level: 'none_given'
164
- };
165
- }
166
- // watch out, optIn key can be missing if this is non-consent action
167
- }
168
- return {
169
- public_id: consent_id,
170
- consent_level: 'no_change'
171
- };
172
- }
173
- if (level === 'double_opt_in') {
174
- if (action.privacy.emailStatus === 'double_opt_in') {
175
- return {
176
- public_id: consent_id,
177
- consent_level: 'explicit_opt_in'
178
- };
179
- }
180
- else {
181
- return {
182
- public_id: consent_id,
183
- consent_level: 'no_change'
184
- };
185
- }
186
- }
187
- throw `unsuported argv for consent ${consent_id}: ${level} for locale ${locale}`;
188
- }
189
- exports.toConsent = toConsent;
190
- //# sourceMappingURL=identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/service/identity.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { CliConfig } from '../config';
2
- import { ActionMessage } from '../queueMessage';
3
- export declare type SyncFunction = (action: ActionMessage, argv: ServiceOpts, config: CliConfig) => any;
4
- export interface ServiceOpts {
5
- service?: string;
6
- service_url?: string;
7
- queueName?: string;
8
- queuePrefetch?: number;
9
- backoff?: boolean;
10
- filePath?: string;
11
- sentry?: boolean;
12
- }
13
- export declare function getService(argv: ServiceOpts): any;
14
- export declare function addBackoff(fun: SyncFunction): (...args: any[]) => Promise<any>;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.addBackoff = exports.getService = void 0;
16
- const backoff_1 = __importDefault(require("backoff"));
17
- function getService(argv) {
18
- if (typeof argv.service === 'string') {
19
- let service = require(`./${argv.service}`);
20
- if (argv.backoff) {
21
- service.syncAction = addBackoff(service.syncAction);
22
- }
23
- return service;
24
- }
25
- if (typeof argv.service === 'object') {
26
- return argv.service;
27
- }
28
- throw "argv.service should be a name of module in src/service or function";
29
- }
30
- exports.getService = getService;
31
- function addBackoff(fun) {
32
- function newFun(...args) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- return new Promise((ok, fail) => {
35
- const bo = backoff_1.default.exponential({
36
- randomisationFactor: 0,
37
- initialDelay: 100,
38
- maxDelay: 30000
39
- });
40
- bo.failAfter(10);
41
- bo.on('ready', function (number, delay) {
42
- try {
43
- fun.apply(null, args).then((r) => ok(r)).catch((err) => {
44
- console.log(`😵 rejected: ${err}`);
45
- bo.backoff();
46
- });
47
- }
48
- catch (error) {
49
- console.log(`😵 exception: ${error}`);
50
- bo.backoff();
51
- }
52
- });
53
- bo.on('fail', () => fail('failed too many times'));
54
- bo.backoff();
55
- });
56
- });
57
- }
58
- return newFun;
59
- }
60
- exports.addBackoff = addBackoff;
61
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sDAA6B;AAiB7B,SAAgB,UAAU,CAAC,IAAkB;IAC3C,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;QACpC,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SACrD;QACD,OAAO,OAAO,CAAA;KACf;IAED,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;QACpC,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;IAED,MAAM,oEAAoE,CAAA;AAC5E,CAAC;AAfD,gCAeC;AAGD,SAAgB,UAAU,CAAC,GAAkB;IAC3C,SAAe,MAAM,CAAC,GAAG,IAAY;;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC9B,MAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC;oBAC7B,mBAAmB,EAAE,CAAC;oBACtB,YAAY,EAAE,GAAG;oBACjB,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAChB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,MAAM,EAAE,KAAK;oBACnC,IAAI;wBACF,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;4BACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;4BAClC,EAAE,CAAC,OAAO,EAAE,CAAA;wBACd,CAAC,CAAC,CAAA;qBACH;oBAAC,OAAM,KAAW,EAAE;wBACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAA;wBACrC,EAAE,CAAC,OAAO,EAAE,CAAA;qBACb;gBACH,CAAC,CAAC,CAAA;gBAEF,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAA;gBAElD,EAAE,CAAC,OAAO,EAAE,CAAA;YACd,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AA3BD,gCA2BC"}
package/dist/setup.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { CliConfig } from './config';
2
- export declare function setup(_opts: any, config: CliConfig): Promise<void>;