All notable changes to this project will be documented in this file. See standard-version for commit guidelines.
7.3.0 (2023-12-10)
- add generic title/content notice type (#1677) (adb168d)
- use title/content notice type with envvar for rewired shutdown (#1678) (decedcc)
7.2.0 (2023-11-14)
7.2.0-rc.0 (2023-09-12)
- view messaging service name on campaign details page for orgs with multiple msg services (#1623) (652b80c)
- start-campaign-button: warn before starting campaign without survey responses (#1616) (9bf1c57)
- indicate new campaign id(s) from template (#1629) (0af2c75)
- campaign-interaction-steps: add save button to top of section (#1610) (0d035af)
- emails: add email template with wrapper (#1588) (94fc8fa)
- take campaign to edit link for create from template (#1673) (81ec582)
- update-dump: add cap add flag (#1668) (46ddcb1)
- create campaign speed dial open/close behavior (#1627) (d8428e3)
- link toll free pricing (#1653) (37efeac)
- users: set preferred notification frequency on signup (#1630) (740e865)
- telco errors: add 4785 error code (#1667) (053ea74)
- add docker-compose instructions for local postgres (#1599) (fdc0793)
- run update schema dump (#1666) (68fb0fa)
7.1.0 (2023-08-02)
- canned responses: default to alphabetical sorting (#1647) (7d53908)
- canned responses: handle canned response moving up in the list (#1646) (0b9d2de)
- csv mapping: add autocomplete label (#1649) (480d078)
- csv mapping: rerender on file upload (#1650) (2c372ce)
- canned responses: update form types (#1648) (b7238f0)
- Add changelog for missing 6.1.3 release (#1590) (15a8122)
7.0.0 (2023-07-26)
7.0.0-rc.1 (2023-07-25)
7.0.0-rc.0 (2023-07-13)
- allow uploading arbitrary csvs (#1540)
- add apollo graphql armor (#1535) (36a79c9)
- canned responses: allow reordering display order (#1551) (9312d5f)
- canned responses: clarify instructional copy (#1571) (862a354)
- allow uploading arbitrary csvs (#1540) (9266776)
- use more accurate variable naming (#1576) (21c7138)
- notification frequency: update default to DAILY (#1585) (e76ade3)
- telco errors: update with latest known descriptions (#1635) (e3b9e78)
6.4.0 (2023-07-04)
6.4.0-rc.0 (2023-06-28)
- add july copy updates (#1620) (bc5d7eb)
- people: update remove users warning (#1605) (7a59705)
- clarify shutdown email copy (#1624) (5c45c3e)
6.3.3 (2023-06-13)
6.3.2 (2023-06-08)
- 10dlc: revert notification article link (cbc054e)
6.3.1 (2023-06-08)
6.3.1-rc.0 (2023-05-24)
6.3.0 (2023-05-23)
6.3.0-rc.1 (2023-05-17)
6.3.0-rc.0 (2023-05-17)
6.2.0 (2023-05-16)
6.2.0-rc.2 (2023-05-10)
6.2.0-rc.1 (2023-05-08)
6.2.0-rc.0 (2023-03-14)
- remove dead code (#1575) (f84e210)
- replace chip-input with autocomplete (#1538) (d49f354)
- replace useless map with copy-on-destructure (#1574) (d13a4e7)
- knex: resolve to v.2.3.0 (#1539) (4c68e7e)
- message response: convert to functional component (#1541) (b8b68dd)
6.1.3 (2023-04-21)
- van configuration reading the wrong query (3935821)
6.1.2 (2023-02-27)
6.1.1 (2023-02-15)
6.1.0 (2023-02-06)
- instrumentation: Move metrics middleware earlier in the stack to capture more of the call cycle (#1552) (338b241)
6.1.0-rc.1 (2023-01-03)
- allow cloning, and deleting template campaigns (#1523) (9348046)
- don't hide campaign create options on removing focus (#1522) (629a86d), closes #1477
- message review: show tag and tagger details (#1530) (7d9b801)
- bulk script editor: tidy full script version replacement preview (#1528) (89f548d)
- message review: filter opt outs by organization (#1527) (c493e52)
- release: 6.1.0-rc.0 (2b6d583)
- standarize components / containers locations (#1537) (fbc59d6)
- mui v4: update icon menu to v4 button + menu (#1517) (77ba0c0)
- script editor: move opt out language warning into a dialog (#1521) (5115603)
6.1.0-rc.0 (2023-01-03)
- allow cloning, and deleting template campaigns (#1523) (9348046)
- don't hide campaign create options on removing focus (#1522) (629a86d), closes #1477
- message review: show tag and tagger details (#1530) (7d9b801)
- bulk script editor: tidy full script version replacement preview (#1528) (89f548d)
- message review: filter opt outs by organization (#1527) (c493e52)
- standarize components / containers locations (#1537) (fbc59d6)
- mui v4: update icon menu to v4 button + menu (#1517) (77ba0c0)
- script editor: move opt out language warning into a dialog (#1521) (5115603)
6.0.0 (2022-12-13)
6.0.0-rc.1 (2022-12-06)
6.0.0-rc.0 (2022-11-03)
- add missing space and period (#1507) (86d6a9b)
- debounce min value check (#1502) (6ffba4a)
- disable campaign overlap deletion for van source (#1504) (2d90d71)
- exclude opt outs from initials to send count (#1505) (d73a429)
- remove opt-out collapse/expand behavior (#1509) (8dd2a13)
- show all timezone options in dropdown (#1508) (301e25d)
- autosend: add autosend limit field to unstarted rows (#1506) (0d7ff3f)
- autosending: calculate limit at execution time (#1503) (c9f9ae9)
- mui v4: update divider to mui v4 (#1515) (082cdd8)
- mui v4: update snackbar to v4 (#1513) (97b16f2)
- mui v4: upgrade paper to mui v4 (#1514) (47fa4b4)
- schema.js into resolvers and mutations file (#1510) (5bb6113)
5.1.0 (2022-11-03)
5.1.0-rc.2 (2022-11-01)
5.1.0-rc.1 (2022-11-01)
5.1.0-rc.0 (2022-10-31)
- autosending: prevent "Queue" user action for orgs without mps (#1489) (e41bc51)
- disable autosending page if no organization mps (#1479) (3b5a99b)
- handle case where underlying assignment no longer exists (#1488) (1c611bb)
- restrict campaign templates to organization (#1478) (19b14de)
- skip queuing organizations with 0 mps (#1487) (b6ba4bd)
- use determinate progress bar type (#1485) (b040337)
- offline: add a link to the status page (#1480) (ce6ddfd)
- remove types from gql schema (#1475) (afc0d7c)
- update fillfactor to reasonable value (#1499) (fb08b3f)
- changelog: add refactor and perf commits to backend section (#1501) (0bc613a)
5.0.0 (2022-10-31)
- update schema-dump.sql (9d0b926)
5.0.0-rc.1 (2022-10-28)
5.0.0-rc.0 (2022-10-20)
- van: use real time sync (#1442) (fc1dcaf)
- support per-campaign autosend limit (#1473) (ceb7327)
- support setting default messaging service for organization (#1455) (213f678)
- fix eslint config (#1481) (6ad9ae8)
- media attachment false positives (#1468) (3232d9a)
- show no campaigns message only when not loading (#1474) (85b359c)
- mui: update avatar and popover (#1464) (3922db1)
- mui: update progress indicators to mui v4 (#1467) (f50c787)
- mui: update Stepper to MUI v4 (#1466) (72b4b31)
- mui: upgrade badges (#1463) (69f6fc0)
- mui: upgrade dialogs (#1461) (147e63e)
- mui: upgrade floating action buttongs (#1459) (729df25)
- mui: upgrade tabs (#1460) (0b86936)
4.39.1 (2022-10-19)
4.39.1-rc.1 (2022-10-17)
4.39.1-rc.0 (2022-10-17)
- queue-autosend-organization-initials: dont mark other orgs campaigns complete (#1469) (a8c8d2a)
- fix UI states for campaign and texter (#1454) (fb1b0ef)
- support script preview for template campaigns (#1451) (78ce3b8)
- truncate day based on contact's timezone (#1449) (15021da)
4.39.0 (2022-10-12)
4.39.0-rc.2 (2022-10-06)
4.39.0-rc.1 (2022-10-06)
- add database backed per organization autosending (#1446) (d856ae2)
- support importing contacts from arbitrary csv url (#1434) (1d85657)
4.39.0-rc.0 (2022-09-30)
- trollbot: fix token search (#1445) (db985b2)
- add messaging service sids to org shutdown email (#1440) (3b16274)
- fix escalate badge count (#1439) (f0b1e7b)
- reset dialog values when submitting (#1444) (c537ea4)
4.38.0 (2022-09-29)
4.38.0-rc.1 (2022-09-26)
- export-campaign: allow null campaign variables (#1431) (2722597)
- add bandwidth 4470 error code (#1428) (6f30c85)
4.38.0-rc.0 (2022-09-21)
- opt outs: allow exporting all or selected campaigns (#1417) (6ee1b1f)
- add opt outs page, and allow opt in (#1395) (f309f88)
- display campaign variable values in script previews (#1412) (c3c479b)
4.37.1 (2022-09-20)
4.37.1-rc.1 (2022-09-19)
4.37.1-rc.0 (2022-09-16)
- fix integration cell click handling (#1413) (a654de0)
- handle external_id field correctly in scripts (#1414) (64b5840)
4.37.0 (2022-09-15)
4.37.0-rc.2 (2022-09-14)
- remove readiness check for texters section (#1418) (9fd7822)
- swap replies and convo colors (#1419) (4380c40)
4.37.0-rc.1 (2022-09-12)
4.37.0-rc.0 (2022-09-02)
4.36.0 (2022-08-31)
4.36.0-rc.3 (2022-08-29)
4.36.0-rc.2 (2022-08-26)
4.36.0-rc.1 (2022-08-26)
4.36.0-rc.0 (2022-08-24)
- allow superadmins to manage organizations (#1348) (cd665d2)
- autosend: add basic autosend page (#1350) (b6a6325)
- superadmin: allow managing other superadmins (#1347) (d0c98dc)
- add a superadmin page, add people management (#1334) (fcb6004)
4.35.1 (2022-08-17)
4.35.0 (2022-08-17)
4.35.0-rc.1 (2022-08-16)
- allow admins to enumerate messaging services (#1345) (8a75df7)
- interactions: dont show duplicate warnings (#1346) (32bb35b)
4.35.0-rc.0 (2022-08-08)
- bulk editor: confirm changes before updating (#1329) (913faa9)
- texter conversation: update button in line with design doc (#1340) (0114bad)
- store and export filtered contacts (#1320) (058cd03)
4.34.1 (2022-08-07)
4.34.0 (2022-08-03)
4.34.0-rc.2 (2022-07-28)
4.34.0-rc.1 (2022-07-26)
4.34.0-rc.0 (2022-07-25)
- fix saving empty team priority (#1327) (77fa660)
- queue_sync_campaign_to_van: use run at (#1322) (35e30c6)
- advance from conversation on unassignable tag (#1312) (2879523)
- handle response errors correctly (#1314) (3d7f588)
4.33.0 (2022-07-13)
4.33.0-rc.5 (2022-07-11)
- set initial values of message filters reading (#1305) (ac7d87a)
- campaign builder: return nullable messaging services (#1315) (5870987)
- disable restricting to teams when no teams added (#1313) (025c908)
- fix contact filters being a letter behind (#1304) (45afd80)
- mark landlines as unfiltered on new contacts upload (#1290) (a8e395a)
4.33.0-rc.4 (2022-06-30)
- message-review: include campaign id in title search (#1301) (30faba8)
- message-review: listen for clicks on entire card header (#1299) (a294dd1)
4.33.0-rc.3 (2022-06-26)
- support overriding van contact type (#1295) (0ca4e1d), closes #1277
- support setting custom campaign export chunk size (#1296) (a0518cb)
- message review: use url to store filters (#1288) (5c74c82)
4.33.0-rc.2 (2022-06-24)
- campaign builder: allow picking messaging service for campaign (#1264) (b26d880)
- default texting timezone for organization (#1279) (8ce77ef)
- display tailored message for do not assign texters (#1280) (0eb01a6), closes #828
- queue-autosend-initials: fix row_number order by conflict (#1291) (e0d7ad0)
- editing question response should update value in UI (#1281) (5a3d814)
4.33.0-rc.1 (2022-06-21)
- fix superadmin login (#1272) (09814e2)
- authz: handle supervol permission errors (#1271) (de0a673)
- campaign stats: use authz for button rendering (#1278) (7a46226)
4.33.0-rc.0 (2022-06-14)
4.33.0-0 (2022-06-09)
- add bandwidth error codes (#1263) (8aae1f0)
- allow campaign to pick messaging service (#1260) (2c02b8e)
- message-review: fix passing user ID (#1267) (1226abb)
- fix return type in campaign group functions (#1262) (7739b17)
- improve trollbot performance (#1265) (c4e897d)
4.32.2 (2022-06-07)
4.32.1 (2022-06-06)
4.32.0 (2022-06-05)
- fix post-login redirect behavior for local auth (#1256) (1cb2b60)
- show notification settings alert only on user edit (#1257) (db5dbac)
- autosend: return on expected errors (#1248) (e0c8980)
- autosending: preserve run_at when queuing messages (#1255) (3dcf483)
- external-system: fix displaying errors (#1254) (fa8558f)
- external-system: fix saving credentials (#1253) (db03817)
4.31.0 (2022-06-01)
- autosend: dont queue opted out contacts for sending (#1244) (8497219)
- fix assignment control layout (#1236) (1bab2c1)
4.30.1 (2022-05-25)
4.30.0 (2022-05-25)
- add campaign variable management (#1231) (a959b81)
- add canned responses to message review (#1142) (50f9a37)
- add contact name and campaign title to message review (#1141) (3b19f08)
- add option to create campaign(s) from template (#1224) (1354599)
- add script styling to interaction step (#1227) (fc66542)
- add template campaigns (#1214) (0afa835)
- campaign-builder: add basic mode (#1209) (d6a434f)
- notifications: allow texters to configure notification frequency (#1131) (8800ee2)
- add script preview to message review (#1059) (712c5e9)
- allow collapsing interaction steps (#1137) (f008792)
- allow navigation to campaign stats page from campaign edit page (#1139) (2702100)
- allowing suspending users (#1116) (8099f8c)
- autosend initials (#1128) (842ea75)
- support user session management (#1157) (96f88f3)
- use worker to process notifications (#1126) (8f1d5e6)
- order autosend contacts by campaign id first (#1235) (5a50ffb)
- campaign-variables: fix display order rename (b568757)
- add campaign id to conversation rows (#1148) (f0de0c4), closes #831
- cleanup autosending (#1186) (635a7f3)
- disable secure cookies (#1192) (a106173)
- don't create a contacts upload job if contacts doesn't exist (#1147) (b2266ff), closes #678
- fix check for blank email (94e5848)
- fix how label is passed to chip (#1203) (d932b5a)
- fix scripts tooltip (#1226) (2a58185)
- passport: standardize on spoke user (#1215) (dd56bd3)
- template-campaigns: add missing resolver (#1225) (0c992e6)
- bring assign loop into alignment with assignment targets (#1204) (3307e2b)
- cleanup autosending counts (#1202) (b0172ca)
- fix csv header validation (#1190) (218671f)
- fix errors in down migrations (#1168) (001f8de)
- fix fetching canned responses by texters (#1150) (63dde87)
- fix permissions in script preview url resolver (#1127) (167ba91)
- make opt out button orange again (#1206) (a1f6fac)
- match mui v0 styling with v4 buttons (#1223) (77e54ae)
- pass assignmentPriority as Int (#1195) (8f1d760)
- remove header element styling from interaction step titles (#1149) (00db0bb)
- remove quotes around campaign preview script values (#1172) (633d900)
- require returning non null campaign stats (#1222) (0046f31)
- rewrite campaign preview (#1173) (c47feaf)
- turn off initial autoassignment for campaigns that are autosending (#1208) (2c154a3)
- mui: ignore tooltips within gsform (#1188) (e036dbb)
- session: handle suspension check when no user is found (#1212) (825cb5d)
- throw error and retry on empty email (#1187) (edd01eb)
- update spoke portal hostname (1de8d14)
- use autocomplete for texter select (#1210) (490a577)
4.29.0 (2022-05-25)
- add campaign variable management (#1231) (a959b81)
- add canned responses to message review (#1142) (50f9a37)
- add contact name and campaign title to message review (#1141) (3b19f08)
- add option to create campaign(s) from template (#1224) (1354599)
- add script styling to interaction step (#1227) (fc66542)
- add template campaigns (#1214) (0afa835)
- campaign-builder: add basic mode (#1209) (d6a434f)
- notifications: allow texters to configure notification frequency (#1131) (8800ee2)
- add script preview to message review (#1059) (712c5e9)
- allow collapsing interaction steps (#1137) (f008792)
- allow navigation to campaign stats page from campaign edit page (#1139) (2702100)
- allowing suspending users (#1116) (8099f8c)
- autosend initials (#1128) (842ea75)
- support user session management (#1157) (96f88f3)
- use worker to process notifications (#1126) (8f1d5e6)
- order autosend contacts by campaign id first (#1235) (5a50ffb)
- campaign-variables: fix display order rename (b568757)
- add campaign id to conversation rows (#1148) (f0de0c4), closes #831
- cleanup autosending (#1186) (635a7f3)
- disable secure cookies (#1192) (a106173)
- don't create a contacts upload job if contacts doesn't exist (#1147) (b2266ff), closes #678
- fix check for blank email (94e5848)
- fix how label is passed to chip (#1203) (d932b5a)
- fix scripts tooltip (#1226) (2a58185)
- passport: standardize on spoke user (#1215) (dd56bd3)
- template-campaigns: add missing resolver (#1225) (0c992e6)
- bring assign loop into alignment with assignment targets (#1204) (3307e2b)
- cleanup autosending counts (#1202) (b0172ca)
- fix csv header validation (#1190) (218671f)
- fix errors in down migrations (#1168) (001f8de)
- fix fetching canned responses by texters (#1150) (63dde87)
- fix permissions in script preview url resolver (#1127) (167ba91)
- make opt out button orange again (#1206) (a1f6fac)
- match mui v0 styling with v4 buttons (#1223) (77e54ae)
- pass assignmentPriority as Int (#1195) (8f1d760)
- remove header element styling from interaction step titles (#1149) (00db0bb)
- remove quotes around campaign preview script values (#1172) (633d900)
- require returning non null campaign stats (#1222) (0046f31)
- rewrite campaign preview (#1173) (c47feaf)
- turn off initial autoassignment for campaigns that are autosending (#1208) (2c154a3)
- mui: ignore tooltips within gsform (#1188) (e036dbb)
- session: handle suspension check when no user is found (#1212) (825cb5d)
- throw error and retry on empty email (#1187) (edd01eb)
- update spoke portal hostname (1de8d14)
- use autocomplete for texter select (#1210) (490a577)
4.28.1 (2022-05-21)
- fix check for blank email (94e5848)
4.28.0 (2022-05-21)
- template-campaigns: add missing resolver (#1225) (0c992e6)
- match mui v0 styling with v4 buttons (#1223) (77e54ae)
- require returning non null campaign stats (#1222) (0046f31)
- turn off initial autoassignment for campaigns that are autosending (#1208) (2c154a3)
- passport: standardize on spoke user (#1215) (dd56bd3)
4.27.0 (2022-05-19)
- session: handle suspension check when no user is found (#1212) (825cb5d)
- bring assign loop into alignment with assignment targets (#1204) (3307e2b)
- cleanup autosending counts (#1202) (b0172ca)
- fix csv header validation (#1190) (218671f)
- fix how label is passed to chip (#1203) (d932b5a)
- make opt out button orange again (#1206) (a1f6fac)
- pass assignmentPriority as Int (#1195) (8f1d760)
- rewrite campaign preview (#1173) (c47feaf)
- use autocomplete for texter select (#1210) (490a577)
4.26.3 (2022-05-13)
4.26.2 (2022-05-13)
4.26.1 (2022-05-13)
4.26.0 (2022-05-13)
- cleanup autosending (#1186) (635a7f3)
- fix errors in down migrations (#1168) (001f8de)
- remove quotes around campaign preview script values (#1172) (633d900)
- throw error and retry on empty email (#1187) (edd01eb)
4.25.0 (2022-05-02)
4.24.1 (2022-04-26)
- add campaign id to conversation rows (#1148) (f0de0c4), closes #831
- don't create a contacts upload job if contacts doesn't exist (#1147) (b2266ff), closes #678
- fix fetching canned responses by texters (#1150) (63dde87)
- remove header element styling from interaction step titles (#1149) (00db0bb)
- update spoke portal hostname (1de8d14)
4.24.0 (2022-04-12)
- add canned responses to message review (#1142) (50f9a37)
- add contact name and campaign title to message review (#1141) (3b19f08)
- allow collapsing interaction steps (#1137) (f008792)
- allow navigation to campaign stats page from campaign edit page (#1139) (2702100)
4.23.0 (2022-03-30)
4.22.1 (2022-03-24)
4.22.0 (2022-03-24)
4.21.1 (2022-03-18)
- fix copy campaign statement (0425b1f)
4.21.0 (2022-03-18)
- allow navigation to previous and next campaign through campaign page (#1111) (7d875e0), closes #1087
- optout: automatically optout for common optout language (#1110) (74b5bd9), closes #1089
- ensure non-null value for campaign isApproved (#1119) (5c3b7c4)
- fix display of survey questions (#1122) (8b0d3e0)
- handle null campaign groups for supervolunteer role (#1121) (e7b109d)
4.20.0 (2022-03-05)
- add superadmin approval for campaigns (#1106) (dbb2882)
- message filter: allow searching using cell phone number (#1090) (8c08a2c)
- delete due date button clearing up other fields (#1103) (a1a9a4b), closes #1101
- disable reassign all without target texter(s) (#1094) (fe126d1)
- fix design of survey question select elements (#1091) (aa6a844)
- fix use of react contexts (#1107) (51f4012)
- handle component lifecycle correctly (#1099) (00a408a)
- handle overdue early return case (#1096) (1ee2645)
- update deps to fix stream handling error (#1104) (b6eb0cb)
4.19.1 (2022-02-26)
- fall back to null on NaN (8642409)
4.19.0 (2022-02-25)
- convert client-side id args from int to string (#1085) (8c0e83c)
- enable link replacement only if envvar is enabled (#1088) (4ec2f16)
4.18.1 (2022-02-20)
4.18.0 (2022-02-19)
- script: add indicator of message type, check if attachment is image (#1076) (0171a1e), closes #874
- set page title based on navigation (#1049) (998a3e8)
- update apollo-client (#1027) (7931f4c), closes /github.com/apollographql/apollo-client/issues/6760#issuecomment-668188727
- convert string to float (#1074) (45accae)
- fix assignment control (#1062) (a07cdac)
- fix authzprovider hook (#1082) (e6ff8e4)
- fix create org using the wrong types (#1069) (7e45ca2)
- navigate to login only on error fetching roles (#1079) (d9e1e3f)
- 10dlc: update 10dlc deadlines (#1075) (a96caee)
- remove undesired bolding (#1055) (67c49ec)
- update disclaimer copy (#1054) (47be131)
4.17.2 (2022-01-27)
4.17.1 (2022-01-21)
4.17.0 (2022-01-18)
- clarify that contact filtering is optional (#1045) (cb77b51)
- leave autoassign disabled for copied campaigns (#1040) (bb6d14b)
- use title case for name fields in scripts (#1042) (0b13999), closes #1038
4.16.1 (2022-01-06)
4.16.0 (2021-12-31)
4.15.4 (2021-12-03)
- filter-landlines: remove voips (#1029) (a5f6450)
- van: add warning about van-supplied fields (#1026) (9e4638c)
- van: include all van fields from export (#1023) (1df9604)
4.15.3 (2021-11-02)
- change mode column type to text (#1022) (9bca5e6)
- revert apollo update (#1024) (bb4f752)
- update 10dlc registration dates (#1021) (7de8cd7)
4.15.2 (2021-10-27)
- apollo: fix cache manipulation (108cb76)
4.15.1 (2021-10-26)
4.15.0 (2021-10-14)
4.14.1 (2021-09-26)
4.14.0 (2021-09-24)
4.13.1 (2021-09-24)
- update path name (91173e3)
4.13.0 (2021-09-22)
4.12.1 (2021-09-18)
- resolve id column ambiguity (0b6aab8)
4.12.0 (2021-09-08)
4.11.0 (2021-09-02)
4.10.2 (2021-08-26)
4.10.1 (2021-08-23)
- slack: set unknown phone number for empty string (#999) (3930e16)
- display gsform errors (#998) (0f55774)
4.10.0 (2021-08-06)
- disambiguate deliverability stats (#996) (5fb4b71)
- use correct date format for luxon (#994) (66cefef)
4.9.2 (2021-07-22)
- van: fix max page size for fetching van saved lists (f670a37)
4.9.1 (2021-07-08)
- fix inconsistent landline filtration (d2c523c)
- van: fix sync for contacts with both opt out and responses (#953) (374c49c)
4.9.0 (2021-06-29)
4.8.0 (2021-06-12)
4.7.6 (2021-06-11)
- update copy for filter landlines section (#982) (700df7b), closes #965
- texters: assign from pool of all unassigned conversations (#973) (774197f), closes #964
4.7.5 (2021-06-02)
- fix message review infinite loop (#971) (f758c35)
- fix texters section readiness check (#972) (14a738b)
- texters: fix assignment bugs (#966) (b22d4e6)
- van: add deprecation warning for disconnected result code (#969) (3bee78a)
- van: send phone object (#968) (786661e)
- van: update pgc-ngp-van for larger page size (#970) (9e30436)
4.7.4 (2021-05-19)
4.7.3 (2021-05-12)
- force fetching fresh data (#958) (c0235ff)
- harden clipboard usage (#954) (096e7f6)
- only show paste-over-block button for root step (#957) (20aa387)
4.7.2 (2021-05-04)
4.7.1 (2021-04-30)
- campaign-texters: fix and simplify manual texter assignment (#856) (951c688)
- trollbot: prevent adding empty tokens (7a7bba5)
- trollbot: support multiple regconfigs (#947) (96629ad), closes #930
- ux: make dialog text color readable again (f528faf)
4.7.0 (2021-04-28)
4.6.0 (2021-04-20)
- assemble numbers process delivery report (#941) (85db4ac)
- fix admin navigation menu rotation in firefox (#943) (efdb649)
4.5.1 (2021-04-14)
- fix typo in toggle label (ebc58dd)
4.5.0 (2021-04-13)
- p2: add toggle for excluding newer contacts (#939) (ce72ef7)
- add button to remove all users from organization (#937) (274710c)
- allow changing organization name (#938) (461dbd8)
4.4.0 (2021-03-24)
- add campaign ID and contact name to troll alarm details (#931) (d793226)
- support even more branding options (#923) (18acce0)
- canned-responses: restore dialog to full width (#932) (fe66b89)
- trollbot: prevent adding invalid tokens (#928) (6e4e093)
4.3.0 (2021-03-23)
4.2.4 (2021-03-17)
- manual-assignment: remove unused expensive query (#926) (f4dc58f)
- remove timeout fetching instance settings (#925) (46e1979)
4.2.3 (2021-03-16)
4.2.2 (2021-03-12)
- disable unsupported copy/paste block rather than crashing (#918) (480d24d)
- fix crash editing interaction step (#919) (6b41cd8)
- fix texter crash when clearing a survey response (#920) (f5d3381)
4.2.1 (2021-03-11)
4.2.0 (2021-03-04)
- set answer actions to correct value (#906) (1c934b4)
- update slack for header-based authentication (#903) (28a61c3)
4.1.0 (2021-02-27)
- pass props directly when HOC contexts are not available (#898) (82aba0e)
- update refs usage (#897) (5e1db7a)
4.0.2 (2021-02-23)
4.0.1 (2021-02-18)
- force update of fs-capacitor to fix file upload (54954e0)
4.0.0 (2021-02-17)
- Support has been dropped for Node v8, v10, and v12.
- Support for Mailgun has been dropped due to no suitable Node library.
- worker: fix lock on semaphore and add early return (#891) (0427634)
- use structured logging for worker migrations (#888) (2a12c01)
3.15.5 (2021-02-10)
3.15.4 (2021-02-09)
3.15.3 (2021-02-03)
- delete old interaction step tree on save of new tree (#882) (620e5aa)
- use single source of truth for interaction steps (#878) (2c364f4)
3.15.2 (2021-01-29)
- make makeTree() deterministic (#880) (de26bf6)
- datatables: force latest material-ui to fix rows per page dropdown (#876) (a6cc048)
- deliverability-stats: ensure consistent null return type (#877) (18ffa4f)
3.15.1 (2021-01-26)
- fix email notifications on campaign start (#875) (a56adcc)
- handle mixed argument types (#870) (f29e78b)
- parse count as integer (#872) (32c36c9)
3.15.0 (2021-01-25)
- van: fall back to 'canvassed' result code for 'messaged' contacts (#867) (4bd6d7e)
- vanoperationmode: remove operation mode key from external system mutations (#868) (1cfef22)
3.14.3 (2021-01-21)
- add getSendBeforeUtc util to fix sendBefore (#864) (f70c845)
- fix error count summation (#863) (42cd11a)
- pass membership id, not user id, to mutation (#866) (bc04b78)
- sendbuttonarrow: pin the send arrow to the top of the message field (#859) (2fc088b)
3.14.2 (2021-01-20)
- fall back to provided zone name (b9e1e79)
3.14.1 (2021-01-20)
3.14.0 (2021-01-19)
- users: add superadmin option to role selection (#850) (177350b)
- per organization message limits (#857) (8c61cf0)
- campaign-detail-page: add message errors (#824) (5b948b0)
- van: add operation mode select to integration config (#813) (b4a1028)
- searchable people (#819) (45a887d)
- admincampaignedit: fix use of lodash/pick in checkSectionSaved (#852) (976e099), closes #851
- campaignteamsform: remove mutation of props (#825) (448d1e4)
- timezones: map deprecated tzs to canonical tzs (#855) (4fb2ac8), closes #853
- user: unique email addresses with migration (#821) (a9cd813)
3.13.1 (2021-01-05)
3.13.0 (2020-12-28)
3.12.0 (2020-12-21)
3.11.0 (2020-12-16)
- revert query argument to use gql query argument (#810) (640f50c), closes #726
- integrations: pass correct value to binding (8c1eea4)
- switchboard: update client lib to support sendBefore param (9e0914d), closes #774
3.10.1 (2020-12-15)
- auth: remove incorrect local login error (#808) (ef1b8cd)
- make disabled buttons unclickable (#802) (946d82f)
- wrap long campaign descriptions (#803) (05fc9a7)
- van: sync messaged contacts without question responses (#798) (8aff5d7)
- add contact name filter to bulk assignment action filter (#799) (cb5cd3b), closes #796
- fix message review display in safari (#800) (a1274ac)
3.10.0 (2020-12-11)
- add link warning to script field (#795) (e8a0d10)
- edit canned responses (#793) (d7c2d19)
- hide shortlink domains behind envvar (#789) (7efb76e)
- host-based GraphQL context (#560) (eacf822)
- campaign-edit: add copy block on root (#788) (3c4c19b)
- scripteditor: add short link warning (#765) (1e5195d)
- add authz check to myCurrentAssignmentTargets resolver (#792) (a2f13d7)
- add missing query properties (204d9b1)
- copy campaign deleted interactions (#801) (60e57e2)
- fix campaign list pagination (#794) (a9ea0c9)
- fix issues introduced in eslint pr (0d8765a)
- escalationtags: check tags in assignment row chip input component (#790) (7e2ce7c)
3.9.0 (2020-11-16)
- canned responses: remove ref from functional component (#762) (e49a96a)
- exports: rm catches in helper fns (#761) (2a85b74)
3.8.1 (2020-11-02)
3.8.0 (2020-11-01)
- tags: display tag colors in tag selector (#758) (9defafc)
- tags: restore soft delete (#759) (f56f88d)
3.7.0 (2020-10-27)
3.6.1 (2020-10-24)
3.6.0 (2020-10-23)
3.5.1 (2020-10-21)
3.5.0 (2020-10-21)
- add troll alarm count to admin dashboard (#749) (fe14d4b)
- populate tags in dropdown (#746) (3ea96bc)
3.4.0 (2020-10-09)
- fix variable name (6e30eb6)
3.3.0 (2020-10-08)
3.2.0 (2020-10-08)
- exports: move export to graphile worker (#738) (89bd9ac)
- remove 'GraphQl Error:' from error messages (#737) (33de981)
- restore missing import (6808317)
- trollbot: make primary key compound (#741) (99ef5ec)
- handle slack rate limits (#740) (53c6d1c)
3.1.2 (2020-10-03)
3.1.1 (2020-10-02)
- edit-campaign: compare to null rather than undefined (b2843d0)
3.1.0 (2020-10-02)
- van: add integration tag to campaign list (9697881)
- van: disable csv source when using integration (c8b50a2)
- van: insert initial result message (dc2b8f7)
- van: show question in add mapping modal (db5ec23)
3.0.0 (2020-10-01)
- van: VAN integration is a major feature release
2.11.1 (2020-09-30)
- fix index name (c8a051c)
2.11.0 (2020-09-28)
2.10.2 (2020-09-25)
- fix get_trollbot_matches function (c6b83fd)
2.10.1 (2020-09-25)
- add tag to contacts on save (#733) (03fc124)
- assignment: dont delete assignments, breaks opt out foreign keys (#734) (999b404)
- fix up/down migrations (#728) (c16aabf)
- invoke scrollTo only if conversation has messages (#732) (aea6597)
- trollbot: do not escape the token (f77c8a9)
2.10.0 (2020-09-13)
2.9.3 (2020-09-08)
- skip empty delivery report updates (5a1cb59)
2.9.2 (2020-09-07)
- assignable_campaigns: add due_by clause (#725) (2a97a00)
- copy-campaign: await memoizer.invalidate (50ead5b)
- end-conversation: auth error for non assigned admin (#724) (3f95dfb)
- export-campaign: reintroduced empty messages file w/ unmessaged (aa24d83)
- exports: invoke S3 upload as promise (017add4)
- migrations: remove function body (a0c92bd)
- export for van pagination error (#723) (39131ea)
2.9.1 (2020-08-26)
- message-review: exclude archived and opted-out from escalated count (dc36b2c)
2.9.0 (2020-08-26)
- message-review: add 'end conversation' button (46958d9)
- admin: fix escalated conversation count (3e022b2)
2.8.0 (2020-08-25)
- message-review: filter out empty messages (#718) (0da7f0a)
- script-preview: exclude soft-deleted interaction steps (#719) (2314f0c)
- export progress (#712) (668b04f)
2.7.1 (2020-08-18)
- return inserted record (7c20949)
2.7.0 (2020-08-18)
- add option to send payload as all strings (4e4fada)
- export all campaigns by argv query script (05c06e3)
2.6.3 (2020-08-14)
2.6.2 (2020-08-12)
- fix campaign_id column (253423e)
2.6.1 (2020-08-12)
- fix pagination primary key naming (81a88c6)
- load-van-list: filter opt outs (#703) (92ff6fe)
- handle very large exports (#704) (56065bb)
2.6.0 (2020-08-07)
- add default select statement (#707) (40e8ed7)
- invalidate cached external lists (#700) (67a307a)
- use id as primary column (#706) (cc186a7)
2.5.0 (2020-08-01)
- skip setting empty authorization header (428dd1f)
2.4.0 (2020-07-21)
- include organization name in assignment requested webhook payload (8cb36c5)
2.3.1 (2020-07-16)
- exit with 0 on duplicate invite (d6b6675)
- include external id on van fetch saved list (#694) (9044136)
2.3.0 (2020-07-08)
2.2.2 (2020-07-07)
- integrations: fix API key ref handling (6cedb62)
2.2.1 (2020-07-04)
2.2.0 (2020-07-03)
- twilio: fix logic for delivery report handling (cce4652)
- fix logic for delivery report handling (a359120)
- exports: include fields in csv output (eae3b3c)
2.1.1 (2020-06-29)
- ignore delivery report if message is ERROR or DELIVERED (313c67c)
2.1.0 (2020-06-27)
- support configurable datadog tags (4492b0b)
2.0.1 (2020-06-27)
2.0.0 (2020-06-26)
- introduces pg-compose
- check correct data warehouse envvar (9794146)
- check if returned record is an empty record (#683) (d1a2036)
- copy campaign in transaction (#685) (43e9025)
- set default text request type for General team (#687) (be3c13d)
- use primary column rather than hardcoded 'id' (24e886e)
1.13.1 (2020-06-07)
- request Slack identity scopes (406fa16)
- use Slack application token for non-identity scope requests (746c551)
1.13.0 (2020-05-29)
- prevent clearing campaign logo image url (#676) (41f119c)
- prevent crash on bad script preview token (#673) (459347d)
1.12.1 (2020-05-21)
- log and exit on unhandled promise rejection (#670) (4eea58c), closes /github.com/nodejs/node/issues/9523#issuecomment-453505625
- pass expected error logging function to terminus (#671) (5b8e7c6)
- pass human-readable message to GraphQLError constructor (22b7890)
1.12.0 (2020-05-20)
- handle case where campaign has no interaction steps (#668) (4b482d6)
- prevent passing empty array to addPhoneNumbers (#665) (2659d36)
- use fullscreen modal to fix overflow (#667) (b30ec9a)
1.11.1 (2020-05-13)
1.11.0 (2020-05-12)
- add contact display settings (#661) (5aee74c)
- add superadmins as owners to new organizations (#660) (751e4e4)
- breakout landline filtration (ac5d674)
- texter stuck loading (#659) (f2b0ed5)
- update client-side messages cache after sending (#658) (e5652f9)
1.10.0 (2020-05-07)
1.9.7 (2020-05-06)
- use component comparison from react-hot-loader (be9ac6b)
1.9.6 (2020-05-05)
1.9.5 (2020-04-29)
1.9.4 (2020-04-29)
1.9.3 (2020-04-29)
1.9.2 (2020-04-29)
1.9.1 (2020-04-29)
1.9.0 (2020-04-23)
- settings: fix capitalization of auto-approve type (#643) (c18d71e)
- remove afterCreate hook (#638) (75c6744)
1.8.5 (2020-04-15)
- fix permission check (#631) (b549f9d)
- remove auth query param from segments helpdesk url (#637) (29512aa)
- require owner permissions to query settings (#632) (03c9890)
- use the same knex client throughout query builder (#640) (43aba59)
1.8.4 (2020-04-10)
- prevent conversation overflow (7098c25)
1.8.3 (2020-04-10)
1.8.2 (2020-04-08)
1.8.1 (2020-04-07)
1.8.0 (2020-04-06)
- export config as commonjs module to support knex cli (1edba6b)
- ux: make pencil icon size dynamic (take 2) (#583) (d85d648)
1.7.1 (2020-03-30)
1.7.0 (2020-03-30)
- add promote-on-assign button (#611) (9cb2943)
- default texter approval status (#614) (b12a35f)
- expose texter auto-approval status (#610) (f0a7e1c)
- message review action resolver errors (#613) (649192d)
- throw error only if ineligible for access check (770336c)
- ux: avoid flashing background between texts (#608) (0a605a2)
1.6.1 (2020-03-23)
1.6.0 (2020-03-21)
- message-review: prevent duplicate fetches of users (#605) (a02295e)
- reset texter loading UI state on refetch (#602) (cf07e59)
1.5.1 (2020-03-13)
- expose validation stats to user (#600) (9b147d7)
- edit-campaign: autodetect file encoding (#599) (620609d)
1.5.0 (2020-03-12)
- 404 like page for bad campaign id (6868efd)
- accept firstname, first_name, lastname, last_name (5038d07)
- add apply tags helper text (b1373be)
- add auto assign toggle to operations dialog (8d3c66b)
- add delete selected button to campaign overlap module (d0066a1)
- add error handling (639b8c5)
- add progress and new campaign id to copy campaign (9ab3241)
- add reply count on release (251ef14)
- add segment counter (2e0618d)
- add symmetric decrypt script (1cc1a99)
- add withOperations HOC (6e3fb47)
- allow disabling the badge counts (5043a44)
- allow disabling the Texters section of campaign edit (7078a91)
- allow inserting Switchboard LRN API key (809b357)
- auto approve / reject basics (8478ad2)
- cache and invalidate campaigns list (4b3bdf4)
- cache assignment.campaign (f6c7383)
- cache get users for 5 minutes (dd24beb)
- cache information for get contacts (77fc0a8)
- cache my current assignment targets for one minute (b2b5f0d)
- campaign html preview (6d190d0)
- communicate texters loading (dee43d5)
- copy blocks (5e67451)
- disable dynamic assignment (2e0a405)
- env var for auto handle request concurrency (ed2b10d)
- execute easy unicode -> gsm replacements (7a54d66)
- flag to hide contact info (2f96e41)
- handle shutdown gracefully (a8ca156)
- hide auto handle behind yaev (3d8f810)
- improve release all unnhandled replies (0bccfb8)
- include campaign in tag webhook payload (6bb94b5)
- limit notifications to once per 30 seconds per team (8645017)
- make exclude recently contacted contacts have a default of true on mark for second pass (bc49230)
- make search for texters fast (802f184)
- more cautious second passes (b961069)
- optimize get assignment contacts (d745488)
- optimize get todos (9e319b9)
- optimize getContactMessagingService (cf5cf12)
- optimize overlap deletion - no reason to materialize distinct cell (d9cce3a)
- page size changes in contact overlap deletion (866d1b7)
- perform encryption of auth token in script (e6c282a)
- process contact csvs server-side (1e6eb99)
- reassign my replies button (6cfad65)
- release all unhandled replies (e868dcb)
- release replies on textable contacts only (ba37ba4)
- remove unnecessary polling (6ae129a)
- seach in overlap deletion (f2ac6a8)
- shorten texter poll interval (2a9301c)
- show hidden contact fields if super volunteer (9a2a066)
- speed up overlap deletion (6faed80)
- switch to file drop (e5ec8d7)
- tear down kue on shutdown (ee29ce4)
- treat 4 digit zips as 0 padded (61715b7)
- update texter name in external assignment manager db cron job (ce09838)
- upgrade memoredis (4c4a97b)
- use empty mode if env var not present to bypass caching (b458879)
- use function to cache plans (b265213)
- use group by instead of many queries (08fdb71)
- use sped up memoredis (924de74)
- validate phone number in the correct place (c616dd9)
- ci: install npm dependencies (b2a0b0a)
-
= texting hours start (32d7daa)
- add an upload button to the file drop (a513cc1)
- add back express basic auth (35cff82)
- add missing ownProps to signature (d9fa177)
- add missing resolvers (704c650)
- await invalidation on campaign list modifications (9f81a55)
- break props/callbacks cycles (c937488), closes /github.com/apollographql/apollo-feature-requests/issues/40#issuecomment-489487888
- clean up state, add docs link (f22adc7)
- current assignment targets returning multiple pairings per team (7708250)
- fix mutation signature (d26cb93)
- fix nextUrl and submit button type (cdb3feb)
- fix UserEdit (a80aa9d)
- handle custom fields properly (1b4b4e9)
- hide postgres error details in production (15f0127)
- just check if the record exists (546da49)
- limit request to current assignment max_request_count (cf87d07)
- make insert-invite idempotent (05b4375)
- only add SP prefix once (85fb2a8)
- order by system tags on top (02ec36a)
- page size back to 1000 (b3fde43)
- pass preferred team id on manual approval (73d2279)
- pr requests (af2a5e6)
- pr review requests (9c7a914)
- prevent circular network requests (838780f)
- remove extraneous line (7501f74)
- remove pending job polling (6e013a0)
- render component correctly (2b950a2)
- requested changes (8e6a022)
- restrict numbers to 10 digit US numbers (fbeb836)
- return promise rejection (52afe21)
- say type to search tags and require typing before displaying tags (6a8c51f)
- select auth_user.first_name (4d20906)
- shorten script invalidation (d8ec6de)
- strip __typename property from mutation payloads (09cbffa)
- unpack router props correctly (3308877)
- update conversation total count on component mount (8ccf90f)
- update network policy (e0e9ed9), closes /github.com/apollographql/apollo-client/issues/3633#issuecomment-406483894
- ux: make pencil icon size dynamic (ef81d23)
- actually add the counts (81fa352)
- add upgrade in yarn.lock (11ae676)
- await invalidation (343e512)
- change to comment style (bfb0a9a)
- correct params access (48f56d0)
- exit the process when script has completed (7088000)
- fetch contact cell from database (7725dca)
- find the top parent by checking for a null parent ID (2cf80ee)
- fix join link behavior (ab38858)
- fix STATIC_BASE_URL support (c5b46b6)
- get react-hot-loader working (1288ef5)
- include all escalation tags in escalated convos (6295c2a)
- invalidate campaigns list on copy campaign (d8922ae)
- invalidate organization on save teams (96ead5c)
- MEMOREDIS_URL is str, not url (74a284d)
- merge conflicts (915dc28)
- pass correct key to invalidate (05ab6ee)
- pass deduped assignment ids (5277295)
- pass error object to winston correctly (c1922bd)
- pr requests (f39d667)
- pr review (adcaafe)
- prefer const (db1c7ea)
- proper config import (d21b47f)
- refetch the current people page (5cd2c94)
- remove accidental paste (8ce1a4d)
- restrict access to currentAssignmentTargets query (12b4bb7)
- return array to match expected signature (098af3e)
- return null rather than undefined (6a3a6f3)
- return null rather than undefined (b24f07f)
- return updated user record (f92bb54)
- select from correct table (14d974d)
- shorten interaction step ttl (5e57965)
- tweak todos queries (36a21d9)
- update docker build context (255af04)
- upgrade memoredis to fix scan all bug (826b3ec)
- upgrade memoredis to support json date deserialization (529eed2)
- upgrade numbers client to support mms (449a67f)
- use dedicated password reset component (4354512)
- use h1 with slight text modifications (67efcfe)
- use redis lock to prevent possibility of double assignment (7d55822)
- validate invite correctly (6b7967d)
1.4.2 (2020-01-20)
- add missing preferredTeamId argument (63fe02c)
- avoid archived as bidning (a2e086a)
- avoid union with for update skip locked (ff1b88c)
- bail on submit if already submitting (b569c20)
- bypass overly complex timezone evaluation (4acc8e7)
- clarify that arg is unused (c28b2ea)
- comment, simplify queryArgs (88f89af)
- dont aggregate messaging services at send time (f724913)
- dont change message status when escalating (c087da3)
- dont fetch count of messaging services (424c0c7)
- extend HTTP request timeout and log errors (ea2f593)
- fix dataloader implementation (b996bff)
- fix error when changing password (cd90ccc)
- fix return type for returning("id") (8044e25)
- fix service selection behavior (fa49557)
- ignore the mocked ID added to CannedResponseInput (d473624)
- include required numberAssigned property (b40f3c4)
- index and query change necessary for search by tag (39ab3b3)
- let delivered override error (fdbaa8a)
- messages export blank (13fd5f2)
- only update if not delivered (f0068a8)
- order by messaged first (e9da7f7)
- perform notify in separate delayed transaction (7c943d5)
- pick json response property based on status (f768df4)
- pr changes (fd064d8)
- pr review cleanup (f630d99)
- proper index use archived = false (365c50c)
- remove campaign team requirement for custom escalation tags assignment pathway (9d26fe7)
- rename to last updated at (bdf5f20)
- replace final .save() calls (7d05190)
- report anticipated autoassignment errors as successes (1593cd5)
- return updated campaign from resolver (e279aee)
- return values where appropriate (85e0d6c)
- review requests (a6cc75f)
- review requests (f1aa8bb)
- scope opt-out check correctly (18c1c8e)
- send message opt out query should respect global opt out env var toggle (9e8df70)
- send null instead of empty string for contact zip code (4edb5a7)
- setting assignment controls for first time (1fef9f2)
- skip locked on link domain subquery (72a9498)
- supply aws credentials explicitly (c430720)
- syntax error on mark for second pass (9331b36)
- use correct date comparison (8d36f45)
- use correct table name for zip_code (4f454af)
- use modal dialog (a8e5224)
- use subshell (8b16415)
- exports: handle error from stream creation (a78f73c)
- external-assignment-request: dont hold transaction (de49e36)
- message-review: remove contact name filter when text is empty (a37893c)
- s3: use async method to support role-based auth (c32a400), closes aws/aws-sdk-js#2166
- add count_left back to allCurrentAssignmentTargets (dba9580)
- add escalate tag without confirmation steps (8654101)
- add option to disable has unassigned contacts query (92a0223)
- assemble numbers inbound message handling (b56e2b3)
- at time zone unknown; docs: add conservative comment (19ff9fb)
- check for null values not empty object (072495f)
- contact is textable function (3848c0b)
- contact_is_textable function (14c96fa)
- contact_is_textable_now can return null (9546ab1)
- correct sign direction on assignable_needs_message and reply (0eb28c7)
- correct variable name (80064f3)
- dont set max contacts in auto assign loop; default MAX_CONTACTS_PER_TEXTER of 500 (8415d02)
- dont set sent after other message (0fc2bde)
- drop count_left subqueries (42e96ca)
- enable assignment request by supervolunteer (ff80750)
- filter by organization correctly (1f15608)
- fix syntax error (ab3eafc)
- fix typo in opt-out query (ad913ef)
- handle case where responsesString is undefined (68dadda)
- include insert invite in dockerfile (49cd0ce)
- include unmessaged contacts in message review queries (fe02fd4)
- index campaign contact id (0e72b6e)
- limit on update (effa5d0)
- make dynamic assignment toggle truly controlled (b94dd46)
- make requested changes for review (618cc77)
- make test more robust to future DDL (48578c3)
- order by coalesce (01ae8fa)
- properly conservatively handle contacts with missing time zones (aa172b4)
- return location (17ae3f6)
- tweaks to backfill script and migrations non index option (c97fa09)
- use is (not) distinct from (fce87da)
- pg: catch missing knex<>reader swaps (58ff0ff)
- fix ordering of view drops (23b8836)
- get title of overlapping campaign (4ec68f6)
- message locking from assignment queries (67a0c13)
- move where clauses to join conditions (88f3dc7)
- order by last messaged at rather than updated_at (3a65d70)
- prevent empty tagConversation mutations (28c5956)
- restrict contact upload to 75% of db pool size (9a1db5e)
- scope bulkScriptUpdate to organization (bf6f0cb)
- simple less than for texting hour end (3089c50)
- standardize conversion from timezone name to UTC offset (6acbbc5)
- use assignable contact views for assignLoop (168c85b)
- knex: return count as number (8a24126)
- local-login: expect user object not array of users (01b900b)
- message-review: move key prop to correct location (5a5bbfa)
- session: use passport for non-Auth0 logout (1f3c076)
- switchboard: fix switchboard response handling (b7d607c)
- tags: allow admins to bypass assignment requirement for tag management (e20df00)
- tags: reset tags each time dialog is opened (c5f9041)
- tags: update method name (0a41d79)
- teams: fix campaign team comparison (553696e)
- teams: remove unnecessary authRequired check (a4f1608)
- teams: simplify team update logic (f9ffe30)
- 0 index into null (9a97cfd)
- account for fake organization team (2e926f2)
- forms: prevent submit button from being full-width (1f1ba37)
- add default background color (58451ca)
- add message, sensible defaults for updated_at (99c0162)
- allCurrentAssignmentTargets should show everyone else with first campaign without limit contraint (c7ee88c)
- assignment queries organization scope (9adbfcf)
- default now for migration (763b688)
- dont allow non team members to get campaigns as a result of default (d6b99f7)
- find a campaign that is potentially lower id for limited assignment (05c7510)
- fix column names in down migration (03c0770)
- fix the production path (e168bfa)
- flexible return from myCurrentAssignmentTarget (4628f5e)
- general assignment returning multiple results and final ordering not by id (4dd5b04)
- global regex replace (bb1847a)
- more to controlled component, allow setting null (0189cdf)
- move to static imports instead of dynamic require (9c1aa8b)
- my current assignment target selection - create priority column (e7e591e)
- nulling and editing numbersApiKey (e262820)
- organization scoped opt outs (f1348e1)
- proper .then calls (b31a0b9)
- rejecting assignment requests when general is disabled (e065e01)
- requested permission changes (db24bb3)
- return array from myCurrentAssignmentTargets (065bbfc)
- return empty array rather than null (11bb011)
- return full messaging service correctly (d9d4692)
- return values from saveTeams (4f3dd7a)
- slack team update - fully paginate slack channels (8afe903)
- tag application blocking message sending (0e0188b)
- tag editing (fd03409)
- timezone issues (f9b8786)
- unassigned contacts respects opt outs and escalation tag (5d0af87)
- update cache with new values (bfc01d7)
- use campaign texting hours instead of hardcoded 12 and 21 (a2bd049)
- use idiomatic approach to state update (afe8287)
- use null instead of unknown - at time zone null is null (fde17eb)
- use raw archived = instead of knex binding (dcd40bb)
- use SpokeSendStatus.Delivered (287f37d)
- wrong number of vars for unsent assignments (3243bef)
- apollo: remove buggy custom dataIdFromObject function (39e9504)
- assignment: fix createdAt resolver (bdabaca)
- assignment-requests: scope results to organization (ab7f156)
- campaigns-list: add early return for All results case (666f5e4)
- campaigns-list: skip limit/offset application for 'All' pageSize (fdbac58)
- config: add ASSIGNMENT_COMPLETE_NOTIFICATION_URL (b946c75)
- config: change STATIC_BASE_URL to str type (e245ce7)
- config: create missing reference (76d473a)
- config: fix envalid options (a54f2e2)
- config: remove trailing dot in IP address (e6818a4)
- config: switch config to process.env (25ecf33)
- exports: order cte (a1dd25f)
- lambda: load config file from correct location (9715086)
- logging: fix config import (6d5c97d)
- logging: fix rollbar setup (f9db668)
- logging: remove errorCatcher (14b388c)
- logging: remove log object complexity (655700a)
- logging: remove unused client-side reference to server function (5ee63c3)
- logging: use console for remaining client-side logs (e24f173)
- metrics: pass custom StatsD to connect-datadog (5909678)
- metrics: use standard connect-datadog library (fca59df)
- teams: add column default (4c1f0ca)
- teams: fetch organization's teams (2e00584)
- teams: fix assignment_priority column name (9858387)
- teams: manage teams and toggle independently (c87e1b0)
- twilio: pass emtpy array rather than undefined to twilio (c9dde44)
- util: return copy rather than mutating (5aed874)
- utils: return offset (7574cf7)
- add missing PasswordResetLink import (fdc3a0a)
- apollo client singletown window reference (134655f)
- assignment query (708fe7a)
- assignment query subquery instead of left join (30660d0)
- campaign contact tag.id (a98ff06)
- construct and use RegEx correctly (794db0e)
- invert incorrect boolean logic (426e6e0)
- invite to organization creation (1205497)
- order by old style (64ccf71)
- question response in export (9c36f3a)
- reduce scope of regex to specific domain (4e03e92)
- reference knex correctly (630815d)
- remove all config imports from client (6812062)
- remove all config imports from client (843dc72)
- remove apollo singleton from server (9cb939c)
- remove order by (9cdb1d8)
- requested pr changes (6b0719c)
- return id field from insert and correct variable name. (95e75f1)
- serve public dir if envvar is defined (07d9a0b)
- set default of empty array for service_response (89dd361)
- signing up with invite, button placement (41c6654)
- signup (2f94693)
- simplify renderIndex (2c1469c)
- slack user team cron job (c776ce8)
- standardize service_response (3909b0e)
- test client correctly (ef86631)
- tz.zone().utcOffset (077bbeb)
- logging: use console everywhere (6f2348a)
- unassign on escalate (7b49403)
- use console instead of undefined log (6d45fb6)
- use independent webpack envalid config file (745a5ae)
- message-review: request userId when sending admin message (fb5d036)
- tags: create new tagsFilter object (57efc8f)
- update fakeservice sendMessage signature (6494627)
- update numbers client usage (84815c2)
- use reject within AuthHasher callbacks (5534a8a)
- view definition (migrations already run in production) (d804570)
- tags: reset tags every time the selection dialog is opened (e62a584)
- tags: wrap PG lower function in knex.raw (d7ece37)
- teams: add onDelete statements (76e3e0d)
- teams: apply code review suggestions (04faf4a)
- user: fix UserEdit required fields (7dad66e)
- user: prevent password change for non-local login (2eda21f)
- switch ordering of moment.diff arguments (e313914)
- trim leading/trailing spaces in custom fields. (1d7fd94)
- use timezone-aware logic everywhere (5d55156)
- add additional logging for assemble numbers (4fe865b)
- add archived=false to assignment views (67818bc)
- add campaign title to texter todo (132a433), closes #355
- add client-side authentication check (3630383)
- add early return if there are no cells to assign (06ba3d1)
- add error handling for editCampaign (303ff8a)
- add fine-grained control of notifications (b040b85)
- add script to sync all active and recent campaigns (c6fada4)
- add support for invite payloads (9d2aa57)
- add team columns (ea9c177)
- add timeouts to outbound http requests (4bdd699)
- allow texters to choose assignment (de61f0b)
- apply tags on skip reply (1180e95)
- assign messaging service in sendMessage resolver (ce1a8bb)
- cache authorization and some campaign fetches (3debbb3)
- change team assignment column name; add AssignmentTarget.enabled (bb04b09)
- contact level time zone assignment (17fe36c)
- custom escalation tags gui (2bf21cf)
- display authentication errors (a276099)
- display authentication errors (8fcd440)
- drop column should be same as up column; new team based assignment queries (12b62c9)
- expose new team properties (dc45103)
- filter by tags in incoming message review (2338794)
- formalize enforced texting hours (fc4b90d)
- generalize all message service assignment functionality (278d2a6)
- implement unmarkforsecondpass and deleteneedsmessage (e08453c)
- improve assignment request error handling (31c2fcf)
- include archived condition on incoming message review query (6475be1)
- include texter email address in search UI/params (d0584ea)
- include timezone among campaign fields copied (9d1c48f)
- increase password reset period to 1 day (5ab7912)
- move assignment control flow to its own admin page (c7366d2)
- move texting hours section to just after basics (95c7752)
- notify client when Spoke is out of date (2811beb)
- optimize search by texter (494b891)
- order by campaign id, not due date (e41390a)
- partial todos index (1a08628)
- per contact messaging service types (39baad1)
- refactor assignment queries to respect team_escalation_tags (9dad5f0)
- search by unassigned (null texter) (3b15869)
- show message.created_at if exists above campaign_contact.updated_at (741a2da)
- show teams on campaign list (f95c1c4)
- silence expected errors (f991105)
- store md5 hash of script before variable substitution (aad419b)
- support passing knex session (6f5df84)
- support read replicas for a few key queries (6ea8a89)
- support soft delete of tags view trigger and view (105419a)
- support team-scoped assignment complete notifications (99ca099)
- update knex migration signatures (cca0015)
- update mutation to take multiple teams (6890f25)
- update password reset text (a31f400)
- update UI for new fields (bea031f)
- use case insensitive search (f619144)
- use cte style query chains for custom escalation tags assignment path (4ab83d6)
- assemble-numbers: add assemble-numbers sending service (62b5ccd)
- auth: limit password reset to local login (1abd2d4)
- export: create export drivers for AWS and GCS (409049c)
- exports: create export driver for GCS w/ HMAC auth (3ba3b0c)
- exports: disable GCS with HMAC (4c5ea89)
- exports: export texter information (510df6b)
- exports: flesh out hmac signing for GCS (fd434bf)
- exports: support mulitple export drivers (5e49d0d)
- graphql: add mocks only in non-production environments (c34e8fb)
- graphql: disable batched graphql requests (b537608)
- graphql: restrict graphiql to non-production env (3808a21)
- immutable-question-response: migration (b889d82)
- local-login: capture login modes in enum (27714ea)
- logging: add timestamps to log format (6d8b8b8)
- logging: enable Rollbar the right way (0e33448)
- logging: switch to connect-datadog-graphql (4bc517d)
- logging: use console for client-side logging (ef091df)
- logging: use most verbose logging level in development (5597462)
- logging: use winston for server-side logging (042bf09)
- message-review: allow admin sending to unassigned contact (0431022)
- message-sending: add service_type column to messaging_service table (9ab6953)
- monitoring: add healthcheck endpoint (aa91aa5)
- pg: use reader for conversations query (5925c0a)
- pg: use reader pool everywhere (f32d056)
- pg: use trx over .transacting (ec726e6)
- teams: add Assignment Request Controls component (d1275bf)
- teams: add campaign<->team association (3be2c8e)
- teams: add CrUD mutations for teams (09908e5)
- teams: add organization<->team association (ac4f814)
- teams: add team resolver (688ad29)
- teams: add team selection to campaign edit page (4e35ad0)
- teams: add teams migration (8002862)
- teams: add UI for managing teams (72e0b6e)
- teams: allow specifying teams to campaign (ffdfb32)
- teams: clarify wording of instructions (26b9712)
- teams: include type in current assignment HUD (fc81eb3)
- ux: add overdue tag to overdue campaigns (2f07de9)
- ux: add overdue warning to campaign edit page (970caa4)
- ux: show overdue warning on stats page (cb7261f)
- add currentAssignmentTargets and update campaign list ui (c2a6bdc)
- allow opt-out without assignment ID (4d83c60)
- cron job to sync teams with slack channel memberships (9701d1e)
- option to apply tags without sending message (5a93d84)
- upgrade assemble-numbers-client (300b931)
- use DISABLE_TEXTER_NOTIFICATIONS to disable texter notifications (77e8f15)
- use LocalAuthError type (2d7e0a3)
- sweeping: add previous/next conversation navigation (def7c34)
- tag: add tag management to sweeper view (22838b9)
- tags: add reusable TagSelector component (ab798c0)
- tags: handle tagConversation error (c3b3253)
- teams: add member management page (e09e43d)
- teams: add team member management mutations (a5bdf82)
- teams: add team root query (c926d1a)
- twilio: add defensive fix for null characters in database (2cefe70)
- ux: add overflow menu to mobile texter view (997ee98)
- remove text form block from settings (8d96db6)
- remove updated_at calls from code (02f5e6b)
- universal trigger based updated_at (6d4563a)
- use LocalAuthError type (45f7752)
- use myCurrentAssignmentTarget for form controls (b33ca1f)
- write and use myAssignmentTarget for giveUserMoreTexts and form display decisions (d6ac7e2)
- teams: add user<->team association (63c7e76)
- teams: use live campaign values (1a2c145)
- default assignment priority of 500 (19e1810)
- open tags selector on focus (58065b3)
- persist tag state between dialog opens (93d7f49)
- separate out escalate tag (6f23b78)
- config: add config file (3f4233a)
- config: export separate client and server config objects (773d9b8)
- config: migrate knex config (5e64d2a)
- config: use envalid config everywhere (cff9e2a)
- config: use envalid config for webpack (145899f)
- exports: allow alternate AWS endpoint (df7b305)
- tags: add ability to support tag colors in the future (5f0bfd3)
- tags: add additional fields (08e7514)
- tags: add admin UI for editing tags (eb40bef)
- tags: add columns (be1d1b5)
- tags: add error dialog for saveTag (0d15163)
- tags: add tag management UI (d11978f)
- tags: remove separate message editing field for tags (d61b3f3)
- tags: switch to tagConversation mutation (81d5c88)
- tags: update sendMessage payload for tags (db448f1)
- add ability to set organization.features.numbersApiKey via organization settings (10594b1)
- add datadog support via dogstatsd (df0c7df)
- add release stage to Heroku Procfile (bbf004e)
- cosmetic changes for local login. (9d44d65), closes MoveOnOrg/Spoke#1059
- filter landlines on upload if numbersApiKey defined (5fcb6df)
- if percent is more than 100 on upload, we are filtering (f044515)
- implement local login (80ba1b5), closes MoveOnOrg/Spoke#658
- include tags as list of titles in export (70ef3a1)
- lock contacts tagged with tags.is_assignable = f out of assignment (46a54f5)
- make incoming message review and esclated conversations review use tags (a50721e)
- migration script (87d0160)
- remove escalationUserId from resolvers (e793bd3)
- tags: add GraphQL queries and mutations for tags (ca6d0e2)
- tags: add migration for tags (ede1fba)
- tags: create default tags during organization creation (8e90fc8)
- tags: resolve naming collision for tags properties (1e88ef7)
- reject numbers api keys with * (4cdd30a)
- remove migration management (d2d0659)
- support running knex from the command line (4a3149b)
- use knex-style database seeding (8e15dd2)
- Revert "fix: truthy check on array" (fb8f52a)
- revert pull request #265 - feat/no-mocks-in-prod (c5ec88e)
- Revert "feat: add rollbar version" (e0420e6)
- Revert "build(docker): include git in Docker image" (a089447)
- Revert "fix(docker): account for git potentially being unavailable" (ad8f516)
- Revert "Update Twilio TwiML usage." (1df8e51)
- Revert "Sort messaging service SIDs, not the env var keys." (241a0f7)
- Revert "Add field for specifying reply age." (6673cf8)
- Revert "just return true for now" (73bd991)
- Revert "Revert "Moveon main plus reassign all plus message review optout plus set message validity"" (01f7e2e)
- Revert "Ability to return roles from campaign.texters" (c7713cf)
- Revert "Avoid error if no campaign is found" (8a7aa7c)
- Revert "Revert "Upgrade webpack and related deps to latest."" (d78c9d2)
- Revert "Upgrade webpack and related deps to latest." (7befef7)
- Revert "Removes fixed height for message fields for smaller screens" (2c887e5)
- Revert "Revert "adds sqs message processing function"" (492e89c)
- Revert "dependencies" (cefc3c9)
- Revert "some ideas for how to mitigate campaign-contact QuestionResponses resolver" (72e5be6)
- Revert "A few fixes for not finding organization settings. Revert after mig." (b2fd454)
- Revert "One more commit to revert" (efb2b8a)
- Revert "Hide sections and don't use unmigrated fields yet. Revert after migration." (07976c3)
- Revert "Comment out making fields required. Revert after migration" (2e8b012)
- Revert "Commit #2 to revert post-migration" (7020f0e), closes #2
- Revert "Commit for deploy - revert after migration" (be9a62e)
- Revert "Temporarily allow admin access instead of owner access -- revert after migration" (07edbfc)
August 2018: Version 1.4.1
- This version fixes bugs found in 1.4 including a deployment bug.
This release includes many optimizations, new features and more tests! We've fixed outstanding bugs, added more administrative functionality and worked on the texter experience. We've also introduced a new testing suite and redis caching capabilities. Over the next couple months, we intend to add more testing and continue to work on scaling.
Note - we will have a new release in the next few weeks and switch to a shorter release cycle in the next few months. Please upgrade your instance and let us know if you find any bugs or have questions!
July 2018: Version 1.4
- A 'Skipped Messages' section for texters to allow access to previously skipped conversations. Skipped conversations can be 'reopened' and filter back into the 'replies' view.
- A 'Message Review' board for administrators to allow message reassignment to different texters. Administrators also have the ability to see more incoming messages than previous.
- The ability to mark contacts as opted out without sending a message.
- Selenium end to end testing with Sauce Labs integration.
- Redis caching capabilities including caching user's authentication status.
- Updates to documentation for AK integration, popular queries, and email and data exporting integration.
- Bug fixes around owner, admin and superadmin permissions when attempting to text, timezone handling, permission issues on admin dashboard.
- Update to our community guidelines.
Thanks go to all our contributors for this release including: azuzunaga, bchrobot, bdatkins, cp4r3z, codygordon, eXrump, harpojaeger, joemcl, lperson, mathemagica, shakalee14,
Two major themes that we are focusing on this year are improving integrations and scaling. This release begins that work with support for MailGun notifications and Revere subscriptions. In order to scale work-flows, we have added a new SuperVolunteer position and now allow texters to update their own information.
Over the next couple months, we intend to integrate with more outside systems and we will also be adding significant work around scaling the system to support much larger volumes and participants. We will also be continuing to add more automated tests to scale participation. All of that is to make sure that the growing community can keep adding enhancements yourself -- please jump in on our issues page to either implement something or file an issue on something you want Spoke to do!
Please upgrade your instance and let us know if you encounter any issues!
April 2018: Version 1.3
- A 'Past Messages' section for Texters to allow access to previous conversations before a reply comes back. This feature helps cases where someone accidentally clicked a button or wants to follow-up with requested information.
- Texters can update their name, email and other information from the menu. Admins can update texter info from the console
- A new SuperVolunteer role, which allows a non-admin to update assignments, and some other tasks
- Added MailGun support
- Frontend React tests!
- Added an action handler to automatically subscribe to a Revere SMS list -- see Revere integration instructions
- Fixed some bugs:
- The texter menu now has a home button
- The zipcode table was too big to fit in a free Heroku database
- Some login issues were fixed and documentation was improved
- Improved contact load times for texter screen
Thanks go to all our contributors for this release including: ben-pr-p, harpojaeger, lperson, shakalee14, schuyler1d, zluo16, jparkrr, JeremyParker, hiemanshu, Dayologic, hi0ctane, sandramchung, sreynen, mathemagica
January 2018: Version 1.2 is our second release since MoveOn has adopted Spoke. We are committed to fixing bugs, adding new features and making this project as nimble as possible. For this release, we've included changes from GetUp, updated certain dependencies, updated Auth0 integration, added user editing capabilities for texters and admins and continued to add outside integration points with outside CRMs. Please continue to add and work on our growing issues list. We have also switched from master
=> main
as a new naming convention for the most stable/default branch.
We've worked on a lot, but some critical developments to highlight include:
- Adds dynamic assignment functionality for texters
- Adds user editing capabilities for texters and administrators
- Adds support for customized styling for campaigns
- Adds ActionKit integration for event sign up and documentation
- Adds support for multi-media images in outgoing texts (mms)
- Adds support for campaign script editing on live campaigns
- Moved to Prop-Types library, upgraded Webpack and other development dependencies
- Adds Code Climate test integration to monitor test coverage
- Adds opt out count for a campaign to admin dashboard stats
- Adds free Heroku deployment setup
- Adds more automated tests
Thanks go to to all our contributors for this release including: jmcarp, hiemanshu, lperson, jparkrr, jamesr2323, benmort, ben-pr-p, lady3bean, schuyler1d, shakalee14, sreynen, mathemagica
October 2017: Version 1.1 is our first release since MoveOn has been using Spoke successfully in production. We are committed to
making this an open-source project used and developed by the wider progressive tech community to advance our
political goals. Part of our work has been to make that transparent. Besides this public repository, please help
with our growing issues list, including those marked easy
.
But of course, we've also done some actual development work! We've fixed a ton of bugs, but here are some highlights for this release:
- Adds a passing test framework
- Resolves many bugs related to saving and updating a Campaign for admins
- Improves the Texter interface (better reply visibility, especially on mobile) along with sending on
<Enter>
- Adds a Deploy to Heroku button for easier first-time deployments
- Documented how to deploy on Amazon AWS Lambda
- Migrated from a RethinkDB backend to a Knex.js backend (we recommend use with postgresql database)
- Improved Spoke's security
Thanks go to to all our contributors including: anasauce, hiemanshu, mathemagica, sandramchung, schuyler1d, shakalee14, sreynen