@trycourier/courier 3.2.1 → 3.3.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.
- package/CHANGELOG.md +6 -1
- package/README.md +39 -0
- package/lib/bulk/index.d.ts +3 -0
- package/lib/bulk/index.js +154 -0
- package/lib/bulk/types.d.ts +76 -0
- package/lib/bulk/types.js +2 -0
- package/lib/client.js +2 -0
- package/lib/types.d.ts +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased][unreleased]
|
|
7
7
|
|
|
8
|
+
## [v3.3.0] - 2022-01-25
|
|
9
|
+
|
|
10
|
+
- adds support for bulk processing endpoints
|
|
11
|
+
|
|
8
12
|
## [v3.2.1] - 2022-01-13
|
|
9
13
|
|
|
10
14
|
- Fixes `getMessages` query params
|
|
@@ -189,7 +193,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
189
193
|
|
|
190
194
|
## v1.0.1 - 2019-07-12
|
|
191
195
|
|
|
192
|
-
[unreleased]: https://github.com/trycourier/courier-node/compare/v3.
|
|
196
|
+
[unreleased]: https://github.com/trycourier/courier-node/compare/v3.3.0...HEAD
|
|
197
|
+
[v3.3.0]: https://github.com/trycourier/courier-node/compare/v3.2.1...v3.3.0
|
|
193
198
|
[v3.2.1]: https://github.com/trycourier/courier-node/compare/v3.2.0...v3.2.1
|
|
194
199
|
[v3.2.0]: https://github.com/trycourier/courier-node/compare/v3.1.0...v3.2.0
|
|
195
200
|
[v3.1.0]: https://github.com/trycourier/courier-node/compare/v3.0.0...v3.1.0
|
package/README.md
CHANGED
|
@@ -377,6 +377,45 @@ async function run() {
|
|
|
377
377
|
|
|
378
378
|
// Example: Cancel notification submission
|
|
379
379
|
await courier.notifications.cancelSubmission("notification1", "submission1");
|
|
380
|
+
|
|
381
|
+
// Bulk Processing
|
|
382
|
+
// Example: create a job
|
|
383
|
+
const response = await courier.bulk.createJob({
|
|
384
|
+
message: {
|
|
385
|
+
event: "RR4NDQ7NZ24A8TKPWVBEDGE15E9A",
|
|
386
|
+
},
|
|
387
|
+
});
|
|
388
|
+
console.log(response);
|
|
389
|
+
|
|
390
|
+
// Example: get a job
|
|
391
|
+
const response = await courier.bulk.getJob({
|
|
392
|
+
jobId: "1-61efe386-6ff57552409e311b7a1f371f",
|
|
393
|
+
});
|
|
394
|
+
console.log(response);
|
|
395
|
+
|
|
396
|
+
// Example: Ingest users in a job
|
|
397
|
+
const response = await courier.bulk.ingestUsers({
|
|
398
|
+
jobId: "1-61efe386-6ff57552409e311b7a1f371f",
|
|
399
|
+
users: [
|
|
400
|
+
{
|
|
401
|
+
profile: {
|
|
402
|
+
email: "tejas@courier.com",
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
});
|
|
407
|
+
console.log(response);
|
|
408
|
+
|
|
409
|
+
// Example: Run a job
|
|
410
|
+
await courier.bulk.runJob({
|
|
411
|
+
jobId: "1-61efe386-6ff57552409e311b7a1f371f",
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
// Example: Get user details in a job
|
|
415
|
+
const response = await courier.bulk.getJobUsers({
|
|
416
|
+
jobId: "1-61efe386-6ff57552409e311b7a1f371f",
|
|
417
|
+
});
|
|
418
|
+
console.log(response);
|
|
380
419
|
}
|
|
381
420
|
|
|
382
421
|
run();
|
|
@@ -0,0 +1,154 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.bulk = void 0;
|
|
40
|
+
var createJob = function (options) {
|
|
41
|
+
return function (params, config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
42
|
+
var axiosConfig, res;
|
|
43
|
+
return __generator(this, function (_a) {
|
|
44
|
+
switch (_a.label) {
|
|
45
|
+
case 0:
|
|
46
|
+
axiosConfig = {
|
|
47
|
+
headers: {}
|
|
48
|
+
};
|
|
49
|
+
if (config && config.idempotencyKey) {
|
|
50
|
+
axiosConfig.headers["Idempotency-Key"] = config.idempotencyKey;
|
|
51
|
+
}
|
|
52
|
+
if (config && config.idempotencyExpiry) {
|
|
53
|
+
axiosConfig.headers["x-idempotency-expiration"] =
|
|
54
|
+
config.idempotencyExpiry;
|
|
55
|
+
}
|
|
56
|
+
return [4 /*yield*/, options.httpClient.post("/bulk", {
|
|
57
|
+
message: params.message
|
|
58
|
+
}, axiosConfig)];
|
|
59
|
+
case 1:
|
|
60
|
+
res = _a.sent();
|
|
61
|
+
return [2 /*return*/, res.data];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}); };
|
|
65
|
+
};
|
|
66
|
+
var ingestUsers = function (options) {
|
|
67
|
+
return function (params, config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
68
|
+
var axiosConfig, res;
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
axiosConfig = {
|
|
73
|
+
headers: {}
|
|
74
|
+
};
|
|
75
|
+
if (config && config.idempotencyKey) {
|
|
76
|
+
axiosConfig.headers["Idempotency-Key"] = config.idempotencyKey;
|
|
77
|
+
}
|
|
78
|
+
if (config && config.idempotencyExpiry) {
|
|
79
|
+
axiosConfig.headers["x-idempotency-expiration"] =
|
|
80
|
+
config.idempotencyExpiry;
|
|
81
|
+
}
|
|
82
|
+
return [4 /*yield*/, options.httpClient.post("/bulk/" + params.jobId, {
|
|
83
|
+
users: params.users
|
|
84
|
+
}, axiosConfig)];
|
|
85
|
+
case 1:
|
|
86
|
+
res = _a.sent();
|
|
87
|
+
return [2 /*return*/, res.data];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}); };
|
|
91
|
+
};
|
|
92
|
+
var runJob = function (options) {
|
|
93
|
+
return function (params, config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
94
|
+
var axiosConfig;
|
|
95
|
+
return __generator(this, function (_a) {
|
|
96
|
+
switch (_a.label) {
|
|
97
|
+
case 0:
|
|
98
|
+
axiosConfig = {
|
|
99
|
+
headers: {}
|
|
100
|
+
};
|
|
101
|
+
if (config && config.idempotencyKey) {
|
|
102
|
+
axiosConfig.headers["Idempotency-Key"] = config.idempotencyKey;
|
|
103
|
+
}
|
|
104
|
+
if (config && config.idempotencyExpiry) {
|
|
105
|
+
axiosConfig.headers["x-idempotency-expiration"] =
|
|
106
|
+
config.idempotencyExpiry;
|
|
107
|
+
}
|
|
108
|
+
return [4 /*yield*/, options.httpClient.post("/bulk/" + params.jobId + "/run", {}, axiosConfig)];
|
|
109
|
+
case 1:
|
|
110
|
+
_a.sent();
|
|
111
|
+
return [2 /*return*/];
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}); };
|
|
115
|
+
};
|
|
116
|
+
var getJob = function (options) {
|
|
117
|
+
return function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
+
var res;
|
|
119
|
+
return __generator(this, function (_a) {
|
|
120
|
+
switch (_a.label) {
|
|
121
|
+
case 0: return [4 /*yield*/, options.httpClient.get("/bulk/" + params.jobId)];
|
|
122
|
+
case 1:
|
|
123
|
+
res = _a.sent();
|
|
124
|
+
return [2 /*return*/, res.data];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}); };
|
|
128
|
+
};
|
|
129
|
+
var getJobUsers = function (options) {
|
|
130
|
+
return function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
131
|
+
var res;
|
|
132
|
+
return __generator(this, function (_a) {
|
|
133
|
+
switch (_a.label) {
|
|
134
|
+
case 0: return [4 /*yield*/, options.httpClient.get("/bulk/" + params.jobId + "/users", {
|
|
135
|
+
params: {
|
|
136
|
+
cursor: params.cursor
|
|
137
|
+
}
|
|
138
|
+
})];
|
|
139
|
+
case 1:
|
|
140
|
+
res = _a.sent();
|
|
141
|
+
return [2 /*return*/, res.data];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}); };
|
|
145
|
+
};
|
|
146
|
+
exports.bulk = function (options) {
|
|
147
|
+
return {
|
|
148
|
+
createJob: createJob(options),
|
|
149
|
+
getJob: getJob(options),
|
|
150
|
+
getJobUsers: getJobUsers(options),
|
|
151
|
+
ingestUsers: ingestUsers(options),
|
|
152
|
+
runJob: runJob(options)
|
|
153
|
+
};
|
|
154
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { IRecipientPreferences } from "../preferences/types";
|
|
2
|
+
export interface IInboundBulkMessage {
|
|
3
|
+
brand?: string;
|
|
4
|
+
data?: object;
|
|
5
|
+
event: string;
|
|
6
|
+
locale?: string;
|
|
7
|
+
override?: object;
|
|
8
|
+
}
|
|
9
|
+
export interface ICourierBulkConfig {
|
|
10
|
+
idempotencyKey?: string;
|
|
11
|
+
idempotencyExpiry?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ICourierBulkCreateJobParams {
|
|
14
|
+
message: IInboundBulkMessage;
|
|
15
|
+
}
|
|
16
|
+
export interface ICourierBulkCreateJobResponse {
|
|
17
|
+
jobId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface IInboundBulkMessageUser {
|
|
20
|
+
preferences?: IRecipientPreferences;
|
|
21
|
+
profile?: object;
|
|
22
|
+
recipient?: string;
|
|
23
|
+
data?: object;
|
|
24
|
+
}
|
|
25
|
+
export declare type InboundBulkMessageUser = IInboundBulkMessageUser;
|
|
26
|
+
export interface ICourierBulkIngestUsersParams {
|
|
27
|
+
jobId: string;
|
|
28
|
+
users: InboundBulkMessageUser[];
|
|
29
|
+
}
|
|
30
|
+
export interface ICourierBulkIngestError {
|
|
31
|
+
user: any;
|
|
32
|
+
error: any;
|
|
33
|
+
}
|
|
34
|
+
export interface ICourierBulkIngestUsersResponse {
|
|
35
|
+
total: number;
|
|
36
|
+
errors?: ICourierBulkIngestError[];
|
|
37
|
+
}
|
|
38
|
+
export interface ICourierBulkRunJobParams {
|
|
39
|
+
jobId: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ICourierBulkGetJobParams {
|
|
42
|
+
jobId: string;
|
|
43
|
+
}
|
|
44
|
+
export declare type BulkJobStatus = "CREATED" | "PROCESSING" | "COMPLETED" | "ERROR";
|
|
45
|
+
export declare type BulkJobUserStatus = "PENDING" | "ENQUEUED" | "ERROR";
|
|
46
|
+
export interface ICourierBulkGetJobResponse {
|
|
47
|
+
job: {
|
|
48
|
+
definition: IInboundBulkMessage;
|
|
49
|
+
enqueued: number;
|
|
50
|
+
failures: number;
|
|
51
|
+
received: number;
|
|
52
|
+
status: BulkJobStatus;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface ICourierBulkGetJobUsersParams {
|
|
56
|
+
jobId: string;
|
|
57
|
+
cursor?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface ICourierBulkMessageUserResponse extends InboundBulkMessageUser {
|
|
60
|
+
status: BulkJobUserStatus;
|
|
61
|
+
messageId?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface ICourierBulkGetJobUsersResponse {
|
|
64
|
+
items: ICourierBulkMessageUserResponse[];
|
|
65
|
+
paging: {
|
|
66
|
+
cursor?: string;
|
|
67
|
+
more: boolean;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export interface ICourierClientBulk {
|
|
71
|
+
createJob: (params: ICourierBulkCreateJobParams, config?: ICourierBulkConfig) => Promise<ICourierBulkCreateJobResponse>;
|
|
72
|
+
ingestUsers: (params: ICourierBulkIngestUsersParams, config?: ICourierBulkConfig) => Promise<ICourierBulkIngestUsersResponse>;
|
|
73
|
+
runJob: (params: ICourierBulkRunJobParams, config?: ICourierBulkConfig) => Promise<void>;
|
|
74
|
+
getJob: (params: ICourierBulkGetJobParams) => Promise<ICourierBulkGetJobResponse>;
|
|
75
|
+
getJobUsers: (params: ICourierBulkGetJobUsersParams) => Promise<ICourierBulkGetJobUsersResponse>;
|
|
76
|
+
}
|
package/lib/client.js
CHANGED
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.client = void 0;
|
|
40
40
|
var automations_1 = require("./automations");
|
|
41
41
|
var brands_1 = require("./brands");
|
|
42
|
+
var bulk_1 = require("./bulk");
|
|
42
43
|
var lists_1 = require("./lists");
|
|
43
44
|
var notifications_1 = require("./notifications");
|
|
44
45
|
var preferences_1 = require("./preferences");
|
|
@@ -141,6 +142,7 @@ exports.client = function (options) {
|
|
|
141
142
|
return {
|
|
142
143
|
addRecipientToLists: profile_1.addRecipientToLists(options),
|
|
143
144
|
automations: automations_1.automations(options),
|
|
145
|
+
bulk: bulk_1.bulk(options),
|
|
144
146
|
createBrand: brands_1.createBrand(options),
|
|
145
147
|
deleteBrand: brands_1.deleteBrand(options),
|
|
146
148
|
deleteProfile: profile_1.deleteProfile(options),
|
package/lib/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from "axios";
|
|
2
2
|
import { ICourierClientAutomations } from "./automations/types";
|
|
3
|
+
import { ICourierClientBulk } from "./bulk/types";
|
|
3
4
|
import { ICourierClientLists, ICourierList, ICourierRecipientSubscriptionsResponse } from "./lists/types";
|
|
4
5
|
import { ICourierClientNotifications } from "./notifications/types";
|
|
5
6
|
import { ICourierClientPreferences, IRecipientPreferences } from "./preferences/types";
|
|
@@ -273,6 +274,7 @@ export interface ICourierBrandGetAllResponse {
|
|
|
273
274
|
export interface ICourierClient {
|
|
274
275
|
addRecipientToLists: (params: ICourierProfileListsPostParameters) => Promise<ICourierProfilePostResponse>;
|
|
275
276
|
automations: ICourierClientAutomations;
|
|
277
|
+
bulk: ICourierClientBulk;
|
|
276
278
|
createBrand: (params: ICourierBrandParameters, config?: ICourierBrandPostConfig) => Promise<ICourierBrand>;
|
|
277
279
|
deleteBrand: (brandId: string) => Promise<void>;
|
|
278
280
|
getBrand: (brandId: string) => Promise<ICourierBrand>;
|