@friggframework/core 2.0.0--canary.699.0d57ee8.0 → 2.0.0--canary.700.80ec1cc.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.
@@ -4,16 +4,45 @@ Audit of every `*.capabilities.json` in this directory against the Api class it
4
4
  began as bundled mocks; for each module whose source could be found, every `method` was checked to exist on the real
5
5
  Api class and every call shape was read against the method's real signature.
6
6
 
7
- Re-run it (no network, nothing instantiated):
7
+ Re-run it (no network, nothing instantiated). **One run per module, with that module's checkout first**: the
8
+ api-module-library branches that carry the new methods are separate worktrees, and every worktree also holds an older copy
9
+ of the other modules, so a single run with several roots lets the first root's stale copy of (say) `stripe` win. The
10
+ roots below are the specific module directories, so nothing else can match:
8
11
 
9
12
  ```bash
10
- node packages/core/integrations/definitions/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
+ M=packages/core/integrations/definitions/scripts/check-manifests.js
14
+ node $M --stub-missing ~/aml-hubspot/packages/v1-ready/hubspot # hubspot (PR #106)
15
+ node $M --stub-missing ~/aml-salesforce/packages/v1-ready/salesforce # salesforce (PR #107)
16
+ node $M --stub-missing ~/aml-stripe/packages/v1-ready/stripe # stripe (PR #108)
17
+ node $M --stub-missing ~/aml-linear/packages/v1-ready/linear # linear (PR #109)
18
+ node $M --stub-missing ~/aml-small/packages/v1-ready # asana, fathom (PR #110)
19
+ node $M --stub-missing ~/aml-small/packages/needs-updating # slack (PR #110)
20
+ node $M --stub-missing <built pipedrive> # pipedrive (PR #110): src/api.ts has no dist, so
21
+ # compile it first (tsc --outDir dist --noCheck)
22
+ node $M --stub-missing ~/phone-app/backend/src/api-modules # phone (the app's own module)
13
23
  ```
14
24
 
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.)
25
+ Each run reports every manifest, so read only the line for the module you are checking (the others resolve to nothing or
26
+ to an older copy). Run from the repo root: loading an Api pulls in `@friggframework/core`, which reads `package.json`
27
+ from the working directory. (`--stub-missing` stands in for dependencies that are not installed here, such as jsforce,
28
+ stripe and @linear/sdk, so the Api's methods can be read.)
29
+
30
+ ## Methods that landed after this audit
31
+
32
+ The capabilities this file first marked unimplemented for hubspot, salesforce, stripe, linear, asana, pipedrive, fathom
33
+ and slack now have methods, on unmerged api-module-library branches: **#106 (hubspot), #107 (salesforce), #108 (stripe),
34
+ #109 (linear), #110 (asana, pipedrive, fathom, slack)**, stacked on #105. The manifests describe those methods, so **a
35
+ definition that uses them needs the module releases that carry those PRs**; against an older release the call fails at
36
+ runtime with "not a function". Exceptions that stay unimplemented: Salesforce's signed webhook (it has none: CDC arrives
37
+ over the Pub/Sub stream and Outbound Messages are unsigned), and Phone's `contact.search`, which is not part of that work.
38
+ Two shape notes:
39
+
40
+ - HubSpot `deal.search` was reshaped to the real `searchDeals({ filterGroups, sorts, props, limit, after, allProps })`;
41
+ the old open/closeDateBefore/closeDateAfter/minAmount inputs never existed in the Api and are now `filterGroups`
42
+ filters (`hs_is_closed`, `closedate`, `amount`). The Api returns HubSpot's `{ results, paging }` page, not a bare array,
43
+ so a step that indexes the result as a list (`$.steps.deals[0]`) reads the page object: the `hubspot-slack` example still
44
+ does and is a mock-era shape to revisit.
45
+ - HubSpot `deal.update` is `updateDeal({ dealId, properties })`: one object, so the input is now `dealId` (it was `id`).
17
46
 
18
47
  ## How to read this
19
48
 
@@ -37,24 +66,24 @@ the Api's methods can be read. Roots are searched in order and the first module
37
66
 
38
67
  | Module | Source checked | Capabilities | Renamed method | Call shape fixed | Inputs changed | Unimplemented upstream |
39
68
  |---|---|---|---|---|---|---|
40
- | asana | ~/api-module-library/packages/v1-ready/asana | 6 | 3 | 1 | 2 | 3 |
69
+ | asana | ~/api-module-library/packages/v1-ready/asana | 6 | 3 | 1 | 2 | 0 |
41
70
  | calendly | none found | 6 | - | - | - | - |
42
71
  | docusign | none found | 5 | - | - | - | - |
43
- | fathom | ~/api-module-library/packages/v1-ready/fathom | 5 | 2 | 2 | 0 | 1 |
72
+ | fathom | ~/api-module-library/packages/v1-ready/fathom | 5 | 2 | 2 | 0 | 0 |
44
73
  | github | none found | 6 | - | - | - | - |
45
- | hubspot | ~/api-module-library/packages/v1-ready/hubspot | 23 | 0 | 5 | 1 | 17 |
74
+ | hubspot | ~/api-module-library/packages/v1-ready/hubspot | 23 | 0 | 5 | 1 | 0 |
46
75
  | jira | none found | 12 | - | - | - | - |
47
76
  | klaviyo | none found | 14 | - | - | - | - |
48
- | linear | ~/api-module-library/packages/v1-ready/linear | 9 | 0 | 0 | 0 | 9 |
77
+ | linear | ~/api-module-library/packages/v1-ready/linear | 9 | 0 | 0 | 0 | 0 |
49
78
  | netsuite | none found | 15 | - | - | - | - |
50
79
  | notion | none found | 6 | - | - | - | - |
51
- | pipedrive | ~/phone-app/backend/node_modules/@friggframework/api-module-pipedrive | 11 | 4 | 3 | 1 | 2 |
80
+ | pipedrive | ~/aml-small/packages/v1-ready/pipedrive (compiled src/api.ts) | 11 | 4 | 3 | 1 | 0 |
52
81
  | quickbooks | none found | 14 | - | - | - | - |
53
82
  | phone | ~/phone-app/backend/src/api-modules/phone | 13 | 1 | 4 | 0 | 1 |
54
- | salesforce | ~/api-module-library/packages/v1-ready/salesforce | 12 | 5 | 5 | 0 | 7 |
83
+ | salesforce | ~/api-module-library/packages/v1-ready/salesforce | 12 | 5 | 5 | 0 | 0 (webhook signing aside) |
55
84
  | shopify | none found | 15 | - | - | - | - |
