@friggframework/core 2.0.0--canary.697.20e3e54.0 → 2.0.0--canary.698.b1a2d30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/integrations/data-defined/README.md +8 -1
  2. package/integrations/data-defined/capabilities/AUDIT.md +451 -0
  3. package/integrations/data-defined/capabilities/asana.capabilities.json +22 -13
  4. package/integrations/data-defined/capabilities/fathom.capabilities.json +16 -6
  5. package/integrations/data-defined/capabilities/hubspot.capabilities.json +78 -27
  6. package/integrations/data-defined/capabilities/linear.capabilities.json +30 -10
  7. package/integrations/data-defined/capabilities/phone.capabilities.json +24 -7
  8. package/integrations/data-defined/capabilities/pipedrive.capabilities.json +26 -11
  9. package/integrations/data-defined/capabilities/salesforce.capabilities.json +64 -18
  10. package/integrations/data-defined/capabilities/slack.capabilities.json +12 -5
  11. package/integrations/data-defined/capabilities/stripe.capabilities.json +28 -10
  12. package/integrations/data-defined/data-defined-integration.js +2 -2
  13. package/integrations/data-defined/examples/asana-slack.definition.json +2 -3
  14. package/integrations/data-defined/examples/klaviyo-hubspot.definition.json +1 -4
  15. package/integrations/data-defined/examples/phone-hubspot.definition.json +1 -5
  16. package/integrations/data-defined/manifests.js +18 -0
  17. package/integrations/data-defined/runtime.js +17 -2
  18. package/integrations/data-defined/schema/capability-manifest.v0.1.schema.json +40 -0
  19. package/integrations/data-defined/scripts/check-manifests.js +220 -0
  20. package/integrations/data-defined/tests/helpers-fake-crm.js +11 -6
  21. package/integrations/data-defined/validate.js +6 -0
  22. package/package.json +5 -5
@@ -19,7 +19,8 @@ installation (Integration.config) ─┘ │
19
19
  | `schema/capability-manifest.v0.1.schema.json` | What an API module declares it can do |
20
20
  | `schema/installation.v0.1.schema.json` | `Integration.config` for a data-defined installation |
21
21
  | `schema/records.md` | Database records: definition versions, installation, mappings, workflow runs |
22
- | `capabilities/*.capabilities.json` | Mock manifests (HubSpot, Phone, and the apps the examples use) |
22
+ | `capabilities/*.capabilities.json` | Capability manifests. Nine are checked against the real Api classes (`capabilities/AUDIT.md`); the other twelve are still mock-shaped |
23
+ | `scripts/check-manifests.js` | Checks every manifest `method` exists on the real module's Api class, with the arguments it takes |
23
24
  | `examples/*.definition.json` | Example definitions; `examples/records/` has Phone ↔ HubSpot database records |
24
25
  | `expressions.js` | `$.ref`, `{{template \| filter}}` and conditions. No eval. |
25
26
  | `steps.js`, `interpreter.js`, `transforms.js` | The step catalogue and the interpreter |
@@ -258,6 +259,12 @@ Exit codes: `0` valid, `1` invalid (or a warning with `--strict`), `2` could not
258
259
  unknown option, `ajv` not installed). Manifests are checked first and an invalid manifest fails the run, because a
259
260
  definition is only as trustworthy as the manifests it is checked against.
260
261
 
262
+ A manifest is only as real as its methods. `scripts/check-manifests.js <modules-dir>...` loads each module's Api class
263
+ (no network, nothing instantiated) and checks that every capability's `method` exists and is called the way it takes its
264
+ arguments (`args`: positional inputs, `"$rest"`, or a `{ "value" }` constant; no `args` means one object of all inputs).
265
+ A capability the real Api lacks is marked `"status": "unimplemented"` with a `note`: a definition that uses it validates
266
+ with a warning, not an error. `capabilities/AUDIT.md` has the table.
267
+
261
268
  `ajv` comes from the monorepo root (`@friggframework/schemas` depends on it); core's runtime stays dependency-free and
262
269
  loads it only for validation. `tests/schemas.test.js` runs both layers over every example and manifest and drives the
263
270
  CLI as a child process; it fails, rather than skips, if `ajv` is missing. Core's `npm test`, and so CI's
