@chriscamp/sf-data-cloud-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -0
- package/dist/auth/auth-manager.d.ts +18 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +64 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/smart/field-resolver.d.ts +17 -0
- package/dist/smart/field-resolver.d.ts.map +1 -0
- package/dist/smart/field-resolver.js +40 -0
- package/dist/smart/field-resolver.js.map +1 -0
- package/dist/smart/sql-translator.d.ts +6 -0
- package/dist/smart/sql-translator.d.ts.map +1 -0
- package/dist/smart/sql-translator.js +60 -0
- package/dist/smart/sql-translator.js.map +1 -0
- package/dist/smart/type-mapper.d.ts +3 -0
- package/dist/smart/type-mapper.d.ts.map +1 -0
- package/dist/smart/type-mapper.js +31 -0
- package/dist/smart/type-mapper.js.map +1 -0
- package/dist/tools/action/list-data-actions.d.ts +8 -0
- package/dist/tools/action/list-data-actions.d.ts.map +1 -0
- package/dist/tools/action/list-data-actions.js +10 -0
- package/dist/tools/action/list-data-actions.js.map +1 -0
- package/dist/tools/activation/create-activation.d.ts +10 -0
- package/dist/tools/activation/create-activation.d.ts.map +1 -0
- package/dist/tools/activation/create-activation.js +14 -0
- package/dist/tools/activation/create-activation.js.map +1 -0
- package/dist/tools/activation/list-activation-targets.d.ts +8 -0
- package/dist/tools/activation/list-activation-targets.d.ts.map +1 -0
- package/dist/tools/activation/list-activation-targets.js +10 -0
- package/dist/tools/activation/list-activation-targets.js.map +1 -0
- package/dist/tools/activation/list-activations.d.ts +8 -0
- package/dist/tools/activation/list-activations.d.ts.map +1 -0
- package/dist/tools/activation/list-activations.js +10 -0
- package/dist/tools/activation/list-activations.js.map +1 -0
- package/dist/tools/ci/create-calculated-insight.d.ts +11 -0
- package/dist/tools/ci/create-calculated-insight.d.ts.map +1 -0
- package/dist/tools/ci/create-calculated-insight.js +57 -0
- package/dist/tools/ci/create-calculated-insight.js.map +1 -0
- package/dist/tools/ci/delete-calculated-insight.d.ts +11 -0
- package/dist/tools/ci/delete-calculated-insight.d.ts.map +1 -0
- package/dist/tools/ci/delete-calculated-insight.js +15 -0
- package/dist/tools/ci/delete-calculated-insight.js.map +1 -0
- package/dist/tools/ci/get-calculated-insight-status.d.ts +10 -0
- package/dist/tools/ci/get-calculated-insight-status.d.ts.map +1 -0
- package/dist/tools/ci/get-calculated-insight-status.js +21 -0
- package/dist/tools/ci/get-calculated-insight-status.js.map +1 -0
- package/dist/tools/ci/list-calculated-insights.d.ts +10 -0
- package/dist/tools/ci/list-calculated-insights.d.ts.map +1 -0
- package/dist/tools/ci/list-calculated-insights.js +18 -0
- package/dist/tools/ci/list-calculated-insights.js.map +1 -0
- package/dist/tools/ci/run-calculated-insight.d.ts +11 -0
- package/dist/tools/ci/run-calculated-insight.d.ts.map +1 -0
- package/dist/tools/ci/run-calculated-insight.js +14 -0
- package/dist/tools/ci/run-calculated-insight.js.map +1 -0
- package/dist/tools/credits/estimate-flex-credits.d.ts +18 -0
- package/dist/tools/credits/estimate-flex-credits.d.ts.map +1 -0
- package/dist/tools/credits/estimate-flex-credits.js +56 -0
- package/dist/tools/credits/estimate-flex-credits.js.map +1 -0
- package/dist/tools/dmo/create-dmo-from-dlo.d.ts +15 -0
- package/dist/tools/dmo/create-dmo-from-dlo.d.ts.map +1 -0
- package/dist/tools/dmo/create-dmo-from-dlo.js +78 -0
- package/dist/tools/dmo/create-dmo-from-dlo.js.map +1 -0
- package/dist/tools/dmo/create-dmo-mapping.d.ts +11 -0
- package/dist/tools/dmo/create-dmo-mapping.d.ts.map +1 -0
- package/dist/tools/dmo/create-dmo-mapping.js +14 -0
- package/dist/tools/dmo/create-dmo-mapping.js.map +1 -0
- package/dist/tools/dmo/create-dmo.d.ts +11 -0
- package/dist/tools/dmo/create-dmo.d.ts.map +1 -0
- package/dist/tools/dmo/create-dmo.js +14 -0
- package/dist/tools/dmo/create-dmo.js.map +1 -0
- package/dist/tools/dmo/delete-dmo.d.ts +11 -0
- package/dist/tools/dmo/delete-dmo.d.ts.map +1 -0
- package/dist/tools/dmo/delete-dmo.js +15 -0
- package/dist/tools/dmo/delete-dmo.js.map +1 -0
- package/dist/tools/dmo/describe-dmo.d.ts +23 -0
- package/dist/tools/dmo/describe-dmo.d.ts.map +1 -0
- package/dist/tools/dmo/describe-dmo.js +10 -0
- package/dist/tools/dmo/describe-dmo.js.map +1 -0
- package/dist/tools/dmo/list-dmo-mappings.d.ts +11 -0
- package/dist/tools/dmo/list-dmo-mappings.d.ts.map +1 -0
- package/dist/tools/dmo/list-dmo-mappings.js +11 -0
- package/dist/tools/dmo/list-dmo-mappings.js.map +1 -0
- package/dist/tools/dmo/list-dmos.d.ts +17 -0
- package/dist/tools/dmo/list-dmos.d.ts.map +1 -0
- package/dist/tools/dmo/list-dmos.js +10 -0
- package/dist/tools/dmo/list-dmos.js.map +1 -0
- package/dist/tools/health/doctor.d.ts +18 -0
- package/dist/tools/health/doctor.d.ts.map +1 -0
- package/dist/tools/health/doctor.js +25 -0
- package/dist/tools/health/doctor.js.map +1 -0
- package/dist/tools/identity/describe-identity-resolution.d.ts +9 -0
- package/dist/tools/identity/describe-identity-resolution.d.ts.map +1 -0
- package/dist/tools/identity/describe-identity-resolution.js +10 -0
- package/dist/tools/identity/describe-identity-resolution.js.map +1 -0
- package/dist/tools/identity/list-identity-resolutions.d.ts +8 -0
- package/dist/tools/identity/list-identity-resolutions.d.ts.map +1 -0
- package/dist/tools/identity/list-identity-resolutions.js +10 -0
- package/dist/tools/identity/list-identity-resolutions.js.map +1 -0
- package/dist/tools/profile/query-profile.d.ts +10 -0
- package/dist/tools/profile/query-profile.d.ts.map +1 -0
- package/dist/tools/profile/query-profile.js +14 -0
- package/dist/tools/profile/query-profile.js.map +1 -0
- package/dist/tools/query/describe-table.d.ts +10 -0
- package/dist/tools/query/describe-table.d.ts.map +1 -0
- package/dist/tools/query/describe-table.js +10 -0
- package/dist/tools/query/describe-table.js.map +1 -0
- package/dist/tools/query/query-sql.d.ts +10 -0
- package/dist/tools/query/query-sql.d.ts.map +1 -0
- package/dist/tools/query/query-sql.js +10 -0
- package/dist/tools/query/query-sql.js.map +1 -0
- package/dist/tools/query/search-hybrid.d.ts +12 -0
- package/dist/tools/query/search-hybrid.d.ts.map +1 -0
- package/dist/tools/query/search-hybrid.js +12 -0
- package/dist/tools/query/search-hybrid.js.map +1 -0
- package/dist/tools/query/search-vector.d.ts +12 -0
- package/dist/tools/query/search-vector.d.ts.map +1 -0
- package/dist/tools/query/search-vector.js +12 -0
- package/dist/tools/query/search-vector.js.map +1 -0
- package/dist/tools/segment/describe-segment.d.ts +9 -0
- package/dist/tools/segment/describe-segment.d.ts.map +1 -0
- package/dist/tools/segment/describe-segment.js +10 -0
- package/dist/tools/segment/describe-segment.js.map +1 -0
- package/dist/tools/segment/list-segments.d.ts +8 -0
- package/dist/tools/segment/list-segments.d.ts.map +1 -0
- package/dist/tools/segment/list-segments.js +10 -0
- package/dist/tools/segment/list-segments.js.map +1 -0
- package/dist/tools/segment/publish-segment.d.ts +10 -0
- package/dist/tools/segment/publish-segment.d.ts.map +1 -0
- package/dist/tools/segment/publish-segment.js +14 -0
- package/dist/tools/segment/publish-segment.js.map +1 -0
- package/dist/tools/smart/resolve-field-names.d.ts +10 -0
- package/dist/tools/smart/resolve-field-names.d.ts.map +1 -0
- package/dist/tools/smart/resolve-field-names.js +18 -0
- package/dist/tools/smart/resolve-field-names.js.map +1 -0
- package/dist/tools/stream/create-data-stream.d.ts +10 -0
- package/dist/tools/stream/create-data-stream.d.ts.map +1 -0
- package/dist/tools/stream/create-data-stream.js +14 -0
- package/dist/tools/stream/create-data-stream.js.map +1 -0
- package/dist/tools/stream/describe-data-stream.d.ts +9 -0
- package/dist/tools/stream/describe-data-stream.d.ts.map +1 -0
- package/dist/tools/stream/describe-data-stream.js +10 -0
- package/dist/tools/stream/describe-data-stream.js.map +1 -0
- package/dist/tools/stream/list-data-streams.d.ts +8 -0
- package/dist/tools/stream/list-data-streams.d.ts.map +1 -0
- package/dist/tools/stream/list-data-streams.js +10 -0
- package/dist/tools/stream/list-data-streams.js.map +1 -0
- package/dist/tools/transform/get-transform-status.d.ts +9 -0
- package/dist/tools/transform/get-transform-status.d.ts.map +1 -0
- package/dist/tools/transform/get-transform-status.js +10 -0
- package/dist/tools/transform/get-transform-status.js.map +1 -0
- package/dist/tools/transform/list-transforms.d.ts +8 -0
- package/dist/tools/transform/list-transforms.d.ts.map +1 -0
- package/dist/tools/transform/list-transforms.js +10 -0
- package/dist/tools/transform/list-transforms.js.map +1 -0
- package/dist/tools/transform/run-transform.d.ts +10 -0
- package/dist/tools/transform/run-transform.d.ts.map +1 -0
- package/dist/tools/transform/run-transform.js +14 -0
- package/dist/tools/transform/run-transform.js.map +1 -0
- package/dist/util/errors.d.ts +2 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +40 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/http.d.ts +24 -0
- package/dist/util/http.d.ts.map +1 -0
- package/dist/util/http.js +104 -0
- package/dist/util/http.js.map +1 -0
- package/dist/util/unwrap.d.ts +12 -0
- package/dist/util/unwrap.d.ts.map +1 -0
- package/dist/util/unwrap.js +51 -0
- package/dist/util/unwrap.js.map +1 -0
- package/package.json +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# @chriscamp/sf-data-cloud-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for Salesforce Data Cloud operations. Provides 35 tools covering DMOs, calculated insights, transforms, data streams, queries, segments, activations, profiles, and health checks with a smart enhancement layer.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx -y @chriscamp/sf-data-cloud-mcp@latest --orgs ALLOW_ALL_ORGS
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
- Node.js 18+
|
|
14
|
+
- Salesforce CLI (`sf`) with authenticated org
|
|
15
|
+
- Data Cloud enabled on the target org
|
|
16
|
+
|
|
17
|
+
## Configuration
|
|
18
|
+
|
|
19
|
+
### Claude Code
|
|
20
|
+
|
|
21
|
+
Add to your Claude Code settings:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"mcpServers": {
|
|
26
|
+
"sf-data-cloud": {
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": ["-y", "@chriscamp/sf-data-cloud-mcp@latest"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Claude Desktop
|
|
35
|
+
|
|
36
|
+
Add to `claude_desktop_config.json`:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"mcpServers": {
|
|
41
|
+
"sf-data-cloud": {
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@chriscamp/sf-data-cloud-mcp@latest"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Tools Reference
|
|
50
|
+
|
|
51
|
+
All tools require a `target_org` parameter (Salesforce org alias or username). Write operations require `confirm: true` to execute (omit for preview).
|
|
52
|
+
|
|
53
|
+
### Health
|
|
54
|
+
|
|
55
|
+
| Tool | Description |
|
|
56
|
+
|------|-------------|
|
|
57
|
+
| `doctor` | Check Data Cloud connectivity and health |
|
|
58
|
+
|
|
59
|
+
### DMO (Data Model Objects)
|
|
60
|
+
|
|
61
|
+
| Tool | Description |
|
|
62
|
+
|------|-------------|
|
|
63
|
+
| `list_dmos` | List all Data Model Objects |
|
|
64
|
+
| `describe_dmo` | Describe a DMO with its fields |
|
|
65
|
+
| `create_dmo` | Create a new DMO |
|
|
66
|
+
| `create_dmo_from_dlo` | Create DMO from DLO with auto type correction and mapping |
|
|
67
|
+
| `delete_dmo` | Delete a DMO |
|
|
68
|
+
| `list_dmo_mappings` | List field mappings between DLO and DMO |
|
|
69
|
+
| `create_dmo_mapping` | Create field mapping between DLO and DMO |
|
|
70
|
+
|
|
71
|
+
### Calculated Insights
|
|
72
|
+
|
|
73
|
+
| Tool | Description |
|
|
74
|
+
|------|-------------|
|
|
75
|
+
| `list_calculated_insights` | List all Calculated Insights |
|
|
76
|
+
| `create_calculated_insight` | Create a CI with smart schedule translation |
|
|
77
|
+
| `run_calculated_insight` | Trigger a CI run |
|
|
78
|
+
| `get_calculated_insight_status` | Get status of a CI |
|
|
79
|
+
| `delete_calculated_insight` | Delete a CI |
|
|
80
|
+
|
|
81
|
+
### Query
|
|
82
|
+
|
|
83
|
+
| Tool | Description |
|
|
84
|
+
|------|-------------|
|
|
85
|
+
| `query_sql` | Execute SQL query against Data Cloud |
|
|
86
|
+
| `describe_table` | Describe table columns |
|
|
87
|
+
| `search_vector` | Vector similarity search |
|
|
88
|
+
| `search_hybrid` | Hybrid keyword+vector search |
|
|
89
|
+
|
|
90
|
+
### Data Streams
|
|
91
|
+
|
|
92
|
+
| Tool | Description |
|
|
93
|
+
|------|-------------|
|
|
94
|
+
| `list_data_streams` | List all data streams |
|
|
95
|
+
| `describe_data_stream` | Describe a data stream |
|
|
96
|
+
| `create_data_stream` | Create a new data stream |
|
|
97
|
+
|
|
98
|
+
### Transforms
|
|
99
|
+
|
|
100
|
+
| Tool | Description |
|
|
101
|
+
|------|-------------|
|
|
102
|
+
| `list_transforms` | List all data transforms |
|
|
103
|
+
| `run_transform` | Run a data transform |
|
|
104
|
+
| `get_transform_status` | Get status of a transform |
|
|
105
|
+
|
|
106
|
+
### Identity Resolution
|
|
107
|
+
|
|
108
|
+
| Tool | Description |
|
|
109
|
+
|------|-------------|
|
|
110
|
+
| `list_identity_resolutions` | List identity resolution rulesets |
|
|
111
|
+
| `describe_identity_resolution` | Describe an identity resolution ruleset |
|
|
112
|
+
|
|
113
|
+
### Segments
|
|
114
|
+
|
|
115
|
+
| Tool | Description |
|
|
116
|
+
|------|-------------|
|
|
117
|
+
| `list_segments` | List all segments |
|
|
118
|
+
| `describe_segment` | Describe a segment |
|
|
119
|
+
| `publish_segment` | Publish a segment |
|
|
120
|
+
|
|
121
|
+
### Activations & Actions
|
|
122
|
+
|
|
123
|
+
| Tool | Description |
|
|
124
|
+
|------|-------------|
|
|
125
|
+
| `list_activations` | List all activations |
|
|
126
|
+
| `list_activation_targets` | List activation targets |
|
|
127
|
+
| `create_activation` | Create a new activation |
|
|
128
|
+
| `list_data_actions` | List all data actions |
|
|
129
|
+
|
|
130
|
+
### Profile
|
|
131
|
+
|
|
132
|
+
| Tool | Description |
|
|
133
|
+
|------|-------------|
|
|
134
|
+
| `query_profile` | Query unified profiles |
|
|
135
|
+
|
|
136
|
+
### Credits
|
|
137
|
+
|
|
138
|
+
| Tool | Description |
|
|
139
|
+
|------|-------------|
|
|
140
|
+
| `estimate_flex_credits` | Estimate or query live flex credit usage |
|
|
141
|
+
|
|
142
|
+
### Smart
|
|
143
|
+
|
|
144
|
+
| Tool | Description |
|
|
145
|
+
|------|-------------|
|
|
146
|
+
| `resolve_field_names` | Resolve CRM object/field names to DLO/DMO names |
|
|
147
|
+
|
|
148
|
+
## Development
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
npm install
|
|
152
|
+
npm run build
|
|
153
|
+
npm test
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface OrgCredentials {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
instanceUrl: string;
|
|
4
|
+
username: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DataCloudCredentials {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
instanceUrl: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class AuthManager {
|
|
11
|
+
private orgCache;
|
|
12
|
+
private dcCache;
|
|
13
|
+
getOrgCredentials(targetOrg: string): Promise<OrgCredentials>;
|
|
14
|
+
getDataCloudCredentials(targetOrg: string): Promise<DataCloudCredentials>;
|
|
15
|
+
private exchangeDcToken;
|
|
16
|
+
clearCache(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=auth-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../src/auth/auth-manager.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,OAAO,CAGX;IAEE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB7D,uBAAuB,CAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC;YAOlB,eAAe;IAmD7B,UAAU,IAAI,IAAI;CAInB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
export class AuthManager {
|
|
3
|
+
orgCache = new Map();
|
|
4
|
+
dcCache = new Map();
|
|
5
|
+
async getOrgCredentials(targetOrg) {
|
|
6
|
+
const cached = this.orgCache.get(targetOrg);
|
|
7
|
+
if (cached)
|
|
8
|
+
return cached;
|
|
9
|
+
const output = execSync(`sf org display --target-org ${targetOrg} --json`, {
|
|
10
|
+
encoding: "utf-8",
|
|
11
|
+
timeout: 30000
|
|
12
|
+
});
|
|
13
|
+
const parsed = JSON.parse(output);
|
|
14
|
+
const result = parsed.result;
|
|
15
|
+
const creds = {
|
|
16
|
+
accessToken: result.accessToken,
|
|
17
|
+
instanceUrl: result.instanceUrl,
|
|
18
|
+
username: result.username
|
|
19
|
+
};
|
|
20
|
+
this.orgCache.set(targetOrg, creds);
|
|
21
|
+
return creds;
|
|
22
|
+
}
|
|
23
|
+
async getDataCloudCredentials(targetOrg) {
|
|
24
|
+
const cached = this.dcCache.get(targetOrg);
|
|
25
|
+
if (cached && cached.expiresAt > Date.now())
|
|
26
|
+
return cached.creds;
|
|
27
|
+
return this.exchangeDcToken(targetOrg, false);
|
|
28
|
+
}
|
|
29
|
+
async exchangeDcToken(targetOrg, isRetry) {
|
|
30
|
+
const orgCreds = await this.getOrgCredentials(targetOrg);
|
|
31
|
+
const response = await fetch(`${orgCreds.instanceUrl}/services/a360/token`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: {
|
|
34
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
35
|
+
Authorization: `Bearer ${orgCreds.accessToken}`
|
|
36
|
+
},
|
|
37
|
+
body: "grant_type=urn:salesforce:grant-type:external:cdp"
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const errorBody = await response.json().catch(() => ({}));
|
|
41
|
+
// If "invalid subject token" and we haven't retried, the org token may be stale
|
|
42
|
+
if (!isRetry && String(errorBody.error_description ?? "").includes("invalid subject token")) {
|
|
43
|
+
this.orgCache.delete(targetOrg);
|
|
44
|
+
return this.exchangeDcToken(targetOrg, true);
|
|
45
|
+
}
|
|
46
|
+
throw new Error(`Data Cloud token exchange failed: ${JSON.stringify(errorBody)}`);
|
|
47
|
+
}
|
|
48
|
+
const tokenResponse = (await response.json());
|
|
49
|
+
const creds = {
|
|
50
|
+
accessToken: tokenResponse.access_token,
|
|
51
|
+
instanceUrl: tokenResponse.instance_url
|
|
52
|
+
};
|
|
53
|
+
this.dcCache.set(targetOrg, {
|
|
54
|
+
creds,
|
|
55
|
+
expiresAt: Date.now() + 25 * 60 * 1000 // 25 min TTL (tokens expire ~30 min)
|
|
56
|
+
});
|
|
57
|
+
return creds;
|
|
58
|
+
}
|
|
59
|
+
clearCache() {
|
|
60
|
+
this.orgCache.clear();
|
|
61
|
+
this.dcCache.clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=auth-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../src/auth/auth-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { AuthManager } from "./auth/auth-manager.js";
|
|
5
|
+
import { DataCloudHttpClient } from "./util/http.js";
|
|
6
|
+
// Health
|
|
7
|
+
import { doctorTool, doctorInputSchema } from "./tools/health/doctor.js";
|
|
8
|
+
// DMO
|
|
9
|
+
import { listDmosTool, listDmosInputSchema } from "./tools/dmo/list-dmos.js";
|
|
10
|
+
import { describeDmoTool, describeDmoInputSchema } from "./tools/dmo/describe-dmo.js";
|
|
11
|
+
import { createDmoTool, createDmoInputSchema } from "./tools/dmo/create-dmo.js";
|
|
12
|
+
import { createDmoFromDloTool, createDmoFromDloInputSchema } from "./tools/dmo/create-dmo-from-dlo.js";
|
|
13
|
+
import { deleteDmoTool, deleteDmoInputSchema } from "./tools/dmo/delete-dmo.js";
|
|
14
|
+
import { listDmoMappingsTool, listDmoMappingsInputSchema } from "./tools/dmo/list-dmo-mappings.js";
|
|
15
|
+
import { createDmoMappingTool, createDmoMappingInputSchema } from "./tools/dmo/create-dmo-mapping.js";
|
|
16
|
+
// Calculated Insights
|
|
17
|
+
import { listCalculatedInsightsTool, listCalculatedInsightsInputSchema } from "./tools/ci/list-calculated-insights.js";
|
|
18
|
+
import { createCalculatedInsightTool, createCalculatedInsightInputSchema } from "./tools/ci/create-calculated-insight.js";
|
|
19
|
+
import { runCalculatedInsightTool, runCalculatedInsightInputSchema } from "./tools/ci/run-calculated-insight.js";
|
|
20
|
+
import { getCalculatedInsightStatusTool, getCalculatedInsightStatusInputSchema } from "./tools/ci/get-calculated-insight-status.js";
|
|
21
|
+
import { deleteCalculatedInsightTool, deleteCalculatedInsightInputSchema } from "./tools/ci/delete-calculated-insight.js";
|
|
22
|
+
// Query
|
|
23
|
+
import { querySqlTool, querySqlInputSchema } from "./tools/query/query-sql.js";
|
|
24
|
+
import { describeTableTool, describeTableInputSchema } from "./tools/query/describe-table.js";
|
|
25
|
+
import { searchVectorTool, searchVectorInputSchema } from "./tools/query/search-vector.js";
|
|
26
|
+
import { searchHybridTool, searchHybridInputSchema } from "./tools/query/search-hybrid.js";
|
|
27
|
+
// Data Streams
|
|
28
|
+
import { listDataStreamsTool, listDataStreamsInputSchema } from "./tools/stream/list-data-streams.js";
|
|
29
|
+
import { describeDataStreamTool, describeDataStreamInputSchema } from "./tools/stream/describe-data-stream.js";
|
|
30
|
+
import { createDataStreamTool, createDataStreamInputSchema } from "./tools/stream/create-data-stream.js";
|
|
31
|
+
// Transforms
|
|
32
|
+
import { listTransformsTool, listTransformsInputSchema } from "./tools/transform/list-transforms.js";
|
|
33
|
+
import { runTransformTool, runTransformInputSchema } from "./tools/transform/run-transform.js";
|
|
34
|
+
import { getTransformStatusTool, getTransformStatusInputSchema } from "./tools/transform/get-transform-status.js";
|
|
35
|
+
// Identity Resolution
|
|
36
|
+
import { listIdentityResolutionsTool, listIdentityResolutionsInputSchema } from "./tools/identity/list-identity-resolutions.js";
|
|
37
|
+
import { describeIdentityResolutionTool, describeIdentityResolutionInputSchema } from "./tools/identity/describe-identity-resolution.js";
|
|
38
|
+
// Segments
|
|
39
|
+
import { listSegmentsTool, listSegmentsInputSchema } from "./tools/segment/list-segments.js";
|
|
40
|
+
import { describeSegmentTool, describeSegmentInputSchema } from "./tools/segment/describe-segment.js";
|
|
41
|
+
import { publishSegmentTool, publishSegmentInputSchema } from "./tools/segment/publish-segment.js";
|
|
42
|
+
// Activations
|
|
43
|
+
import { listActivationsTool, listActivationsInputSchema } from "./tools/activation/list-activations.js";
|
|
44
|
+
import { listActivationTargetsTool, listActivationTargetsInputSchema } from "./tools/activation/list-activation-targets.js";
|
|
45
|
+
import { createActivationTool, createActivationInputSchema } from "./tools/activation/create-activation.js";
|
|
46
|
+
// Data Actions
|
|
47
|
+
import { listDataActionsTool, listDataActionsInputSchema } from "./tools/action/list-data-actions.js";
|
|
48
|
+
// Profile
|
|
49
|
+
import { queryProfileTool, queryProfileInputSchema } from "./tools/profile/query-profile.js";
|
|
50
|
+
// Credits
|
|
51
|
+
import { estimateFlexCredits, estimateFlexCreditsInputSchema } from "./tools/credits/estimate-flex-credits.js";
|
|
52
|
+
// Smart
|
|
53
|
+
import { resolveFieldNamesTool, resolveFieldNamesInputSchema } from "./tools/smart/resolve-field-names.js";
|
|
54
|
+
// Parse CLI args: --orgs ALLOW_ALL_ORGS | --orgs org1,org2
|
|
55
|
+
function parseAllowedOrgs() {
|
|
56
|
+
const args = process.argv.slice(2);
|
|
57
|
+
const orgsIdx = args.indexOf("--orgs");
|
|
58
|
+
if (orgsIdx === -1 || orgsIdx + 1 >= args.length) {
|
|
59
|
+
return new Set(); // no --orgs flag = no orgs allowed
|
|
60
|
+
}
|
|
61
|
+
const value = args[orgsIdx + 1];
|
|
62
|
+
if (value === "ALLOW_ALL_ORGS")
|
|
63
|
+
return "ALL";
|
|
64
|
+
return new Set(value.split(",").map(s => s.trim()).filter(Boolean));
|
|
65
|
+
}
|
|
66
|
+
const allowedOrgs = parseAllowedOrgs();
|
|
67
|
+
function validateOrg(targetOrg) {
|
|
68
|
+
if (allowedOrgs === "ALL")
|
|
69
|
+
return;
|
|
70
|
+
if (allowedOrgs.size === 0) {
|
|
71
|
+
throw new Error("No orgs allowed. Start with --orgs ALLOW_ALL_ORGS or --orgs org1,org2");
|
|
72
|
+
}
|
|
73
|
+
if (!allowedOrgs.has(targetOrg)) {
|
|
74
|
+
throw new Error(`Org "${targetOrg}" is not in the allowed list: ${[...allowedOrgs].join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const server = new McpServer({
|
|
78
|
+
name: "sf-data-cloud-mcp",
|
|
79
|
+
version: "0.1.0"
|
|
80
|
+
});
|
|
81
|
+
const auth = new AuthManager();
|
|
82
|
+
const http = new DataCloudHttpClient();
|
|
83
|
+
function toolResult(result) {
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function toolError(error) {
|
|
89
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: JSON.stringify({ error: message }, null, 2) }],
|
|
92
|
+
isError: true
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function safeTool(fn) {
|
|
96
|
+
return async (params) => {
|
|
97
|
+
try {
|
|
98
|
+
if (params.target_org)
|
|
99
|
+
validateOrg(params.target_org);
|
|
100
|
+
return toolResult(await fn(params));
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
return toolError(e);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Health
|
|
108
|
+
server.tool("doctor", "Check Data Cloud connectivity and health", doctorInputSchema.shape, safeTool((p) => doctorTool(p, auth, http)));
|
|
109
|
+
// DMO tools
|
|
110
|
+
server.tool("list_dmos", "List all Data Model Objects", listDmosInputSchema.shape, safeTool((p) => listDmosTool(p, auth, http)));
|
|
111
|
+
server.tool("describe_dmo", "Describe a DMO with its fields", describeDmoInputSchema.shape, safeTool((p) => describeDmoTool(p, auth, http)));
|
|
112
|
+
server.tool("create_dmo", "Create a new Data Model Object", createDmoInputSchema.shape, safeTool((p) => createDmoTool(p, auth, http)));
|
|
113
|
+
server.tool("create_dmo_from_dlo", "Create DMO from DLO with auto type correction and mapping", createDmoFromDloInputSchema.shape, safeTool((p) => createDmoFromDloTool(p, auth, http)));
|
|
114
|
+
server.tool("delete_dmo", "Delete a Data Model Object", deleteDmoInputSchema.shape, safeTool((p) => deleteDmoTool(p, auth, http)));
|
|
115
|
+
server.tool("list_dmo_mappings", "List field mappings between DLO and DMO", listDmoMappingsInputSchema.shape, safeTool((p) => listDmoMappingsTool(p, auth, http)));
|
|
116
|
+
server.tool("create_dmo_mapping", "Create field mapping between DLO and DMO", createDmoMappingInputSchema.shape, safeTool((p) => createDmoMappingTool(p, auth, http)));
|
|
117
|
+
// Calculated Insight tools
|
|
118
|
+
server.tool("list_calculated_insights", "List all Calculated Insights", listCalculatedInsightsInputSchema.shape, safeTool((p) => listCalculatedInsightsTool(p, auth, http)));
|
|
119
|
+
server.tool("create_calculated_insight", "Create a Calculated Insight with smart schedule translation", createCalculatedInsightInputSchema.shape, safeTool((p) => createCalculatedInsightTool(p, auth, http)));
|
|
120
|
+
server.tool("run_calculated_insight", "Trigger a Calculated Insight run", runCalculatedInsightInputSchema.shape, safeTool((p) => runCalculatedInsightTool(p, auth, http)));
|
|
121
|
+
server.tool("get_calculated_insight_status", "Get status of a Calculated Insight", getCalculatedInsightStatusInputSchema.shape, safeTool((p) => getCalculatedInsightStatusTool(p, auth, http)));
|
|
122
|
+
server.tool("delete_calculated_insight", "Delete a Calculated Insight", deleteCalculatedInsightInputSchema.shape, safeTool((p) => deleteCalculatedInsightTool(p, auth, http)));
|
|
123
|
+
// Query tools
|
|
124
|
+
server.tool("query_sql", "Execute SQL query against Data Cloud", querySqlInputSchema.shape, safeTool((p) => querySqlTool(p, auth, http)));
|
|
125
|
+
server.tool("describe_table", "Describe table columns via LIMIT 0 query", describeTableInputSchema.shape, safeTool((p) => describeTableTool(p, auth, http)));
|
|
126
|
+
server.tool("search_vector", "Vector similarity search on a search index", searchVectorInputSchema.shape, safeTool((p) => searchVectorTool(p, auth, http)));
|
|
127
|
+
server.tool("search_hybrid", "Hybrid keyword+vector search on a search index", searchHybridInputSchema.shape, safeTool((p) => searchHybridTool(p, auth, http)));
|
|
128
|
+
// Data Stream tools
|
|
129
|
+
server.tool("list_data_streams", "List all data streams", listDataStreamsInputSchema.shape, safeTool((p) => listDataStreamsTool(p, auth, http)));
|
|
130
|
+
server.tool("describe_data_stream", "Describe a data stream", describeDataStreamInputSchema.shape, safeTool((p) => describeDataStreamTool(p, auth, http)));
|
|
131
|
+
server.tool("create_data_stream", "Create a new data stream", createDataStreamInputSchema.shape, safeTool((p) => createDataStreamTool(p, auth, http)));
|
|
132
|
+
// Transform tools
|
|
133
|
+
server.tool("list_transforms", "List all data transforms", listTransformsInputSchema.shape, safeTool((p) => listTransformsTool(p, auth, http)));
|
|
134
|
+
server.tool("run_transform", "Run a data transform", runTransformInputSchema.shape, safeTool((p) => runTransformTool(p, auth, http)));
|
|
135
|
+
server.tool("get_transform_status", "Get status of a data transform", getTransformStatusInputSchema.shape, safeTool((p) => getTransformStatusTool(p, auth, http)));
|
|
136
|
+
// Identity Resolution tools
|
|
137
|
+
server.tool("list_identity_resolutions", "List all identity resolution rulesets", listIdentityResolutionsInputSchema.shape, safeTool((p) => listIdentityResolutionsTool(p, auth, http)));
|
|
138
|
+
server.tool("describe_identity_resolution", "Describe an identity resolution ruleset", describeIdentityResolutionInputSchema.shape, safeTool((p) => describeIdentityResolutionTool(p, auth, http)));
|
|
139
|
+
// Segment tools
|
|
140
|
+
server.tool("list_segments", "List all segments", listSegmentsInputSchema.shape, safeTool((p) => listSegmentsTool(p, auth, http)));
|
|
141
|
+
server.tool("describe_segment", "Describe a segment", describeSegmentInputSchema.shape, safeTool((p) => describeSegmentTool(p, auth, http)));
|
|
142
|
+
server.tool("publish_segment", "Publish a segment", publishSegmentInputSchema.shape, safeTool((p) => publishSegmentTool(p, auth, http)));
|
|
143
|
+
// Activation tools
|
|
144
|
+
server.tool("list_activations", "List all activations", listActivationsInputSchema.shape, safeTool((p) => listActivationsTool(p, auth, http)));
|
|
145
|
+
server.tool("list_activation_targets", "List all activation targets", listActivationTargetsInputSchema.shape, safeTool((p) => listActivationTargetsTool(p, auth, http)));
|
|
146
|
+
server.tool("create_activation", "Create a new activation", createActivationInputSchema.shape, safeTool((p) => createActivationTool(p, auth, http)));
|
|
147
|
+
// Data Action tools
|
|
148
|
+
server.tool("list_data_actions", "List all data actions", listDataActionsInputSchema.shape, safeTool((p) => listDataActionsTool(p, auth, http)));
|
|
149
|
+
// Profile tools
|
|
150
|
+
server.tool("query_profile", "Query unified profiles using Data Cloud token", queryProfileInputSchema.shape, safeTool((p) => queryProfileTool(p, auth, http)));
|
|
151
|
+
// Credit tools
|
|
152
|
+
server.tool("estimate_flex_credits", "Estimate or query live flex credit usage", estimateFlexCreditsInputSchema.shape, safeTool((p) => estimateFlexCredits(p, auth, http)));
|
|
153
|
+
// Smart tools
|
|
154
|
+
server.tool("resolve_field_names", "Resolve CRM object/field names to DLO/DMO names", resolveFieldNamesInputSchema.shape, safeTool((p) => resolveFieldNamesTool(p, auth, http)));
|
|
155
|
+
async function main() {
|
|
156
|
+
const transport = new StdioServerTransport();
|
|
157
|
+
await server.connect(transport);
|
|
158
|
+
}
|
|
159
|
+
main().catch(console.error);
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DataCloudHttpClient } from "../util/http.js";
|
|
2
|
+
export interface FieldMapping {
|
|
3
|
+
crm: string;
|
|
4
|
+
crmField?: string;
|
|
5
|
+
dlo: string;
|
|
6
|
+
dloField?: string;
|
|
7
|
+
dmo: string;
|
|
8
|
+
dmoField?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class FieldResolver {
|
|
11
|
+
private dloCache;
|
|
12
|
+
private http;
|
|
13
|
+
constructor(http: DataCloudHttpClient);
|
|
14
|
+
resolveDloName(crmObjectName: string, token: string, instanceUrl: string): Promise<string>;
|
|
15
|
+
resolveFieldMapping(crmObjectName: string, crmFieldName: string, token: string, instanceUrl: string): Promise<FieldMapping>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=field-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-resolver.d.ts","sourceRoot":"","sources":["../../src/smart/field-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,IAAI,CAAsB;gBAEtB,IAAI,EAAE,mBAAmB;IAI/B,cAAc,CAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAwBZ,mBAAmB,CACvB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;CAiCzB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class FieldResolver {
|
|
2
|
+
dloCache = new Map();
|
|
3
|
+
http;
|
|
4
|
+
constructor(http) {
|
|
5
|
+
this.http = http;
|
|
6
|
+
}
|
|
7
|
+
async resolveDloName(crmObjectName, token, instanceUrl) {
|
|
8
|
+
const cached = this.dloCache.get(crmObjectName);
|
|
9
|
+
if (cached)
|
|
10
|
+
return cached;
|
|
11
|
+
const response = await this.http.get(`${instanceUrl}/services/data/v66.0/ssot/data-streams`, token);
|
|
12
|
+
// CRM object Billing_Account__c → DLO name pattern: Billing_Account_c_*__dll
|
|
13
|
+
const crmBase = crmObjectName.replace(/__c$/, "_c").replace(/__/, "_");
|
|
14
|
+
const stream = response.dataStreams.find((s) => s.name.startsWith(crmBase) || s.label.includes(crmObjectName));
|
|
15
|
+
if (!stream) {
|
|
16
|
+
throw new Error(`No data stream found for CRM object: ${crmObjectName}`);
|
|
17
|
+
}
|
|
18
|
+
// DLO name = stream name + __dll suffix
|
|
19
|
+
const dloName = `${stream.name}__dll`;
|
|
20
|
+
this.dloCache.set(crmObjectName, dloName);
|
|
21
|
+
return dloName;
|
|
22
|
+
}
|
|
23
|
+
async resolveFieldMapping(crmObjectName, crmFieldName, token, instanceUrl) {
|
|
24
|
+
const dloName = await this.resolveDloName(crmObjectName, token, instanceUrl);
|
|
25
|
+
// CRM field Adjusted_Credit_Score__c → DLO field Adjusted_Credit_Score_c__c
|
|
26
|
+
const dloField = crmFieldName.replace(/__c$/, "_c__c");
|
|
27
|
+
// Get DMO mapping for this DLO
|
|
28
|
+
const mapping = await this.http.get(`${instanceUrl}/services/data/v66.0/ssot/data-model-object-mappings?dloDeveloperName=${dloName}`, token);
|
|
29
|
+
const fieldMapping = mapping.mappings.find((m) => m.sourceField === dloField);
|
|
30
|
+
return {
|
|
31
|
+
crm: crmObjectName,
|
|
32
|
+
crmField: crmFieldName,
|
|
33
|
+
dlo: dloName,
|
|
34
|
+
dloField,
|
|
35
|
+
dmo: mapping.targetDmo,
|
|
36
|
+
dmoField: fieldMapping?.targetField
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=field-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-resolver.js","sourceRoot":"","sources":["../../src/smart/field-resolver.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,aAAa;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,IAAI,CAAsB;IAElC,YAAY,IAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,aAAqB,EACrB,KAAa,EACb,WAAmB;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAEjC,GAAG,WAAW,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAElE,6EAA6E;QAC7E,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CACrE,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,aAAa,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,wCAAwC;QACxC,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,aAAqB,EACrB,YAAoB,EACpB,KAAa,EACb,WAAmB;QAEnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CACvC,aAAa,EACb,KAAK,EACL,WAAW,CACZ,CAAC;QAEF,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvD,+BAA+B;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAKjC,GAAG,WAAW,yEAAyE,OAAO,EAAE,EAChG,KAAK,CACN,CAAC;QAEF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,QAAQ,CAClC,CAAC;QAEF,OAAO;YACL,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,YAAY;YACtB,GAAG,EAAE,OAAO;YACZ,QAAQ;YACR,GAAG,EAAE,OAAO,CAAC,SAAS;YACtB,QAAQ,EAAE,YAAY,EAAE,WAAW;SACpC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates SQL from DLO table/field references to DMO references.
|
|
3
|
+
* String-based translator — handles the structured SQL patterns Data Cloud uses.
|
|
4
|
+
*/
|
|
5
|
+
export declare function translateDloSqlToDmoSql(sql: string, tableMap: Record<string, string>, fieldMap: Record<string, string>): string;
|
|
6
|
+
//# sourceMappingURL=sql-translator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-translator.d.ts","sourceRoot":"","sources":["../../src/smart/sql-translator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAmDR"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates SQL from DLO table/field references to DMO references.
|
|
3
|
+
* String-based translator — handles the structured SQL patterns Data Cloud uses.
|
|
4
|
+
*/
|
|
5
|
+
export function translateDloSqlToDmoSql(sql, tableMap, fieldMap) {
|
|
6
|
+
let result = sql;
|
|
7
|
+
// Build alias map: detect "FROM/JOIN table alias" patterns
|
|
8
|
+
const aliasMap = new Map();
|
|
9
|
+
const aliasPattern = /(?:FROM|JOIN)\s+(\S+)\s+(?:AS\s+)?([A-Za-z_]\w*)(?=\s|$|,|\))/gi;
|
|
10
|
+
let match;
|
|
11
|
+
while ((match = aliasPattern.exec(sql)) !== null) {
|
|
12
|
+
const tableName = match[1];
|
|
13
|
+
const alias = match[2];
|
|
14
|
+
// Only map if tableName is a known DLO and alias is not a SQL keyword
|
|
15
|
+
if (tableMap[tableName] && !isKeyword(alias)) {
|
|
16
|
+
aliasMap.set(alias, tableName);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Replace qualified field references: alias.field → dmo.dmoField
|
|
20
|
+
for (const [alias, dloTable] of aliasMap.entries()) {
|
|
21
|
+
const dmoTable = tableMap[dloTable];
|
|
22
|
+
const fieldPattern = new RegExp(`\\b${escapeRegExp(alias)}\\.([A-Za-z_]\\w*)`, "g");
|
|
23
|
+
result = result.replace(fieldPattern, (_match, fieldName) => {
|
|
24
|
+
const qualifiedDlo = `${dloTable}.${fieldName}`;
|
|
25
|
+
if (fieldMap[qualifiedDlo]) {
|
|
26
|
+
return fieldMap[qualifiedDlo];
|
|
27
|
+
}
|
|
28
|
+
return `${dmoTable}.${fieldName}`;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Replace qualified field references: dloTable.field → dmo.dmoField
|
|
32
|
+
for (const [qualifiedDlo, qualifiedDmo] of Object.entries(fieldMap)) {
|
|
33
|
+
result = result.replaceAll(qualifiedDlo, qualifiedDmo);
|
|
34
|
+
}
|
|
35
|
+
// Replace table names (including alias declarations)
|
|
36
|
+
for (const [dloTable, dmoTable] of Object.entries(tableMap)) {
|
|
37
|
+
// Remove alias declarations by replacing "dloTable alias" with just "dmoTable"
|
|
38
|
+
for (const [alias, mappedDlo] of aliasMap.entries()) {
|
|
39
|
+
if (mappedDlo === dloTable) {
|
|
40
|
+
const aliasRemovalPattern = new RegExp(`\\b${escapeRegExp(dloTable)}\\s+(?:AS\\s+)?${escapeRegExp(alias)}\\b`, "g");
|
|
41
|
+
result = result.replace(aliasRemovalPattern, dmoTable);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Replace remaining standalone table references
|
|
45
|
+
result = result.replaceAll(dloTable, dmoTable);
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
function escapeRegExp(s) {
|
|
50
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
51
|
+
}
|
|
52
|
+
function isKeyword(word) {
|
|
53
|
+
const keywords = new Set([
|
|
54
|
+
"ON", "WHERE", "AND", "OR", "LEFT", "RIGHT", "INNER", "OUTER",
|
|
55
|
+
"JOIN", "CROSS", "GROUP", "BY", "ORDER", "HAVING", "LIMIT",
|
|
56
|
+
"SELECT", "FROM", "AS", "CASE", "WHEN", "THEN", "ELSE", "END"
|
|
57
|
+
]);
|
|
58
|
+
return keywords.has(word.toUpperCase());
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=sql-translator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-translator.js","sourceRoot":"","sources":["../../src/smart/sql-translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-mapper.d.ts","sourceRoot":"","sources":["../../src/smart/type-mapper.ts"],"names":[],"mappings":"AAWA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAkB9D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const DLO_TO_DMO_TYPE_MAP = {
|
|
2
|
+
VARCHAR: "Text",
|
|
3
|
+
DECIMAL: "Number",
|
|
4
|
+
BOOLEAN: "Checkbox",
|
|
5
|
+
DATE: "DateTime", // API quirk: Date → DateTime to avoid type mismatch
|
|
6
|
+
TIMESTAMP: "DateTime",
|
|
7
|
+
"TIMESTAMP WITH TIME ZONE": "DateTime",
|
|
8
|
+
INTEGER: "Number",
|
|
9
|
+
BIGINT: "Number"
|
|
10
|
+
};
|
|
11
|
+
export function correctDmoFieldType(dloType) {
|
|
12
|
+
return DLO_TO_DMO_TYPE_MAP[dloType] ?? "Text";
|
|
13
|
+
}
|
|
14
|
+
export function cleanDmoFieldName(dloFieldName) {
|
|
15
|
+
// Pattern: custom object fields from CRM get _c__c in DLO, then DMO auto-adds another _c__c
|
|
16
|
+
// e.g., Provider__c (CRM) → Provider_c__c (DLO) → Provider_c_c__c (DMO)
|
|
17
|
+
// We want: Provider_c__c (DLO) → Provider__c (DMO) — strip the intermediate _c
|
|
18
|
+
//
|
|
19
|
+
// Rule: if a field name ends with _c_c__c, collapse to _c__c
|
|
20
|
+
// But also handle: if DLO field ends with _c__c (single custom suffix), the DMO should strip to __c
|
|
21
|
+
if (dloFieldName.match(/_c_c__c$/)) {
|
|
22
|
+
return dloFieldName.replace(/_c_c__c$/, "_c__c");
|
|
23
|
+
}
|
|
24
|
+
if (dloFieldName.match(/[a-z]_c__c$/) &&
|
|
25
|
+
!dloFieldName.startsWith("DataSource") &&
|
|
26
|
+
!dloFieldName.startsWith("KQ_")) {
|
|
27
|
+
return dloFieldName.replace(/_c__c$/, "__c");
|
|
28
|
+
}
|
|
29
|
+
return dloFieldName;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=type-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-mapper.js","sourceRoot":"","sources":["../../src/smart/type-mapper.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAA2B;IAClD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU,EAAmB,oDAAoD;IACvF,SAAS,EAAE,UAAU;IACrB,0BAA0B,EAAE,UAAU;IACtC,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,4FAA4F;IAC5F,wEAAwE;IACxE,+EAA+E;IAC/E,EAAE;IACF,6DAA6D;IAC7D,oGAAoG;IACpG,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,IACE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;QACjC,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;QACtC,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAC/B,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
|