@pipedream/salesforce_rest_api 1.12.2 → 1.14.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 (77) hide show
  1. package/actions/add-contact-to-campaign/add-contact-to-campaign.mjs +7 -2
  2. package/actions/add-lead-to-campaign/add-lead-to-campaign.mjs +7 -2
  3. package/actions/convert-soap-xml-to-json/convert-soap-xml-to-json.mjs +7 -2
  4. package/actions/create-account/create-account.mjs +7 -2
  5. package/actions/create-accounts-batch/create-accounts-batch.mjs +8 -2
  6. package/actions/create-attachment/create-attachment.mjs +7 -2
  7. package/actions/create-campaign/create-campaign.mjs +7 -2
  8. package/actions/create-case/create-case.mjs +7 -2
  9. package/actions/create-casecomment/create-casecomment.mjs +7 -2
  10. package/actions/create-contact/create-contact.mjs +7 -2
  11. package/actions/create-content-note/create-content-note.mjs +9 -2
  12. package/actions/create-crm-record/create-crm-record.mjs +5 -3
  13. package/actions/create-event/create-event.mjs +7 -2
  14. package/actions/create-lead/create-lead.mjs +7 -2
  15. package/actions/create-note/create-note.mjs +7 -2
  16. package/actions/create-opportunities-batch/create-opportunities-batch.mjs +9 -2
  17. package/actions/create-opportunity/create-opportunity.mjs +7 -2
  18. package/actions/create-record/create-record.mjs +7 -2
  19. package/actions/create-task/create-task.mjs +7 -2
  20. package/actions/create-user/create-user.mjs +7 -2
  21. package/actions/delete-crm-record/delete-crm-record.mjs +6 -4
  22. package/actions/delete-note/delete-note.mjs +7 -2
  23. package/actions/delete-opportunity/delete-opportunity.mjs +7 -2
  24. package/actions/delete-record/delete-record.mjs +7 -2
  25. package/actions/describe-object/describe-object.mjs +5 -3
  26. package/actions/find-records/find-records.mjs +49 -12
  27. package/actions/get-case/get-case.mjs +7 -2
  28. package/actions/get-current-user/get-current-user.mjs +2 -1
  29. package/actions/get-knowledge-articles/get-knowledge-articles.mjs +7 -2
  30. package/actions/get-knowledge-data-category-groups/get-knowledge-data-category-groups.mjs +7 -2
  31. package/actions/get-record-by-id/get-record-by-id.mjs +7 -2
  32. package/actions/get-related-records/get-related-records.mjs +5 -3
  33. package/actions/get-user/get-user.mjs +7 -2
  34. package/actions/get-user-info/get-user-info.mjs +5 -3
  35. package/actions/insert-blob-data/insert-blob-data.mjs +7 -2
  36. package/actions/list-case-comments/list-case-comments.mjs +51 -7
  37. package/actions/list-case-feed-items/list-case-feed-items.mjs +73 -0
  38. package/actions/list-cases/list-cases.mjs +131 -0
  39. package/actions/list-email-messages/list-email-messages.mjs +57 -10
  40. package/actions/list-email-templates/list-email-templates.mjs +45 -6
  41. package/actions/list-knowledge-articles/list-knowledge-articles.mjs +45 -6
  42. package/actions/list-object-fields/list-object-fields.mjs +7 -2
  43. package/actions/list-objects/list-objects.mjs +5 -3
  44. package/actions/post-feed-to-chatter/post-feed-to-chatter.mjs +7 -2
  45. package/actions/search-string/search-string.mjs +7 -2
  46. package/actions/send-email/send-email.mjs +7 -2
  47. package/actions/soql-query/soql-query.mjs +5 -3
  48. package/actions/soql-search/soql-search.mjs +7 -2
  49. package/actions/sosl-search/sosl-search.mjs +7 -2
  50. package/actions/text-search/text-search.mjs +5 -3
  51. package/actions/update-account/update-account.mjs +7 -2
  52. package/actions/update-accounts-batch/update-accounts-batch.mjs +9 -2
  53. package/actions/update-contact/update-contact.mjs +7 -2
  54. package/actions/update-content-note/update-content-note.mjs +9 -2
  55. package/actions/update-crm-record/update-crm-record.mjs +5 -3
  56. package/actions/update-email-template/update-email-template.mjs +7 -2
  57. package/actions/update-note/update-note.mjs +7 -2
  58. package/actions/update-opportunities-batch/update-opportunities-batch.mjs +9 -2
  59. package/actions/update-opportunity/update-opportunity.mjs +7 -2
  60. package/actions/update-record/update-record.mjs +7 -2
  61. package/actions/upsert-record/upsert-record.mjs +7 -2
  62. package/common/constants.mjs +71 -0
  63. package/common/soql.mjs +96 -0
  64. package/package.json +2 -2
  65. package/sources/case-updated-instant/case-updated-instant.mjs +1 -1
  66. package/sources/common/common-feed.mjs +179 -0
  67. package/sources/common/common-new-record.mjs +1 -1
  68. package/sources/email-template-updated-instant/email-template-updated-instant.mjs +1 -1
  69. package/sources/knowledge-article-updated-instant/knowledge-article-updated-instant.mjs +1 -1
  70. package/sources/new-case-instant/new-case-instant.mjs +1 -1
  71. package/sources/new-email-template-instant/new-email-template-instant.mjs +1 -1
  72. package/sources/new-feed-comment/new-feed-comment.mjs +36 -0
  73. package/sources/new-feed-item/new-feed-item.mjs +36 -0
  74. package/sources/new-knowledge-article-instant/new-knowledge-article-instant.mjs +1 -1
  75. package/sources/new-record-instant/new-record-instant.mjs +1 -1
  76. package/sources/record-deleted-instant/record-deleted-instant.mjs +1 -1
  77. package/sources/record-updated-instant/record-updated-instant.mjs +1 -1
