forked from flexbase-eng/postgrid-node-client
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcampaigns.ts
More file actions
399 lines (348 loc) · 10.1 KB
/
campaigns.ts
File metadata and controls
399 lines (348 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from '../../core/resource';
import { APIPromise } from '../../core/api-promise';
import { PagePromise, SkipLimit, type SkipLimitParams } from '../../core/pagination';
import { buildHeaders } from '../../internal/headers';
import { RequestOptions } from '../../internal/request-options';
import { path } from '../../internal/utils/path';
/**
* The campaigns API enables you to send out large volumes of fully
* personalized mail to a mailing list.
*/
export class Campaigns extends APIResource {
/**
* Create a new campaign.
*
* A campaign links a mailing list with a specific mail piece profile (letter,
* postcard, cheque, or self-mailer) to send bulk mail. Upon creation, the campaign
* enters the `drafting` status while assets are validated.
*
* @example
* ```ts
* const campaign = await client.printMail.campaigns.create({
* mailingList: 'mailingList',
* });
* ```
*/
create(params: CampaignCreateParams, options?: RequestOptions): APIPromise<Campaign> {
const { 'idempotency-key': idempotencyKey, ...body } = params;
return this._client.post('/print-mail/v1/campaigns', {
body,
...options,
headers: buildHeaders([
{ ...(idempotencyKey != null ? { 'idempotency-key': idempotencyKey } : undefined) },
options?.headers,
]),
});
}
/**
* Retrieve a specific campaign by its ID.
*
* @example
* ```ts
* const campaign = await client.printMail.campaigns.retrieve(
* 'id',
* );
* ```
*/
retrieve(id: string, options?: RequestOptions): APIPromise<Campaign> {
return this._client.get(path`/print-mail/v1/campaigns/${id}`, options);
}
/**
* Update an existing campaign.
*
* Campaigns can only be updated if they are in the `draft` or `changes_required`
* status. Updating a campaign will trigger reprocessing and set its status back to
* `drafting`.
*
* @example
* ```ts
* const campaign = await client.printMail.campaigns.update(
* 'id',
* );
* ```
*/
update(id: string, body: CampaignUpdateParams, options?: RequestOptions): APIPromise<Campaign> {
return this._client.post(path`/print-mail/v1/campaigns/${id}`, { body, ...options });
}
/**
* Retrieve a list of campaigns.
*
* Returns a paginated list of campaigns associated with the authenticated
* organization, filterable by various parameters.
*
* @example
* ```ts
* // Automatically fetches more pages as needed.
* for await (const campaign of client.printMail.campaigns.list()) {
* // ...
* }
* ```
*/
list(
query: CampaignListParams | null | undefined = {},
options?: RequestOptions,
): PagePromise<CampaignsSkipLimit, Campaign> {
return this._client.getAPIList('/print-mail/v1/campaigns', SkipLimit<Campaign>, { query, ...options });
}
/**
* Delete a campaign.
*
* Campaigns can only be deleted if they are in `draft`, `changes_required`, or
* `ready` status. This also permanently deletes associated resources. This
* operation cannot be undone.
*
* @example
* ```ts
* const campaign = await client.printMail.campaigns.delete(
* 'id',
* );
* ```
*/
delete(id: string, options?: RequestOptions): APIPromise<CampaignDeleteResponse> {
return this._client.delete(path`/print-mail/v1/campaigns/${id}`, options);
}
/**
* Send a campaign for processing.
*
* This action transitions a campaign from the `draft` status to `creating_orders`.
* You can optionally specify a future `sendDate`. Once sent, the campaign cannot
* be updated.
*
* @example
* ```ts
* const campaign = await client.printMail.campaigns.send(
* 'id',
* );
* ```
*/
send(id: string, body: CampaignSendParams, options?: RequestOptions): APIPromise<Campaign> {
return this._client.post(path`/print-mail/v1/campaigns/${id}/send`, { body, ...options });
}
}
export type CampaignsSkipLimit = SkipLimit<Campaign>;
/**
* Represents a bulk mail campaign.
*/
export interface Campaign {
/**
* A unique ID prefixed with campaign\_
*/
id: string;
/**
* The UTC time at which this resource was created.
*/
createdAt: string;
/**
* The number of orders successfully created for this campaign.
*/
createdCount: number;
/**
* `true` if this is a live mode resource else `false`.
*/
live: boolean;
/**
* The ID of the mailing list associated with this campaign.
*/
mailingList: string;
/**
* Status of the campaign lifecycle.
*/
status:
| 'drafting'
| 'changes_required'
| 'creating_orders'
| 'draft'
| 'ready'
| 'printing'
| 'processed_for_delivery';
/**
* The UTC time at which this resource was last updated.
*/
updatedAt: string;
/**
* The ID of the cheque profile used for this campaign, if applicable.
*/
chequeProfile?: string;
/**
* The ID of the default sender contact to use for orders if not specified per
* recipient.
*/
defaultSenderContact?: string;
/**
* An optional string describing this resource. Will be visible in the API and the
* dashboard.
*/
description?: string;
/**
* A list of processing errors encountered, if any. Present when status is
* 'changes_required'.
*/
errors?: Array<Campaign.Error>;
/**
* The ID of the letter profile used for this campaign, if applicable.
*/
letterProfile?: string;
/**
* See the section on Metadata.
*/
metadata?: { [key: string]: unknown };
/**
* A temporary URL to preview the first rendered order, available once the campaign
* status is 'draft' or later.
*/
orderPreviewURL?: string;
/**
* The ID of the postcard profile used for this campaign, if applicable.
*/
postcardProfile?: string;
/**
* A temporary URL to download the processing report, available once the campaign
* is in the `ready` status.
*/
reportURL?: string;
/**
* The ID of the self-mailer profile used for this campaign, if applicable.
*/
selfMailerProfile?: string;
/**
* The scheduled date and time for the campaign to be sent.
*/
sendDate?: string;
}
export namespace Campaign {
/**
* Details of a specific error encountered during campaign processing.
*/
export interface Error {
/**
* A human-readable message describing the error.
*/
message: string;
/**
* Type of error encountered during campaign processing.
*/
type: 'processing_error' | 'internal_error';
}
}
export interface CampaignDeleteResponse {
/**
* A unique ID prefixed with campaign\_
*/
id: string;
deleted: true;
}
export interface CampaignCreateParams {
/**
* Body param: The ID of the mailing list associated with this campaign.
*/
mailingList: string;
/**
* Body param: The ID of the cheque profile used for this campaign, if applicable.
*/
chequeProfile?: string;
/**
* Body param: The ID of the default sender contact to use for orders if not
* specified per recipient.
*/
defaultSenderContact?: string;
/**
* Body param: An optional string describing this resource. Will be visible in the
* API and the dashboard.
*/
description?: string;
/**
* Body param: The ID of the letter profile used for this campaign, if applicable.
*/
letterProfile?: string;
/**
* Body param: See the section on Metadata.
*/
metadata?: { [key: string]: unknown };
/**
* Body param: The ID of the postcard profile used for this campaign, if
* applicable.
*/
postcardProfile?: string;
/**
* Body param: The ID of the self-mailer profile used for this campaign, if
* applicable.
*/
selfMailerProfile?: string;
/**
* Body param: The scheduled date and time for the campaign to be sent.
*/
sendDate?: string;
/**
* Header param
*/
'idempotency-key'?: string;
}
export interface CampaignUpdateParams {
/**
* The ID of the cheque profile to use. Setting this will remove other profile
* types. Set to `null` to remove.
*/
chequeProfile?: string | null;
/**
* The ID of the default sender contact. Set to `null` to remove.
*/
defaultSenderContact?: string | null;
/**
* An optional description for the campaign. Set to `null` to remove the existing
* description.
*/
description?: string | null;
/**
* The ID of the letter profile to use. Setting this will remove other profile
* types. Set to `null` to remove.
*/
letterProfile?: string | null;
/**
* The ID of the mailing list to associate with this campaign.
*/
mailingList?: string;
/**
* Optional key-value data associated with the campaign. Set to `null` to remove
* existing metadata.
*/
metadata?: { [key: string]: string } | null;
/**
* The ID of the postcard profile to use. Setting this will remove other profile
* types. Set to `null` to remove.
*/
postcardProfile?: string | null;
/**
* The ID of the self-mailer profile to use. Setting this will remove other profile
* types. Set to `null` to remove.
*/
selfMailerProfile?: string | null;
}
export interface CampaignListParams extends SkipLimitParams {
/**
* You can supply any string to help narrow down the list of resources. For
* example, if you pass `"New York"` (quoted), it will return resources that have
* that string present somewhere in their response. Alternatively, you can supply a
* structured search query. See the documentation on `StructuredSearchQuery` for
* more details.
*/
search?: string;
}
export interface CampaignSendParams {
/**
* The date and time the campaign should be sent. Must be in the future. If
* omitted, defaults to the earliest possible processing date.
*/
sendDate?: (string & {}) | string;
}
export declare namespace Campaigns {
export {
type Campaign as Campaign,
type CampaignDeleteResponse as CampaignDeleteResponse,
type CampaignsSkipLimit as CampaignsSkipLimit,
type CampaignCreateParams as CampaignCreateParams,
type CampaignUpdateParams as CampaignUpdateParams,
type CampaignListParams as CampaignListParams,
type CampaignSendParams as CampaignSendParams,
};
}