@wolpertingerlabs/drawlatch 1.0.0-alpha.2 → 1.0.0-alpha.29

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.
Files changed (119) hide show
  1. package/CONNECTIONS.md +3 -0
  2. package/README.md +395 -465
  3. package/bin/drawlatch.js +1018 -49
  4. package/dist/auth/auth.d.ts +10 -0
  5. package/dist/auth/auth.js +146 -0
  6. package/dist/auth/env-writer.d.ts +6 -0
  7. package/dist/auth/env-writer.js +52 -0
  8. package/dist/auth/password.d.ts +8 -0
  9. package/dist/auth/password.js +28 -0
  10. package/dist/auth/sessions.d.ts +13 -0
  11. package/dist/auth/sessions.js +85 -0
  12. package/dist/cli/generate-keys.d.ts +4 -4
  13. package/dist/cli/generate-keys.js +30 -25
  14. package/dist/connections/{anthropic.json → ai/anthropic.json} +19 -1
  15. package/dist/connections/{devin.json → ai/devin.json} +7 -1
  16. package/dist/connections/{google-ai.json → ai/google-ai.json} +7 -1
  17. package/dist/connections/{openai.json → ai/openai.json} +7 -1
  18. package/dist/connections/{openrouter.json → ai/openrouter.json} +7 -1
  19. package/dist/connections/developer-tools/github.json +138 -0
  20. package/dist/connections/{hex.json → developer-tools/hex.json} +7 -1
  21. package/dist/connections/developer-tools/linear.json +75 -0
  22. package/dist/connections/{lichess.json → gaming/lichess.json} +7 -1
  23. package/dist/connections/messaging/agentmail.json +21 -0
  24. package/dist/connections/messaging/discord-bot.json +114 -0
  25. package/dist/connections/{discord-oauth.json → messaging/discord-oauth.json} +7 -1
  26. package/dist/connections/messaging/slack.json +75 -0
  27. package/dist/connections/messaging/telegram.json +66 -0
  28. package/dist/connections/{google.json → productivity/google.json} +7 -1
  29. package/dist/connections/productivity/notion.json +75 -0
  30. package/dist/connections/productivity/stripe.json +74 -0
  31. package/dist/connections/productivity/trello.json +113 -0
  32. package/dist/connections/{bluesky.json → social-media/bluesky.json} +41 -0
  33. package/dist/connections/social-media/mastodon.json +65 -0
  34. package/dist/connections/social-media/reddit.json +80 -0
  35. package/dist/connections/{twitch.json → social-media/twitch.json} +40 -0
  36. package/dist/connections/social-media/x.json +67 -0
  37. package/dist/mcp/server.js +544 -31
  38. package/dist/remote/admin-mutations.d.ts +37 -0
  39. package/dist/remote/admin-mutations.js +251 -0
  40. package/dist/remote/admin-types.d.ts +149 -0
  41. package/dist/remote/admin-types.js +11 -0
  42. package/dist/remote/admin.d.ts +37 -0
  43. package/dist/remote/admin.js +316 -0
  44. package/dist/remote/caller-bootstrap.d.ts +71 -0
  45. package/dist/remote/caller-bootstrap.js +141 -0
  46. package/dist/remote/ingestors/base-ingestor.d.ts +19 -3
  47. package/dist/remote/ingestors/base-ingestor.js +27 -6
  48. package/dist/remote/ingestors/discord/discord-gateway.d.ts +2 -2
  49. package/dist/remote/ingestors/discord/discord-gateway.js +29 -6
  50. package/dist/remote/ingestors/e2e/setup.d.ts +69 -0
  51. package/dist/remote/ingestors/e2e/setup.js +147 -0
  52. package/dist/remote/ingestors/manager.d.ts +110 -10
  53. package/dist/remote/ingestors/manager.js +449 -42
  54. package/dist/remote/ingestors/poll/poll-ingestor.d.ts +4 -2
  55. package/dist/remote/ingestors/poll/poll-ingestor.js +26 -5
  56. package/dist/remote/ingestors/registry.d.ts +2 -2
  57. package/dist/remote/ingestors/registry.js +2 -2
  58. package/dist/remote/ingestors/slack/socket-mode.d.ts +2 -2
  59. package/dist/remote/ingestors/slack/socket-mode.js +28 -6
  60. package/dist/remote/ingestors/types.d.ts +25 -0
  61. package/dist/remote/ingestors/webhook/base-webhook-ingestor.d.ts +46 -7
  62. package/dist/remote/ingestors/webhook/base-webhook-ingestor.js +115 -10
  63. package/dist/remote/ingestors/webhook/github-webhook-ingestor.d.ts +30 -0
  64. package/dist/remote/ingestors/webhook/github-webhook-ingestor.js +73 -2
  65. package/dist/remote/ingestors/webhook/lifecycle-types.d.ts +63 -0
  66. package/dist/remote/ingestors/webhook/lifecycle-types.js +12 -0
  67. package/dist/remote/ingestors/webhook/stripe-webhook-ingestor.js +2 -2
  68. package/dist/remote/ingestors/webhook/trello-webhook-ingestor.d.ts +17 -5
  69. package/dist/remote/ingestors/webhook/trello-webhook-ingestor.js +32 -26
  70. package/dist/remote/ingestors/webhook/webhook-lifecycle-manager.d.ts +46 -0
  71. package/dist/remote/ingestors/webhook/webhook-lifecycle-manager.js +261 -0
  72. package/dist/remote/server.d.ts +25 -33
  73. package/dist/remote/server.js +681 -195
  74. package/dist/remote/tool-dispatch.d.ts +84 -0
  75. package/dist/remote/tool-dispatch.js +910 -0
  76. package/dist/remote/triggers/rule-engine.d.ts +40 -0
  77. package/dist/remote/triggers/rule-engine.js +228 -0
  78. package/dist/remote/triggers/types.d.ts +69 -0
  79. package/dist/remote/triggers/types.js +10 -0
  80. package/dist/remote/tunnel-state.d.ts +14 -0
  81. package/dist/remote/tunnel-state.js +20 -0
  82. package/dist/remote/tunnel.d.ts +53 -0
  83. package/dist/remote/tunnel.js +149 -0
  84. package/dist/shared/config.d.ts +97 -25
  85. package/dist/shared/config.js +48 -35
  86. package/dist/shared/connections.d.ts +21 -5
  87. package/dist/shared/connections.js +56 -14
  88. package/dist/shared/crypto/index.d.ts +1 -0
  89. package/dist/shared/crypto/index.js +1 -0
  90. package/dist/shared/crypto/key-manager.d.ts +67 -0
  91. package/dist/shared/crypto/key-manager.js +152 -0
  92. package/dist/shared/env-utils.d.ts +42 -0
  93. package/dist/shared/env-utils.js +150 -0
  94. package/dist/shared/listener-config.d.ts +157 -0
  95. package/dist/shared/listener-config.js +10 -0
  96. package/dist/shared/migrations.d.ts +40 -0
  97. package/dist/shared/migrations.js +122 -0
  98. package/dist/shared/protocol/handshake.js +14 -1
  99. package/dist/shared/protocol/index.d.ts +2 -0
  100. package/dist/shared/protocol/index.js +2 -0
  101. package/dist/shared/protocol/sync-client.d.ts +52 -0
  102. package/dist/shared/protocol/sync-client.js +99 -0
  103. package/dist/shared/protocol/sync.d.ts +71 -0
  104. package/dist/shared/protocol/sync.js +176 -0
  105. package/frontend/dist/assets/index-D4k5QKBP.css +1 -0
  106. package/frontend/dist/assets/index-IzwnSOmu.js +267 -0
  107. package/frontend/dist/index.html +15 -0
  108. package/package.json +66 -13
  109. package/dist/connections/discord-bot.json +0 -24
  110. package/dist/connections/github.json +0 -25
  111. package/dist/connections/linear.json +0 -29
  112. package/dist/connections/mastodon.json +0 -25
  113. package/dist/connections/notion.json +0 -33
  114. package/dist/connections/reddit.json +0 -28
  115. package/dist/connections/slack.json +0 -23
  116. package/dist/connections/stripe.json +0 -25
  117. package/dist/connections/telegram.json +0 -26
  118. package/dist/connections/trello.json +0 -25
  119. package/dist/connections/x.json +0 -27