56
- | slack | ~/api-module-library/packages/needs-updating/slack | 7 | 2 | 1 | 0 | 1 |
57
- | stripe | ~/api-module-library/packages/v1-ready/stripe | 9 | 1 | 0 | 0 | 8 |
85
+ | slack | ~/api-module-library/packages/needs-updating/slack | 7 | 2 | 1 | 0 | 0 |
86
+ | stripe | ~/api-module-library/packages/v1-ready/stripe | 9 | 1 | 0 | 0 | 0 |
58
87
  | acmeerp | none found | 13 | - | - | - | - |
59
88
  | webflow | none found | 5 | - | - | - | - |
60
89
  | zendesk | none found | 8 | - | - | - | - |
@@ -64,8 +93,7 @@ nothing in them is known to exist.
64
93
 
65
94
  Where a module has two candidates the first root given wins. Phone is checked against the deployed
66
95
  `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
67
- instead of one webhook method. Pipedrive is checked against the built `@friggframework/api-module-pipedrive`
68
- 2.1.0-next.7 (the library copy is TypeScript source with no `dist`).
96
+ instead of one webhook method. Pipedrive is checked against the compiled TypeScript source of the api-module-library branch (the library copy has no `dist`).
69
97
 
70
98
  Manifest versions in the files (for example HubSpot 1.4.0, Asana 1.5.1) are ahead of the module sources audited (HubSpot
71
99
  1.1.7, Asana 1.1.5): the manifests describe modules that were never released as written.
@@ -77,11 +105,11 @@ Checked against `~/api-module-library/packages/v1-ready/asana` (@friggframework/
77
105
  | Capability | Method | Status | Real signature | Note |
78
106
  |---|---|---|---|---|
79
107
  | `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) |
80
- | `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. |
108
+ | `task.search` | `searchTasksInWorkspace` | ok (unreleased) | `searchTasksInWorkspace(workspaceId, params = {})` | Implemented in api-module-library #110; needs the release that includes it. |
81
109
  | `project.list` | `listProjects` | ok | `listProjects(params)` | (method was `getProjects`; inputs were workspaceGid, archived) |
82
110
  | `workspace.list` | `listWorkspaces` | ok | `listWorkspaces()` | (method was `getWorkspaces`) |
83
- | `webhook.create` | `createWebhook` | unimplemented | none | Api has no webhook methods. |
84
- | `webhook.delete` | `deleteWebhook` | unimplemented | none | Api has no webhook methods. |
111
+ | `webhook.create` | `createWebhook` | ok (unreleased) | `createWebhook(resource, target, filters)` | Implemented in api-module-library #110; needs the release that includes it. |
112
+ | `webhook.delete` | `deleteWebhook` | ok (unreleased) | `deleteWebhook(webhookGid)` | Implemented in api-module-library #110; needs the release that includes it. |
85
113
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
86
114
 
87
115
  ## Calendly (`calendly`)
@@ -121,7 +149,7 @@ Checked against `~/api-module-library/packages/v1-ready/fathom` (@friggframework
121
149
  | `meeting.summary` | `getSummary` | ok | `getSummary(recordingId, params = {})` | (method was `getRecordingSummary`; called with one object; now positional) |
122
150
  | `meeting.transcript` | `getTranscript` | ok | `getTranscript(recordingId, params = {})` | (method was `getRecordingTranscript`; called with one object; now positional) |
123
151
  | `webhook.create` | `createWebhook` | ok | `createWebhook(data)` | |
124
- | `webhook.delete` | `deleteWebhook` | unimplemented | none | Api has createWebhook but no deleteWebhook. |
152
+ | `webhook.delete` | `deleteWebhook` | ok (unreleased) | `deleteWebhook(id)` | Implemented in api-module-library #110; needs the release that includes it. |
125
153
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
126
154
 
127
155
  ## GitHub (`github`)
@@ -145,28 +173,28 @@ Checked against `~/api-module-library/packages/v1-ready/hubspot` (@friggframewor
145
173
  | Capability | Method | Status | Real signature | Note |
146
174
  |---|---|---|---|---|
147
175
  | `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) |
