@atlasauth/emulator-core 0.2.0 → 0.3.1

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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/dist/custom-html.d.ts +57 -0
  3. package/dist/custom-html.js +491 -0
  4. package/dist/custom-html.js.map +1 -0
  5. package/dist/engine.d.ts +1 -1
  6. package/dist/engine.js +5 -1
  7. package/dist/engine.js.map +1 -1
  8. package/dist/error-catalog.js +8 -0
  9. package/dist/error-catalog.js.map +1 -1
  10. package/dist/event-gate.js +60 -2
  11. package/dist/event-gate.js.map +1 -1
  12. package/dist/generic.js +5 -1
  13. package/dist/generic.js.map +1 -1
  14. package/dist/handlers/access-signals.d.ts +48 -0
  15. package/dist/handlers/access-signals.js +76 -0
  16. package/dist/handlers/access-signals.js.map +1 -0
  17. package/dist/handlers/approvals.js +54 -1
  18. package/dist/handlers/approvals.js.map +1 -1
  19. package/dist/handlers/authz-data.d.ts +2 -0
  20. package/dist/handlers/authz-data.js +627 -0
  21. package/dist/handlers/authz-data.js.map +1 -0
  22. package/dist/handlers/authz-layers.d.ts +229 -0
  23. package/dist/handlers/authz-layers.js +786 -0
  24. package/dist/handlers/authz-layers.js.map +1 -0
  25. package/dist/handlers/authz-state.d.ts +80 -0
  26. package/dist/handlers/authz-state.js +175 -0
  27. package/dist/handlers/authz-state.js.map +1 -0
  28. package/dist/handlers/authz.js +240 -177
  29. package/dist/handlers/authz.js.map +1 -1
  30. package/dist/handlers/billing.d.ts +99 -1
  31. package/dist/handlers/billing.js +556 -77
  32. package/dist/handlers/billing.js.map +1 -1
  33. package/dist/handlers/cedar-ext.d.ts +35 -0
  34. package/dist/handlers/cedar-ext.js +174 -0
  35. package/dist/handlers/cedar-ext.js.map +1 -0
  36. package/dist/handlers/cedar.d.ts +146 -0
  37. package/dist/handlers/cedar.js +689 -0
  38. package/dist/handlers/cedar.js.map +1 -0
  39. package/dist/handlers/connections.d.ts +4 -1
  40. package/dist/handlers/connections.js +267 -38
  41. package/dist/handlers/connections.js.map +1 -1
  42. package/dist/handlers/control.js +6 -1
  43. package/dist/handlers/control.js.map +1 -1
  44. package/dist/handlers/device.js +18 -1
  45. package/dist/handlers/device.js.map +1 -1
  46. package/dist/handlers/emu3-misc.d.ts +38 -0
  47. package/dist/handlers/emu3-misc.js +1056 -0
  48. package/dist/handlers/emu3-misc.js.map +1 -0
  49. package/dist/handlers/emu4-actions-access.d.ts +46 -0
  50. package/dist/handlers/emu4-actions-access.js +107 -0
  51. package/dist/handlers/emu4-actions-access.js.map +1 -0
  52. package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
  53. package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
  54. package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
  55. package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
  56. package/dist/handlers/emu4-actions-catalog.js +143 -0
  57. package/dist/handlers/emu4-actions-catalog.js.map +1 -0
  58. package/dist/handlers/emu4-actions-def.d.ts +50 -0
  59. package/dist/handlers/emu4-actions-def.js +250 -0
  60. package/dist/handlers/emu4-actions-def.js.map +1 -0
  61. package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
  62. package/dist/handlers/emu4-actions-sandbox.js +318 -0
  63. package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
  64. package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
  65. package/dist/handlers/emu4-actions-typegen.js +73 -0
  66. package/dist/handlers/emu4-actions-typegen.js.map +1 -0
  67. package/dist/handlers/emu4-actions.d.ts +2 -0
  68. package/dist/handlers/emu4-actions.js +506 -0
  69. package/dist/handlers/emu4-actions.js.map +1 -0
  70. package/dist/handlers/emu4-authz-trust.d.ts +40 -0
  71. package/dist/handlers/emu4-authz-trust.js +488 -0
  72. package/dist/handlers/emu4-authz-trust.js.map +1 -0
  73. package/dist/handlers/emu4-authz.d.ts +2 -0
  74. package/dist/handlers/emu4-authz.js +752 -0
  75. package/dist/handlers/emu4-authz.js.map +1 -0
  76. package/dist/handlers/emu4-billing-core.d.ts +23 -0
  77. package/dist/handlers/emu4-billing-core.js +22 -0
  78. package/dist/handlers/emu4-billing-core.js.map +1 -0
  79. package/dist/handlers/emu4-billing-x.d.ts +2 -0
  80. package/dist/handlers/emu4-billing-x.js +489 -0
  81. package/dist/handlers/emu4-billing-x.js.map +1 -0
  82. package/dist/handlers/emu4-billing.d.ts +14 -0
  83. package/dist/handlers/emu4-billing.js +846 -0
  84. package/dist/handlers/emu4-billing.js.map +1 -0
  85. package/dist/handlers/emu4-clones.d.ts +2 -0
  86. package/dist/handlers/emu4-clones.js +322 -0
  87. package/dist/handlers/emu4-clones.js.map +1 -0
  88. package/dist/handlers/emu4-compliance.d.ts +8 -0
  89. package/dist/handlers/emu4-compliance.js +39 -0
  90. package/dist/handlers/emu4-compliance.js.map +1 -0
  91. package/dist/handlers/emu4-config.d.ts +14 -0
  92. package/dist/handlers/emu4-config.js +148 -0
  93. package/dist/handlers/emu4-config.js.map +1 -0
  94. package/dist/handlers/emu4-cookies.d.ts +8 -0
  95. package/dist/handlers/emu4-cookies.js +248 -0
  96. package/dist/handlers/emu4-cookies.js.map +1 -0
  97. package/dist/handlers/emu4-erasure.d.ts +2 -0
  98. package/dist/handlers/emu4-erasure.js +587 -0
  99. package/dist/handlers/emu4-erasure.js.map +1 -0
  100. package/dist/handlers/emu4-federation.d.ts +8 -0
  101. package/dist/handlers/emu4-federation.js +18 -0
  102. package/dist/handlers/emu4-federation.js.map +1 -0
  103. package/dist/handlers/emu4-journey-math.d.ts +42 -0
  104. package/dist/handlers/emu4-journey-math.js +99 -0
  105. package/dist/handlers/emu4-journey-math.js.map +1 -0
  106. package/dist/handlers/emu4-messaging.d.ts +21 -0
  107. package/dist/handlers/emu4-messaging.js +595 -0
  108. package/dist/handlers/emu4-messaging.js.map +1 -0
  109. package/dist/handlers/emu4-minors.d.ts +7 -0
  110. package/dist/handlers/emu4-minors.js +408 -0
  111. package/dist/handlers/emu4-minors.js.map +1 -0
  112. package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
  113. package/dist/handlers/emu4-oauth-audit.js +17 -0
  114. package/dist/handlers/emu4-oauth-audit.js.map +1 -0
  115. package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
  116. package/dist/handlers/emu4-oauth-auth.js +363 -0
  117. package/dist/handlers/emu4-oauth-auth.js.map +1 -0
  118. package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
  119. package/dist/handlers/emu4-oauth-delivery.js +207 -0
  120. package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
  121. package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
  122. package/dist/handlers/emu4-oauth-keys.js +268 -0
  123. package/dist/handlers/emu4-oauth-keys.js.map +1 -0
  124. package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
  125. package/dist/handlers/emu4-oauth-pub.js +420 -0
  126. package/dist/handlers/emu4-oauth-pub.js.map +1 -0
  127. package/dist/handlers/emu4-oauth.d.ts +10 -0
  128. package/dist/handlers/emu4-oauth.js +23 -0
  129. package/dist/handlers/emu4-oauth.js.map +1 -0
  130. package/dist/handlers/emu4-policies.d.ts +2 -0
  131. package/dist/handlers/emu4-policies.js +408 -0
  132. package/dist/handlers/emu4-policies.js.map +1 -0
  133. package/dist/handlers/emu4-region.d.ts +2 -0
  134. package/dist/handlers/emu4-region.js +189 -0
  135. package/dist/handlers/emu4-region.js.map +1 -0
  136. package/dist/handlers/emu4-saml.d.ts +12 -0
  137. package/dist/handlers/emu4-saml.js +532 -0
  138. package/dist/handlers/emu4-saml.js.map +1 -0
  139. package/dist/handlers/emu4-shared.d.ts +44 -0
  140. package/dist/handlers/emu4-shared.js +90 -0
  141. package/dist/handlers/emu4-shared.js.map +1 -0
  142. package/dist/handlers/emu4-snapshots.d.ts +38 -0
  143. package/dist/handlers/emu4-snapshots.js +231 -0
  144. package/dist/handlers/emu4-snapshots.js.map +1 -0
  145. package/dist/handlers/emu4-sns.d.ts +9 -0
  146. package/dist/handlers/emu4-sns.js +21 -0
  147. package/dist/handlers/emu4-sns.js.map +1 -0
  148. package/dist/handlers/emu4-trust-binding.d.ts +27 -0
  149. package/dist/handlers/emu4-trust-binding.js +344 -0
  150. package/dist/handlers/emu4-trust-binding.js.map +1 -0
  151. package/dist/handlers/emu4-trust.d.ts +35 -0
  152. package/dist/handlers/emu4-trust.js +543 -0
  153. package/dist/handlers/emu4-trust.js.map +1 -0
  154. package/dist/handlers/fga-engine.d.ts +78 -0
  155. package/dist/handlers/fga-engine.js +663 -0
  156. package/dist/handlers/fga-engine.js.map +1 -0
  157. package/dist/handlers/governance.js +3 -2
  158. package/dist/handlers/governance.js.map +1 -1
  159. package/dist/handlers/hooks.js +13 -0
  160. package/dist/handlers/hooks.js.map +1 -1
  161. package/dist/handlers/index.js +14 -1
  162. package/dist/handlers/index.js.map +1 -1
  163. package/dist/handlers/machines.js +6 -0
  164. package/dist/handlers/machines.js.map +1 -1
  165. package/dist/handlers/messaging.d.ts +3 -1
  166. package/dist/handlers/messaging.js +455 -48
  167. package/dist/handlers/messaging.js.map +1 -1
  168. package/dist/handlers/oauth-adv.d.ts +191 -0
  169. package/dist/handlers/oauth-adv.js +1305 -0
  170. package/dist/handlers/oauth-adv.js.map +1 -0
  171. package/dist/handlers/oauth-flows.d.ts +25 -1
  172. package/dist/handlers/oauth-flows.js +111 -50
  173. package/dist/handlers/oauth-flows.js.map +1 -1
  174. package/dist/handlers/oauth.d.ts +24 -3
  175. package/dist/handlers/oauth.js +245 -60
  176. package/dist/handlers/oauth.js.map +1 -1
  177. package/dist/handlers/orgs.js +6 -0
  178. package/dist/handlers/orgs.js.map +1 -1
  179. package/dist/handlers/platform.d.ts +5 -0
  180. package/dist/handlers/platform.js +33 -15
  181. package/dist/handlers/platform.js.map +1 -1
  182. package/dist/handlers/scim.d.ts +2 -0
  183. package/dist/handlers/scim.js +198 -11
  184. package/dist/handlers/scim.js.map +1 -1
  185. package/dist/handlers/sessions.d.ts +2 -0
  186. package/dist/handlers/sessions.js +24 -16
  187. package/dist/handlers/sessions.js.map +1 -1
  188. package/dist/handlers/users.js +3 -0
  189. package/dist/handlers/users.js.map +1 -1
  190. package/dist/jwe.d.ts +18 -0
  191. package/dist/jwe.js +101 -0
  192. package/dist/jwe.js.map +1 -0
  193. package/dist/jws.js +2 -0
  194. package/dist/jws.js.map +1 -1
  195. package/dist/messaging-callbacks.d.ts +100 -0
  196. package/dist/messaging-callbacks.js +767 -0
  197. package/dist/messaging-callbacks.js.map +1 -0
  198. package/dist/openapi.d.ts +1 -0
  199. package/dist/openapi.js +44 -2
  200. package/dist/openapi.js.map +1 -1
  201. package/dist/parity-emu3-authz.d.ts +3 -0
  202. package/dist/parity-emu3-authz.js +61 -0
  203. package/dist/parity-emu3-authz.js.map +1 -0
  204. package/dist/parity-emu3-billing.d.ts +3 -0
  205. package/dist/parity-emu3-billing.js +25 -0
  206. package/dist/parity-emu3-billing.js.map +1 -0
  207. package/dist/parity-emu3-messaging.d.ts +3 -0
  208. package/dist/parity-emu3-messaging.js +27 -0
  209. package/dist/parity-emu3-messaging.js.map +1 -0
  210. package/dist/parity-emu3-misc.d.ts +2 -0
  211. package/dist/parity-emu3-misc.js +63 -0
  212. package/dist/parity-emu3-misc.js.map +1 -0
  213. package/dist/parity-emu3-oauth.d.ts +2 -0
  214. package/dist/parity-emu3-oauth.js +39 -0
  215. package/dist/parity-emu3-oauth.js.map +1 -0
  216. package/dist/parity-emu4-actions.d.ts +2 -0
  217. package/dist/parity-emu4-actions.js +38 -0
  218. package/dist/parity-emu4-actions.js.map +1 -0
  219. package/dist/parity-emu4-authz.d.ts +3 -0
  220. package/dist/parity-emu4-authz.js +68 -0
  221. package/dist/parity-emu4-authz.js.map +1 -0
  222. package/dist/parity-emu4-billing.d.ts +6 -0
  223. package/dist/parity-emu4-billing.js +44 -0
  224. package/dist/parity-emu4-billing.js.map +1 -0
  225. package/dist/parity-emu4-compliance.d.ts +2 -0
  226. package/dist/parity-emu4-compliance.js +92 -0
  227. package/dist/parity-emu4-compliance.js.map +1 -0
  228. package/dist/parity-emu4-federation.d.ts +2 -0
  229. package/dist/parity-emu4-federation.js +33 -0
  230. package/dist/parity-emu4-federation.js.map +1 -0
  231. package/dist/parity-emu4-messaging.d.ts +3 -0
  232. package/dist/parity-emu4-messaging.js +42 -0
  233. package/dist/parity-emu4-messaging.js.map +1 -0
  234. package/dist/parity-emu4-oauth.d.ts +2 -0
  235. package/dist/parity-emu4-oauth.js +55 -0
  236. package/dist/parity-emu4-oauth.js.map +1 -0
  237. package/dist/parity-emu4-trust.d.ts +2 -0
  238. package/dist/parity-emu4-trust.js +41 -0
  239. package/dist/parity-emu4-trust.js.map +1 -0
  240. package/dist/parity-routes.js +19 -1
  241. package/dist/parity-routes.js.map +1 -1
  242. package/dist/sns-cert.d.ts +9 -0
  243. package/dist/sns-cert.js +101 -0
  244. package/dist/sns-cert.js.map +1 -0
  245. package/dist/tokens.d.ts +69 -4
  246. package/dist/tokens.js +164 -38
  247. package/dist/tokens.js.map +1 -1
  248. package/package.json +2 -2
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.builtInFor = exports.BUILT_IN_ACTIONS = void 0;
4
+ const emu4_actions_def_1 = require("./emu4-actions-def");
5
+ const emu4_actions_catalog_extra_1 = require("./emu4-actions-catalog-extra");
6
+ /**
7
+ * First-party action packs. Each endpoint was read from the provider's own API reference:
8
+ * GitHub https://docs.github.com/en/rest/issues/issues
9
+ * Slack https://docs.slack.dev/reference/methods/chat.postMessage , .../conversations.list
10
+ * Notion https://developers.notion.com/reference/post-page
11
+ * HubSpot https://developers.hubspot.com/docs/api/crm/contacts
12
+ * Slack https://docs.slack.dev/reference/methods/conversations.history , .../users.list
13
+ * Google https://developers.google.com/workspace/calendar/api/v3/reference/events/insert , .../events/list ,
14
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/send , .../users.messages/list , .../users.messages/get
15
+ * Linear GraphQL at https://api.linear.app/graphql (https://linear.app/developers/graphql), schema:
16
+ * https://github.com/linear/linear/blob/master/packages/sdk/src/schema.graphql (Query.issues, Query.teams, Mutation.issueCreate)
17
+ * More providers come from custom definitions (PUT /v1/connection_actions/{provider}/{name}).
18
+ */
19
+ const str = (description, extra = {}) => ({ type: 'string', description, ...extra });
20
+ const obj = (properties, required = []) => ({ type: 'object', properties, required });
21
+ const GH = 'https://api.github.com';
22
+ const GH_H = { accept: 'application/vnd.github+json' };
23
+ const SLACK = 'https://slack.com/api';
24
+ const SLACK_OK = { ok_field: 'ok', error_field: 'error' };
25
+ const HUB = 'https://api.hubapi.com';
26
+ const RAW = [
27
+ ['github', 'list_issues', {
28
+ description: 'List the issues of a repository.',
29
+ input: obj({ owner: str('Repository owner.'), repo: str('Repository name.'), state: str('open, closed or all.', { enum: ['open', 'closed', 'all'] }), per_page: { type: 'integer', minimum: 1, maximum: 100 }, page: { type: 'integer', minimum: 1 } }, ['owner', 'repo']),
30
+ request: { method: 'GET', base_url: GH, path: '/repos/{owner}/{repo}/issues', query: { state: '{state}', per_page: '{per_page}', page: '{page}' }, headers: GH_H },
31
+ scopes: [], mutating: false,
32
+ }],
33
+ ['github', 'get_issue', {
34
+ description: 'Read one issue.',
35
+ input: obj({ owner: str('Repository owner.'), repo: str('Repository name.'), issue_number: { type: 'integer', minimum: 1 } }, ['owner', 'repo', 'issue_number']),
36
+ request: { method: 'GET', base_url: GH, path: '/repos/{owner}/{repo}/issues/{issue_number}', headers: GH_H },
37
+ mutating: false,
38
+ }],
39
+ ['github', 'create_issue', {
40
+ description: 'Open an issue in a repository.',
41
+ input: obj({ owner: str('Repository owner.'), repo: str('Repository name.'), title: str('Issue title.', { minLength: 1 }), body: str('Issue body.'), labels: { type: 'array', items: { type: 'string' } }, assignees: { type: 'array', items: { type: 'string' } } }, ['owner', 'repo', 'title']),
42
+ request: { method: 'POST', base_url: GH, path: '/repos/{owner}/{repo}/issues', body: { title: '{title}', body: '{body}', labels: '{labels}', assignees: '{assignees}' }, headers: GH_H },
43
+ mutating: true,
44
+ }],
45
+ ['slack_api', 'post_message', {
46
+ description: 'Post a message to a channel or conversation.',
47
+ input: obj({ channel: str('Channel id or name.'), text: str('Message text.', { minLength: 1 }), thread_ts: str('Reply in this thread.') }, ['channel', 'text']),
48
+ request: { method: 'POST', base_url: SLACK, path: '/chat.postMessage', body: { channel: '{channel}', text: '{text}', thread_ts: '{thread_ts}' }, headers: { 'content-type': 'application/json; charset=utf-8' } },
49
+ response: SLACK_OK, mutating: true,
50
+ }],
51
+ ['slack_api', 'list_channels', {
52
+ description: 'List channels the token can see.',
53
+ input: obj({ types: str('Comma-separated: public_channel, private_channel, mpim, im.'), limit: { type: 'integer', minimum: 1, maximum: 999 }, cursor: str('The next_cursor of a previous call.'), exclude_archived: { type: 'boolean' } }),
54
+ request: { method: 'GET', base_url: SLACK, path: '/conversations.list', query: { types: '{types}', limit: '{limit}', cursor: '{cursor}', exclude_archived: '{exclude_archived}' } },
55
+ response: SLACK_OK, mutating: false,
56
+ }],
57
+ ['slack_api', 'list_messages', {
58
+ description: 'Read the message history of a conversation, newest first.',
59
+ input: obj({ channel: str('Conversation id.'), limit: { type: 'integer', minimum: 1, maximum: 999 }, cursor: str('The next_cursor of a previous call.'), oldest: str('Only messages after this Unix timestamp.'), latest: str('Only messages before this Unix timestamp.') }, ['channel']),
60
+ request: { method: 'GET', base_url: SLACK, path: '/conversations.history', query: { channel: '{channel}', limit: '{limit}', cursor: '{cursor}', oldest: '{oldest}', latest: '{latest}' } },
61
+ response: SLACK_OK, paginate: { type: 'cursor', cursor_path: 'response_metadata.next_cursor', cursor_param: 'cursor', items_path: 'messages' }, mutating: false,
62
+ }],
63
+ ['slack_api', 'list_users', {
64
+ description: 'List the workspace\'s users.',
65
+ input: obj({ limit: { type: 'integer', minimum: 1, maximum: 999 }, cursor: str('The next_cursor of a previous call.') }),
66
+ request: { method: 'GET', base_url: SLACK, path: '/users.list', query: { limit: '{limit}', cursor: '{cursor}' } },
67
+ response: SLACK_OK, paginate: { type: 'cursor', cursor_path: 'response_metadata.next_cursor', cursor_param: 'cursor', items_path: 'members' }, mutating: false,
68
+ }],
69
+ ['google', 'list_gmail_messages', {
70
+ description: 'List message ids of the signed-in user\'s mailbox (use get_gmail_message for content).',
71
+ input: obj({ q: str('Gmail search query.'), maxResults: { type: 'integer', minimum: 1, maximum: 500 }, pageToken: str('nextPageToken of a previous call.'), includeSpamTrash: { type: 'boolean' } }),
72
+ request: { method: 'GET', base_url: 'https://gmail.googleapis.com', path: '/gmail/v1/users/me/messages', query: { q: '{q}', maxResults: '{maxResults}', pageToken: '{pageToken}', includeSpamTrash: '{includeSpamTrash}' } },
73
+ paginate: { type: 'cursor', cursor_path: 'nextPageToken', cursor_param: 'pageToken', items_path: 'messages' }, mutating: false,
74
+ }],
75
+ ['google', 'get_gmail_message', {
76
+ description: 'Read one Gmail message.',
77
+ input: obj({ id: str('Message id.'), format: str('minimal, full, raw or metadata.', { enum: ['minimal', 'full', 'raw', 'metadata'] }) }, ['id']),
78
+ request: { method: 'GET', base_url: 'https://gmail.googleapis.com', path: '/gmail/v1/users/me/messages/{id}', query: { format: '{format}' } },
79
+ mutating: false,
80
+ }],
81
+ ['google', 'list_calendar_events', {
82
+ description: 'List events of a calendar.',
83
+ input: obj({ calendar_id: str('Calendar id; "primary" for the signed-in user.'), timeMin: str('RFC3339 lower bound for an event\'s end.'), timeMax: str('RFC3339 exclusive upper bound for an event\'s start.'), maxResults: { type: 'integer', minimum: 1, maximum: 2500 }, pageToken: str('nextPageToken of a previous call.'), singleEvents: { type: 'boolean' }, orderBy: str('startTime (needs singleEvents) or updated.', { enum: ['startTime', 'updated'] }), q: str('Free-text search.') }, ['calendar_id']),
84
+ request: { method: 'GET', base_url: 'https://www.googleapis.com', path: '/calendar/v3/calendars/{calendar_id}/events', query: { timeMin: '{timeMin}', timeMax: '{timeMax}', maxResults: '{maxResults}', pageToken: '{pageToken}', singleEvents: '{singleEvents}', orderBy: '{orderBy}', q: '{q}' } },
85
+ paginate: { type: 'cursor', cursor_path: 'nextPageToken', cursor_param: 'pageToken', items_path: 'items' }, mutating: false,
86
+ }],
87
+ ['linear', 'list_issues', {
88
+ description: 'List issues (newest first by default). Pass `after` from pageInfo.endCursor for the next page.',
89
+ input: obj({ first: { type: 'integer', minimum: 1, maximum: 250 }, after: str('pageInfo.endCursor of a previous call.') }),
90
+ request: { method: 'POST', base_url: 'https://api.linear.app', path: '/graphql', body: { query: 'query($first: Int, $after: String) { issues(first: $first, after: $after) { nodes { id identifier title url state { name } } pageInfo { hasNextPage endCursor } } }', variables: { first: '{first}', after: '{after}' } } },
91
+ response: { path: 'data.issues' }, mutating: false,
92
+ }],
93
+ ['linear', 'list_teams', {
94
+ description: 'List teams.',
95
+ input: obj({ first: { type: 'integer', minimum: 1, maximum: 250 }, after: str('pageInfo.endCursor of a previous call.') }),
96
+ request: { method: 'POST', base_url: 'https://api.linear.app', path: '/graphql', body: { query: 'query($first: Int, $after: String) { teams(first: $first, after: $after) { nodes { id key name } pageInfo { hasNextPage endCursor } } }', variables: { first: '{first}', after: '{after}' } } },
97
+ response: { path: 'data.teams' }, mutating: false,
98
+ }],
99
+ ['linear', 'create_issue', {
100
+ description: 'Create an issue in a team. Linear reports failures in an `errors` array with HTTP 200, so check the result.',
101
+ input: obj({ teamId: str('Team id (see list_teams).'), title: str('Issue title.', { minLength: 1 }), description: str('Markdown description.') }, ['teamId', 'title']),
102
+ request: { method: 'POST', base_url: 'https://api.linear.app', path: '/graphql', body: { query: 'mutation($teamId: String!, $title: String, $description: String) { issueCreate(input: { teamId: $teamId, title: $title, description: $description }) { success issue { id identifier title url } } }', variables: { teamId: '{teamId}', title: '{title}', description: '{description}' } } },
103
+ response: { path: 'data.issueCreate' }, mutating: true,
104
+ }],
105
+ ['notion', 'create_page', {
106
+ description: 'Create a page under a page or a data source.',
107
+ input: obj({ parent: { type: 'object', description: 'One of { page_id } or { data_source_id }.' }, properties: { type: 'object', description: 'Property values keyed by name.' }, children: { type: 'array', maxItems: 100, items: { type: 'object' } } }, ['parent', 'properties']),
108
+ request: { method: 'POST', base_url: 'https://api.notion.com', path: '/v1/pages', body: { parent: '{parent}', properties: '{properties}', children: '{children}' }, headers: { 'notion-version': '2026-03-11' } },
109
+ mutating: true,
110
+ }],
111
+ ['hubspot', 'create_contact', {
112
+ description: 'Create a CRM contact.',
113
+ input: obj({ email: str('Email address.'), firstname: str('First name.'), lastname: str('Last name.') }, ['email']),
114
+ request: { method: 'POST', base_url: HUB, path: '/crm/v3/objects/contacts', body: { properties: { email: '{email}', firstname: '{firstname}', lastname: '{lastname}' } } },
115
+ mutating: true,
116
+ }],
117
+ ['hubspot', 'list_contacts', {
118
+ description: 'List CRM contacts (cursor `after` from the previous page).',
119
+ input: obj({ limit: { type: 'integer', minimum: 1, maximum: 100 }, after: str('Cursor from paging.next.after.'), properties: str('Comma-separated property names to return.') }),
120
+ request: { method: 'GET', base_url: HUB, path: '/crm/v3/objects/contacts', query: { limit: '{limit}', after: '{after}', properties: '{properties}' } },
121
+ paginate: { type: 'cursor', cursor_path: 'paging.next.after', cursor_param: 'after', items_path: 'results' }, mutating: false,
122
+ }],
123
+ ['google', 'create_calendar_event', {
124
+ description: 'Create a calendar event.',
125
+ input: obj({ calendar_id: str('Calendar id; "primary" for the signed-in user.'), summary: str('Event title.'), start: { type: 'object', description: '{ dateTime, timeZone } or { date }.' }, end: { type: 'object', description: '{ dateTime, timeZone } or { date }.' }, description: str('Event description.') }, ['calendar_id', 'start', 'end']),
126
+ request: { method: 'POST', base_url: 'https://www.googleapis.com', path: '/calendar/v3/calendars/{calendar_id}/events', body: { summary: '{summary}', description: '{description}', start: '{start}', end: '{end}' } },
127
+ scopes: [], mutating: true,
128
+ }],
129
+ ['google', 'send_gmail_message', {
130
+ description: 'Send an email from the signed-in user. `raw` is the RFC 2822 message, base64url-encoded.',
131
+ input: obj({ raw: str('Base64url RFC 2822 message.', { minLength: 1 }) }, ['raw']),
132
+ request: { method: 'POST', base_url: 'https://gmail.googleapis.com', path: '/gmail/v1/users/me/messages/send', body: { raw: '{raw}' } },
133
+ mutating: true,
134
+ }],
135
+ ];
136
+ exports.BUILT_IN_ACTIONS = [
137
+ // The original packs gain their declared outputs from catalog-extra; the newer packs carry their own.
138
+ ...RAW.map(([p, n, d]) => (0, emu4_actions_def_1.parseActionDef)(p, n, { ...d, ...(emu4_actions_catalog_extra_1.BUILT_IN_OUTPUTS[`${p}/${n}`] ? { output: emu4_actions_catalog_extra_1.BUILT_IN_OUTPUTS[`${p}/${n}`] } : {}) })),
139
+ ...emu4_actions_catalog_extra_1.EXTRA_ACTIONS.map(([p, n, d]) => (0, emu4_actions_def_1.parseActionDef)(p, n, d)),
140
+ ];
141
+ const builtInFor = (provider) => exports.BUILT_IN_ACTIONS.filter((a) => a.provider === provider);
142
+ exports.builtInFor = builtInFor;
143
+ //# sourceMappingURL=emu4-actions-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emu4-actions-catalog.js","sourceRoot":"","sources":["../../src/handlers/emu4-actions-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Declarative actions over a connection: a typed input, a request template and a response mapping. No code runs;
3
+ * the request goes out through the connection relay (host allow-list, credential, refresh-once, audit).
4
+ */
5
+ export interface ActionDef {
6
+ provider: string;
7
+ name: string;
8
+ description: string;
9
+ /** JSON Schema (object) of the input. Checked before anything is sent. */
10
+ input: Record<string, unknown>;
11
+ /**
12
+ * JSON Schema of what the action returns (after `response.path`). Published so callers get types, and checked against
13
+ * every successful answer: a mismatch is a provider change (the radar records it) and never fails the call.
14
+ */
15
+ output?: Record<string, unknown>;
16
+ request: {
17
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
18
+ /** https base, e.g. https://api.github.com. Must be a host of the connection's allowed_hosts. */
19
+ base_url: string;
20
+ /** `/repos/{owner}/{repo}/issues`: `{arg}` is replaced by the percent-encoded input value. */
21
+ path: string;
22
+ /** Query parameters; a value that is exactly `{arg}` is dropped when the input omits it. */
23
+ query?: Record<string, string>;
24
+ /** JSON body template: a string that is exactly `{arg}` becomes the input value (omitted when absent). */
25
+ body?: unknown;
26
+ headers?: Record<string, string>;
27
+ };
28
+ response?: {
29
+ /** Dot path to the part of the JSON answer to return. */
30
+ path?: string;
31
+ /** Providers that answer 200 with `{ok:false}` (Slack): the field to check and the one holding the error. */
32
+ ok_field?: string;
33
+ error_field?: string;
34
+ };
35
+ /** Provider scopes the connection must hold; checked before the call when the connection's granted scopes are known. */
36
+ scopes?: string[];
37
+ /** Cursor pagination hint passed to the relay's paginate when the caller asks for `all_pages`. */
38
+ paginate?: Record<string, unknown>;
39
+ /** True for actions that change data: surfaced as the MCP destructive hint. */
40
+ mutating: boolean;
41
+ }
42
+ export declare function parseActionDef(provider: string, name: string, raw: unknown): ActionDef;
43
+ export declare function validateInput(schema: Record<string, unknown>, value: unknown, path?: string): string | null;
44
+ export declare function buildActionRequest(def: ActionDef, input: Record<string, unknown>): {
45
+ method: string;
46
+ url: string;
47
+ headers: Record<string, string>;
48
+ body?: unknown;
49
+ };
50
+ export declare const pick: (v: unknown, path: string | undefined) => unknown;
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pick = void 0;
4
+ exports.parseActionDef = parseActionDef;
5
+ exports.validateInput = validateInput;
6
+ exports.buildActionRequest = buildActionRequest;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const errors_1 = require("../errors");
9
+ const ApiError = { validation: (message, param) => new errors_1.EmulatorError('VALIDATION_FAILED', message, param) };
10
+ const NAME = /^[a-z][a-z0-9_]{0,63}$/;
11
+ const PROVIDER = /^[a-z0-9][a-z0-9_.-]{0,63}$/;
12
+ const TEMPLATE_ARG = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
13
+ const MAX_BODY_DEPTH = 8;
14
+ const obj = (v, where) => {
15
+ if (typeof v !== 'object' || v === null || Array.isArray(v))
16
+ throw ApiError.validation(`${where} must be an object.`, 'definition');
17
+ return v;
18
+ };
19
+ function parseActionDef(provider, name, raw) {
20
+ if (!PROVIDER.test(provider))
21
+ throw ApiError.validation('provider must be a short lowercase key.', 'provider');
22
+ if (!NAME.test(name))
23
+ throw ApiError.validation('name must be lowercase letters, digits and underscores.', 'name');
24
+ const o = obj(raw, 'The definition');
25
+ if (typeof o.description !== 'string' || !o.description.trim() || o.description.length > 500)
26
+ throw ApiError.validation('description is required (up to 500 characters).', 'definition');
27
+ const input = o.input === undefined ? { type: 'object', properties: {} } : obj(o.input, 'input');
28
+ if (input.type !== 'object')
29
+ throw ApiError.validation('input must be a JSON Schema of type object.', 'definition');
30
+ if (JSON.stringify(input).length > 20_000)
31
+ throw ApiError.validation('input schema is too large.', 'definition');
32
+ let output;
33
+ if (o.output !== undefined) {
34
+ output = obj(o.output, 'output');
35
+ if (JSON.stringify(output).length > 20_000)
36
+ throw ApiError.validation('output schema is too large.', 'definition');
37
+ if (output.type !== undefined && !(typeof output.type === 'string' || (Array.isArray(output.type) && output.type.every((t) => typeof t === 'string'))))
38
+ throw ApiError.validation('output.type must be a JSON Schema type.', 'definition');
39
+ }
40
+ const r = obj(o.request, 'request');
41
+ const method = String(r.method ?? '').toUpperCase();
42
+ if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(method))
43
+ throw ApiError.validation('request.method must be GET, POST, PUT, PATCH or DELETE.', 'definition');
44
+ let base;
45
+ try {
46
+ base = new URL(String(r.base_url));
47
+ }
48
+ catch {
49
+ throw ApiError.validation('request.base_url must be an https URL.', 'definition');
50
+ }
51
+ if (base.protocol !== 'https:' || base.username || base.password || base.search || base.hash)
52
+ throw ApiError.validation('request.base_url must be a plain https URL.', 'definition');
53
+ if (typeof r.path !== 'string' || !r.path.startsWith('/') || r.path.includes('..') || r.path.length > 500 || /[?#\s]/.test(r.path))
54
+ throw ApiError.validation('request.path must start with / and hold no query, fragment or "..".', 'definition');
55
+ const props = (input.properties ?? {});
56
+ const used = new Set();
57
+ for (const m of r.path.matchAll(TEMPLATE_ARG))
58
+ used.add(m[1]);
59
+ const query = r.query === undefined ? undefined : obj(r.query, 'request.query');
60
+ for (const [k, v] of Object.entries(query ?? {})) {
61
+ if (typeof v !== 'string' || !/^[A-Za-z0-9_.\-[\]]{1,64}$/.test(k))
62
+ throw ApiError.validation('request.query maps names to string templates.', 'definition');
63
+ for (const m of v.matchAll(TEMPLATE_ARG))
64
+ used.add(m[1]);
65
+ }
66
+ const walk = (v, depth) => {
67
+ if (depth > MAX_BODY_DEPTH)
68
+ throw ApiError.validation('request.body is nested too deeply.', 'definition');
69
+ if (typeof v === 'string')
70
+ for (const m of v.matchAll(TEMPLATE_ARG))
71
+ used.add(m[1]);
72
+ else if (Array.isArray(v))
73
+ v.forEach((x) => walk(x, depth + 1));
74
+ else if (typeof v === 'object' && v !== null)
75
+ Object.values(v).forEach((x) => walk(x, depth + 1));
76
+ };
77
+ walk(r.body, 0);
78
+ const headers = r.headers === undefined ? undefined : obj(r.headers, 'request.headers');
79
+ for (const [k, v] of Object.entries(headers ?? {})) {
80
+ if (typeof v !== 'string' || !/^[A-Za-z0-9-]{1,64}$/.test(k) || /^(authorization|cookie|host|proxy-authorization|content-length|x-api-key)$/i.test(k) || /[\r\n]/.test(v))
81
+ throw ApiError.validation('request.headers has a header Atlas sets itself or an invalid value.', 'definition');
82
+ }
83
+ for (const a of used)
84
+ if (!(a in props))
85
+ throw ApiError.validation(`The request uses {${a}}, which is not a property of input.`, 'definition');
86
+ for (const m of r.path.matchAll(TEMPLATE_ARG)) {
87
+ const req = (input.required ?? []);
88
+ if (!req.includes(m[1]))
89
+ throw ApiError.validation(`Path argument ${m[1]} must be in input.required.`, 'definition');
90
+ }
91
+ let response;
92
+ if (o.response !== undefined) {
93
+ const x = obj(o.response, 'response');
94
+ for (const k of ['path', 'ok_field', 'error_field'])
95
+ if (x[k] !== undefined && (typeof x[k] !== 'string' || !/^[A-Za-z0-9_$-]+(\.[A-Za-z0-9_$-]+){0,5}$/.test(x[k])))
96
+ throw ApiError.validation(`response.${k} must be a dot path.`, 'definition');
97
+ response = x;
98
+ }
99
+ const scopes = o.scopes === undefined ? undefined : o.scopes;
100
+ if (scopes !== undefined && (!Array.isArray(scopes) || scopes.length > 30 || scopes.some((s) => typeof s !== 'string' || s.length > 300)))
101
+ throw ApiError.validation('scopes must be a list of provider scopes.', 'definition');
102
+ return {
103
+ provider, name, description: o.description.trim(), input, ...(output ? { output } : {}),
104
+ request: { method: method, base_url: base.origin + (base.pathname === '/' ? '' : base.pathname.replace(/\/$/, '')), path: r.path, query, body: r.body, headers },
105
+ response, scopes: scopes,
106
+ paginate: o.paginate === undefined ? undefined : obj(o.paginate, 'paginate'),
107
+ mutating: typeof o.mutating === 'boolean' ? o.mutating : method !== 'GET',
108
+ };
109
+ }
110
+ // ---- input validation (the subset of JSON Schema inputs use) --------------------------
111
+ function validateInput(schema, value, path = 'input') {
112
+ let type = schema.type;
113
+ // A nullable type (`['string', 'null']`): null passes, anything else is checked against the one real type.
114
+ if (Array.isArray(type)) {
115
+ if (value === null && type.includes('null'))
116
+ return null;
117
+ const real = type.filter((t) => t !== 'null');
118
+ type = real.length === 1 ? real[0] : undefined;
119
+ }
120
+ if (Array.isArray(schema.enum) && !schema.enum.some((e) => JSON.stringify(e) === JSON.stringify(value)))
121
+ return `${path} must be one of ${JSON.stringify(schema.enum)}.`;
122
+ switch (type) {
123
+ case 'object': {
124
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
125
+ return `${path} must be an object.`;
126
+ const v = value;
127
+ const props = (schema.properties ?? {});
128
+ for (const r of (schema.required ?? []))
129
+ if (v[r] === undefined || v[r] === null)
130
+ return `${path}.${r} is required.`;
131
+ for (const [k, x] of Object.entries(v)) {
132
+ if (x === undefined)
133
+ continue;
134
+ if (!props[k]) {
135
+ if (schema.additionalProperties === false)
136
+ return `${path}.${k} is not allowed.`;
137
+ continue;
138
+ }
139
+ const e = validateInput(props[k], x, `${path}.${k}`);
140
+ if (e)
141
+ return e;
142
+ }
143
+ return null;
144
+ }
145
+ case 'array': {
146
+ if (!Array.isArray(value))
147
+ return `${path} must be an array.`;
148
+ if (typeof schema.maxItems === 'number' && value.length > schema.maxItems)
149
+ return `${path} has too many items.`;
150
+ const item = schema.items;
151
+ if (item)
152
+ for (let i = 0; i < value.length; i++) {
153
+ const e = validateInput(item, value[i], `${path}[${i}]`);
154
+ if (e)
155
+ return e;
156
+ }
157
+ return null;
158
+ }
159
+ case 'string':
160
+ if (typeof value !== 'string')
161
+ return `${path} must be a string.`;
162
+ if (typeof schema.maxLength === 'number' && value.length > schema.maxLength)
163
+ return `${path} is too long.`;
164
+ if (typeof schema.minLength === 'number' && value.length < schema.minLength)
165
+ return `${path} is too short.`;
166
+ return null;
167
+ case 'integer':
168
+ case 'number':
169
+ if (typeof value !== 'number' || !Number.isFinite(value) || (type === 'integer' && !Number.isInteger(value)))
170
+ return `${path} must be ${type === 'integer' ? 'an integer' : 'a number'}.`;
171
+ if (typeof schema.minimum === 'number' && value < schema.minimum)
172
+ return `${path} is below the minimum.`;
173
+ if (typeof schema.maximum === 'number' && value > schema.maximum)
174
+ return `${path} is above the maximum.`;
175
+ return null;
176
+ case 'boolean':
177
+ return typeof value === 'boolean' ? null : `${path} must be true or false.`;
178
+ default:
179
+ return null;
180
+ }
181
+ }
182
+ // ---- request building -------------------------------------------------------------------
183
+ const WHOLE = /^\{([A-Za-z_][A-Za-z0-9_]*)\}$/;
184
+ const interpolate = (s, input, encode) => s.replace(TEMPLATE_ARG, (_, a) => {
185
+ const v = input[a];
186
+ const str = v === undefined || v === null ? '' : typeof v === 'object' ? JSON.stringify(v) : String(v);
187
+ return encode ? encodeURIComponent(str) : str;
188
+ });
189
+ const fill = (t, input) => {
190
+ if (typeof t === 'string') {
191
+ const m = WHOLE.exec(t);
192
+ if (m)
193
+ return input[m[1]];
194
+ return interpolate(t, input, false);
195
+ }
196
+ if (Array.isArray(t))
197
+ return t.map((x) => fill(x, input)).filter((x) => x !== undefined);
198
+ if (typeof t === 'object' && t !== null) {
199
+ const out = {};
200
+ for (const [k, v] of Object.entries(t)) {
201
+ const x = fill(v, input);
202
+ if (x !== undefined)
203
+ out[k] = x;
204
+ }
205
+ return out;
206
+ }
207
+ return t;
208
+ };
209
+ function buildActionRequest(def, input) {
210
+ const path = def.request.path.replace(TEMPLATE_ARG, (_, a) => {
211
+ const v = input[a];
212
+ if (v === undefined || v === null || v === '')
213
+ throw ApiError.validation(`${a} is required.`, 'input');
214
+ // A dot segment would climb out of the templated path once the URL is normalised.
215
+ if (String(v) === '.' || String(v) === '..')
216
+ throw ApiError.validation(`${a} is not a valid value.`, 'input');
217
+ return encodeURIComponent(String(v));
218
+ });
219
+ const qs = new URLSearchParams();
220
+ for (const [k, t] of Object.entries(def.request.query ?? {})) {
221
+ const m = WHOLE.exec(t);
222
+ if (m) {
223
+ const v = input[m[1]];
224
+ if (v === undefined || v === null)
225
+ continue;
226
+ if (Array.isArray(v))
227
+ qs.set(k, v.join(','));
228
+ else
229
+ qs.set(k, String(v));
230
+ }
231
+ else
232
+ qs.set(k, interpolate(t, input, false));
233
+ }
234
+ const q = qs.toString();
235
+ const body = def.request.body === undefined ? undefined : fill(def.request.body, input);
236
+ return { method: def.request.method, url: `${def.request.base_url}${path}${q ? `?${q}` : ''}`, headers: { accept: 'application/json', ...(def.request.headers ?? {}) }, ...(body !== undefined ? { body } : {}) };
237
+ }
238
+ const pick = (v, path) => {
239
+ if (!path)
240
+ return v;
241
+ let cur = v;
242
+ for (const k of path.split('.')) {
243
+ if (typeof cur !== 'object' || cur === null)
244
+ return undefined;
245
+ cur = cur[k];
246
+ }
247
+ return cur;
248
+ };
249
+ exports.pick = pick;
250
+ //# sourceMappingURL=emu4-actions-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emu4-actions-def.js","sourceRoot":"","sources":["../../src/handlers/emu4-actions-def.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Engine } from '../engine';
2
+ import type { Obj } from '../openapi';
3
+ import { Table } from '../store';
4
+ export interface ActionRunResult {
5
+ accessTokenClaims: Obj;
6
+ idTokenClaims: Obj;
7
+ appMetadata: Obj;
8
+ sessionData: Obj;
9
+ denied: boolean;
10
+ denyReason: string | null;
11
+ lockReason: string | null;
12
+ pauseReason: string | null;
13
+ suppressedAccessClaims: string[];
14
+ suppressedIdClaims: string[];
15
+ userEdits: Obj;
16
+ signUpPrefill: Obj;
17
+ signUpModify: Obj;
18
+ httpRequests: Obj[];
19
+ connectorCalls: Obj[];
20
+ logs: string[];
21
+ error: string | null;
22
+ }
23
+ /** Timeout of one Action run, in CPU milliseconds (the real service allows 2 s; the emulator keeps a test suite fast). */
24
+ export declare const ACTION_TIMEOUT_MS = 100;
25
+ /** True when the emulator can run Action code (Node 22+); false in a browser, where the declarative reader is used. */
26
+ export declare const sandboxAvailable: () => boolean;
27
+ /** Code written as a handler module (`exports.onExecute...`, `module.exports`) is not the runtime's form: the caller reads it declaratively. */
28
+ export declare const isRuntimeForm: (code: string) => boolean;
29
+ /**
30
+ * Run one Action's code. Never throws: a syntax error, a thrown exception, a timeout or a promise that never settles comes back
31
+ * as `error` (the caller fails closed or open by trigger, as the real flow does). Returns null when the code is not in the
32
+ * runtime's form or vm is not available, so the caller can read it declaratively instead.
33
+ */
34
+ export declare function runActionCode(event: Obj, code: string): ActionRunResult | null;
35
+ /** One row per Action run (what the emulator saw: outcome, deny reason, logs, the requests `api.http` queued), read at `/__emulator/actions/runs`. */
36
+ export declare const actionRuns: (e: Engine) => Table<import("../store").Row>;