@bonsae/node-red-salesforce 0.1.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.
- package/README.md +126 -0
- package/examples/1-soql-query.json +103 -0
- package/examples/10-streaming-platform-events.json +73 -0
- package/examples/11-streaming-change-data-capture.json +73 -0
- package/examples/2-dml-create.json +106 -0
- package/examples/3-dml-read.json +83 -0
- package/examples/4-dml-update.json +83 -0
- package/examples/5-dml-delete.json +83 -0
- package/examples/6-describe.json +97 -0
- package/examples/7-apex-rest.json +99 -0
- package/examples/8-bulk-insert.json +63 -0
- package/examples/9-bulk-query.json +63 -0
- package/icons/salesforce-apex.png +0 -0
- package/icons/salesforce-bulk.png +0 -0
- package/icons/salesforce-connection.png +0 -0
- package/icons/salesforce-describe.png +0 -0
- package/icons/salesforce-dml.png +0 -0
- package/icons/salesforce-soql.png +0 -0
- package/icons/salesforce-streaming.png +0 -0
- package/index.d.ts +268 -0
- package/index.html +2 -0
- package/index.js +14 -0
- package/index.mjs +913 -0
- package/index.mjs.map +1 -0
- package/locales/de/index.html +226 -0
- package/locales/de/index.json +154 -0
- package/locales/en-US/index.html +226 -0
- package/locales/en-US/index.json +154 -0
- package/locales/es-ES/index.html +226 -0
- package/locales/es-ES/index.json +154 -0
- package/locales/fr/index.html +226 -0
- package/locales/fr/index.json +154 -0
- package/locales/ja/index.html +226 -0
- package/locales/ja/index.json +154 -0
- package/locales/ko/index.html +226 -0
- package/locales/ko/index.json +154 -0
- package/locales/pt-BR/index.html +226 -0
- package/locales/pt-BR/index.json +154 -0
- package/locales/ru/index.html +226 -0
- package/locales/ru/index.json +154 -0
- package/locales/zh-CN/index.html +226 -0
- package/locales/zh-CN/index.json +154 -0
- package/locales/zh-TW/index.html +226 -0
- package/locales/zh-TW/index.json +154 -0
- package/package.json +52 -0
- package/resources/index.CfTW8fjc.js +1 -0
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/server/schemas/salesforce-connection.ts","../src/server/lib/pkce.ts","../src/server/api/auth.ts","../src/server/api/index.ts","../src/server/nodes/salesforce-connection.ts","../src/server/schemas/salesforce-soql.ts","../src/server/nodes/salesforce-soql.ts","../src/server/schemas/salesforce-dml.ts","../src/server/nodes/salesforce-dml.ts","../src/server/schemas/salesforce-bulk.ts","../src/server/nodes/salesforce-bulk.ts","../src/server/schemas/salesforce-describe.ts","../src/server/nodes/salesforce-describe.ts","../src/server/schemas/salesforce-streaming.ts","../src/server/nodes/salesforce-streaming.ts","../src/server/schemas/salesforce-apex.ts","../src/server/nodes/salesforce-apex.ts","../src/server/index.ts"],"sourcesContent":["import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\" }),\n loginUrl: SchemaType.String({\n default: \"https://login.salesforce.com\",\n \"x-nrg-form\": { icon: \"globe\" },\n }),\n clientId: SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"key\" },\n }),\n apiVersion: SchemaType.Union(\n [\n SchemaType.Literal(\"62.0\"),\n SchemaType.Literal(\"61.0\"),\n SchemaType.Literal(\"60.0\"),\n SchemaType.Literal(\"59.0\"),\n SchemaType.Literal(\"58.0\"),\n SchemaType.Literal(\"57.0\"),\n SchemaType.Literal(\"56.0\"),\n SchemaType.Literal(\"55.0\"),\n ],\n { default: \"62.0\", \"x-nrg-form\": { icon: \"code-fork\" } },\n ),\n callbackUrl: SchemaType.Optional(\n SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"exchange\" },\n }),\n ),\n },\n { $id: \"salesforce-connection:config\" },\n);\n\nexport const CredentialsSchema = defineSchema(\n {\n accessToken: SchemaType.String({ default: \"\", format: \"password\" }),\n refreshToken: SchemaType.String({ default: \"\", format: \"password\" }),\n instanceUrl: SchemaType.String({ default: \"\" }),\n },\n { $id: \"salesforce-connection:credentials\" },\n);\n","import crypto from \"node:crypto\";\n\nconst AUTH_STATE_TTL = 10 * 60 * 1000; // 10 minutes\n\ninterface PendingAuthState {\n codeVerifier: string;\n nodeId: string;\n clientId: string;\n loginUrl: string;\n callbackUrl: string;\n timestamp: number;\n}\n\nconst pendingAuthStates = new Map<string, PendingAuthState>();\n\nexport function generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nexport function generateCodeChallenge(verifier: string): string {\n return crypto.createHash(\"sha256\").update(verifier).digest(\"base64url\");\n}\n\nexport function createAuthState(params: {\n nodeId: string;\n clientId: string;\n loginUrl: string;\n callbackUrl: string;\n}): { state: string; codeChallenge: string } {\n const state = crypto.randomUUID();\n const codeVerifier = generateCodeVerifier();\n const codeChallenge = generateCodeChallenge(codeVerifier);\n\n pendingAuthStates.set(state, {\n codeVerifier,\n nodeId: params.nodeId,\n clientId: params.clientId,\n loginUrl: params.loginUrl,\n callbackUrl: params.callbackUrl,\n timestamp: Date.now(),\n });\n\n // Cleanup stale entries\n for (const [key, value] of pendingAuthStates) {\n if (Date.now() - value.timestamp > AUTH_STATE_TTL) {\n pendingAuthStates.delete(key);\n }\n }\n\n return { state, codeChallenge };\n}\n\nexport function consumeAuthState(state: string): PendingAuthState | null {\n const entry = pendingAuthStates.get(state);\n if (!entry) return null;\n pendingAuthStates.delete(state);\n if (Date.now() - entry.timestamp > AUTH_STATE_TTL) return null;\n return entry;\n}\n","import type { RED } from \"@bonsae/nrg/server\";\nimport { createAuthState, consumeAuthState } from \"../lib/pkce\";\n\ninterface TokenResponse {\n access_token: string;\n refresh_token: string;\n instance_url: string;\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\nfunction errorPage(message: string, autoClose = true): string {\n const script = autoClose\n ? \"<script>setTimeout(function(){window.close()},3000)</script>\"\n : \"\";\n return `<html><body><h2>Authorization Failed</h2><p>${escapeHtml(message)}</p>${script}</body></html>`;\n}\n\nfunction initAuthRoutes(RED: RED): void {\n const adminRoot = ((RED.settings as any).httpAdminRoot || \"\").replace(\n /\\/$/,\n \"\",\n );\n\n RED.httpAdmin.post(\"/salesforce/auth/start\", (req, res) => {\n try {\n const {\n nodeId,\n loginUrl,\n clientId,\n callbackUrl: overrideCallbackUrl,\n } = req.body;\n\n if (!nodeId || !loginUrl || !clientId) {\n res\n .status(400)\n .json({ error: \"nodeId, loginUrl, and clientId are required\" });\n return;\n }\n\n const callbackUrl =\n overrideCallbackUrl ||\n `${req.protocol}://${req.get(\"host\")}${adminRoot}/salesforce/auth/callback`;\n\n const { state, codeChallenge } = createAuthState({\n nodeId,\n clientId,\n loginUrl,\n callbackUrl,\n });\n\n const params = new URLSearchParams({\n response_type: \"code\",\n client_id: clientId,\n redirect_uri: callbackUrl,\n state,\n code_challenge: codeChallenge,\n code_challenge_method: \"S256\",\n });\n\n res.json({\n authorizationUrl: `${loginUrl}/services/oauth2/authorize?${params.toString()}`,\n });\n } catch (error) {\n RED.log.error(\n `salesforce-connection: auth/start error: ${error instanceof Error ? error.message : String(error)}`,\n );\n res.status(500).json({ error: \"Failed to start authorization\" });\n }\n });\n\n RED.httpAdmin.get(\"/salesforce/auth/callback\", async (req, res) => {\n try {\n const { code, state, error: oauthError, error_description } = req.query;\n\n if (oauthError) {\n RED.log.error(\n `salesforce-connection: OAuth error: ${oauthError} - ${error_description}`,\n );\n res\n .status(400)\n .send(errorPage(String(error_description || oauthError)));\n return;\n }\n\n if (!code || !state) {\n res.status(400).send(errorPage(\"Missing code or state parameter\"));\n return;\n }\n\n const entry = consumeAuthState(state as string);\n if (!entry) {\n res\n .status(400)\n .send(\n errorPage(\n \"Invalid or expired authorization state. Please try again.\",\n ),\n );\n return;\n }\n\n const tokenResponse = await fetch(\n `${entry.loginUrl}/services/oauth2/token`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n code: code as string,\n client_id: entry.clientId,\n redirect_uri: entry.callbackUrl,\n code_verifier: entry.codeVerifier,\n }),\n },\n );\n\n if (!tokenResponse.ok) {\n const errorBody = await tokenResponse.text();\n RED.log.error(\n `salesforce-connection: Token exchange failed: ${errorBody}`,\n );\n res\n .status(500)\n .send(\n errorPage(\n \"Token exchange failed. Check the Node-RED logs for details.\",\n ),\n );\n return;\n }\n\n const tokens = (await tokenResponse.json()) as TokenResponse;\n\n (RED.nodes as any).addCredentials(entry.nodeId, {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n instanceUrl: tokens.instance_url,\n });\n\n RED.log.info(\n `salesforce-connection: Successfully authorized node ${entry.nodeId} for ${tokens.instance_url}`,\n );\n\n const messageData = JSON.stringify({\n type: \"salesforce-auth-success\",\n nodeId: entry.nodeId,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n instanceUrl: tokens.instance_url,\n });\n\n res.send(`<!DOCTYPE html>\n<html>\n<body>\n<h2>Authorization Successful</h2>\n<p>You can close this window.</p>\n<script>\n if (window.opener) {\n window.opener.postMessage(${messageData}, \"*\");\n }\n setTimeout(function() { window.close(); }, 1500);\n</script>\n</body>\n</html>`);\n } catch (error) {\n RED.log.error(\n `salesforce-connection: auth/callback error: ${error instanceof Error ? error.message : String(error)}`,\n );\n res.status(500).send(errorPage(\"An unexpected error occurred.\"));\n }\n });\n\n RED.httpAdmin.get(\"/salesforce/auth/status/:nodeId\", (req, res) => {\n try {\n const credentials = RED.nodes.getCredentials(req.params.nodeId);\n const authenticated = !!(\n credentials?.accessToken && credentials?.instanceUrl\n );\n res.json({\n authenticated,\n instanceUrl: authenticated ? credentials.instanceUrl : undefined,\n });\n } catch {\n res.json({ authenticated: false });\n }\n });\n}\n\nexport { initAuthRoutes };\n","import type { RED } from \"@bonsae/nrg/server\";\nimport { initAuthRoutes } from \"./auth\";\n\nfunction initRoutes(RED: RED): void {\n initAuthRoutes(RED);\n}\n\nexport { initRoutes };\n","import {\n ConfigNode,\n type Schema,\n type Infer,\n type RED,\n} from \"@bonsae/nrg/server\";\nimport jsforce, { type Connection } from \"jsforce\";\nimport {\n ConfigsSchema,\n CredentialsSchema,\n} from \"../schemas/salesforce-connection\";\nimport { initRoutes } from \"../api\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Credentials = Infer<typeof CredentialsSchema>;\n\nexport default class SalesforceConnection extends ConfigNode<\n Config,\n Credentials\n> {\n static override readonly type = \"salesforce-connection\";\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly credentialsSchema: Schema = CredentialsSchema;\n\n private conn: Connection | null = null;\n\n static override async registered(RED: RED) {\n initRoutes(RED);\n }\n\n async getConnection(): Promise<Connection> {\n if (this.conn) return this.conn;\n\n const credentials = this.credentials;\n if (!credentials?.accessToken || !credentials?.instanceUrl) {\n throw new Error(\n \"Salesforce connection not authorized. Please authorize in the node configuration.\",\n );\n }\n\n this.conn = new jsforce.Connection({\n oauth2: {\n clientId: this.config.clientId,\n loginUrl: this.config.loginUrl,\n },\n instanceUrl: credentials.instanceUrl,\n accessToken: credentials.accessToken,\n refreshToken: credentials.refreshToken,\n version: this.config.apiVersion,\n });\n\n this.conn.on(\"refresh\", (newAccessToken: string) => {\n (this.RED.nodes as any).addCredentials(this.id, {\n ...this.credentials,\n accessToken: newAccessToken,\n });\n });\n\n return this.conn;\n }\n\n getAccessToken(): string | undefined {\n return this.credentials?.accessToken;\n }\n\n getInstanceUrl(): string | undefined {\n return this.credentials?.instanceUrl;\n }\n\n override async closed() {\n this.conn = null;\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n query: SchemaType.TypedInput<string>({\n \"x-nrg-form\": {\n icon: \"search\",\n typedInputTypes: [\"str\", \"msg\", \"flow\", \"global\"],\n },\n }),\n },\n { $id: \"salesforce-soql:config\" },\n);\n\nexport const InputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-soql:input\" },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Array(SchemaType.Any()),\n totalSize: SchemaType.Number(),\n done: SchemaType.Boolean(),\n },\n { $id: \"salesforce-soql:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport {\n ConfigsSchema,\n InputSchema,\n OutputSchema,\n} from \"../schemas/salesforce-soql\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Input = Infer<typeof InputSchema>;\ntype Output = Infer<typeof OutputSchema>;\n\nexport default class SalesforceSoql extends IONode<Config, any, Input, Output> {\n static override readonly type = \"salesforce-soql\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 1;\n static override readonly outputs = 1;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly inputSchema: Schema = InputSchema;\n static override readonly outputsSchema: Schema = OutputSchema;\n\n override async input(msg: Input) {\n const connection = this.config.connection;\n if (!connection) {\n this.error(\"No Salesforce connection configured\", msg);\n return;\n }\n\n try {\n this.status({ fill: \"green\", shape: \"dot\", text: \"querying...\" });\n\n const conn = await connection.getConnection();\n const query = await this.config.query.resolve(msg);\n\n const result = await conn.query(query);\n\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `${result.totalSize} records`,\n });\n this.send({\n ...msg,\n payload: result.records,\n totalSize: result.totalSize,\n done: result.done,\n });\n } catch (error) {\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: error instanceof Error ? error.message : String(error),\n });\n this.error(\n `SOQL query failed: ${error instanceof Error ? error.message : String(error)}`,\n msg,\n );\n }\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n operation: SchemaType.Union(\n [\n SchemaType.Literal(\"create\"),\n SchemaType.Literal(\"read\"),\n SchemaType.Literal(\"update\"),\n SchemaType.Literal(\"delete\"),\n SchemaType.Literal(\"upsert\"),\n ],\n { default: \"create\", \"x-nrg-form\": { icon: \"pencil\" } },\n ),\n sObjectType: SchemaType.TypedInput<string>({\n \"x-nrg-form\": {\n icon: \"cube\",\n typedInputTypes: [\"str\", \"msg\"],\n },\n }),\n record: SchemaType.TypedInput<any>({\n \"x-nrg-form\": {\n icon: \"file-code-o\",\n typedInputTypes: [\"json\", \"msg\"],\n },\n }),\n externalIdField: SchemaType.Optional(\n SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"key\" },\n }),\n ),\n },\n {\n $id: \"salesforce-dml:config\",\n if: SchemaType.Object({\n operation: SchemaType.Literal(\"upsert\"),\n }),\n then: SchemaType.Object({\n externalIdField: SchemaType.String({ minLength: 1 }),\n }),\n errorMessage: {\n properties: {\n externalIdField: \"External ID Field is required for upsert operations\",\n },\n },\n },\n);\n\nexport const InputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-dml:input\" },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-dml:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport {\n ConfigsSchema,\n InputSchema,\n OutputSchema,\n} from \"../schemas/salesforce-dml\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Input = Infer<typeof InputSchema>;\ntype Output = Infer<typeof OutputSchema>;\n\nexport default class SalesforceDml extends IONode<Config, any, Input, Output> {\n static override readonly type = \"salesforce-dml\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 1;\n static override readonly outputs = 1;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly inputSchema: Schema = InputSchema;\n static override readonly outputsSchema: Schema = OutputSchema;\n\n override async input(msg: Input) {\n const connection = this.config.connection;\n if (!connection) {\n this.error(\"No Salesforce connection configured\", msg);\n return;\n }\n\n try {\n const operation = this.config.operation;\n this.status({ fill: \"green\", shape: \"dot\", text: `${operation}...` });\n\n const conn = await connection.getConnection();\n const sObjectType = await this.config.sObjectType.resolve(msg);\n const sobject = conn.sobject(sObjectType);\n\n // Use record from config if set, otherwise fall back to msg.payload\n const data = (await this.config.record.resolve(msg)) ?? msg.payload;\n\n let result: any;\n\n switch (operation) {\n case \"create\":\n result = await sobject.create(data);\n break;\n case \"read\":\n result = await sobject.retrieve(data);\n break;\n case \"update\":\n result = await sobject.update(data);\n break;\n case \"delete\":\n result = await sobject.destroy(data);\n break;\n case \"upsert\":\n result = await sobject.upsert(data, this.config.externalIdField!);\n break;\n default:\n throw new Error(`Unknown operation: ${operation}`);\n }\n\n this.status({ fill: \"green\", shape: \"dot\", text: `${operation} done` });\n this.send({ ...msg, payload: result });\n } catch (error) {\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: error instanceof Error ? error.message : String(error),\n });\n this.error(\n `DML ${this.config.operation} failed: ${error instanceof Error ? error.message : String(error)}`,\n msg,\n );\n }\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n operation: SchemaType.Union(\n [\n SchemaType.Literal(\"insert\"),\n SchemaType.Literal(\"update\"),\n SchemaType.Literal(\"upsert\"),\n SchemaType.Literal(\"delete\"),\n SchemaType.Literal(\"query\"),\n ],\n { default: \"insert\", \"x-nrg-form\": { icon: \"database\" } },\n ),\n sObjectType: SchemaType.TypedInput<string>({\n \"x-nrg-form\": {\n icon: \"cube\",\n typedInputTypes: [\"str\", \"msg\"],\n },\n }),\n externalIdField: SchemaType.Optional(\n SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"key\" },\n }),\n ),\n assignmentRuleId: SchemaType.Optional(\n SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"gavel\" },\n }),\n ),\n columnDelimiter: SchemaType.Union(\n [\n SchemaType.Literal(\"COMMA\"),\n SchemaType.Literal(\"TAB\"),\n SchemaType.Literal(\"PIPE\"),\n SchemaType.Literal(\"SEMICOLON\"),\n SchemaType.Literal(\"CARET\"),\n SchemaType.Literal(\"BACKQUOTE\"),\n ],\n { default: \"COMMA\", \"x-nrg-form\": { icon: \"columns\" } },\n ),\n lineEnding: SchemaType.Union(\n [SchemaType.Literal(\"LF\"), SchemaType.Literal(\"CRLF\")],\n { default: \"LF\", \"x-nrg-form\": { icon: \"level-down\" } },\n ),\n pollInterval: SchemaType.Number({\n default: 5000,\n minimum: 1000,\n \"x-nrg-form\": { icon: \"clock-o\" },\n }),\n pollTimeout: SchemaType.Number({\n default: 60000,\n minimum: 5000,\n \"x-nrg-form\": { icon: \"hourglass\" },\n }),\n emitJobCreated: SchemaType.Boolean({\n default: false,\n \"x-nrg-form\": { icon: \"flag\", toggle: true },\n }),\n outputs: SchemaType.Number({ default: 2 }),\n },\n {\n $id: \"salesforce-bulk:config\",\n if: SchemaType.Object({\n operation: SchemaType.Literal(\"upsert\"),\n }),\n then: SchemaType.Object({\n externalIdField: SchemaType.String({ minLength: 1 }),\n }),\n errorMessage: {\n properties: {\n externalIdField: \"External ID Field is required for upsert operations\",\n },\n },\n },\n);\n\nexport const InputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-bulk:input\" },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Array(SchemaType.Any()),\n },\n { $id: \"salesforce-bulk:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport { ConfigsSchema, InputSchema } from \"../schemas/salesforce-bulk\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Input = Infer<typeof InputSchema>;\n\nexport default class SalesforceBulk extends IONode<Config> {\n static override readonly type = \"salesforce-bulk\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 1;\n static override readonly outputs = 2;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly inputSchema: Schema = InputSchema;\n\n private sendRecord(msg: Input, payload: unknown) {\n const ports = this.config.emitJobCreated ? 3 : 2;\n const out: (object | null)[] = Array(ports).fill(null);\n out[0] = { ...msg, payload };\n this.send(out as any);\n }\n\n private sendJobCreated(msg: Input, payload: object) {\n if (!this.config.emitJobCreated) return;\n // Job Created is always the last port (index 2)\n this.send([null, null, { ...msg, payload }] as any);\n }\n\n private sendComplete(msg: Input, payload: object) {\n // Job Complete is always port 2 (index 1)\n const ports = this.config.emitJobCreated ? 3 : 2;\n const out: (object | null)[] = Array(ports).fill(null);\n out[1] = { ...msg, payload };\n this.send(out as any);\n }\n\n override async input(msg: Input) {\n const connection = this.config.connection;\n if (!connection) {\n this.error(\"No Salesforce connection configured\", msg);\n return;\n }\n\n try {\n const operation = this.config.operation;\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `bulk ${operation}...`,\n });\n\n const conn = await connection.getConnection();\n const sObjectType = await this.config.sObjectType.resolve(msg);\n\n let totalRecords = 0;\n\n if (operation === \"query\") {\n const stream = await conn.bulk2.query(msg.payload as string, {\n pollTimeout: this.config.pollTimeout,\n pollInterval: this.config.pollInterval,\n columnDelimiter: this.config.columnDelimiter,\n lineEnding: this.config.lineEnding,\n });\n\n await new Promise<void>((resolve, reject) => {\n stream.on(\"data\", (record: unknown) => {\n totalRecords++;\n this.sendRecord(msg, record);\n });\n stream.on(\"end\", () => resolve());\n stream.on(\"error\", reject);\n });\n\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `bulk ${operation}: ${totalRecords} records`,\n });\n\n this.sendComplete(msg, { operation, sObjectType, totalRecords });\n } else {\n const records = msg.payload as Record<string, unknown>[];\n\n const job = conn.bulk2.createJob({\n operation,\n object: sObjectType,\n columnDelimiter: this.config.columnDelimiter,\n lineEnding: this.config.lineEnding,\n ...(operation === \"upsert\" && this.config.externalIdField\n ? { externalIdFieldName: this.config.externalIdField }\n : {}),\n ...(this.config.assignmentRuleId\n ? { assignmentRuleId: this.config.assignmentRuleId }\n : {}),\n });\n\n await job.open();\n\n this.sendJobCreated(msg, {\n jobId: (job as any).id,\n operation,\n sObjectType,\n state: \"Open\",\n });\n\n await job.uploadData(records);\n await job.close();\n await job.poll(this.config.pollInterval, this.config.pollTimeout);\n\n const jobResults = await job.getAllResults();\n const successfulResults = jobResults.successfulResults ?? [];\n const failedResults = jobResults.failedResults ?? [];\n const unprocessedRecords = jobResults.unprocessedRecords ?? [];\n totalRecords =\n successfulResults.length +\n failedResults.length +\n unprocessedRecords.length;\n\n for (const result of successfulResults) {\n this.sendRecord(msg, result);\n }\n for (const result of failedResults) {\n this.sendRecord(msg, result);\n }\n\n const successCount = successfulResults.length;\n const failureCount = failedResults.length;\n\n this.status({\n fill: failureCount > 0 ? \"red\" : \"green\",\n shape: \"dot\",\n text: `bulk ${operation}: ${totalRecords} records`,\n });\n\n this.sendComplete(msg, {\n jobId: (job as any).id,\n operation,\n sObjectType,\n totalRecords,\n successCount,\n failureCount,\n unprocessedCount: unprocessedRecords.length,\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.status({ fill: \"red\", shape: \"dot\", text: message });\n this.error(`Bulk ${this.config.operation} failed: ${message}`, msg);\n }\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n sObjectType: SchemaType.TypedInput<string>({\n \"x-nrg-form\": {\n icon: \"cube\",\n typedInputTypes: [\"str\", \"msg\"],\n },\n }),\n },\n { $id: \"salesforce-describe:config\" },\n);\n\nexport const InputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-describe:input\" },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Object({\n name: SchemaType.String(),\n fields: SchemaType.Array(SchemaType.Any()),\n childRelationships: SchemaType.Array(SchemaType.Any()),\n recordTypeInfos: SchemaType.Array(SchemaType.Any()),\n }),\n },\n { $id: \"salesforce-describe:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport {\n ConfigsSchema,\n InputSchema,\n OutputSchema,\n} from \"../schemas/salesforce-describe\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Input = Infer<typeof InputSchema>;\ntype Output = Infer<typeof OutputSchema>;\n\nexport default class SalesforceDescribe extends IONode<\n Config,\n any,\n Input,\n Output\n> {\n static override readonly type = \"salesforce-describe\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 1;\n static override readonly outputs = 1;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly inputSchema: Schema = InputSchema;\n static override readonly outputsSchema: Schema = OutputSchema;\n\n override async input(msg: Input) {\n const connection = this.config.connection;\n if (!connection) {\n this.error(\"No Salesforce connection configured\", msg);\n return;\n }\n\n try {\n this.status({ fill: \"green\", shape: \"dot\", text: \"describing...\" });\n\n const conn = await connection.getConnection();\n const sObjectType = await this.config.sObjectType.resolve(msg);\n const result = await conn.sobject(sObjectType).describe();\n\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `${result.name}: ${result.fields.length} fields`,\n });\n this.send({\n ...msg,\n payload: {\n name: result.name,\n fields: result.fields,\n childRelationships: result.childRelationships,\n recordTypeInfos: result.recordTypeInfos,\n },\n });\n } catch (error) {\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: error instanceof Error ? error.message : String(error),\n });\n this.error(\n `Describe failed: ${error instanceof Error ? error.message : String(error)}`,\n msg,\n );\n }\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n channelName: SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"rss\" },\n }),\n subscribeType: SchemaType.Union(\n [\n SchemaType.Literal(\"LATEST\"),\n SchemaType.Literal(\"EARLIEST\"),\n SchemaType.Literal(\"CUSTOM\"),\n ],\n { default: \"LATEST\", \"x-nrg-form\": { icon: \"history\" } },\n ),\n replayId: SchemaType.Optional(\n SchemaType.String({\n default: \"\",\n \"x-nrg-form\": { icon: \"bookmark\" },\n }),\n ),\n numRequested: SchemaType.Number({\n default: 100,\n minimum: 1,\n maximum: 100,\n \"x-nrg-form\": { icon: \"sort-numeric-asc\" },\n }),\n },\n {\n $id: \"salesforce-streaming:config\",\n if: SchemaType.Object({\n subscribeType: SchemaType.Literal(\"CUSTOM\"),\n }),\n then: SchemaType.Object({\n replayId: SchemaType.String({ minLength: 1 }),\n }),\n errorMessage: {\n properties: {\n replayId: \"Replay ID is required when Subscribe Type is CUSTOM\",\n },\n },\n },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n replayId: SchemaType.Any(),\n channel: SchemaType.String(),\n topic: SchemaType.String(),\n },\n { $id: \"salesforce-streaming:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport { ConfigsSchema, OutputSchema } from \"../schemas/salesforce-streaming\";\nimport type SalesforceConnection from \"./salesforce-connection\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Output = Infer<typeof OutputSchema>;\n\nexport default class SalesforceStreaming extends IONode<\n Config,\n any,\n any,\n Output\n> {\n static override readonly type = \"salesforce-streaming\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 0;\n static override readonly outputs = 1;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly outputsSchema: Schema = OutputSchema;\n\n private client: any = null;\n private reconnectAttempt = 0;\n private maxReconnectDelay = 60000;\n\n override async created() {\n const connection = this.config.connection as SalesforceConnection;\n if (!connection) {\n this.status({ fill: \"red\", shape: \"dot\", text: \"no connection\" });\n this.error(\"No Salesforce connection configured\");\n return;\n }\n\n await this.subscribe(connection);\n }\n\n private async subscribe(connection: SalesforceConnection) {\n try {\n this.status({ fill: \"green\", shape: \"dot\", text: \"connecting...\" });\n\n const accessToken = connection.getAccessToken();\n const instanceUrl = connection.getInstanceUrl();\n\n if (!accessToken || !instanceUrl) {\n this.status({ fill: \"red\", shape: \"dot\", text: \"not authorized\" });\n this.error(\"Salesforce connection not authorized\");\n return;\n }\n\n const PubSubApiClient = (await import(\"salesforce-pubsub-api-client\"))\n .default;\n\n this.client = new PubSubApiClient({\n authType: \"user-supplied\",\n accessToken,\n instanceUrl,\n });\n\n await this.client.connect();\n\n const numRequested = this.config.numRequested || null;\n const channelName = this.config.channelName;\n\n const callback = (\n _subscription: any,\n callbackType: string,\n data?: any,\n ) => {\n if (callbackType === \"event\" || callbackType === \"lastevent\") {\n this.send({\n payload: data?.payload ?? data,\n replayId: data?.replayId,\n channel: channelName,\n topic: channelName,\n });\n } else if (callbackType === \"error\") {\n const errorMsg =\n data instanceof Error\n ? data.message\n : String(data ?? \"stream error\");\n this.warn(`Streaming error: ${errorMsg}`);\n this.status({ fill: \"red\", shape: \"dot\", text: errorMsg });\n this.scheduleReconnect(connection);\n } else if (callbackType === \"end\") {\n this.log(\"Streaming subscription ended\");\n this.status({ fill: \"red\", shape: \"dot\", text: \"disconnected\" });\n this.scheduleReconnect(connection);\n }\n };\n\n if (this.config.subscribeType === \"EARLIEST\") {\n this.client.subscribeFromEarliestEvent(\n channelName,\n callback,\n numRequested,\n );\n } else if (\n this.config.subscribeType === \"CUSTOM\" &&\n this.config.replayId\n ) {\n const replayId = parseInt(this.config.replayId, 10);\n this.client.subscribeFromReplayId(\n channelName,\n callback,\n numRequested,\n replayId,\n );\n } else {\n this.client.subscribe(channelName, callback, numRequested);\n }\n\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `subscribed: ${channelName}`,\n });\n this.reconnectAttempt = 0;\n } catch (error) {\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: error instanceof Error ? error.message : String(error),\n });\n this.error(\n `Streaming subscription failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n this.scheduleReconnect(connection);\n }\n }\n\n private scheduleReconnect(connection: SalesforceConnection) {\n this.reconnectAttempt++;\n const delay = Math.min(\n 1000 * Math.pow(2, this.reconnectAttempt),\n this.maxReconnectDelay,\n );\n this.log(\n `Scheduling reconnect in ${delay}ms (attempt ${this.reconnectAttempt})`,\n );\n this.status({\n fill: \"green\",\n shape: \"dot\",\n text: `reconnecting in ${Math.round(delay / 1000)}s`,\n });\n this.setTimeout(async () => {\n await this.cleanup();\n await this.subscribe(connection);\n }, delay);\n }\n\n private async cleanup() {\n try {\n if (this.client) {\n await this.client.close?.();\n this.client = null;\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n\n override async input() {}\n\n override async closed() {\n await this.cleanup();\n }\n}\n","import { defineSchema, SchemaType } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"../nodes/salesforce-connection\";\n\nexport const ConfigsSchema = defineSchema(\n {\n name: SchemaType.String({ default: \"\", \"x-nrg-form\": { icon: \"tag\" } }),\n connection: SchemaType.NodeRef(SalesforceConnection, {\n \"x-nrg-form\": { icon: \"cloud\" },\n }),\n method: SchemaType.Union(\n [\n SchemaType.Literal(\"GET\"),\n SchemaType.Literal(\"POST\"),\n SchemaType.Literal(\"PUT\"),\n SchemaType.Literal(\"PATCH\"),\n SchemaType.Literal(\"DELETE\"),\n ],\n { default: \"POST\", \"x-nrg-form\": { icon: \"random\" } },\n ),\n path: SchemaType.TypedInput<string>({\n \"x-nrg-form\": {\n icon: \"link\",\n typedInputTypes: [\"str\", \"msg\"],\n },\n }),\n },\n { $id: \"salesforce-apex:config\" },\n);\n\nexport const InputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-apex:input\" },\n);\n\nexport const OutputSchema = defineSchema(\n {\n payload: SchemaType.Any(),\n },\n { $id: \"salesforce-apex:output\" },\n);\n","import { IONode, type Schema, type Infer } from \"@bonsae/nrg/server\";\nimport {\n ConfigsSchema,\n InputSchema,\n OutputSchema,\n} from \"../schemas/salesforce-apex\";\n\ntype Config = Infer<typeof ConfigsSchema>;\ntype Input = Infer<typeof InputSchema>;\ntype Output = Infer<typeof OutputSchema>;\n\nexport default class SalesforceApex extends IONode<Config, any, Input, Output> {\n static override readonly type = \"salesforce-apex\";\n static override readonly category = \"salesforce\";\n static override readonly color: `#${string}` = \"#FFFFFF\";\n static override readonly inputs = 1;\n static override readonly outputs = 1;\n static override readonly configSchema: Schema = ConfigsSchema;\n static override readonly inputSchema: Schema = InputSchema;\n static override readonly outputsSchema: Schema = OutputSchema;\n\n override async input(msg: Input) {\n const connection = this.config.connection;\n if (!connection) {\n this.error(\"No Salesforce connection configured\", msg);\n return;\n }\n\n try {\n const method = this.config.method;\n this.status({ fill: \"green\", shape: \"dot\", text: `${method}...` });\n\n const conn = await connection.getConnection();\n const path = await this.config.path.resolve(msg);\n\n let result: any;\n const apexMethod = method.toLowerCase() as\n | \"get\"\n | \"post\"\n | \"put\"\n | \"patch\"\n | \"delete\";\n\n if (apexMethod === \"get\" || apexMethod === \"delete\") {\n result = await conn.apex[apexMethod](path);\n } else {\n result = await conn.apex[apexMethod](path, msg.payload);\n }\n\n this.status({ fill: \"green\", shape: \"dot\", text: `${method} done` });\n this.send({ ...msg, payload: result });\n } catch (error) {\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: error instanceof Error ? error.message : String(error),\n });\n this.error(\n `Apex ${this.config.method} failed: ${error instanceof Error ? error.message : String(error)}`,\n msg,\n );\n }\n }\n}\n","import { defineModule } from \"@bonsae/nrg/server\";\nimport SalesforceConnection from \"./nodes/salesforce-connection\";\nimport SalesforceSoql from \"./nodes/salesforce-soql\";\nimport SalesforceDml from \"./nodes/salesforce-dml\";\nimport SalesforceBulk from \"./nodes/salesforce-bulk\";\nimport SalesforceDescribe from \"./nodes/salesforce-describe\";\nimport SalesforceStreaming from \"./nodes/salesforce-streaming\";\nimport SalesforceApex from \"./nodes/salesforce-apex\";\n\nexport default defineModule({\n nodes: [\n SalesforceConnection,\n SalesforceSoql,\n SalesforceDml,\n SalesforceBulk,\n SalesforceDescribe,\n SalesforceStreaming,\n SalesforceApex,\n ],\n});\n"],"names":["ConfigsSchema","__nrgRegisterTypes","defineSchema","SchemaType","ConfigNode","IONode","defineModule","jsforce","crypto","ConfigsSchema$6","CredentialsSchema","AUTH_STATE_TTL","generateCodeVerifier","__name","generateCodeChallenge","verifier","createAuthState","params","state","codeVerifier","codeChallenge","pendingAuthStates","key","value","consumeAuthState","entry","escapeHtml","str","errorPage","message","autoClose","script","initAuthRoutes","RED","adminRoot","req","res","nodeId","loginUrl","clientId","overrideCallbackUrl","callbackUrl","error","code","oauthError","error_description","tokenResponse","errorBody","tokens","messageData","credentials","authenticated","initRoutes","_SalesforceConnection","__publicField","newAccessToken","_a","SalesforceConnection","ConfigsSchema$5","InputSchema","InputSchema$4","OutputSchema$4","_SalesforceSoql","msg","connection","conn","query","result","SalesforceSoql","ConfigsSchema$4","InputSchema$3","OutputSchema$3","_SalesforceDml","operation","sobject","sObjectType","data","SalesforceDml","ConfigsSchema$3","InputSchema$2","_SalesforceBulk","payload","ports","out","totalRecords","stream","resolve","reject","record","job","records","jobResults","successfulResults","failedResults","unprocessedRecords","successCount","failureCount","SalesforceBulk","ConfigsSchema$2","InputSchema$1","OutputSchema$2","_SalesforceDescribe","SalesforceDescribe","ConfigsSchema$1","OutputSchema","OutputSchema$1","_SalesforceStreaming","accessToken","instanceUrl","PubSubApiClient","numRequested","channelName","callback","_subscription","callbackType","errorMsg","replayId","delay","_b","SalesforceStreaming","_SalesforceApex","method","path","apexMethod","SalesforceApex","index"],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
<script type="text/html" data-help-name="salesforce-connection">
|
|
2
|
+
<p>Verwaltet die Verbindung zu einer Salesforce-Org mittels OAuth 2.0 mit PKCE. Stellt Authentifizierung und Token-Verwaltung für andere Salesforce-Knoten bereit.</p>
|
|
3
|
+
<h3>Eigenschaften</h3>
|
|
4
|
+
<div style="overflow-x:auto">
|
|
5
|
+
<table width="100%" style="min-width:500px">
|
|
6
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
7
|
+
<tbody>
|
|
8
|
+
<tr><td>Anmelde-URL</td><td>loginUrl</td><td>string</td><td>Ja</td><td><code>"https://login.salesforce.com"</code></td><td></td></tr>
|
|
9
|
+
<tr><td>Client-ID</td><td>clientId</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
|
|
10
|
+
<tr><td>API-Version</td><td>apiVersion</td><td></td><td>Ja</td><td><code>"62.0"</code></td><td></td></tr>
|
|
11
|
+
<tr><td>Callback-URL</td><td>callbackUrl</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
12
|
+
</tbody>
|
|
13
|
+
</table>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<h3>Zugangsdaten</h3>
|
|
17
|
+
<div style="overflow-x:auto">
|
|
18
|
+
<table width="100%" style="min-width:500px">
|
|
19
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
20
|
+
<tbody>
|
|
21
|
+
<tr><td>Zugriffstoken</td><td>accessToken</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
|
|
22
|
+
<tr><td>Aktualisierungstoken</td><td>refreshToken</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
|
|
23
|
+
<tr><td>Instanz-URL</td><td>instanceUrl</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
|
|
24
|
+
</tbody>
|
|
25
|
+
</table>
|
|
26
|
+
</div>
|
|
27
|
+
</script>
|
|
28
|
+
<script type="text/html" data-help-name="salesforce-soql">
|
|
29
|
+
<p>Führt eine SOQL-Abfrage gegen Salesforce aus und gibt die passenden Datensätze zurück.</p>
|
|
30
|
+
<h3>Eigenschaften</h3>
|
|
31
|
+
<div style="overflow-x:auto">
|
|
32
|
+
<table width="100%" style="min-width:500px">
|
|
33
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
34
|
+
<tbody>
|
|
35
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
36
|
+
<tr><td>Abfrage</td><td>query</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<h3>Eingang</h3>
|
|
42
|
+
<div style="overflow-x:auto">
|
|
43
|
+
<table width="100%" style="min-width:500px">
|
|
44
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
45
|
+
<tbody>
|
|
46
|
+
<tr><td>Eingabe-Payload</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
47
|
+
</tbody>
|
|
48
|
+
</table>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<h3>Ausgang</h3>
|
|
52
|
+
<div style="overflow-x:auto">
|
|
53
|
+
<table width="100%" style="min-width:500px">
|
|
54
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
55
|
+
<tbody>
|
|
56
|
+
<tr><td>Abfrageergebnisse</td><td>payload</td><td>array</td><td>Ja</td><td></td></tr>
|
|
57
|
+
<tr><td>Gesamtanzahl Datensätze</td><td>totalSize</td><td>number</td><td>Ja</td><td></td></tr>
|
|
58
|
+
<tr><td>Alle Datensätze abgerufen</td><td>done</td><td>boolean</td><td>Ja</td><td></td></tr>
|
|
59
|
+
</tbody>
|
|
60
|
+
</table>
|
|
61
|
+
</div>
|
|
62
|
+
</script>
|
|
63
|
+
<script type="text/html" data-help-name="salesforce-dml">
|
|
64
|
+
<p>Führt Erstellen-, Lesen-, Aktualisieren-, Löschen- oder Upsert-Operationen auf Salesforce-SObjects durch.</p>
|
|
65
|
+
<h3>Eigenschaften</h3>
|
|
66
|
+
<div style="overflow-x:auto">
|
|
67
|
+
<table width="100%" style="min-width:500px">
|
|
68
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
69
|
+
<tbody>
|
|
70
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
71
|
+
<tr><td>Operation</td><td>operation</td><td></td><td>Ja</td><td><code>"create"</code></td><td></td></tr>
|
|
72
|
+
<tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</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>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
74
|
+
<tr><td>Externes ID-Feld</td><td>externalIdField</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
75
|
+
</tbody>
|
|
76
|
+
</table>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<h3>Eingang</h3>
|
|
80
|
+
<div style="overflow-x:auto">
|
|
81
|
+
<table width="100%" style="min-width:500px">
|
|
82
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
83
|
+
<tbody>
|
|
84
|
+
<tr><td>Datensatzdaten oder ID(s)</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
85
|
+
</tbody>
|
|
86
|
+
</table>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<h3>Ausgang</h3>
|
|
90
|
+
<div style="overflow-x:auto">
|
|
91
|
+
<table width="100%" style="min-width:500px">
|
|
92
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
93
|
+
<tbody>
|
|
94
|
+
<tr><td>Operationsergebnis</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
95
|
+
</tbody>
|
|
96
|
+
</table>
|
|
97
|
+
</div>
|
|
98
|
+
</script>
|
|
99
|
+
<script type="text/html" data-help-name="salesforce-bulk">
|
|
100
|
+
<p>Führt Massenoperationen mit der Salesforce Bulk API 2.0 für große Datenmengen durch.</p>
|
|
101
|
+
<h3>Eigenschaften</h3>
|
|
102
|
+
<div style="overflow-x:auto">
|
|
103
|
+
<table width="100%" style="min-width:500px">
|
|
104
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
105
|
+
<tbody>
|
|
106
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
107
|
+
<tr><td>Operation</td><td>operation</td><td></td><td>Ja</td><td><code>"insert"</code></td><td></td></tr>
|
|
108
|
+
<tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
109
|
+
<tr><td>Externes ID-Feld</td><td>externalIdField</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
110
|
+
<tr><td></td><td>assignmentRuleId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
111
|
+
<tr><td></td><td>columnDelimiter</td><td></td><td>Ja</td><td><code>"COMMA"</code></td><td></td></tr>
|
|
112
|
+
<tr><td></td><td>lineEnding</td><td></td><td>Ja</td><td><code>"LF"</code></td><td></td></tr>
|
|
113
|
+
<tr><td></td><td>pollInterval</td><td>number [min: 1000]</td><td>Ja</td><td><code>5000</code></td><td></td></tr>
|
|
114
|
+
<tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Ja</td><td><code>60000</code></td><td></td></tr>
|
|
115
|
+
<tr><td></td><td>emitJobCreated</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
116
|
+
<tr><td></td><td>outputs</td><td>number</td><td>Ja</td><td><code>2</code></td><td></td></tr>
|
|
117
|
+
</tbody>
|
|
118
|
+
</table>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<h3>Eingang</h3>
|
|
122
|
+
<div style="overflow-x:auto">
|
|
123
|
+
<table width="100%" style="min-width:500px">
|
|
124
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
125
|
+
<tbody>
|
|
126
|
+
<tr><td>Datensatz-Array oder SOQL-Abfrage</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
127
|
+
</tbody>
|
|
128
|
+
</table>
|
|
129
|
+
</div>
|
|
130
|
+
</script>
|
|
131
|
+
<script type="text/html" data-help-name="salesforce-describe">
|
|
132
|
+
<p>Ruft Metadaten für ein Salesforce-SObject ab, einschließlich Felder, Beziehungen und Datensatztypen.</p>
|
|
133
|
+
<h3>Eigenschaften</h3>
|
|
134
|
+
<div style="overflow-x:auto">
|
|
135
|
+
<table width="100%" style="min-width:500px">
|
|
136
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
137
|
+
<tbody>
|
|
138
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
139
|
+
<tr><td>SObject-Typ</td><td>sObjectType</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
140
|
+
</tbody>
|
|
141
|
+
</table>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<h3>Eingang</h3>
|
|
145
|
+
<div style="overflow-x:auto">
|
|
146
|
+
<table width="100%" style="min-width:500px">
|
|
147
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
148
|
+
<tbody>
|
|
149
|
+
<tr><td>Eingabe-Payload</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
150
|
+
</tbody>
|
|
151
|
+
</table>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<h3>Ausgang</h3>
|
|
155
|
+
<div style="overflow-x:auto">
|
|
156
|
+
<table width="100%" style="min-width:500px">
|
|
157
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
158
|
+
<tbody>
|
|
159
|
+
<tr><td>SObject-Metadaten</td><td>payload</td><td>object</td><td>Ja</td><td></td></tr>
|
|
160
|
+
</tbody>
|
|
161
|
+
</table>
|
|
162
|
+
</div>
|
|
163
|
+
</script>
|
|
164
|
+
<script type="text/html" data-help-name="salesforce-streaming">
|
|
165
|
+
<p>Abonniert Salesforce Platform Events und Change Data Capture Events über die Pub/Sub API (gRPC).</p>
|
|
166
|
+
<h3>Eigenschaften</h3>
|
|
167
|
+
<div style="overflow-x:auto">
|
|
168
|
+
<table width="100%" style="min-width:500px">
|
|
169
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
170
|
+
<tbody>
|
|
171
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
172
|
+
<tr><td>Kanal</td><td>channelName</td><td>string</td><td>Ja</td><td><code>""</code></td><td></td></tr>
|
|
173
|
+
<tr><td>Abonnieren ab</td><td>subscribeType</td><td></td><td>Ja</td><td><code>"LATEST"</code></td><td></td></tr>
|
|
174
|
+
<tr><td>Replay-ID</td><td>replayId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
175
|
+
<tr><td>Batchgröße</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Ja</td><td><code>100</code></td><td></td></tr>
|
|
176
|
+
</tbody>
|
|
177
|
+
</table>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<h3>Ausgang</h3>
|
|
181
|
+
<div style="overflow-x:auto">
|
|
182
|
+
<table width="100%" style="min-width:500px">
|
|
183
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
184
|
+
<tbody>
|
|
185
|
+
<tr><td>Event-Payload</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
186
|
+
<tr><td>Event-Replay-ID</td><td>replayId</td><td></td><td>Ja</td><td></td></tr>
|
|
187
|
+
<tr><td>Kanalname</td><td>channel</td><td>string</td><td>Ja</td><td></td></tr>
|
|
188
|
+
<tr><td>Themenname</td><td>topic</td><td>string</td><td>Ja</td><td></td></tr>
|
|
189
|
+
</tbody>
|
|
190
|
+
</table>
|
|
191
|
+
</div>
|
|
192
|
+
</script>
|
|
193
|
+
<script type="text/html" data-help-name="salesforce-apex">
|
|
194
|
+
<p>Ruft einen Salesforce Apex REST-Endpunkt auf.</p>
|
|
195
|
+
<h3>Eigenschaften</h3>
|
|
196
|
+
<div style="overflow-x:auto">
|
|
197
|
+
<table width="100%" style="min-width:500px">
|
|
198
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th>Standard</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
199
|
+
<tbody>
|
|
200
|
+
<tr><td>Verbindung</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Ja</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
201
|
+
<tr><td>Methode</td><td>method</td><td></td><td>Ja</td><td><code>"POST"</code></td><td></td></tr>
|
|
202
|
+
<tr><td>Pfad</td><td>path</td><td>TypedInput</td><td>Ja</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
203
|
+
</tbody>
|
|
204
|
+
</table>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
<h3>Eingang</h3>
|
|
208
|
+
<div style="overflow-x:auto">
|
|
209
|
+
<table width="100%" style="min-width:500px">
|
|
210
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
211
|
+
<tbody>
|
|
212
|
+
<tr><td>Anfragekörper</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
213
|
+
</tbody>
|
|
214
|
+
</table>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
<h3>Ausgang</h3>
|
|
218
|
+
<div style="overflow-x:auto">
|
|
219
|
+
<table width="100%" style="min-width:500px">
|
|
220
|
+
<thead><tr><th>Bezeichnung</th><th>Eigenschaft</th><th>Typ</th><th>Erforderlich</th><th style="width:35%">Beschreibung</th></tr></thead>
|
|
221
|
+
<tbody>
|
|
222
|
+
<tr><td>Apex-Antwort</td><td>payload</td><td></td><td>Ja</td><td></td></tr>
|
|
223
|
+
</tbody>
|
|
224
|
+
</table>
|
|
225
|
+
</div>
|
|
226
|
+
</script>
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"salesforce-apex": {
|
|
3
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
4
|
+
"label": "Apex",
|
|
5
|
+
"description": "Ruft einen Salesforce Apex REST-Endpunkt auf.",
|
|
6
|
+
"inputLabels": "Anfrage",
|
|
7
|
+
"outputLabels": [
|
|
8
|
+
"Antwort"
|
|
9
|
+
],
|
|
10
|
+
"configs": {
|
|
11
|
+
"connection": "Verbindung",
|
|
12
|
+
"method": "Methode",
|
|
13
|
+
"path": "Pfad"
|
|
14
|
+
},
|
|
15
|
+
"input": {
|
|
16
|
+
"payload": "Anfragekörper"
|
|
17
|
+
},
|
|
18
|
+
"outputs": [
|
|
19
|
+
{
|
|
20
|
+
"payload": "Apex-Antwort"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"salesforce-bulk": {
|
|
25
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
26
|
+
"label": "Bulk",
|
|
27
|
+
"description": "Führt Massenoperationen mit der Salesforce Bulk API 2.0 für große Datenmengen durch.",
|
|
28
|
+
"inputLabels": "Datensätze oder Abfrage",
|
|
29
|
+
"outputLabels": [
|
|
30
|
+
"Datensatz",
|
|
31
|
+
"Job Abgeschlossen"
|
|
32
|
+
],
|
|
33
|
+
"configs": {
|
|
34
|
+
"connection": "Verbindung",
|
|
35
|
+
"operation": "Operation",
|
|
36
|
+
"sObjectType": "SObject-Typ",
|
|
37
|
+
"externalIdField": "Externes ID-Feld"
|
|
38
|
+
},
|
|
39
|
+
"input": {
|
|
40
|
+
"payload": "Datensatz-Array oder SOQL-Abfrage"
|
|
41
|
+
},
|
|
42
|
+
"outputs": [
|
|
43
|
+
{
|
|
44
|
+
"payload": "Massenoperationsergebnisse"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"salesforce-connection": {
|
|
49
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
50
|
+
"label": "Verbindung",
|
|
51
|
+
"description": "Verwaltet die Verbindung zu einer Salesforce-Org mittels OAuth 2.0 mit PKCE. Stellt Authentifizierung und Token-Verwaltung für andere Salesforce-Knoten bereit.",
|
|
52
|
+
"configs": {
|
|
53
|
+
"loginUrl": "Anmelde-URL",
|
|
54
|
+
"clientId": "Client-ID",
|
|
55
|
+
"apiVersion": "API-Version",
|
|
56
|
+
"callbackUrl": "Callback-URL"
|
|
57
|
+
},
|
|
58
|
+
"credentials": {
|
|
59
|
+
"accessToken": "Zugriffstoken",
|
|
60
|
+
"refreshToken": "Aktualisierungstoken",
|
|
61
|
+
"instanceUrl": "Instanz-URL"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"salesforce-describe": {
|
|
65
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
66
|
+
"label": "Describe",
|
|
67
|
+
"description": "Ruft Metadaten für ein Salesforce-SObject ab, einschließlich Felder, Beziehungen und Datensatztypen.",
|
|
68
|
+
"inputLabels": "SObject-Name",
|
|
69
|
+
"outputLabels": [
|
|
70
|
+
"SObject-Metadaten"
|
|
71
|
+
],
|
|
72
|
+
"configs": {
|
|
73
|
+
"connection": "Verbindung",
|
|
74
|
+
"sObjectType": "SObject-Typ"
|
|
75
|
+
},
|
|
76
|
+
"input": {
|
|
77
|
+
"payload": "Eingabe-Payload"
|
|
78
|
+
},
|
|
79
|
+
"outputs": [
|
|
80
|
+
{
|
|
81
|
+
"payload": "SObject-Metadaten"
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"salesforce-dml": {
|
|
86
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
87
|
+
"label": "DML",
|
|
88
|
+
"description": "Führt Erstellen-, Lesen-, Aktualisieren-, Löschen- oder Upsert-Operationen auf Salesforce-SObjects durch.",
|
|
89
|
+
"inputLabels": "Datensatzdaten",
|
|
90
|
+
"outputLabels": [
|
|
91
|
+
"Operationsergebnis"
|
|
92
|
+
],
|
|
93
|
+
"configs": {
|
|
94
|
+
"connection": "Verbindung",
|
|
95
|
+
"operation": "Operation",
|
|
96
|
+
"sObjectType": "SObject-Typ",
|
|
97
|
+
"externalIdField": "Externes ID-Feld"
|
|
98
|
+
},
|
|
99
|
+
"input": {
|
|
100
|
+
"payload": "Datensatzdaten oder ID(s)"
|
|
101
|
+
},
|
|
102
|
+
"outputs": [
|
|
103
|
+
{
|
|
104
|
+
"payload": "Operationsergebnis"
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"salesforce-soql": {
|
|
109
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
110
|
+
"label": "SOQL",
|
|
111
|
+
"description": "Führt eine SOQL-Abfrage gegen Salesforce aus und gibt die passenden Datensätze zurück.",
|
|
112
|
+
"inputLabels": "Abfrage-Eingabe",
|
|
113
|
+
"outputLabels": [
|
|
114
|
+
"Abfrageergebnisse"
|
|
115
|
+
],
|
|
116
|
+
"configs": {
|
|
117
|
+
"connection": "Verbindung",
|
|
118
|
+
"query": "Abfrage"
|
|
119
|
+
},
|
|
120
|
+
"input": {
|
|
121
|
+
"payload": "Eingabe-Payload"
|
|
122
|
+
},
|
|
123
|
+
"outputs": [
|
|
124
|
+
{
|
|
125
|
+
"payload": "Abfrageergebnisse",
|
|
126
|
+
"totalSize": "Gesamtanzahl Datensätze",
|
|
127
|
+
"done": "Alle Datensätze abgerufen"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"salesforce-streaming": {
|
|
132
|
+
"$schema": "https://unpkg.com/@bonsae/nrg/schemas/labels.schema.json",
|
|
133
|
+
"label": "Streaming",
|
|
134
|
+
"description": "Abonniert Salesforce Platform Events und Change Data Capture Events über die Pub/Sub API (gRPC).",
|
|
135
|
+
"outputLabels": [
|
|
136
|
+
"Ereignis"
|
|
137
|
+
],
|
|
138
|
+
"configs": {
|
|
139
|
+
"connection": "Verbindung",
|
|
140
|
+
"channelName": "Kanal",
|
|
141
|
+
"subscribeType": "Abonnieren ab",
|
|
142
|
+
"replayId": "Replay-ID",
|
|
143
|
+
"numRequested": "Batchgröße"
|
|
144
|
+
},
|
|
145
|
+
"outputs": [
|
|
146
|
+
{
|
|
147
|
+
"payload": "Event-Payload",
|
|
148
|
+
"replayId": "Event-Replay-ID",
|
|
149
|
+
"channel": "Kanalname",
|
|
150
|
+
"topic": "Themenname"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
}
|