gristlabs_grist-core/sandbox/grist
Alex Hall 3c4d71aeca (core) Initial webhooks implementation
Summary:
See https://grist.quip.com/VKd3ASF99ezD/Outgoing-Webhooks

- 2 new DocApi endpoints: _subscribe and _unsubscribe, not meant to be user friendly or publicly documented. _unsubscribe should be given the response from _subscribe in the body, e.g:

```
$ curl -X POST -H "Authorization: Bearer 8fd4dc59ecb05ab29ae5a183c03101319b8e6ca9" "http://localhost:8080/api/docs/6WYa23FqWxGNe3AR6DLjCJ/tables/Table2/_subscribe" -H "Content-type: application/json" -d '{"url": "https://webhook.site/a916b526-8afc-46e6-aa8f-a625d0d83ec3", "eventTypes": ["add"], "isReadyColumn": "C"}'
{"unsubscribeKey":"3246f158-55b5-4fc7-baa5-093b75ffa86c","triggerId":2,"webhookId":"853b4bfa-9d39-4639-aa33-7d45354903c0"}
$ curl -X POST -H "Authorization: Bearer 8fd4dc59ecb05ab29ae5a183c03101319b8e6ca9" "http://localhost:8080/api/docs/6WYa23FqWxGNe3AR6DLjCJ/tables/Table2/_unsubscribe" -H "Content-type: application/json" -d '{"unsubscribeKey":"3246f158-55b5-4fc7-baa5-093b75ffa86c","triggerId":2,"webhookId":"853b4bfa-9d39-4639-aa33-7d45354903c0"}'
{"success":true}
```

- New DB entity Secret to hold the webhook URL and unsubscribe key
- New document metatable _grist_Triggers subscribes to table changes and points to a secret to use for a webhook
- New file Triggers.ts processes action summaries and uses the two new tables to send webhooks.
- Also went on a bit of a diversion and made a typesafe subclass of TableData for metatables.

I think this is essentially good enough for a first diff, to keep the diffs manageable and to talk about the overall structure. Future diffs can add tests and more robustness using redis etc. After this diff I can also start building the Zapier integration privately.

Test Plan: Tested manually: see curl commands in summary for an example. Payloads can be seen in https://webhook.site/#!/a916b526-8afc-46e6-aa8f-a625d0d83ec3/0b9fe335-33f7-49fe-b90b-2db5ba53382d/1 . Great site for testing webhooks btw.

Reviewers: dsagal, paulfitz

Reviewed By: paulfitz

