@bonsae/node-red-salesforce 0.4.0 → 0.5.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.
@@ -32,8 +32,11 @@
32
32
  <table width="100%" style="min-width:500px">
33
33
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
34
34
  <tbody>
35
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
35
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
36
36
  <tr><td>查詢</td><td>query</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
37
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
38
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
39
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
37
40
  </tbody>
38
41
  </table>
39
42
  </div>
@@ -67,14 +70,14 @@
67
70
  <table width="100%" style="min-width:500px">
68
71
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
69
72
  <tbody>
70
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
73
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
71
74
  <tr><td>操作</td><td>operation</td><td></td><td>是</td><td><code>"create"</code></td><td></td></tr>
72
75
  <tr><td>SObject類型</td><td>sObjectType</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
73
- <tr><td></td><td>record</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
76
+ <tr><td>記錄</td><td>record</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
74
77
  <tr><td>外部ID欄位</td><td>externalIdField</td><td>string</td><td>否</td><td><code>""</code></td><td></td></tr>
75
- <tr><td></td><td>emitError</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
76
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
77
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
78
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
79
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
80
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
78
81
  </tbody>
79
82
  </table>
80
83
  </div>
@@ -106,18 +109,19 @@
106
109
  <table width="100%" style="min-width:500px">
107
110
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
108
111
  <tbody>
109
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
112
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
110
113
  <tr><td>操作</td><td>operation</td><td></td><td>是</td><td><code>"insert"</code></td><td></td></tr>
111
114
  <tr><td>SObject類型</td><td>sObjectType</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
115
+ <tr><td>SOQL查詢</td><td>query</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
112
116
  <tr><td>外部ID欄位</td><td>externalIdField</td><td>string</td><td>否</td><td><code>""</code></td><td></td></tr>
113
- <tr><td></td><td>assignmentRuleId</td><td>string</td><td>否</td><td><code>""</code></td><td></td></tr>
114
- <tr><td></td><td>columnDelimiter</td><td></td><td>是</td><td><code>"COMMA"</code></td><td></td></tr>
115
- <tr><td></td><td>lineEnding</td><td></td><td>是</td><td><code>"LF"</code></td><td></td></tr>
116
- <tr><td></td><td>pollInterval</td><td>number [min: 1000]</td><td>是</td><td><code>5000</code></td><td></td></tr>
117
- <tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>是</td><td><code>60000</code></td><td></td></tr>
118
- <tr><td></td><td>emitError</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
119
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>是</td><td><code>true</code></td><td></td></tr>
120
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
117
+ <tr><td>指派規則ID</td><td>assignmentRuleId</td><td>string</td><td>否</td><td><code>""</code></td><td></td></tr>
118
+ <tr><td>欄位分隔符</td><td>columnDelimiter</td><td></td><td>是</td><td><code>"COMMA"</code></td><td></td></tr>
119
+ <tr><td>行結尾</td><td>lineEnding</td><td></td><td>是</td><td><code>"LF"</code></td><td></td></tr>
120
+ <tr><td>輪詢間隔 (ms)</td><td>pollInterval</td><td>number [min: 1000]</td><td>是</td><td><code>5000</code></td><td></td></tr>
121
+ <tr><td>輪詢逾時 (ms)</td><td>pollTimeout</td><td>number [min: 5000]</td><td>是</td><td><code>60000</code></td><td></td></tr>
122
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
123
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
124
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
121
125
  </tbody>
122
126
  </table>
123
127
  </div>
@@ -127,7 +131,17 @@
127
131
  <table width="100%" style="min-width:500px">
128
132
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
129
133
  <tbody>
130
- <tr><td>記錄陣列或SOQL查詢</td><td>payload</td><td></td><td>是</td><td></td></tr>
134
+ <tr><td>記錄陣列、CSV字串、可讀串流(擷取)或觸發器(查詢)</td><td>payload</td><td></td><td>是</td><td>Records array, CSV string, readable stream (ingest) or SOQL string (query)</td></tr>
135
+ </tbody>
136
+ </table>
137
+ </div>
138
+
139
+ <h3>輸出</h3>
140
+ <div style="overflow-x:auto">
141
+ <table width="100%" style="min-width:500px">
142
+ <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
143
+ <tbody>
144
+ <tr><td>查詢:個別記錄。擷取:{ successfulResults, failedResults, unprocessedRecords }</td><td>payload</td><td></td><td>是</td><td>Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }</td></tr>
131
145
  </tbody>
132
146
  </table>
133
147
  </div>
@@ -139,11 +153,11 @@
139
153
  <table width="100%" style="min-width:500px">
140
154
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
141
155
  <tbody>
142
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
156
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
143
157
  <tr><td>SObject類型</td><td>sObjectType</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
144
- <tr><td></td><td>emitError</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
145
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
146
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
158
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
159
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
160
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
147
161
  </tbody>
148
162
  </table>
149
163
  </div>
@@ -153,7 +167,7 @@
153
167
  <table width="100%" style="min-width:500px">
154
168
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
155
169
  <tbody>
156
- <tr><td>輸入酬載</td><td>payload</td><td></td><td>是</td><td></td></tr>
170
+ <tr><td>SObject API名稱(如果提供則覆蓋配置)</td><td>payload</td><td></td><td>是</td><td></td></tr>
157
171
  </tbody>
158
172
  </table>
159
173
  </div>
@@ -163,7 +177,7 @@
163
177
  <table width="100%" style="min-width:500px">
164
178
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
165
179
  <tbody>
166
- <tr><td>SObject描述中繼資料</td><td>payload</td><td>object</td><td>是</td><td></td></tr>
180
+ <tr><td>SObject描述結果,包含欄位、子關聯和記錄類型資訊</td><td>payload</td><td>object</td><td>是</td><td></td></tr>
167
181
  </tbody>
168
182
  </table>
169
183
  </div>
@@ -175,13 +189,14 @@
175
189
  <table width="100%" style="min-width:500px">
176
190
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
177
191
  <tbody>
178
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
192
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
179
193
  <tr><td>頻道</td><td>channelName</td><td>string</td><td>是</td><td><code>""</code></td><td></td></tr>
180
194
  <tr><td>訂閱起點</td><td>subscribeType</td><td></td><td>是</td><td><code>"LATEST"</code></td><td></td></tr>
181
195
  <tr><td>重播ID</td><td>replayId</td><td>string</td><td>否</td><td><code>""</code></td><td></td></tr>
182
196
  <tr><td>批次大小</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>是</td><td><code>100</code></td><td></td></tr>
183
- <tr><td></td><td>emitError</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
184
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
197
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
198
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
199
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
185
200
  </tbody>
186
201
  </table>
187
202
  </div>
@@ -199,19 +214,61 @@
199
214
  </table>
200
215
  </div>
201
216
  </script>
202
- <script type="text/html" data-help-name="salesforce-apex">
203
- <p>呼叫Salesforce Apex REST端點。</p>
217
+ <script type="text/html" data-help-name="salesforce-apex-invocation">
218
+ <p>呼叫Salesforce組織中現有的Apex REST端點或Invocable Action。</p>
204
219
  <h3>屬性</h3>