148
- | `contact.search` | `searchContacts` | unimplemented | none | Api has no contact search (searchCompanies, searchDeals, searchCustomObjects and searchLists only). |
176
+ | `contact.search` | `searchContacts` | ok (unreleased) | `searchContacts(params = {})` | Implemented in api-module-library #106; needs the release that includes it. |
149
177
  | `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. |
150
178
  | `contact.create` | `createContact` | ok | `createContact(body)` | (called with one object; now positional) |
151
179
  | `contact.update` | `updateContact` | ok | `updateContact(contactId, properties)` | (called with one object; now positional) |
152
180
  | `deal.get` | `getDealById` | ok | `getDealById(dealId)` | (called with one object; now positional) |
153
- | `deal.listForContact` | `listDealsForContact` | unimplemented | none | Api has no per-contact deal listing; associations come from getBatchAssociations(from, to, inputs). |
154
- | `deal.contacts` | `listContactsForDeal` | unimplemented | none | Api has no per-deal contact listing; associations come from getBatchAssociations(from, to, inputs). |
155
- | `task.create` | `createTask` | unimplemented | none | Api has no engagement or task methods. |
156
- | `call.create` | `createCallEngagement` | unimplemented | none | Api has no engagement or task methods. |
157
- | `note.create` | `createNote` | unimplemented | none | Api has no engagement or task methods. |
158
- | `owner.list` | `listOwners` | unimplemented | none | Api has getOwnerById only. |
159
- | `pipeline.stages` | `listDealStages` | unimplemented | none | Api.getPipelineDetails(objType) returns every pipeline for an object type, not the stages of one pipeline. |
160
- | `contact.upsertByEmail` | `upsertContactByEmail` | unimplemented | none | Api has no upsert and no contact search to build one from. |
161
- | `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. |
162
- | `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. |
163
- | `task.get` | `getTaskById` | unimplemented | none | Api has no engagement or task methods. |
164
- | `task.update` | `updateTask` | unimplemented | none | Api has no engagement or task methods. |
165
- | `task.search` | `searchTasks` | unimplemented | none | Api has no engagement or task methods. |
181
+ | `deal.listForContact` | `listDealsForContact` | ok (unreleased) | `listDealsForContact(contactId, open)` | Implemented in api-module-library #106; needs the release that includes it. |
182
+ | `deal.contacts` | `listContactsForDeal` | ok (unreleased) | `listContactsForDeal(dealId)` | Implemented in api-module-library #106; needs the release that includes it. |
183
+ | `task.create` | `createTask` | ok (unreleased) | `createTask(properties, contactId)` | Implemented in api-module-library #106; needs the release that includes it. |
184
+ | `call.create` | `createCallEngagement` | ok (unreleased) | `createCallEngagement(properties, contactId)` | Implemented in api-module-library #106; needs the release that includes it. |
185
+ | `note.create` | `createNote` | ok (unreleased) | `createNote(properties, contactId, dealId)` | Implemented in api-module-library #106; needs the release that includes it. |
186
+ | `owner.list` | `listOwners` | ok (unreleased) | `listOwners()` | Implemented in api-module-library #106; needs the release that includes it. |
187
+ | `pipeline.stages` | `listDealStages` | ok (unreleased) | `listDealStages(pipelineId)` | Implemented in api-module-library #106; needs the release that includes it. |
188
+ | `contact.upsertByEmail` | `upsertContactByEmail` | ok (unreleased) | `upsertContactByEmail(email, properties)` | Implemented in api-module-library #106; needs the release that includes it. |
189
+ | `deal.update` | `updateDeal` | ok (unreleased) | `updateDeal(params)` | Api.updateDeal({ dealId, properties }) takes one object, so the input is dealId (it was id). Implemented in api-module-library #106; needs the release that includes it. |
190
+ | `deal.search` | `searchDeals` | ok (unreleased) | `searchDeals(params)` | Api.searchDeals takes HubSpot filterGroups ([{ filters: [{ propertyName, operator, value }] }]), sorts, props, limit, after and allProps (default true: every deal property when props is empty). The capability was reshaped from open/closeDateBefore/closeDateAfter/minAmount, which the Api never had; a definition expresses those as filterGroups. Implemented in api-module-library #106; needs the release that includes it. |
191
+ | `task.get` | `getTaskById` | ok (unreleased) | `getTaskById(id, properties)` | Implemented in api-module-library #106; needs the release that includes it. |
192
+ | `task.update` | `updateTask` | ok (unreleased) | `updateTask(id, properties)` | Implemented in api-module-library #106; needs the release that includes it. |
193
+ | `task.search` | `searchTasks` | ok (unreleased) | `searchTasks(params = {})` | Implemented in api-module-library #106; needs the release that includes it. |
166
194
  | `owner.get` | `getOwnerById` | ok | `getOwnerById(ownerId)` | (called with one object; now positional) |
167
- | `owner.findByEmail` | `getOwnerByEmail` | unimplemented | none | Api has getOwnerById only. |
168
- | `subscription.definitions` | `listSubscriptionDefinitions` | unimplemented | none | Api has no email subscription methods. |
169
- | `subscription.unsubscribe` | `unsubscribeEmail` | unimplemented | none | Api has no email subscription methods. |
195
+ | `owner.findByEmail` | `getOwnerByEmail` | ok (unreleased) | `getOwnerByEmail(email)` | Implemented in api-module-library #106; needs the release that includes it. |
196
+ | `subscription.definitions` | `listSubscriptionDefinitions` | ok (unreleased) | `listSubscriptionDefinitions()` | Implemented in api-module-library #106; needs the release that includes it. |
197
+ | `subscription.unsubscribe` | `unsubscribeEmail` | ok (unreleased) | `unsubscribeEmail(emailAddress, subscriptionId, legalBasis, legalBasisExplanation)` | Implemented in api-module-library #106; needs the release that includes it. |
170
198
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
171
199
 
172
200
  ## Jira Cloud (`jira`)
@@ -217,15 +245,15 @@ Checked against `~/api-module-library/packages/v1-ready/linear` (@friggframework
217
245
 
218
246
  | Capability | Method | Status | Real signature | Note |
219
247
  |---|---|---|---|---|
220
- | `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. |
221
- | `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. |
222
- | `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. |
223
- | `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. |
224
- | `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. |
225
- | `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. |
226
- | `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. |
227
- | `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. |
228
- | `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. |
248
+ | `issue.get` | `issue` | ok (unreleased) | `issue(id)` | Implemented in api-module-library #109; needs the release that includes it. |
249
+ | `issue.byIdentifier` | `issueByIdentifier` | ok (unreleased) | `issueByIdentifier(identifier)` | Implemented in api-module-library #109; needs the release that includes it. |
250
+ | `issue.search` | `searchIssues` | ok (unreleased) | `searchIssues(teamId, stateType, updatedBefore, first)` | Implemented in api-module-library #109; needs the release that includes it. |
251
+ | `issue.create` | `issueCreate` | ok (unreleased) | `issueCreate(teamId, title, description, priority, stateName, labelIds)` | Implemented in api-module-library #109; needs the release that includes it. |
252
+ | `issue.update` | `issueUpdate` | ok (unreleased) | `issueUpdate(id, input)` | Implemented in api-module-library #109; needs the release that includes it. |
253
+ | `comment.create` | `commentCreate` | ok (unreleased) | `commentCreate(issueId, body)` | Implemented in api-module-library #109; needs the release that includes it. |
254
+ | `attachment.link` | `attachmentLinkURL` | ok (unreleased) | `attachmentLinkURL(issueId, url, title)` | Implemented in api-module-library #109; needs the release that includes it. |
255
+ | `team.list` | `teams` | ok (unreleased) | `teams()` | Implemented in api-module-library #109; needs the release that includes it. |
256
+ | `workflowState.list` | `workflowStates` | ok (unreleased) | `workflowStates(teamId, name)` | Implemented in api-module-library #109; needs the release that includes it. |
229
257
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
230
258
 
231
259
  ## NetSuite (`netsuite`)
