@tellescope/sdk 0.0.91 → 0.0.94
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/lib/cjs/enduser.d.ts +12 -12
- package/lib/cjs/sdk.d.ts +12 -12
- package/lib/cjs/sdk.js +2 -2
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/session.d.ts +22 -3
- package/lib/cjs/session.d.ts.map +1 -1
- package/lib/cjs/session.js +10 -1
- package/lib/cjs/session.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +227 -37
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/cjs/tests/webhooks_tests.js +2 -9
- package/lib/cjs/tests/webhooks_tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +13 -12
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/sdk.d.ts +12 -12
- package/lib/esm/sdk.js +2 -2
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/session.d.ts +22 -2
- package/lib/esm/session.d.ts.map +1 -1
- package/lib/esm/session.js +10 -1
- package/lib/esm/session.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +227 -37
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/esm/tests/webhooks_tests.js +2 -9
- package/lib/esm/tests/webhooks_tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/sdk.ts +2 -2
- package/src/session.ts +22 -1
- package/src/tests/tests.ts +173 -16
- package/src/tests/webhooks_tests.ts +2 -9
package/src/tests/tests.ts
CHANGED
|
@@ -46,7 +46,6 @@ import {
|
|
|
46
46
|
url_safe_path,
|
|
47
47
|
} from "@tellescope/utilities"
|
|
48
48
|
|
|
49
|
-
|
|
50
49
|
const UniquenessViolationMessage = 'Uniqueness Violation'
|
|
51
50
|
|
|
52
51
|
const host = process.env.TEST_URL || 'http://localhost:8080'
|
|
@@ -399,7 +398,7 @@ const verify_missing_defaults = async <N extends ModelName>({ queries, model, na
|
|
|
399
398
|
await async_test(
|
|
400
399
|
`${o} unavailable for ${name}`,
|
|
401
400
|
() => queryForOperation[o](),
|
|
402
|
-
{ shouldError: true, onError: e => e.message === 'This action is not allowed' },
|
|
401
|
+
{ shouldError: true, onError: e => e.message === 'This action is not allowed' || e.message === 'Inaccessible' },
|
|
403
402
|
)
|
|
404
403
|
}
|
|
405
404
|
}
|
|
@@ -1406,7 +1405,7 @@ const automation_events_tests = async () => {
|
|
|
1406
1405
|
|
|
1407
1406
|
await async_test(
|
|
1408
1407
|
`enterState cannot match updateStateForJourney`,
|
|
1409
|
-
() => sdk.api.
|
|
1408
|
+
() => sdk.api.automation_steps.createOne({
|
|
1410
1409
|
journeyId: journey.id,
|
|
1411
1410
|
event: {
|
|
1412
1411
|
type: "enterState",
|
|
@@ -1421,7 +1420,7 @@ const automation_events_tests = async () => {
|
|
|
1421
1420
|
)
|
|
1422
1421
|
await async_test(
|
|
1423
1422
|
`leaveState cannot match updateStateForJourney`,
|
|
1424
|
-
() => sdk.api.
|
|
1423
|
+
() => sdk.api.automation_steps.createOne({
|
|
1425
1424
|
journeyId: journey.id,
|
|
1426
1425
|
event: {
|
|
1427
1426
|
type: "leaveState",
|
|
@@ -1439,7 +1438,7 @@ const automation_events_tests = async () => {
|
|
|
1439
1438
|
type: 'sendWebhook',
|
|
1440
1439
|
info: { message: 'test' }
|
|
1441
1440
|
}
|
|
1442
|
-
await sdk.api.
|
|
1441
|
+
await sdk.api.automation_steps.createOne({
|
|
1443
1442
|
journeyId: journey.id,
|
|
1444
1443
|
event: {
|
|
1445
1444
|
type: "enterState",
|
|
@@ -1447,7 +1446,7 @@ const automation_events_tests = async () => {
|
|
|
1447
1446
|
},
|
|
1448
1447
|
action: testAction,
|
|
1449
1448
|
})
|
|
1450
|
-
await sdk.api.
|
|
1449
|
+
await sdk.api.automation_steps.createOne({
|
|
1451
1450
|
journeyId: journey.id,
|
|
1452
1451
|
event: {
|
|
1453
1452
|
type: "leaveState",
|
|
@@ -1455,7 +1454,7 @@ const automation_events_tests = async () => {
|
|
|
1455
1454
|
},
|
|
1456
1455
|
action: testAction,
|
|
1457
1456
|
})
|
|
1458
|
-
await sdk.api.
|
|
1457
|
+
await sdk.api.automation_steps.createOne({
|
|
1459
1458
|
journeyId: journey.id,
|
|
1460
1459
|
event: {
|
|
1461
1460
|
type: "enterState",
|
|
@@ -1464,7 +1463,7 @@ const automation_events_tests = async () => {
|
|
|
1464
1463
|
action: testAction,
|
|
1465
1464
|
})
|
|
1466
1465
|
|
|
1467
|
-
await sdk.api.
|
|
1466
|
+
await sdk.api.automation_steps.createOne({
|
|
1468
1467
|
journeyId: journey.id,
|
|
1469
1468
|
event: {
|
|
1470
1469
|
type: "formResponse",
|
|
@@ -1481,7 +1480,7 @@ const automation_events_tests = async () => {
|
|
|
1481
1480
|
|
|
1482
1481
|
await async_test(
|
|
1483
1482
|
`Cannot insert duplicate event/action pair`,
|
|
1484
|
-
() => sdk.api.
|
|
1483
|
+
() => sdk.api.automation_steps.createOne({
|
|
1485
1484
|
journeyId: journey.id,
|
|
1486
1485
|
event: {
|
|
1487
1486
|
type: "enterState",
|
|
@@ -1515,8 +1514,8 @@ const automation_events_tests = async () => {
|
|
|
1515
1514
|
|
|
1516
1515
|
await async_test(
|
|
1517
1516
|
`Automation events triggered correctly`,
|
|
1518
|
-
() => sdk.api.
|
|
1519
|
-
{ onResult: es => es && es.length === 4 && es.filter(a => a.
|
|
1517
|
+
() => sdk.api.automated_actions.getSome({ filter: { enduserId: enduser.id }}),
|
|
1518
|
+
{ onResult: es => es && es.length === 4 && es.filter(a => a.automationStepId === "ONE_TIME").length === 4 }
|
|
1520
1519
|
)
|
|
1521
1520
|
|
|
1522
1521
|
// cleanup
|
|
@@ -1544,7 +1543,7 @@ const form_response_tests = async () => {
|
|
|
1544
1543
|
intakeField: stringIntakeField
|
|
1545
1544
|
}]
|
|
1546
1545
|
})
|
|
1547
|
-
await sdk.api.
|
|
1546
|
+
await sdk.api.automation_steps.createOne({
|
|
1548
1547
|
event: { type: "formResponse", info: { formId: form.id } },
|
|
1549
1548
|
action: { type: 'sendWebhook', info: { message: 'test' } },
|
|
1550
1549
|
})
|
|
@@ -1552,7 +1551,7 @@ const form_response_tests = async () => {
|
|
|
1552
1551
|
const { accessCode } = await sdk.api.form_responses.prepare_form_response({ formId: form.id, enduserId: enduser.id })
|
|
1553
1552
|
await sdk.api.form_responses.submit_form_response({ accessCode, responses: [stringResponse] })
|
|
1554
1553
|
|
|
1555
|
-
const [triggeredAutomation] = await sdk.api.
|
|
1554
|
+
const [triggeredAutomation] = await sdk.api.automated_actions.getSome()
|
|
1556
1555
|
const enduserWithUpdate = await sdk.api.endusers.getOne(enduser.id)
|
|
1557
1556
|
const recordedResponse = await sdk.api.form_responses.getOne({ accessCode })
|
|
1558
1557
|
|
|
@@ -1642,6 +1641,163 @@ const notifications_tests = async () => {
|
|
|
1642
1641
|
])
|
|
1643
1642
|
}
|
|
1644
1643
|
|
|
1644
|
+
const handleAnyError = { shouldError: true, onError: () => true }
|
|
1645
|
+
const passOnAnyResult = { onResult: () => true }
|
|
1646
|
+
|
|
1647
|
+
const role_based_access_tests = async () => {
|
|
1648
|
+
log_header("Role Based Access Tests")
|
|
1649
|
+
const adminId = sdk.userInfo.id
|
|
1650
|
+
const nonAdminId = sdkNonAdmin.userInfo.id
|
|
1651
|
+
|
|
1652
|
+
const e = await sdk.api.endusers.createOne({ email: 'roletest@gmail.com' })
|
|
1653
|
+
|
|
1654
|
+
const adminTicket = await sdk.api.tickets.createOne({ title: 'ticket', enduserId: e.id, owner: adminId })
|
|
1655
|
+
const nonAdminTicket = await sdk.api.tickets.createOne({ title: 'ticket', enduserId: e.id, owner: nonAdminId })
|
|
1656
|
+
const nonAdminTicketNoEnduser = await sdk.api.tickets.createOne({ title: 'ticket', owner: nonAdminId })
|
|
1657
|
+
const ticketCreatedByNonAdmin = await sdkNonAdmin.api.tickets.createOne({ title: 'ticket' })
|
|
1658
|
+
|
|
1659
|
+
const email = await sdk.api.emails.createOne({ enduserId: e.id, logOnly: true, subject: 'blah', textContent: 'blah blah' })
|
|
1660
|
+
const sms = await sdk.api.sms_messages.createOne({ enduserId: e.id, logOnly: true, message: 'blah blah' })
|
|
1661
|
+
const calendarEvent = await sdk.api.calendar_events.createOne({
|
|
1662
|
+
attendees: [{ id: e.id, type: 'enduser' }],
|
|
1663
|
+
durationInMinutes: 50,
|
|
1664
|
+
startTimeInMS: 2000000,
|
|
1665
|
+
title: 'Access Test'
|
|
1666
|
+
})
|
|
1667
|
+
|
|
1668
|
+
const chatRoom = await sdk.api.chat_rooms.createOne({ enduserIds: [e.id ]})
|
|
1669
|
+
const chatMessage = await sdk.api.chats.createOne({ roomId: chatRoom.id, message: 'test chat access' })
|
|
1670
|
+
const chatMessage2 = await sdk.api.chats.createOne({ roomId: chatRoom.id, message: 'test chat access 2' })
|
|
1671
|
+
|
|
1672
|
+
// unassigned to enduser access tests
|
|
1673
|
+
await async_test(
|
|
1674
|
+
`Admin / creator can access enduser without being assigned`,
|
|
1675
|
+
() => sdk.api.endusers.getOne(e.id),
|
|
1676
|
+
{ onResult: e => !!e },
|
|
1677
|
+
)
|
|
1678
|
+
await async_test(
|
|
1679
|
+
`Unassigned non-admin can't access enduser without being assigned`,
|
|
1680
|
+
() => sdkNonAdmin.api.endusers.getOne(e.id), handleAnyError,
|
|
1681
|
+
)
|
|
1682
|
+
await async_test(
|
|
1683
|
+
`non-admin for enduser ticket bad`,
|
|
1684
|
+
() => sdkNonAdmin.api.tickets.getOne(adminTicket.id), handleAnyError,
|
|
1685
|
+
)
|
|
1686
|
+
await async_test(
|
|
1687
|
+
`Non-admin for ticket`, () => sdkNonAdmin.api.tickets.getOne(nonAdminTicketNoEnduser.id), passOnAnyResult
|
|
1688
|
+
)
|
|
1689
|
+
await async_test(
|
|
1690
|
+
`Non-admin for enduser ticket`, () => sdkNonAdmin.api.tickets.getOne(nonAdminTicket.id), passOnAnyResult
|
|
1691
|
+
)
|
|
1692
|
+
await async_test(
|
|
1693
|
+
`Non-admin for own ticket`, () => sdkNonAdmin.api.tickets.getOne(ticketCreatedByNonAdmin.id), passOnAnyResult
|
|
1694
|
+
)
|
|
1695
|
+
await async_test(
|
|
1696
|
+
`Non-admin for tickets`, () => sdkNonAdmin.api.tickets.getSome(), { onResult: ts => ts.length === 3 }
|
|
1697
|
+
)
|
|
1698
|
+
await async_test(
|
|
1699
|
+
`non-admin for email bad`, () => sdkNonAdmin.api.emails.getOne(email.id), handleAnyError,
|
|
1700
|
+
)
|
|
1701
|
+
await async_test(
|
|
1702
|
+
`non-admin for sms bad`, () => sdkNonAdmin.api.sms_messages.getOne(sms.id), handleAnyError,
|
|
1703
|
+
)
|
|
1704
|
+
await async_test(
|
|
1705
|
+
`admin for calendar`, () => sdk.api.calendar_events.getOne(calendarEvent.id), passOnAnyResult,
|
|
1706
|
+
)
|
|
1707
|
+
await async_test(
|
|
1708
|
+
`non-admin for calendar bad`, () => sdkNonAdmin.api.calendar_events.getOne(calendarEvent.id), handleAnyError,
|
|
1709
|
+
)
|
|
1710
|
+
await async_test(
|
|
1711
|
+
`non-admin for chat room bad`, () => sdkNonAdmin.api.chat_rooms.getOne(chatRoom.id), handleAnyError,
|
|
1712
|
+
)
|
|
1713
|
+
await async_test(
|
|
1714
|
+
`non-admin for chat message bad`, () => sdkNonAdmin.api.chats.getOne(chatMessage.id), handleAnyError,
|
|
1715
|
+
)
|
|
1716
|
+
await async_test(
|
|
1717
|
+
`Non-admin for chats`, () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: chatRoom.id } }), handleAnyError,
|
|
1718
|
+
)
|
|
1719
|
+
|
|
1720
|
+
// unassigned update / delete coverage
|
|
1721
|
+
await async_test(
|
|
1722
|
+
`non-admin for enduser ticket update bad`,
|
|
1723
|
+
() => sdkNonAdmin.api.tickets.updateOne(adminTicket.id, { title: 'updated' }), handleAnyError,
|
|
1724
|
+
)
|
|
1725
|
+
await async_test(
|
|
1726
|
+
`non-admin for enduser ticket delete bad`, () => sdkNonAdmin.api.tickets.deleteOne(adminTicket.id), handleAnyError,
|
|
1727
|
+
)
|
|
1728
|
+
await async_test(
|
|
1729
|
+
`non-admin can't delete tickets by default (even with access)`,
|
|
1730
|
+
() => sdkNonAdmin.api.tickets.deleteOne(nonAdminTicket.id), handleAnyError,
|
|
1731
|
+
)
|
|
1732
|
+
|
|
1733
|
+
// set assignees
|
|
1734
|
+
await sdk.api.endusers.updateOne(e.id, { assignedTo: [sdk.userInfo.id, sdkNonAdmin.userInfo.id]})
|
|
1735
|
+
|
|
1736
|
+
// assigned access tests
|
|
1737
|
+
await async_test(
|
|
1738
|
+
`Admin / creator can access enduser while assigned`, () => sdk.api.endusers.getOne(e.id), passOnAnyResult
|
|
1739
|
+
)
|
|
1740
|
+
await async_test(
|
|
1741
|
+
`Unassigned non-admin can access enduser while assigned`, () => sdkNonAdmin.api.endusers.getOne(e.id), passOnAnyResult
|
|
1742
|
+
)
|
|
1743
|
+
await async_test(
|
|
1744
|
+
`non-admin for enduser ticket`, () => sdkNonAdmin.api.tickets.getOne(adminTicket.id), passOnAnyResult,
|
|
1745
|
+
)
|
|
1746
|
+
await async_test(
|
|
1747
|
+
`Non-admin for ticket`, () => sdkNonAdmin.api.tickets.getOne(nonAdminTicketNoEnduser.id), passOnAnyResult
|
|
1748
|
+
)
|
|
1749
|
+
await async_test(
|
|
1750
|
+
`Non-admin for enduser ticket`, () => sdkNonAdmin.api.tickets.getOne(nonAdminTicket.id), passOnAnyResult
|
|
1751
|
+
)
|
|
1752
|
+
await async_test(
|
|
1753
|
+
`Non-admin for tickets`, () => sdkNonAdmin.api.tickets.getSome(), { onResult: ts => ts.length === 4 }
|
|
1754
|
+
)
|
|
1755
|
+
await async_test(
|
|
1756
|
+
`non-admin for email`, () => sdkNonAdmin.api.emails.getOne(email.id), passOnAnyResult,
|
|
1757
|
+
)
|
|
1758
|
+
await async_test(
|
|
1759
|
+
`non-admin for sms`, () => sdkNonAdmin.api.sms_messages.getOne(sms.id), passOnAnyResult,
|
|
1760
|
+
)
|
|
1761
|
+
await async_test(
|
|
1762
|
+
`non-admin for calendar`, () => sdkNonAdmin.api.calendar_events.getOne(calendarEvent.id), passOnAnyResult,
|
|
1763
|
+
)
|
|
1764
|
+
await async_test(
|
|
1765
|
+
`non-admin for chat room`, () => sdkNonAdmin.api.chat_rooms.getOne(chatRoom.id), passOnAnyResult,
|
|
1766
|
+
)
|
|
1767
|
+
await async_test(
|
|
1768
|
+
`non-admin for chat message`, () => sdkNonAdmin.api.chats.getOne(chatMessage.id), passOnAnyResult,
|
|
1769
|
+
)
|
|
1770
|
+
await async_test(
|
|
1771
|
+
`Non-admin for chats`, () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: chatRoom.id } }),
|
|
1772
|
+
{ onResult: cs => cs.length === 2 },
|
|
1773
|
+
)
|
|
1774
|
+
|
|
1775
|
+
|
|
1776
|
+
// update / delete coverage for assigned tickets
|
|
1777
|
+
await async_test(
|
|
1778
|
+
`non-admin assigned enduser ticket update find`,
|
|
1779
|
+
() => sdkNonAdmin.api.tickets.updateOne(adminTicket.id, { title: 'updated' }), passOnAnyResult,
|
|
1780
|
+
)
|
|
1781
|
+
await async_test(
|
|
1782
|
+
`non-admin for enduser ticket delete still bad`, () => sdkNonAdmin.api.tickets.deleteOne(adminTicket.id), handleAnyError,
|
|
1783
|
+
)
|
|
1784
|
+
|
|
1785
|
+
// cleanup
|
|
1786
|
+
await Promise.all([
|
|
1787
|
+
sdk.api.endusers.deleteOne(e.id),
|
|
1788
|
+
sdk.api.tickets.deleteOne(adminTicket.id),
|
|
1789
|
+
sdk.api.tickets.deleteOne(nonAdminTicket.id),
|
|
1790
|
+
sdk.api.tickets.deleteOne(nonAdminTicketNoEnduser.id),
|
|
1791
|
+
sdk.api.tickets.deleteOne(ticketCreatedByNonAdmin.id),
|
|
1792
|
+
sdk.api.emails.deleteOne(email.id),
|
|
1793
|
+
sdk.api.sms_messages.deleteOne(sms.id),
|
|
1794
|
+
sdk.api.calendar_events.deleteOne(calendarEvent.id),
|
|
1795
|
+
sdk.api.chat_rooms.deleteOne(chatRoom.id),
|
|
1796
|
+
sdk.api.chats.deleteOne(chatMessage.id),
|
|
1797
|
+
sdk.api.chats.deleteOne(chatMessage2.id),
|
|
1798
|
+
])
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1645
1801
|
const NO_TEST = () => {}
|
|
1646
1802
|
const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
1647
1803
|
chats: chat_tests,
|
|
@@ -1662,10 +1818,10 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
1662
1818
|
forms: NO_TEST,
|
|
1663
1819
|
form_responses: form_response_tests,
|
|
1664
1820
|
calendar_events: calendar_events_tests,
|
|
1665
|
-
webhooks: NO_TEST, // tested separately
|
|
1666
|
-
|
|
1821
|
+
webhooks: NO_TEST, // tested separately,
|
|
1822
|
+
automation_steps: automation_events_tests,
|
|
1667
1823
|
sequence_automations: NO_TEST,
|
|
1668
|
-
|
|
1824
|
+
automated_actions: NO_TEST,
|
|
1669
1825
|
user_logs: NO_TEST,
|
|
1670
1826
|
user_notifications: notifications_tests,
|
|
1671
1827
|
};
|
|
@@ -1688,6 +1844,7 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
1688
1844
|
await enduserAccessTests()
|
|
1689
1845
|
await generateEnduserAuthTests()
|
|
1690
1846
|
await enduser_session_tests()
|
|
1847
|
+
await role_based_access_tests()
|
|
1691
1848
|
} catch(err) {
|
|
1692
1849
|
console.error("Failed during custom test")
|
|
1693
1850
|
console.error(err)
|
|
@@ -198,22 +198,15 @@ const test_automation_webhooks = async () => {
|
|
|
198
198
|
const journey = await sdk.api.journeys.createOne({
|
|
199
199
|
title: "Automations Test",
|
|
200
200
|
defaultState: state1,
|
|
201
|
-
states: [
|
|
202
|
-
{ name: state1, priority: 'N/A' },
|
|
203
|
-
{ name: state2, priority: 'N/A' },
|
|
204
|
-
]
|
|
205
201
|
})
|
|
206
202
|
|
|
207
203
|
const testAction: AutomationAction = {
|
|
208
204
|
type: 'sendWebhook',
|
|
209
205
|
info: { message: testMessage }
|
|
210
206
|
}
|
|
211
|
-
await sdk.api.
|
|
207
|
+
await sdk.api.automation_steps.createOne({
|
|
212
208
|
journeyId: journey.id,
|
|
213
|
-
event: {
|
|
214
|
-
type: "enterState",
|
|
215
|
-
info: { state: state1, journeyId: journey.id }
|
|
216
|
-
},
|
|
209
|
+
event: { type: "onJourneyStart", info: {} },
|
|
217
210
|
action: testAction,
|
|
218
211
|
})
|
|
219
212
|
|