@marketing-sdk/salesforce 0.1.1-experimental.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Cody
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,41 @@
1
+ import { CreateResponse, QueryResponse, ILeadProvider, IContactProvider, IAccountProvider, IOpportunityProvider, BaseProvider } from '@marketing-sdk/core';
2
+ import { Salesforce } from './types';
3
+ export declare class SalesforceClient extends BaseProvider implements ILeadProvider<Salesforce.LeadPayload>, IContactProvider<Salesforce.ContactPayload>, IAccountProvider<Salesforce.AccountPayload>, IOpportunityProvider<Salesforce.OpportunityPayload> {
4
+ private config;
5
+ private accessToken;
6
+ private instanceUrl;
7
+ private tokenExpiry;
8
+ constructor(config: {
9
+ clientId: string;
10
+ clientSecret: string;
11
+ username: string;
12
+ password: string;
13
+ securityToken: string;
14
+ });
15
+ protected getDefaultHeaders(): Record<string, string>;
16
+ protected getAuthHeaders(): Record<string, string>;
17
+ private authenticate;
18
+ private ensureAuthenticated;
19
+ createLead(lead: Salesforce.LeadPayload): Promise<CreateResponse>;
20
+ getLead(leadId: string): Promise<CreateResponse>;
21
+ updateLead(leadId: string, lead: Partial<Salesforce.LeadPayload>): Promise<CreateResponse>;
22
+ deleteLead(leadId: string): Promise<CreateResponse>;
23
+ createContact(contact: Salesforce.ContactPayload): Promise<CreateResponse>;
24
+ getContact(contactId: string): Promise<CreateResponse>;
25
+ updateContact(contactId: string, contact: Partial<Salesforce.ContactPayload>): Promise<CreateResponse>;
26
+ deleteContact(contactId: string): Promise<CreateResponse>;
27
+ createAccount(account: Salesforce.AccountPayload): Promise<CreateResponse>;
28
+ getAccount(accountId: string): Promise<CreateResponse>;
29
+ updateAccount(accountId: string, account: Partial<Salesforce.AccountPayload>): Promise<CreateResponse>;
30
+ deleteAccount(accountId: string): Promise<CreateResponse>;
31
+ createOpportunity(opportunity: Salesforce.OpportunityPayload): Promise<CreateResponse>;
32
+ getOpportunity(opportunityId: string): Promise<CreateResponse>;
33
+ updateOpportunity(opportunityId: string, opportunity: Partial<Salesforce.OpportunityPayload>): Promise<CreateResponse>;
34
+ deleteOpportunity(opportunityId: string): Promise<CreateResponse>;
35
+ query(soqlQuery: string): Promise<QueryResponse>;
36
+ listLeads(filters?: Record<string, any>): Promise<QueryResponse>;
37
+ listContacts(filters?: Record<string, any>): Promise<QueryResponse>;
38
+ listAccounts(filters?: Record<string, any>): Promise<QueryResponse>;
39
+ listOpportunities(filters?: Record<string, any>): Promise<QueryResponse>;
40
+ }
41
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SalesforceClient = void 0;
4
+ const core_1 = require("@marketing-sdk/core");
5
+ const validators_1 = require("./validators");
6
+ const soql_builder_1 = require("./soql-builder");
7
+ const core_2 = require("@marketing-sdk/core");
8
+ class SalesforceClient extends core_1.BaseProvider {
9
+ constructor(config) {
10
+ super({
11
+ baseURL: 'https://login.salesforce.com',
12
+ timeout: 30000,
13
+ });
14
+ this.config = config;
15
+ this.accessToken = null;
16
+ this.instanceUrl = null;
17
+ this.tokenExpiry = null;
18
+ }
19
+ getDefaultHeaders() {
20
+ return {
21
+ 'Content-Type': 'application/json',
22
+ };
23
+ }
24
+ getAuthHeaders() {
25
+ if (!this.accessToken) {
26
+ return {};
27
+ }
28
+ return {
29
+ Authorization: `Bearer ${this.accessToken}`,
30
+ };
31
+ }
32
+ async authenticate() {
33
+ const params = new URLSearchParams({
34
+ grant_type: 'password',
35
+ client_id: this.config.clientId,
36
+ client_secret: this.config.clientSecret,
37
+ username: this.config.username,
38
+ password: this.config.password + this.config.securityToken,
39
+ });
40
+ const response = await this.makeRequest({
41
+ url: '/services/oauth2/token',
42
+ method: 'POST',
43
+ headers: {
44
+ 'Content-Type': 'application/x-www-form-urlencoded',
45
+ },
46
+ body: params,
47
+ }, 'Salesforce Authentication');
48
+ if (response.data) {
49
+ this.accessToken = response.data.access_token;
50
+ this.instanceUrl = response.data.instance_url;
51
+ this.tokenExpiry = Date.now() + (90 * 60 * 1000);
52
+ }
53
+ else {
54
+ throw new Error('Failed to authenticate with Salesforce');
55
+ }
56
+ }
57
+ async ensureAuthenticated() {
58
+ if (!this.accessToken || !this.instanceUrl ||
59
+ (this.tokenExpiry && Date.now() > this.tokenExpiry)) {
60
+ await this.authenticate();
61
+ }
62
+ }
63
+ async createLead(lead) {
64
+ validators_1.SalesforceValidators.validateLeadPayload(lead);
65
+ await this.ensureAuthenticated();
66
+ const payload = {
67
+ FirstName: lead.firstName,
68
+ LastName: lead.lastName,
69
+ Company: lead.company,
70
+ Email: lead.email,
71
+ Phone: lead.phone,
72
+ LeadSource: lead.source,
73
+ };
74
+ Object.keys(payload).forEach(key => {
75
+ if (payload[key] === undefined) {
76
+ delete payload[key];
77
+ }
78
+ });
79
+ return this.makeRequest({
80
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Lead/`,
81
+ method: 'POST',
82
+ body: payload,
83
+ }, 'Create Lead');
84
+ }
85
+ async getLead(leadId) {
86
+ core_2.Validators.validateId(leadId, 'leadId');
87
+ await this.ensureAuthenticated();
88
+ return this.makeRequest({
89
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Lead/${leadId}`,
90
+ method: 'GET',
91
+ }, 'Get Lead');
92
+ }
93
+ async updateLead(leadId, lead) {
94
+ core_2.Validators.validateId(leadId, 'leadId');
95
+ if (lead.email)
96
+ validators_1.SalesforceValidators.validateLeadPayload({ ...lead, lastName: 'temp', company: 'temp' });
97
+ await this.ensureAuthenticated();
98
+ const payload = {};
99
+ if (lead.firstName !== undefined)
100
+ payload.FirstName = lead.firstName;
101
+ if (lead.lastName !== undefined)
102
+ payload.LastName = lead.lastName;
103
+ if (lead.company !== undefined)
104
+ payload.Company = lead.company;
105
+ if (lead.email !== undefined)
106
+ payload.Email = lead.email;
107
+ if (lead.phone !== undefined)
108
+ payload.Phone = lead.phone;
109
+ if (lead.source !== undefined)
110
+ payload.LeadSource = lead.source;
111
+ return this.makeRequest({
112
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Lead/${leadId}`,
113
+ method: 'PATCH',
114
+ body: payload,
115
+ }, 'Update Lead');
116
+ }
117
+ async deleteLead(leadId) {
118
+ core_2.Validators.validateId(leadId, 'leadId');
119
+ await this.ensureAuthenticated();
120
+ return this.makeRequest({
121
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Lead/${leadId}`,
122
+ method: 'DELETE',
123
+ }, 'Delete Lead');
124
+ }
125
+ async createContact(contact) {
126
+ validators_1.SalesforceValidators.validateContactPayload(contact);
127
+ await this.ensureAuthenticated();
128
+ const payload = {
129
+ FirstName: contact.firstName,
130
+ LastName: contact.lastName,
131
+ Email: contact.email,
132
+ Phone: contact.phone,
133
+ AccountId: contact.accountId,
134
+ Title: contact.title,
135
+ Department: contact.department,
136
+ };
137
+ Object.keys(payload).forEach(key => {
138
+ if (payload[key] === undefined) {
139
+ delete payload[key];
140
+ }
141
+ });
142
+ return this.makeRequest({
143
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Contact/`,
144
+ method: 'POST',
145
+ body: payload,
146
+ }, 'Create Contact');
147
+ }
148
+ async getContact(contactId) {
149
+ core_2.Validators.validateId(contactId, 'contactId');
150
+ await this.ensureAuthenticated();
151
+ return this.makeRequest({
152
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Contact/${contactId}`,
153
+ method: 'GET',
154
+ }, 'Get Contact');
155
+ }
156
+ async updateContact(contactId, contact) {
157
+ core_2.Validators.validateId(contactId, 'contactId');
158
+ if (contact.email)
159
+ validators_1.SalesforceValidators.validateContactPayload({ ...contact, lastName: 'temp' });
160
+ await this.ensureAuthenticated();
161
+ const payload = {};
162
+ if (contact.firstName !== undefined)
163
+ payload.FirstName = contact.firstName;
164
+ if (contact.lastName !== undefined)
165
+ payload.LastName = contact.lastName;
166
+ if (contact.email !== undefined)
167
+ payload.Email = contact.email;
168
+ if (contact.phone !== undefined)
169
+ payload.Phone = contact.phone;
170
+ if (contact.accountId !== undefined)
171
+ payload.AccountId = contact.accountId;
172
+ if (contact.title !== undefined)
173
+ payload.Title = contact.title;
174
+ if (contact.department !== undefined)
175
+ payload.Department = contact.department;
176
+ return this.makeRequest({
177
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Contact/${contactId}`,
178
+ method: 'PATCH',
179
+ body: payload,
180
+ }, 'Update Contact');
181
+ }
182
+ async deleteContact(contactId) {
183
+ core_2.Validators.validateId(contactId, 'contactId');
184
+ await this.ensureAuthenticated();
185
+ return this.makeRequest({
186
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Contact/${contactId}`,
187
+ method: 'DELETE',
188
+ }, 'Delete Contact');
189
+ }
190
+ async createAccount(account) {
191
+ validators_1.SalesforceValidators.validateAccountPayload(account);
192
+ await this.ensureAuthenticated();
193
+ const payload = {
194
+ Name: account.name,
195
+ Industry: account.industry,
196
+ Website: account.website,
197
+ Phone: account.phone,
198
+ BillingStreet: account.billingStreet,
199
+ BillingCity: account.billingCity,
200
+ BillingState: account.billingState,
201
+ BillingPostalCode: account.billingPostalCode,
202
+ BillingCountry: account.billingCountry,
203
+ };
204
+ Object.keys(payload).forEach(key => {
205
+ if (payload[key] === undefined) {
206
+ delete payload[key];
207
+ }
208
+ });
209
+ return this.makeRequest({
210
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Account/`,
211
+ method: 'POST',
212
+ body: payload,
213
+ }, 'Create Account');
214
+ }
215
+ async getAccount(accountId) {
216
+ core_2.Validators.validateId(accountId, 'accountId');
217
+ await this.ensureAuthenticated();
218
+ return this.makeRequest({
219
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Account/${accountId}`,
220
+ method: 'GET',
221
+ }, 'Get Account');
222
+ }
223
+ async updateAccount(accountId, account) {
224
+ core_2.Validators.validateId(accountId, 'accountId');
225
+ if (account.website || account.phone) {
226
+ validators_1.SalesforceValidators.validateAccountPayload({ ...account, name: 'temp' });
227
+ }
228
+ await this.ensureAuthenticated();
229
+ const payload = {};
230
+ if (account.name !== undefined)
231
+ payload.Name = account.name;
232
+ if (account.industry !== undefined)
233
+ payload.Industry = account.industry;
234
+ if (account.website !== undefined)
235
+ payload.Website = account.website;
236
+ if (account.phone !== undefined)
237
+ payload.Phone = account.phone;
238
+ if (account.billingStreet !== undefined)
239
+ payload.BillingStreet = account.billingStreet;
240
+ if (account.billingCity !== undefined)
241
+ payload.BillingCity = account.billingCity;
242
+ if (account.billingState !== undefined)
243
+ payload.BillingState = account.billingState;
244
+ if (account.billingPostalCode !== undefined)
245
+ payload.BillingPostalCode = account.billingPostalCode;
246
+ if (account.billingCountry !== undefined)
247
+ payload.BillingCountry = account.billingCountry;
248
+ return this.makeRequest({
249
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Account/${accountId}`,
250
+ method: 'PATCH',
251
+ body: payload,
252
+ }, 'Update Account');
253
+ }
254
+ async deleteAccount(accountId) {
255
+ core_2.Validators.validateId(accountId, 'accountId');
256
+ await this.ensureAuthenticated();
257
+ return this.makeRequest({
258
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Account/${accountId}`,
259
+ method: 'DELETE',
260
+ }, 'Delete Account');
261
+ }
262
+ async createOpportunity(opportunity) {
263
+ validators_1.SalesforceValidators.validateOpportunityPayload(opportunity);
264
+ await this.ensureAuthenticated();
265
+ const payload = {
266
+ Name: opportunity.name,
267
+ AccountId: opportunity.accountId,
268
+ StageName: opportunity.stageName,
269
+ CloseDate: opportunity.closeDate,
270
+ Amount: opportunity.amount,
271
+ Type: opportunity.type,
272
+ Description: opportunity.description,
273
+ };
274
+ Object.keys(payload).forEach(key => {
275
+ if (payload[key] === undefined) {
276
+ delete payload[key];
277
+ }
278
+ });
279
+ return this.makeRequest({
280
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Opportunity/`,
281
+ method: 'POST',
282
+ body: payload,
283
+ }, 'Create Opportunity');
284
+ }
285
+ async getOpportunity(opportunityId) {
286
+ core_2.Validators.validateId(opportunityId, 'opportunityId');
287
+ await this.ensureAuthenticated();
288
+ return this.makeRequest({
289
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Opportunity/${opportunityId}`,
290
+ method: 'GET',
291
+ }, 'Get Opportunity');
292
+ }
293
+ async updateOpportunity(opportunityId, opportunity) {
294
+ core_2.Validators.validateId(opportunityId, 'opportunityId');
295
+ if (opportunity.closeDate || opportunity.amount !== undefined) {
296
+ const temp = {
297
+ ...opportunity,
298
+ name: opportunity.name || 'temp',
299
+ accountId: opportunity.accountId || 'temp',
300
+ stageName: opportunity.stageName || 'temp',
301
+ closeDate: opportunity.closeDate || '2024-12-31',
302
+ };
303
+ validators_1.SalesforceValidators.validateOpportunityPayload(temp);
304
+ }
305
+ await this.ensureAuthenticated();
306
+ const payload = {};
307
+ if (opportunity.name !== undefined)
308
+ payload.Name = opportunity.name;
309
+ if (opportunity.accountId !== undefined)
310
+ payload.AccountId = opportunity.accountId;
311
+ if (opportunity.stageName !== undefined)
312
+ payload.StageName = opportunity.stageName;
313
+ if (opportunity.closeDate !== undefined)
314
+ payload.CloseDate = opportunity.closeDate;
315
+ if (opportunity.amount !== undefined)
316
+ payload.Amount = opportunity.amount;
317
+ if (opportunity.type !== undefined)
318
+ payload.Type = opportunity.type;
319
+ if (opportunity.description !== undefined)
320
+ payload.Description = opportunity.description;
321
+ return this.makeRequest({
322
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Opportunity/${opportunityId}`,
323
+ method: 'PATCH',
324
+ body: payload,
325
+ }, 'Update Opportunity');
326
+ }
327
+ async deleteOpportunity(opportunityId) {
328
+ core_2.Validators.validateId(opportunityId, 'opportunityId');
329
+ await this.ensureAuthenticated();
330
+ return this.makeRequest({
331
+ url: `${this.instanceUrl}/services/data/v60.0/sobjects/Opportunity/${opportunityId}`,
332
+ method: 'DELETE',
333
+ }, 'Delete Opportunity');
334
+ }
335
+ async query(soqlQuery) {
336
+ await this.ensureAuthenticated();
337
+ return this.makeRequest({
338
+ url: `${this.instanceUrl}/services/data/v60.0/query`,
339
+ method: 'GET',
340
+ params: { q: soqlQuery },
341
+ }, 'SOQL Query');
342
+ }
343
+ async listLeads(filters) {
344
+ const builder = new soql_builder_1.SOQLBuilder()
345
+ .select('Id', 'FirstName', 'LastName', 'Company', 'Email', 'Phone', 'LeadSource')
346
+ .from('Lead');
347
+ if (filters && Object.keys(filters).length > 0) {
348
+ Object.entries(filters).forEach(([key, value]) => {
349
+ if (value !== undefined && value !== null) {
350
+ builder.where(key, '=', value);
351
+ }
352
+ });
353
+ }
354
+ return this.query(builder.build());
355
+ }
356
+ async listContacts(filters) {
357
+ const builder = new soql_builder_1.SOQLBuilder()
358
+ .select('Id', 'FirstName', 'LastName', 'Email', 'Phone', 'AccountId', 'Title', 'Department')
359
+ .from('Contact');
360
+ if (filters && Object.keys(filters).length > 0) {
361
+ Object.entries(filters).forEach(([key, value]) => {
362
+ if (value !== undefined && value !== null) {
363
+ builder.where(key, '=', value);
364
+ }
365
+ });
366
+ }
367
+ return this.query(builder.build());
368
+ }
369
+ async listAccounts(filters) {
370
+ const builder = new soql_builder_1.SOQLBuilder()
371
+ .select('Id', 'Name', 'Industry', 'Website', 'Phone', 'BillingStreet', 'BillingCity', 'BillingState', 'BillingPostalCode', 'BillingCountry')
372
+ .from('Account');
373
+ if (filters && Object.keys(filters).length > 0) {
374
+ Object.entries(filters).forEach(([key, value]) => {
375
+ if (value !== undefined && value !== null) {
376
+ builder.where(key, '=', value);
377
+ }
378
+ });
379
+ }
380
+ return this.query(builder.build());
381
+ }
382
+ async listOpportunities(filters) {
383
+ const builder = new soql_builder_1.SOQLBuilder()
384
+ .select('Id', 'Name', 'AccountId', 'StageName', 'CloseDate', 'Amount', 'Type', 'Description')
385
+ .from('Opportunity');
386
+ if (filters && Object.keys(filters).length > 0) {
387
+ Object.entries(filters).forEach(([key, value]) => {
388
+ if (value !== undefined && value !== null) {
389
+ builder.where(key, '=', value);
390
+ }
391
+ });
392
+ }
393
+ return this.query(builder.build());
394
+ }
395
+ }
396
+ exports.SalesforceClient = SalesforceClient;
397
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { SalesforceClient } from './client';
2
+ export type { Salesforce } from './types';
3
+ export { SalesforceValidators, ValidationError } from './validators';
4
+ export { SOQLBuilder } from './soql-builder';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SOQLBuilder = exports.ValidationError = exports.SalesforceValidators = exports.SalesforceClient = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "SalesforceClient", { enumerable: true, get: function () { return client_1.SalesforceClient; } });
6
+ var validators_1 = require("./validators");
7
+ Object.defineProperty(exports, "SalesforceValidators", { enumerable: true, get: function () { return validators_1.SalesforceValidators; } });
8
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return validators_1.ValidationError; } });
9
+ var soql_builder_1 = require("./soql-builder");
10
+ Object.defineProperty(exports, "SOQLBuilder", { enumerable: true, get: function () { return soql_builder_1.SOQLBuilder; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA4C;AAAnC,0GAAA,gBAAgB,OAAA;AAEzB,2CAAqE;AAA5D,kHAAA,oBAAoB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAC9C,+CAA6C;AAApC,2GAAA,WAAW,OAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Safe SOQL query builder to prevent SOQL injection
3
+ */
4
+ export declare class SOQLBuilder {
5
+ private selectClause;
6
+ private fromClause;
7
+ private whereConditions;
8
+ private orderByClause;
9
+ private limitClause;
10
+ private offsetClause;
11
+ select(...fields: string[]): SOQLBuilder;
12
+ from(object: string): SOQLBuilder;
13
+ where(field: string, operator: string, value: any): SOQLBuilder;
14
+ orderBy(field: string, direction?: 'ASC' | 'DESC'): SOQLBuilder;
15
+ limit(limit: number): SOQLBuilder;
16
+ offset(offset: number): SOQLBuilder;
17
+ build(): string;
18
+ private isValidFieldName;
19
+ private isValidObjectName;
20
+ private escapeValue;
21
+ static fromFilters(filters: Record<string, any>): SOQLBuilder;
22
+ }
23
+ //# sourceMappingURL=soql-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soql-builder.d.ts","sourceRoot":"","sources":["../src/soql-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;IAE3C,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW;IAUxC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAQjC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,WAAW;IAe/D,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,KAAK,GAAG,MAAc,GAAG,WAAW;IAQtE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAQjC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAQnC,KAAK,IAAI,MAAM;IA6Bf,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,WAAW;IA8BnB,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW;CAW9D"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SOQLBuilder = void 0;
4
+ /**
5
+ * Safe SOQL query builder to prevent SOQL injection
6
+ */
7
+ class SOQLBuilder {
8
+ constructor() {
9
+ this.selectClause = [];
10
+ this.fromClause = '';
11
+ this.whereConditions = [];
12
+ this.orderByClause = '';
13
+ this.limitClause = null;
14
+ this.offsetClause = null;
15
+ }
16
+ select(...fields) {
17
+ fields.forEach(field => {
18
+ if (!this.isValidFieldName(field)) {
19
+ throw new Error(`Invalid field name: ${field}`);
20
+ }
21
+ });
22
+ this.selectClause.push(...fields);
23
+ return this;
24
+ }
25
+ from(object) {
26
+ if (!this.isValidObjectName(object)) {
27
+ throw new Error(`Invalid object name: ${object}`);
28
+ }
29
+ this.fromClause = object;
30
+ return this;
31
+ }
32
+ where(field, operator, value) {
33
+ if (!this.isValidFieldName(field)) {
34
+ throw new Error(`Invalid field name: ${field}`);
35
+ }
36
+ const validOperators = ['=', '!=', '<', '>', '<=', '>=', 'LIKE', 'IN', 'NOT IN', 'INCLUDES', 'EXCLUDES'];
37
+ if (!validOperators.includes(operator.toUpperCase())) {
38
+ throw new Error(`Invalid operator: ${operator}`);
39
+ }
40
+ const escapedValue = this.escapeValue(value);
41
+ this.whereConditions.push(`${field} ${operator} ${escapedValue}`);
42
+ return this;
43
+ }
44
+ orderBy(field, direction = 'ASC') {
45
+ if (!this.isValidFieldName(field)) {
46
+ throw new Error(`Invalid field name: ${field}`);
47
+ }
48
+ this.orderByClause = `${field} ${direction}`;
49
+ return this;
50
+ }
51
+ limit(limit) {
52
+ if (!Number.isInteger(limit) || limit < 1) {
53
+ throw new Error('Limit must be a positive integer');
54
+ }
55
+ this.limitClause = limit;
56
+ return this;
57
+ }
58
+ offset(offset) {
59
+ if (!Number.isInteger(offset) || offset < 0) {
60
+ throw new Error('Offset must be a non-negative integer');
61
+ }
62
+ this.offsetClause = offset;
63
+ return this;
64
+ }
65
+ build() {
66
+ if (this.selectClause.length === 0) {
67
+ throw new Error('SELECT clause is required');
68
+ }
69
+ if (!this.fromClause) {
70
+ throw new Error('FROM clause is required');
71
+ }
72
+ let query = `SELECT ${this.selectClause.join(', ')} FROM ${this.fromClause}`;
73
+ if (this.whereConditions.length > 0) {
74
+ query += ` WHERE ${this.whereConditions.join(' AND ')}`;
75
+ }
76
+ if (this.orderByClause) {
77
+ query += ` ORDER BY ${this.orderByClause}`;
78
+ }
79
+ if (this.limitClause !== null) {
80
+ query += ` LIMIT ${this.limitClause}`;
81
+ }
82
+ if (this.offsetClause !== null) {
83
+ query += ` OFFSET ${this.offsetClause}`;
84
+ }
85
+ return query;
86
+ }
87
+ isValidFieldName(name) {
88
+ return /^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)*$/.test(name);
89
+ }
90
+ isValidObjectName(name) {
91
+ return /^[a-zA-Z][a-zA-Z0-9_]*$/.test(name);
92
+ }
93
+ escapeValue(value) {
94
+ if (value === null) {
95
+ return 'null';
96
+ }
97
+ if (typeof value === 'boolean') {
98
+ return value ? 'true' : 'false';
99
+ }
100
+ if (typeof value === 'number') {
101
+ return String(value);
102
+ }
103
+ if (value instanceof Date) {
104
+ return value.toISOString();
105
+ }
106
+ if (Array.isArray(value)) {
107
+ const escapedValues = value.map(v => this.escapeValue(v));
108
+ return `(${escapedValues.join(', ')})`;
109
+ }
110
+ if (typeof value === 'string') {
111
+ const escaped = value.replace(/'/g, "\\'");
112
+ return `'${escaped}'`;
113
+ }
114
+ throw new Error(`Unsupported value type: ${typeof value}`);
115
+ }
116
+ static fromFilters(filters) {
117
+ const builder = new SOQLBuilder();
118
+ Object.entries(filters).forEach(([key, value]) => {
119
+ if (value !== undefined && value !== null) {
120
+ builder.where(key, '=', value);
121
+ }
122
+ });
123
+ return builder;
124
+ }
125
+ }
126
+ exports.SOQLBuilder = SOQLBuilder;
127
+ //# sourceMappingURL=soql-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soql-builder.js","sourceRoot":"","sources":["../src/soql-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export declare namespace Salesforce {
2
+ type LeadPayload = {
3
+ firstName?: string;
4
+ lastName: string;
5
+ company: string;
6
+ email?: string;
7
+ phone?: string;
8
+ source?: string;
9
+ };
10
+ type ContactPayload = {
11
+ firstName?: string;
12
+ lastName: string;
13
+ email?: string;
14
+ phone?: string;
15
+ accountId?: string;
16
+ title?: string;
17
+ department?: string;
18
+ };
19
+ type AccountPayload = {
20
+ name: string;
21
+ industry?: string;
22
+ website?: string;
23
+ phone?: string;
24
+ billingStreet?: string;
25
+ billingCity?: string;
26
+ billingState?: string;
27
+ billingPostalCode?: string;
28
+ billingCountry?: string;
29
+ };
30
+ type OpportunityPayload = {
31
+ name: string;
32
+ accountId: string;
33
+ stageName: string;
34
+ closeDate: string;
35
+ amount?: number;
36
+ type?: string;
37
+ description?: string;
38
+ };
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yBAAiB,UAAU,CAAC;IAC1B,KAAY,WAAW,GAAG;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,KAAY,cAAc,GAAG;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,KAAY,cAAc,GAAG;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF,KAAY,kBAAkB,GAAG;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { ValidationError } from '@marketing-sdk/core';
2
+ import { Salesforce } from './types';
3
+ export { ValidationError };
4
+ export declare class SalesforceValidators {
5
+ static validateLeadPayload(payload: Salesforce.LeadPayload): void;
6
+ static validateContactPayload(payload: Salesforce.ContactPayload): void;
7
+ static validateAccountPayload(payload: Salesforce.AccountPayload): void;
8
+ static validateOpportunityPayload(payload: Salesforce.OpportunityPayload): void;
9
+ }
10
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI;IAkBjE,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,GAAG,IAAI;IAcvE,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,GAAG,IAAI;IAcvE,MAAM,CAAC,0BAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,kBAAkB,GAAG,IAAI;CAyBhF"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SalesforceValidators = exports.ValidationError = void 0;
4
+ const core_1 = require("@marketing-sdk/core");
5
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return core_1.ValidationError; } });
6
+ class SalesforceValidators {
7
+ static validateLeadPayload(payload) {
8
+ if (!payload.lastName || payload.lastName.trim() === '') {
9
+ throw new core_1.ValidationError('lastName', 'Last name is required');
10
+ }
11
+ if (!payload.company || payload.company.trim() === '') {
12
+ throw new core_1.ValidationError('company', 'Company is required');
13
+ }
14
+ if (payload.email && !core_1.Validators.validateEmail(payload.email)) {
15
+ throw new core_1.ValidationError('email', 'Invalid email format');
16
+ }
17
+ if (payload.phone && !core_1.Validators.validatePhone(payload.phone)) {
18
+ throw new core_1.ValidationError('phone', 'Invalid phone format');
19
+ }
20
+ }
21
+ static validateContactPayload(payload) {
22
+ if (!payload.lastName || payload.lastName.trim() === '') {
23
+ throw new core_1.ValidationError('lastName', 'Last name is required');
24
+ }
25
+ if (payload.email && !core_1.Validators.validateEmail(payload.email)) {
26
+ throw new core_1.ValidationError('email', 'Invalid email format');
27
+ }
28
+ if (payload.phone && !core_1.Validators.validatePhone(payload.phone)) {
29
+ throw new core_1.ValidationError('phone', 'Invalid phone format');
30
+ }
31
+ }
32
+ static validateAccountPayload(payload) {
33
+ if (!payload.name || payload.name.trim() === '') {
34
+ throw new core_1.ValidationError('name', 'Account name is required');
35
+ }
36
+ if (payload.website && !core_1.Validators.validateUrl(payload.website)) {
37
+ throw new core_1.ValidationError('website', 'Invalid website URL');
38
+ }
39
+ if (payload.phone && !core_1.Validators.validatePhone(payload.phone)) {
40
+ throw new core_1.ValidationError('phone', 'Invalid phone format');
41
+ }
42
+ }
43
+ static validateOpportunityPayload(payload) {
44
+ if (!payload.name || payload.name.trim() === '') {
45
+ throw new core_1.ValidationError('name', 'Opportunity name is required');
46
+ }
47
+ if (!payload.accountId || payload.accountId.trim() === '') {
48
+ throw new core_1.ValidationError('accountId', 'Account ID is required');
49
+ }
50
+ if (!payload.stageName || payload.stageName.trim() === '') {
51
+ throw new core_1.ValidationError('stageName', 'Stage name is required');
52
+ }
53
+ if (!payload.closeDate) {
54
+ throw new core_1.ValidationError('closeDate', 'Close date is required');
55
+ }
56
+ if (!core_1.Validators.validateDate(payload.closeDate)) {
57
+ throw new core_1.ValidationError('closeDate', 'Invalid date format. Use YYYY-MM-DD');
58
+ }
59
+ if (payload.amount !== undefined && payload.amount < 0) {
60
+ throw new core_1.ValidationError('amount', 'Amount cannot be negative');
61
+ }
62
+ }
63
+ }
64
+ exports.SalesforceValidators = SalesforceValidators;
65
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@marketing-sdk/salesforce",
3
+ "version": "0.1.1-experimental.0",
4
+ "description": "Salesforce provider for marketing-sdk",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "dependencies": {
21
+ "@marketing-sdk/core": "0.1.1-experimental.0"
22
+ },
23
+ "peerDependencies": {
24
+ "@marketing-sdk/core": ">=0.1.0"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.3.0",
28
+ "jest": "^29.7.0",
29
+ "ts-jest": "^29.1.0",
30
+ "@types/jest": "^29.5.0",
31
+ "@types/node": "^20.0.0"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "test": "jest",
36
+ "test:coverage": "jest --coverage",
37
+ "typecheck": "tsc --noEmit"
38
+ }
39
+ }