205
220
  <div style="overflow-x:auto">
206
221
  <table width="100%" style="min-width:500px">
207
222
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
208
223
  <tbody>
209
- <tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
224
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
225
+ <tr><td>類型</td><td>apexType</td><td></td><td>是</td><td><code>"rest"</code></td><td></td></tr>
210
226
  <tr><td>方法</td><td>method</td><td></td><td>是</td><td><code>"POST"</code></td><td></td></tr>
211
- <tr><td>路徑</td><td>path</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
212
- <tr><td></td><td>emitError</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
213
- <tr><td></td><td>emitComplete</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
214
- <tr><td></td><td>emitStatus</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
227
+ <tr><td>端點</td><td>path</td><td>TypedInput</td><td>是</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
228
+ <tr><td>動作</td><td>actionName</td><td>string</td><td>是</td><td><code>""</code></td><td></td></tr>
229
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
230
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
231
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
232
+ </tbody>
233
+ </table>
234
+ </div>
235
+
236
+ <h3>輸入</h3>
237
+ <div style="overflow-x:auto">
238
+ <table width="100%" style="min-width:500px">
239
+ <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
240
+ <tbody>
241
+ <tr><td>POST/PUT/PATCH的請求主體,GET/DELETE時忽略</td><td>payload</td><td></td><td>是</td><td></td></tr>
242
+ </tbody>
243
+ </table>
244
+ </div>
245
+
246
+ <h3>輸出</h3>
247
+ <div style="overflow-x:auto">
248
+ <table width="100%" style="min-width:500px">
249
+ <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
250
+ <tbody>
251
+ <tr><td>Apex端點回應</td><td>payload</td><td></td><td>是</td><td></td></tr>
252
+ </tbody>
253
+ </table>
254
+ </div>
255
+ </script>
256
+ <script type="text/html" data-help-name="salesforce-apex-code">
257
+ <p>在Salesforce組織上部署並執行自訂Apex程式碼。支援Invocable和REST類型。</p>
258
+ <h3>屬性</h3>
259
+ <div style="overflow-x:auto">
260
+ <table width="100%" style="min-width:500px">
261
+ <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th>預設值</th><th style="width:35%">描述</th></tr></thead>
262
+ <tbody>
263
+ <tr><td>連線</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>是</td><td></td><td>Reference to salesforce-connection</td></tr>
264
+ <tr><td>類型</td><td>apexType</td><td></td><td>是</td><td><code>"invocable"</code></td><td></td></tr>
265
+ <tr><td>類別名稱</td><td>className</td><td>string</td><td>是</td><td><code>""</code></td><td></td></tr>
266
+ <tr><td>URL對應</td><td>urlMapping</td><td>string</td><td>是</td><td><code>""</code></td><td></td></tr>
267
+ <tr><td>HTTP 方法</td><td>httpMethod</td><td></td><td>是</td><td><code>"HttpPost"</code></td><td></td></tr>
268
+ <tr><td>Apex程式碼</td><td>code</td><td>string</td><td>是</td><td><code>""</code></td><td></td></tr>
269
+ <tr><td></td><td>errorPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
270
+ <tr><td></td><td>completePort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
271
+ <tr><td></td><td>statusPort</td><td>boolean</td><td>是</td><td><code>false</code></td><td></td></tr>
215
272
  </tbody>
216
273
  </table>
217
274
  </div>
@@ -221,7 +278,7 @@
221
278
  <table width="100%" style="min-width:500px">
222
279
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
223
280
  <tbody>
224
- <tr><td>請求主體</td><td>payload</td><td></td><td>是</td><td></td></tr>
281
+ <tr><td>以JSON字串形式傳遞給Apex方法的輸入資料</td><td>payload</td><td></td><td>是</td><td></td></tr>
225
282
  </tbody>
226
283
  </table>
227
284
  </div>
@@ -231,7 +288,7 @@
231
288
  <table width="100%" style="min-width:500px">
232
289
  <thead><tr><th>標籤</th><th>屬性</th><th>類型</th><th>必填</th><th style="width:35%">描述</th></tr></thead>
233
290
  <tbody>
234
- <tr><td>Apex回應</td><td>payload</td><td></td><td>是</td><td></td></tr>
291
+ <tr><td>Apex執行回應</td><td>payload</td><td></td><td>是</td><td></td></tr>
235
292
  </tbody>
236
293
  </table>
237
294
  </div>
