@or-sdk/contacts 3.5.7-beta.2189.0 → 3.5.7-beta.2196.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/dist/cjs/Contacts.js +7 -5
- package/dist/cjs/Contacts.js.map +1 -1
- package/dist/cjs/api/batchProcessApi.js +1 -20
- package/dist/cjs/api/batchProcessApi.js.map +1 -1
- package/dist/cjs/api/bulkContactsCreateApi.js +141 -46
- package/dist/cjs/api/bulkContactsCreateApi.js.map +1 -1
- package/dist/cjs/api/contactApi.js +15 -19
- package/dist/cjs/api/contactApi.js.map +1 -1
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/esm/Contacts.js +7 -5
- package/dist/esm/Contacts.js.map +1 -1
- package/dist/esm/api/batchProcessApi.js +1 -16
- package/dist/esm/api/batchProcessApi.js.map +1 -1
- package/dist/esm/api/bulkContactsCreateApi.js +85 -20
- package/dist/esm/api/bulkContactsCreateApi.js.map +1 -1
- package/dist/esm/api/contactApi.js +4 -6
- package/dist/esm/api/contactApi.js.map +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/types/Contacts.d.ts.map +1 -1
- package/dist/types/api/batchProcessApi.d.ts +0 -2
- package/dist/types/api/batchProcessApi.d.ts.map +1 -1
- package/dist/types/api/bulkContactsCreateApi.d.ts +10 -5
- package/dist/types/api/bulkContactsCreateApi.d.ts.map +1 -1
- package/dist/types/api/contactApi.d.ts +2 -6
- package/dist/types/api/contactApi.d.ts.map +1 -1
- package/dist/types/constants.d.ts +1 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/types.d.ts +0 -4
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Contacts.ts +6 -5
- package/src/api/batchProcessApi.ts +2 -15
- package/src/api/bulkContactsCreateApi.ts +113 -39
- package/src/api/contactApi.ts +4 -12
- package/src/constants.ts +1 -1
- package/src/types.ts +0 -3
|
@@ -4,8 +4,13 @@ import BatchProcessApi from './batchProcessApi';
|
|
|
4
4
|
import { REQUEST_PAYLOAD_MAX_BYTES } from '../constants';
|
|
5
5
|
import { chunkArrByMaxSize, debouncePromise, getObjectSizeInBytes } from '../utils';
|
|
6
6
|
import { v4 } from 'uuid';
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import {
|
|
8
|
+
BulkContactDto,
|
|
9
|
+
BulkCreateResultsDto,
|
|
10
|
+
BulkProgressDto,
|
|
11
|
+
CreateBulkResponseDto,
|
|
12
|
+
} from '@onereach/types-contacts-api';
|
|
13
|
+
import { BatchBulkCreateData, BulkCreateData } from '../types';
|
|
9
14
|
|
|
10
15
|
export default class BulkContactsCreateApi extends BaseWithPoling {
|
|
11
16
|
constructor(
|
|
@@ -43,37 +48,69 @@ export default class BulkContactsCreateApi extends BaseWithPoling {
|
|
|
43
48
|
* In the case if contactKey is not defined, it it will be automatically set to the index (as string)
|
|
44
49
|
* of contact.
|
|
45
50
|
*/
|
|
46
|
-
async bulkCreateContacts(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
): Promise<
|
|
51
|
+
public async bulkCreateContacts(
|
|
52
|
+
bulkName: string,
|
|
53
|
+
data: BulkCreateData
|
|
54
|
+
): Promise<BulkCreateResultsDto> {
|
|
50
55
|
const dataWithContactKeys = this.updateContactsWithContactKeys(data);
|
|
51
|
-
|
|
52
|
-
await this.
|
|
53
|
-
let results:
|
|
56
|
+
|
|
57
|
+
await this.indicesOff();
|
|
58
|
+
let results: BulkCreateResultsDto = {
|
|
54
59
|
created: {},
|
|
55
60
|
failed: {},
|
|
56
61
|
};
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console.log('SET BULK PROGRESS');
|
|
64
|
+
await this.setBulkProgress(bulkName);
|
|
65
|
+
// eslint-disable-next-line no-console
|
|
66
|
+
console.log('OK');
|
|
57
67
|
try {
|
|
58
68
|
const { contacts, ...rest } = dataWithContactKeys;
|
|
59
|
-
const contactsMaxSize =
|
|
69
|
+
const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes({ ...rest });
|
|
60
70
|
const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
|
|
61
|
-
const batchGroupId = v4();
|
|
62
71
|
|
|
63
72
|
if (contactsChunks.length === 1) {
|
|
64
|
-
await this.createContactsInSingleBatch(dataWithContactKeys as BatchBulkCreateData,
|
|
73
|
+
await this.createContactsInSingleBatch(dataWithContactKeys as BatchBulkCreateData, bulkName);
|
|
65
74
|
} else {
|
|
66
|
-
await this.createContactsInMultiBatches(contactsChunks as BulkContactDto[][], rest,
|
|
75
|
+
await this.createContactsInMultiBatches(contactsChunks as BulkContactDto[][], rest, bulkName);
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
|
|
78
|
+
// eslint-disable-next-line no-console
|
|
79
|
+
console.log('GET BULK RESULTS');
|
|
80
|
+
results = await this.getBulkCreateResults(bulkName);
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.log('OK');
|
|
70
83
|
} finally {
|
|
71
|
-
|
|
84
|
+
const indicesOnBatchId = v4();
|
|
85
|
+
this.indicesOn(indicesOnBatchId);
|
|
86
|
+
await debouncePromise(() => this.polling(indicesOnBatchId), 3000);
|
|
72
87
|
}
|
|
73
88
|
|
|
74
89
|
return results;
|
|
75
90
|
}
|
|
76
91
|
|
|
92
|
+
async getBulkProgress(bulkName: string): Promise<BulkProgressDto> {
|
|
93
|
+
return this.apiCall({
|
|
94
|
+
method: 'GET',
|
|
95
|
+
route: `${this.apiBasePath}/bulk-progress/${bulkName}`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private async setBulkProgress(bulkName: string): Promise<void> {
|
|
100
|
+
return this.apiCall({
|
|
101
|
+
method: 'POST',
|
|
102
|
+
route: `${this.apiBasePath}/bulk-progress/${bulkName}`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private async updateBulkProgress(bulkName: string, progress: BulkProgressDto): Promise<void> {
|
|
107
|
+
return this.apiCall({
|
|
108
|
+
method: 'PATCH',
|
|
109
|
+
route: `${this.apiBasePath}/bulk-progress/${bulkName}`,
|
|
110
|
+
data: progress,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
77
114
|
private updateContactsWithContactKeys(data: BulkCreateData): BatchBulkCreateData {
|
|
78
115
|
const dataWithContactKeys = {
|
|
79
116
|
...data,
|
|
@@ -93,6 +130,20 @@ export default class BulkContactsCreateApi extends BaseWithPoling {
|
|
|
93
130
|
return dataWithContactKeys;
|
|
94
131
|
}
|
|
95
132
|
|
|
133
|
+
private async indicesOn(batchId: string): Promise<void> {
|
|
134
|
+
return this.apiCall({
|
|
135
|
+
method: 'POST',
|
|
136
|
+
route: `${this.apiBasePath}/indices-on/${batchId}`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private async indicesOff(): Promise<void> {
|
|
141
|
+
return this.apiCall({
|
|
142
|
+
method: 'POST',
|
|
143
|
+
route: `${this.apiBasePath}/indices-off`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
96
147
|
private checkContactKeysDuplications(contacts: BulkContactDto[]): void {
|
|
97
148
|
contacts.map(({ contactKey }) => contactKey).forEach((key, index, array) => {
|
|
98
149
|
if (index !== array.lastIndexOf(key)) {
|
|
@@ -101,30 +152,32 @@ export default class BulkContactsCreateApi extends BaseWithPoling {
|
|
|
101
152
|
});
|
|
102
153
|
}
|
|
103
154
|
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
155
|
+
public async getBulkCreateResults(batchGroupId: string): Promise<BulkCreateResultsDto> {
|
|
156
|
+
const { total, results: firstResults, size } = await this.callGetBulkResults(batchGroupId, 0);
|
|
157
|
+
let results = { ...firstResults };
|
|
158
|
+
|
|
159
|
+
if (total > size) {
|
|
160
|
+
for (let i = 1;i <= Math.ceil((total - size) / size);i ++) {
|
|
161
|
+
const { results: nextResults } = await this.callGetBulkResults(batchGroupId, i * 500);
|
|
162
|
+
results = {
|
|
163
|
+
created: {
|
|
164
|
+
...results.created,
|
|
165
|
+
...nextResults.created,
|
|
166
|
+
},
|
|
167
|
+
failed: {
|
|
168
|
+
...results.failed,
|
|
169
|
+
...nextResults.created,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private async callGetBulkResults(batchGroupId: string, skip: number): Promise<CreateBulkResponseDto> {
|
|
178
|
+
return await this.apiCall<CreateBulkResponseDto>({
|
|
179
|
+
method: 'GET',
|
|
180
|
+
route: `${this.apiBasePath}/bulk-results/${batchGroupId}/${skip}`,
|
|
128
181
|
});
|
|
129
182
|
}
|
|
130
183
|
|
|
@@ -144,6 +197,27 @@ export default class BulkContactsCreateApi extends BaseWithPoling {
|
|
|
144
197
|
});
|
|
145
198
|
// giving time to 2 lambdas to wake up (1 - create Batch and 2 - ping batch status)
|
|
146
199
|
await debouncePromise(() => this.polling(batchId), 3000);
|
|
200
|
+
|
|
201
|
+
// eslint-disable-next-line no-console
|
|
202
|
+
console.log('GET TEMP BULK PROGRESS');
|
|
203
|
+
const {
|
|
204
|
+
totalBatches,
|
|
205
|
+
totalContacts,
|
|
206
|
+
completedBatches,
|
|
207
|
+
completedContacts,
|
|
208
|
+
} = await this.getBulkProgress(batchGroupId);
|
|
209
|
+
// eslint-disable-next-line no-console
|
|
210
|
+
console.log('OK');
|
|
211
|
+
// eslint-disable-next-line no-console
|
|
212
|
+
console.log('UPDATE TEMP BULK PROGRESS');
|
|
213
|
+
await this.updateBulkProgress(batchGroupId, {
|
|
214
|
+
totalBatches,
|
|
215
|
+
totalContacts,
|
|
216
|
+
completedBatches: completedBatches + 1,
|
|
217
|
+
completedContacts: completedContacts + data.contacts.length,
|
|
218
|
+
});
|
|
219
|
+
// eslint-disable-next-line no-console
|
|
220
|
+
console.log('OK');
|
|
147
221
|
}
|
|
148
222
|
|
|
149
223
|
private async createContactsInMultiBatches(
|
package/src/api/contactApi.ts
CHANGED
|
@@ -173,13 +173,9 @@ export default class ContactApi extends BaseWithPoling {
|
|
|
173
173
|
*
|
|
174
174
|
* @see constructor of packages/contacts/src/Contacts
|
|
175
175
|
*/
|
|
176
|
-
async bulkCreateContacts(
|
|
177
|
-
data: CreateMultipleContactsDto,
|
|
178
|
-
options: {bulkSize?: number;} = {}
|
|
179
|
-
): Promise<void> {
|
|
180
|
-
const { bulkSize = REQUEST_PAYLOAD_MAX_BYTES } = options;
|
|
176
|
+
async bulkCreateContacts(data: CreateMultipleContactsDto): Promise<void> {
|
|
181
177
|
const { contacts, ...rest } = data;
|
|
182
|
-
const contactsMaxSize =
|
|
178
|
+
const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes({ ...rest });
|
|
183
179
|
const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
|
|
184
180
|
|
|
185
181
|
contactsChunks.length === 1
|
|
@@ -194,13 +190,9 @@ export default class ContactApi extends BaseWithPoling {
|
|
|
194
190
|
*
|
|
195
191
|
* @see batchProcessApi.trackBatchProcess
|
|
196
192
|
*/
|
|
197
|
-
async initCreateBatch(
|
|
198
|
-
data: CreateMultipleContactsDto,
|
|
199
|
-
options: {bulkSize?: number;} = {}
|
|
200
|
-
): Promise<InitCreateBatchResponse> {
|
|
201
|
-
const { bulkSize = REQUEST_PAYLOAD_MAX_BYTES } = options;
|
|
193
|
+
async initCreateBatch(data: CreateMultipleContactsDto): Promise<InitCreateBatchResponse> {
|
|
202
194
|
const { contacts, ...rest } = data;
|
|
203
|
-
const contactsMaxSize =
|
|
195
|
+
const contactsMaxSize = REQUEST_PAYLOAD_MAX_BYTES - getObjectSizeInBytes({ ...rest });
|
|
204
196
|
const contactsChunks = chunkArrByMaxSize(contacts, contactsMaxSize);
|
|
205
197
|
|
|
206
198
|
const batchProcess = await this.apiCall<BatchProcessResponseDto>({
|
package/src/constants.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -81,6 +81,3 @@ export type BulkCreateData = Omit<BulkCreateRequestDto, 'batchId' | 'batchGroupI
|
|
|
81
81
|
& { contacts: OptionalBy<BulkContactDto, 'contactKey'>[]; };
|
|
82
82
|
|
|
83
83
|
export type BatchBulkCreateData = Omit<BulkCreateRequestDto, 'batchId' | 'batchGroupId'>;
|
|
84
|
-
|
|
85
|
-
export type CreateBulkResults = {created: Record<string, string>; failed: Record<string, string>;};
|
|
86
|
-
|