@@ -266,15 +294,15 @@ Checked against `~/api-module-library/packages/v1-ready/linear` (@friggframework
266
294
 
267
295
  ## Pipedrive (`pipedrive`)
268
296
 
269
- Checked against `~/phone-app/backend/node_modules/@friggframework/api-module-pipedrive` (@friggframework/api-module-pipedrive manifest 2.1.0).
297
+ Checked against the api-module-library branch source `~/aml-small/packages/v1-ready/pipedrive` (src/api.ts, compiled; PR #110), manifest 2.1.0. The built 2.1.0 in `~/phone-app/backend/node_modules/@friggframework` predates `addPerson`/`updatePerson`.
270
298
 
271
299
  | Capability | Method | Status | Real signature | Note |
272
300
  |---|---|---|---|---|
273
301
  | `person.get` | `getPerson` | ok | `getPerson(personId, params)` | (called with one object; now positional) |
274
302
  | `person.search` | `searchPersons` | ok | `searchPersons(params)` | |
275
303
  | `person.list` | `listPersons` | ok | `listPersons(params)` | |
276
- | `person.create` | `addPerson` | unimplemented | none | Api has no addPerson (persons can be listed, fetched and searched only). |
277
- | `person.update` | `updatePerson` | unimplemented | none | Api has no updatePerson. |
304
+ | `person.create` | `addPerson` | ok (unreleased) | `addPerson(person)` | Implemented in api-module-library #110; needs the release that includes it. |
305
+ | `person.update` | `updatePerson` | ok (unreleased) | `updatePerson(personId, person)` | Implemented in api-module-library #110; needs the release that includes it. |
278
306
  | `activity.create` | `createActivity` | ok | `createActivity(params)` | (method was `addActivity`; called with one object; now positional) |
279
307
  | `activity.list` | `listActivities` | ok | `listActivities(params)` | |
280
308
  | `deal.listForPerson` | `listDeals` | ok | `listDeals(params)` | (method was `listPersonDeals`; inputs were personId, status) |
@@ -334,16 +362,16 @@ Checked against `~/api-module-library/packages/v1-ready/salesforce` (@friggframe
334
362
  |---|---|---|---|---|
335
363
  | `lead.get` | `get` | ok | `get(object, id)` | (method was `getLead`; called with one object; now positional) |
336
364
  | `lead.create` | `create` | ok | `create(object, data)` | (method was `createLead`; called with one object; now positional) |
337
- | `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. |
338
- | `person.searchByEmail` | `searchPeopleByEmail` | unimplemented | none | Api.find(object, filter) searches one sObject at a time; searching Lead and Contact together would need two calls. |
365
+ | `lead.update` | `updateLead` | ok (unreleased) | `updateLead(id, fields)` | Implemented in api-module-library #107; needs the release that includes it. |
366
+ | `person.searchByEmail` | `searchPeopleByEmail` | ok (unreleased) | `searchPeopleByEmail(email)` | Implemented in api-module-library #107; needs the release that includes it. |
339
367
  | `event.create` | `create` | ok | `create(object, data)` | (method was `createEvent`; called with one object; now positional) |
340
- | `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. |
368
+ | `event.update` | `updateEvent` | ok (unreleased) | `updateEvent(id, fields)` | Implemented in api-module-library #107; needs the release that includes it. |
341
369
  | `opportunity.get` | `get` | ok | `get(object, id)` | (method was `getOpportunity`; called with one object; now positional) |
342
- | `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. |
370
+ | `opportunity.update` | `updateOpportunity` | ok (unreleased) | `updateOpportunity(id, fields)` | Implemented in api-module-library #107; needs the release that includes it. |
343
371
  | `task.create` | `create` | ok | `create(object, data)` | (method was `createTask`; called with one object; now positional) |
344
- | `file.attach` | `createContentVersion` | unimplemented | none | Api has the generic create(object, data) only; ContentVersion field names differ from this capability's inputs. |
345
- | `note.create` | `createContentNote` | unimplemented | none | Api has the generic create(object, data) only; ContentNote field names differ from this capability's inputs. |
346
- | `user.list` | `listUsers` | unimplemented | none | Api has find(object, filter) but no user listing with an activeOnly filter. |
372
+ | `file.attach` | `createContentVersion` | ok (unreleased) | `createContentVersion(title, pathOnClient, versionData, firstPublishLocationId)` | Implemented in api-module-library #107; needs the release that includes it. |
373
+ | `note.create` | `createContentNote` | ok (unreleased) | `createContentNote(title, content, linkedEntityId)` | Implemented in api-module-library #107; needs the release that includes it. |
374
+ | `user.list` | `listUsers` | ok (unreleased) | `listUsers(activeOnly = false)` | Implemented in api-module-library #107; needs the release that includes it. |
347
375
  | `webhook.verify` | `verifyWebhookSignature` | unimplemented | | Not a webhook: CDC arrives over the Pub/Sub or CometD stream; Outbound Messages are unsigned (OrganizationId + IP allowlist). Deliveries are rejected. |
348
376
 
349
377
  ## Shopify (`shopify`)
@@ -380,7 +408,7 @@ Checked against `~/api-module-library/packages/needs-updating/slack` (@friggfram
380
408
  | `message.postEphemeral` | `postEphemeral` | ok | `postEphemeral(body)` | |
381
409
  | `message.permalink` | `getMessagePermalink` | ok | `getMessagePermalink(query)` | (method was `getPermalink`) |
382
410
  | `channel.list` | `listChannels` | ok | `listChannels(query)` | (method was `listConversations`) |
383
- | `user.list` | `listUsers` | unimplemented | none | Api has lookupUserByEmail, getUserById and getUserProfileById, but no user listing. |
411
+ | `user.list` | `listUsers` | ok (unreleased) | `listUsers(query = {})` | Implemented in api-module-library #110; needs the release that includes it. |
384
412
  | `user.lookupByEmail` | `lookupUserByEmail` | ok | `lookupUserByEmail(email)` | (called with one object; now positional) |
385
413
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
386
414
 
@@ -390,14 +418,14 @@ Checked against `~/api-module-library/packages/v1-ready/stripe` (@friggframework
390
418
 
391
419
  | Capability | Method | Status | Real signature | Note |
392
420
  |---|---|---|---|---|
393
- | `customer.get` | `retrieveCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
394
- | `customer.list` | `listCustomers` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
395
- | `customer.search` | `searchCustomers` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
396
- | `customer.create` | `createCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
397
- | `customer.update` | `updateCustomer` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
398
- | `paymentIntent.get` | `retrievePaymentIntent` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
399
- | `refund.get` | `retrieveRefund` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
400
- | `payout.list` | `listPayouts` | unimplemented | none | Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed. |
421
+ | `customer.get` | `retrieveCustomer` | ok (unreleased) | `retrieveCustomer(id, params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
422
+ | `customer.list` | `listCustomers` | ok (unreleased) | `listCustomers(params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
423
+ | `customer.search` | `searchCustomers` | ok (unreleased) | `searchCustomers(query, params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
424
+ | `customer.create` | `createCustomer` | ok (unreleased) | `createCustomer(params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
425
+ | `customer.update` | `updateCustomer` | ok (unreleased) | `updateCustomer(id, params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
426
+ | `paymentIntent.get` | `retrievePaymentIntent` | ok (unreleased) | `retrievePaymentIntent(id, params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
427
+ | `refund.get` | `retrieveRefund` | ok (unreleased) | `retrieveRefund(id, params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
428
+ | `payout.list` | `listPayouts` | ok (unreleased) | `listPayouts(params = {}, options = {})` | Implemented in api-module-library #108; needs the release that includes it. |
401
429
  | `balanceTransaction.list` | `getBalanceTransactions` | ok | `getBalanceTransactions(params)` | (method was `listBalanceTransactions`) |
402
430
  | `webhook.verify` | `verifyWebhookSignature` | ok (unreleased) | `verifyWebhookSignature({ headers, body, rawBody, method?, url?, now? })` | Implemented in api-module-library 659b90d per the vendor's signing docs; needs the release that includes it. |
403
431
 
@@ -195,8 +195,10 @@
195
195
  }
196
196
  },
197
197
  "output": "task[]",
198
- "status": "unimplemented",
199
- "note": "Api.listTasks({ workspaceId, assigneeId }) filters by workspace and assignee only; due_on, completed, projects_any and limit have no equivalent."
198
+ "args": [
199
+ "workspaceGid",
200
+ "$rest"
201
+ ]
200
202
  },
201
203
  "project.list": {
202
204
  "kind": "read",
@@ -235,8 +237,11 @@
235
237
  }
236
238
  },
237
239
  "output": "webhook",
238
- "status": "unimplemented",
239
- "note": "Api has no webhook methods."
240
+ "args": [
241
+ "resource",
242
+ "target",
243
+ "filters"
244
+ ]
240
245
  },
241
246
  "webhook.delete": {
242
247
  "kind": "delete",
@@ -248,8 +253,9 @@
248
253
  }
249
254
  },
250
255
  "output": "void",
251
- "status": "unimplemented",
252
- "note": "Api has no webhook methods."
256
+ "args": [
257
+ "webhookGid"
258
+ ]
253
259
  }
