@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.
Files changed (174) hide show
  1. package/README.md +158 -0
  2. package/dist/auth/auth-manager.d.ts +18 -0
  3. package/dist/auth/auth-manager.d.ts.map +1 -0
  4. package/dist/auth/auth-manager.js +64 -0
  5. package/dist/auth/auth-manager.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +160 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/smart/field-resolver.d.ts +17 -0
  11. package/dist/smart/field-resolver.d.ts.map +1 -0
  12. package/dist/smart/field-resolver.js +40 -0
  13. package/dist/smart/field-resolver.js.map +1 -0
  14. package/dist/smart/sql-translator.d.ts +6 -0
  15. package/dist/smart/sql-translator.d.ts.map +1 -0
  16. package/dist/smart/sql-translator.js +60 -0
  17. package/dist/smart/sql-translator.js.map +1 -0
  18. package/dist/smart/type-mapper.d.ts +3 -0
  19. package/dist/smart/type-mapper.d.ts.map +1 -0
  20. package/dist/smart/type-mapper.js +31 -0
  21. package/dist/smart/type-mapper.js.map +1 -0
  22. package/dist/tools/action/list-data-actions.d.ts +8 -0
  23. package/dist/tools/action/list-data-actions.d.ts.map +1 -0
  24. package/dist/tools/action/list-data-actions.js +10 -0
  25. package/dist/tools/action/list-data-actions.js.map +1 -0
  26. package/dist/tools/activation/create-activation.d.ts +10 -0
  27. package/dist/tools/activation/create-activation.d.ts.map +1 -0
  28. package/dist/tools/activation/create-activation.js +14 -0
  29. package/dist/tools/activation/create-activation.js.map +1 -0
  30. package/dist/tools/activation/list-activation-targets.d.ts +8 -0
  31. package/dist/tools/activation/list-activation-targets.d.ts.map +1 -0
  32. package/dist/tools/activation/list-activation-targets.js +10 -0
  33. package/dist/tools/activation/list-activation-targets.js.map +1 -0
  34. package/dist/tools/activation/list-activations.d.ts +8 -0
  35. package/dist/tools/activation/list-activations.d.ts.map +1 -0
  36. package/dist/tools/activation/list-activations.js +10 -0
  37. package/dist/tools/activation/list-activations.js.map +1 -0
  38. package/dist/tools/ci/create-calculated-insight.d.ts +11 -0
  39. package/dist/tools/ci/create-calculated-insight.d.ts.map +1 -0
  40. package/dist/tools/ci/create-calculated-insight.js +57 -0
  41. package/dist/tools/ci/create-calculated-insight.js.map +1 -0
  42. package/dist/tools/ci/delete-calculated-insight.d.ts +11 -0
  43. package/dist/tools/ci/delete-calculated-insight.d.ts.map +1 -0
  44. package/dist/tools/ci/delete-calculated-insight.js +15 -0
  45. package/dist/tools/ci/delete-calculated-insight.js.map +1 -0
  46. package/dist/tools/ci/get-calculated-insight-status.d.ts +10 -0
  47. package/dist/tools/ci/get-calculated-insight-status.d.ts.map +1 -0
  48. package/dist/tools/ci/get-calculated-insight-status.js +21 -0
  49. package/dist/tools/ci/get-calculated-insight-status.js.map +1 -0
  50. package/dist/tools/ci/list-calculated-insights.d.ts +10 -0
  51. package/dist/tools/ci/list-calculated-insights.d.ts.map +1 -0
  52. package/dist/tools/ci/list-calculated-insights.js +18 -0
  53. package/dist/tools/ci/list-calculated-insights.js.map +1 -0
  54. package/dist/tools/ci/run-calculated-insight.d.ts +11 -0
  55. package/dist/tools/ci/run-calculated-insight.d.ts.map +1 -0
  56. package/dist/tools/ci/run-calculated-insight.js +14 -0
  57. package/dist/tools/ci/run-calculated-insight.js.map +1 -0
  58. package/dist/tools/credits/estimate-flex-credits.d.ts +18 -0
  59. package/dist/tools/credits/estimate-flex-credits.d.ts.map +1 -0
  60. package/dist/tools/credits/estimate-flex-credits.js +56 -0
  61. package/dist/tools/credits/estimate-flex-credits.js.map +1 -0
  62. package/dist/tools/dmo/create-dmo-from-dlo.d.ts +15 -0
  63. package/dist/tools/dmo/create-dmo-from-dlo.d.ts.map +1 -0
  64. package/dist/tools/dmo/create-dmo-from-dlo.js +78 -0
  65. package/dist/tools/dmo/create-dmo-from-dlo.js.map +1 -0
  66. package/dist/tools/dmo/create-dmo-mapping.d.ts +11 -0
  67. package/dist/tools/dmo/create-dmo-mapping.d.ts.map +1 -0
  68. package/dist/tools/dmo/create-dmo-mapping.js +14 -0
  69. package/dist/tools/dmo/create-dmo-mapping.js.map +1 -0
  70. package/dist/tools/dmo/create-dmo.d.ts +11 -0
  71. package/dist/tools/dmo/create-dmo.d.ts.map +1 -0
  72. package/dist/tools/dmo/create-dmo.js +14 -0
  73. package/dist/tools/dmo/create-dmo.js.map +1 -0
  74. package/dist/tools/dmo/delete-dmo.d.ts +11 -0
  75. package/dist/tools/dmo/delete-dmo.d.ts.map +1 -0
  76. package/dist/tools/dmo/delete-dmo.js +15 -0
  77. package/dist/tools/dmo/delete-dmo.js.map +1 -0
  78. package/dist/tools/dmo/describe-dmo.d.ts +23 -0
  79. package/dist/tools/dmo/describe-dmo.d.ts.map +1 -0
  80. package/dist/tools/dmo/describe-dmo.js +10 -0
  81. package/dist/tools/dmo/describe-dmo.js.map +1 -0
  82. package/dist/tools/dmo/list-dmo-mappings.d.ts +11 -0
  83. package/dist/tools/dmo/list-dmo-mappings.d.ts.map +1 -0
  84. package/dist/tools/dmo/list-dmo-mappings.js +11 -0
  85. package/dist/tools/dmo/list-dmo-mappings.js.map +1 -0
  86. package/dist/tools/dmo/list-dmos.d.ts +17 -0
  87. package/dist/tools/dmo/list-dmos.d.ts.map +1 -0
  88. package/dist/tools/dmo/list-dmos.js +10 -0
  89. package/dist/tools/dmo/list-dmos.js.map +1 -0
  90. package/dist/tools/health/doctor.d.ts +18 -0
  91. package/dist/tools/health/doctor.d.ts.map +1 -0
  92. package/dist/tools/health/doctor.js +25 -0
  93. package/dist/tools/health/doctor.js.map +1 -0
  94. package/dist/tools/identity/describe-identity-resolution.d.ts +9 -0
  95. package/dist/tools/identity/describe-identity-resolution.d.ts.map +1 -0
  96. package/dist/tools/identity/describe-identity-resolution.js +10 -0
  97. package/dist/tools/identity/describe-identity-resolution.js.map +1 -0
  98. package/dist/tools/identity/list-identity-resolutions.d.ts +8 -0
  99. package/dist/tools/identity/list-identity-resolutions.d.ts.map +1 -0
  100. package/dist/tools/identity/list-identity-resolutions.js +10 -0
  101. package/dist/tools/identity/list-identity-resolutions.js.map +1 -0
  102. package/dist/tools/profile/query-profile.d.ts +10 -0
  103. package/dist/tools/profile/query-profile.d.ts.map +1 -0
  104. package/dist/tools/profile/query-profile.js +14 -0
  105. package/dist/tools/profile/query-profile.js.map +1 -0
  106. package/dist/tools/query/describe-table.d.ts +10 -0
  107. package/dist/tools/query/describe-table.d.ts.map +1 -0
  108. package/dist/tools/query/describe-table.js +10 -0
  109. package/dist/tools/query/describe-table.js.map +1 -0
  110. package/dist/tools/query/query-sql.d.ts +10 -0
  111. package/dist/tools/query/query-sql.d.ts.map +1 -0
  112. package/dist/tools/query/query-sql.js +10 -0
  113. package/dist/tools/query/query-sql.js.map +1 -0
  114. package/dist/tools/query/search-hybrid.d.ts +12 -0
  115. package/dist/tools/query/search-hybrid.d.ts.map +1 -0
  116. package/dist/tools/query/search-hybrid.js +12 -0
  117. package/dist/tools/query/search-hybrid.js.map +1 -0
  118. package/dist/tools/query/search-vector.d.ts +12 -0
  119. package/dist/tools/query/search-vector.d.ts.map +1 -0
  120. package/dist/tools/query/search-vector.js +12 -0
  121. package/dist/tools/query/search-vector.js.map +1 -0
  122. package/dist/tools/segment/describe-segment.d.ts +9 -0
  123. package/dist/tools/segment/describe-segment.d.ts.map +1 -0
  124. package/dist/tools/segment/describe-segment.js +10 -0
  125. package/dist/tools/segment/describe-segment.js.map +1 -0
  126. package/dist/tools/segment/list-segments.d.ts +8 -0
  127. package/dist/tools/segment/list-segments.d.ts.map +1 -0
  128. package/dist/tools/segment/list-segments.js +10 -0
  129. package/dist/tools/segment/list-segments.js.map +1 -0
  130. package/dist/tools/segment/publish-segment.d.ts +10 -0
  131. package/dist/tools/segment/publish-segment.d.ts.map +1 -0
  132. package/dist/tools/segment/publish-segment.js +14 -0
  133. package/dist/tools/segment/publish-segment.js.map +1 -0
  134. package/dist/tools/smart/resolve-field-names.d.ts +10 -0
  135. package/dist/tools/smart/resolve-field-names.d.ts.map +1 -0
  136. package/dist/tools/smart/resolve-field-names.js +18 -0
  137. package/dist/tools/smart/resolve-field-names.js.map +1 -0
  138. package/dist/tools/stream/create-data-stream.d.ts +10 -0
  139. package/dist/tools/stream/create-data-stream.d.ts.map +1 -0
  140. package/dist/tools/stream/create-data-stream.js +14 -0
  141. package/dist/tools/stream/create-data-stream.js.map +1 -0
  142. package/dist/tools/stream/describe-data-stream.d.ts +9 -0
  143. package/dist/tools/stream/describe-data-stream.d.ts.map +1 -0
  144. package/dist/tools/stream/describe-data-stream.js +10 -0
  145. package/dist/tools/stream/describe-data-stream.js.map +1 -0
  146. package/dist/tools/stream/list-data-streams.d.ts +8 -0
  147. package/dist/tools/stream/list-data-streams.d.ts.map +1 -0
  148. package/dist/tools/stream/list-data-streams.js +10 -0
  149. package/dist/tools/stream/list-data-streams.js.map +1 -0
  150. package/dist/tools/transform/get-transform-status.d.ts +9 -0
  151. package/dist/tools/transform/get-transform-status.d.ts.map +1 -0
  152. package/dist/tools/transform/get-transform-status.js +10 -0
  153. package/dist/tools/transform/get-transform-status.js.map +1 -0
  154. package/dist/tools/transform/list-transforms.d.ts +8 -0
  155. package/dist/tools/transform/list-transforms.d.ts.map +1 -0
  156. package/dist/tools/transform/list-transforms.js +10 -0
  157. package/dist/tools/transform/list-transforms.js.map +1 -0
  158. package/dist/tools/transform/run-transform.d.ts +10 -0
  159. package/dist/tools/transform/run-transform.d.ts.map +1 -0
  160. package/dist/tools/transform/run-transform.js +14 -0
  161. package/dist/tools/transform/run-transform.js.map +1 -0
  162. package/dist/util/errors.d.ts +2 -0
  163. package/dist/util/errors.d.ts.map +1 -0
  164. package/dist/util/errors.js +40 -0
  165. package/dist/util/errors.js.map +1 -0
  166. package/dist/util/http.d.ts +24 -0
  167. package/dist/util/http.d.ts.map +1 -0
  168. package/dist/util/http.js +104 -0
  169. package/dist/util/http.js.map +1 -0
  170. package/dist/util/unwrap.d.ts +12 -0
  171. package/dist/util/unwrap.d.ts.map +1 -0
  172. package/dist/util/unwrap.js +51 -0
  173. package/dist/util/unwrap.js.map +1 -0
  174. 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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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export declare function correctDmoFieldType(dloType: string): string;
2
+ export declare function cleanDmoFieldName(dloFieldName: string): string;
3
+ //# sourceMappingURL=type-mapper.d.ts.map
@@ -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"}