Differential Revision: https://phab.getgrist.com/D3019
2021-09-23 14:35:39 +02:00
..
functions (core) Add CellError to explain when a formula refers to a cell with an error value 2021-07-30 22:58:45 +02:00
imports (core) Fix import parsing from choking up on Python isdigit() surprises 2021-09-20 16:17:34 -04:00
acl_formula.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
acl.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
action_obj.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
action_summary.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
actions.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
autocomplete_context.py (core) Make CONTAINS a function for consistency with mkpydocs etc. 2021-07-21 13:18:23 +02:00
codebuilder.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
column.py (core) Add CellError to explain when a formula refers to a cell with an error value 2021-07-30 22:58:45 +02:00
csv_patch.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
depend.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
docactions.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
docmodel.py (core) Refactor Table.Record[Set] classes 2021-07-19 14:53:28 +02:00
engine.py (core) Fix self-updating trigger formulas used in lookups 2021-08-31 00:28:41 +02:00
gencode.py (core) Add 'user' variable to trigger formulas 2021-07-15 15:18:32 -07:00
gpath.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
grist.py (core) Add ChoiceList type, cell widget, and editor widget. 2021-05-12 10:38:32 -04:00
identifiers.py (core) Remove accents when picking identifiers 2021-08-24 14:47:50 +02:00
import_actions.py (core) Enable incremental imports 2021-09-16 09:15:54 -07:00
logger.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
lookup.py (core) Make CONTAINS a function for consistency with mkpydocs etc. 2021-07-21 13:18:23 +02:00
main.py (core) Move file import plugins into core/sandbox/grist 2021-08-09 18:37:14 +02:00
match_counter.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
migrations.py (core) Initial webhooks implementation 2021-09-23 14:35:39 +02:00
moment_parse.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
moment.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
objtypes.py (core) Suggest correct table when converting to RefList 2021-08-20 23:04:48 +02:00
parse_data.py (core) Move file import plugins into core/sandbox/grist 2021-08-09 18:37:14 +02:00
records.py (core) Suggest correct table when converting to RefList 2021-08-20 23:04:48 +02:00
relabeling.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
relation.py (core) Polish and enable Reference List widget 2021-08-12 11:51:21 -07:00
runtests.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
sandbox.py (core) communicate with sandbox via standard pipes 2021-07-12 06:45:47 -04:00
schema.py (core) Initial webhooks implementation 2021-09-23 14:35:39 +02:00
summary.py (core) Fix changing type of source column from choice to choicelist 2021-08-11 23:45:15 +02:00
table_data_set.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
table.py (core) treat summary tables like formulas for access control purposes 2021-09-16 18:44:50 -04:00
test_acl_formula.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_acl_renames.py (core) Update ACL resources/rules when tables/columns get renamed 2021-01-04 22:03:01 -05:00
test_actions.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_codebuilder.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_column_actions.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_completion.py (core) update tests after jenkins engine freshening 2021-09-18 09:58:35 -04:00
test_default_formulas.py (core) Fix lookups in default formulas 2020-09-10 18:06:06 -04:00
test_depend.py (core) Fix recursion error in invalidate_deps 2021-06-18 15:42:20 +02:00
test_derived.py (core) Store formula values in DB, and include them into .stored/.undo fields of actions. 2020-11-04 16:45:47 -05:00
test_display_cols.py (core) discount indirect changes for access control purposes 2021-05-12 11:26:21 -04:00
test_docmodel.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_engine.py (core) Add 'user' variable to trigger formulas 2021-07-15 15:18:32 -07:00
test_find_col.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_formula_error.py (core) Add CellError to explain when a formula refers to a cell with an error value 2021-07-30 22:58:45 +02:00
test_formula_undo.py (core) Suggest correct table when converting to RefList 2021-08-20 23:04:48 +02:00
test_functions.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_gencode.py (core) Remove accents when picking identifiers 2021-08-24 14:47:50 +02:00
test_gpath.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_import_actions.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_import_transform.py (core) Enable incremental imports 2021-09-16 09:15:54 -07:00
test_logger.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_lookups.py (core) CONTAINS() and summarising by ChoiceList columns with flattening 2021-07-19 16:35:35 +02:00
test_match_counter.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_migrations.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_moment.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_record_func.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_recordlist.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
test_reflist_rel.py (core) Fix a bug that occurs after remaing a table containing a RefList column. 2020-11-26 22:29:37 -05:00
test_relabeling.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_renames2.py (core) Store formula values in DB, and include them into .stored/.undo fields of actions. 2020-11-04 16:45:47 -05:00
test_renames.py (core) Suggest correct table when converting to RefList 2021-08-20 23:04:48 +02:00
test_replay.py (core) Add test_replay for easily replaying data sent to the sandbox purely within python 2021-06-30 16:56:09 +02:00
test_side_effects.py (core) Store formula values in DB, and include them into .stored/.undo fields of actions. 2020-11-04 16:45:47 -05:00
test_summary2.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_summary_choicelist.py (core) Fix changing type of source column from choice to choicelist 2021-08-11 23:45:15 +02:00
test_summary.py (core) Store formula values in DB, and include them into .stored/.undo fields of actions. 2020-11-04 16:45:47 -05:00
test_table_actions.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_table_data_set.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_temp_rowids.py (core) Allow using negative rowIds to add records and refer to them in Reference values. 2020-12-15 16:39:56 -05:00
test_textbuilder.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_treeview.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_trigger_formulas.py (core) Fix self-updating trigger formulas used in lookups 2021-08-31 00:28:41 +02:00
test_twowaymap.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
test_types.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_undo.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
test_urllib_patch.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
test_user.py (core) Add 'user' variable to trigger formulas 2021-07-15 15:18:32 -07:00
test_useractions.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
testsamples.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
testscript.json (core) Remove REPL code 2021-07-20 15:17:03 +02:00
testutil.py (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
textbuilder.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
treeview.py (core) move data engine code to core 2020-07-29 08:57:25 -04:00
twowaymap.py (core) Simple Python 3 compatibility changes 2021-06-22 17:13:17 +02:00
tzdata.data (core) move data engine code to core 2020-07-29 08:57:25 -04:00
urllib_patch.py (core) Remaining Python 3 compatibility changes 2021-06-25 12:00:58 +02:00
user.py (core) Add 'user' variable to trigger formulas 2021-07-15 15:18:32 -07:00
useractions.py (core) treat summary tables like formulas for access control purposes 2021-09-16 18:44:50 -04:00
usercode.py (core) Add 'user' variable to trigger formulas 2021-07-15 15:18:32 -07:00
usertypes.py (core) Polish and enable Reference List widget 2021-08-12 11:51:21 -07:00
xmlrunner.py (core) Run python unit tests again in python 3 2021-06-30 21:46:18 +02:00