{"id":23768889,"url":"https://github.com/msrivastav13/node-sf-bulk2","last_synced_at":"2025-09-05T13:31:37.569Z","repository":{"id":42664240,"uuid":"343251606","full_name":"msrivastav13/node-sf-bulk2","owner":"msrivastav13","description":"A Node.js SDK to work with Salesforce Bulk API 2.0 ","archived":false,"fork":false,"pushed_at":"2023-03-05T21:42:30.000Z","size":507,"stargazers_count":11,"open_issues_count":15,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-05-11T07:31:15.793Z","etag":null,"topics":["bulkapi2","salesforce","salesforce-developers","salesforce-integration","salesforcedeveloper"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/msrivastav13.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-01T00:57:56.000Z","updated_at":"2023-02-10T01:46:10.000Z","dependencies_parsed_at":"2023-01-27T12:45:34.357Z","dependency_job_id":null,"html_url":"https://github.com/msrivastav13/node-sf-bulk2","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msrivastav13%2Fnode-sf-bulk2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msrivastav13%2Fnode-sf-bulk2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msrivastav13%2Fnode-sf-bulk2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msrivastav13%2Fnode-sf-bulk2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msrivastav13","download_url":"https://codeload.github.com/msrivastav13/node-sf-bulk2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232042469,"owners_count":18464351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bulkapi2","salesforce","salesforce-developers","salesforce-integration","salesforcedeveloper"],"created_at":"2025-01-01T01:46:43.401Z","updated_at":"2025-01-01T01:46:43.789Z","avatar_url":"https://github.com/msrivastav13.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node-SF-BULK2\n\nThis is a node library to work with the [Salesforce Bulk API 2.0](https://developer.salesforce.com/docs/atlas.en-us.230.0.api_asynch.meta/api_bulk_v2/asynch_api_intro.htm).\n\nYou can use this library in combination with Salesforce CLI or any other library (like [jsforce](https://jsforce.github.io/document/) or [@salesforce/sf-core](https://github.com/forcedotcom/sfdx-core)) that handles authentication.\n\n## TypeScript compatible\n\nThe library is built using [TypeScript 4.0](https://www.typescriptlang.org/) and provides typescript definitions to make it easier to use in Node.js projects using TypeScript\n\n# Installation\n\n`npm install node-sf-bulk2`\n\n# Usage\n\nSee the [API Documentation](https://msrivastav13.github.io/node-sf-bulk2/index.html)\n\n## Example usage\n\nSee [examples folder](/examples) for Typescript and JavaScript sample code on how to use this library\n\n### TypeScript example using jsforce for Bulk Query\n\nThe below code shows how to use the library to submit bulk query request\n\n```typescript\nimport jsforce from 'jsforce';\nimport { BulkAPI2 } from 'node-sf-bulk2';\nimport { BulkAPI2Connection, QueryInput } from 'node-sf-bulk2';\n\nasync function submitBulkQueryJob() {\n    if (process.env.username \u0026\u0026 process.env.password) {\n        const conn = new jsforce.Connection({});\n        await conn.login(process.env.username, process.env.password);\n        const bulkconnect: BulkAPI2Connection = {\n            'accessToken': conn.accessToken,\n            'apiVersion': '51.0',\n            'instanceUrl': conn.instanceUrl\n        };\n        try {\n            const bulkapi2 = new BulkAPI2(bulkconnect);\n            const queryInput: QueryInput = {\n                'query': 'Select Id from Account',\n                'operation': 'query'\n            };\n            const response = await bulkapi2.submitBulkQueryJob(queryInput);\n            return response;\n        } catch (ex) {\n            console.log(ex.response.data[0].errorCode);\n            console.log(ex.response.data[0].message);\n        }\n    } else {\n        throw 'set environment variable with your orgs username and password'\n    }\n}\n// submit bulk query request\nsubmitBulkQueryJob();\n```\n### JavaScript example using jsforce for Bulk Query\n\nThe below code shows how to use the library to submit bulk query request using node.js (uses commonjs modules)\n\n```javascript\nconst jsforce = require('jsforce');\nconst sfbulk = require('node-sf-bulk2');\n\nasync function submitBulkQueryJob() {\n    if (process.env.username \u0026\u0026 process.env.password) {\n        const conn = new jsforce.Connection({});\n        await conn.login(process.env.username, process.env.password);\n        const bulkconnect = {\n            'accessToken': conn.accessToken,\n            'apiVersion': '51.0',\n            'instanceUrl': conn.instanceUrl\n        };\n        try {\n            const bulkapi2 = new sfbulk.BulkAPI2(bulkconnect);\n            const queryInput = {\n                'query': 'Select Id from Account',\n                'operation': 'query'\n            };\n            const response = await bulkapi2.submitBulkQueryJob(queryInput);\n            console.log(response);\n        } catch (ex) {\n            console.log(ex);\n        }\n    } else {\n        throw 'set environment variable with your orgs username and password'\n    }\n}\n// submit bulk query request\nsubmitBulkQueryJob();\n```\n\n### TypeScript example for uploading data from local CSV file\n\n\nThis assumes you have local file `account.csv` in project workspace\n\n```typescript\nimport jsforce from 'jsforce';\nimport { BulkAPI2 } from 'node-sf-bulk2';\nimport { BulkAPI2Connection, JobUploadRequest, JobUploadResponse, OPERATION, STATE } from 'node-sf-bulk2';\nimport * as fs from 'fs';\nimport { promisify } from \"util\";\n\nclass BulkInsert {\n    async createDataUploadJob(bulkapi2: BulkAPI2): Promise\u003cJobUploadResponse | undefined\u003e {\n        const jobRequest: JobUploadRequest = {\n            'object': 'Account',\n            'operation': OPERATION[0]\n        };\n        const response: JobUploadResponse = await bulkapi2.createDataUploadJob(jobRequest);\n        return response;\n    }\n}\n// anonymous function uploading data in CSV format to Salesforce using Bulk V2\n \n(async () =\u003e {\n    if (process.env.username \u0026\u0026 process.env.password) {\n        // establish jsforce connection\n        const conn = new jsforce.Connection({});\n        await conn.login(process.env.username, process.env.password);\n        // create a bulk connection object using jsforce connection\n        const bulkconnect: BulkAPI2Connection = {\n            'accessToken': conn.accessToken,\n            'apiVersion': '51.0',\n            'instanceUrl': conn.instanceUrl\n        };\n        try {\n            // create a new BulkAPI2 class\n            const bulkrequest = new BulkAPI2(bulkconnect);\n            // create a bulk insert job\n            const response: JobUploadResponse | undefined = await (new BulkInsert().createDataUploadJob(bulkrequest));\n            if (response) {\n                // read csv data from the local file system\n                const data = await promisify(fs.readFile)(process.cwd() + \"/account.csv\", \"UTF-8\");\n                const status: number = await bulkrequest.uploadJobData(response.contentUrl, data);\n                if (status === 201) {\n                    // close the job for processing\n                    await bulkrequest.closeOrAbortJob(response.id, STATE[1]);\n                }\n            }\n        } catch (ex) {\n            console.log(ex.response.data[0].errorCode);\n            console.log(ex.response.data[0].message);\n        }\n    } else {\n        throw 'set environment variable with your orgs username and password'\n    }\n})();\n```\n\n### JavaScript example for uploading data from local CSV file\n\n\nThis assumes you have local file `account.csv` in project workspace\n\n```javascript\n\nconst jsforce = require('jsforce');\nconst sfbulk = require('node-sf-bulk2');\nconst util = require('util');\nconst fs = require('fs');\n\n(async () =\u003e {\n    if (process.env.username \u0026\u0026 process.env.password) {\n        const conn = new jsforce.Connection({});\n        await conn.login(process.env.username, process.env.password);\n        const bulkconnect = {\n            'accessToken': conn.accessToken,\n            'apiVersion': '51.0',\n            'instanceUrl': conn.instanceUrl\n        };\n        try {\n            // create a new BulkAPI2 class\n            const bulkrequest = new sfbulk.BulkAPI2(bulkconnect);\n            // create a bulk insert job\n            const jobRequest = {\n                'object': 'Account',\n                'operation': 'insert'\n            };\n            const response = await bulkrequest.createDataUploadJob(jobRequest);\n            if (response.id) {\n                // read csv data from the local file system\n                const data = await util.promisify(fs.readFile)(process.cwd() + \"/account.csv\", \"UTF-8\");\n                const status = await bulkrequest.uploadJobData(response.contentUrl, data);\n                if (status === 201) {\n                    // close the job for processing\n                    await bulkrequest.closeOrAbortJob(response.id, 'UploadComplete');\n                }\n            }\n        } catch (ex) {\n            console.log(ex);\n        }\n    } else {\n        throw 'set environment variable with your orgs username and password'\n    }\n})();\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsrivastav13%2Fnode-sf-bulk2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsrivastav13%2Fnode-sf-bulk2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsrivastav13%2Fnode-sf-bulk2/lists"}