@@ -1,10 +1,45 @@
1
1
  {
2
- "salesforce-apex": {
2
+ "salesforce-apex-code": {
3
3
  "configs": {
4
4
  "name": "名稱",
5
- "connection": "Connection",
5
+ "connection": "連線",
6
+ "apexType": "類型",
7
+ "className": "類別名稱",
8
+ "urlMapping": "URL對應",
9
+ "httpMethod": "HTTP 方法",
10
+ "code": "Apex程式碼"
11
+ },
12
+ "toggles": {
13
+ "validateInput": "驗證輸入",
14
+ "validateOutput": "驗證輸出",
15
+ "errorPort": "錯誤端口",
16
+ "completePort": "完成端口",
17
+ "statusPort": "狀態端口"
18
+ },
19
+ "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
20
+ "label": "Apex Code",
21
+ "description": "在Salesforce組織上部署並執行自訂Apex程式碼。支援Invocable和REST類型。",
22
+ "inputLabels": "輸入",
23
+ "outputLabels": [
24
+ "回應"
25
+ ],
26
+ "input": {
27
+ "payload": "以JSON字串形式傳遞給Apex方法的輸入資料"
28
+ },
29
+ "outputs": [
30
+ {
31
+ "payload": "Apex執行回應"
32
+ }
33
+ ]
34
+ },
35
+ "salesforce-apex-invocation": {
36
+ "configs": {
37
+ "name": "名稱",
38
+ "connection": "連線",
39
+ "apexType": "類型",
6
40
  "method": "方法",
7
- "path": "路徑"
41
+ "path": "端點",
42
+ "actionName": "動作"
8
43
  },
9
44
  "toggles": {
10
45
  "validateInput": "驗證輸入",
@@ -14,28 +49,34 @@
14
49
  "statusPort": "狀態端口"
15
50
  },
16
51
  "$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
17
- "label": "Apex",
18
- "description": "呼叫Salesforce Apex REST端點。",
52
+ "label": "Apex Invocation",
53
+ "description": "呼叫Salesforce組織中現有的Apex REST端點或Invocable Action。",
19
54
  "inputLabels": "請求",
20
55
  "outputLabels": [
21
56
  "回應"
22
57
  ],
23
58
  "input": {
24
- "payload": "請求主體"
59
+ "payload": "POST/PUT/PATCH的請求主體,GET/DELETE時忽略"
25
60
  },
26
61
  "outputs": [
27
62
  {
28
- "payload": "Apex回應"
63
+ "payload": "Apex端點回應"
29
64
  }
30
65
  ]
31
66
  },
32
67
  "salesforce-bulk": {
33
68
  "configs": {
34
69
  "name": "名稱",
35
- "connection": "Connection",
70
+ "connection": "連線",
36
71
  "operation": "操作",
37
72
  "sObjectType": "SObject類型",
38
- "externalIdField": "外部ID欄位"
73
+ "query": "SOQL查詢",
74
+ "externalIdField": "外部ID欄位",
75
+ "assignmentRuleId": "指派規則ID",
76
+ "columnDelimiter": "欄位分隔符",
77
+ "lineEnding": "行結尾",
78
+ "pollInterval": "輪詢間隔 (ms)",
79
+ "pollTimeout": "輪詢逾時 (ms)"
39
80
  },
40
81
  "toggles": {
41
82
  "validateInput": "驗證輸入",
@@ -53,11 +94,11 @@
53
94
  "工作完成"
54
95
  ],
55
96
  "input": {
56
- "payload": "記錄陣列或SOQL查詢"
97
+ "payload": "記錄陣列、CSV字串、可讀串流(擷取)或觸發器(查詢)"
57
98
  },
58
99
  "outputs": [
59
100
  {
60
- "payload": "批次操作結果"
101
+ "payload": "查詢:個別記錄。擷取:{ successfulResults, failedResults, unprocessedRecords }"
61
102
  }
62
103
  ]
63
104
  },
@@ -88,7 +129,7 @@
88
129
  "salesforce-describe": {
89
130
  "configs": {
90
131
  "name": "名稱",
91
- "connection": "Connection",
132
+ "connection": "連線",
92
133
  "sObjectType": "SObject類型"
93
134
  },
94
135
  "toggles": {
@@ -106,21 +147,22 @@
106
147
  "SObject中繼資料"
107
148
  ],
108
149
  "input": {
109
- "payload": "輸入酬載"
150
+ "payload": "SObject API名稱(如果提供則覆蓋配置)"
110
151
  },
111
152
  "outputs": [
112
153
  {
113
- "payload": "SObject描述中繼資料"
154
+ "payload": "SObject描述結果,包含欄位、子關聯和記錄類型資訊"
114
155
  }
115
156
  ]
116
157
  },
117
158
  "salesforce-dml": {
118
159
  "configs": {
119
160
  "name": "名稱",
120
- "connection": "Connection",
161
+ "connection": "連線",
121
162
  "operation": "操作",
122
163
  "sObjectType": "SObject類型",
123
- "externalIdField": "外部ID欄位"
164
+ "externalIdField": "外部ID欄位",
165
+ "record": "記錄"
124
166
  },
125
167
  "toggles": {
126
168
  "validateInput": "驗證輸入",
@@ -148,7 +190,7 @@
148
190
  "salesforce-soql": {
149
191
  "configs": {
150
192
  "name": "名稱",
151
- "connection": "Connection",
193
+ "connection": "連線",
152
194
  "query": "查詢"
153
195
  },
154
196
  "toggles": {
@@ -179,7 +221,7 @@
179
221
  "salesforce-streaming": {
180
222
  "configs": {
181
223
  "name": "名稱",
182
- "connection": "Connection",
224
+ "connection": "連線",
183
225
  "channelName": "頻道",
184
226
  "subscribeType": "訂閱起點",
185
227
  "replayId": "重播ID",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonsae/node-red-salesforce",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Salesforce nodes for Node-RED built with @bonsae/nrg",
5
5
  "author": "Allan Oricil <allanoricil@duck.com>",
6
6
  "license": "BUSL-1.1",
@@ -30,7 +30,7 @@
30
30
  ]
31
31
  },
32
32
  "dependencies": {
33
- "@bonsae/nrg": "^0.14.0",
33
+ "@bonsae/nrg": "^0.15.1",
34
34
  "jsforce": "^3.10.14",
35
35
  "salesforce-pubsub-api-client": "^5.5.2"
36
36
  },
@@ -0,0 +1 @@
1
+ import{defineNode as I,__setSchemas as H,__setForms as V,registerTypes as B}from"/nrg/assets/nrg-client.js";import{defineComponent as S,ref as R,onMounted as G,onUnmounted as Q,resolveComponent as v,openBlock as u,createElementBlock as y,Fragment as T,createElementVNode as t,createVNode as a,createTextVNode as q,normalizeStyle as Z,toDisplayString as N,createCommentVNode as x,computed as P,watch as k,createBlock as U,normalizeClass as O}from"/nrg/assets/vue.esm-browser.prod.js";const W={"salesforce-connection":{type:"salesforce-connection",category:"config",configSchema:{$id:"salesforce-connection:config",type:"object",required:["name","loginUrl","clientId","apiVersion"],properties:{name:{default:"",type:"string"},loginUrl:{default:"https://login.salesforce.com","x-nrg-form":{icon:"globe"},type:"string"},clientId:{default:"","x-nrg-form":{icon:"key"},type:"string"},apiVersion:{default:"62.0","x-nrg-form":{icon:"code-fork"},anyOf:[{const:"62.0",type:"string"},{const:"61.0",type:"string"},{const:"60.0",type:"string"},{const:"59.0",type:"string"},{const:"58.0",type:"string"},{const:"57.0",type:"string"},{const:"56.0",type:"string"},{const:"55.0",type:"string"}]},callbackUrl:{default:"","x-nrg-form":{icon:"exchange"},type:"string"}}},credentialsSchema:{$id:"salesforce-connection:credentials",type:"object",required:["accessToken","refreshToken","instanceUrl"],properties:{accessToken:{default:"",format:"password",type:"string"},refreshToken:{default:"",format:"password",type:"string"},instanceUrl:{default:"",type:"string"}}},settingsSchema:null,defaults:{name:{required:!1,value:""},loginUrl:{required:!1,value:"https://login.salesforce.com"},clientId:{required:!1,value:""},apiVersion:{required:!1,value:"62.0"},callbackUrl:{required:!1,value:""}},credentials:{accessToken:{required:!1,type:"password",value:""},refreshToken:{required:!1,type:"password",value:""},instanceUrl:{required:!1,type:"text",value:""}},icon:"salesforce-connection.png",inputSchema:null,outputsSchema:null},"salesforce-soql":{type:"salesforce-soql",category:"salesforce",configSchema:{$id:"salesforce-soql:config",type:"object",required:["name","connection","query","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},query:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"search",typedInputTypes:["str","msg","flow","global"]}},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},query:{required:!1,value:{type:"str",value:""}},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-soql.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-soql:input",type:"object",required:["payload"],properties:{payload:{}}},outputsSchema:{$id:"salesforce-soql:output",type:"object",required:["payload","totalSize","done"],properties:{payload:{type:"array",items:{}},totalSize:{type:"number"},done:{type:"boolean"}}}},"salesforce-dml":{type:"salesforce-dml",category:"salesforce",configSchema:{$id:"salesforce-dml:config",if:{type:"object",required:["operation"],properties:{operation:{const:"upsert",type:"string"}}},then:{type:"object",required:["externalIdField"],properties:{externalIdField:{minLength:1,type:"string"}}},errorMessage:{properties:{externalIdField:"External ID Field is required for upsert operations"}},type:"object",required:["name","connection","operation","sObjectType","record","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},operation:{default:"create","x-nrg-form":{icon:"pencil"},anyOf:[{const:"create",type:"string"},{const:"read",type:"string"},{const:"update",type:"string"},{const:"delete",type:"string"},{const:"upsert",type:"string"}]},sObjectType:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"cube",typedInputTypes:["str","msg"]}},record:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"file-code-o",typedInputTypes:["json","msg"]}},externalIdField:{default:"","x-nrg-form":{icon:"key"},type:"string"},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},operation:{required:!1,value:"create"},sObjectType:{required:!1,value:{type:"str",value:""}},record:{required:!1,value:{type:"str",value:""}},externalIdField:{required:!1,value:""},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-dml.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-dml:input",type:"object",required:["payload"],properties:{payload:{}}},outputsSchema:{$id:"salesforce-dml:output",type:"object",required:["payload"],properties:{payload:{}}}},"salesforce-bulk":{type:"salesforce-bulk",category:"salesforce",configSchema:{$id:"salesforce-bulk:config",if:{type:"object",required:["operation"],properties:{operation:{const:"upsert",type:"string"}}},then:{type:"object",required:["externalIdField"],properties:{externalIdField:{minLength:1,type:"string"}}},errorMessage:{properties:{externalIdField:"External ID Field is required for upsert operations"}},type:"object",required:["name","connection","operation","sObjectType","query","columnDelimiter","lineEnding","pollInterval","pollTimeout","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},operation:{default:"insert","x-nrg-form":{icon:"database"},anyOf:[{const:"insert",type:"string"},{const:"update",type:"string"},{const:"upsert",type:"string"},{const:"delete",type:"string"},{const:"hardDelete",type:"string"},{const:"query",type:"string"}]},sObjectType:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"cube",typedInputTypes:["str","msg"]}},query:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"search",typedInputTypes:["str","msg","jsonata"]}},externalIdField:{default:"","x-nrg-form":{icon:"key"},type:"string"},assignmentRuleId:{default:"","x-nrg-form":{icon:"gavel"},type:"string"},columnDelimiter:{default:"COMMA","x-nrg-form":{icon:"columns"},anyOf:[{const:"COMMA",type:"string"},{const:"TAB",type:"string"},{const:"PIPE",type:"string"},{const:"SEMICOLON",type:"string"},{const:"CARET",type:"string"},{const:"BACKQUOTE",type:"string"}]},lineEnding:{default:"LF","x-nrg-form":{icon:"level-down"},anyOf:[{const:"LF",type:"string"},{const:"CRLF",type:"string"}]},pollInterval:{default:5e3,minimum:1e3,"x-nrg-form":{icon:"clock-o"},type:"number"},pollTimeout:{default:6e4,minimum:5e3,"x-nrg-form":{icon:"hourglass"},type:"number"},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},operation:{required:!1,value:"insert"},sObjectType:{required:!1,value:{type:"str",value:""}},query:{required:!1,value:{type:"str",value:""}},externalIdField:{required:!1,value:""},assignmentRuleId:{required:!1,value:""},columnDelimiter:{required:!1,value:"COMMA"},lineEnding:{required:!1,value:"LF"},pollInterval:{required:!1,value:5e3},pollTimeout:{required:!1,value:6e4},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-bulk.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-bulk:input",type:"object",required:["payload"],properties:{payload:{description:"Records array, CSV string, readable stream (ingest) or SOQL string (query)"}}},outputsSchema:{$id:"salesforce-bulk:output",type:"object",required:["payload"],properties:{payload:{description:"Query: individual record. Ingest: { successfulResults, failedResults, unprocessedRecords }"}}}},"salesforce-describe":{type:"salesforce-describe",category:"salesforce",configSchema:{$id:"salesforce-describe:config",type:"object",required:["name","connection","sObjectType","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},sObjectType:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"cube",typedInputTypes:["str","msg"]}},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},sObjectType:{required:!1,value:{type:"str",value:""}},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-describe.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-describe:input",type:"object",required:["payload"],properties:{payload:{}}},outputsSchema:{$id:"salesforce-describe:output",type:"object",required:["payload"],properties:{payload:{type:"object",required:["name","fields","childRelationships","recordTypeInfos"],properties:{name:{type:"string"},fields:{type:"array",items:{}},childRelationships:{type:"array",items:{}},recordTypeInfos:{type:"array",items:{}}}}}}},"salesforce-streaming":{type:"salesforce-streaming",category:"salesforce",configSchema:{$id:"salesforce-streaming:config",if:{type:"object",required:["subscribeType"],properties:{subscribeType:{const:"CUSTOM",type:"string"}}},then:{type:"object",required:["replayId"],properties:{replayId:{minLength:1,type:"string"}}},errorMessage:{properties:{replayId:"Replay ID is required when Subscribe Type is CUSTOM"}},type:"object",required:["name","connection","channelName","subscribeType","numRequested","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},channelName:{default:"","x-nrg-form":{icon:"rss"},type:"string"},subscribeType:{default:"LATEST","x-nrg-form":{icon:"history"},anyOf:[{const:"LATEST",type:"string"},{const:"EARLIEST",type:"string"},{const:"CUSTOM",type:"string"}]},replayId:{default:"","x-nrg-form":{icon:"bookmark"},type:"string"},numRequested:{default:100,minimum:1,maximum:100,"x-nrg-form":{icon:"sort-numeric-asc"},type:"number"},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},channelName:{required:!1,value:""},subscribeType:{required:!1,value:"LATEST"},replayId:{required:!1,value:""},numRequested:{required:!1,value:100},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-streaming.png",inputs:0,outputs:1,inputSchema:null,outputsSchema:{$id:"salesforce-streaming:output",type:"object",required:["payload","replayId","channel","topic"],properties:{payload:{},replayId:{},channel:{type:"string"},topic:{type:"string"}}}},"salesforce-apex-invocation":{type:"salesforce-apex-invocation",category:"salesforce",configSchema:{$id:"salesforce-apex-invocation:config",type:"object",required:["name","connection","apexType","method","path","actionName","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},apexType:{default:"rest","x-nrg-form":{icon:"cog"},anyOf:[{const:"rest",type:"string"},{const:"invocable",type:"string"}]},method:{default:"POST","x-nrg-form":{icon:"random"},anyOf:[{const:"GET",type:"string"},{const:"POST",type:"string"},{const:"PUT",type:"string"},{const:"PATCH",type:"string"},{const:"DELETE",type:"string"}]},path:{description:"Represents a Node-RED TypedInput value and its type.",default:{type:"str",value:""},type:"object",required:["value","type"],properties:{value:{description:"The actual value entered or selected.",default:"",anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},type:{description:"The type of the value (string, number, message property, etc.)",default:"str",anyOf:[{const:"msg",type:"string"},{const:"flow",type:"string"},{const:"global",type:"string"},{const:"str",type:"string"},{const:"num",type:"string"},{const:"bool",type:"string"},{const:"json",type:"string"},{const:"bin",type:"string"},{const:"re",type:"string"},{const:"jsonata",type:"string"},{const:"date",type:"string"},{const:"env",type:"string"},{const:"node",type:"string"},{const:"cred",type:"string"}]}},"x-nrg-typed-input":!0,"x-nrg-form":{icon:"link",typedInputTypes:["str","msg"]}},actionName:{default:"","x-nrg-form":{icon:"bolt"},type:"string"},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:null,defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},apexType:{required:!1,value:"rest"},method:{required:!1,value:"POST"},path:{required:!1,value:{type:"str",value:""}},actionName:{required:!1,value:""},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-apex-invocation.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-apex-invocation:input",type:"object",required:["payload"],properties:{payload:{}}},outputsSchema:{$id:"salesforce-apex-invocation:output",type:"object",required:["payload"],properties:{payload:{}}}},"salesforce-apex-code":{type:"salesforce-apex-code",category:"salesforce",configSchema:{$id:"salesforce-apex-code:config",type:"object",required:["name","connection","apexType","className","urlMapping","httpMethod","code","errorPort","completePort","statusPort"],properties:{name:{default:"","x-nrg-form":{icon:"tag"},type:"string"},connection:{description:"Reference to salesforce-connection",format:"node-id",type:"string","x-nrg-node-type":"salesforce-connection","x-nrg-form":{icon:"cloud"}},apexType:{default:"invocable","x-nrg-form":{icon:"cog"},anyOf:[{const:"invocable",type:"string"},{const:"rest",type:"string"}]},className:{default:"","x-nrg-form":{icon:"file-code-o"},type:"string"},urlMapping:{default:"","x-nrg-form":{icon:"link"},type:"string"},httpMethod:{default:"HttpPost","x-nrg-form":{icon:"random"},anyOf:[{const:"HttpGet",type:"string"},{const:"HttpPost",type:"string"},{const:"HttpPut",type:"string"},{const:"HttpPatch",type:"string"},{const:"HttpDelete",type:"string"}]},code:{default:"","x-nrg-form":{editorLanguage:"java"},type:"string"},errorPort:{default:!1,type:"boolean"},completePort:{default:!1,type:"boolean"},statusPort:{default:!1,type:"boolean"}}},credentialsSchema:null,settingsSchema:{$id:"salesforce-apex-code:settings",type:"object",required:["classPrefix"],properties:{classPrefix:{default:"NRG_",type:"string"}}},defaults:{name:{required:!1,value:""},connection:{required:!1,type:"salesforce-connection"},apexType:{required:!1,value:"invocable"},className:{required:!1,value:""},urlMapping:{required:!1,value:""},httpMethod:{required:!1,value:"HttpPost"},code:{required:!1,value:""},errorPort:{required:!1,value:!1},completePort:{required:!1,value:!1},statusPort:{required:!1,value:!1},validateInput:{required:!1,value:!1},validateOutput:{required:!1,value:!1}},color:"#FFFFFF",icon:"salesforce-apex-code.png",inputs:1,outputs:1,inputSchema:{$id:"salesforce-apex-code:input",type:"object",required:["payload"],properties:{payload:{}}},outputsSchema:{$id:"salesforce-apex-code:output",type:"object",required:["payload"],properties:{payload:{}}}}},K={class:"form-row"},J={class:"form-row"},X={class:"form-row"},Y={class:"form-row"},_={class:"form-row"},ee={class:"form-row",style:{border:"1px solid var(--red-ui-primary-border-color, #ddd)","border-radius":"4px",padding:"12px","margin-top":"8px"}},te={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},ne={style:{"font-weight":"500"}},oe={style:{display:"flex",gap:"8px"}},ae=["disabled"],C=S({__name:"salesforce-connection",props:{node:{}},setup(e){const p=R("unknown"),g=R(""),l=R(!1);async function f(){if(!e.node.id){p.value="disconnected";return}try{const r=await $.ajax({url:`salesforce/auth/status/${e.node.id}`,type:"GET",dataType:"json"});p.value=r.authenticated?"connected":"disconnected",r.instanceUrl&&(g.value=r.instanceUrl)}catch{p.value="disconnected"}}async function b(){if(!e.node.loginUrl||!e.node.clientId){RED.notify("Please fill in Login URL and Client ID before authorizing.","warning");return}l.value=!0;try{const r=await $.ajax({url:"salesforce/auth/start",type:"POST",contentType:"application/json",data:JSON.stringify({nodeId:e.node.id,loginUrl:e.node.loginUrl,clientId:e.node.clientId,callbackUrl:e.node.callbackUrl||void 0}),dataType:"json"});window.open(r.authorizationUrl,"salesforce-auth","width=600,height=700,menubar=no,toolbar=no")}catch{RED.notify("Failed to start authorization. Check the logs.","error")}finally{l.value=!1}}function s(r){var d;((d=r.data)==null?void 0:d.type)==="salesforce-auth-success"&&r.data.nodeId===e.node.id&&(p.value="connected",r.data.instanceUrl&&(g.value=r.data.instanceUrl),e.node.credentials||(e.node.credentials={}),e.node.credentials.accessToken=r.data.accessToken,e.node.credentials.refreshToken=r.data.refreshToken,e.node.credentials.instanceUrl=r.data.instanceUrl,RED.notify("Salesforce authorization successful!","success"))}function i(){g.value&&window.open(g.value,"_blank")}G(()=>{window.addEventListener("message",s),f()}),Q(()=>{window.removeEventListener("message",s)});const n=[{value:"62.0",label:"62.0"},{value:"61.0",label:"61.0"},{value:"60.0",label:"60.0"},{value:"59.0",label:"59.0"},{value:"58.0",label:"58.0"},{value:"57.0",label:"57.0"},{value:"56.0",label:"56.0"},{value:"55.0",label:"55.0"}];return(r,d)=>{const o=v("NodeRedInput"),c=v("NodeRedSelectInput");return u(),y(T,null,[t("div",K,[a(o,{value:e.node.name,"onUpdate:value":d[0]||(d[0]=m=>e.node.name=m),label:"Name",icon:"tag"},null,8,["value"])]),t("div",J,[a(o,{value:e.node.loginUrl,"onUpdate:value":d[1]||(d[1]=m=>e.node.loginUrl=m),label:"Login URL",icon:"globe"},null,8,["value"])]),t("div",X,[a(o,{value:e.node.clientId,"onUpdate:value":d[2]||(d[2]=m=>e.node.clientId=m),label:"Client ID",icon:"key"},null,8,["value"])]),t("div",Y,[a(c,{value:e.node.apiVersion,"onUpdate:value":d[3]||(d[3]=m=>e.node.apiVersion=m),label:"API Version",icon:"code-fork",options:n},null,8,["value"])]),t("div",_,[a(o,{value:e.node.callbackUrl,"onUpdate:value":d[4]||(d[4]=m=>e.node.callbackUrl=m),label:"Callback URL",icon:"exchange"},null,8,["value"]),d[5]||(d[5]=t("div",{class:"form-tips",style:{"max-width":"100%",width:"100%","box-sizing":"border-box","margin-top":"4px"}},[t("i",{class:"fa fa-info-circle"}),q(" Optional. Override the auto-detected callback URL for reverse proxy setups. ")],-1))]),t("div",ee,[t("div",te,[t("i",{class:"fa fa-circle",style:Z({color:p.value==="connected"?"#22c55e":p.value==="disconnected"?"#ef4444":"#9ca3af",fontSize:"10px"})},null,4),t("span",ne,[p.value==="connected"?(u(),y(T,{key:0},[q(" Connected to "+N(g.value),1)],64)):p.value==="disconnected"?(u(),y(T,{key:1},[q(" Not Connected ")],64)):(u(),y(T,{key:2},[q(" Checking... ")],64))])]),t("div",oe,[t("button",{class:"red-ui-button",disabled:l.value,style:{flex:"1"},onClick:b},[d[6]||(d[6]=t("i",{class:"fa fa-sign-in"},null,-1)),q(" "+N(l.value?"Opening Salesforce...":p.value==="connected"?"Re-authorize":"Authorize with Salesforce"),1)],8,ae),p.value==="connected"&&g.value?(u(),y("button",{key:0,class:"red-ui-button",style:{flex:"1"},onClick:i},[...d[7]||(d[7]=[t("i",{class:"fa fa-external-link"},null,-1),q(" Open Org ",-1)])])):x("",!0)])])],64)}}}),le={class:"form-row"},se={class:"form-row"},re={class:"form-row"},ie={class:"form-row"},de={class:"form-row"},ce={key:0,class:"form-row"},E=S({__name:"salesforce-dml",props:{node:{}},setup(e){const p=[{value:"create",label:"create"},{value:"read",label:"read"},{value:"update",label:"update"},{value:"delete",label:"delete"},{value:"upsert",label:"upsert"}];return(g,l)=>{const f=v("NodeRedInput"),b=v("NodeRedConfigInput"),s=v("NodeRedSelectInput"),i=v("NodeRedTypedInput");return u(),y(T,null,[t("div",le,[a(f,{value:e.node.name,"onUpdate:value":l[0]||(l[0]=n=>e.node.name=n),label:"Name",icon:"tag"},null,8,["value"])]),t("div",se,[a(b,{value:e.node.connection,type:"salesforce-connection",node:e.node,"prop-name":"connection",label:"Connection",icon:"cloud","onUpdate:value":l[1]||(l[1]=n=>e.node.connection=n)},null,8,["value","node"])]),t("div",re,[a(s,{value:e.node.operation,"onUpdate:value":l[2]||(l[2]=n=>e.node.operation=n),label:"Operation",icon:"pencil",options:p},null,8,["value"])]),t("div",ie,[a(i,{value:e.node.sObjectType,label:"SObject Type",icon:"cube",types:["str","msg"],"onUpdate:value":l[3]||(l[3]=n=>e.node.sObjectType=n)},null,8,["value"])]),t("div",de,[a(i,{value:e.node.record,label:"Record",icon:"file-code-o",types:["json","msg"],"onUpdate:value":l[4]||(l[4]=n=>e.node.record=n)},null,8,["value"])]),e.node.operation==="upsert"?(u(),y("div",ce,[a(f,{value:e.node.externalIdField,"onUpdate:value":l[5]||(l[5]=n=>e.node.externalIdField=n),label:"External ID Field",icon:"key"},null,8,["value"])])):x("",!0)],64)}}}),ue={class:"form-row"},pe={class:"form-row"},fe={class:"form-row"},ye={key:0,class:"form-row"},ge={key:1,class:"form-row"},me={key:2,class:"form-row"},ve={key:3,class:"form-row"},be={class:"form-row"},xe={class:"form-row"},he={class:"form-row"},Te={class:"form-row"},D=S({__name:"salesforce-bulk",props:{node:{}},setup(e){const p=()=>e.node.operation!=="query",g=[{value:"insert",label:"Insert"},{value:"update",label:"Update"},{value:"upsert",label:"Upsert"},{value:"delete",label:"Delete"},{value:"hardDelete",label:"Hard Delete"},{value:"query",label:"Query"}],l=[{value:"COMMA",label:"Comma (,)"},{value:"TAB",label:"Tab"},{value:"PIPE",label:"Pipe (|)"},{value:"SEMICOLON",label:"Semicolon (;)"},{value:"CARET",label:"Caret (^)"},{value:"BACKQUOTE",label:"Backquote (`)"}],f=[{value:"LF",label:"LF (Unix)"},{value:"CRLF",label:"CRLF (Windows)"}];return(b,s)=>{const i=v("NodeRedInput"),n=v("NodeRedConfigInput"),r=v("NodeRedSelectInput"),d=v("NodeRedTypedInput");return u(),y(T,null,[t("div",ue,[a(i,{value:e.node.name,"onUpdate:value":s[0]||(s[0]=o=>e.node.name=o),label:"Name",icon:"tag"},null,8,["value"])]),t("div",pe,[a(n,{value:e.node.connection,type:"salesforce-connection",node:e.node,"prop-name":"connection",label:"Connection",icon:"cloud","onUpdate:value":s[1]||(s[1]=o=>e.node.connection=o)},null,8,["value","node"])]),t("div",fe,[a(r,{value:e.node.operation,"onUpdate:value":s[2]||(s[2]=o=>e.node.operation=o),label:"Operation",icon:"database",options:g},null,8,["value"])]),p()?(u(),y("div",ye,[a(d,{value:e.node.sObjectType,label:"SObject Type",icon:"cube",types:["str","msg"],"onUpdate:value":s[3]||(s[3]=o=>e.node.sObjectType=o)},null,8,["value"])])):x("",!0),p()?x("",!0):(u(),y("div",ge,[a(d,{value:e.node.query,label:"SOQL Query",icon:"search",types:["str","msg","jsonata"],"onUpdate:value":s[4]||(s[4]=o=>e.node.query=o)},null,8,["value"])])),e.node.operation==="upsert"?(u(),y("div",me,[a(i,{value:e.node.externalIdField,"onUpdate:value":s[5]||(s[5]=o=>e.node.externalIdField=o),label:"External ID Field",icon:"key"},null,8,["value"])])):x("",!0),p()&&e.node.operation!=="delete"&&e.node.operation!=="hardDelete"?(u(),y("div",ve,[a(i,{value:e.node.assignmentRuleId,"onUpdate:value":s[6]||(s[6]=o=>e.node.assignmentRuleId=o),label:"Assignment Rule ID",icon:"gavel"},null,8,["value"])])):x("",!0),t("div",be,[a(r,{value:e.node.columnDelimiter,"onUpdate:value":s[7]||(s[7]=o=>e.node.columnDelimiter=o),label:"Column Delimiter",icon:"columns",options:l},null,8,["value"])]),t("div",xe,[a(r,{value:e.node.lineEnding,"onUpdate:value":s[8]||(s[8]=o=>e.node.lineEnding=o),label:"Line Ending",icon:"level-down",options:f},null,8,["value"])]),t("div",he,[a(i,{value:e.node.pollInterval,"onUpdate:value":s[9]||(s[9]=o=>e.node.pollInterval=o),label:"Poll Interval (ms)",icon:"clock-o",type:"number"},null,8,["value"])]),t("div",Te,[a(i,{value:e.node.pollTimeout,"onUpdate:value":s[10]||(s[10]=o=>e.node.pollTimeout=o),label:"Poll Timeout (ms)",icon:"hourglass",type:"number"},null,8,["value"])])],64)}}}),qe=3e4,j=new Map;async function Ie(e,p=!1){if(!p){const f=j.get(e);if(f&&Date.now()-f.timestamp<qe)return f.data}const g=await fetch(`salesforce/list-streaming-channels/${e}`);if(!g.ok)throw new Error(`Failed to fetch channels: ${g.statusText}`);const l=await g.json();return j.set(e,{data:l,timestamp:Date.now()}),l}function Re(e){j.delete(e)}const Pe={class:"form-row"},Se={class:"form-row"},we={class:"form-row"},Ne={style:{display:"flex",gap:"4px","align-items":"flex-end"}},$e={style:{flex:"1"}},ke={key:1,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},Ue={key:2,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},Oe=["disabled"],je={class:"form-row"},Fe={key:0,class:"form-row"},Ce={class:"form-row"},M=S({__name:"salesforce-streaming",props:{node:{}},setup(e){const p=[{value:"LATEST",label:"Latest"},{value:"EARLIEST",label:"Earliest"},{value:"CUSTOM",label:"Custom (Replay ID)"}],g=R([]),l=R(!1),f=P(()=>g.value.map(i=>({value:i.value,label:i.label})));async function b(i=!1){if(e.node.connection){l.value=!0;try{g.value=await Ie(e.node.connection,i)}catch{g.value=[]}finally{l.value=!1}}}function s(){e.node.connection&&(Re(e.node.connection),b(!0))}return k(()=>e.node.connection,()=>b(),{immediate:!0}),(i,n)=>{const r=v("NodeRedInput"),d=v("NodeRedConfigInput"),o=v("NodeRedSelectInput");return u(),y(T,null,[t("div",Pe,[a(r,{value:e.node.name,"onUpdate:value":n[0]||(n[0]=c=>e.node.name=c),label:"Name",icon:"tag"},null,8,["value"])]),t("div",Se,[a(d,{value:e.node.connection,type:"salesforce-connection",node:e.node,"prop-name":"connection",label:"Connection",icon:"cloud","onUpdate:value":n[1]||(n[1]=c=>e.node.connection=c)},null,8,["value","node"])]),t("div",we,[t("div",Ne,[t("div",$e,[f.value.length>0?(u(),U(o,{key:f.value.length,value:e.node.channelName,"onUpdate:value":n[2]||(n[2]=c=>e.node.channelName=c),label:"Channel",icon:"rss",options:f.value},null,8,["value","options"])):l.value?(u(),y("div",ke,[...n[6]||(n[6]=[t("i",{class:"fa fa-spinner fa-spin"},null,-1),q(" Loading channels... ",-1)])])):(u(),y("div",Ue," No channels found. Select a connection first. "))]),t("button",{class:"red-ui-button",style:{height:"34px","margin-bottom":"0"},disabled:l.value,onClick:s},[t("i",{class:O(["fa fa-refresh",{"fa-spin":l.value}])},null,2)],8,Oe)])]),t("div",je,[a(o,{value:e.node.subscribeType,"onUpdate:value":n[3]||(n[3]=c=>e.node.subscribeType=c),label:"Subscribe Type",icon:"history",options:p},null,8,["value"])]),e.node.subscribeType==="CUSTOM"?(u(),y("div",Fe,[a(r,{value:e.node.replayId,"onUpdate:value":n[4]||(n[4]=c=>e.node.replayId=c),label:"Replay ID",icon:"bookmark"},null,8,["value"])])):x("",!0),t("div",Ce,[a(r,{value:e.node.numRequested,"onUpdate:value":n[5]||(n[5]=c=>e.node.numRequested=c),label:"Batch Size",icon:"sort-numeric-asc",type:"number"},null,8,["value"])])],64)}}}),Ee=3e4,F=new Map;async function De(e,p=!1){if(!p){const f=F.get(e);if(f&&Date.now()-f.timestamp<Ee)return f.data}const g=await fetch(`salesforce/list-apex-classes/${e}`);if(!g.ok)throw new Error(`Failed to fetch apex classes: ${g.statusText}`);const l=await g.json();return F.set(e,{data:l,timestamp:Date.now()}),l}function Me(e){F.delete(e)}const Le={class:"form-row"},Ae={class:"form-row"},ze={class:"form-row"},He={class:"form-row"},Ve={style:{display:"flex",gap:"4px","align-items":"flex-end"}},Be={style:{flex:"1"}},Ge={key:1,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},Qe={key:2,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},Ze=["disabled"],We={class:"form-row"},Ke={key:1,class:"form-row"},Je={style:{display:"flex",gap:"4px","align-items":"flex-end"}},Xe={style:{flex:"1"}},Ye={key:1,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},_e={key:2,style:{padding:"8px 0",color:"var(--red-ui-text-color-disabled)"}},et=["disabled"],L=S({__name:"salesforce-apex-invocation",props:{node:{}},setup(e){var p;const g=[{value:"rest",label:"REST"},{value:"invocable",label:"Invocable"}],l=[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"PATCH",label:"PATCH"},{value:"DELETE",label:"DELETE"}],f=R({rest:[],invocable:[]}),b=R(!1),s=P(()=>f.value.rest.map(o=>({value:o.urlMapping||o.name,label:o.urlMapping?`${o.name} (${o.urlMapping})`:o.name}))),i=P(()=>f.value.invocable.map(o=>({value:o.name,label:o.name}))),n=R(typeof e.node.path=="object"?((p=e.node.path)==null?void 0:p.value)||"":e.node.path||"");k(n,o=>{e.node.path={type:"str",value:o}});async function r(o=!1){if(e.node.connection){b.value=!0;try{f.value=await De(e.node.connection,o)}catch{f.value={rest:[],invocable:[]}}finally{b.value=!1}}}function d(){e.node.connection&&(Me(e.node.connection),r(!0))}return k(()=>e.node.connection,()=>r(),{immediate:!0}),(o,c)=>{const m=v("NodeRedInput"),z=v("NodeRedConfigInput"),w=v("NodeRedSelectInput");return u(),y(T,null,[t("div",Le,[a(m,{value:e.node.name,"onUpdate:value":c[0]||(c[0]=h=>e.node.name=h),label:"Name",icon:"tag"},null,8,["value"])]),t("div",Ae,[a(z,{value:e.node.connection,type:"salesforce-connection",node:e.node,"prop-name":"connection",label:"Connection",icon:"cloud","onUpdate:value":c[1]||(c[1]=h=>e.node.connection=h)},null,8,["value","node"])]),t("div",ze,[a(w,{value:e.node.apexType,"onUpdate:value":c[2]||(c[2]=h=>e.node.apexType=h),label:"Type",icon:"cog",options:g},null,8,["value"])]),e.node.apexType==="rest"?(u(),y(T,{key:0},[t("div",He,[t("div",Ve,[t("div",Be,[s.value.length>0?(u(),U(w,{key:"rest-"+s.value.length,value:n.value,"onUpdate:value":c[3]||(c[3]=h=>n.value=h),label:"Endpoint",icon:"link",options:s.value},null,8,["value","options"])):b.value?(u(),y("div",Ge,[...c[6]||(c[6]=[t("i",{class:"fa fa-spinner fa-spin"},null,-1),q(" Loading endpoints... ",-1)])])):(u(),y("div",Qe," No REST endpoints found. "))]),t("button",{class:"red-ui-button",style:{height:"34px","margin-bottom":"0"},disabled:b.value,onClick:d},[t("i",{class:O(["fa fa-refresh",{"fa-spin":b.value}])},null,2)],8,Ze)])]),t("div",We,[a(w,{value:e.node.method,"onUpdate:value":c[4]||(c[4]=h=>e.node.method=h),label:"Method",icon:"random",options:l},null,8,["value"])])],64)):x("",!0),e.node.apexType==="invocable"?(u(),y("div",Ke,[t("div",Je,[t("div",Xe,[i.value.length>0?(u(),U(w,{key:"inv-"+i.value.length,value:e.node.actionName,"onUpdate:value":c[5]||(c[5]=h=>e.node.actionName=h),label:"Action",icon:"bolt",options:i.value},null,8,["value","options"])):b.value?(u(),y("div",Ye,[...c[7]||(c[7]=[t("i",{class:"fa fa-spinner fa-spin"},null,-1),q(" Loading actions... ",-1)])])):(u(),y("div",_e," No invocable actions found. "))]),t("button",{class:"red-ui-button",style:{height:"34px","margin-bottom":"0"},disabled:b.value,onClick:d},[t("i",{class:O(["fa fa-refresh",{"fa-spin":b.value}])},null,2)],8,et)])])):x("",!0)],64)}}}),tt={class:"form-row"},nt={class:"form-row"},ot={class:"form-row"},at={class:"form-row"},lt={key:0,class:"form-row"},st={style:{color:"var(--red-ui-text-color-disabled)","font-size":"0.85em"}},rt={key:1,class:"form-row"},it={key:2,class:"form-row"},dt={class:"form-row"},A=S({__name:"salesforce-apex-code",props:{node:{}},setup(e){const p=[{value:"invocable",label:"Invocable"},{value:"rest",label:"REST"}],g=[{value:"HttpGet",label:"GET"},{value:"HttpPost",label:"POST"},{value:"HttpPut",label:"PUT"},{value:"HttpPatch",label:"PATCH"},{value:"HttpDelete",label:"DELETE"}],l=P(()=>RED.settings.salesforceApexCodeClassPrefix||"NRG_"),f=P(()=>{const i=e.node.className||"";return l.value+i}),b=P(()=>{if(e.node.apexType!=="rest")return"";const i=e.node.urlMapping||"";if(!i)return"";if(!i.startsWith("/"))return"Must start with /";if(!/^\/[a-zA-Z0-9_\-/*]*$/.test(i))return"Only letters, numbers, hyphens, underscores, slashes, and wildcards (*) allowed";const n=i.split("/").filter(Boolean);for(let r=0;r<n.length;r++){const d=n[r];if(d.includes("*")&&d!=="*")return"Wildcard (*) must be a full path segment (e.g., /accounts/*/contacts)"}return""}),s=P(()=>{if(!e.node.className)return"";if(!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(e.node.className))return"Must start with a letter and contain only letters, numbers, and underscores";const i=f.value;return/^[a-zA-Z][a-zA-Z0-9_]*$/.test(i)?i.length>40?`Full class name is ${i.length} chars (max 40)`:"":"Full class name (prefix + name) must start with a letter"});return(i,n)=>{const r=v("NodeRedInput"),d=v("NodeRedConfigInput"),o=v("NodeRedSelectInput"),c=v("NodeRedEditorInput");return u(),y(T,null,[t("div",tt,[a(r,{value:e.node.name,"onUpdate:value":n[0]||(n[0]=m=>e.node.name=m),label:"Name",icon:"tag"},null,8,["value"])]),t("div",nt,[a(d,{value:e.node.connection,type:"salesforce-connection",node:e.node,"prop-name":"connection",label:"Connection",icon:"cloud","onUpdate:value":n[1]||(n[1]=m=>e.node.connection=m)},null,8,["value","node"])]),t("div",ot,[a(o,{value:e.node.apexType,"onUpdate:value":n[2]||(n[2]=m=>e.node.apexType=m),label:"Type",icon:"cog",options:p},null,8,["value"])]),t("div",at,[a(r,{value:e.node.className,"onUpdate:value":n[3]||(n[3]=m=>e.node.className=m),label:"Class Name",icon:"file-code-o",error:s.value,required:""},null,8,["value","error"])]),f.value?(u(),y("div",lt,[t("span",st,[n[7]||(n[7]=q(" Deployed as: ",-1)),t("strong",null,N(f.value),1)])])):x("",!0),e.node.apexType==="rest"?(u(),y("div",rt,[a(r,{value:e.node.urlMapping,"onUpdate:value":n[4]||(n[4]=m=>e.node.urlMapping=m),label:"URL Mapping",icon:"link",placeholder:"/my/endpoint/*",error:b.value,required:""},null,8,["value","error"])])):x("",!0),e.node.apexType==="rest"?(u(),y("div",it,[a(o,{value:e.node.httpMethod,"onUpdate:value":n[5]||(n[5]=m=>e.node.httpMethod=m),label:"HTTP Method",icon:"random",options:g},null,8,["value"])])):x("",!0),t("div",dt,[a(c,{value:e.node.code,language:"java",label:"Apex Code",icon:"code","onUpdate:value":n[6]||(n[6]=m=>e.node.code=m)},null,8,["value"])])],64)}}}),ct=I({type:"salesforce-connection",form:{component:C}}),ut=I({type:"salesforce-soql"}),pt=I({type:"salesforce-dml",form:{component:E}}),ft=I({type:"salesforce-bulk",form:{component:D}}),yt=I({type:"salesforce-describe"}),gt=I({type:"salesforce-streaming",form:{component:M}}),mt=I({type:"salesforce-apex-invocation",form:{component:L}}),vt=I({type:"salesforce-apex-code",form:{component:A}});H(W),V({"salesforce-connection":C,"salesforce-dml":E,"salesforce-bulk":D,"salesforce-streaming":M,"salesforce-apex-invocation":L,"salesforce-apex-code":A}),B([ct,ut,pt,ft,yt,gt,mt,vt]);