254
260
  },
255
261
  "options": {
@@ -230,8 +230,9 @@
230
230
  }
231
231
  },
232
232
  "output": "void",
233
- "status": "unimplemented",
234
- "note": "Api has createWebhook but no deleteWebhook."
233
+ "args": [
234
+ "id"
235
+ ]
235
236
  }
236
237
  }
237
238
  }
@@ -421,11 +421,15 @@
421
421
  },
422
422
  "lastContactedBefore": {
423
423
  "type": "string"
424
+ },
425
+ "properties": {
426
+ "type": "array"
427
+ },
428
+ "after": {
429
+ "type": "string"
424
430
  }
425
431
  },
426
- "output": "contact[]",
427
- "status": "unimplemented",
428
- "note": "Api has no contact search (searchCompanies, searchDeals, searchCustomObjects and searchLists only)."
432
+ "output": "{ total, results: contact[], paging }"
429
433
  },
430
434
  "contact.list": {
431
435
  "kind": "read",
@@ -504,8 +508,10 @@
504
508
  }
505
509
  },
506
510
  "output": "deal[]",
507
- "status": "unimplemented",
508
- "note": "Api has no per-contact deal listing; associations come from getBatchAssociations(from, to, inputs)."
511
+ "args": [
512
+ "contactId",
513
+ "open"
514
+ ]
509
515
  },
510
516
  "deal.contacts": {
511
517
  "kind": "read",
@@ -517,8 +523,9 @@
517
523
  }
518
524
  },
519
525
  "output": "contact[]",
520
- "status": "unimplemented",
521
- "note": "Api has no per-deal contact listing; associations come from getBatchAssociations(from, to, inputs)."
526
+ "args": [
527
+ "dealId"
528
+ ]
522
529
  },
523
530
  "task.create": {
524
531
  "kind": "write",
@@ -533,8 +540,10 @@
533
540
  }
534
541
  },
535
542
  "output": "task",
536
- "status": "unimplemented",
537
- "note": "Api has no engagement or task methods."
543
+ "args": [
544
+ "properties",
545
+ "contactId"
546
+ ]
538
547
  },
539
548
  "call.create": {
540
549
  "kind": "write",
@@ -550,8 +559,10 @@
550
559
  }
551
560
  },
552
561
  "output": "call",
553
- "status": "unimplemented",
554
- "note": "Api has no engagement or task methods."
562
+ "args": [
563
+ "properties",
564
+ "contactId"
565
+ ]
555
566
  },
556
567
  "note.create": {
557
568
  "kind": "write",
@@ -569,16 +580,18 @@
569
580
  }
570
581
  },
571
582
  "output": "note",
572
- "status": "unimplemented",
573
- "note": "Api has no engagement or task methods."
583
+ "args": [
584
+ "properties",
585
+ "contactId",
586
+ "dealId"
587
+ ]
574
588
  },
575
589
  "owner.list": {
576
590
  "kind": "read",
577
591
  "method": "listOwners",
578
592
  "input": {},
579
593
  "output": "owner[]",
580
- "status": "unimplemented",
581
- "note": "Api has getOwnerById only."
594
+ "args": []
582
595
  },
583
596
  "pipeline.stages": {
584
597
  "kind": "read",
@@ -589,8 +602,9 @@
589
602
  }
590
603
  },
591
604
  "output": "stage[]",
592
- "status": "unimplemented",
593
- "note": "Api.getPipelineDetails(objType) returns every pipeline for an object type, not the stages of one pipeline."
605
+ "args": [
606
+ "pipelineId"
607
+ ]
594
608
  },
595
609
  "contact.upsertByEmail": {
596
610
  "kind": "write",
@@ -607,14 +621,16 @@
607
621
  }
608
622
  },
609
623
  "output": "contact",
610
- "status": "unimplemented",
611
- "note": "Api has no upsert and no contact search to build one from."
624
+ "args": [
625
+ "email",
626
+ "properties"
627
+ ]
612
628
  },
613
629
  "deal.update": {
614
630
  "kind": "write",
615
631
  "method": "updateDeal",
616
632
  "input": {
617
- "id": {
633
+ "dealId": {
618
634
  "type": "string",
619
635
  "required": true
620
636
  },
@@ -624,32 +640,33 @@
624
640
  }
625
641
  },
626
642
  "output": "deal",
627
- "status": "unimplemented",
628
- "note": "Api.updateDeal({ dealId, properties }) reads this.URLs.getDealById, which is not defined (the table has dealById), so it throws before sending. Fixed upstream (api-module-library 5961c9a); unimplemented here until a release carries it."
643
+ "note": "Api.updateDeal({ dealId, properties }) takes one object, so the input is dealId (it was id)."
629
644
  },
630
645
  "deal.search": {
631
646
  "kind": "search",
632
647
  "method": "searchDeals",
633
648
  "input": {
634
- "open": {
635
- "type": "boolean"
636
- },
637
- "closeDateBefore": {
638
- "type": "string"
649
+ "filterGroups": {
650
+ "type": "array"
639
651
  },
640
- "closeDateAfter": {
641
- "type": "string"
652
+ "sorts": {
653
+ "type": "array"
642
654
  },
643
- "minAmount": {
644
- "type": "number"
655
+ "props": {
656
+ "type": "array"
645
657
  },
646
658
  "limit": {
647
659
  "type": "number"
660
+ },
661
+ "after": {
662
+ "type": "string"
663
+ },
664
+ "allProps": {
665
+ "type": "boolean"
648
666
  }
649
667
  },
650
- "output": "deal[]",
651
- "status": "unimplemented",
652
- "note": "Api.searchDeals takes HubSpot filterGroups, sorts, props, limit and after, not open/closeDate/amount filters."
668
+ "output": "{ total, results: deal[], paging }",
669
+ "note": "Api.searchDeals takes HubSpot filterGroups ([{ filters: [{ propertyName, operator, value }] }]), sorts, props, limit, after and allProps (default true: every deal property when props is empty). The capability was reshaped from open/closeDateBefore/closeDateAfter/minAmount, which the Api never had; a definition expresses those as filterGroups."
653
670
  },
654
671
  "task.get": {
655
672
  "kind": "read",
@@ -664,8 +681,10 @@
664
681
  }
665
682
  },
666
683
  "output": "task",
667
- "status": "unimplemented",
668
- "note": "Api has no engagement or task methods."
684
+ "args": [
685
+ "id",
686
+ "properties"
687
+ ]
669
688
  },
670
689
  "task.update": {
671
690
  "kind": "write",
@@ -681,8 +700,10 @@
681
700
  }
682
701
  },