@@ -0,0 +1,96 @@
1
+ import { ConfigurationError } from "@pipedream/platform";
2
+ import constants from "./constants.mjs";
3
+
4
+ /**
5
+ * Escapes a value for use inside a quoted SOQL string literal.
6
+ * Salesforce escapes with a backslash, so the backslash itself must go first.
7
+ */
8
+ export function escapeSoqlString(value) {
9
+ return String(value)
10
+ .replace(/\\/g, "\\\\")
11
+ .replace(/'/g, "\\'");
12
+ }
13
+
14
+ /**
15
+ * Validates a value that will be interpolated into SOQL as a record ID.
16
+ * IDs are unquoted-adjacent, high-trust values, so a bad one is rejected up front
17
+ * rather than escaped.
18
+ */
19
+ export function assertSalesforceId(value, label) {
20
+ if (!constants.SALESFORCE_ID_REGEX.test(value)) {
21
+ throw new ConfigurationError(`**${label}** must be a 15- or 18-character Salesforce ID`);
22
+ }
23
+ return value;
24
+ }
25
+
26
+ /**
27
+ * Builds a SELECT field list, always including Id so a caller that narrows the
28
+ * fields to save context still gets the ID every follow-up action needs.
29
+ */
30
+ export function buildFieldList(selected, fallback) {
31
+ return [
32
+ ...new Set([
33
+ "Id",
34
+ ...selected?.length
35
+ ? selected
36
+ : fallback,
37
+ ]),
38
+ ];
39
+ }
40
+
41
+ /**
42
+ * Salesforce returns at most one batch per query and signals a partial result
43
+ * with `done: false`. Callers that ignore it answer confidently from page one,
44
+ * so say so in the summary instead.
45
+ */
46
+ export function truncationNote({
47
+ done, totalSize,
48
+ }, returned) {
49
+ if (done !== false) {
50
+ return "";
51
+ }
52
+ const total = totalSize
53
+ ? ` of ${totalSize}`
54
+ : "";
55
+ return ` This is a partial result (${returned}${total} records) - narrow the filters, or use the **SOQL Query** action, which pages through every record.`;
56
+ }
57
+
58
+ /**
59
+ * Normalizes a user-supplied date/datetime into a SOQL datetime literal.
60
+ * SOQL datetime literals are NOT quoted, so the value must be strictly validated
61
+ * instead of escaped. A date-only value is widened to the start of that day (UTC).
62
+ */
63
+ export function toSoqlDateTimeLiteral(value, label) {
64
+ const raw = String(value).trim();
65
+ const shapeOk = constants.DATE_ONLY_REGEX.test(raw) || constants.DATE_TIME_REGEX.test(raw);
66
+ if (!shapeOk) {
67
+ throw new ConfigurationError(`**${label}** must be an ISO 8601 date (\`2026-08-01\`) or date-time (\`2026-08-01T00:00:00Z\`)`);
68
+ }
69
+
70
+ const literal = constants.DATE_ONLY_REGEX.test(raw)
71
+ ? `${raw}T00:00:00Z`
72
+ : raw;
73
+
74
+ // The shape check alone accepts impossible values. Date.parse rejects month 13,
75
+ // hour 25 and offset +99, but silently rolls 2026-02-31 over to March 3, so the
76
+ // calendar day is round-tripped separately.
77
+ const [
78
+ year,
79
+ month,
80
+ day,
81
+ ] = raw.slice(0, 10).split("-")
82
+ .map(Number);
83
+ // Date.UTC maps years 0-99 to 1900-1999, so building the date there first would
84
+ // roll a valid leap day like `0000-02-29` into March (1900 is not a leap year) and
85
+ // reject it. Setting all three parts together on an epoch date avoids that.
86
+ const utc = new Date(0);
87
+ utc.setUTCFullYear(year, month - 1, day);
88
+ const dayIsReal = utc.getUTCFullYear() === year
89
+ && utc.getUTCMonth() === month - 1
90
+ && utc.getUTCDate() === day;
91
+
92
+ if (!dayIsReal || Number.isNaN(Date.parse(literal))) {
93
+ throw new ConfigurationError(`**${label}** is not a real date: \`${raw}\``);
94
+ }
95
+ return literal;
96
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipedream/salesforce_rest_api",
3
- "version": "1.12.2",
3
+ "version": "1.14.0",
4
4
  "description": "Pipedream Salesforce (REST API) Components",
5
5
  "main": "salesforce_rest_api.app.mjs",
6
6
  "keywords": [
@@ -11,7 +11,7 @@
11
11
  "author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
12
12
  "dependencies": {
13
13
  "@pipedream/platform": "^3.1.1",
14
- "fast-xml-parser": "^5.5.7",
14
+ "fast-xml-parser": "^5.7.0",
15
15
  "handlebars": "^4.7.9",
16
16
  "lodash": "^4.18.1",
17
17
  "lodash-es": "^4.18.1",
@@ -7,7 +7,7 @@ export default {
7
7
  name: "Case Updated (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-case-updated-instant",
9
9
  description: "Emit new event when a case is updated. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -0,0 +1,179 @@
1
+ import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
2
+ import common from "./common-new-record.mjs";
3
+ import constants from "../../common/constants.mjs";
4
+
5
+ const {
6
+ DEPLOY_HISTORICAL_LIMIT,
7
+ FIELD_NAME,
8
+ } = constants;
9
+
10
+ export default {
11
+ ...common,
12
+ props: {
13
+ salesforce: common.props.salesforce,
14
+ db: "$.service.db",
15
+ http: {
16
+ type: "$.interface.http",
17
+ customResponse: true,
18
+ },
19
+ timer: {
20
+ type: "$.interface.timer",
21
+ description: "The timer is only used as a fallback if instant event delivery (webhook) is not available.",
22
+ default: {
23
+ intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
24
+ },
25
+ },
26
+ parentObjectType: {
27
+ type: "string",
28
+ label: "Parent Object Type",
29
+ description: "Optional. The Salesforce SObject API name of the parent record to filter by, e.g. `Case` or `Opportunity`. When set, appends `AND Parent.Type = '<value>'` to the SOQL WHERE clause (traversal of the polymorphic `ParentId`). Leave blank to emit events on any parent object.",
30
+ optional: true,
31
+ },
32
+ excludeSelf: {
33
+ type: "boolean",
34
+ label: "Exclude Self",
35
+ description: "Optional. When `true`, appends `AND CreatedById != '<authenticatedUserId>'` to filter out events created by the connected user. The user ID is resolved at runtime via the userinfo endpoint and cached in db.",
36
+ optional: true,
37
+ },
38
+ },
39
+ hooks: {
40
+ ...common.hooks,
41
+ async deploy() {
42
+ const objectType = this.getObjectType();
43
+ const nameField = await this.salesforce.getNameFieldForObjectType(objectType);
44
+ this.setNameField(nameField);
45
+
46
+ const extraConditions = await this._buildExtraConditions();
47
+ const { records } = await this.query({
48
+ query: `SELECT Id FROM ${objectType} WHERE Id != null ${extraConditions} ORDER BY CreatedDate DESC LIMIT ${DEPLOY_HISTORICAL_LIMIT}`,
49
+ });
50
+
51
+ // Emit oldest-first so historical events are delivered chronologically,
52
+ // matching the timer polling path.
53
+ for (const record of [
54
+ ...records,
55
+ ].reverse()) {
56
+ const object = await this.salesforce.getSObject(objectType, record.Id);
57
+ const event = {
58
+ body: {
59
+ "New": object,
60
+ "UserId": record.Id,
61
+ },
62
+ };
63
+ await this.processWebhookEvent(event);
64
+ }
65
+ },
66
+ },
67
+ methods: {
68
+ ...common.methods,
69
+ getMinFields() {
70
+ throw new Error("getMinFields is not implemented");
71
+ },
72
+ _getAuthenticatedUserId() {
73
+ return this.db.get("authenticatedUserId");
74
+ },
75
+ _setAuthenticatedUserId(userId) {
76
+ this.db.set("authenticatedUserId", userId);
77
+ },
78
+ async _resolveAuthenticatedUserId() {
79
+ let userId = this._getAuthenticatedUserId();
80
+ if (!userId) {
81
+ const userInfo = await this.salesforce.getUserInfo(this.salesforce._authToken());
82
+ userId = userInfo.user_id;
83
+ this._setAuthenticatedUserId(userId);
84
+ }
85
+ return userId;
86
+ },
87
+ async _buildExtraConditions() {
88
+ const conditions = [];
89
+ if (this.parentObjectType) {
90
+ conditions.push(`AND Parent.Type = '${this.parentObjectType}'`);
91
+ }
92
+ if (this.excludeSelf) {
93
+ const userId = await this._resolveAuthenticatedUserId();
94
+ conditions.push(`AND CreatedById != '${userId}'`);
95
+ }
96
+ return conditions.join(" ");
97
+ },
98
+ async processWebhookEvent(event) {
99
+ // Instant/webhook deliveries can't filter on Parent.Type (the pushed
100
+ // payload has ParentId but not the parent's object type), so
101
+ // parentObjectType is only enforced on the polling/deploy SOQL queries.
102
+ // excludeSelf is enforced here to prevent self-trigger loops.
103
+ if (this.excludeSelf) {
104
+ const userId = await this._resolveAuthenticatedUserId();
105
+ if (event.body?.New?.CreatedById === userId) {
106
+ return;
107
+ }
108
+ }
109
+ const meta = this.generateWebhookMeta(event);
110
+ this.$emit(event.body, meta);
111
+ },
112
+ async processTimerEvent(eventData) {
113
+ const {
114
+ startTimestamp,
115
+ endTimestamp,
116
+ } = eventData;
117
+
118
+ const fieldName = this.getNameField();
119
+ let columns = this.getObjectTypeColumns();
120
+ if (!columns.length) {
121
+ columns = [
122
+ ...this.getMinFields(),
123
+ ];
124
+ }
125
+
126
+ const extraConditions = await this._buildExtraConditions();
127
+ const objectType = this.getObjectType();
128
+ const dateFieldName = FIELD_NAME.CREATED_DATE;
129
+
130
+ const events = await this.paginate({
131
+ fn: ({
132
+ limit,
133
+ offset,
134
+ }) => this.query({
135
+ query: `
136
+ SELECT ${columns.join(", ")}
137
+ FROM ${objectType}
138
+ WHERE ${dateFieldName} > ${startTimestamp}
139
+ AND ${dateFieldName} <= ${endTimestamp}
140
+ ${extraConditions}
141
+ ORDER BY ${dateFieldName} DESC
142
+ LIMIT ${limit} OFFSET ${offset}
143
+ `,
144
+ }),
145
+ });
146
+
147
+ const [
148
+ latestEvent,
149
+ ] = events;
150
+
151
+ let latestDateCovered = new Date(latestEvent?.CreatedDate || endTimestamp);
152
+ if (isNaN(latestDateCovered.getMilliseconds())) {
153
+ latestDateCovered = new Date();
154
+ }
155
+ latestDateCovered.setSeconds(0);
156
+ this.setLatestDateCovered(latestDateCovered.toISOString());
157
+
158
+ Array.from(events)
159
+ .reverse()
160
+ .forEach((item) => {
161
+ const meta = this.generateTimerMeta(item, fieldName);
162
+ this.$emit(item, meta);
163
+ });
164
+ },
165
+ async timerActivateHook() {
166
+ let columns;
167
+ try {
168
+ const { fields } = await this.getObjectTypeDescription(this.getObjectType());
169
+ columns = fields.map(({ name }) => name);
170
+ } catch (err) {
171
+ console.log(`Error fetching ${this.getObjectType()} description, falling back to minimum fields:`, err);
172
+ columns = [
173
+ ...this.getMinFields(),
174
+ ];
175
+ }
176
+ this.setObjectTypeColumns(columns);
177
+ },
178
+ },
179
+ };
@@ -63,7 +63,7 @@ export default {
63
63
  methods: {
64
64
  ...common.methods,
65
65
  generateTimerMeta(item, fieldName) {
66
- const { objectType } = this;
66
+ const objectType = this.getObjectType();
67
67
  const {
68
68
  CreatedDate: createdDate,
69
69
  [fieldName]: name,
@@ -7,7 +7,7 @@ export default {
7
7
  name: "Email Template Updated (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-email-template-updated-instant",
9
9
  description: "Emit new event when an email template is updated. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -7,7 +7,7 @@ export default {
7
7
  name: "Knowledge Article Updated (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-knowledge-article-updated-instant",
9
9
  description: "Emit new event when a knowledge article is updated. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -7,7 +7,7 @@ export default {
7
7
  name: "New Case (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-new-case-instant",
9
9
  description: "Emit new event when a case is created. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -7,7 +7,7 @@ export default {
7
7
  name: "New Email Template (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-new-email-template-instant",
9
9
  description: "Emit new event when an email template is created. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -0,0 +1,36 @@
1
+ import common from "../common/common-feed.mjs";
2
+ import constants from "../../common/constants.mjs";
3
+
4
+ const {
5
+ FEED_COMMENT_MIN_FIELDS,
6
+ OBJECT_TYPE,
7
+ } = constants;
8
+
9
+ export default {
10
+ ...common,
11
+ type: "source",
12
+ name: "New Chatter Feed Comment (Instant or Polling)",
13
+ key: "salesforce_rest_api-new-feed-comment",
14
+ description: "Emit new events for each Chatter FeedComment (reply) created in Salesforce, polling `FeedComment` via SOQL on `CreatedDate`. Use this to react to comments on Chatter posts, since Chatter activity does not update the parent record's `LastModifiedDate`. The payload includes both `ParentId` (a polymorphic reference to the feed's parent - either a record feed, e.g. a Case ID starting with `500`, or a User feed) and `FeedItemId` (the ID of the FeedItem the comment belongs to) - these are distinct fields; do not confuse them. Set `parentObjectType` to a parent object API name (e.g. `Case`) to append `AND Parent.Type = '<value>'` to the SOQL WHERE clause. Set `excludeSelf` to `true` to drop comments authored by the connected integration user. Note: querying FeedComment without a parent filter requires the `View All Data` permission on the connected user. Attempts instant delivery via webhook and falls back to timer polling automatically. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_feedcomment.htm)",
15
+ version: "0.0.2",
16
+ props: {
17
+ ...common.props,
18
+ parentObjectType: {
19
+ ...common.props.parentObjectType,
20
+ description: "Optional. The Salesforce SObject API name of the parent business record to filter by, e.g. `Case`. When set, appends `AND Parent.Type = '<value>'` to the SOQL WHERE clause (traversal of the polymorphic `FeedComment.ParentId`). Leave blank to emit comments on any parent object (requires `View All Data` permission).",
21
+ },
22
+ excludeSelf: {
23
+ ...common.props.excludeSelf,
24
+ description: "Optional. When `true`, appends `AND CreatedById != '<authenticatedUserId>'` to filter out comments created by the connected user. The user ID is resolved at runtime via the userinfo endpoint and cached in db.",
25
+ },
26
+ },
27
+ methods: {
28
+ ...common.methods,
29
+ getObjectType() {
30
+ return OBJECT_TYPE.FEED_COMMENT;
31
+ },
32
+ getMinFields() {
33
+ return FEED_COMMENT_MIN_FIELDS;
34
+ },
35
+ },
36
+ };
@@ -0,0 +1,36 @@
1
+ import common from "../common/common-feed.mjs";
2
+ import constants from "../../common/constants.mjs";
3
+
4
+ const {
5
+ FEED_ITEM_MIN_FIELDS,
6
+ OBJECT_TYPE,
7
+ } = constants;
8
+
9
+ export default {
10
+ ...common,
11
+ type: "source",
12
+ name: "New Chatter Feed Item (Instant or Polling)",
13
+ key: "salesforce_rest_api-new-feed-item",
14
+ description: "Emit new events for each Chatter FeedItem (post) created in Salesforce, polling `FeedItem` via SOQL on `CreatedDate`. Use this to react to Chatter posts on Cases and other records, since Chatter activity does not update the parent record's `LastModifiedDate` (so **New Record (Instant, of Selectable Type)** and **New Case (Instant, of Selectable Type)** never emit for it). Set `parentObjectType` to the parent object's API name (e.g. `Case`, `Opportunity`) to only emit posts whose parent record is of that type. Set `excludeSelf` to `true` to drop posts authored by the connected integration user. Note: `Body` is null for system-generated post types (e.g. `TrackedChange`). Attempts instant delivery via webhook and falls back to timer polling automatically when the Streaming API does not support this object. [See the documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_feeditem.htm)",
15
+ version: "0.0.2",
16
+ props: {
17
+ ...common.props,
18
+ parentObjectType: {
19
+ ...common.props.parentObjectType,
20
+ description: "Optional. The Salesforce SObject API name of the parent record to filter by, e.g. `Case` or `Opportunity`. When set, appends `AND Parent.Type = '<value>'` to the SOQL WHERE clause (traversal of the polymorphic `FeedItem.ParentId`). Leave blank to emit posts on any parent object.",
21
+ },
22
+ excludeSelf: {
23
+ ...common.props.excludeSelf,
24
+ description: "Optional. When `true`, appends `AND CreatedById != '<authenticatedUserId>'` to filter out posts created by the connected user. The user ID is resolved at runtime via the userinfo endpoint and cached in db.",
25
+ },
26
+ },
27
+ methods: {
28
+ ...common.methods,
29
+ getObjectType() {
30
+ return OBJECT_TYPE.FEED_ITEM;
31
+ },
32
+ getMinFields() {
33
+ return FEED_ITEM_MIN_FIELDS;
34
+ },
35
+ },
36
+ };
@@ -7,7 +7,7 @@ export default {
7
7
  name: "New Knowledge Article (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-new-knowledge-article-instant",
9
9
  description: "Emit new event when a knowledge article is created. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.0.8",
10
+ version: "0.0.10",
11
11
  props: {
12
12
  salesforce: common.props.salesforce,
13
13
  db: "$.service.db",
@@ -6,7 +6,7 @@ export default {
6
6
  name: "New Record (Instant, of Selectable Type)",
7
7
  key: "salesforce_rest_api-new-record-instant",
8
8
  description: "Emit new event when a record of the selected object type is created. [See the documentation](https://sforce.co/3yPSJZy)",
9
- version: "0.2.8",
9
+ version: "0.2.10",
10
10
  props: {
11
11
  ...common.props,
12
12
  fieldsToObtain: {
@@ -7,7 +7,7 @@ export default {
7
7
  name: "New Deleted Record (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-record-deleted-instant",
9
9
  description: "Emit new event when a record of the selected object type is deleted. [See the documentation](https://sforce.co/3msDDEE)",
10
- version: "0.1.7",
10
+ version: "0.1.9",
11
11
  methods: {
12
12
  ...common.methods,
13
13
  generateWebhookMeta(data) {
@@ -7,7 +7,7 @@ export default {
7
7
  name: "New Updated Record (Instant, of Selectable Type)",
8
8
  key: "salesforce_rest_api-record-updated-instant",
9
9
  description: "Emit new event when a record of the selected type is updated. [See the documentation](https://sforce.co/3yPSJZy)",
10
- version: "0.2.8",
10
+ version: "0.2.10",
11
11
  props: {
12
12
  ...common.props,
13
13
  fields: {