@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.
- package/LICENSE +21 -0
- package/dist/custom-html.d.ts +57 -0
- package/dist/custom-html.js +491 -0
- package/dist/custom-html.js.map +1 -0
- package/dist/engine.d.ts +1 -1
- package/dist/engine.js +5 -1
- package/dist/engine.js.map +1 -1
- package/dist/error-catalog.js +8 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/event-gate.js +60 -2
- package/dist/event-gate.js.map +1 -1
- package/dist/generic.js +5 -1
- package/dist/generic.js.map +1 -1
- package/dist/handlers/access-signals.d.ts +48 -0
- package/dist/handlers/access-signals.js +76 -0
- package/dist/handlers/access-signals.js.map +1 -0
- package/dist/handlers/approvals.js +54 -1
- package/dist/handlers/approvals.js.map +1 -1
- package/dist/handlers/authz-data.d.ts +2 -0
- package/dist/handlers/authz-data.js +627 -0
- package/dist/handlers/authz-data.js.map +1 -0
- package/dist/handlers/authz-layers.d.ts +229 -0
- package/dist/handlers/authz-layers.js +786 -0
- package/dist/handlers/authz-layers.js.map +1 -0
- package/dist/handlers/authz-state.d.ts +80 -0
- package/dist/handlers/authz-state.js +175 -0
- package/dist/handlers/authz-state.js.map +1 -0
- package/dist/handlers/authz.js +240 -177
- package/dist/handlers/authz.js.map +1 -1
- package/dist/handlers/billing.d.ts +99 -1
- package/dist/handlers/billing.js +556 -77
- package/dist/handlers/billing.js.map +1 -1
- package/dist/handlers/cedar-ext.d.ts +35 -0
- package/dist/handlers/cedar-ext.js +174 -0
- package/dist/handlers/cedar-ext.js.map +1 -0
- package/dist/handlers/cedar.d.ts +146 -0
- package/dist/handlers/cedar.js +689 -0
- package/dist/handlers/cedar.js.map +1 -0
- package/dist/handlers/connections.d.ts +4 -1
- package/dist/handlers/connections.js +267 -38
- package/dist/handlers/connections.js.map +1 -1
- package/dist/handlers/control.js +6 -1
- package/dist/handlers/control.js.map +1 -1
- package/dist/handlers/device.js +18 -1
- package/dist/handlers/device.js.map +1 -1
- package/dist/handlers/emu3-misc.d.ts +38 -0
- package/dist/handlers/emu3-misc.js +1056 -0
- package/dist/handlers/emu3-misc.js.map +1 -0
- package/dist/handlers/emu4-actions-access.d.ts +46 -0
- package/dist/handlers/emu4-actions-access.js +107 -0
- package/dist/handlers/emu4-actions-access.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
- package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog.js +143 -0
- package/dist/handlers/emu4-actions-catalog.js.map +1 -0
- package/dist/handlers/emu4-actions-def.d.ts +50 -0
- package/dist/handlers/emu4-actions-def.js +250 -0
- package/dist/handlers/emu4-actions-def.js.map +1 -0
- package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
- package/dist/handlers/emu4-actions-sandbox.js +318 -0
- package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
- package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
- package/dist/handlers/emu4-actions-typegen.js +73 -0
- package/dist/handlers/emu4-actions-typegen.js.map +1 -0
- package/dist/handlers/emu4-actions.d.ts +2 -0
- package/dist/handlers/emu4-actions.js +506 -0
- package/dist/handlers/emu4-actions.js.map +1 -0
- package/dist/handlers/emu4-authz-trust.d.ts +40 -0
- package/dist/handlers/emu4-authz-trust.js +488 -0
- package/dist/handlers/emu4-authz-trust.js.map +1 -0
- package/dist/handlers/emu4-authz.d.ts +2 -0
- package/dist/handlers/emu4-authz.js +752 -0
- package/dist/handlers/emu4-authz.js.map +1 -0
- package/dist/handlers/emu4-billing-core.d.ts +23 -0
- package/dist/handlers/emu4-billing-core.js +22 -0
- package/dist/handlers/emu4-billing-core.js.map +1 -0
- package/dist/handlers/emu4-billing-x.d.ts +2 -0
- package/dist/handlers/emu4-billing-x.js +489 -0
- package/dist/handlers/emu4-billing-x.js.map +1 -0
- package/dist/handlers/emu4-billing.d.ts +14 -0
- package/dist/handlers/emu4-billing.js +846 -0
- package/dist/handlers/emu4-billing.js.map +1 -0
- package/dist/handlers/emu4-clones.d.ts +2 -0
- package/dist/handlers/emu4-clones.js +322 -0
- package/dist/handlers/emu4-clones.js.map +1 -0
- package/dist/handlers/emu4-compliance.d.ts +8 -0
- package/dist/handlers/emu4-compliance.js +39 -0
- package/dist/handlers/emu4-compliance.js.map +1 -0
- package/dist/handlers/emu4-config.d.ts +14 -0
- package/dist/handlers/emu4-config.js +148 -0
- package/dist/handlers/emu4-config.js.map +1 -0
- package/dist/handlers/emu4-cookies.d.ts +8 -0
- package/dist/handlers/emu4-cookies.js +248 -0
- package/dist/handlers/emu4-cookies.js.map +1 -0
- package/dist/handlers/emu4-erasure.d.ts +2 -0
- package/dist/handlers/emu4-erasure.js +587 -0
- package/dist/handlers/emu4-erasure.js.map +1 -0
- package/dist/handlers/emu4-federation.d.ts +8 -0
- package/dist/handlers/emu4-federation.js +18 -0
- package/dist/handlers/emu4-federation.js.map +1 -0
- package/dist/handlers/emu4-journey-math.d.ts +42 -0
- package/dist/handlers/emu4-journey-math.js +99 -0
- package/dist/handlers/emu4-journey-math.js.map +1 -0
- package/dist/handlers/emu4-messaging.d.ts +21 -0
- package/dist/handlers/emu4-messaging.js +595 -0
- package/dist/handlers/emu4-messaging.js.map +1 -0
- package/dist/handlers/emu4-minors.d.ts +7 -0
- package/dist/handlers/emu4-minors.js +408 -0
- package/dist/handlers/emu4-minors.js.map +1 -0
- package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
- package/dist/handlers/emu4-oauth-audit.js +17 -0
- package/dist/handlers/emu4-oauth-audit.js.map +1 -0
- package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
- package/dist/handlers/emu4-oauth-auth.js +363 -0
- package/dist/handlers/emu4-oauth-auth.js.map +1 -0
- package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
- package/dist/handlers/emu4-oauth-delivery.js +207 -0
- package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
- package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
- package/dist/handlers/emu4-oauth-keys.js +268 -0
- package/dist/handlers/emu4-oauth-keys.js.map +1 -0
- package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
- package/dist/handlers/emu4-oauth-pub.js +420 -0
- package/dist/handlers/emu4-oauth-pub.js.map +1 -0
- package/dist/handlers/emu4-oauth.d.ts +10 -0
- package/dist/handlers/emu4-oauth.js +23 -0
- package/dist/handlers/emu4-oauth.js.map +1 -0
- package/dist/handlers/emu4-policies.d.ts +2 -0
- package/dist/handlers/emu4-policies.js +408 -0
- package/dist/handlers/emu4-policies.js.map +1 -0
- package/dist/handlers/emu4-region.d.ts +2 -0
- package/dist/handlers/emu4-region.js +189 -0
- package/dist/handlers/emu4-region.js.map +1 -0
- package/dist/handlers/emu4-saml.d.ts +12 -0
- package/dist/handlers/emu4-saml.js +532 -0
- package/dist/handlers/emu4-saml.js.map +1 -0
- package/dist/handlers/emu4-shared.d.ts +44 -0
- package/dist/handlers/emu4-shared.js +90 -0
- package/dist/handlers/emu4-shared.js.map +1 -0
- package/dist/handlers/emu4-snapshots.d.ts +38 -0
- package/dist/handlers/emu4-snapshots.js +231 -0
- package/dist/handlers/emu4-snapshots.js.map +1 -0
- package/dist/handlers/emu4-sns.d.ts +9 -0
- package/dist/handlers/emu4-sns.js +21 -0
- package/dist/handlers/emu4-sns.js.map +1 -0
- package/dist/handlers/emu4-trust-binding.d.ts +27 -0
- package/dist/handlers/emu4-trust-binding.js +344 -0
- package/dist/handlers/emu4-trust-binding.js.map +1 -0
- package/dist/handlers/emu4-trust.d.ts +35 -0
- package/dist/handlers/emu4-trust.js +543 -0
- package/dist/handlers/emu4-trust.js.map +1 -0
- package/dist/handlers/fga-engine.d.ts +78 -0
- package/dist/handlers/fga-engine.js +663 -0
- package/dist/handlers/fga-engine.js.map +1 -0
- package/dist/handlers/governance.js +3 -2
- package/dist/handlers/governance.js.map +1 -1
- package/dist/handlers/hooks.js +13 -0
- package/dist/handlers/hooks.js.map +1 -1
- package/dist/handlers/index.js +14 -1
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/machines.js +6 -0
- package/dist/handlers/machines.js.map +1 -1
- package/dist/handlers/messaging.d.ts +3 -1
- package/dist/handlers/messaging.js +455 -48
- package/dist/handlers/messaging.js.map +1 -1
- package/dist/handlers/oauth-adv.d.ts +191 -0
- package/dist/handlers/oauth-adv.js +1305 -0
- package/dist/handlers/oauth-adv.js.map +1 -0
- package/dist/handlers/oauth-flows.d.ts +25 -1
- package/dist/handlers/oauth-flows.js +111 -50
- package/dist/handlers/oauth-flows.js.map +1 -1
- package/dist/handlers/oauth.d.ts +24 -3
- package/dist/handlers/oauth.js +245 -60
- package/dist/handlers/oauth.js.map +1 -1
- package/dist/handlers/orgs.js +6 -0
- package/dist/handlers/orgs.js.map +1 -1
- package/dist/handlers/platform.d.ts +5 -0
- package/dist/handlers/platform.js +33 -15
- package/dist/handlers/platform.js.map +1 -1
- package/dist/handlers/scim.d.ts +2 -0
- package/dist/handlers/scim.js +198 -11
- package/dist/handlers/scim.js.map +1 -1
- package/dist/handlers/sessions.d.ts +2 -0
- package/dist/handlers/sessions.js +24 -16
- package/dist/handlers/sessions.js.map +1 -1
- package/dist/handlers/users.js +3 -0
- package/dist/handlers/users.js.map +1 -1
- package/dist/jwe.d.ts +18 -0
- package/dist/jwe.js +101 -0
- package/dist/jwe.js.map +1 -0
- package/dist/jws.js +2 -0
- package/dist/jws.js.map +1 -1
- package/dist/messaging-callbacks.d.ts +100 -0
- package/dist/messaging-callbacks.js +767 -0
- package/dist/messaging-callbacks.js.map +1 -0
- package/dist/openapi.d.ts +1 -0
- package/dist/openapi.js +44 -2
- package/dist/openapi.js.map +1 -1
- package/dist/parity-emu3-authz.d.ts +3 -0
- package/dist/parity-emu3-authz.js +61 -0
- package/dist/parity-emu3-authz.js.map +1 -0
- package/dist/parity-emu3-billing.d.ts +3 -0
- package/dist/parity-emu3-billing.js +25 -0
- package/dist/parity-emu3-billing.js.map +1 -0
- package/dist/parity-emu3-messaging.d.ts +3 -0
- package/dist/parity-emu3-messaging.js +27 -0
- package/dist/parity-emu3-messaging.js.map +1 -0
- package/dist/parity-emu3-misc.d.ts +2 -0
- package/dist/parity-emu3-misc.js +63 -0
- package/dist/parity-emu3-misc.js.map +1 -0
- package/dist/parity-emu3-oauth.d.ts +2 -0
- package/dist/parity-emu3-oauth.js +39 -0
- package/dist/parity-emu3-oauth.js.map +1 -0
- package/dist/parity-emu4-actions.d.ts +2 -0
- package/dist/parity-emu4-actions.js +38 -0
- package/dist/parity-emu4-actions.js.map +1 -0
- package/dist/parity-emu4-authz.d.ts +3 -0
- package/dist/parity-emu4-authz.js +68 -0
- package/dist/parity-emu4-authz.js.map +1 -0
- package/dist/parity-emu4-billing.d.ts +6 -0
- package/dist/parity-emu4-billing.js +44 -0
- package/dist/parity-emu4-billing.js.map +1 -0
- package/dist/parity-emu4-compliance.d.ts +2 -0
- package/dist/parity-emu4-compliance.js +92 -0
- package/dist/parity-emu4-compliance.js.map +1 -0
- package/dist/parity-emu4-federation.d.ts +2 -0
- package/dist/parity-emu4-federation.js +33 -0
- package/dist/parity-emu4-federation.js.map +1 -0
- package/dist/parity-emu4-messaging.d.ts +3 -0
- package/dist/parity-emu4-messaging.js +42 -0
- package/dist/parity-emu4-messaging.js.map +1 -0
- package/dist/parity-emu4-oauth.d.ts +2 -0
- package/dist/parity-emu4-oauth.js +55 -0
- package/dist/parity-emu4-oauth.js.map +1 -0
- package/dist/parity-emu4-trust.d.ts +2 -0
- package/dist/parity-emu4-trust.js +41 -0
- package/dist/parity-emu4-trust.js.map +1 -0
- package/dist/parity-routes.js +19 -1
- package/dist/parity-routes.js.map +1 -1
- package/dist/sns-cert.d.ts +9 -0
- package/dist/sns-cert.js +101 -0
- package/dist/sns-cert.js.map +1 -0
- package/dist/tokens.d.ts +69 -4
- package/dist/tokens.js +164 -38
- package/dist/tokens.js.map +1 -1
- 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":";;;AACA,yDAAoD;AACpD,6EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,GAAG,GAAG,CAAC,WAAmB,EAAE,QAAiC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACtH,MAAM,GAAG,GAAG,CAAC,UAAmC,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEzH,MAAM,EAAE,GAAG,wBAAwB,CAAC;AACpC,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;AACvD,MAAM,KAAK,GAAG,uBAAuB,CAAC;AACtC,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC1D,MAAM,GAAG,GAAG,wBAAwB,CAAC;AAErC,MAAM,GAAG,GAAgC;IACvC,CAAC,QAAQ,EAAE,aAAa,EAAE;YACxB,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1Q,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAClK,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK;SAC5B,CAAC;IACF,CAAC,QAAQ,EAAE,WAAW,EAAE;YACtB,WAAW,EAAE,iBAAiB;YAC9B,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAChK,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6CAA6C,EAAE,OAAO,EAAE,IAAI,EAAE;YAC5G,QAAQ,EAAE,KAAK;SAChB,CAAC;IACF,CAAC,QAAQ,EAAE,cAAc,EAAE;YACzB,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACjS,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACxL,QAAQ,EAAE,IAAI;SACf,CAAC;IACF,CAAC,WAAW,EAAE,cAAc,EAAE;YAC5B,WAAW,EAAE,8CAA8C;YAC3D,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,uBAAuB,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/J,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,EAAE;YACjN,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI;SACnC,CAAC;IACF,CAAC,WAAW,EAAE,eAAe,EAAE;YAC7B,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,6DAA6D,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,qCAAqC,CAAC,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;YAC1O,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,EAAE;YACnL,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK;SACpC,CAAC;IACF,CAAC,WAAW,EAAE,eAAe,EAAE;YAC7B,WAAW,EAAE,2DAA2D;YACxE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,qCAAqC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,0CAA0C,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,2CAA2C,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1R,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YAC1L,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK;SAChK,CAAC;IACF,CAAC,WAAW,EAAE,YAAY,EAAE;YAC1B,WAAW,EAAE,8BAA8B;YAC3C,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,qCAAqC,CAAC,EAAE,CAAC;YACxH,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YACjH,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK;SAC/J,CAAC;IACF,CAAC,QAAQ,EAAE,qBAAqB,EAAE;YAChC,WAAW,EAAE,wFAAwF;YACrG,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,mCAAmC,CAAC,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;YACpM,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAA8B,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,EAAE;YAC5N,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK;SAC/H,CAAC;IACF,CAAC,QAAQ,EAAE,mBAAmB,EAAE;YAC9B,WAAW,EAAE,yBAAyB;YACtC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAChJ,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,8BAA8B,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YAC7I,QAAQ,EAAE,KAAK;SAChB,CAAC;IACF,CAAC,QAAQ,EAAE,sBAAsB,EAAE;YACjC,WAAW,EAAE,4BAA4B;YACzC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,gDAAgD,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,0CAA0C,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,sDAAsD,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,mCAAmC,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,4CAA4C,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;YACpf,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,6CAA6C,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;YACpS,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK;SAC5H,CAAC;IACF,CAAC,QAAQ,EAAE,aAAa,EAAE;YACxB,WAAW,EAAE,gGAAgG;YAC7G,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,wCAAwC,CAAC,EAAE,CAAC;YAC1H,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,qKAAqK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;YAC5T,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK;SACnD,CAAC;IACF,CAAC,QAAQ,EAAE,YAAY,EAAE;YACvB,WAAW,EAAE,aAAa;YAC1B,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,wCAAwC,CAAC,EAAE,CAAC;YAC1H,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,yIAAyI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;YAChS,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,KAAK;SAClD,CAAC;IACF,CAAC,QAAQ,EAAE,cAAc,EAAE;YACzB,WAAW,EAAE,6GAA6G;YAC1H,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,uBAAuB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtK,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,sMAAsM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE;YAC7X,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI;SACvD,CAAC;IACF,CAAC,QAAQ,EAAE,aAAa,EAAE;YACxB,WAAW,EAAE,8CAA8C;YAC3D,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpR,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE;YACjN,QAAQ,EAAE,IAAI;SACf,CAAC;IACF,CAAC,SAAS,EAAE,gBAAgB,EAAE;YAC5B,WAAW,EAAE,uBAAuB;YACpC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;YACnH,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE;YAC1K,QAAQ,EAAE,IAAI;SACf,CAAC;IACF,CAAC,SAAS,EAAE,eAAe,EAAE;YAC3B,WAAW,EAAE,4DAA4D;YACzE,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,gCAAgC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,2CAA2C,CAAC,EAAE,CAAC;YAChL,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE;YACtJ,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK;SAC9H,CAAC;IACF,CAAC,QAAQ,EAAE,uBAAuB,EAAE;YAClC,WAAW,EAAE,0BAA0B;YACvC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,gDAAgD,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACrV,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,6CAA6C,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACtN,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI;SAC3B,CAAC;IACF,CAAC,QAAQ,EAAE,oBAAoB,EAAE;YAC/B,WAAW,EAAE,0FAA0F;YACvG,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,6BAA6B,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YAClF,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,8BAA8B,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACvI,QAAQ,EAAE,IAAI;SACf,CAAC;CACH,CAAC;AAEW,QAAA,gBAAgB,GAAgB;IAC3C,sGAAsG;IACtG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iCAAc,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAI,CAAY,EAAE,GAAG,CAAC,6CAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,6CAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1J,GAAG,0CAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iCAAc,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7D,CAAC;AACK,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,wBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAA3F,QAAA,UAAU,cAAiF"}
|
|
@@ -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>;
|