@bonsae/node-red-salesforce 0.1.0 → 0.2.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/LICENSE +62 -0
- package/README.md +1 -1
- package/index.d.ts +17 -0
- package/index.html +65 -1
- package/index.mjs +252 -197
- package/index.mjs.map +1 -1
- package/locales/de/index.html +14 -0
- package/locales/en-US/index.html +14 -0
- package/locales/es-ES/index.html +14 -0
- package/locales/fr/index.html +14 -0
- package/locales/ja/index.html +14 -0
- package/locales/ko/index.html +14 -0
- package/locales/pt-BR/index.html +14 -0
- package/locales/ru/index.html +14 -0
- package/locales/zh-CN/index.html +14 -0
- package/locales/zh-TW/index.html +14 -0
- package/package.json +3 -3
- package/resources/index.DheUFZEA.js +1 -0
- package/resources/index.CfTW8fjc.js +0 -1
package/index.mjs.map
CHANGED
|
@@ -1 +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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"}
|
|
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 emitError: SchemaType.Boolean({ default: false }),\n emitComplete: SchemaType.Boolean({ default: false }),\n emitStatus: SchemaType.Boolean({ default: false }),\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 emitError: SchemaType.Boolean({ default: false }),\n emitComplete: SchemaType.Boolean({ default: false }),\n emitStatus: SchemaType.Boolean({ default: false }),\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 emitError: SchemaType.Boolean({ default: false }),\n emitComplete: SchemaType.Boolean({ default: false }),\n emitStatus: SchemaType.Boolean({ default: false }),\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 emitError: SchemaType.Boolean({ default: false }),\n emitStatus: SchemaType.Boolean({ default: false }),\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 private maxReconnectAttempts = 10;\n private grpcErrorHandler: ((err: Error) => void) | null = null;\n private stopped = false;\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 if (this.stopped) return;\n try {\n this.status({ fill: \"green\", shape: \"dot\", text: \"connecting...\" });\n\n // Refresh the jsforce connection to get a fresh token\n // (jsforce auto-refreshes expired tokens via the refresh event)\n let conn;\n try {\n conn = await connection.getConnection();\n // Validate the token is still valid with a lightweight API call\n await conn.identity();\n } catch {\n this.status({ fill: \"red\", shape: \"dot\", text: \"auth expired\" });\n this.error(\"Salesforce token expired. Re-authorize the connection.\");\n return;\n }\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\n // Stop retrying on auth errors — token is expired\n if (\n errorMsg.includes(\"UNAUTHENTICATED\") ||\n errorMsg.includes(\"authentication\")\n ) {\n this.stopped = true;\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: \"auth expired — re-authorize\",\n });\n this.error(\n \"Salesforce token expired. Re-authorize the connection.\",\n );\n this.cleanup();\n return;\n }\n\n this.status({ fill: \"red\", shape: \"dot\", text: errorMsg });\n this.scheduleReconnect(connection);\n } else if (callbackType === \"end\") {\n if (this.stopped) return;\n this.log(\"Streaming subscription ended\");\n this.status({ fill: \"red\", shape: \"dot\", text: \"disconnected\" });\n this.scheduleReconnect(connection);\n }\n };\n\n // Guard against uncaught gRPC errors that crash the process.\n // The @grpc/grpc-js library can throw before the pubsub client\n // attaches its own error handler to the bidi stream.\n if (this.grpcErrorHandler) {\n process.removeListener(\"uncaughtException\", this.grpcErrorHandler);\n }\n this.grpcErrorHandler = (err: Error) => {\n if (\n err.message?.includes(\"UNAUTHENTICATED\") ||\n err.message?.includes(\"authentication\")\n ) {\n this.stopped = true;\n this.warn(`Caught gRPC auth error: ${err.message}`);\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: \"auth expired — re-authorize\",\n });\n this.cleanup();\n // Don't rethrow — we handled it\n }\n };\n process.on(\"uncaughtException\", this.grpcErrorHandler);\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 if (this.stopped) return;\n this.reconnectAttempt++;\n\n if (this.reconnectAttempt > this.maxReconnectAttempts) {\n this.error(\n `Streaming: max reconnect attempts (${this.maxReconnectAttempts}) reached. Giving up.`,\n );\n this.status({\n fill: \"red\",\n shape: \"dot\",\n text: \"reconnect failed — re-deploy to retry\",\n });\n return;\n }\n\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}/${this.maxReconnectAttempts})`,\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.grpcErrorHandler) {\n process.removeListener(\"uncaughtException\", this.grpcErrorHandler);\n this.grpcErrorHandler = null;\n }\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 emitError: SchemaType.Boolean({ default: false }),\n emitComplete: SchemaType.Boolean({ default: false }),\n emitStatus: SchemaType.Boolean({ default: false }),\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","err","_b","replayId","delay","SalesforceStreaming","_SalesforceApex","method","path","apexMethod","SalesforceApex","index"],"mappings":"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"}
|
package/locales/de/index.html
CHANGED
|
@@ -72,6 +72,9 @@
|
|
|
72
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
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
74
|
<tr><td>Externes ID-Feld</td><td>externalIdField</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
75
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
76
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
77
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
75
78
|
</tbody>
|
|
76
79
|
</table>
|
|
77
80
|
</div>
|
|
@@ -114,6 +117,9 @@
|
|
|
114
117
|
<tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Ja</td><td><code>60000</code></td><td></td></tr>
|
|
115
118
|
<tr><td></td><td>emitJobCreated</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
116
119
|
<tr><td></td><td>outputs</td><td>number</td><td>Ja</td><td><code>2</code></td><td></td></tr>
|
|
120
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
121
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
122
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
117
123
|
</tbody>
|
|
118
124
|
</table>
|
|
119
125
|
</div>
|
|
@@ -137,6 +143,9 @@
|
|
|
137
143
|
<tbody>
|
|
138
144
|
<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
145
|
<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>
|
|
146
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
147
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
148
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
140
149
|
</tbody>
|
|
141
150
|
</table>
|
|
142
151
|
</div>
|
|
@@ -173,6 +182,8 @@
|
|
|
173
182
|
<tr><td>Abonnieren ab</td><td>subscribeType</td><td></td><td>Ja</td><td><code>"LATEST"</code></td><td></td></tr>
|
|
174
183
|
<tr><td>Replay-ID</td><td>replayId</td><td>string</td><td>Nein</td><td><code>""</code></td><td></td></tr>
|
|
175
184
|
<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>
|
|
185
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
186
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
176
187
|
</tbody>
|
|
177
188
|
</table>
|
|
178
189
|
</div>
|
|
@@ -200,6 +211,9 @@
|
|
|
200
211
|
<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
212
|
<tr><td>Methode</td><td>method</td><td></td><td>Ja</td><td><code>"POST"</code></td><td></td></tr>
|
|
202
213
|
<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>
|
|
214
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
215
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
216
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Ja</td><td><code>false</code></td><td></td></tr>
|
|
203
217
|
</tbody>
|
|
204
218
|
</table>
|
|
205
219
|
</div>
|
package/locales/en-US/index.html
CHANGED
|
@@ -72,6 +72,9 @@
|
|
|
72
72
|
<tr><td>SObject Type</td><td>sObjectType</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
73
73
|
<tr><td></td><td>record</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
74
74
|
<tr><td>External ID Field</td><td>externalIdField</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
|
|
75
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
76
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
77
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
75
78
|
</tbody>
|
|
76
79
|
</table>
|
|
77
80
|
</div>
|
|
@@ -114,6 +117,9 @@
|
|
|
114
117
|
<tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Yes</td><td><code>60000</code></td><td></td></tr>
|
|
115
118
|
<tr><td></td><td>emitJobCreated</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
116
119
|
<tr><td></td><td>outputs</td><td>number</td><td>Yes</td><td><code>2</code></td><td></td></tr>
|
|
120
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
121
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
122
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
117
123
|
</tbody>
|
|
118
124
|
</table>
|
|
119
125
|
</div>
|
|
@@ -137,6 +143,9 @@
|
|
|
137
143
|
<tbody>
|
|
138
144
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
139
145
|
<tr><td>SObject Type</td><td>sObjectType</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
146
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
147
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
148
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
140
149
|
</tbody>
|
|
141
150
|
</table>
|
|
142
151
|
</div>
|
|
@@ -173,6 +182,8 @@
|
|
|
173
182
|
<tr><td>Subscribe From</td><td>subscribeType</td><td></td><td>Yes</td><td><code>"LATEST"</code></td><td></td></tr>
|
|
174
183
|
<tr><td>Replay ID</td><td>replayId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
|
|
175
184
|
<tr><td>Batch Size</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Yes</td><td><code>100</code></td><td></td></tr>
|
|
185
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
186
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
176
187
|
</tbody>
|
|
177
188
|
</table>
|
|
178
189
|
</div>
|
|
@@ -200,6 +211,9 @@
|
|
|
200
211
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Yes</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
201
212
|
<tr><td>Method</td><td>method</td><td></td><td>Yes</td><td><code>"POST"</code></td><td></td></tr>
|
|
202
213
|
<tr><td>Path</td><td>path</td><td>TypedInput</td><td>Yes</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
214
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
215
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
216
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Yes</td><td><code>false</code></td><td></td></tr>
|
|
203
217
|
</tbody>
|
|
204
218
|
</table>
|
|
205
219
|
</div>
|
package/locales/es-ES/index.html
CHANGED
|
@@ -72,6 +72,9 @@
|
|
|
72
72
|
<tr><td>Tipo de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
73
73
|
<tr><td></td><td>record</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
74
74
|
<tr><td>Campo de ID externo</td><td>externalIdField</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
|
|
75
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
76
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
77
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
75
78
|
</tbody>
|
|
76
79
|
</table>
|
|
77
80
|
</div>
|
|
@@ -114,6 +117,9 @@
|
|
|
114
117
|
<tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Sí</td><td><code>60000</code></td><td></td></tr>
|
|
115
118
|
<tr><td></td><td>emitJobCreated</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
116
119
|
<tr><td></td><td>outputs</td><td>number</td><td>Sí</td><td><code>2</code></td><td></td></tr>
|
|
120
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
121
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
122
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
117
123
|
</tbody>
|
|
118
124
|
</table>
|
|
119
125
|
</div>
|
|
@@ -137,6 +143,9 @@
|
|
|
137
143
|
<tbody>
|
|
138
144
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
139
145
|
<tr><td>Tipo de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
146
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
147
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
148
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
140
149
|
</tbody>
|
|
141
150
|
</table>
|
|
142
151
|
</div>
|
|
@@ -173,6 +182,8 @@
|
|
|
173
182
|
<tr><td>Suscribirse desde</td><td>subscribeType</td><td></td><td>Sí</td><td><code>"LATEST"</code></td><td></td></tr>
|
|
174
183
|
<tr><td>ID de reproducción</td><td>replayId</td><td>string</td><td>No</td><td><code>""</code></td><td></td></tr>
|
|
175
184
|
<tr><td>Tamaño del lote</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Sí</td><td><code>100</code></td><td></td></tr>
|
|
185
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
186
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
176
187
|
</tbody>
|
|
177
188
|
</table>
|
|
178
189
|
</div>
|
|
@@ -200,6 +211,9 @@
|
|
|
200
211
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Sí</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
201
212
|
<tr><td>Método</td><td>method</td><td></td><td>Sí</td><td><code>"POST"</code></td><td></td></tr>
|
|
202
213
|
<tr><td>Ruta</td><td>path</td><td>TypedInput</td><td>Sí</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
214
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
215
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
216
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Sí</td><td><code>false</code></td><td></td></tr>
|
|
203
217
|
</tbody>
|
|
204
218
|
</table>
|
|
205
219
|
</div>
|
package/locales/fr/index.html
CHANGED
|
@@ -72,6 +72,9 @@
|
|
|
72
72
|
<tr><td>Type de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Oui</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
73
73
|
<tr><td></td><td>record</td><td>TypedInput</td><td>Oui</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
74
74
|
<tr><td>Champ d'ID externe</td><td>externalIdField</td><td>string</td><td>Non</td><td><code>""</code></td><td></td></tr>
|
|
75
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
76
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
77
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
75
78
|
</tbody>
|
|
76
79
|
</table>
|
|
77
80
|
</div>
|
|
@@ -114,6 +117,9 @@
|
|
|
114
117
|
<tr><td></td><td>pollTimeout</td><td>number [min: 5000]</td><td>Oui</td><td><code>60000</code></td><td></td></tr>
|
|
115
118
|
<tr><td></td><td>emitJobCreated</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
116
119
|
<tr><td></td><td>outputs</td><td>number</td><td>Oui</td><td><code>2</code></td><td></td></tr>
|
|
120
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
121
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
122
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
117
123
|
</tbody>
|
|
118
124
|
</table>
|
|
119
125
|
</div>
|
|
@@ -137,6 +143,9 @@
|
|
|
137
143
|
<tbody>
|
|
138
144
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Oui</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
139
145
|
<tr><td>Type de SObject</td><td>sObjectType</td><td>TypedInput</td><td>Oui</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
146
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
147
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
148
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
140
149
|
</tbody>
|
|
141
150
|
</table>
|
|
142
151
|
</div>
|
|
@@ -173,6 +182,8 @@
|
|
|
173
182
|
<tr><td>S'abonner depuis</td><td>subscribeType</td><td></td><td>Oui</td><td><code>"LATEST"</code></td><td></td></tr>
|
|
174
183
|
<tr><td>ID de relecture</td><td>replayId</td><td>string</td><td>Non</td><td><code>""</code></td><td></td></tr>
|
|
175
184
|
<tr><td>Taille du lot</td><td>numRequested</td><td>number [min: 1, max: 100]</td><td>Oui</td><td><code>100</code></td><td></td></tr>
|
|
185
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
186
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
176
187
|
</tbody>
|
|
177
188
|
</table>
|
|
178
189
|
</div>
|
|
@@ -200,6 +211,9 @@
|
|
|
200
211
|
<tr><td>Connection</td><td>connection</td><td>NodeRef → salesforce-connection [format: node-id]</td><td>Oui</td><td></td><td>Reference to salesforce-connection</td></tr>
|
|
201
212
|
<tr><td>Méthode</td><td>method</td><td></td><td>Oui</td><td><code>"POST"</code></td><td></td></tr>
|
|
202
213
|
<tr><td>Chemin</td><td>path</td><td>TypedInput</td><td>Oui</td><td><code>{"type":"str","value":""}</code></td><td>Represents a Node-RED TypedInput value and its type.</td></tr>
|
|
214
|
+
<tr><td></td><td>emitError</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
215
|
+
<tr><td></td><td>emitComplete</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
216
|
+
<tr><td></td><td>emitStatus</td><td>boolean</td><td>Oui</td><td><code>false</code></td><td></td></tr>
|
|
203
217
|
</tbody>
|
|
204
218
|
</table>
|
|
205
219
|
</div>
|