Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
8bc0d02
feat: Implement Salesforce to DocuSign contract automation integration
iamvirul Mar 12, 2026
53aa319
feat: Enhance DocuSign envelope processing with expiration and idempo…
iamvirul Mar 13, 2026
2eab895
feat: Improve contact retrieval logic by adding role-based fallback a…
iamvirul Mar 13, 2026
1423e94
feat: Update DocuSign authentication to use OAuth2 with client ID, cl…
iamvirul Mar 13, 2026
079d38f
feat: Enhance DocuSign envelope creation with reminders and improved …
iamvirul Mar 13, 2026
df0cdf7
feat: Enhance email masking for logging to protect PII in contact val…
iamvirul Mar 13, 2026
84be556
feat: Add Id, OpportunityId, and IsPrimary fields to Salesforce SOQL …
iamvirul Mar 13, 2026
470c7b9
feat: Enhance error handling for opportunity field retrieval and temp…
iamvirul Mar 13, 2026
1fe50d7
fix: Update Salesforce listener service path to /data/ChangeEvents.
iamvirul Mar 13, 2026
2edb11a
refactor: remove `salesforceChannelName` configurable and update READ…
iamvirul Mar 13, 2026
7009d5e
feat: Add Salesforce ID validation function and integrate it into key…
iamvirul Mar 13, 2026
b857b8b
fix: Extract opportunity ID from Salesforce ChangeEvent metadata inst…
iamvirul Mar 13, 2026
f70b865
Update ballerina-integrator/salesforce-closewon-contract-automation/R…
iamvirul Mar 13, 2026
12d3804
Update ballerina-integrator/salesforce-closewon-contract-automation/f…
iamvirul Mar 13, 2026
902c95d
Update ballerina-integrator/salesforce-closewon-contract-automation/R…
iamvirul Mar 13, 2026
aff6984
Update ballerina-integrator/salesforce-closewon-contract-automation/.…
iamvirul Mar 13, 2026
0ee8030
Update ballerina-integrator/salesforce-closewon-contract-automation/.…
iamvirul Mar 13, 2026
e47ecb3
Update ballerina-integrator/salesforce-closewon-contract-automation/.…
iamvirul Mar 13, 2026
7d8cfcf
Update ballerina-integrator/salesforce-closewon-contract-automation/B…
iamvirul Mar 13, 2026
c1cecd1
docs: Condense the integration's functionality description in README …
iamvirul Mar 13, 2026
22753cf
docs: remove "Running Locally" section from README
iamvirul Mar 13, 2026
ea769ee
docs: Refine the description of Salesforce opportunity event processi…
iamvirul Mar 13, 2026
635bfb2
docs: Simplify Salesforce setup instructions by removing detailed set…
iamvirul Mar 13, 2026
33df693
chore: remove Dependencies.toml file
iamvirul Mar 13, 2026
199bff4
fix: Standardize 'DocuSign' capitalization to 'Docusign' across docum…
iamvirul Mar 13, 2026
469fcfb
docs: Update WSO2 Integration Platform deployment instructions, speci…
iamvirul Mar 13, 2026
3889c23
feat: add salesforce-closewon-contract-automation to the list of proj…
iamvirul Mar 13, 2026
4348f0a
refactor: consolidate configurations into structured records for impr…
iamvirul Mar 13, 2026
d42fb5f
code refactor
iamvirul Mar 16, 2026
6769346
docs: Clarify Salesforce SOAP API requirement for the event listener …
iamvirul Mar 16, 2026
3bd9bc4
refactor: Switch Salesforce event listener authentication from userna…
iamvirul Mar 16, 2026
423c794
feat: Remove `channelName` configuration and update Salesforce listen…
iamvirul Mar 16, 2026
d10d735
fix: Extract opportunity ID from Salesforce Change Events using `Chan…
iamvirul Mar 16, 2026
2743bba
feat: Implement robust error handling and comprehensive logging acros…
iamvirul Mar 16, 2026
d7b804d
refactor: Replace `ensureType()` calls with direct type narrowing for…
iamvirul Mar 16, 2026
c4d0f87
fix: Extract Salesforce event record IDs from event metadata instead …
iamvirul Mar 16, 2026
3f6f30e
refactor: Extract `opportunityId` from a singular `recordId` field in…
iamvirul Mar 16, 2026
fb9b615
refactor: Make Salesforce fields optional and add null checks for imp…
iamvirul Mar 16, 2026
fdb6510
refactor: standardize optional field syntax for Salesforce record types.
iamvirul Mar 17, 2026
4d20e82
refactor: update Salesforce queries to use generic `record {}` and sa…
iamvirul Mar 17, 2026
3337415
feat: Enhance Docusign integration by refining envelope creation logi…
iamvirul Mar 17, 2026
b8f31b3
feat: Improve DocuSign template setup guidance and error troubleshoot…
iamvirul Mar 17, 2026
69a9a49
docs: Streamline Docusign template setup instructions and error troub…
iamvirul Mar 19, 2026
87f8900
Update instructions.md
iamvirul Mar 24, 2026
d8b9b4c
Update instructions.md
iamvirul Mar 24, 2026
c9fedd6
Merge branch 'main' into integration-sample-for-docusign-salesforce
iamvirul Mar 29, 2026
b4fbf6a
refactor: restructure configuration schema into grouped objects and a…
iamvirul Mar 29, 2026
a4b1cf4
Update ballerina-integrator/salesforce-closewon-contract-automation/R…
iamvirul Mar 29, 2026
cff7366
Update ballerina-integrator/salesforce-closewon-contract-automation/f…
iamvirul Mar 29, 2026
28ce45e
refactor: simplify Salesforce-DocuSign integration diagram flow
iamvirul Mar 29, 2026
86b5e33
Merge branch 'main' into integration-sample-for-docusign-salesforce
iamvirul Apr 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/projects.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
{
"path": "integrator-default-profile/samples/signup-sfchatsync"
},
{
"path": "ballerina-integrator/salesforce-closewon-contract-automation"
},
{
"path": "ballerina-integrator/salesforce-leads-to-googlesheets"
},
{
"path": "integrator-default-profile/samples/salesforce-leads-to-googlesheets"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,321 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"ballerina": {
"type": "object",
"properties": {
"log": {
"type": "object",
"properties": {
"destinations": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"enum": [
"stderr",
"stdout"
]
}
},
"additionalProperties": false,
"required": [
"type"
],
"name": "ballerina/log:2.14.0:StandardDestination"
},
{
"type": "object",
"properties": {
"type": {
"enum": [
"file"
]
},
"path": {
"type": "string"
},
"mode": {
"enum": [
"APPEND",
"TRUNCATE"
]
}
},
"additionalProperties": false,
"required": [
"type",
"path",
"mode"
],
"name": "ballerina/log:2.14.0:FileOutputDestination"
}
]
},
"description": ""
},
"modules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"level": {
"enum": [
"WARN",
"INFO",
"ERROR",
"DEBUG"
]
}
},
"additionalProperties": false,
"required": [
"name",
"level"
],
"name": "ballerina/log:2.14.0:Module"
},
"description": ""
},
"keyValues": {
"type": "object",
"properties": {
"msg": {},
"error": {},
"stackTrace": {},
"module": {}
},
"additionalProperties": false,
"name": "ballerina/log:2.14.0:AnydataKeyValues",
"description": ""
},
"format": {
"enum": [
"logfmt",
"json"
],
"description": ""
},
"level": {
"enum": [
"WARN",
"INFO",
"ERROR",
"DEBUG"
],
"description": ""
},
"enableSensitiveDataMasking": {
"type": "boolean",
"description": ""
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"wso2": {
"type": "object",
"properties": {
"closewon_contract_automation": {
"type": "object",
"properties": {
"salesforceConfig": {
"type": "object",
"properties": {
"clientId": {
"type": "string"
},
"clientSecret": {
"type": "string"
},
"refreshToken": {
"type": "string"
},
"refreshUrl": {
"type": "string"
},
"baseUrl": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"clientId",
"clientSecret",
"refreshToken",
"refreshUrl",
"baseUrl"
],
"name": "wso2/closewon_contract_automation:0.1.0:SalesforceConfig",
"description": ""
},
"docusignConfig": {
"type": "object",
"properties": {
"accountId": {
"type": "string"
},
"clientId": {
"type": "string"
},
"clientSecret": {
"type": "string"
},
"refreshToken": {
"type": "string"
},
"refreshUrl": {
"type": "string"
},
"baseUrl": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"accountId",
"clientId",
"clientSecret",
"refreshToken",
"refreshUrl",
"baseUrl"
],
"name": "wso2/closewon_contract_automation:0.1.0:DocusignConfig",
"description": ""
},
"templateSettings": {
"type": "object",
"properties": {
"defaultTemplateId": {
"type": "string"
},
"templateConfigs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"templateId": {
"type": "string"
},
"productType": {
"type": "string"
},
"dealType": {
"type": "string"
},
"expirationDays": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"templateId"
],
"name": "wso2/closewon_contract_automation:0.1.0:TemplateConfig"
}
}
},
"additionalProperties": false,
"required": [
"defaultTemplateId",
"templateConfigs"
],
"name": "wso2/closewon_contract_automation:0.1.0:TemplateSettings",
"description": ""
},
"businessRulesConfig": {
"type": "object",
"properties": {
"minimumDealValue": {
"type": "number"
},
"signerRole": {
"enum": [
"Executive Sponsor",
"Decision Maker",
"Billing Contact",
"Primary Contact"
]
},
"ccRecipients": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"name": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"email",
"name"
],
"name": "wso2/closewon_contract_automation:0.1.0:CcRecipient"
}
},
"fieldMappings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"opportunityField": {
"type": "string"
},
"docusignField": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"opportunityField",
"docusignField"
],
"name": "wso2/closewon_contract_automation:0.1.0:FieldMapping"
}
},
"contractSentStage": {
"type": "string"
},
"expirationReminderDays": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"minimumDealValue",
"signerRole",
"ccRecipients",
"fieldMappings",
"contractSentStage",
"expirationReminderDays"
],
"name": "wso2/closewon_contract_automation:0.1.0:BusinessRulesConfig",
"description": ""
}
},
"additionalProperties": false,
"required": [
"salesforceConfig",
"docusignConfig"
]
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"requiredLevel": 3
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
A(["Start"]):::startNode
Comment thread
iamvirul marked this conversation as resolved.
B["Listen to Salesforce Opportunity Events"]:::processNode
C{"Is 'Closed Won'?"}:::decisionNode
D["Retrieve Opportunity & Contact Details"]:::processNode
E["Send DocuSign Envelope"]:::processNode
F{"Envelope <br/> Created?"}:::decisionNode
G["Update Stage to 'Contract Sent'"]:::processNode
H["Log Error"]:::processNode
I(["End"]):::endNode

A --> B
B --> C
C -- Yes --> D
C -- No --> I
D --> E
E --> F
F -- Yes --> G
F -- No --> H
G --> I
H --> I
Loading