683
702
  "output": "task",
684
- "status": "unimplemented",
685
- "note": "Api has no engagement or task methods."
703
+ "args": [
704
+ "id",
705
+ "properties"
706
+ ]
686
707
  },
687
708
  "task.search": {
688
709
  "kind": "search",
@@ -699,11 +720,15 @@
699
720
  },
700
721
  "limit": {
701
722
  "type": "number"
723
+ },
724
+ "properties": {
725
+ "type": "array"
726
+ },
727
+ "after": {
728
+ "type": "string"
702
729
  }
703
730
  },
704
- "output": "task[]",
705
- "status": "unimplemented",
706
- "note": "Api has no engagement or task methods."
731
+ "output": "{ total, results: task[], paging }"
707
732
  },
708
733
  "owner.get": {
709
734
  "kind": "read",
@@ -729,16 +754,16 @@
729
754
  }
730
755
  },
731
756
  "output": "owner",
732
- "status": "unimplemented",
733
- "note": "Api has getOwnerById only."
757
+ "args": [
758
+ "email"
759
+ ]
734
760
  },
735
761
  "subscription.definitions": {
736
762
  "kind": "read",
737
763
  "method": "listSubscriptionDefinitions",
738
764
  "input": {},
739
765
  "output": "subscriptionDefinition[]",
740
- "status": "unimplemented",
741
- "note": "Api has no email subscription methods."
766
+ "args": []
742
767
  },
743
768
  "subscription.unsubscribe": {
744
769
  "kind": "write",
@@ -761,8 +786,12 @@
761
786
  }
762
787
  },
763
788
  "output": "subscriptionStatus",
764
- "status": "unimplemented",
765
- "note": "Api has no email subscription methods."
789
+ "args": [
790
+ "emailAddress",
791
+ "subscriptionId",
792
+ "legalBasis",
793
+ "legalBasisExplanation"
794
+ ]
766
795
  }
767
796
  },
768
797
  "options": {
@@ -196,8 +196,9 @@
196
196
  }
197
197
  },
198
198
  "output": "issue",
199
- "status": "unimplemented",
200
- "note": "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."
199
+ "args": [
200
+ "id"
201
+ ]
201
202
  },
202
203
  "issue.byIdentifier": {
203
204
  "kind": "read",
@@ -209,8 +210,9 @@
209
210
  }
210
211
  },
211
212
  "output": "issue",
212
- "status": "unimplemented",
213
- "note": "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."
213
+ "args": [
214
+ "identifier"
215
+ ]
214
216
  },
215
217
  "issue.search": {
216
218
  "kind": "search",
@@ -230,8 +232,12 @@
230
232
  }
231
233
  },
232
234
  "output": "issue[]",
233
- "status": "unimplemented",
234
- "note": "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."
235
+ "args": [
236
+ "teamId",
237
+ "stateType",
238
+ "updatedBefore",
239
+ "first"
240
+ ]
235
241
  },
236
242
  "issue.create": {
237
243
  "kind": "write",
@@ -259,8 +265,14 @@
259
265
  }
260
266
  },
261
267
  "output": "issue",
262
- "status": "unimplemented",
263
- "note": "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."
268
+ "args": [
269
+ "teamId",
270
+ "title",
271
+ "description",
272
+ "priority",
273
+ "stateName",
274
+ "labelIds"
275
+ ]
264
276
  },
265
277
  "issue.update": {
266
278
  "kind": "write",
@@ -276,8 +288,10 @@
276
288
  }
277
289
  },
278
290
  "output": "issue",
279
- "status": "unimplemented",
280
- "note": "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."
291
+ "args": [
292
+ "id",
293
+ "input"
294
+ ]
281
295
  },
282
296
  "comment.create": {
283
297
  "kind": "write",
@@ -293,8 +307,10 @@
293
307
  }
294
308
  },
295
309
  "output": "comment",
296
- "status": "unimplemented",
297
- "note": "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."
310
+ "args": [
311
+ "issueId",
312
+ "body"
313
+ ]
298
314
  },
299
315
  "attachment.link": {
300
316
  "kind": "write",
@@ -313,16 +329,18 @@
313
329
  }
314
330
  },
315
331
  "output": "attachment",
316
- "status": "unimplemented",
317
- "note": "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."
332
+ "args": [
333
+ "issueId",
334
+ "url",
335
+ "title"
336
+ ]
318
337
  },
319
338
  "team.list": {
320
339
  "kind": "read",
321
340
  "method": "teams",
322
341
  "input": {},
323
342
  "output": "team[]",
324
- "status": "unimplemented",
325
- "note": "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."
343
+ "args": []
326
344
  },
327
345
  "workflowState.list": {
328
346
  "kind": "read",
@@ -334,8 +352,9 @@
334
352
  }
335
353
  },
336
354
  "output": "workflowState[]",
337
- "status": "unimplemented",
338
- "note": "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."
355
+ "args": [
356
+ "teamId"
357
+ ]
339
358
  }
340
359
  },
341
360
  "options": {
@@ -302,8 +302,9 @@
302
302
  }
303
303
  },
304
304
  "output": "person",
305
- "status": "unimplemented",
306
- "note": "Api has no addPerson (persons can be listed, fetched and searched only)."
305
+ "args": [
306
+ "person"
307
+ ]
307
308
  },
308
309
  "person.update": {
309
310
  "kind": "write",
@@ -319,8 +320,10 @@
319
320
  }
320
321
  },
321
322
  "output": "person",
322
- "status": "unimplemented",
323
- "note": "Api has no updatePerson."
323
+ "args": [
324
+ "id",
325
+ "person"
326
+ ]
324
327
  },
325
328
  "activity.create": {
326
329
  "kind": "write",
@@ -374,8 +374,10 @@
374
374
  }
375
375
  },
376
376
  "output": "void",
377
- "status": "unimplemented",
378
- "note": "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."
377
+ "args": [
378
+ "id",
379
+ "fields"
380
+ ]
379
381
  },
380
382
  "person.searchByEmail": {
381
383
  "kind": "search",
@@ -388,8 +390,9 @@
388
390
  }
389
391
  },
390
392
  "output": "{ leads: lead[], contacts: contact[] }",
391
- "status": "unimplemented",
392
- "note": "Api.find(object, filter) searches one sObject at a time; searching Lead and Contact together would need two calls."
393
+ "args": [
394
+ "email"
395
+ ]
393
396
  },
394
397
  "event.create": {
395
398
  "kind": "write",
@@ -422,8 +425,10 @@
422
425
  }
423
426
  },
424
427
  "output": "void",