@@ -0,0 +1,15 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
+ <meta name="apple-mobile-web-app-capable" content="yes" />
7
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
8
+ <title>drawlatch</title>
9
+ <script type="module" crossorigin src="/assets/index-IzwnSOmu.js"></script>
10
+ <link rel="stylesheet" crossorigin href="/assets/index-D4k5QKBP.css">
11
+ </head>
12
+ <body>
13
+ <div id="root"></div>
14
+ </body>
15
+ </html>
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "@wolpertingerlabs/drawlatch",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.29",
4
4
  "description": "Encrypted MCP proxy with mutual authentication. Local MCP server forwards requests through an encrypted channel to a remote secrets-holding server.",
5
5
  "type": "module",
6
+ "workspaces": [
7
+ "frontend"
8
+ ],
6
9
  "main": "./dist/mcp/server.js",
7
10
  "types": "./dist/mcp/server.d.ts",
8
11
  "bin": {
@@ -13,6 +16,8 @@
13
16
  "!dist/**/*.test.*",
14
17
  "!dist/**/*.js.map",
15
18
  "!dist/**/*.d.ts.map",
19
+ "frontend/dist",
20
+ "!frontend/dist/**/*.map",
16
21
  "bin",
17
22
  "README.md",
18
23
  "CONNECTIONS.md",
@@ -21,42 +26,86 @@
21
26
  "exports": {
22
27
  ".": {
23
28
  "types": "./dist/mcp/server.d.ts",
24
- "import": "./dist/mcp/server.js"
29
+ "import": "./dist/mcp/server.js",
30
+ "default": "./dist/mcp/server.js"
25
31
  },
26
32
  "./shared/crypto": {
27
33
  "types": "./dist/shared/crypto/index.d.ts",
28
- "import": "./dist/shared/crypto/index.js"
34
+ "import": "./dist/shared/crypto/index.js",
35
+ "default": "./dist/shared/crypto/index.js"
29
36
  },
30
37
  "./shared/protocol": {
31
38
  "types": "./dist/shared/protocol/index.d.ts",
32
- "import": "./dist/shared/protocol/index.js"
39
+ "import": "./dist/shared/protocol/index.js",
40
+ "default": "./dist/shared/protocol/index.js"
33
41
  },
34
42
  "./shared/config": {
35
43
  "types": "./dist/shared/config.d.ts",
36
- "import": "./dist/shared/config.js"
44
+ "import": "./dist/shared/config.js",
45
+ "default": "./dist/shared/config.js"
37
46
  },
38
47
  "./shared/connections": {
39
48
  "types": "./dist/shared/connections.d.ts",
40
- "import": "./dist/shared/connections.js"
49
+ "import": "./dist/shared/connections.js",
50
+ "default": "./dist/shared/connections.js"
51
+ },
52
+ "./shared/env-utils": {
53
+ "types": "./dist/shared/env-utils.d.ts",
54
+ "import": "./dist/shared/env-utils.js",
55
+ "default": "./dist/shared/env-utils.js"
56
+ },
57
+ "./shared/crypto/key-manager": {
58
+ "types": "./dist/shared/crypto/key-manager.d.ts",
59
+ "import": "./dist/shared/crypto/key-manager.js",
60
+ "default": "./dist/shared/crypto/key-manager.js"
41
61
  },
42
62
  "./remote/server": {
43
63
  "types": "./dist/remote/server.d.ts",
44
- "import": "./dist/remote/server.js"
64
+ "import": "./dist/remote/server.js",
65
+ "default": "./dist/remote/server.js"
66
+ },
67
+ "./remote/tool-dispatch": {
68
+ "types": "./dist/remote/tool-dispatch.d.ts",
69
+ "import": "./dist/remote/tool-dispatch.js",
70
+ "default": "./dist/remote/tool-dispatch.js"
71
+ },
72
+ "./remote/caller-bootstrap": {
73
+ "types": "./dist/remote/caller-bootstrap.d.ts",
74
+ "import": "./dist/remote/caller-bootstrap.js",
75
+ "default": "./dist/remote/caller-bootstrap.js"
76
+ },
77
+ "./remote/admin-types": {
78
+ "types": "./dist/remote/admin-types.d.ts",
79
+ "import": "./dist/remote/admin-types.js",
80
+ "default": "./dist/remote/admin-types.js"
81
+ },
82
+ "./shared/migrations": {
83
+ "types": "./dist/shared/migrations.d.ts",
84
+ "import": "./dist/shared/migrations.js",
85
+ "default": "./dist/shared/migrations.js"
45
86
  },
46
87
  "./remote/ingestors": {
47
88
  "types": "./dist/remote/ingestors/index.d.ts",
48
- "import": "./dist/remote/ingestors/index.js"
89
+ "import": "./dist/remote/ingestors/index.js",
90
+ "default": "./dist/remote/ingestors/index.js"
91
+ },
92
+ "./remote/tunnel": {
93
+ "types": "./dist/remote/tunnel.d.ts",
94
+ "import": "./dist/remote/tunnel.js",
95
+ "default": "./dist/remote/tunnel.js"
49
96
  }
50
97
  },
51
98
  "scripts": {
52
- "build": "tsc && rm -rf dist/connections && cp -r src/connections dist/connections",
99
+ "build": "tsc && rm -rf dist/connections && cp -r src/connections dist/connections && npm run build:frontend",
100
+ "build:frontend": "npm -w frontend run build",
53
101
  "prepare": "npm run build",
54
- "dev:remote": "tsx src/remote/server.ts",
55
- "dev:mcp": "tsx src/mcp/server.ts",
102
+ "dev:remote": "MCP_CONFIG_DIR=~/.drawlatch-dev tsx src/remote/server.ts",
103
+ "dev:mcp": "MCP_CONFIG_DIR=~/.drawlatch-dev tsx src/mcp/server.ts",
56
104
  "generate-keys": "tsx src/cli/generate-keys.ts",
57
105
  "start:remote": "NODE_ENV=production node dist/remote/server.js",
58
106
  "start:mcp": "node dist/mcp/server.js",
59
107
  "test": "vitest run",
108
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
60
109
  "test:watch": "vitest",
61
110
  "test:coverage": "vitest run --coverage",
62
111
  "lint": "eslint src/",
@@ -64,7 +113,8 @@
64
113
  "format": "prettier --write 'src/**/*.ts' '*.{json,ts,js}'",
65
114
  "format:check": "prettier --check 'src/**/*.ts' '*.{json,ts,js}'",
66
115
  "prepublishOnly": "npm run lint && npm test && npm run build",
67
- "publish:dry-run": "npm publish --dry-run"
116
+ "publish:dry-run": "npm publish --dry-run",
117
+ "reload": "npm install --include=dev && npm run build && VERSION=$(node -p \"require('./package.json').version\") && npm pack --pack-destination /tmp && npm install -g \"/tmp/wolpertingerlabs-drawlatch-$VERSION.tgz\" && rm \"/tmp/wolpertingerlabs-drawlatch-$VERSION.tgz\" && drawlatch restart && drawlatch status"
68
118
  },
69
119
  "engines": {
70
120
  "node": ">=22"
@@ -87,14 +137,17 @@
87
137
  "license": "MIT",
88
138
  "dependencies": {
89
139
  "@modelcontextprotocol/sdk": "^1.26.0",
140
+ "cookie-parser": "^1.4.7",
90
141
  "dotenv": "^17.3.1",
91
142
  "express": "^5.2.1",
143
+ "express-rate-limit": "^8.5.2",
92
144
  "zod": "^4.3.6"
93
145
  },
94
146
  "devDependencies": {
95
147
  "@eslint/js": "^9.39.2",
148
+ "@types/cookie-parser": "^1.4.10",
96
149
  "@types/express": "^5.0.6",
97
- "@types/node": "^25.2.2",
150
+ "@types/node": "^25.3.3",
98
151
  "@vitest/coverage-v8": "^4.0.18",
99
152
  "eslint": "^9.39.2",
100
153
  "eslint-config-prettier": "^10.1.8",
@@ -1,24 +0,0 @@
1
- {
2
- "name": "Discord Bot API",
3
- "description": "Discord Bot API (v10) — guilds, channels, messages, users, roles, and more. Auth is handled automatically via the DISCORD_BOT_TOKEN environment variable. Uses the 'Bot' authorization prefix. For OAuth2 user-scoped access, use the 'discord-oauth' connection instead. Includes a Gateway ingestor for real-time events (messages, reactions, etc.) — use poll_events to retrieve them.",
4
- "docsUrl": "https://discord.com/developers/docs/intro",
5
- "openApiUrl": "https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json",
6
- "headers": {
7
- "Authorization": "Bot ${DISCORD_BOT_TOKEN}",
8
- "Content-Type": "application/json"
9
- },
10
- "secrets": {
11
- "DISCORD_BOT_TOKEN": "${DISCORD_BOT_TOKEN}"
12
- },
13
- "allowedEndpoints": [
14
- "https://discord.com/api/v10/**"
15
- ],
16
- "ingestor": {
17
- "type": "websocket",
18
- "websocket": {
19
- "gatewayUrl": "wss://gateway.discord.gg/?v=10&encoding=json",
20
- "protocol": "discord",
21
- "intents": 3276799
22
- }
23
- }
24
- }
@@ -1,25 +0,0 @@
1
- {
2
- "name": "GitHub API",
3
- "description": "GitHub REST API — repositories, issues, pull requests, users, organizations, and more. Auth is handled automatically via the GITHUB_TOKEN environment variable. Includes a webhook ingestor for real-time events (push, pull_request, issues, etc.) — set GITHUB_WEBHOOK_SECRET and use poll_events to retrieve them.",
4
- "docsUrl": "https://docs.github.com/en/rest",
5
- "openApiUrl": "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",
6
- "headers": {
7
- "Authorization": "Bearer ${GITHUB_TOKEN}",
8
- "Accept": "application/vnd.github+json",
9
- "X-GitHub-Api-Version": "2022-11-28",
10
- "User-Agent": "drawlatch"
11
- },
12
- "secrets": {
13
- "GITHUB_TOKEN": "${GITHUB_TOKEN}",
14
- "GITHUB_WEBHOOK_SECRET": "${GITHUB_WEBHOOK_SECRET}"
15
- },
16
- "allowedEndpoints": ["https://api.github.com/**"],
17
- "ingestor": {
18
- "type": "webhook",
19
- "webhook": {
20
- "path": "github",
21
- "signatureHeader": "X-Hub-Signature-256",
22
- "signatureSecret": "GITHUB_WEBHOOK_SECRET"
23
- }
24
- }
25
- }
@@ -1,29 +0,0 @@
1
- {
2
- "name": "Linear API",
3
- "description": "Linear GraphQL API — issues, projects, teams, cycles, and more. Auth is handled automatically via the LINEAR_API_KEY environment variable. All requests are GraphQL queries sent as POST to https://api.linear.app/graphql. Includes a poll ingestor that periodically fetches recently updated issues — use poll_events to retrieve them.",
4
- "docsUrl": "https://developers.linear.app/docs/graphql/working-with-the-graphql-api",
5
- "headers": {
6
- "Authorization": "${LINEAR_API_KEY}",
7
- "Content-Type": "application/json"
8
- },
9
- "secrets": {
10
- "LINEAR_API_KEY": "${LINEAR_API_KEY}"
11
- },
12
- "allowedEndpoints": [
13
- "https://api.linear.app/**"
14
- ],
15
- "ingestor": {
16
- "type": "poll",
17
- "poll": {
18
- "url": "https://api.linear.app/graphql",
19
- "intervalMs": 60000,
20
- "method": "POST",
21
- "body": {
22
- "query": "{ issues(orderBy: updatedAt, first: 50) { nodes { id identifier title state { name } priority updatedAt createdAt assignee { name } } } }"
23
- },
24
- "responsePath": "data.issues.nodes",
25
- "deduplicateBy": "id",
26
- "eventType": "issue_updated"
27
- }
28
- }
29
- }
@@ -1,25 +0,0 @@
1
- {
2
- "name": "Mastodon API",
3
- "description": "Mastodon API — statuses (toots), timelines, notifications, accounts, search, and more. Auth is handled automatically via the MASTODON_ACCESS_TOKEN environment variable (OAuth2 Bearer token from your instance's Development settings). This template targets mastodon.social — for other instances, override with a custom connector using the same auth pattern but different allowedEndpoints. Includes a poll ingestor that fetches the home timeline — use poll_events to retrieve them.",
4
- "docsUrl": "https://docs.joinmastodon.org/api/",
5
- "headers": {
6
- "Authorization": "Bearer ${MASTODON_ACCESS_TOKEN}"
7
- },
8
- "secrets": {
9
- "MASTODON_ACCESS_TOKEN": "${MASTODON_ACCESS_TOKEN}"
10
- },
11
- "allowedEndpoints": [
12
- "https://mastodon.social/api/v1/**",
13
- "https://mastodon.social/api/v2/**"
14
- ],
15
- "ingestor": {
16
- "type": "poll",
17
- "poll": {
18
- "url": "https://mastodon.social/api/v1/timelines/home?limit=20",
19
- "intervalMs": 60000,
20
- "method": "GET",
21
- "deduplicateBy": "id",
22
- "eventType": "status"
23
- }
24
- }
25
- }
@@ -1,33 +0,0 @@
1
- {
2
- "name": "Notion API",
3
- "description": "Notion API — pages, databases, blocks, users, search, and more. Auth is handled automatically via the NOTION_API_KEY environment variable (internal integration token). The Notion-Version header is set to 2022-06-28. Includes a poll ingestor that periodically searches for recently edited pages — use poll_events to retrieve them.",
4
- "docsUrl": "https://developers.notion.com/reference",
5
- "headers": {
6
- "Authorization": "Bearer ${NOTION_API_KEY}",
7
- "Notion-Version": "2022-06-28",
8
- "Content-Type": "application/json"
9
- },
10
- "secrets": {
11
- "NOTION_API_KEY": "${NOTION_API_KEY}"
12
- },
13
- "allowedEndpoints": [
14
- "https://api.notion.com/**"
15
- ],
16
- "ingestor": {
17
- "type": "poll",
18
- "poll": {
19
- "url": "https://api.notion.com/v1/search",
20
- "intervalMs": 60000,
21
- "method": "POST",
22
- "body": {
23
- "sort": {
24
- "direction": "descending",
25
- "timestamp": "last_edited_time"
26
- }
27
- },
28
- "responsePath": "results",
29
- "deduplicateBy": "id",
30
- "eventType": "page_updated"
31
- }
32
- }
33
- }
@@ -1,28 +0,0 @@
1
- {
2
- "name": "Reddit API",
3
- "description": "Reddit API — subreddits, posts, comments, users, search, and more. Auth is handled automatically via the REDDIT_ACCESS_TOKEN environment variable (OAuth2 Bearer token). A User-Agent header is required by Reddit and set via REDDIT_USER_AGENT. Obtain an OAuth2 token by registering a 'script' app at https://www.reddit.com/prefs/apps and using the client credentials grant. Tokens expire after 1 hour — rotate externally. Includes a poll ingestor that fetches new posts from a configurable subreddit — set REDDIT_SUBREDDIT and use poll_events to retrieve them.",
4
- "docsUrl": "https://www.reddit.com/dev/api/",
5
- "headers": {
6
- "Authorization": "Bearer ${REDDIT_ACCESS_TOKEN}",
7
- "User-Agent": "${REDDIT_USER_AGENT}"
8
- },
9
- "secrets": {
10
- "REDDIT_ACCESS_TOKEN": "${REDDIT_ACCESS_TOKEN}",
11
- "REDDIT_USER_AGENT": "${REDDIT_USER_AGENT}",
12
- "REDDIT_SUBREDDIT": "${REDDIT_SUBREDDIT}"
13
- },
14
- "allowedEndpoints": [
15
- "https://oauth.reddit.com/**"
16
- ],
17
- "ingestor": {
18
- "type": "poll",
19
- "poll": {
20
- "url": "https://oauth.reddit.com/r/${REDDIT_SUBREDDIT}/new?limit=25",
21
- "intervalMs": 60000,
22
- "method": "GET",
23
- "responsePath": "data.children",
24
- "deduplicateBy": "data.name",
25
- "eventType": "new_post"
26
- }
27
- }
28
- }
@@ -1,23 +0,0 @@
1
- {
2
- "name": "Slack API",
3
- "description": "Slack Web API — messages, channels, users, reactions, files, and more. Auth is handled automatically via the SLACK_BOT_TOKEN environment variable. Real-time events via Socket Mode require SLACK_APP_TOKEN.",
4
- "docsUrl": "https://docs.slack.dev/apis/web-api",
5
- "openApiUrl": "https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",
6
- "headers": {
7
- "Authorization": "Bearer ${SLACK_BOT_TOKEN}"
8
- },
9
- "secrets": {
10
- "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}",
11
- "SLACK_APP_TOKEN": "${SLACK_APP_TOKEN}"
12
- },
13
- "allowedEndpoints": [
14
- "https://slack.com/api/**"
15
- ],
16
- "ingestor": {
17
- "type": "websocket",
18
- "websocket": {
19
- "gatewayUrl": "https://slack.com/api/apps.connections.open",
20
- "protocol": "slack"
21
- }
22
- }
23
- }
@@ -1,25 +0,0 @@
1
- {
2
- "name": "Stripe API",
3
- "description": "Stripe payments API — customers, charges, payment intents, subscriptions, invoices, and more. Auth is handled automatically via the STRIPE_SECRET_KEY environment variable. Includes a webhook ingestor for real-time events (payment_intent.succeeded, invoice.paid, etc.) — set STRIPE_WEBHOOK_SECRET and use poll_events to retrieve them. Note: Stripe uses application/x-www-form-urlencoded for request bodies, not JSON.",
4
- "docsUrl": "https://docs.stripe.com/api",
5
- "openApiUrl": "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
6
- "headers": {
7
- "Authorization": "Bearer ${STRIPE_SECRET_KEY}"
8
- },
9
- "secrets": {
10
- "STRIPE_SECRET_KEY": "${STRIPE_SECRET_KEY}",
11
- "STRIPE_WEBHOOK_SECRET": "${STRIPE_WEBHOOK_SECRET}"
12
- },
13
- "allowedEndpoints": [
14
- "https://api.stripe.com/**"
15
- ],
16
- "ingestor": {
17
- "type": "webhook",
18
- "webhook": {
19
- "path": "stripe",
20
- "protocol": "stripe",
21
- "signatureHeader": "Stripe-Signature",
22
- "signatureSecret": "STRIPE_WEBHOOK_SECRET"
23
- }
24
- }
25
- }
@@ -1,26 +0,0 @@
1
- {
2
- "name": "Telegram Bot API",
3
- "description": "Telegram Bot API — messages, chats, users, inline queries, payments, and more. Auth uses a bot token embedded in the URL path — include /bot${TELEGRAM_BOT_TOKEN}/ in your request URLs. The placeholder is resolved automatically from the route's secrets. Create a bot via @BotFather on Telegram to obtain a token. Includes a poll ingestor that fetches new updates via getUpdates — use poll_events to retrieve them.",
4
- "docsUrl": "https://core.telegram.org/bots/api",
5
- "headers": {
6
- "Content-Type": "application/json"
7
- },
8
- "secrets": {
9
- "TELEGRAM_BOT_TOKEN": "${TELEGRAM_BOT_TOKEN}"
10
- },
11
- "resolveSecretsInBody": true,
12
- "allowedEndpoints": [
13
- "https://api.telegram.org/**"
14
- ],
15
- "ingestor": {
16
- "type": "poll",
17
- "poll": {
18
- "url": "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?limit=25&timeout=0",
19
- "intervalMs": 30000,
20
- "method": "GET",
21
- "responsePath": "result",
22
- "deduplicateBy": "update_id",
23
- "eventType": "update"
24
- }
25
- }
26
- }
@@ -1,25 +0,0 @@
1
- {
2
- "name": "Trello API",
3
- "description": "Trello boards, lists, and cards API. Authentication uses query parameters — include ?key=${TRELLO_API_KEY}&token=${TRELLO_TOKEN} in your request URLs. The placeholders are resolved automatically from the route's secrets. Includes a webhook ingestor for real-time events (card updates, list changes, board activity, etc.) — set TRELLO_API_SECRET and TRELLO_CALLBACK_URL, then use poll_events to retrieve them.",
4
- "docsUrl": "https://developer.atlassian.com/cloud/trello/rest/",
5
- "headers": {},
6
- "secrets": {
7
- "TRELLO_API_KEY": "${TRELLO_API_KEY}",
8
- "TRELLO_TOKEN": "${TRELLO_TOKEN}",
9
- "TRELLO_API_SECRET": "${TRELLO_API_SECRET}",
10
- "TRELLO_CALLBACK_URL": "${TRELLO_CALLBACK_URL}"
11
- },
12
- "allowedEndpoints": [
13
- "https://api.trello.com/**"
14
- ],
15
- "ingestor": {
16
- "type": "webhook",
17
- "webhook": {
18
- "path": "trello",
19
- "protocol": "trello",
20
- "signatureHeader": "X-Trello-Webhook",
21
- "signatureSecret": "TRELLO_API_SECRET",
22
- "callbackUrl": "${TRELLO_CALLBACK_URL}"
23
- }
24
- }
25
- }
@@ -1,27 +0,0 @@
1
- {
2
- "name": "X (Twitter) API",
3
- "description": "X (formerly Twitter) API v2 — tweets, users, spaces, lists, and more. Auth is handled automatically via the X_BEARER_TOKEN environment variable (App-only Bearer token from the X Developer Portal). Both api.x.com and api.twitter.com domains are allowlisted. Includes a poll ingestor that searches recent tweets matching a configurable query — set X_SEARCH_QUERY and use poll_events to retrieve them.",
4
- "docsUrl": "https://developer.x.com/en/docs/x-api",
5
- "headers": {
6
- "Authorization": "Bearer ${X_BEARER_TOKEN}"
7
- },
8
- "secrets": {
9
- "X_BEARER_TOKEN": "${X_BEARER_TOKEN}",
10
- "X_SEARCH_QUERY": "${X_SEARCH_QUERY}"
11
- },
12
- "allowedEndpoints": [
13
- "https://api.x.com/**",
14
- "https://api.twitter.com/**"
15
- ],
16
- "ingestor": {
17
- "type": "poll",
18
- "poll": {
19
- "url": "https://api.x.com/2/tweets/search/recent?query=${X_SEARCH_QUERY}&max_results=25&tweet.fields=created_at,author_id,public_metrics",
20
- "intervalMs": 60000,
21
- "method": "GET",
22
- "responsePath": "data",
23
- "deduplicateBy": "id",
24
- "eventType": "tweet"
25
- }
26
- }
27
- }