@@ -0,0 +1,451 @@
1
+ # Capability manifests against the real API modules
2
+
3
+ Audit of every `*.capabilities.json` in this directory against the Api class it names (ADR-063 phase 4). The manifests
4
+ began as bundled mocks; for each module whose source could be found, every `method` was checked to exist on the real
5
+ Api class and every call shape was read against the method's real signature.
6
+
7
+ Re-run it (no network, nothing instantiated):
8
+
9
+ ```bash
10
+ node packages/core/integrations/data-defined/scripts/check-manifests.js --stub-missing \
11
+ ~/phone-app/backend/src/api-modules ~/phone-app/backend/node_modules/@friggframework \
12
+ ~/api-module-library/packages/v1-ready ~/api-module-library/packages/needs-updating
13
+ ```
14
+
15
+ (`--stub-missing` stands in for dependencies that are not installed here, such as jsforce, stripe and @linear/sdk, so
16
+ the Api's methods can be read. Roots are searched in order and the first module that loads wins.)
17
+
18
+ ## How to read this
19
+
20
+ - **ok**: the method exists on the Api class and the call is shaped as the method takes it.
21
+ - **unimplemented**: the real Api has no method that does this (or none that can be called as the capability is
22
+ shaped). The manifest carries `"status": "unimplemented"` and a `note`; a definition that uses the capability
23
+ validates with a **warning**, never an error. The capability name is unchanged so existing definitions keep validating.
24
+ - **unverified**: no source for the module was available; its manifest is unchanged from the mock.
25
+ - **Call shape**. A capability with no `args` is called `api.method(input)` with one object holding every input.
26
+ Nearly every real method takes positional arguments instead (`getContactById(id)`, `updateContact(id, properties)`),
27
+ so the manifest now carries `args`: an ordered list of input names, `"$rest"` (the inputs not named elsewhere, as
28
+ one object) or `{ "value": x }` (a constant, e.g. the sObject name of Salesforce's generic `get(object, id)`).
29
+ `runtime.js` `argumentsFor` spreads them. An input that is declared but never passed is refused by the manifest check,
30
+ because it would be accepted and silently dropped.
31
+ - **Webhook verification.** Every manifest names `verifyWebhookSignature`. No real module has it (only clio, which has no
32
+ manifest). Each real module's `webhook` block is marked `"status": "unimplemented"`, and a workflow that triggers on
33
+ its events validates with a warning: every delivery would fail signature verification.
34
+
35
+ ## Summary
36
+
37
+ | Module | Source checked | Capabilities | Renamed method | Call shape fixed | Inputs changed | Unimplemented upstream |
38
+ |---|---|---|---|---|---|---|
39
+ | asana | ~/api-module-library/packages/v1-ready/asana | 6 | 3 | 1 | 2 | 3 |
40
+ | calendly | none found | 6 | - | - | - | - |
41
+ | docusign | none found | 5 | - | - | - | - |
42
+ | fathom | ~/api-module-library/packages/v1-ready/fathom | 5 | 2 | 2 | 0 | 1 |
43
+ | github | none found | 6 | - | - | - | - |
44
+ | hubspot | ~/api-module-library/packages/v1-ready/hubspot | 23 | 0 | 5 | 1 | 17 |
45
+ | jira | none found | 12 | - | - | - | - |
46
+ | klaviyo | none found | 14 | - | - | - | - |
47
+ | linear | ~/api-module-library/packages/v1-ready/linear | 9 | 0 | 0 | 0 | 9 |
48
+ | netsuite | none found | 15 | - | - | - | - |
49
+ | notion | none found | 6 | - | - | - | - |
50
+ | pipedrive | ~/phone-app/backend/node_modules/@friggframework/api-module-pipedrive | 11 | 4 | 3 | 1 | 2 |
51
+ | quickbooks | none found | 14 | - | - | - | - |
52
+ | phone | ~/phone-app/backend/src/api-modules/phone | 13 | 1 | 4 | 0 | 1 |
53
+ | salesforce | ~/api-module-library/packages/v1-ready/salesforce | 12 | 5 | 5 | 0 | 7 |
54
+ | shopify | none found | 15 | - | - | - | - |
55
+ | slack | ~/api-module-library/packages/needs-updating/slack | 7 | 2 | 1 | 0 | 1 |
56
+ | stripe | ~/api-module-library/packages/v1-ready/stripe | 9 | 1 | 0 | 0 | 8 |
57
+ | acmeerp | none found | 13 | - | - | - | - |
58
+ | webflow | none found | 5 | - | - | - | - |
59
+ | zendesk | none found | 8 | - | - | - | - |
60
+
61
+ Modules with no source to check against: calendly, docusign, github, jira, klaviyo, netsuite, notion, quickbooks, shopify, acmeerp, webflow, zendesk. Their capabilities are still mock-shaped:
62
+ nothing in them is known to exist.
63
+
64
+ Where a module has two candidates the first root given wins. Phone is checked against the deployed
65
+ `phone-app/backend/src/api-modules/phone` (the app's own module: `createUnifiedWebhook`, `updateContact`). The library's `v1-ready/phone` 1.0.0 lacks `updateContact` and has `createCallWebhook` and friends
66
+ instead of one webhook method. Pipedrive is checked against the built `@friggframework/api-module-pipedrive`
67
+ 2.1.0-next.7 (the library copy is TypeScript source with no `dist`).
68
+
69
+ Manifest versions in the files (for example HubSpot 1.4.0, Asana 1.5.1) are ahead of the module sources audited (HubSpot
70
+ 1.1.7, Asana 1.1.5): the manifests describe modules that were never released as written.
71
+
72
+ ## Asana (`asana`)
73
+
74
+ Checked against `~/api-module-library/packages/v1-ready/asana` (@friggframework/api-module-asana manifest 1.5.1).
75
+
76
+ | Capability | Method | Status | Real signature | Note |
77
+ |---|---|---|---|---|
78
+ | `task.get` | `getTaskById` | ok | `getTaskById(id)` | Api.getTaskById(id) takes only the id; field selection (opt_fields) is not supported. (method was `getTask`; called with one object; now positional; inputs were taskGid, opt_fields) |
79
+ | `task.search` | `searchTasksInWorkspace` | unimplemented | none | Api.listTasks({ workspaceId, assigneeId }) filters by workspace and assignee only; due_on, completed, projects_any and limit have no equivalent. |
80
+ | `project.list` | `listProjects` | ok | `listProjects(params)` | (method was `getProjects`; inputs were workspaceGid, archived) |
81
+ | `workspace.list` | `listWorkspaces` | ok | `listWorkspaces()` | (method was `getWorkspaces`) |
82
+ | `webhook.create` | `createWebhook` | unimplemented | none | Api has no webhook methods. |
83
+ | `webhook.delete` | `deleteWebhook` | unimplemented | none | Api has no webhook methods. |
84
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The asana Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
85
+
86
+ ## Calendly (`calendly`)
87
+
88
+ **No module source available** (No directory named calendly or api-module-calendly). Nothing here is verified; the manifest is still a mock.
89
+
90
+ | Capability | Method | Status | Real signature | Note |
91
+ |---|---|---|---|---|
92
+ | `invitee.get` | `getInvitee` | unverified | | |
93
+ | `event.get` | `getScheduledEvent` | unverified | | |
94
+ | `event.list` | `listScheduledEvents` | unverified | | |
95
+ | `eventType.list` | `listEventTypes` | unverified | | |
96
+ | `webhook.create` | `createWebhookSubscription` | unverified | | |
97
+ | `webhook.delete` | `deleteWebhookSubscription` | unverified | | |
98
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
99
+
100
+ ## DocuSign eSignature (`docusign`)
101
+
102
+ **No module source available** (No directory named docusign or api-module-docusign). Nothing here is verified; the manifest is still a mock.
103
+
104
+ | Capability | Method | Status | Real signature | Note |
105
+ |---|---|---|---|---|
106
+ | `envelope.get` | `getEnvelope` | unverified | | |
107
+ | `envelope.list` | `listStatusChanges` | unverified | | |
108
+ | `document.combined` | `getCombinedDocument` | unverified | | |
109
+ | `connect.create` | `createConnectConfiguration` | unverified | | |
110
+ | `connect.delete` | `deleteConnectConfiguration` | unverified | | |
111
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
112
+
113
+ ## Fathom (`fathom`)
114
+
115
+ Checked against `~/api-module-library/packages/v1-ready/fathom` (@friggframework/api-module-fathom manifest 0.4.0).
116
+
117
+ | Capability | Method | Status | Real signature | Note |
118
+ |---|---|---|---|---|
119
+ | `meeting.list` | `listMeetings` | ok | `listMeetings(params = {})` | |
120
+ | `meeting.summary` | `getSummary` | ok | `getSummary(recordingId, params = {})` | (method was `getRecordingSummary`; called with one object; now positional) |
121
+ | `meeting.transcript` | `getTranscript` | ok | `getTranscript(recordingId, params = {})` | (method was `getRecordingTranscript`; called with one object; now positional) |
122
+ | `webhook.create` | `createWebhook` | ok | `createWebhook(data)` | |
123
+ | `webhook.delete` | `deleteWebhook` | unimplemented | none | Api has createWebhook but no deleteWebhook. |
124
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The fathom Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
125
+
126
+ ## GitHub (`github`)
127
+
128
+ **No module source available** (No directory named github or api-module-github). Nothing here is verified; the manifest is still a mock.
129
+
130
+ | Capability | Method | Status | Real signature | Note |
131
+ |---|---|---|---|---|
132
+ | `issue.get` | `getIssue` | unverified | | |
133
+ | `issue.list` | `listIssuesForRepo` | unverified | | |
134
+ | `issue.create` | `createIssue` | unverified | | |
135
+ | `issue.update` | `updateIssue` | unverified | | |
136
+ | `issue.comment` | `createIssueComment` | unverified | | |
137
+ | `repo.list` | `listInstallationRepos` | unverified | | |
138
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
139
+
140
+ ## HubSpot (`hubspot`)
141
+
142
+ Checked against `~/api-module-library/packages/v1-ready/hubspot` (@friggframework/api-module-hubspot manifest 1.4.0).
143
+
144
+ | Capability | Method | Status | Real signature | Note |
145
+ |---|---|---|---|---|
146
+ | `contact.get` | `getContactById` | ok | `getContactById(contactId)` | Api.getContactById(id) always requests the portal's full property list; a properties argument is not supported. (called with one object; now positional; inputs were id, properties) |
147
+ | `contact.search` | `searchContacts` | unimplemented | none | Api has no contact search (searchCompanies, searchDeals, searchCustomObjects and searchLists only). |
148
+ | `contact.list` | `listContacts` | ok | `listContacts(params)` | Api.listContacts({ after, limit, properties }) has no modified-since filter, so updatedSince is ignored and a poll re-lists every contact. |
149
+ | `contact.create` | `createContact` | ok | `createContact(body)` | (called with one object; now positional) |
150
+ | `contact.update` | `updateContact` | ok | `updateContact(contactId, properties)` | (called with one object; now positional) |
151
+ | `deal.get` | `getDealById` | ok | `getDealById(dealId)` | (called with one object; now positional) |
152
+ | `deal.listForContact` | `listDealsForContact` | unimplemented | none | Api has no per-contact deal listing; associations come from getBatchAssociations(from, to, inputs). |
153
+ | `deal.contacts` | `listContactsForDeal` | unimplemented | none | Api has no per-deal contact listing; associations come from getBatchAssociations(from, to, inputs). |
154
+ | `task.create` | `createTask` | unimplemented | none | Api has no engagement or task methods. |
155
+ | `call.create` | `createCallEngagement` | unimplemented | none | Api has no engagement or task methods. |
156
+ | `note.create` | `createNote` | unimplemented | none | Api has no engagement or task methods. |
157
+ | `owner.list` | `listOwners` | unimplemented | none | Api has getOwnerById only. |
158
+ | `pipeline.stages` | `listDealStages` | unimplemented | none | Api.getPipelineDetails(objType) returns every pipeline for an object type, not the stages of one pipeline. |
159
+ | `contact.upsertByEmail` | `upsertContactByEmail` | unimplemented | none | Api has no upsert and no contact search to build one from. |
160
+ | `deal.update` | `updateDeal` | unimplemented (a method of that name exists, unusable as the capability is shaped) | `updateDeal(params)` | Api.updateDeal({ dealId, properties }) reads this.URLs.getDealById, which is not defined (the table has dealById), so it throws before sending. Fixed in api-module-library (claude/shared-conversation-8hgmbr, 5961c9a); stays unimplemented here until a release carries it. |
161
+ | `deal.search` | `searchDeals` | unimplemented (a method of that name exists, unusable as the capability is shaped) | `searchDeals(params)` | Api.searchDeals takes HubSpot filterGroups, sorts, props, limit and after, not open/closeDate/amount filters. |
162
+ | `task.get` | `getTaskById` | unimplemented | none | Api has no engagement or task methods. |
163
+ | `task.update` | `updateTask` | unimplemented | none | Api has no engagement or task methods. |
164
+ | `task.search` | `searchTasks` | unimplemented | none | Api has no engagement or task methods. |
165
+ | `owner.get` | `getOwnerById` | ok | `getOwnerById(ownerId)` | (called with one object; now positional) |
166
+ | `owner.findByEmail` | `getOwnerByEmail` | unimplemented | none | Api has getOwnerById only. |
167
+ | `subscription.definitions` | `listSubscriptionDefinitions` | unimplemented | none | Api has no email subscription methods. |
168
+ | `subscription.unsubscribe` | `unsubscribeEmail` | unimplemented | none | Api has no email subscription methods. |
169
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The hubspot Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
170
+
171
+ ## Jira Cloud (`jira`)
172
+
173
+ **No module source available** (No directory named jira or api-module-jira). Nothing here is verified; the manifest is still a mock.
174
+
175
+ | Capability | Method | Status | Real signature | Note |
176
+ |---|---|---|---|---|
177
+ | `issue.create` | `createIssue` | unverified | | |
178
+ | `issue.get` | `getIssue` | unverified | | |
179
+ | `issue.update` | `editIssue` | unverified | | |
180
+ | `issue.addComment` | `addComment` | unverified | | |
181
+ | `issue.transition` | `transitionIssue` | unverified | | |
182
+ | `issue.search` | `searchJql` | unverified | | |
183
+ | `remoteLink.create` | `createRemoteLink` | unverified | | |
184
+ | `project.list` | `listProjects` | unverified | | |
185
+ | `issueType.list` | `listIssueTypes` | unverified | | |
186
+ | `webhook.register` | `registerDynamicWebhooks` | unverified | | |
187
+ | `webhook.refresh` | `refreshWebhooks` | unverified | | |
188
+ | `webhook.delete` | `deleteWebhooks` | unverified | | |
189
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
190
+
191
+ ## Klaviyo (`klaviyo`)
192
+
193
+ **No module source available** (No directory named klaviyo or api-module-klaviyo). Nothing here is verified; the manifest is still a mock.
194
+
195
+ | Capability | Method | Status | Real signature | Note |
196
+ |---|---|---|---|---|
197
+ | `profile.get` | `getProfile` | unverified | | |
198
+ | `profile.search` | `getProfiles` | unverified | | |
199
+ | `profile.list` | `listProfiles` | unverified | | |
200
+ | `profile.create` | `createProfile` | unverified | | |
201
+ | `profile.update` | `updateProfile` | unverified | | |
202
+ | `profile.upsert` | `createOrUpdateProfile` | unverified | | |
203
+ | `profile.lists` | `getProfileLists` | unverified | | |
204
+ | `profile.subscribe` | `subscribeProfiles` | unverified | | |
205
+ | `profile.unsubscribe` | `unsubscribeProfiles` | unverified | | |
206
+ | `list.list` | `getLists` | unverified | | |
207
+ | `list.addProfiles` | `addProfilesToList` | unverified | | |
208
+ | `event.create` | `createEvent` | unverified | | |
209
+ | `webhook.create` | `createWebhook` | unverified | | |
210
+ | `webhook.delete` | `deleteWebhook` | unverified | | |
211
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
212
+
213
+ ## Linear (`linear`)
214
+
215
+ Checked against `~/api-module-library/packages/v1-ready/linear` (@friggframework/api-module-linear manifest 1.1.0).
216
+
217
+ | Capability | Method | Status | Real signature | Note |
218
+ |---|---|---|---|---|
219
+ | `issue.get` | `issue` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
220
+ | `issue.byIdentifier` | `issueByIdentifier` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
221
+ | `issue.search` | `searchIssues` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
222
+ | `issue.create` | `issueCreate` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
223
+ | `issue.update` | `issueUpdate` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
224
+ | `comment.create` | `commentCreate` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
225
+ | `attachment.link` | `attachmentLinkURL` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
226
+ | `team.list` | `teams` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
227
+ | `workflowState.list` | `workflowStates` | unimplemented | none | Api exposes getClient() (a @linear/sdk LinearClient) plus getUsers, getProjects and getUserIssues; issues, comments, attachments, teams and workflow states are reached through the SDK client, not Api methods. |
228
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The linear Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
229
+
230
+ ## NetSuite (`netsuite`)
231
+
232
+ **No module source available** (No directory named netsuite or api-module-netsuite). Nothing here is verified; the manifest is still a mock.
233
+
234
+ | Capability | Method | Status | Real signature | Note |
235
+ |---|---|---|---|---|
236
+ | `customer.get` | `getCustomer` | unverified | | |
237
+ | `customer.search` | `searchCustomers` | unverified | | |
238
+ | `customer.list` | `listCustomers` | unverified | | |
239
+ | `customer.create` | `createCustomer` | unverified | | |
240
+ | `customer.update` | `updateCustomer` | unverified | | |
241
+ | `salesOrder.create` | `createSalesOrder` | unverified | | |
242
+ | `salesOrder.get` | `getSalesOrder` | unverified | | |
243
+ | `salesOrder.update` | `updateSalesOrder` | unverified | | |
244
+ | `salesOrder.search` | `searchSalesOrders` | unverified | | |
245
+ | `creditMemo.create` | `createCreditMemo` | unverified | | |
246
+ | `itemFulfillment.get` | `getItemFulfillment` | unverified | | |
247
+ | `itemFulfillment.list` | `listItemFulfillments` | unverified | | |
248
+ | `item.search` | `searchItems` | unverified | | |
249
+ | `subsidiary.list` | `listSubsidiaries` | unverified | | |
250
+ | `location.list` | `listLocations` | unverified | | |
251
+
252
+ ## Notion (`notion`)
253
+
254
+ **No module source available** (No directory named notion or api-module-notion). Nothing here is verified; the manifest is still a mock.
255
+
256
+ | Capability | Method | Status | Real signature | Note |
257
+ |---|---|---|---|---|
258
+ | `page.create` | `createPage` | unverified | | |
259
+ | `page.get` | `retrievePage` | unverified | | |
260
+ | `page.update` | `updatePage` | unverified | | |
261
+ | `block.append` | `appendBlockChildren` | unverified | | |
262
+ | `database.query` | `queryDatabase` | unverified | | |
263
+ | `database.list` | `searchDatabases` | unverified | | |
264
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
265
+
266
+ ## Pipedrive (`pipedrive`)
267
+
268
+ Checked against `~/phone-app/backend/node_modules/@friggframework/api-module-pipedrive` (@friggframework/api-module-pipedrive manifest 2.1.0).
269
+
270
+ | Capability | Method | Status | Real signature | Note |
271
+ |---|---|---|---|---|
272
+ | `person.get` | `getPerson` | ok | `getPerson(personId, params)` | (called with one object; now positional) |
273
+ | `person.search` | `searchPersons` | ok | `searchPersons(params)` | |
274
+ | `person.list` | `listPersons` | ok | `listPersons(params)` | |
275
+ | `person.create` | `addPerson` | unimplemented | none | Api has no addPerson (persons can be listed, fetched and searched only). |
276
+ | `person.update` | `updatePerson` | unimplemented | none | Api has no updatePerson. |
277
+ | `activity.create` | `createActivity` | ok | `createActivity(params)` | (method was `addActivity`; called with one object; now positional) |
278
+ | `activity.list` | `listActivities` | ok | `listActivities(params)` | |
279
+ | `deal.listForPerson` | `listDeals` | ok | `listDeals(params)` | (method was `listPersonDeals`; inputs were personId, status) |
280
+ | `user.list` | `listUsers` | ok | `listUsers()` | (method was `getUsers`) |
281
+ | `webhook.create` | `createWebhook` | ok | `createWebhook(params)` | (method was `addWebhook`) |
282
+ | `webhook.delete` | `deleteWebhook` | ok | `deleteWebhook(webhookId)` | (called with one object; now positional) |
283
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The pipedrive Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
284
+
285
+ ## QuickBooks Online (`quickbooks`)
286
+
287
+ **No module source available** (No directory named quickbooks or api-module-quickbooks). Nothing here is verified; the manifest is still a mock.
288
+
289
+ | Capability | Method | Status | Real signature | Note |
290
+ |---|---|---|---|---|
291
+ | `customer.get` | `getCustomer` | unverified | | |
292
+ | `customer.query` | `queryCustomers` | unverified | | |
293
+ | `customer.list` | `listCustomers` | unverified | | |
294
+ | `customer.create` | `createCustomer` | unverified | | |
295
+ | `customer.update` | `updateCustomer` | unverified | | |
296
+ | `salesReceipt.create` | `createSalesReceipt` | unverified | | |
297
+ | `refundReceipt.create` | `createRefundReceipt` | unverified | | |
298
+ | `invoice.create` | `createInvoice` | unverified | | |
299
+ | `invoice.get` | `getInvoice` | unverified | | |
300
+ | `invoice.send` | `sendInvoice` | unverified | | |
301
+ | `payment.get` | `getPayment` | unverified | | |
302
+ | `deposit.create` | `createDeposit` | unverified | | |
303
+ | `item.list` | `listItems` | unverified | | |
304
+ | `account.list` | `listAccounts` | unverified | | |
305
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
306
+
307
+ ## Phone (`phone`)
308
+
309
+ Checked against `~/phone-app/backend/src/api-modules/phone` (@acme/api-module-phone manifest 2.1.0).
310
+
311
+ | Capability | Method | Status | Real signature | Note |
312
+ |---|---|---|---|---|
313
+ | `contact.get` | `getContact` | ok | `getContact(id)` | (called with one object; now positional) |
314
+ | `contact.search` | `searchContacts` | unimplemented | none | Api has no contact search; listContacts filters by externalIds and sources only. |
315
+ | `contact.list` | `listContacts` | ok | `listContacts(params = {})` | |
316
+ | `contact.create` | `createContact` | ok | `createContact(data)` | |
317
+ | `contact.update` | `updateContact` | ok | `updateContact(id, data)` | (called with one object; now positional) |
318
+ | `call.list` | `listCalls` | ok | `listCalls(params = {})` | |
319
+ | `call.recording` | `getCallRecordings` | ok | `getCallRecordings(callId)` | (called with one object; now positional) |
320
+ | `message.send` | `sendMessage` | ok | `sendMessage(data)` | |
321
+ | `message.list` | `listMessages` | ok | `listMessages(params = {})` | |
322
+ | `phoneNumber.list` | `listPhoneNumbers` | ok | `listPhoneNumbers(params = {})` | |
323
+ | `user.list` | `listUsers` | ok | `listUsers(params = {})` | |
324
+ | `webhook.create` | `createUnifiedWebhook` | ok | `createUnifiedWebhook(data)` | (method was `createWebhook`) |
325
+ | `webhook.delete` | `deleteWebhook` | ok | `deleteWebhook(id)` | (called with one object; now positional) |
326
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The phone Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
327
+
328
+ ## Salesforce (`salesforce`)
329
+
330
+ Checked against `~/api-module-library/packages/v1-ready/salesforce` (@friggframework/api-module-salesforce manifest 3.0.2).
331
+
332
+ | Capability | Method | Status | Real signature | Note |
333
+ |---|---|---|---|---|
334
+ | `lead.get` | `get` | ok | `get(object, id)` | (method was `getLead`; called with one object; now positional) |
335
+ | `lead.create` | `create` | ok | `create(object, data)` | (method was `createLead`; called with one object; now positional) |
336
+ | `lead.update` | `updateLead` | unimplemented | none | Api.update(object, data) needs the record id inside data (data.Id); the capability passes the id separately, so there is no way to call it. |
337
+ | `person.searchByEmail` | `searchPeopleByEmail` | unimplemented | none | Api.find(object, filter) searches one sObject at a time; searching Lead and Contact together would need two calls. |
338
+ | `event.create` | `create` | ok | `create(object, data)` | (method was `createEvent`; called with one object; now positional) |
339
+ | `event.update` | `updateEvent` | unimplemented | none | Api.update(object, data) needs the record id inside data (data.Id); the capability passes the id separately, so there is no way to call it. |
340
+ | `opportunity.get` | `get` | ok | `get(object, id)` | (method was `getOpportunity`; called with one object; now positional) |
341
+ | `opportunity.update` | `updateOpportunity` | unimplemented | none | Api.update(object, data) needs the record id inside data (data.Id); the capability passes the id separately, so there is no way to call it. |
342
+ | `task.create` | `create` | ok | `create(object, data)` | (method was `createTask`; called with one object; now positional) |
343
+ | `file.attach` | `createContentVersion` | unimplemented | none | Api has the generic create(object, data) only; ContentVersion field names differ from this capability's inputs. |
344
+ | `note.create` | `createContentNote` | unimplemented | none | Api has the generic create(object, data) only; ContentNote field names differ from this capability's inputs. |
345
+ | `user.list` | `listUsers` | unimplemented | none | Api has find(object, filter) but no user listing with an activeOnly filter. |
346
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The salesforce Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
347
+
348
+ ## Shopify (`shopify`)
349
+
350
+ **No module source available** (No directory named shopify or api-module-shopify). Nothing here is verified; the manifest is still a mock.
351
+
352
+ | Capability | Method | Status | Real signature | Note |
353
+ |---|---|---|---|---|
354
+ | `order.get` | `getOrder` | unverified | | |
355
+ | `order.list` | `listOrders` | unverified | | |
356
+ | `order.update` | `updateOrder` | unverified | | |
357
+ | `order.fulfillmentOrders` | `listFulfillmentOrders` | unverified | | |
358
+ | `fulfillment.create` | `createFulfillment` | unverified | | |
359
+ | `customer.get` | `getCustomer` | unverified | | |
360
+ | `customer.list` | `listCustomers` | unverified | | |
361
+ | `customer.search` | `searchCustomers` | unverified | | |
362
+ | `customer.create` | `createCustomer` | unverified | | |
363
+ | `customer.update` | `updateCustomer` | unverified | | |
364
+ | `checkout.list` | `listAbandonedCheckouts` | unverified | | |
365
+ | `variant.byInventoryItem` | `getVariantByInventoryItemId` | unverified | | |
366
+ | `location.list` | `listLocations` | unverified | | |
367
+ | `webhook.create` | `createWebhook` | unverified | | |
368
+ | `webhook.delete` | `deleteWebhook` | unverified | | |
369
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
370
+
371
+ ## Slack (`slack`)
372
+
373
+ Checked against `~/api-module-library/packages/needs-updating/slack` (@friggframework/api-module-slack manifest 2.0.0).
374
+
375
+ | Capability | Method | Status | Real signature | Note |
376
+ |---|---|---|---|---|
377
+ | `message.post` | `postMessage` | ok | `postMessage(body)` | |
378
+ | `message.update` | `updateMessage` | ok | `updateMessage(body)` | |
379
+ | `message.postEphemeral` | `postEphemeral` | ok | `postEphemeral(body)` | |
380
+ | `message.permalink` | `getMessagePermalink` | ok | `getMessagePermalink(query)` | (method was `getPermalink`) |
381
+ | `channel.list` | `listChannels` | ok | `listChannels(query)` | (method was `listConversations`) |
382
+ | `user.list` | `listUsers` | unimplemented | none | Api has lookupUserByEmail, getUserById and getUserProfileById, but no user listing. |
383
+ | `user.lookupByEmail` | `lookupUserByEmail` | ok | `lookupUserByEmail(email)` | (called with one object; now positional) |
384
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The slack Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
385
+
386
+ ## Stripe (`stripe`)
387
+
388
+ Checked against `~/api-module-library/packages/v1-ready/stripe` (@friggframework/api-module-stripe manifest 2.3.0).
389
+
390
+ | Capability | Method | Status | Real signature | Note |
391
+ |---|---|---|---|---|
392
+ | `customer.get` | `retrieveCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
393
+ | `customer.list` | `listCustomers` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
394
+ | `customer.search` | `searchCustomers` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
395
+ | `customer.create` | `createCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
396
+ | `customer.update` | `updateCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
397
+ | `paymentIntent.get` | `retrievePaymentIntent` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
398
+ | `refund.get` | `retrieveRefund` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
399
+ | `payout.list` | `listPayouts` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
400
+ | `balanceTransaction.list` | `getBalanceTransactions` | ok | `getBalanceTransactions(params)` | (method was `listBalanceTransactions`) |
401
+ | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | The stripe Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one. |
402
+
403
+ ## Acme ERP (`acmeerp`)
404
+
405
+ **No module source available** (No directory named acmeerp or api-module-acmeerp). Nothing here is verified; the manifest is still a mock.
406
+
407
+ | Capability | Method | Status | Real signature | Note |
408
+ |---|---|---|---|---|
409
+ | `customer.get` | `getCustomer` | unverified | | |
410
+ | `customer.list` | `listCustomers` | unverified | | |
411
+ | `customer.create` | `createCustomer` | unverified | | |
412
+ | `customer.update` | `updateCustomer` | unverified | | |
413
+ | `job.get` | `getJob` | unverified | | |
414
+ | `job.search` | `searchJobs` | unverified | | |
415
+ | `job.lineItems` | `listJobLineItems` | unverified | | |
416
+ | `job.update` | `updateJob` | unverified | | |
417
+ | `job.markPaid` | `recordJobPayment` | unverified | | |
418
+ | `job.addNote` | `createJobNote` | unverified | | |
419
+ | `technician.list` | `listTechnicians` | unverified | | |
420
+ | `webhook.create` | `createWebhookSubscription` | unverified | | |
421
+ | `webhook.delete` | `deleteWebhookSubscription` | unverified | | |
422
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
423
+
424
+ ## Webflow (`webflow`)
425
+
426
+ **No module source available** (No directory named webflow or api-module-webflow). Nothing here is verified; the manifest is still a mock.
427
+
428
+ | Capability | Method | Status | Real signature | Note |
429
+ |---|---|---|---|---|
430
+ | `site.list` | `listSites` | unverified | | |
431
+ | `form.list` | `listForms` | unverified | | |
432
+ | `form.submissions` | `listFormSubmissions` | unverified | | |
433
+ | `webhook.create` | `createWebhook` | unverified | | |
434
+ | `webhook.delete` | `deleteWebhook` | unverified | | |
435
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
436
+
437
+ ## Zendesk Support (`zendesk`)
438
+
439
+ **No module source available** (No directory named zendesk or api-module-zendesk). Nothing here is verified; the manifest is still a mock.
440
+
441
+ | Capability | Method | Status | Real signature | Note |
442
+ |---|---|---|---|---|
443
+ | `ticket.get` | `showTicket` | unverified | | |
444
+ | `ticket.update` | `updateTicket` | unverified | | |
445
+ | `ticket.addComment` | `addTicketComment` | unverified | | |
446
+ | `ticket.search` | `searchTickets` | unverified | | |
447
+ | `user.get` | `showUser` | unverified | | |
448
+ | `group.list` | `listGroups` | unverified | | |
449
+ | `webhook.create` | `createWebhook` | unverified | | |
450
+ | `webhook.delete` | `deleteWebhook` | unverified | | |
451
+ | `webhook.verify` | `verifyWebhookSignature` | unverified | | |
@@ -151,22 +151,25 @@
151
151
  "headers": {
152
152
  "X-Hook-Secret": "$.headers.x-hook-secret"
153
153
  }
154
- }
154
+ },
155
+ "status": "unimplemented",
156
+ "note": "The asana Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one."
155
157
  },
156
158
  "capabilities": {
157
159
  "task.get": {
158
160
  "kind": "read",
159
- "method": "getTask",
161
+ "method": "getTaskById",
160
162
  "input": {
161
163
  "taskGid": {
162
164
  "type": "string",
163
165
  "required": true
164
- },
165
- "opt_fields": {
166
- "type": "string"
167
166
  }
168
167
  },
169
- "output": "task"
168
+ "output": "task",
169
+ "args": [
170
+ "taskGid"
171
+ ],
172
+ "note": "Api.getTaskById(id) takes only the id; field selection (opt_fields) is not supported."
170
173
  },
171
174
  "task.search": {
172
175
  "kind": "search",
@@ -192,13 +195,15 @@
192
195
  "type": "number"
193
196
  }
194
197
  },
195
- "output": "task[]"
198
+ "output": "task[]",
199
+ "status": "unimplemented",
200
+ "note": "Api.listTasks({ workspaceId, assigneeId }) filters by workspace and assignee only; due_on, completed, projects_any and limit have no equivalent."
196
201
  },
197
202
  "project.list": {
198
203
  "kind": "read",
199
- "method": "getProjects",
204
+ "method": "listProjects",
200
205
  "input": {
201
- "workspaceGid": {
206
+ "workspace": {
202
207
  "type": "string",
203
208
  "required": true
204
209
  },
@@ -210,7 +215,7 @@
210
215
  },
211
216
  "workspace.list": {
212
217
  "kind": "read",
213
- "method": "getWorkspaces",
218
+ "method": "listWorkspaces",
214
219
  "input": {},
215
220
  "output": "workspace[]"
216
221
  },
@@ -230,7 +235,9 @@
230
235
  "type": "array"
231
236
  }
232
237
  },
233
- "output": "webhook"
238
+ "output": "webhook",
239
+ "status": "unimplemented",
240
+ "note": "Api has no webhook methods."
234
241
  },
235
242
  "webhook.delete": {
236
243
  "kind": "delete",
@@ -241,7 +248,9 @@
241
248
  "required": true
242
249
  }
243
250
  },
244
- "output": "void"
251
+ "output": "void",
252
+ "status": "unimplemented",
253
+ "note": "Api has no webhook methods."
245
254
  }
246
255
  },
247
256
  "options": {
@@ -255,7 +264,7 @@
255
264
  "label": "{{item.name}}",
256
265
  "value": "$.item.gid",
257
266
  "inputs": {
258
- "workspaceGid": {
267
+ "workspace": {
259
268
  "type": "string",
260
269
  "required": true
261
270
  }
@@ -142,7 +142,9 @@
142
142
  "scope": "installation",
143
143
  "topic": "meeting.ready",
144
144
  "eventId": "{{body.recording_id}}",
145
- "verify": "verifyWebhookSignature"
145
+ "verify": "verifyWebhookSignature",
146
+ "status": "unimplemented",
147
+ "note": "The fathom Api has no verifyWebhookSignature method; webhook signatures cannot be checked until the module adds one."
146
148
  },
147
149
  "capabilities": {
148
150
  "meeting.list": {
@@ -169,25 +171,31 @@
169
171
  },
170
172
  "meeting.summary": {
171
173
  "kind": "read",
172
- "method": "getRecordingSummary",
174
+ "method": "getSummary",
173
175
  "input": {
174
176
  "recordingId": {
175
177
  "type": "string",
176
178
  "required": true
177
179
  }
178
180
  },
179
- "output": "summary"
181
+ "output": "summary",
182
+ "args": [
183
+ "recordingId"
184
+ ]
180
185
  },
181
186
  "meeting.transcript": {
182
187
  "kind": "read",
183
- "method": "getRecordingTranscript",
188
+ "method": "getTranscript",
184
189
  "input": {
185
190
  "recordingId": {
186
191
  "type": "string",
187
192
  "required": true
188
193
  }
189
194
  },
190
- "output": "transcript"
195
+ "output": "transcript",
196
+ "args": [
197
+ "recordingId"
198
+ ]
191
199
  },
192
200
  "webhook.create": {
193
201
  "kind": "subscribe",
@@ -222,7 +230,9 @@
222
230
  "required": true
223
231
  }
224
232
  },
225
- "output": "void"
233
+ "output": "void",
234
+ "status": "unimplemented",
235
+ "note": "Api has createWebhook but no deleteWebhook."
226
236
  }
227
237
  }
228
238
  }