@oomol-lab/open-connector 1.7.0 → 1.8.0
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/README.md +4 -0
- package/assets/open-connector/catalog/apps/airtable.json +134 -0
- package/assets/open-connector/catalog/apps/aisa.json +916 -76
- package/assets/open-connector/catalog/apps/cal.json +24 -6
- package/assets/open-connector/catalog/apps/discordbot.json +2 -2
- package/assets/open-connector/catalog/apps/enormail.json +411 -0
- package/assets/open-connector/catalog/apps/feishu_app_bot.json +158 -0
- package/assets/open-connector/catalog/apps/github.json +275 -0
- package/assets/open-connector/catalog/apps/gitlab.json +125 -0
- package/assets/open-connector/catalog/apps/gmail.json +151 -0
- package/assets/open-connector/catalog/apps/googlecalendar.json +206 -0
- package/assets/open-connector/catalog/apps/googledrive.json +479 -0
- package/assets/open-connector/catalog/apps/googlesheets.json +144 -0
- package/assets/open-connector/catalog/apps/hithink_finance.json +6 -3
- package/assets/open-connector/catalog/apps/indexed.json +1115 -0
- package/assets/open-connector/catalog/apps/linear.json +116 -0
- package/assets/open-connector/catalog/apps/notion.json +142 -0
- package/assets/open-connector/catalog/apps/one_drive.json +185 -0
- package/assets/open-connector/catalog/apps/outlook.json +182 -0
- package/assets/open-connector/catalog/apps/shopify.json +282 -0
- package/assets/open-connector/catalog/apps/slack.json +182 -0
- package/assets/open-connector/catalog/apps/spotify.json +46 -43
- package/assets/open-connector/catalog/apps/stripe.json +96 -0
- package/assets/open-connector/catalog/apps/telegram.json +138 -0
- package/assets/open-connector/catalog/apps/weixin_store.json +543 -2
- package/assets/open-connector/catalog/apps/woocommerce.json +127 -0
- package/assets/open-connector/catalog/apps/zendesk.json +152 -0
- package/assets/open-connector/catalog/apps/zerotier.json +9 -9
- package/assets/open-connector/catalog/apps-index.json +1 -1
- package/assets/open-connector/migrations/0014_saas_project.sql +55 -0
- package/assets/open-connector/migrations/0015_saas_cleanup_runtime.sql +8 -0
- package/assets/open-connector/migrations/0016_trigger_policy.sql +1 -0
- package/assets/open-connector/migrations/0017_trigger_subscriptions.sql +17 -0
- package/assets/open-connector/migrations/postgresql/0014_saas_project.sql +55 -0
- package/assets/open-connector/migrations/postgresql/0015_saas_cleanup_runtime.sql +8 -0
- package/assets/open-connector/migrations/postgresql/0016_trigger_policy.sql +1 -0
- package/assets/open-connector/migrations/postgresql/0017_trigger_subscriptions.sql +17 -0
- package/package.json +2 -2
- package/src/connection-service.d.ts +40 -7
- package/src/connection-service.js +60 -18
- package/src/core/action-policy.d.ts +8 -1
- package/src/core/action-policy.js +51 -0
- package/src/core/cast.d.ts +3 -0
- package/src/core/cast.js +4 -1
- package/src/core/guarded-fetch.d.ts +5 -0
- package/src/core/guarded-fetch.js +13 -4
- package/src/core/remote-http.d.ts +33 -0
- package/src/core/remote-http.js +104 -0
- package/src/core/request.d.ts +1 -0
- package/src/core/request.js +7 -0
- package/src/core/types.d.ts +4 -0
- package/src/marketplace/marketplace-service.d.ts +0 -1
- package/src/marketplace/marketplace-service.js +80 -92
- package/src/mcp.js +19 -5
- package/src/oauth/oauth-flow-service.d.ts +8 -1
- package/src/oauth/oauth-flow-service.js +10 -4
- package/src/providers/action-contracts.generated.d.ts +4 -2
- package/src/providers/airtable/executors.d.ts +3 -0
- package/src/providers/airtable/executors.js +2 -0
- package/src/providers/airtable/trigger-on-record-changed.d.ts +2 -0
- package/src/providers/airtable/trigger-on-record-changed.definition.d.ts +4 -0
- package/src/providers/airtable/trigger-on-record-changed.definition.js +54 -0
- package/src/providers/airtable/trigger-on-record-changed.js +235 -0
- package/src/providers/aisa/executors.js +196 -22
- package/src/providers/cal/actions.js +5 -1
- package/src/providers/enormail/executors.d.ts +4 -0
- package/src/providers/enormail/executors.js +97 -0
- package/src/providers/feishu_app_bot/executors.d.ts +3 -0
- package/src/providers/feishu_app_bot/executors.js +2 -0
- package/src/providers/feishu_app_bot/trigger-config.d.ts +1 -0
- package/src/providers/feishu_app_bot/trigger-config.js +10 -0
- package/src/providers/feishu_app_bot/trigger-on-event.d.ts +2 -0
- package/src/providers/feishu_app_bot/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/feishu_app_bot/trigger-on-event.definition.js +63 -0
- package/src/providers/feishu_app_bot/trigger-on-event.js +29 -0
- package/src/providers/feishu_app_bot/trigger-subscriptions.d.ts +5 -0
- package/src/providers/feishu_app_bot/trigger-subscriptions.js +70 -0
- package/src/providers/github/executors.d.ts +3 -0
- package/src/providers/github/executors.js +6 -0
- package/src/providers/github/trigger-on-repo-event.d.ts +2 -0
- package/src/providers/github/trigger-on-repo-event.definition.d.ts +4 -0
- package/src/providers/github/trigger-on-repo-event.definition.js +94 -0
- package/src/providers/github/trigger-on-repo-event.js +168 -0
- package/src/providers/github/trigger-watch-pull-request.d.ts +2 -0
- package/src/providers/github/trigger-watch-pull-request.definition.d.ts +4 -0
- package/src/providers/github/trigger-watch-pull-request.definition.js +49 -0
- package/src/providers/github/trigger-watch-pull-request.js +106 -0
- package/src/providers/gitlab/executors.d.ts +3 -0
- package/src/providers/gitlab/executors.js +2 -0
- package/src/providers/gitlab/trigger-on-project-event.d.ts +2 -0
- package/src/providers/gitlab/trigger-on-project-event.definition.d.ts +5 -0
- package/src/providers/gitlab/trigger-on-project-event.definition.js +63 -0
- package/src/providers/gitlab/trigger-on-project-event.js +186 -0
- package/src/providers/gmail/executors.d.ts +3 -0
- package/src/providers/gmail/executors.js +2 -0
- package/src/providers/gmail/trigger-on-message-received.d.ts +2 -0
- package/src/providers/gmail/trigger-on-message-received.definition.d.ts +4 -0
- package/src/providers/gmail/trigger-on-message-received.definition.js +74 -0
- package/src/providers/gmail/trigger-on-message-received.js +232 -0
- package/src/providers/googlecalendar/executors.d.ts +3 -0
- package/src/providers/googlecalendar/executors.js +2 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.d.ts +2 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.definition.d.ts +4 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.definition.js +74 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.js +233 -0
- package/src/providers/googledrive/executors.d.ts +3 -0
- package/src/providers/googledrive/executors.js +7 -0
- package/src/providers/googledrive/trigger-changes.d.ts +12 -0
- package/src/providers/googledrive/trigger-changes.definition.d.ts +7 -0
- package/src/providers/googledrive/trigger-changes.definition.js +101 -0
- package/src/providers/googledrive/trigger-changes.js +452 -0
- package/src/providers/googledrive/trigger-on-file-change.d.ts +2 -0
- package/src/providers/googledrive/trigger-on-file-change.definition.d.ts +4 -0
- package/src/providers/googledrive/trigger-on-file-change.definition.js +77 -0
- package/src/providers/googledrive/trigger-on-file-change.js +258 -0
- package/src/providers/googlesheets/executors.d.ts +3 -0
- package/src/providers/googlesheets/executors.js +2 -0
- package/src/providers/googlesheets/trigger-on-row-added.d.ts +2 -0
- package/src/providers/googlesheets/trigger-on-row-added.definition.d.ts +4 -0
- package/src/providers/googlesheets/trigger-on-row-added.definition.js +54 -0
- package/src/providers/googlesheets/trigger-on-row-added.js +234 -0
- package/src/providers/hithink_finance/runtime.js +1 -1
- package/src/providers/indexed/executors.d.ts +4 -0
- package/src/providers/indexed/executors.js +16 -0
- package/src/providers/indexed/runtime.d.ts +26 -0
- package/src/providers/indexed/runtime.js +129 -0
- package/src/providers/linear/executors.d.ts +3 -0
- package/src/providers/linear/executors.js +2 -0
- package/src/providers/linear/trigger-on-issue-changed.d.ts +2 -0
- package/src/providers/linear/trigger-on-issue-changed.definition.d.ts +5 -0
- package/src/providers/linear/trigger-on-issue-changed.definition.js +43 -0
- package/src/providers/linear/trigger-on-issue-changed.js +215 -0
- package/src/providers/notion/executors.d.ts +3 -0
- package/src/providers/notion/executors.js +2 -0
- package/src/providers/notion/trigger-on-database-page-event.d.ts +2 -0
- package/src/providers/notion/trigger-on-database-page-event.definition.d.ts +4 -0
- package/src/providers/notion/trigger-on-database-page-event.definition.js +63 -0
- package/src/providers/notion/trigger-on-database-page-event.js +293 -0
- package/src/providers/one_drive/executors.d.ts +3 -0
- package/src/providers/one_drive/executors.js +2 -0
- package/src/providers/one_drive/trigger-on-item-changed.d.ts +2 -0
- package/src/providers/one_drive/trigger-on-item-changed.definition.d.ts +4 -0
- package/src/providers/one_drive/trigger-on-item-changed.definition.js +63 -0
- package/src/providers/one_drive/trigger-on-item-changed.js +214 -0
- package/src/providers/outlook/executors.d.ts +3 -0
- package/src/providers/outlook/executors.js +2 -0
- package/src/providers/outlook/trigger-on-message-received.d.ts +2 -0
- package/src/providers/outlook/trigger-on-message-received.definition.d.ts +4 -0
- package/src/providers/outlook/trigger-on-message-received.definition.js +93 -0
- package/src/providers/outlook/trigger-on-message-received.js +226 -0
- package/src/providers/outlook_calendar/executors.js +6 -0
- package/src/providers/provider-loader.d.ts +5 -0
- package/src/providers/provider-loader.js +4 -0
- package/src/providers/registry.generated.js +2 -0
- package/src/providers/shopify/executors.d.ts +3 -0
- package/src/providers/shopify/executors.js +2 -0
- package/src/providers/shopify/trigger-on-shop-event.d.ts +2 -0
- package/src/providers/shopify/trigger-on-shop-event.definition.d.ts +4 -0
- package/src/providers/shopify/trigger-on-shop-event.definition.js +214 -0
- package/src/providers/shopify/trigger-on-shop-event.js +165 -0
- package/src/providers/slack/executors.d.ts +3 -0
- package/src/providers/slack/executors.js +2 -0
- package/src/providers/slack/trigger-on-message-posted.d.ts +2 -0
- package/src/providers/slack/trigger-on-message-posted.definition.d.ts +4 -0
- package/src/providers/slack/trigger-on-message-posted.definition.js +80 -0
- package/src/providers/slack/trigger-on-message-posted.js +176 -0
- package/src/providers/spotify/runtime.js +15 -4
- package/src/providers/stripe/executors.d.ts +3 -0
- package/src/providers/stripe/executors.js +2 -0
- package/src/providers/stripe/trigger-on-event.d.ts +2 -0
- package/src/providers/stripe/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/stripe/trigger-on-event.definition.js +43 -0
- package/src/providers/stripe/trigger-on-event.js +212 -0
- package/src/providers/telegram/executors.d.ts +3 -0
- package/src/providers/telegram/executors.js +2 -0
- package/src/providers/telegram/trigger-on-update.d.ts +2 -0
- package/src/providers/telegram/trigger-on-update.definition.d.ts +5 -0
- package/src/providers/telegram/trigger-on-update.definition.js +78 -0
- package/src/providers/telegram/trigger-on-update.js +141 -0
- package/src/providers/weixin_store/access-token.d.ts +2 -1
- package/src/providers/weixin_store/access-token.js +15 -4
- package/src/providers/weixin_store/executors.js +97 -12
- package/src/providers/woocommerce/executors.d.ts +3 -0
- package/src/providers/woocommerce/executors.js +2 -0
- package/src/providers/woocommerce/trigger-on-store-event.d.ts +2 -0
- package/src/providers/woocommerce/trigger-on-store-event.definition.d.ts +4 -0
- package/src/providers/woocommerce/trigger-on-store-event.definition.js +55 -0
- package/src/providers/woocommerce/trigger-on-store-event.js +179 -0
- package/src/providers/zendesk/executors.d.ts +3 -0
- package/src/providers/zendesk/executors.js +2 -0
- package/src/providers/zendesk/trigger-on-event.d.ts +2 -0
- package/src/providers/zendesk/trigger-on-event.definition.d.ts +5 -0
- package/src/providers/zendesk/trigger-on-event.definition.js +101 -0
- package/src/providers/zendesk/trigger-on-event.js +188 -0
- package/src/saas/saas-cleanup-service.d.ts +26 -0
- package/src/saas/saas-cleanup-service.js +124 -0
- package/src/saas/saas-client.d.ts +86 -0
- package/src/saas/saas-client.js +369 -0
- package/src/saas/saas-execution-service.d.ts +15 -0
- package/src/saas/saas-execution-service.js +21 -0
- package/src/saas/saas-oauth-service.d.ts +25 -0
- package/src/saas/saas-oauth-service.js +197 -0
- package/src/saas/saas-project-service.d.ts +61 -0
- package/src/saas/saas-project-service.js +211 -0
- package/src/server/actions/action-idempotency.d.ts +1 -0
- package/src/server/actions/action-idempotency.js +1 -0
- package/src/server/actions/action-runner.d.ts +7 -0
- package/src/server/actions/action-runner.js +43 -7
- package/src/server/actions/run-log-summary.js +9 -0
- package/src/server/api/auth.d.ts +1 -0
- package/src/server/api/auth.js +13 -2
- package/src/server/api/cache-policy.js +4 -1
- package/src/server/api/connection-input.d.ts +7 -1
- package/src/server/api/connection-input.js +7 -1
- package/src/server/api/connection-routes.d.ts +3 -1
- package/src/server/api/connection-routes.js +21 -3
- package/src/server/api/http-utils.d.ts +4 -3
- package/src/server/api/oauth-completion-page.d.ts +124 -0
- package/src/server/api/oauth-completion-page.js +113 -18
- package/src/server/api/openapi.js +112 -14
- package/src/server/api/policy-input.js +6 -0
- package/src/server/api/runtime-api.d.ts +10 -2
- package/src/server/api/runtime-api.js +17 -4
- package/src/server/api/saas-completion-page.d.ts +2 -0
- package/src/server/api/saas-completion-page.js +103 -0
- package/src/server/connect-app.d.ts +5 -0
- package/src/server/connect-app.js +50 -0
- package/src/server/connect-server.d.ts +12 -0
- package/src/server/connect-server.js +147 -13
- package/src/server/connector-runtime.d.ts +3 -1
- package/src/server/connector-runtime.js +5 -2
- package/src/server/files/transit-files.js +16 -7
- package/src/server/proxy/proxy-runner.d.ts +5 -1
- package/src/server/proxy/proxy-runner.js +72 -26
- package/src/server/storage/connection-request-store.d.ts +41 -1
- package/src/server/storage/connection-request-store.js +245 -20
- package/src/server/storage/connection-store.d.ts +16 -0
- package/src/server/storage/connection-store.js +119 -0
- package/src/server/storage/node-runtime-database.js +3 -3
- package/src/server/storage/{postgres-migrations.d.ts → postgres/migrations.d.ts} +2 -2
- package/src/server/storage/{postgres-migrations.js → postgres/migrations.js} +1 -1
- package/src/server/storage/postgres/runtime-store.d.ts +43 -0
- package/src/server/storage/{postgres-runtime-store.js → postgres/runtime-store.js} +59 -94
- package/src/server/storage/runtime-database.d.ts +4 -0
- package/src/server/storage/runtime-sql.d.ts +1 -1
- package/src/server/storage/runtime-sql.js +2 -1
- package/src/server/storage/runtime-store.d.ts +1 -0
- package/src/server/storage/runtime-token-service.d.ts +2 -0
- package/src/server/storage/runtime-token-service.js +3 -0
- package/src/server/storage/saas-project-store.d.ts +77 -0
- package/src/server/storage/saas-project-store.js +273 -0
- package/src/server/storage/{sqlite-runtime-store.d.ts → sqlite/runtime-store.d.ts} +21 -25
- package/src/server/storage/{sqlite-runtime-store.js → sqlite/runtime-store.js} +100 -115
- package/src/server/storage/trigger-store.d.ts +16 -0
- package/src/server/storage/trigger-store.js +96 -0
- package/src/triggers/common/config.d.ts +2 -0
- package/src/triggers/common/config.js +17 -0
- package/src/triggers/common/configOptions.d.ts +13 -0
- package/src/triggers/common/configOptions.js +1 -0
- package/src/triggers/common/encoding.d.ts +3 -0
- package/src/triggers/common/encoding.js +19 -0
- package/src/triggers/common/integration.d.ts +115 -0
- package/src/triggers/common/integration.js +31 -0
- package/src/triggers/common/json.d.ts +6 -0
- package/src/triggers/common/json.js +91 -0
- package/src/triggers/common/poll.d.ts +41 -0
- package/src/triggers/common/poll.js +15 -0
- package/src/triggers/common/proxy.d.ts +14 -0
- package/src/triggers/common/proxy.js +1 -0
- package/src/triggers/common/types.d.ts +42 -0
- package/src/triggers/common/types.js +1 -0
- package/src/triggers/maintenance.d.ts +40 -0
- package/src/triggers/maintenance.js +120 -0
- package/src/triggers/metadata.d.ts +8 -0
- package/src/triggers/metadata.js +1 -0
- package/src/triggers/request.d.ts +33 -0
- package/src/triggers/request.js +52 -0
- package/src/triggers/resources.d.ts +12 -0
- package/src/triggers/resources.js +121 -0
- package/src/triggers/signature.d.ts +4 -0
- package/src/triggers/signature.js +48 -0
- package/src/triggers/store.d.ts +29 -0
- package/src/triggers/store.js +1 -0
- package/src/triggers/subscriptions.d.ts +22 -0
- package/src/triggers/subscriptions.js +220 -0
- package/src/triggers/trigger-runner.d.ts +34 -0
- package/src/triggers/trigger-runner.js +169 -0
- package/src/server/storage/postgres-runtime-store.d.ts +0 -39
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compactObject, objectArray, optionalBoolean, optionalInteger, optionalString } from "../../core/cast.js";
|
|
1
|
+
import { compactObject, objectArray, optionalBoolean, optionalInteger, optionalRecord, optionalString, positiveInteger, } from "../../core/cast.js";
|
|
2
2
|
import { createProviderFetch, defineProviderExecutors, providerInputError, providerUserAgent, readTransitFileInput, requireCustomCredential, requiredInputString, runProviderRequest, } from "../provider-runtime.js";
|
|
3
3
|
import { getWechatAccessToken, isWechatTokenError, normalizeWechatApiError, parseWechatJson, readWechatErrcode, readWeixinStoreCredential, } from "./access-token.js";
|
|
4
4
|
const service = "weixin_store";
|
|
@@ -35,6 +35,20 @@ const deliveryProductFieldMap = {
|
|
|
35
35
|
productCnt: "product_cnt",
|
|
36
36
|
};
|
|
37
37
|
const weixinStoreActionHandlers = {
|
|
38
|
+
async upload_qualification_image(input, context) {
|
|
39
|
+
const file = await readTransitFileInput(input.file, context);
|
|
40
|
+
if (file.sizeBytes > 2 * 1024 * 1024) {
|
|
41
|
+
throw providerInputError("file must be at most 2 MB");
|
|
42
|
+
}
|
|
43
|
+
const formData = new FormData();
|
|
44
|
+
formData.set("media", file.file, file.name);
|
|
45
|
+
return callWechatApi(context, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
path: "/shop/ec/basics/qualification/upload",
|
|
48
|
+
body: formData,
|
|
49
|
+
timeoutMs: wechatImageUploadTimeoutMs,
|
|
50
|
+
});
|
|
51
|
+
},
|
|
38
52
|
upload_image(input, context) {
|
|
39
53
|
const imageUrl = optionalString(input.imageUrl);
|
|
40
54
|
if ((imageUrl === undefined) === (input.file === undefined)) {
|
|
@@ -61,7 +75,53 @@ const weixinStoreActionHandlers = {
|
|
|
61
75
|
return callWechatApi(context, {
|
|
62
76
|
method: "POST",
|
|
63
77
|
path: "/shop/ec/category/detail",
|
|
64
|
-
body: { cat_id:
|
|
78
|
+
body: { cat_id: positiveInteger(input.catId, "catId", providerInputError) },
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
apply_category(input, context) {
|
|
82
|
+
const categoryInfo = optionalRecord(input.categoryInfo);
|
|
83
|
+
if (!categoryInfo) {
|
|
84
|
+
throw providerInputError("categoryInfo must be an object");
|
|
85
|
+
}
|
|
86
|
+
return callWechatApi(context, {
|
|
87
|
+
method: "POST",
|
|
88
|
+
path: "/channels/ec/category/add",
|
|
89
|
+
body: { category_info: mapCategoryApplication(categoryInfo) },
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
get_category_application(input, context) {
|
|
93
|
+
return callWechatApi(context, {
|
|
94
|
+
method: "POST",
|
|
95
|
+
path: "/shop/ec/category/getbizcatflowdetail",
|
|
96
|
+
body: { audit_id: positiveInteger(input.auditId, "auditId", providerInputError) },
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
list_category_permissions(input, context) {
|
|
100
|
+
const status = optionalInteger(input.status);
|
|
101
|
+
return callWechatApi(context, {
|
|
102
|
+
method: "POST",
|
|
103
|
+
path: "/shop/ec/category/get_category_relation_list",
|
|
104
|
+
body: compactObject({ is_filter_status: status !== undefined, status }),
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
precheck_product_category(input, context) {
|
|
108
|
+
return callWechatApi(context, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
path: "/channels/ec/product/categoryprecheck",
|
|
111
|
+
body: compactObject({
|
|
112
|
+
cat_id: input.catId === undefined ? undefined : positiveInteger(input.catId, "catId", providerInputError),
|
|
113
|
+
}),
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
get_category_product_rule(input, context) {
|
|
117
|
+
return callWechatApi(context, {
|
|
118
|
+
method: "POST",
|
|
119
|
+
path: "/shop/ec/category/getcategoryproductrule",
|
|
120
|
+
body: compactObject({
|
|
121
|
+
cat_id: positiveInteger(input.catId, "catId", providerInputError),
|
|
122
|
+
release_mode: optionalInteger(input.releaseMode),
|
|
123
|
+
brand_id: input.brandId === undefined ? undefined : positiveInteger(input.brandId, "brandId", providerInputError),
|
|
124
|
+
}),
|
|
65
125
|
});
|
|
66
126
|
},
|
|
67
127
|
list_valid_brands(input, context) {
|
|
@@ -260,7 +320,7 @@ const weixinStoreActionHandlers = {
|
|
|
260
320
|
path: "/channels/ec/aftersale/rejectapply",
|
|
261
321
|
body: compactObject({
|
|
262
322
|
after_sale_order_id: requiredInputString(input.afterSaleOrderId, "afterSaleOrderId"),
|
|
263
|
-
reject_reason_type:
|
|
323
|
+
reject_reason_type: positiveInteger(input.rejectReasonType, "rejectReasonType", providerInputError),
|
|
264
324
|
reject_reason: optionalString(input.rejectReason),
|
|
265
325
|
}),
|
|
266
326
|
});
|
|
@@ -299,8 +359,8 @@ export const credentialValidators = {
|
|
|
299
359
|
};
|
|
300
360
|
/** Upload a local transit file as a store image, which WeChat sizes from the required pixel dimensions. */
|
|
301
361
|
async function uploadImageFile(context, input) {
|
|
302
|
-
const width =
|
|
303
|
-
const height =
|
|
362
|
+
const width = positiveInteger(input.width, "width", providerInputError);
|
|
363
|
+
const height = positiveInteger(input.height, "height", providerInputError);
|
|
304
364
|
const file = await readTransitFileInput(input.file, context);
|
|
305
365
|
const formData = new FormData();
|
|
306
366
|
formData.set("media", file.file, file.name);
|
|
@@ -362,6 +422,38 @@ async function executeWechatJsonRequest(context, request, accessToken) {
|
|
|
362
422
|
return { status: response.status, record: parseWechatJson(rawText), rawText };
|
|
363
423
|
});
|
|
364
424
|
}
|
|
425
|
+
/**
|
|
426
|
+
* Build the category_info of a category application: force the certificate-group
|
|
427
|
+
* protocol and send every id as the number WeChat documents, since callers often
|
|
428
|
+
* copy them from responses that carry numeric ids as strings.
|
|
429
|
+
*/
|
|
430
|
+
function mapCategoryApplication(categoryInfo) {
|
|
431
|
+
return {
|
|
432
|
+
...categoryInfo,
|
|
433
|
+
cats_v2: objectArray(categoryInfo.cats_v2, "categoryInfo.cats_v2", providerInputError).map((cat) => ({
|
|
434
|
+
...cat,
|
|
435
|
+
cat_id: positiveInteger(cat.cat_id, "categoryInfo.cats_v2[].cat_id", providerInputError),
|
|
436
|
+
})),
|
|
437
|
+
license_group_list: objectArray(categoryInfo.license_group_list, "categoryInfo.license_group_list", providerInputError).map((group) => {
|
|
438
|
+
const license = optionalRecord(group.license) ?? {};
|
|
439
|
+
return {
|
|
440
|
+
...group,
|
|
441
|
+
license_group_id: positiveInteger(group.license_group_id, "categoryInfo.license_group_list[].license_group_id", providerInputError),
|
|
442
|
+
license: {
|
|
443
|
+
...license,
|
|
444
|
+
license_id: positiveInteger(license.license_id, "categoryInfo.license_group_list[].license.license_id", providerInputError),
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
}),
|
|
448
|
+
brand_list: categoryInfo.brand_list === undefined
|
|
449
|
+
? undefined
|
|
450
|
+
: objectArray(categoryInfo.brand_list, "categoryInfo.brand_list", providerInputError).map((brand) => ({
|
|
451
|
+
...brand,
|
|
452
|
+
brand_id: positiveInteger(brand.brand_id, "categoryInfo.brand_list[].brand_id", providerInputError),
|
|
453
|
+
})),
|
|
454
|
+
is_new_apply_cat: true,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
365
457
|
/** WeChat only reads deliver_acct_type when deliver_method is 3, and then it is required. */
|
|
366
458
|
function checkProductPayload(input) {
|
|
367
459
|
if (optionalInteger(input.deliverMethod) === 3 && input.deliverAcctType === undefined) {
|
|
@@ -447,13 +539,6 @@ function readOffsetLimit(input) {
|
|
|
447
539
|
function readPageSize(input, max, defaultValue) {
|
|
448
540
|
return readBoundedInteger(input.pageSize, "pageSize", 1, max) ?? defaultValue;
|
|
449
541
|
}
|
|
450
|
-
function readPositiveInteger(value, fieldName) {
|
|
451
|
-
const parsed = optionalInteger(value);
|
|
452
|
-
if (parsed === undefined || parsed < 1) {
|
|
453
|
-
throw providerInputError(`${fieldName} must be a positive integer`);
|
|
454
|
-
}
|
|
455
|
-
return parsed;
|
|
456
|
-
}
|
|
457
542
|
/** Read a WeChat id that the docs type inconsistently as string or number; numbers are sent in string form. */
|
|
458
543
|
function readIdString(value, fieldName) {
|
|
459
544
|
const stringId = optionalString(value);
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
3
|
+
import type { PollDefinition } from "../../triggers/common/poll.ts";
|
|
2
4
|
export declare const executors: ProviderExecutors;
|
|
3
5
|
export declare const proxy: ProviderProxyExecutor;
|
|
4
6
|
export declare const credentialValidators: CredentialValidators;
|
|
7
|
+
export declare const triggers: readonly (IntegrationDefinition | PollDefinition)[];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isPrivateNetworkAccessAllowed } from "../../core/request.js";
|
|
2
2
|
import { basicAuthorizationHeader, createProviderFetch, createProviderProxyUrl, defineProviderExecutors, normalizeProviderProxyHeaders, ProviderRequestError, providerUserAgent, readProviderProxyErrorMessage, readProviderProxyResponse, requireCustomCredential, toProviderProxyError, } from "../provider-runtime.js";
|
|
3
3
|
import { resolveWooCommerceCredentialContext, validateWooCommerceCredential, woocommerceActionHandlers, } from "./runtime.js";
|
|
4
|
+
import { wooCommerceStoreEvent } from "./trigger-on-store-event.js";
|
|
4
5
|
const service = "woocommerce";
|
|
5
6
|
const proxyFetch = createProviderFetch({ allowPrivateNetwork: isPrivateNetworkAccessAllowed });
|
|
6
7
|
export const executors = defineProviderExecutors({
|
|
@@ -49,3 +50,4 @@ export const credentialValidators = {
|
|
|
49
50
|
return validateWooCommerceCredential(input.values, guardedFetcher, signal);
|
|
50
51
|
},
|
|
51
52
|
};
|
|
53
|
+
export const triggers = [wooCommerceStoreEvent];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
const topics = [
|
|
3
|
+
"coupon.created",
|
|
4
|
+
"coupon.updated",
|
|
5
|
+
"coupon.deleted",
|
|
6
|
+
"coupon.restored",
|
|
7
|
+
"customer.created",
|
|
8
|
+
"customer.updated",
|
|
9
|
+
"customer.deleted",
|
|
10
|
+
"order.created",
|
|
11
|
+
"order.updated",
|
|
12
|
+
"order.deleted",
|
|
13
|
+
"order.restored",
|
|
14
|
+
"product.created",
|
|
15
|
+
"product.updated",
|
|
16
|
+
"product.deleted",
|
|
17
|
+
"product.restored",
|
|
18
|
+
"product.published",
|
|
19
|
+
];
|
|
20
|
+
export const snapshot = {
|
|
21
|
+
configInputs: [
|
|
22
|
+
{
|
|
23
|
+
handle: "events",
|
|
24
|
+
jsonSchema: s.array(s.stringEnum(topics), { maxItems: 16, minItems: 1, uniqueItems: true }),
|
|
25
|
+
nullable: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
handle: "webhookName",
|
|
29
|
+
jsonSchema: s.string({ maxLength: 120, minLength: 1 }),
|
|
30
|
+
nullable: false,
|
|
31
|
+
value: "OOMOL Trigger",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
definitionVersion: 2,
|
|
35
|
+
description: "Triggers when selected WooCommerce store events occur.",
|
|
36
|
+
displayName: "Store Event",
|
|
37
|
+
endpoint: {
|
|
38
|
+
body: { allowArray: false, allowEmpty: false, formats: ["json"] },
|
|
39
|
+
methods: ["POST"],
|
|
40
|
+
successStatus: 202,
|
|
41
|
+
},
|
|
42
|
+
key: "woocommerce.on_store_event",
|
|
43
|
+
name: "on_store_event",
|
|
44
|
+
outputs: [
|
|
45
|
+
{ handle: "body", jsonSchema: { type: "object" }, nullable: false },
|
|
46
|
+
{ handle: "deliveryId", jsonSchema: s.string(), nullable: false },
|
|
47
|
+
{ handle: "event", jsonSchema: s.string(), nullable: false },
|
|
48
|
+
{ handle: "resource", jsonSchema: s.string(), nullable: false },
|
|
49
|
+
{ handle: "source", jsonSchema: s.string(), nullable: false },
|
|
50
|
+
{ handle: "topic", jsonSchema: s.string(), nullable: false },
|
|
51
|
+
{ handle: "webhookId", jsonSchema: s.string(), nullable: false },
|
|
52
|
+
],
|
|
53
|
+
provider: "woocommerce",
|
|
54
|
+
type: "integration",
|
|
55
|
+
};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { IntegrationConnectionError, PermanentIntegrationError, TransientIntegrationError, } from "../../triggers/common/integration.js";
|
|
2
|
+
import { verifyBase64Hmac } from "../../triggers/signature.js";
|
|
3
|
+
import { snapshot } from "./trigger-on-store-event.definition.js";
|
|
4
|
+
export const wooCommerceStoreEvent = {
|
|
5
|
+
initialState: { checkpoint: null, subscription: {} },
|
|
6
|
+
snapshot,
|
|
7
|
+
async receive(context) {
|
|
8
|
+
if (!(await verifyBase64Hmac(context.callbackSecret, [context.rawBody], context.header("x-wc-webhook-signature")))) {
|
|
9
|
+
return { body: "", contentType: "text/plain", outcome: "respond", status: 404 };
|
|
10
|
+
}
|
|
11
|
+
const topic = context.header("x-wc-webhook-topic")?.trim();
|
|
12
|
+
if (!topic)
|
|
13
|
+
return { outcome: "ignored", reason: "WooCommerce topic header is missing." };
|
|
14
|
+
if (!resolveConfig(context.config).events.includes(topic))
|
|
15
|
+
return { outcome: "ignored", reason: "WooCommerce topic is not subscribed." };
|
|
16
|
+
const deliveryId = context.header("x-wc-webhook-delivery-id") ?? "";
|
|
17
|
+
return {
|
|
18
|
+
dedupeKey: deliveryId.length == 0 ? undefined : deliveryId,
|
|
19
|
+
outcome: "event",
|
|
20
|
+
outputs: {
|
|
21
|
+
body: context.payload,
|
|
22
|
+
deliveryId,
|
|
23
|
+
event: context.header("x-wc-webhook-event") ?? "",
|
|
24
|
+
resource: context.header("x-wc-webhook-resource") ?? "",
|
|
25
|
+
source: context.header("x-wc-webhook-source") ?? "",
|
|
26
|
+
topic,
|
|
27
|
+
webhookId: context.header("x-wc-webhook-id") ?? "",
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
async reconcile(context) {
|
|
32
|
+
const state = requireState(context.state);
|
|
33
|
+
const config = resolveConfig(context.config);
|
|
34
|
+
const listed = await list(context);
|
|
35
|
+
if (!context.active) {
|
|
36
|
+
for (const value of listed)
|
|
37
|
+
await remove(context, value.id);
|
|
38
|
+
await state.saveSubscription({}, later(context.now));
|
|
39
|
+
return { outcome: "ready" };
|
|
40
|
+
}
|
|
41
|
+
const adopted = new Map();
|
|
42
|
+
for (const value of listed)
|
|
43
|
+
if (config.events.includes(value.topic) && !adopted.has(value.topic))
|
|
44
|
+
adopted.set(value.topic, value.id);
|
|
45
|
+
const kept = new Set(adopted.values());
|
|
46
|
+
for (const value of listed)
|
|
47
|
+
if (!kept.has(value.id))
|
|
48
|
+
await remove(context, value.id);
|
|
49
|
+
const ids = [];
|
|
50
|
+
for (const topic of config.events) {
|
|
51
|
+
const existing = adopted.get(topic);
|
|
52
|
+
ids.push(existing == null ? await create(context, config, topic) : await align(context, existing, topic));
|
|
53
|
+
}
|
|
54
|
+
await state.saveSubscription({ webhookIds: ids }, later(context.now));
|
|
55
|
+
return { outcome: "ready" };
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
function resolveConfig(value) {
|
|
59
|
+
return {
|
|
60
|
+
events: [...new Set(value.events)],
|
|
61
|
+
webhookName: value.webhookName,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function create(context, config, topic) {
|
|
65
|
+
const result = await request(context, `webhook create (${topic})`, {
|
|
66
|
+
body: {
|
|
67
|
+
delivery_url: context.endpointUrl,
|
|
68
|
+
name: `${config.webhookName} - ${topic}`,
|
|
69
|
+
secret: context.callbackSecret,
|
|
70
|
+
topic,
|
|
71
|
+
},
|
|
72
|
+
endpoint: "/webhooks",
|
|
73
|
+
method: "POST",
|
|
74
|
+
});
|
|
75
|
+
success(result, `webhook create (${topic})`);
|
|
76
|
+
return readId(result.data);
|
|
77
|
+
}
|
|
78
|
+
async function align(context, webhookId, topic) {
|
|
79
|
+
const result = await request(context, `webhook update (${topic})`, {
|
|
80
|
+
body: {
|
|
81
|
+
delivery_url: context.endpointUrl,
|
|
82
|
+
secret: context.callbackSecret,
|
|
83
|
+
status: "active",
|
|
84
|
+
topic,
|
|
85
|
+
},
|
|
86
|
+
endpoint: `/webhooks/${webhookId}`,
|
|
87
|
+
method: "PUT",
|
|
88
|
+
});
|
|
89
|
+
if (invalidId(result))
|
|
90
|
+
return create(context, resolveConfig(context.config), topic);
|
|
91
|
+
success(result, `webhook update (${topic})`);
|
|
92
|
+
return webhookId;
|
|
93
|
+
}
|
|
94
|
+
async function list(context) {
|
|
95
|
+
const matches = [];
|
|
96
|
+
for (let page = 1; page <= 10; page += 1) {
|
|
97
|
+
const result = await request(context, "webhook list", {
|
|
98
|
+
endpoint: "/webhooks",
|
|
99
|
+
method: "GET",
|
|
100
|
+
query: { context: "view", page, per_page: 100, status: "all" },
|
|
101
|
+
});
|
|
102
|
+
success(result, "webhook list");
|
|
103
|
+
const hooks = Array.isArray(result.data) ? result.data : [];
|
|
104
|
+
for (const hook of hooks) {
|
|
105
|
+
const value = record(hook);
|
|
106
|
+
if (value?.delivery_url !== context.endpointUrl || typeof value.topic != "string")
|
|
107
|
+
continue;
|
|
108
|
+
const webhookId = normalizeId(value.id);
|
|
109
|
+
if (webhookId != null)
|
|
110
|
+
matches.push({ id: webhookId, topic: value.topic });
|
|
111
|
+
}
|
|
112
|
+
if (hooks.length < 100)
|
|
113
|
+
return matches;
|
|
114
|
+
}
|
|
115
|
+
throw new TransientIntegrationError("WooCommerce webhook list did not finish within ten pages.");
|
|
116
|
+
}
|
|
117
|
+
async function remove(context, webhookId) {
|
|
118
|
+
const result = await request(context, "webhook delete", {
|
|
119
|
+
endpoint: `/webhooks/${webhookId}`,
|
|
120
|
+
method: "DELETE",
|
|
121
|
+
query: { force: "true" },
|
|
122
|
+
});
|
|
123
|
+
if (result.status != 404)
|
|
124
|
+
success(result, "webhook delete");
|
|
125
|
+
}
|
|
126
|
+
async function request(context, operation, value) {
|
|
127
|
+
try {
|
|
128
|
+
return await context.connector.execute(value, context.signal);
|
|
129
|
+
}
|
|
130
|
+
catch (cause) {
|
|
131
|
+
if (cause instanceof IntegrationConnectionError)
|
|
132
|
+
throw cause;
|
|
133
|
+
throw new TransientIntegrationError(`WooCommerce ${operation} request failed.`, { cause });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function success(result, operation) {
|
|
137
|
+
if (result.status >= 200 && result.status < 300)
|
|
138
|
+
return;
|
|
139
|
+
const code = errorCode(result.data);
|
|
140
|
+
if (result.status == 401 || result.status == 403)
|
|
141
|
+
throw new IntegrationConnectionError(`WooCommerce ${operation} rejected the Connection.`);
|
|
142
|
+
if (result.status == 404 ||
|
|
143
|
+
(result.status == 400 && (code.endsWith("_invalid_topic") || code.endsWith("_invalid_delivery_url"))) ||
|
|
144
|
+
(result.status == 501 && code == "woocommerce_rest_trash_not_supported")) {
|
|
145
|
+
throw new PermanentIntegrationError(`WooCommerce ${operation} rejected the subscription.`);
|
|
146
|
+
}
|
|
147
|
+
throw new TransientIntegrationError(`WooCommerce ${operation} failed with status ${result.status}.`);
|
|
148
|
+
}
|
|
149
|
+
function invalidId(result) {
|
|
150
|
+
return result.status == 400 && errorCode(result.data) == "woocommerce_rest_webhook_invalid_id";
|
|
151
|
+
}
|
|
152
|
+
function errorCode(data) {
|
|
153
|
+
const value = record(data)?.code;
|
|
154
|
+
return typeof value == "string" ? value : "";
|
|
155
|
+
}
|
|
156
|
+
function readId(data) {
|
|
157
|
+
const value = normalizeId(record(data)?.id);
|
|
158
|
+
if (value == null)
|
|
159
|
+
throw new TransientIntegrationError("WooCommerce webhook response is missing its ID.");
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
function normalizeId(value) {
|
|
163
|
+
if (typeof value == "string" && value.length > 0)
|
|
164
|
+
return value;
|
|
165
|
+
return typeof value == "number" && Number.isFinite(value) ? String(value) : null;
|
|
166
|
+
}
|
|
167
|
+
function requireState(value) {
|
|
168
|
+
if (value == null)
|
|
169
|
+
throw new PermanentIntegrationError("WooCommerce Integration state is missing.");
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
172
|
+
function later(now) {
|
|
173
|
+
return new Date(now.getTime() + 30 * 24 * 60 * 60 * 1_000);
|
|
174
|
+
}
|
|
175
|
+
function record(value) {
|
|
176
|
+
return value != null && typeof value == "object" && !Array.isArray(value)
|
|
177
|
+
? value
|
|
178
|
+
: undefined;
|
|
179
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
3
|
+
import type { PollDefinition } from "../../triggers/common/poll.ts";
|
|
2
4
|
export declare const executors: ProviderExecutors;
|
|
3
5
|
export declare const proxy: ProviderProxyExecutor;
|
|
4
6
|
export declare const credentialValidators: CredentialValidators;
|
|
7
|
+
export declare const triggers: readonly (IntegrationDefinition | PollDefinition)[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { basicAuthorizationHeader, createProviderProxyUrl, defineProviderExecutors, normalizeProviderProxyHeaders, providerFetch, ProviderRequestError, providerUserAgent, readProviderProxyErrorMessage, readProviderProxyResponse, requireApiKeyCredential, requireOAuthCredential, toProviderProxyError, } from "../provider-runtime.js";
|
|
2
2
|
import { validateZendeskCredential, zendeskActionHandlers } from "./runtime.js";
|
|
3
|
+
import { zendeskEvent } from "./trigger-on-event.js";
|
|
3
4
|
const service = "zendesk";
|
|
4
5
|
export const executors = defineProviderExecutors({
|
|
5
6
|
service,
|
|
@@ -128,3 +129,4 @@ function normalizeZendeskSubdomain(raw) {
|
|
|
128
129
|
}
|
|
129
130
|
return subdomain;
|
|
130
131
|
}
|
|
132
|
+
export const triggers = [zendeskEvent];
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
const events = [
|
|
3
|
+
"zen:event-type:ticket.agent_assignment_changed",
|
|
4
|
+
"zen:event-type:ticket.attachment_linked_to_comment",
|
|
5
|
+
"zen:event-type:ticket.attachment_redacted_from_comment",
|
|
6
|
+
"zen:event-type:ticket.brand_changed",
|
|
7
|
+
"zen:event-type:ticket.comment_added",
|
|
8
|
+
"zen:event-type:ticket.comment_made_private",
|
|
9
|
+
"zen:event-type:ticket.comment_redacted",
|
|
10
|
+
"zen:event-type:ticket.created",
|
|
11
|
+
"zen:event-type:ticket.csat_received",
|
|
12
|
+
"zen:event-type:ticket.csat_requested",
|
|
13
|
+
"zen:event-type:ticket.custom_field_changed",
|
|
14
|
+
"zen:event-type:ticket.custom_status_changed",
|
|
15
|
+
"zen:event-type:ticket.description_changed",
|
|
16
|
+
"zen:event-type:ticket.email_ccs_changed",
|
|
17
|
+
"zen:event-type:ticket.external_id_changed",
|
|
18
|
+
"zen:event-type:ticket.followers_changed",
|
|
19
|
+
"zen:event-type:ticket.form_changed",
|
|
20
|
+
"zen:event-type:ticket.group_assignment_changed",
|
|
21
|
+
"zen:event-type:ticket.marked_as_spam",
|
|
22
|
+
"zen:event-type:ticket.merged",
|
|
23
|
+
"zen:event-type:ticket.next_sla_breach_changed",
|
|
24
|
+
"zen:event-type:ticket.ola_policy_changed",
|
|
25
|
+
"zen:event-type:ticket.organization_changed",
|
|
26
|
+
"zen:event-type:ticket.permanently_deleted",
|
|
27
|
+
"zen:event-type:ticket.priority_changed",
|
|
28
|
+
"zen:event-type:ticket.problem_link_changed",
|
|
29
|
+
"zen:event-type:ticket.requester_changed",
|
|
30
|
+
"zen:event-type:ticket.schedule_changed",
|
|
31
|
+
"zen:event-type:ticket.sla_policy_changed",
|
|
32
|
+
"zen:event-type:ticket.soft_deleted",
|
|
33
|
+
"zen:event-type:ticket.status_changed",
|
|
34
|
+
"zen:event-type:ticket.subject_changed",
|
|
35
|
+
"zen:event-type:ticket.submitter_changed",
|
|
36
|
+
"zen:event-type:ticket.tags_changed",
|
|
37
|
+
"zen:event-type:ticket.task_due_at_changed",
|
|
38
|
+
"zen:event-type:ticket.type_changed",
|
|
39
|
+
"zen:event-type:ticket.undeleted",
|
|
40
|
+
"zen:event-type:organization.created",
|
|
41
|
+
"zen:event-type:organization.custom_field_changed",
|
|
42
|
+
"zen:event-type:organization.deleted",
|
|
43
|
+
"zen:event-type:organization.external_id_changed",
|
|
44
|
+
"zen:event-type:organization.name_changed",
|
|
45
|
+
"zen:event-type:organization.tags_changed",
|
|
46
|
+
"zen:event-type:user.active_changed",
|
|
47
|
+
"zen:event-type:user.alias_changed",
|
|
48
|
+
"zen:event-type:user.created",
|
|
49
|
+
"zen:event-type:user.custom_field_changed",
|
|
50
|
+
"zen:event-type:user.custom_role_changed",
|
|
51
|
+
"zen:event-type:user.default_group_changed",
|
|
52
|
+
"zen:event-type:user.deleted",
|
|
53
|
+
"zen:event-type:user.details_changed",
|
|
54
|
+
"zen:event-type:user.external_id_changed",
|
|
55
|
+
"zen:event-type:user.group_membership_created",
|
|
56
|
+
"zen:event-type:user.group_membership_deleted",
|
|
57
|
+
"zen:event-type:user.identity_changed",
|
|
58
|
+
"zen:event-type:user.identity_created",
|
|
59
|
+
"zen:event-type:user.identity_deleted",
|
|
60
|
+
"zen:event-type:user.last_login_changed",
|
|
61
|
+
"zen:event-type:user.merged",
|
|
62
|
+
"zen:event-type:user.name_changed",
|
|
63
|
+
"zen:event-type:user.notes_changed",
|
|
64
|
+
"zen:event-type:user.only_private_comments_changed",
|
|
65
|
+
"zen:event-type:user.organization_membership_created",
|
|
66
|
+
"zen:event-type:user.organization_membership_deleted",
|
|
67
|
+
"zen:event-type:user.password_changed",
|
|
68
|
+
"zen:event-type:user.photo_changed",
|
|
69
|
+
"zen:event-type:user.role_changed",
|
|
70
|
+
"zen:event-type:user.suspended_changed",
|
|
71
|
+
"zen:event-type:user.tags_changed",
|
|
72
|
+
"zen:event-type:user.time_zone_changed",
|
|
73
|
+
];
|
|
74
|
+
export const endpoint = "/api/v2/webhooks";
|
|
75
|
+
export const snapshot = {
|
|
76
|
+
configInputs: [
|
|
77
|
+
{
|
|
78
|
+
handle: "events",
|
|
79
|
+
jsonSchema: s.array(s.stringEnum(events), { minItems: 1, uniqueItems: true }),
|
|
80
|
+
nullable: false,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
definitionVersion: 2,
|
|
84
|
+
description: "Triggers when one of the selected Zendesk account events occurs.",
|
|
85
|
+
displayName: "Event Subscription",
|
|
86
|
+
endpoint: {
|
|
87
|
+
body: { allowArray: false, allowEmpty: false, formats: ["json"] },
|
|
88
|
+
methods: ["POST"],
|
|
89
|
+
successStatus: 202,
|
|
90
|
+
},
|
|
91
|
+
key: "zendesk.on_event",
|
|
92
|
+
name: "on_event",
|
|
93
|
+
outputs: [
|
|
94
|
+
{ handle: "body", jsonSchema: { type: "object" }, nullable: false },
|
|
95
|
+
{ handle: "deliveryId", jsonSchema: s.string(), nullable: false },
|
|
96
|
+
{ handle: "event", jsonSchema: s.string(), nullable: false },
|
|
97
|
+
{ handle: "subject", jsonSchema: s.string(), nullable: false },
|
|
98
|
+
],
|
|
99
|
+
provider: "zendesk",
|
|
100
|
+
type: "integration",
|
|
101
|
+
};
|