425
- "status": "unimplemented",
426
- "note": "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."
428
+ "args": [
429
+ "id",
430
+ "fields"
431
+ ]
427
432
  },
428
433
  "opportunity.get": {
429
434
  "kind": "read",
@@ -456,8 +461,10 @@
456
461
  }
457
462
  },
458
463
  "output": "void",
459
- "status": "unimplemented",
460
- "note": "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."
464
+ "args": [
465
+ "id",
466
+ "fields"
467
+ ]
461
468
  },
462
469
  "task.create": {
463
470
  "kind": "write",
@@ -498,8 +505,12 @@
498
505
  }
499
506
  },
500
507
  "output": "contentVersion",
501
- "status": "unimplemented",
502
- "note": "Api has the generic create(object, data) only; ContentVersion field names differ from this capability's inputs."
508
+ "args": [
509
+ "title",
510
+ "pathOnClient",
511
+ "versionData",
512
+ "firstPublishLocationId"
513
+ ]
503
514
  },
504
515
  "note.create": {
505
516
  "kind": "write",
@@ -519,8 +530,11 @@
519
530
  }
520
531
  },
521
532
  "output": "contentNote",
522
- "status": "unimplemented",
523
- "note": "Api has the generic create(object, data) only; ContentNote field names differ from this capability's inputs."
533
+ "args": [
534
+ "title",
535
+ "content",
536
+ "linkedEntityId"
537
+ ]
524
538
  },
525
539
  "user.list": {
526
540
  "kind": "read",
@@ -531,8 +545,9 @@
531
545
  }
532
546
  },
533
547
  "output": "user[]",
534
- "status": "unimplemented",
535
- "note": "Api has find(object, filter) but no user listing with an activeOnly filter."
548
+ "args": [
549
+ "activeOnly"
550
+ ]
536
551
  }
537
552
  },
538
553
  "options": {
@@ -324,11 +324,15 @@
324
324
  "input": {
325
325
  "limit": {
326
326
  "type": "number"
327
+ },
328
+ "cursor": {
329
+ "type": "string"
327
330
  }
328
331
  },
329
332
  "output": "user[]",
330
- "status": "unimplemented",
331
- "note": "Api has lookupUserByEmail, getUserById and getUserProfileById, but no user listing."
333
+ "args": [
334
+ "$rest"
335
+ ]
332
336
  },
333
337
  "user.lookupByEmail": {
334
338
  "kind": "read",
@@ -485,8 +485,9 @@
485
485
  }
486
486
  },
487
487
  "output": "customer",
488
- "status": "unimplemented",
489
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
488
+ "args": [
489
+ "id"
490
+ ]
490
491
  },
491
492
  "customer.list": {
492
493
  "kind": "read",
@@ -503,8 +504,9 @@
503
504
  }
504
505
  },
505
506
  "output": "page<customer>",
506
- "status": "unimplemented",
507
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
507
+ "args": [
508
+ "$rest"
509
+ ]
508
510
  },
509
511
  "customer.search": {
510
512
  "kind": "search",
@@ -516,8 +518,9 @@
516
518
  }
517
519
  },
518
520
  "output": "customer[]",
519
- "status": "unimplemented",
520
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
521
+ "args": [
522
+ "query"
523
+ ]
521
524
  },
522
525
  "customer.create": {
523
526
  "kind": "write",
@@ -529,8 +532,9 @@
529
532
  }
530
533
  },
531
534
  "output": "customer",
532
- "status": "unimplemented",
533
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
535
+ "args": [
536
+ "params"
537
+ ]
534
538
  },
535
539
  "customer.update": {
536
540
  "kind": "write",
@@ -546,8 +550,10 @@
546
550
  }
547
551
  },
548
552
  "output": "customer",
549
- "status": "unimplemented",
550
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
553
+ "args": [
554
+ "id",
555
+ "params"
556
+ ]
551
557
  },
552
558
  "paymentIntent.get": {
553
559
  "kind": "read",
@@ -562,8 +568,10 @@
562
568
  }
563
569
  },
564
570
  "output": "paymentIntent",
565
- "status": "unimplemented",
566
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
571
+ "args": [
572
+ "id",
573
+ "$rest"
574
+ ]
567
575
  },
568
576
  "refund.get": {
569
577
  "kind": "read",
@@ -575,8 +583,9 @@
575
583
  }
576
584
  },
577
585
  "output": "refund",
578
- "status": "unimplemented",
579
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
586
+ "args": [
587
+ "id"
588
+ ]
580
589
  },
581
590
  "payout.list": {
582
591
  "kind": "read",
@@ -596,8 +605,9 @@
596
605
  }
597
606
  },
598
607
  "output": "payout[]",
599
- "status": "unimplemented",
600
- "note": "Api wraps balance transactions, charges, accounts and webhook endpoints only; customers, payment intents, refunds and payouts are not exposed."
608
+ "args": [
609
+ "$rest"
610
+ ]
601
611
  },
602
612
  "balanceTransaction.list": {
603
613
  "kind": "read",
@@ -79,7 +79,7 @@
79
79
  },
80
80
  {
81
81
  "use": "stop",
82
- "when": "$.steps.contacts[0] == null",
82
+ "when": "$.steps.contacts.results[0] == null",
83
83
  "with": {
84
84
  "reason": "Attendee is not a HubSpot contact"
85
85
  }
@@ -88,7 +88,7 @@
88
88
  "id": "deals",
89
89
  "use": "hubspot.deal.listForContact",
90
90
  "with": {
91
- "contactId": "$.steps.contacts[0].id",
91
+ "contactId": "$.steps.contacts.results[0].id",
92
92
  "open": true
93
93
  }
94
94
  },
