@unboundcx/sdk 2.2.0 → 2.2.2
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/package.json +1 -1
- package/services/objects.js +237 -79
- package/services/phoneNumbers.js +33 -10
- package/services/workflows.js +4 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unboundcx/sdk",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"description": "Official JavaScript SDK for the Unbound API - A comprehensive toolkit for integrating with Unbound's communication, AI, and data management services",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
package/services/objects.js
CHANGED
|
@@ -1,87 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Objects Service - Manage data objects in the Unbound platform
|
|
3
|
+
*
|
|
4
|
+
* This service supports both new object-based signatures and legacy positional arguments
|
|
5
|
+
* for backward compatibility. New projects should use the object-based signatures.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // Preferred (new) usage:
|
|
9
|
+
* const result = await sdk.objects.query({
|
|
10
|
+
* object: 'users',
|
|
11
|
+
* select: ['id', 'name', 'email'],
|
|
12
|
+
* where: { status: 'active' },
|
|
13
|
+
* limit: 100
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Legacy (deprecated) usage still supported:
|
|
18
|
+
* const result = await sdk.objects.query('users', { status: 'active' });
|
|
19
|
+
*/
|
|
1
20
|
export class ObjectsService {
|
|
2
21
|
constructor(sdk) {
|
|
3
22
|
this.sdk = sdk;
|
|
4
23
|
}
|
|
5
24
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Retrieve an object by ID
|
|
27
|
+
*
|
|
28
|
+
* Preferred usage (new signature):
|
|
29
|
+
* sdk.objects.byId({ id: 'someId', expandDetails: true })
|
|
30
|
+
*
|
|
31
|
+
* Legacy usage (deprecated, but supported):
|
|
32
|
+
* sdk.objects.byId('someId', { 'select[]': ['field1', 'field2'] })
|
|
33
|
+
*
|
|
34
|
+
* @param {string|object} args - Either ID string or options object
|
|
35
|
+
* @returns {Promise} Object data
|
|
36
|
+
*/
|
|
37
|
+
async byId(...args) {
|
|
38
|
+
// New signature: byId({ id, expandDetails })
|
|
39
|
+
if (args.length === 1 && typeof args[0] === 'object' && !Array.isArray(args[0])) {
|
|
40
|
+
const { id, expandDetails = false } = args[0];
|
|
41
|
+
|
|
42
|
+
this.sdk.validateParams(
|
|
43
|
+
{ id, expandDetails },
|
|
44
|
+
{
|
|
45
|
+
id: { type: 'string', required: true },
|
|
46
|
+
expandDetails: { type: 'boolean', required: false },
|
|
47
|
+
},
|
|
48
|
+
);
|
|
14
49
|
|
|
15
|
-
|
|
16
|
-
|
|
50
|
+
const query = {};
|
|
51
|
+
if (expandDetails) query.expandDetails = expandDetails;
|
|
17
52
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
53
|
+
const params = { query };
|
|
54
|
+
return await this.sdk._fetch(`/object/${id}`, 'GET', params);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Old signature: byId(id, queryParams)
|
|
58
|
+
if (args.length >= 1 && typeof args[0] === 'string') {
|
|
59
|
+
const [id, queryParams = {}] = args;
|
|
60
|
+
|
|
61
|
+
this.sdk.validateParams(
|
|
62
|
+
{ id },
|
|
63
|
+
{
|
|
64
|
+
id: { type: 'string', required: true },
|
|
65
|
+
},
|
|
66
|
+
);
|
|
21
67
|
|
|
22
|
-
|
|
23
|
-
|
|
68
|
+
const query = { ...queryParams };
|
|
69
|
+
const params = { query };
|
|
70
|
+
return await this.sdk._fetch(`/object/${id}`, 'GET', params);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
throw new Error('Invalid arguments for byId method');
|
|
24
74
|
}
|
|
25
75
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Query objects with filters
|
|
78
|
+
*
|
|
79
|
+
* Preferred usage (new signature):
|
|
80
|
+
* sdk.objects.query({
|
|
81
|
+
* object: 'users',
|
|
82
|
+
* select: ['id', 'name'],
|
|
83
|
+
* where: { status: 'active' },
|
|
84
|
+
* limit: 50,
|
|
85
|
+
* expandDetails: true
|
|
86
|
+
* })
|
|
87
|
+
*
|
|
88
|
+
* Legacy usage (deprecated, but supported):
|
|
89
|
+
* sdk.objects.query('users', { 'select[]': ['id', 'name'], status: 'active' })
|
|
90
|
+
*
|
|
91
|
+
* @param {object} args - Query parameters
|
|
92
|
+
* @returns {Promise} Query results
|
|
93
|
+
*/
|
|
94
|
+
async query(...args) {
|
|
95
|
+
// New signature: query({ object, select, where, ... })
|
|
96
|
+
if (args.length === 1 && typeof args[0] === 'object' && args[0].object) {
|
|
97
|
+
const {
|
|
98
|
+
object,
|
|
99
|
+
select = null,
|
|
100
|
+
where = {},
|
|
101
|
+
limit = 100,
|
|
102
|
+
nextId = null,
|
|
103
|
+
previousId = null,
|
|
104
|
+
orderByDirection = 'DESC',
|
|
105
|
+
expandDetails = false,
|
|
106
|
+
} = args[0];
|
|
107
|
+
|
|
108
|
+
this.sdk.validateParams(
|
|
109
|
+
{ object, select, where, limit, nextId, previousId, orderByDirection, expandDetails },
|
|
110
|
+
{
|
|
111
|
+
object: { type: 'string', required: true },
|
|
112
|
+
select: { type: 'object', required: false }, // array or string
|
|
113
|
+
where: { type: 'object', required: false },
|
|
114
|
+
limit: { type: 'number', required: false },
|
|
115
|
+
nextId: { type: 'string', required: false },
|
|
116
|
+
previousId: { type: 'string', required: false },
|
|
117
|
+
orderByDirection: { type: 'string', required: false },
|
|
118
|
+
expandDetails: { type: 'boolean', required: false },
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
const query = { ...where };
|
|
123
|
+
if (select !== null) query.select = select;
|
|
124
|
+
if (limit !== 100) query.limit = limit;
|
|
125
|
+
if (nextId !== null) query.nextId = nextId;
|
|
126
|
+
if (previousId !== null) query.previousId = previousId;
|
|
127
|
+
if (orderByDirection !== 'DESC') query.orderByDirection = orderByDirection;
|
|
128
|
+
if (expandDetails) query.expandDetails = expandDetails;
|
|
129
|
+
|
|
130
|
+
const params = { query };
|
|
131
|
+
return await this.sdk._fetch(`/object/query/${object}`, 'GET', params);
|
|
132
|
+
}
|
|
49
133
|
|
|
50
|
-
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
if (nextId !== null) query.nextId = nextId;
|
|
54
|
-
if (previousId !== null) query.previousId = previousId;
|
|
55
|
-
if (orderByDirection !== 'DESC') query.orderByDirection = orderByDirection;
|
|
56
|
-
if (expandDetails) query.expandDetails = expandDetails;
|
|
134
|
+
// Old signature: query(objectName, queryParams)
|
|
135
|
+
if (args.length === 2 && typeof args[0] === 'string') {
|
|
136
|
+
const [objectName, queryParams = {}] = args;
|
|
57
137
|
|
|
58
|
-
|
|
138
|
+
this.sdk.validateParams(
|
|
139
|
+
{ object: objectName },
|
|
140
|
+
{
|
|
141
|
+
object: { type: 'string', required: true },
|
|
142
|
+
},
|
|
143
|
+
);
|
|
59
144
|
|
|
60
|
-
|
|
61
|
-
|
|
145
|
+
const params = { query: queryParams };
|
|
146
|
+
return await this.sdk._fetch(`/object/query/${objectName}`, 'GET', params);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
throw new Error('Invalid arguments for query method');
|
|
62
150
|
}
|
|
63
151
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Update an object record by ID
|
|
154
|
+
*
|
|
155
|
+
* Preferred usage (new signature):
|
|
156
|
+
* sdk.objects.updateById({ object: 'users', id: 'userId', update: { name: 'Jane' } })
|
|
157
|
+
*
|
|
158
|
+
* Legacy usage (deprecated, but supported):
|
|
159
|
+
* sdk.objects.updateById('users', 'userId', { name: 'Jane' })
|
|
160
|
+
*
|
|
161
|
+
* @param {object} args - Update parameters
|
|
162
|
+
* @returns {Promise} Updated object data
|
|
163
|
+
*/
|
|
164
|
+
async updateById(...args) {
|
|
165
|
+
// New signature: updateById({ object, id, update })
|
|
166
|
+
if (args.length === 1 && typeof args[0] === 'object' && args[0].object) {
|
|
167
|
+
const { object, id, update } = args[0];
|
|
168
|
+
|
|
169
|
+
this.sdk.validateParams(
|
|
170
|
+
{ object, id, update },
|
|
171
|
+
{
|
|
172
|
+
object: { type: 'string', required: true },
|
|
173
|
+
id: { type: 'string', required: true },
|
|
174
|
+
update: { type: 'object', required: true },
|
|
175
|
+
},
|
|
176
|
+
);
|
|
73
177
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
178
|
+
const params = {
|
|
179
|
+
body: {
|
|
180
|
+
where: { id },
|
|
181
|
+
update,
|
|
78
182
|
},
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
};
|
|
183
|
+
};
|
|
82
184
|
|
|
83
|
-
|
|
84
|
-
|
|
185
|
+
return await this.sdk._fetch(`/object/${object}`, 'PUT', params);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Old signature: updateById(object, id, update)
|
|
189
|
+
if (args.length === 3) {
|
|
190
|
+
const [object, id, update] = args;
|
|
191
|
+
|
|
192
|
+
this.sdk.validateParams(
|
|
193
|
+
{ object, id, update },
|
|
194
|
+
{
|
|
195
|
+
object: { type: 'string', required: true },
|
|
196
|
+
id: { type: 'string', required: true },
|
|
197
|
+
update: { type: 'object', required: true },
|
|
198
|
+
},
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
const params = {
|
|
202
|
+
body: {
|
|
203
|
+
where: { id },
|
|
204
|
+
update,
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
return await this.sdk._fetch(`/object/${object}`, 'PUT', params);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
throw new Error('Invalid arguments for updateById method');
|
|
85
212
|
}
|
|
86
213
|
|
|
87
214
|
async update({ object, where, update }) {
|
|
@@ -105,21 +232,52 @@ export class ObjectsService {
|
|
|
105
232
|
return result;
|
|
106
233
|
}
|
|
107
234
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
235
|
+
/**
|
|
236
|
+
* Create a new object record
|
|
237
|
+
*
|
|
238
|
+
* Preferred usage (new signature):
|
|
239
|
+
* sdk.objects.create({ object: 'users', body: { name: 'John', email: 'john@example.com' } })
|
|
240
|
+
*
|
|
241
|
+
* Legacy usage (deprecated, but supported):
|
|
242
|
+
* sdk.objects.create('users', { name: 'John', email: 'john@example.com' })
|
|
243
|
+
*
|
|
244
|
+
* @param {object} args - Creation parameters
|
|
245
|
+
* @returns {Promise} Created object data
|
|
246
|
+
*/
|
|
247
|
+
async create(...args) {
|
|
248
|
+
// New signature: create({ object, body })
|
|
249
|
+
if (args.length === 1 && typeof args[0] === 'object' && args[0].object) {
|
|
250
|
+
const { object, body } = args[0];
|
|
251
|
+
|
|
252
|
+
this.sdk.validateParams(
|
|
253
|
+
{ object, body },
|
|
254
|
+
{
|
|
255
|
+
object: { type: 'string', required: true },
|
|
256
|
+
body: { type: 'object', required: true },
|
|
257
|
+
},
|
|
258
|
+
);
|
|
116
259
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
260
|
+
const params = { body };
|
|
261
|
+
return await this.sdk._fetch(`/object/${object}`, 'POST', params);
|
|
262
|
+
}
|
|
120
263
|
|
|
121
|
-
|
|
122
|
-
|
|
264
|
+
// Old signature: create(object, body)
|
|
265
|
+
if (args.length === 2) {
|
|
266
|
+
const [object, body] = args;
|
|
267
|
+
|
|
268
|
+
this.sdk.validateParams(
|
|
269
|
+
{ object, body },
|
|
270
|
+
{
|
|
271
|
+
object: { type: 'string', required: true },
|
|
272
|
+
body: { type: 'object', required: true },
|
|
273
|
+
},
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
const params = { body };
|
|
277
|
+
return await this.sdk._fetch(`/object/${object}`, 'POST', params);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
throw new Error('Invalid arguments for create method');
|
|
123
281
|
}
|
|
124
282
|
|
|
125
283
|
async delete({ object, where }) {
|
package/services/phoneNumbers.js
CHANGED
|
@@ -198,12 +198,13 @@ export class PhoneNumbersService {
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
// Porting Methods
|
|
201
|
-
async checkPortability(phoneNumbers) {
|
|
202
|
-
this.sdk.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
async checkPortability({ phoneNumbers }) {
|
|
202
|
+
this.sdk.validateParams(
|
|
203
|
+
{ phoneNumbers },
|
|
204
|
+
{
|
|
205
|
+
phoneNumbers: { type: 'array', required: true },
|
|
206
|
+
},
|
|
207
|
+
);
|
|
207
208
|
|
|
208
209
|
const result = await this.sdk._fetch('/phoneNumbers/porting/portability-check', 'POST', {
|
|
209
210
|
phoneNumbers
|
|
@@ -264,7 +265,12 @@ export class PhoneNumbersService {
|
|
|
264
265
|
}
|
|
265
266
|
|
|
266
267
|
async getPortingOrder(id, { includePhoneNumbers = true } = {}) {
|
|
267
|
-
this.sdk.
|
|
268
|
+
this.sdk.validateParams(
|
|
269
|
+
{ id },
|
|
270
|
+
{
|
|
271
|
+
id: { type: 'string', required: true },
|
|
272
|
+
},
|
|
273
|
+
);
|
|
268
274
|
|
|
269
275
|
const params = new URLSearchParams();
|
|
270
276
|
if (includePhoneNumbers !== undefined) params.append('includePhoneNumbers', includePhoneNumbers);
|
|
@@ -277,7 +283,13 @@ export class PhoneNumbersService {
|
|
|
277
283
|
}
|
|
278
284
|
|
|
279
285
|
async updatePortingOrder(id, updateData) {
|
|
280
|
-
this.sdk.
|
|
286
|
+
this.sdk.validateParams(
|
|
287
|
+
{ id, updateData },
|
|
288
|
+
{
|
|
289
|
+
id: { type: 'string', required: true },
|
|
290
|
+
updateData: { type: 'object', required: true },
|
|
291
|
+
},
|
|
292
|
+
);
|
|
281
293
|
|
|
282
294
|
const result = await this.sdk._fetch(`/phoneNumbers/porting/orders/${id}`, 'PATCH', updateData);
|
|
283
295
|
return result;
|
|
@@ -290,7 +302,13 @@ export class PhoneNumbersService {
|
|
|
290
302
|
documentType = 'loa',
|
|
291
303
|
portingOrderId
|
|
292
304
|
}) {
|
|
293
|
-
this.sdk.
|
|
305
|
+
this.sdk.validateParams(
|
|
306
|
+
{ filename, fileContent },
|
|
307
|
+
{
|
|
308
|
+
filename: { type: 'string', required: true },
|
|
309
|
+
fileContent: { type: 'string', required: true },
|
|
310
|
+
},
|
|
311
|
+
);
|
|
294
312
|
|
|
295
313
|
const body = {
|
|
296
314
|
filename,
|
|
@@ -306,7 +324,12 @@ export class PhoneNumbersService {
|
|
|
306
324
|
}
|
|
307
325
|
|
|
308
326
|
async getPortingEvents(id, { page, limit } = {}) {
|
|
309
|
-
this.sdk.
|
|
327
|
+
this.sdk.validateParams(
|
|
328
|
+
{ id },
|
|
329
|
+
{
|
|
330
|
+
id: { type: 'string', required: true },
|
|
331
|
+
},
|
|
332
|
+
);
|
|
310
333
|
|
|
311
334
|
const params = new URLSearchParams();
|
|
312
335
|
if (page) params.append('page', page);
|