servicem8 0.9.18 → 0.9.20
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/api.json +312 -318
- package/bin/mcp-server.js +8 -25
- package/bin/mcp-server.js.map +13 -13
- package/dist/commonjs/funcs/jobTemplatesCreateJobFromTemplate.d.ts +1 -1
- package/dist/commonjs/funcs/jobTemplatesCreateJobFromTemplate.js +1 -1
- package/dist/commonjs/funcs/jobTemplatesCreateJobTemplates.d.ts +0 -3
- package/dist/commonjs/funcs/jobTemplatesCreateJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/funcs/jobTemplatesCreateJobTemplates.js +0 -3
- package/dist/commonjs/funcs/jobTemplatesCreateJobTemplates.js.map +1 -1
- package/dist/commonjs/funcs/jobTemplatesDeleteJobTemplates.d.ts +0 -3
- package/dist/commonjs/funcs/jobTemplatesDeleteJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/funcs/jobTemplatesDeleteJobTemplates.js +0 -3
- package/dist/commonjs/funcs/jobTemplatesDeleteJobTemplates.js.map +1 -1
- package/dist/commonjs/funcs/jobTemplatesUpdateJobTemplates.d.ts +0 -5
- package/dist/commonjs/funcs/jobTemplatesUpdateJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/funcs/jobTemplatesUpdateJobTemplates.js +0 -5
- package/dist/commonjs/funcs/jobTemplatesUpdateJobTemplates.js.map +1 -1
- package/dist/commonjs/lib/config.d.ts +3 -3
- package/dist/commonjs/lib/config.js +3 -3
- package/dist/commonjs/mcp-server/mcp-server.js +1 -1
- package/dist/commonjs/mcp-server/server.js +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesCreateJobFromTemplate.js +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesCreateJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesCreateJobTemplates.js +0 -5
- package/dist/commonjs/mcp-server/tools/jobTemplatesCreateJobTemplates.js.map +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesDeleteJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesDeleteJobTemplates.js +0 -5
- package/dist/commonjs/mcp-server/tools/jobTemplatesDeleteJobTemplates.js.map +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesUpdateJobTemplates.d.ts.map +1 -1
- package/dist/commonjs/mcp-server/tools/jobTemplatesUpdateJobTemplates.js +1 -8
- package/dist/commonjs/mcp-server/tools/jobTemplatesUpdateJobTemplates.js.map +1 -1
- package/dist/commonjs/sdk/jobtemplates.d.ts +1 -12
- package/dist/commonjs/sdk/jobtemplates.d.ts.map +1 -1
- package/dist/commonjs/sdk/jobtemplates.js +1 -12
- package/dist/commonjs/sdk/jobtemplates.js.map +1 -1
- package/dist/esm/funcs/jobTemplatesCreateJobFromTemplate.d.ts +1 -1
- package/dist/esm/funcs/jobTemplatesCreateJobFromTemplate.js +1 -1
- package/dist/esm/funcs/jobTemplatesCreateJobTemplates.d.ts +0 -3
- package/dist/esm/funcs/jobTemplatesCreateJobTemplates.d.ts.map +1 -1
- package/dist/esm/funcs/jobTemplatesCreateJobTemplates.js +0 -3
- package/dist/esm/funcs/jobTemplatesCreateJobTemplates.js.map +1 -1
- package/dist/esm/funcs/jobTemplatesDeleteJobTemplates.d.ts +0 -3
- package/dist/esm/funcs/jobTemplatesDeleteJobTemplates.d.ts.map +1 -1
- package/dist/esm/funcs/jobTemplatesDeleteJobTemplates.js +0 -3
- package/dist/esm/funcs/jobTemplatesDeleteJobTemplates.js.map +1 -1
- package/dist/esm/funcs/jobTemplatesUpdateJobTemplates.d.ts +0 -5
- package/dist/esm/funcs/jobTemplatesUpdateJobTemplates.d.ts.map +1 -1
- package/dist/esm/funcs/jobTemplatesUpdateJobTemplates.js +0 -5
- package/dist/esm/funcs/jobTemplatesUpdateJobTemplates.js.map +1 -1
- package/dist/esm/lib/config.d.ts +3 -3
- package/dist/esm/lib/config.js +3 -3
- package/dist/esm/mcp-server/mcp-server.js +1 -1
- package/dist/esm/mcp-server/server.js +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesCreateJobFromTemplate.js +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesCreateJobTemplates.d.ts.map +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesCreateJobTemplates.js +0 -5
- package/dist/esm/mcp-server/tools/jobTemplatesCreateJobTemplates.js.map +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesDeleteJobTemplates.d.ts.map +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesDeleteJobTemplates.js +0 -5
- package/dist/esm/mcp-server/tools/jobTemplatesDeleteJobTemplates.js.map +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesUpdateJobTemplates.d.ts.map +1 -1
- package/dist/esm/mcp-server/tools/jobTemplatesUpdateJobTemplates.js +1 -8
- package/dist/esm/mcp-server/tools/jobTemplatesUpdateJobTemplates.js.map +1 -1
- package/dist/esm/sdk/jobtemplates.d.ts +1 -12
- package/dist/esm/sdk/jobtemplates.d.ts.map +1 -1
- package/dist/esm/sdk/jobtemplates.js +1 -12
- package/dist/esm/sdk/jobtemplates.js.map +1 -1
- package/docs/sdks/allocationwindows/README.md +9 -4
- package/docs/sdks/assets/README.md +10 -6
- package/docs/sdks/assettypefields/README.md +13 -8
- package/docs/sdks/assettypes/README.md +9 -4
- package/docs/sdks/attachments/README.md +17 -12
- package/docs/sdks/badges/README.md +17 -12
- package/docs/sdks/bundles/README.md +9 -4
- package/docs/sdks/categories/README.md +9 -4
- package/docs/sdks/clients/README.md +13 -8
- package/docs/sdks/companycontacts/README.md +13 -8
- package/docs/sdks/emailtemplates/README.md +9 -4
- package/docs/sdks/feedback/README.md +13 -8
- package/docs/sdks/formfields/README.md +13 -8
- package/docs/sdks/formresponses/README.md +33 -28
- package/docs/sdks/forms/README.md +13 -8
- package/docs/sdks/inbox/README.md +8 -0
- package/docs/sdks/jobactivities/README.md +25 -20
- package/docs/sdks/joballocations/README.md +29 -24
- package/docs/sdks/jobchecklists/README.md +37 -32
- package/docs/sdks/jobcontacts/README.md +13 -8
- package/docs/sdks/jobmaterialbundles/README.md +17 -12
- package/docs/sdks/jobmaterials/README.md +25 -20
- package/docs/sdks/jobpayments/README.md +21 -16
- package/docs/sdks/jobqueues/README.md +9 -4
- package/docs/sdks/jobs/README.md +37 -32
- package/docs/sdks/jobtemplates/README.md +12 -21
- package/docs/sdks/knowledgearticles/README.md +9 -4
- package/docs/sdks/locations/README.md +9 -4
- package/docs/sdks/materials/README.md +13 -8
- package/docs/sdks/notes/README.md +17 -12
- package/docs/sdks/search/README.md +3 -0
- package/docs/sdks/securityroles/README.md +9 -4
- package/docs/sdks/smstemplates/README.md +9 -4
- package/docs/sdks/staffmembers/README.md +17 -12
- package/docs/sdks/staffmessages/README.md +21 -16
- package/docs/sdks/tasks/README.md +25 -20
- package/docs/sdks/taxrates/README.md +9 -4
- package/docs/sdks/vendors/README.md +5 -2
- package/examples/package-lock.json +1 -1
- package/jsr.json +1 -1
- package/package.json +1 -1
- package/src/funcs/jobTemplatesCreateJobFromTemplate.ts +1 -1
- package/src/funcs/jobTemplatesCreateJobTemplates.ts +0 -3
- package/src/funcs/jobTemplatesDeleteJobTemplates.ts +0 -3
- package/src/funcs/jobTemplatesUpdateJobTemplates.ts +0 -5
- package/src/lib/config.ts +3 -3
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/server.ts +1 -1
- package/src/mcp-server/tools/jobTemplatesCreateJobFromTemplate.ts +1 -1
- package/src/mcp-server/tools/jobTemplatesCreateJobTemplates.ts +0 -5
- package/src/mcp-server/tools/jobTemplatesDeleteJobTemplates.ts +0 -5
- package/src/mcp-server/tools/jobTemplatesUpdateJobTemplates.ts +1 -8
- package/src/sdk/jobtemplates.ts +1 -12
|
@@ -23,6 +23,7 @@ This endpoint supports result filtering. For more information on how to filter t
|
|
|
23
23
|
|
|
24
24
|
### Example Usage
|
|
25
25
|
|
|
26
|
+
<!-- UsageSnippet language="typescript" operationID="listJobChecklists" method="get" path="/jobchecklist.json" -->
|
|
26
27
|
```typescript
|
|
27
28
|
import { ServiceM8 } from "servicem8";
|
|
28
29
|
|
|
@@ -100,6 +101,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
100
101
|
|
|
101
102
|
### Example Usage
|
|
102
103
|
|
|
104
|
+
<!-- UsageSnippet language="typescript" operationID="createJobChecklists" method="post" path="/jobchecklist.json" -->
|
|
103
105
|
```typescript
|
|
104
106
|
import { ServiceM8 } from "servicem8";
|
|
105
107
|
|
|
@@ -111,18 +113,18 @@ const serviceM8 = new ServiceM8({
|
|
|
111
113
|
|
|
112
114
|
async function run() {
|
|
113
115
|
const result = await serviceM8.jobChecklists.createJobChecklists({
|
|
114
|
-
uuid: "123e4567-
|
|
115
|
-
jobUuid: "123e4567-
|
|
116
|
+
uuid: "123e4567-01ff-49cb-a7c2-230fe733ffbb",
|
|
117
|
+
jobUuid: "123e4567-3710-4bc2-ae2d-230fe1cdd36b",
|
|
116
118
|
completedTimestamp: "2025-07-01 12:00:00",
|
|
117
|
-
completedByStaffUuid: "123e4567-
|
|
118
|
-
completedDuringCheckinUuid: "123e4567-
|
|
119
|
-
regardingObjectUuid: "123e4567-
|
|
120
|
-
fulfilledByObjectUuid: "123e4567-
|
|
119
|
+
completedByStaffUuid: "123e4567-aaa4-48c0-8ea3-230fe9a1ef8b",
|
|
120
|
+
completedDuringCheckinUuid: "123e4567-a21d-4409-999b-230fe45c7d9b",
|
|
121
|
+
regardingObjectUuid: "123e4567-abad-4582-9add-230feb04e08b",
|
|
122
|
+
fulfilledByObjectUuid: "123e4567-b812-4f0d-9cb1-230fe11fa41b",
|
|
121
123
|
assignedToStaffUuids: [
|
|
122
|
-
"123e4567-
|
|
124
|
+
"123e4567-fb14-4bd3-b0cf-230fe79b0f1b",
|
|
123
125
|
],
|
|
124
126
|
assignedTimestamp: "2025-07-01 12:00:00",
|
|
125
|
-
assignedByStaffUuid: "123e4567-
|
|
127
|
+
assignedByStaffUuid: "123e4567-a41a-4736-b291-230fe29d742b",
|
|
126
128
|
});
|
|
127
129
|
|
|
128
130
|
console.log(result);
|
|
@@ -149,18 +151,18 @@ const serviceM8 = new ServiceM8Core({
|
|
|
149
151
|
|
|
150
152
|
async function run() {
|
|
151
153
|
const res = await jobChecklistsCreateJobChecklists(serviceM8, {
|
|
152
|
-
uuid: "123e4567-
|
|
153
|
-
jobUuid: "123e4567-
|
|
154
|
+
uuid: "123e4567-01ff-49cb-a7c2-230fe733ffbb",
|
|
155
|
+
jobUuid: "123e4567-3710-4bc2-ae2d-230fe1cdd36b",
|
|
154
156
|
completedTimestamp: "2025-07-01 12:00:00",
|
|
155
|
-
completedByStaffUuid: "123e4567-
|
|
156
|
-
completedDuringCheckinUuid: "123e4567-
|
|
157
|
-
regardingObjectUuid: "123e4567-
|
|
158
|
-
fulfilledByObjectUuid: "123e4567-
|
|
157
|
+
completedByStaffUuid: "123e4567-aaa4-48c0-8ea3-230fe9a1ef8b",
|
|
158
|
+
completedDuringCheckinUuid: "123e4567-a21d-4409-999b-230fe45c7d9b",
|
|
159
|
+
regardingObjectUuid: "123e4567-abad-4582-9add-230feb04e08b",
|
|
160
|
+
fulfilledByObjectUuid: "123e4567-b812-4f0d-9cb1-230fe11fa41b",
|
|
159
161
|
assignedToStaffUuids: [
|
|
160
|
-
"123e4567-
|
|
162
|
+
"123e4567-fb14-4bd3-b0cf-230fe79b0f1b",
|
|
161
163
|
],
|
|
162
164
|
assignedTimestamp: "2025-07-01 12:00:00",
|
|
163
|
-
assignedByStaffUuid: "123e4567-
|
|
165
|
+
assignedByStaffUuid: "123e4567-a41a-4736-b291-230fe29d742b",
|
|
164
166
|
});
|
|
165
167
|
if (res.ok) {
|
|
166
168
|
const { value: result } = res;
|
|
@@ -199,6 +201,7 @@ Retrieve a Job Checklist
|
|
|
199
201
|
|
|
200
202
|
### Example Usage
|
|
201
203
|
|
|
204
|
+
<!-- UsageSnippet language="typescript" operationID="getJobChecklists" method="get" path="/jobchecklist/{uuid}.json" -->
|
|
202
205
|
```typescript
|
|
203
206
|
import { ServiceM8 } from "servicem8";
|
|
204
207
|
|
|
@@ -276,6 +279,7 @@ Update a Job Checklist
|
|
|
276
279
|
|
|
277
280
|
### Example Usage
|
|
278
281
|
|
|
282
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobChecklists" method="post" path="/jobchecklist/{uuid}.json" -->
|
|
279
283
|
```typescript
|
|
280
284
|
import { ServiceM8 } from "servicem8";
|
|
281
285
|
|
|
@@ -289,18 +293,18 @@ async function run() {
|
|
|
289
293
|
const result = await serviceM8.jobChecklists.updateJobChecklists({
|
|
290
294
|
uuid: "cd24d8b9-7620-4771-805e-b96a73214740",
|
|
291
295
|
jobChecklist: {
|
|
292
|
-
uuid: "123e4567-
|
|
293
|
-
jobUuid: "123e4567-
|
|
296
|
+
uuid: "123e4567-01ff-49cb-a7c2-230fe733ffbb",
|
|
297
|
+
jobUuid: "123e4567-3710-4bc2-ae2d-230fe1cdd36b",
|
|
294
298
|
completedTimestamp: "2025-07-01 12:00:00",
|
|
295
|
-
completedByStaffUuid: "123e4567-
|
|
296
|
-
completedDuringCheckinUuid: "123e4567-
|
|
297
|
-
regardingObjectUuid: "123e4567-
|
|
298
|
-
fulfilledByObjectUuid: "123e4567-
|
|
299
|
+
completedByStaffUuid: "123e4567-aaa4-48c0-8ea3-230fe9a1ef8b",
|
|
300
|
+
completedDuringCheckinUuid: "123e4567-a21d-4409-999b-230fe45c7d9b",
|
|
301
|
+
regardingObjectUuid: "123e4567-abad-4582-9add-230feb04e08b",
|
|
302
|
+
fulfilledByObjectUuid: "123e4567-b812-4f0d-9cb1-230fe11fa41b",
|
|
299
303
|
assignedToStaffUuids: [
|
|
300
|
-
"123e4567-
|
|
304
|
+
"123e4567-fb14-4bd3-b0cf-230fe79b0f1b",
|
|
301
305
|
],
|
|
302
306
|
assignedTimestamp: "2025-07-01 12:00:00",
|
|
303
|
-
assignedByStaffUuid: "123e4567-
|
|
307
|
+
assignedByStaffUuid: "123e4567-a41a-4736-b291-230fe29d742b",
|
|
304
308
|
},
|
|
305
309
|
});
|
|
306
310
|
|
|
@@ -330,18 +334,18 @@ async function run() {
|
|
|
330
334
|
const res = await jobChecklistsUpdateJobChecklists(serviceM8, {
|
|
331
335
|
uuid: "cd24d8b9-7620-4771-805e-b96a73214740",
|
|
332
336
|
jobChecklist: {
|
|
333
|
-
uuid: "123e4567-
|
|
334
|
-
jobUuid: "123e4567-
|
|
337
|
+
uuid: "123e4567-01ff-49cb-a7c2-230fe733ffbb",
|
|
338
|
+
jobUuid: "123e4567-3710-4bc2-ae2d-230fe1cdd36b",
|
|
335
339
|
completedTimestamp: "2025-07-01 12:00:00",
|
|
336
|
-
completedByStaffUuid: "123e4567-
|
|
337
|
-
completedDuringCheckinUuid: "123e4567-
|
|
338
|
-
regardingObjectUuid: "123e4567-
|
|
339
|
-
fulfilledByObjectUuid: "123e4567-
|
|
340
|
+
completedByStaffUuid: "123e4567-aaa4-48c0-8ea3-230fe9a1ef8b",
|
|
341
|
+
completedDuringCheckinUuid: "123e4567-a21d-4409-999b-230fe45c7d9b",
|
|
342
|
+
regardingObjectUuid: "123e4567-abad-4582-9add-230feb04e08b",
|
|
343
|
+
fulfilledByObjectUuid: "123e4567-b812-4f0d-9cb1-230fe11fa41b",
|
|
340
344
|
assignedToStaffUuids: [
|
|
341
|
-
"123e4567-
|
|
345
|
+
"123e4567-fb14-4bd3-b0cf-230fe79b0f1b",
|
|
342
346
|
],
|
|
343
347
|
assignedTimestamp: "2025-07-01 12:00:00",
|
|
344
|
-
assignedByStaffUuid: "123e4567-
|
|
348
|
+
assignedByStaffUuid: "123e4567-a41a-4736-b291-230fe29d742b",
|
|
345
349
|
},
|
|
346
350
|
});
|
|
347
351
|
if (res.ok) {
|
|
@@ -385,6 +389,7 @@ In ServiceM8, deleting a record sets its `active` field to `0`. Inactive records
|
|
|
385
389
|
|
|
386
390
|
### Example Usage
|
|
387
391
|
|
|
392
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobChecklists" method="delete" path="/jobchecklist/{uuid}.json" -->
|
|
388
393
|
```typescript
|
|
389
394
|
import { ServiceM8 } from "servicem8";
|
|
390
395
|
|
|
@@ -28,6 +28,7 @@ This endpoint requires the following OAuth scope **read_job_contacts**.
|
|
|
28
28
|
|
|
29
29
|
### Example Usage
|
|
30
30
|
|
|
31
|
+
<!-- UsageSnippet language="typescript" operationID="listJobContacts" method="get" path="/jobcontact.json" -->
|
|
31
32
|
```typescript
|
|
32
33
|
import { ServiceM8 } from "servicem8";
|
|
33
34
|
|
|
@@ -110,6 +111,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
110
111
|
|
|
111
112
|
### Example Usage
|
|
112
113
|
|
|
114
|
+
<!-- UsageSnippet language="typescript" operationID="createJobContacts" method="post" path="/jobcontact.json" -->
|
|
113
115
|
```typescript
|
|
114
116
|
import { ServiceM8 } from "servicem8";
|
|
115
117
|
|
|
@@ -121,8 +123,8 @@ const serviceM8 = new ServiceM8({
|
|
|
121
123
|
|
|
122
124
|
async function run() {
|
|
123
125
|
const result = await serviceM8.jobContacts.createJobContacts({
|
|
124
|
-
uuid: "123e4567-
|
|
125
|
-
jobUuid: "123e4567-
|
|
126
|
+
uuid: "123e4567-d515-4544-a2fb-230fe60b802b",
|
|
127
|
+
jobUuid: "123e4567-df39-4b3a-91e8-230fe2600aab",
|
|
126
128
|
});
|
|
127
129
|
|
|
128
130
|
console.log(result);
|
|
@@ -149,8 +151,8 @@ const serviceM8 = new ServiceM8Core({
|
|
|
149
151
|
|
|
150
152
|
async function run() {
|
|
151
153
|
const res = await jobContactsCreateJobContacts(serviceM8, {
|
|
152
|
-
uuid: "123e4567-
|
|
153
|
-
jobUuid: "123e4567-
|
|
154
|
+
uuid: "123e4567-d515-4544-a2fb-230fe60b802b",
|
|
155
|
+
jobUuid: "123e4567-df39-4b3a-91e8-230fe2600aab",
|
|
154
156
|
});
|
|
155
157
|
if (res.ok) {
|
|
156
158
|
const { value: result } = res;
|
|
@@ -194,6 +196,7 @@ This endpoint requires the following OAuth scope **read_job_contacts**.
|
|
|
194
196
|
|
|
195
197
|
### Example Usage
|
|
196
198
|
|
|
199
|
+
<!-- UsageSnippet language="typescript" operationID="getJobContacts" method="get" path="/jobcontact/{uuid}.json" -->
|
|
197
200
|
```typescript
|
|
198
201
|
import { ServiceM8 } from "servicem8";
|
|
199
202
|
|
|
@@ -276,6 +279,7 @@ This endpoint requires the following OAuth scope **manage_job_contacts**.
|
|
|
276
279
|
|
|
277
280
|
### Example Usage
|
|
278
281
|
|
|
282
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobContacts" method="post" path="/jobcontact/{uuid}.json" -->
|
|
279
283
|
```typescript
|
|
280
284
|
import { ServiceM8 } from "servicem8";
|
|
281
285
|
|
|
@@ -289,8 +293,8 @@ async function run() {
|
|
|
289
293
|
const result = await serviceM8.jobContacts.updateJobContacts({
|
|
290
294
|
uuid: "9ce8245c-9fb9-4361-8f7f-25eba557ff71",
|
|
291
295
|
jobContact: {
|
|
292
|
-
uuid: "123e4567-
|
|
293
|
-
jobUuid: "123e4567-
|
|
296
|
+
uuid: "123e4567-d515-4544-a2fb-230fe60b802b",
|
|
297
|
+
jobUuid: "123e4567-df39-4b3a-91e8-230fe2600aab",
|
|
294
298
|
},
|
|
295
299
|
});
|
|
296
300
|
|
|
@@ -320,8 +324,8 @@ async function run() {
|
|
|
320
324
|
const res = await jobContactsUpdateJobContacts(serviceM8, {
|
|
321
325
|
uuid: "9ce8245c-9fb9-4361-8f7f-25eba557ff71",
|
|
322
326
|
jobContact: {
|
|
323
|
-
uuid: "123e4567-
|
|
324
|
-
jobUuid: "123e4567-
|
|
327
|
+
uuid: "123e4567-d515-4544-a2fb-230fe60b802b",
|
|
328
|
+
jobUuid: "123e4567-df39-4b3a-91e8-230fe2600aab",
|
|
325
329
|
},
|
|
326
330
|
});
|
|
327
331
|
if (res.ok) {
|
|
@@ -370,6 +374,7 @@ This endpoint requires the following OAuth scope **manage_job_contacts**.
|
|
|
370
374
|
|
|
371
375
|
### Example Usage
|
|
372
376
|
|
|
377
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobContacts" method="delete" path="/jobcontact/{uuid}.json" -->
|
|
373
378
|
```typescript
|
|
374
379
|
import { ServiceM8 } from "servicem8";
|
|
375
380
|
|
|
@@ -23,6 +23,7 @@ This endpoint supports result filtering. For more information on how to filter t
|
|
|
23
23
|
|
|
24
24
|
### Example Usage
|
|
25
25
|
|
|
26
|
+
<!-- UsageSnippet language="typescript" operationID="listJobMaterialBundles" method="get" path="/jobmaterialbundle.json" -->
|
|
26
27
|
```typescript
|
|
27
28
|
import { ServiceM8 } from "servicem8";
|
|
28
29
|
|
|
@@ -100,6 +101,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
100
101
|
|
|
101
102
|
### Example Usage
|
|
102
103
|
|
|
104
|
+
<!-- UsageSnippet language="typescript" operationID="createJobMaterialBundles" method="post" path="/jobmaterialbundle.json" -->
|
|
103
105
|
```typescript
|
|
104
106
|
import { ServiceM8 } from "servicem8";
|
|
105
107
|
|
|
@@ -111,9 +113,9 @@ const serviceM8 = new ServiceM8({
|
|
|
111
113
|
|
|
112
114
|
async function run() {
|
|
113
115
|
const result = await serviceM8.jobMaterialBundles.createJobMaterialBundles({
|
|
114
|
-
uuid: "123e4567-
|
|
115
|
-
materialBundleUuid: "123e4567-
|
|
116
|
-
jobUuid: "123e4567-
|
|
116
|
+
uuid: "123e4567-7bc1-41ff-8048-230febb61b4b",
|
|
117
|
+
materialBundleUuid: "123e4567-cdb4-4bde-bd99-230fe397968b",
|
|
118
|
+
jobUuid: "123e4567-fe7f-4485-8777-230fee0540cb",
|
|
117
119
|
});
|
|
118
120
|
|
|
119
121
|
console.log(result);
|
|
@@ -140,9 +142,9 @@ const serviceM8 = new ServiceM8Core({
|
|
|
140
142
|
|
|
141
143
|
async function run() {
|
|
142
144
|
const res = await jobMaterialBundlesCreateJobMaterialBundles(serviceM8, {
|
|
143
|
-
uuid: "123e4567-
|
|
144
|
-
materialBundleUuid: "123e4567-
|
|
145
|
-
jobUuid: "123e4567-
|
|
145
|
+
uuid: "123e4567-7bc1-41ff-8048-230febb61b4b",
|
|
146
|
+
materialBundleUuid: "123e4567-cdb4-4bde-bd99-230fe397968b",
|
|
147
|
+
jobUuid: "123e4567-fe7f-4485-8777-230fee0540cb",
|
|
146
148
|
});
|
|
147
149
|
if (res.ok) {
|
|
148
150
|
const { value: result } = res;
|
|
@@ -181,6 +183,7 @@ Retrieve a Job Material Bundle
|
|
|
181
183
|
|
|
182
184
|
### Example Usage
|
|
183
185
|
|
|
186
|
+
<!-- UsageSnippet language="typescript" operationID="getJobMaterialBundles" method="get" path="/jobmaterialbundle/{uuid}.json" -->
|
|
184
187
|
```typescript
|
|
185
188
|
import { ServiceM8 } from "servicem8";
|
|
186
189
|
|
|
@@ -258,6 +261,7 @@ Update a Job Material Bundle
|
|
|
258
261
|
|
|
259
262
|
### Example Usage
|
|
260
263
|
|
|
264
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobMaterialBundles" method="post" path="/jobmaterialbundle/{uuid}.json" -->
|
|
261
265
|
```typescript
|
|
262
266
|
import { ServiceM8 } from "servicem8";
|
|
263
267
|
|
|
@@ -271,9 +275,9 @@ async function run() {
|
|
|
271
275
|
const result = await serviceM8.jobMaterialBundles.updateJobMaterialBundles({
|
|
272
276
|
uuid: "6419b5e7-8edd-4c69-9648-b6ed7431256b",
|
|
273
277
|
jobMaterialBundle: {
|
|
274
|
-
uuid: "123e4567-
|
|
275
|
-
materialBundleUuid: "123e4567-
|
|
276
|
-
jobUuid: "123e4567-
|
|
278
|
+
uuid: "123e4567-7bc1-41ff-8048-230febb61b4b",
|
|
279
|
+
materialBundleUuid: "123e4567-cdb4-4bde-bd99-230fe397968b",
|
|
280
|
+
jobUuid: "123e4567-fe7f-4485-8777-230fee0540cb",
|
|
277
281
|
},
|
|
278
282
|
});
|
|
279
283
|
|
|
@@ -303,9 +307,9 @@ async function run() {
|
|
|
303
307
|
const res = await jobMaterialBundlesUpdateJobMaterialBundles(serviceM8, {
|
|
304
308
|
uuid: "6419b5e7-8edd-4c69-9648-b6ed7431256b",
|
|
305
309
|
jobMaterialBundle: {
|
|
306
|
-
uuid: "123e4567-
|
|
307
|
-
materialBundleUuid: "123e4567-
|
|
308
|
-
jobUuid: "123e4567-
|
|
310
|
+
uuid: "123e4567-7bc1-41ff-8048-230febb61b4b",
|
|
311
|
+
materialBundleUuid: "123e4567-cdb4-4bde-bd99-230fe397968b",
|
|
312
|
+
jobUuid: "123e4567-fe7f-4485-8777-230fee0540cb",
|
|
309
313
|
},
|
|
310
314
|
});
|
|
311
315
|
if (res.ok) {
|
|
@@ -349,6 +353,7 @@ In ServiceM8, deleting a record sets its `active` field to `0`. Inactive records
|
|
|
349
353
|
|
|
350
354
|
### Example Usage
|
|
351
355
|
|
|
356
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobMaterialBundles" method="delete" path="/jobmaterialbundle/{uuid}.json" -->
|
|
352
357
|
```typescript
|
|
353
358
|
import { ServiceM8 } from "servicem8";
|
|
354
359
|
|
|
@@ -28,6 +28,7 @@ This endpoint requires the following OAuth scope **read_job_materials**.
|
|
|
28
28
|
|
|
29
29
|
### Example Usage
|
|
30
30
|
|
|
31
|
+
<!-- UsageSnippet language="typescript" operationID="listJobMaterials" method="get" path="/jobmaterial.json" -->
|
|
31
32
|
```typescript
|
|
32
33
|
import { ServiceM8 } from "servicem8";
|
|
33
34
|
|
|
@@ -110,6 +111,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
110
111
|
|
|
111
112
|
### Example Usage
|
|
112
113
|
|
|
114
|
+
<!-- UsageSnippet language="typescript" operationID="createJobMaterials" method="post" path="/jobmaterial.json" -->
|
|
113
115
|
```typescript
|
|
114
116
|
import { ServiceM8 } from "servicem8";
|
|
115
117
|
|
|
@@ -121,12 +123,12 @@ const serviceM8 = new ServiceM8({
|
|
|
121
123
|
|
|
122
124
|
async function run() {
|
|
123
125
|
const result = await serviceM8.jobMaterials.createJobMaterials({
|
|
124
|
-
uuid: "123e4567-
|
|
125
|
-
jobUuid: "123e4567-
|
|
126
|
-
materialUuid: "123e4567-
|
|
126
|
+
uuid: "123e4567-debb-4141-932a-230fe47701fb",
|
|
127
|
+
jobUuid: "123e4567-51b5-4082-a2c4-230fe82795eb",
|
|
128
|
+
materialUuid: "123e4567-028f-44e8-a725-230fe2d6e9db",
|
|
127
129
|
quantity: "<value>",
|
|
128
|
-
taxRateUuid: "123e4567-
|
|
129
|
-
jobMaterialBundleUuid: "123e4567-
|
|
130
|
+
taxRateUuid: "123e4567-e33f-4cd2-ba32-230fea2ae4cb",
|
|
131
|
+
jobMaterialBundleUuid: "123e4567-83fe-4823-850a-230fee52493b",
|
|
130
132
|
});
|
|
131
133
|
|
|
132
134
|
console.log(result);
|
|
@@ -153,12 +155,12 @@ const serviceM8 = new ServiceM8Core({
|
|
|
153
155
|
|
|
154
156
|
async function run() {
|
|
155
157
|
const res = await jobMaterialsCreateJobMaterials(serviceM8, {
|
|
156
|
-
uuid: "123e4567-
|
|
157
|
-
jobUuid: "123e4567-
|
|
158
|
-
materialUuid: "123e4567-
|
|
158
|
+
uuid: "123e4567-debb-4141-932a-230fe47701fb",
|
|
159
|
+
jobUuid: "123e4567-51b5-4082-a2c4-230fe82795eb",
|
|
160
|
+
materialUuid: "123e4567-028f-44e8-a725-230fe2d6e9db",
|
|
159
161
|
quantity: "<value>",
|
|
160
|
-
taxRateUuid: "123e4567-
|
|
161
|
-
jobMaterialBundleUuid: "123e4567-
|
|
162
|
+
taxRateUuid: "123e4567-e33f-4cd2-ba32-230fea2ae4cb",
|
|
163
|
+
jobMaterialBundleUuid: "123e4567-83fe-4823-850a-230fee52493b",
|
|
162
164
|
});
|
|
163
165
|
if (res.ok) {
|
|
164
166
|
const { value: result } = res;
|
|
@@ -202,6 +204,7 @@ This endpoint requires the following OAuth scope **read_job_materials**.
|
|
|
202
204
|
|
|
203
205
|
### Example Usage
|
|
204
206
|
|
|
207
|
+
<!-- UsageSnippet language="typescript" operationID="getJobMaterials" method="get" path="/jobmaterial/{uuid}.json" -->
|
|
205
208
|
```typescript
|
|
206
209
|
import { ServiceM8 } from "servicem8";
|
|
207
210
|
|
|
@@ -284,6 +287,7 @@ This endpoint requires the following OAuth scope **manage_job_materials**.
|
|
|
284
287
|
|
|
285
288
|
### Example Usage
|
|
286
289
|
|
|
290
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobMaterials" method="post" path="/jobmaterial/{uuid}.json" -->
|
|
287
291
|
```typescript
|
|
288
292
|
import { ServiceM8 } from "servicem8";
|
|
289
293
|
|
|
@@ -297,12 +301,12 @@ async function run() {
|
|
|
297
301
|
const result = await serviceM8.jobMaterials.updateJobMaterials({
|
|
298
302
|
uuid: "0afa4bc5-4269-47e6-81bd-da437fd2e097",
|
|
299
303
|
jobMaterial: {
|
|
300
|
-
uuid: "123e4567-
|
|
301
|
-
jobUuid: "123e4567-
|
|
302
|
-
materialUuid: "123e4567-
|
|
304
|
+
uuid: "123e4567-debb-4141-932a-230fe47701fb",
|
|
305
|
+
jobUuid: "123e4567-51b5-4082-a2c4-230fe82795eb",
|
|
306
|
+
materialUuid: "123e4567-028f-44e8-a725-230fe2d6e9db",
|
|
303
307
|
quantity: "<value>",
|
|
304
|
-
taxRateUuid: "123e4567-
|
|
305
|
-
jobMaterialBundleUuid: "123e4567-
|
|
308
|
+
taxRateUuid: "123e4567-e33f-4cd2-ba32-230fea2ae4cb",
|
|
309
|
+
jobMaterialBundleUuid: "123e4567-83fe-4823-850a-230fee52493b",
|
|
306
310
|
},
|
|
307
311
|
});
|
|
308
312
|
|
|
@@ -332,12 +336,12 @@ async function run() {
|
|
|
332
336
|
const res = await jobMaterialsUpdateJobMaterials(serviceM8, {
|
|
333
337
|
uuid: "0afa4bc5-4269-47e6-81bd-da437fd2e097",
|
|
334
338
|
jobMaterial: {
|
|
335
|
-
uuid: "123e4567-
|
|
336
|
-
jobUuid: "123e4567-
|
|
337
|
-
materialUuid: "123e4567-
|
|
339
|
+
uuid: "123e4567-debb-4141-932a-230fe47701fb",
|
|
340
|
+
jobUuid: "123e4567-51b5-4082-a2c4-230fe82795eb",
|
|
341
|
+
materialUuid: "123e4567-028f-44e8-a725-230fe2d6e9db",
|
|
338
342
|
quantity: "<value>",
|
|
339
|
-
taxRateUuid: "123e4567-
|
|
340
|
-
jobMaterialBundleUuid: "123e4567-
|
|
343
|
+
taxRateUuid: "123e4567-e33f-4cd2-ba32-230fea2ae4cb",
|
|
344
|
+
jobMaterialBundleUuid: "123e4567-83fe-4823-850a-230fee52493b",
|
|
341
345
|
},
|
|
342
346
|
});
|
|
343
347
|
if (res.ok) {
|
|
@@ -386,6 +390,7 @@ This endpoint requires the following OAuth scope **manage_job_materials**.
|
|
|
386
390
|
|
|
387
391
|
### Example Usage
|
|
388
392
|
|
|
393
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobMaterials" method="delete" path="/jobmaterial/{uuid}.json" -->
|
|
389
394
|
```typescript
|
|
390
395
|
import { ServiceM8 } from "servicem8";
|
|
391
396
|
|
|
@@ -23,6 +23,7 @@ This endpoint supports result filtering. For more information on how to filter t
|
|
|
23
23
|
|
|
24
24
|
### Example Usage
|
|
25
25
|
|
|
26
|
+
<!-- UsageSnippet language="typescript" operationID="listJobPayments" method="get" path="/jobpayment.json" -->
|
|
26
27
|
```typescript
|
|
27
28
|
import { ServiceM8 } from "servicem8";
|
|
28
29
|
|
|
@@ -100,6 +101,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
100
101
|
|
|
101
102
|
### Example Usage
|
|
102
103
|
|
|
104
|
+
<!-- UsageSnippet language="typescript" operationID="createJobPayments" method="post" path="/jobpayment.json" -->
|
|
103
105
|
```typescript
|
|
104
106
|
import { ServiceM8 } from "servicem8";
|
|
105
107
|
|
|
@@ -111,10 +113,10 @@ const serviceM8 = new ServiceM8({
|
|
|
111
113
|
|
|
112
114
|
async function run() {
|
|
113
115
|
const result = await serviceM8.jobPayments.createJobPayments({
|
|
114
|
-
uuid: "123e4567-
|
|
115
|
-
jobUuid: "123e4567-
|
|
116
|
-
actionedByUuid: "123e4567-
|
|
117
|
-
attachmentUuid: "123e4567-
|
|
116
|
+
uuid: "123e4567-377c-4812-91e4-230feb7f032b",
|
|
117
|
+
jobUuid: "123e4567-8fc0-40df-8125-230fe15a2bbb",
|
|
118
|
+
actionedByUuid: "123e4567-4cb9-41cc-82cc-230fef488a4b",
|
|
119
|
+
attachmentUuid: "123e4567-9211-4a8e-a32f-230fec22290b",
|
|
118
120
|
});
|
|
119
121
|
|
|
120
122
|
console.log(result);
|
|
@@ -141,10 +143,10 @@ const serviceM8 = new ServiceM8Core({
|
|
|
141
143
|
|
|
142
144
|
async function run() {
|
|
143
145
|
const res = await jobPaymentsCreateJobPayments(serviceM8, {
|
|
144
|
-
uuid: "123e4567-
|
|
145
|
-
jobUuid: "123e4567-
|
|
146
|
-
actionedByUuid: "123e4567-
|
|
147
|
-
attachmentUuid: "123e4567-
|
|
146
|
+
uuid: "123e4567-377c-4812-91e4-230feb7f032b",
|
|
147
|
+
jobUuid: "123e4567-8fc0-40df-8125-230fe15a2bbb",
|
|
148
|
+
actionedByUuid: "123e4567-4cb9-41cc-82cc-230fef488a4b",
|
|
149
|
+
attachmentUuid: "123e4567-9211-4a8e-a32f-230fec22290b",
|
|
148
150
|
});
|
|
149
151
|
if (res.ok) {
|
|
150
152
|
const { value: result } = res;
|
|
@@ -183,6 +185,7 @@ Retrieve a Job Payment
|
|
|
183
185
|
|
|
184
186
|
### Example Usage
|
|
185
187
|
|
|
188
|
+
<!-- UsageSnippet language="typescript" operationID="getJobPayments" method="get" path="/jobpayment/{uuid}.json" -->
|
|
186
189
|
```typescript
|
|
187
190
|
import { ServiceM8 } from "servicem8";
|
|
188
191
|
|
|
@@ -260,6 +263,7 @@ Update a Job Payment
|
|
|
260
263
|
|
|
261
264
|
### Example Usage
|
|
262
265
|
|
|
266
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobPayments" method="post" path="/jobpayment/{uuid}.json" -->
|
|
263
267
|
```typescript
|
|
264
268
|
import { ServiceM8 } from "servicem8";
|
|
265
269
|
|
|
@@ -273,10 +277,10 @@ async function run() {
|
|
|
273
277
|
const result = await serviceM8.jobPayments.updateJobPayments({
|
|
274
278
|
uuid: "11677578-ba16-4ac4-b2d7-62ad0de4655c",
|
|
275
279
|
jobPayment: {
|
|
276
|
-
uuid: "123e4567-
|
|
277
|
-
jobUuid: "123e4567-
|
|
278
|
-
actionedByUuid: "123e4567-
|
|
279
|
-
attachmentUuid: "123e4567-
|
|
280
|
+
uuid: "123e4567-377c-4812-91e4-230feb7f032b",
|
|
281
|
+
jobUuid: "123e4567-8fc0-40df-8125-230fe15a2bbb",
|
|
282
|
+
actionedByUuid: "123e4567-4cb9-41cc-82cc-230fef488a4b",
|
|
283
|
+
attachmentUuid: "123e4567-9211-4a8e-a32f-230fec22290b",
|
|
280
284
|
},
|
|
281
285
|
});
|
|
282
286
|
|
|
@@ -306,10 +310,10 @@ async function run() {
|
|
|
306
310
|
const res = await jobPaymentsUpdateJobPayments(serviceM8, {
|
|
307
311
|
uuid: "11677578-ba16-4ac4-b2d7-62ad0de4655c",
|
|
308
312
|
jobPayment: {
|
|
309
|
-
uuid: "123e4567-
|
|
310
|
-
jobUuid: "123e4567-
|
|
311
|
-
actionedByUuid: "123e4567-
|
|
312
|
-
attachmentUuid: "123e4567-
|
|
313
|
+
uuid: "123e4567-377c-4812-91e4-230feb7f032b",
|
|
314
|
+
jobUuid: "123e4567-8fc0-40df-8125-230fe15a2bbb",
|
|
315
|
+
actionedByUuid: "123e4567-4cb9-41cc-82cc-230fef488a4b",
|
|
316
|
+
attachmentUuid: "123e4567-9211-4a8e-a32f-230fec22290b",
|
|
313
317
|
},
|
|
314
318
|
});
|
|
315
319
|
if (res.ok) {
|
|
@@ -353,6 +357,7 @@ In ServiceM8, deleting a record sets its `active` field to `0`. Inactive records
|
|
|
353
357
|
|
|
354
358
|
### Example Usage
|
|
355
359
|
|
|
360
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobPayments" method="delete" path="/jobpayment/{uuid}.json" -->
|
|
356
361
|
```typescript
|
|
357
362
|
import { ServiceM8 } from "servicem8";
|
|
358
363
|
|
|
@@ -28,6 +28,7 @@ This endpoint requires the following OAuth scope **read_job_queues**.
|
|
|
28
28
|
|
|
29
29
|
### Example Usage
|
|
30
30
|
|
|
31
|
+
<!-- UsageSnippet language="typescript" operationID="listJobQueues" method="get" path="/queue.json" -->
|
|
31
32
|
```typescript
|
|
32
33
|
import { ServiceM8 } from "servicem8";
|
|
33
34
|
|
|
@@ -110,6 +111,7 @@ UUID is optional for record creation. If no UUID is supplied, a UUID will be aut
|
|
|
110
111
|
|
|
111
112
|
### Example Usage
|
|
112
113
|
|
|
114
|
+
<!-- UsageSnippet language="typescript" operationID="createJobQueues" method="post" path="/queue.json" -->
|
|
113
115
|
```typescript
|
|
114
116
|
import { ServiceM8 } from "servicem8";
|
|
115
117
|
|
|
@@ -121,7 +123,7 @@ const serviceM8 = new ServiceM8({
|
|
|
121
123
|
|
|
122
124
|
async function run() {
|
|
123
125
|
const result = await serviceM8.jobQueues.createJobQueues({
|
|
124
|
-
uuid: "123e4567-
|
|
126
|
+
uuid: "123e4567-ec43-475e-b210-230fe44393fb",
|
|
125
127
|
});
|
|
126
128
|
|
|
127
129
|
console.log(result);
|
|
@@ -148,7 +150,7 @@ const serviceM8 = new ServiceM8Core({
|
|
|
148
150
|
|
|
149
151
|
async function run() {
|
|
150
152
|
const res = await jobQueuesCreateJobQueues(serviceM8, {
|
|
151
|
-
uuid: "123e4567-
|
|
153
|
+
uuid: "123e4567-ec43-475e-b210-230fe44393fb",
|
|
152
154
|
});
|
|
153
155
|
if (res.ok) {
|
|
154
156
|
const { value: result } = res;
|
|
@@ -192,6 +194,7 @@ This endpoint requires the following OAuth scope **read_job_queues**.
|
|
|
192
194
|
|
|
193
195
|
### Example Usage
|
|
194
196
|
|
|
197
|
+
<!-- UsageSnippet language="typescript" operationID="getJobQueues" method="get" path="/queue/{uuid}.json" -->
|
|
195
198
|
```typescript
|
|
196
199
|
import { ServiceM8 } from "servicem8";
|
|
197
200
|
|
|
@@ -274,6 +277,7 @@ This endpoint requires the following OAuth scope **manage_job_queues**.
|
|
|
274
277
|
|
|
275
278
|
### Example Usage
|
|
276
279
|
|
|
280
|
+
<!-- UsageSnippet language="typescript" operationID="updateJobQueues" method="post" path="/queue/{uuid}.json" -->
|
|
277
281
|
```typescript
|
|
278
282
|
import { ServiceM8 } from "servicem8";
|
|
279
283
|
|
|
@@ -287,7 +291,7 @@ async function run() {
|
|
|
287
291
|
const result = await serviceM8.jobQueues.updateJobQueues({
|
|
288
292
|
uuid: "d5fb31ee-995a-4e2f-8fa6-92068fea17a2",
|
|
289
293
|
queue: {
|
|
290
|
-
uuid: "123e4567-
|
|
294
|
+
uuid: "123e4567-ec43-475e-b210-230fe44393fb",
|
|
291
295
|
},
|
|
292
296
|
});
|
|
293
297
|
|
|
@@ -317,7 +321,7 @@ async function run() {
|
|
|
317
321
|
const res = await jobQueuesUpdateJobQueues(serviceM8, {
|
|
318
322
|
uuid: "d5fb31ee-995a-4e2f-8fa6-92068fea17a2",
|
|
319
323
|
queue: {
|
|
320
|
-
uuid: "123e4567-
|
|
324
|
+
uuid: "123e4567-ec43-475e-b210-230fe44393fb",
|
|
321
325
|
},
|
|
322
326
|
});
|
|
323
327
|
if (res.ok) {
|
|
@@ -366,6 +370,7 @@ This endpoint requires the following OAuth scope **manage_job_queues**.
|
|
|
366
370
|
|
|
367
371
|
### Example Usage
|
|
368
372
|
|
|
373
|
+
<!-- UsageSnippet language="typescript" operationID="deleteJobQueues" method="delete" path="/queue/{uuid}.json" -->
|
|
369
374
|
```typescript
|
|
370
375
|
import { ServiceM8 } from "servicem8";
|
|
371
376
|
|