@@ -102,7 +102,7 @@
102
102
  {
103
103
  "use": "hubspot.note.create",
104
104
  "with": {
105
- "contactId": "$.steps.contacts[0].id",
105
+ "contactId": "$.steps.contacts.results[0].id",
106
106
  "dealId": "$.steps.deals[0].id",
107
107
  "properties": {
108
108
  "hs_note_body": "$.steps.body",
@@ -163,7 +163,7 @@
163
163
  },
164
164
  {
165
165
  "use": "stop",
166
- "when": "$.steps.contacts[0] == null",
166
+ "when": "$.steps.contacts.results[0] == null",
167
167
  "with": {
168
168
  "reason": "Attendee is not a HubSpot contact"
169
169
  }
@@ -189,7 +189,7 @@
189
189
  "use": "hubspot.task.create",
190
190
  "when": "$.item.completed != true",
191
191
  "with": {
192
- "contactId": "$.steps.contacts[0].id",
192
+ "contactId": "$.steps.contacts.results[0].id",
193
193
  "properties": {
194
194
  "hs_task_subject": "{{item.description | truncate: 120}}",
195
195
  "hs_task_body": "From \"{{record.title}}\" at {{item.recording_timestamp}}: {{record.share_url}}",
@@ -329,7 +329,7 @@
329
329
  },
330
330
  {
331
331
  "use": "stop",
332
- "when": "$.steps.contacts[0] == null",
332
+ "when": "$.steps.contacts.results[0] == null",
333
333
  "with": {
334
334
  "reason": "Attendee is not a HubSpot contact"
335
335
  }
@@ -338,7 +338,7 @@
338
338
  "id": "deals",
339
339
  "use": "hubspot.deal.listForContact",
340
340
  "with": {
341
- "contactId": "$.steps.contacts[0].id",
341
+ "contactId": "$.steps.contacts.results[0].id",
342
342
  "open": true
343
343
  }
344
344
  },
@@ -399,7 +399,7 @@
399
399
  {
400
400
  "use": "hubspot.deal.update",
401
401
  "with": {
402
- "id": "$.steps.deals[0].id",
402
+ "dealId": "$.steps.deals[0].id",
403
403
  "properties": {
404
404
  "hs_next_step": "$.steps.proposal.nextStep"
405
405
  }
@@ -432,7 +432,7 @@
432
432
  {
433
433
  "use": "hubspot.deal.update",
434
434
  "with": {
435
- "id": "$.record.metadata.event_payload.dealId",
435
+ "dealId": "$.record.metadata.event_payload.dealId",
436
436
  "properties": {
437
437
  "dealstage": "$.record.metadata.event_payload.stage",
438
438
  "hs_next_step": "$.record.metadata.event_payload.nextStep"
@@ -159,15 +159,33 @@
159
159
  "id": "deals",
160
160
  "use": "hubspot.deal.search",
161
161
  "with": {
162
- "open": true,
163
- "closeDateBefore": "+7d",
164
- "minAmount": "$.settings.minAmount",
162
+ "filterGroups": [
163
+ {
164
+ "filters": [
165
+ {
166
+ "propertyName": "hs_is_closed",
167
+ "operator": "EQ",
168
+ "value": "false"
169
+ },
170
+ {
171
+ "propertyName": "closedate",
172
+ "operator": "LT",
173
+ "value": "{{now | to_unix | plus: 604800 | times: 1000}}"
174
+ },
175
+ {
176
+ "propertyName": "amount",
177
+ "operator": "GTE",
178
+ "value": "$.settings.minAmount"
179
+ }
180
+ ]
181
+ }
182
+ ],
165
183
  "limit": 50
166
184
  }
167
185
  },
168
186
  {
169
187
  "use": "stop",
170
- "when": "$.steps.deals[0] == null",
188
+ "when": "$.steps.deals.results[0] == null",
171
189
  "with": {
172
190
  "reason": "Nothing closes this week"
173
191
  }
@@ -176,7 +194,7 @@
176
194
  "id": "build",
177
195
  "use": "foreach",
178
196
  "with": {
179
- "over": "$.steps.deals",
197
+ "over": "$.steps.deals.results",
180
198
  "max": 50,
181
199
  "collect": "$.steps.line"
182
200
  },
@@ -231,7 +249,7 @@
231
249
  "id": "remind",
232
250
  "use": "foreach",
233
251
  "with": {
234
- "over": "$.steps.tasks",
252
+ "over": "$.steps.tasks.results",
235
253
  "max": 100
236
254
  },
237
255
  "do": [
@@ -404,6 +422,6 @@
404
422
  "deal-won": ":tada: *{{steps.deal.properties.dealname | mrkdwn}}* closed won for ${{steps.deal.properties.amount | default: '?'}}. Nice work {{steps.owner.firstName | default: 'team' | mrkdwn}}! <https://app.hubspot.com/contacts/{{install.portalId}}/record/0-3/{{steps.deal.id}}|Open deal>",
405
423
  "high-value": ":moneybag: New deal over ${{settings.threshold}}: *{{steps.deal.properties.dealname | mrkdwn}}* (${{steps.deal.properties.amount}}), closing {{steps.deal.properties.closedate | date}}. <https://app.hubspot.com/contacts/{{install.portalId}}/record/0-3/{{steps.deal.id}}|Open deal>",
406
424
  "digest-line": "\u2022 <https://app.hubspot.com/contacts/{{install.portalId}}/record/0-3/{{item.id}}|{{item.properties.dealname | mrkdwn}}>: ${{item.properties.amount | default: 0}}, closes {{item.properties.closedate | date}}",
407
- "digest": ":calendar: *Closing in the next 7 days* ({{steps.deals | size}} deals)\n{{steps.build | join: '\\n'}}"
425
+ "digest": ":calendar: *Closing in the next 7 days* ({{steps.deals.results | size}} deals)\n{{steps.build | join: '\\n'}}"
408
426
  }
409
427
  }
@@ -381,7 +381,7 @@
381
381
  "id": "each",
382
382
  "use": "foreach",
383
383
  "with": {
384
- "over": "$.steps.stale",
384
+ "over": "$.steps.stale.results",
385
385
  "max": 100
386
386
  },
387
387
  "do": [
@@ -399,7 +399,7 @@
399
399
  "id": "each",
400
400
  "use": "foreach",
401
401
  "with": {
402
- "over": "$.steps.stale",
402
+ "over": "$.steps.stale.results",
403
403
  "max": 100
404
404
  },
405
405
  "do": [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@friggframework/core",
3
3
  "prettier": "@friggframework/prettier-config",
4
- "version": "2.0.0--canary.699.0d57ee8.0",
4
+ "version": "2.0.0--canary.700.80ec1cc.0",
5
5
  "dependencies": {
6
6
  "@aws-sdk/client-apigatewaymanagementapi": "^3.588.0",
7
7
  "@aws-sdk/client-kms": "^3.588.0",
@@ -47,9 +47,9 @@
47
47
  }
48
48
  },
49
49
  "devDependencies": {
50
- "@friggframework/eslint-config": "2.0.0--canary.699.0d57ee8.0",
51
- "@friggframework/prettier-config": "2.0.0--canary.699.0d57ee8.0",
52
- "@friggframework/test": "2.0.0--canary.699.0d57ee8.0",
50
+ "@friggframework/eslint-config": "2.0.0--canary.700.80ec1cc.0",
51
+ "@friggframework/prettier-config": "2.0.0--canary.700.80ec1cc.0",
52
+ "@friggframework/test": "2.0.0--canary.700.80ec1cc.0",
53
53
  "@prisma/client": "^6.19.3",
54
54
  "@types/lodash": "4.17.15",
55
55
  "@typescript-eslint/eslint-plugin": "^8.0.0",
@@ -90,5 +90,5 @@
90
90
  "publishConfig": {
91
91
  "access": "public"
92
92
  },
93
- "gitHead": "0d57ee8eff44caba64a32685026c122cae03580f"
93
+ "gitHead": "80ec1cc658ebdfbe53482d0705c42129685eb47f"
94
94
  }