@peernova/cuneiform-sf 1.0.2 → 1.0.4-beta.8

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 (494) hide show
  1. package/LICENSE +81 -30
  2. package/README.md +59 -95
  3. package/lib/adapters/connection-facade.d.ts +458 -0
  4. package/lib/adapters/connection-facade.js +379 -0
  5. package/lib/adapters/connection-facade.js.map +1 -0
  6. package/lib/adapters/errors.d.ts +547 -0
  7. package/lib/adapters/errors.js +937 -0
  8. package/lib/adapters/errors.js.map +1 -0
  9. package/lib/adapters/index.d.ts +33 -0
  10. package/lib/adapters/index.js +50 -0
  11. package/lib/adapters/index.js.map +1 -0
  12. package/lib/adapters/lifecycle.d.ts +119 -0
  13. package/lib/adapters/lifecycle.js +94 -0
  14. package/lib/adapters/lifecycle.js.map +1 -0
  15. package/lib/adapters/rest/cache.d.ts +69 -0
  16. package/lib/adapters/rest/cache.js +133 -0
  17. package/lib/adapters/rest/cache.js.map +1 -0
  18. package/lib/adapters/rest/index.d.ts +11 -0
  19. package/lib/adapters/rest/index.js +18 -0
  20. package/lib/adapters/rest/index.js.map +1 -0
  21. package/lib/adapters/rest/profiling-rest-client.d.ts +137 -0
  22. package/lib/adapters/rest/profiling-rest-client.js +115 -0
  23. package/lib/adapters/rest/profiling-rest-client.js.map +1 -0
  24. package/lib/adapters/rest/rest-api-adapter.d.ts +389 -0
  25. package/lib/adapters/rest/rest-api-adapter.js +747 -0
  26. package/lib/adapters/rest/rest-api-adapter.js.map +1 -0
  27. package/lib/adapters/rest/types.d.ts +34 -0
  28. package/lib/adapters/rest/types.js +9 -0
  29. package/lib/adapters/rest/types.js.map +1 -0
  30. package/lib/adapters/retry.d.ts +91 -0
  31. package/lib/adapters/retry.js +215 -0
  32. package/lib/adapters/retry.js.map +1 -0
  33. package/lib/adapters/soql/cuneiform-query-builder.d.ts +391 -0
  34. package/lib/adapters/soql/cuneiform-query-builder.js +559 -0
  35. package/lib/adapters/soql/cuneiform-query-builder.js.map +1 -0
  36. package/lib/adapters/soql/index.d.ts +13 -0
  37. package/lib/adapters/soql/index.js +21 -0
  38. package/lib/adapters/soql/index.js.map +1 -0
  39. package/lib/adapters/soql/soql-query-adapter.d.ts +141 -0
  40. package/lib/adapters/soql/soql-query-adapter.js +259 -0
  41. package/lib/adapters/soql/soql-query-adapter.js.map +1 -0
  42. package/lib/adapters/soql/types.d.ts +37 -0
  43. package/lib/adapters/soql/types.js +19 -0
  44. package/lib/adapters/soql/types.js.map +1 -0
  45. package/lib/adapters/testing/index.d.ts +37 -0
  46. package/lib/adapters/testing/index.js +20 -0
  47. package/lib/adapters/testing/index.js.map +1 -0
  48. package/lib/adapters/testing/mock-connection.d.ts +77 -0
  49. package/lib/adapters/testing/mock-connection.js +207 -0
  50. package/lib/adapters/testing/mock-connection.js.map +1 -0
  51. package/lib/adapters/testing/mock-logger.d.ts +29 -0
  52. package/lib/adapters/testing/mock-logger.js +57 -0
  53. package/lib/adapters/testing/mock-logger.js.map +1 -0
  54. package/lib/adapters/testing/mock-mcp-adapters.d.ts +32 -0
  55. package/lib/adapters/testing/mock-mcp-adapters.js +52 -0
  56. package/lib/adapters/testing/mock-mcp-adapters.js.map +1 -0
  57. package/lib/adapters/testing/mock-oclif-config.d.ts +22 -0
  58. package/lib/adapters/testing/mock-oclif-config.js +90 -0
  59. package/lib/adapters/testing/mock-oclif-config.js.map +1 -0
  60. package/lib/adapters/testing/mock-rest-adapter.d.ts +26 -0
  61. package/lib/adapters/testing/mock-rest-adapter.js +243 -0
  62. package/lib/adapters/testing/mock-rest-adapter.js.map +1 -0
  63. package/lib/adapters/testing/mock-salesforce-connection.d.ts +40 -0
  64. package/lib/adapters/testing/mock-salesforce-connection.js +61 -0
  65. package/lib/adapters/testing/mock-salesforce-connection.js.map +1 -0
  66. package/lib/adapters/testing/mock-soql-adapter.d.ts +30 -0
  67. package/lib/adapters/testing/mock-soql-adapter.js +120 -0
  68. package/lib/adapters/testing/mock-soql-adapter.js.map +1 -0
  69. package/lib/adapters/testing/mock-tooling-adapter.d.ts +24 -0
  70. package/lib/adapters/testing/mock-tooling-adapter.js +163 -0
  71. package/lib/adapters/testing/mock-tooling-adapter.js.map +1 -0
  72. package/lib/adapters/testing/stub-connection.d.ts +93 -0
  73. package/lib/adapters/testing/stub-connection.js +97 -0
  74. package/lib/adapters/testing/stub-connection.js.map +1 -0
  75. package/lib/adapters/testing/stub-rest-adapter.d.ts +52 -0
  76. package/lib/adapters/testing/stub-rest-adapter.js +58 -0
  77. package/lib/adapters/testing/stub-rest-adapter.js.map +1 -0
  78. package/lib/adapters/testing/stub-soql-adapter.d.ts +56 -0
  79. package/lib/adapters/testing/stub-soql-adapter.js +50 -0
  80. package/lib/adapters/testing/stub-soql-adapter.js.map +1 -0
  81. package/lib/adapters/testing/types.d.ts +71 -0
  82. package/lib/adapters/testing/types.js +9 -0
  83. package/lib/adapters/testing/types.js.map +1 -0
  84. package/lib/adapters/tooling/index.d.ts +10 -0
  85. package/lib/adapters/tooling/index.js +17 -0
  86. package/lib/adapters/tooling/index.js.map +1 -0
  87. package/lib/adapters/tooling/tooling-api-adapter.d.ts +157 -0
  88. package/lib/adapters/tooling/tooling-api-adapter.js +339 -0
  89. package/lib/adapters/tooling/tooling-api-adapter.js.map +1 -0
  90. package/lib/adapters/tooling/types.d.ts +81 -0
  91. package/lib/adapters/tooling/types.js +9 -0
  92. package/lib/adapters/tooling/types.js.map +1 -0
  93. package/lib/adapters/types.d.ts +112 -0
  94. package/lib/adapters/types.js +169 -0
  95. package/lib/adapters/types.js.map +1 -0
  96. package/lib/base/cuneiform-command.d.ts +152 -0
  97. package/lib/base/cuneiform-command.js +243 -0
  98. package/lib/base/cuneiform-command.js.map +1 -0
  99. package/lib/commands/cuneiform/compatibility/check.d.ts +43 -0
  100. package/lib/commands/cuneiform/compatibility/check.js +114 -0
  101. package/lib/commands/cuneiform/compatibility/check.js.map +1 -0
  102. package/lib/commands/cuneiform/definition/create.d.ts +119 -0
  103. package/lib/commands/cuneiform/definition/create.js +693 -0
  104. package/lib/commands/cuneiform/definition/create.js.map +1 -0
  105. package/lib/commands/cuneiform/definition/export.d.ts +57 -0
  106. package/lib/commands/cuneiform/definition/export.js +133 -0
  107. package/lib/commands/cuneiform/definition/export.js.map +1 -0
  108. package/lib/commands/cuneiform/definition/get.d.ts +86 -0
  109. package/lib/commands/cuneiform/definition/get.js +270 -0
  110. package/lib/commands/cuneiform/definition/get.js.map +1 -0
  111. package/lib/commands/cuneiform/definition/import.d.ts +54 -0
  112. package/lib/commands/cuneiform/definition/import.js +118 -0
  113. package/lib/commands/cuneiform/definition/import.js.map +1 -0
  114. package/lib/commands/cuneiform/definition/list.d.ts +110 -0
  115. package/lib/commands/cuneiform/definition/list.js +344 -0
  116. package/lib/commands/cuneiform/definition/list.js.map +1 -0
  117. package/lib/commands/cuneiform/definition/purge.d.ts +105 -0
  118. package/lib/commands/cuneiform/definition/purge.js +533 -0
  119. package/lib/commands/cuneiform/definition/purge.js.map +1 -0
  120. package/lib/commands/cuneiform/definition/update.d.ts +58 -0
  121. package/lib/commands/cuneiform/definition/update.js +206 -0
  122. package/lib/commands/cuneiform/definition/update.js.map +1 -0
  123. package/lib/commands/cuneiform/mcp/serve.d.ts +56 -0
  124. package/lib/commands/cuneiform/mcp/serve.js +109 -0
  125. package/lib/commands/cuneiform/mcp/serve.js.map +1 -0
  126. package/lib/commands/cuneiform/object/describe.d.ts +61 -0
  127. package/lib/commands/cuneiform/object/describe.js +461 -0
  128. package/lib/commands/cuneiform/object/describe.js.map +1 -0
  129. package/lib/commands/cuneiform/object/list.d.ts +111 -0
  130. package/lib/commands/cuneiform/object/list.js +239 -0
  131. package/lib/commands/cuneiform/object/list.js.map +1 -0
  132. package/lib/commands/cuneiform/org/details.d.ts +99 -0
  133. package/lib/commands/cuneiform/org/details.js +521 -0
  134. package/lib/commands/cuneiform/org/details.js.map +1 -0
  135. package/lib/commands/cuneiform/org/reset.d.ts +46 -0
  136. package/lib/commands/cuneiform/org/reset.js +135 -0
  137. package/lib/commands/cuneiform/org/reset.js.map +1 -0
  138. package/lib/commands/cuneiform/profile/request/cancel.d.ts +59 -0
  139. package/lib/commands/cuneiform/profile/request/cancel.js +202 -0
  140. package/lib/commands/cuneiform/profile/request/cancel.js.map +1 -0
  141. package/lib/commands/cuneiform/profile/request/delete.d.ts +59 -0
  142. package/lib/commands/cuneiform/profile/request/delete.js +223 -0
  143. package/lib/commands/cuneiform/profile/request/delete.js.map +1 -0
  144. package/lib/commands/cuneiform/profile/request/list.d.ts +35 -0
  145. package/lib/commands/cuneiform/profile/request/list.js +102 -0
  146. package/lib/commands/cuneiform/profile/request/list.js.map +1 -0
  147. package/lib/commands/cuneiform/profile.d.ts +90 -0
  148. package/lib/commands/cuneiform/profile.js +322 -0
  149. package/lib/commands/cuneiform/profile.js.map +1 -0
  150. package/lib/commands/cuneiform/summary/purge.d.ts +77 -0
  151. package/lib/commands/cuneiform/summary/purge.js +429 -0
  152. package/lib/commands/cuneiform/summary/purge.js.map +1 -0
  153. package/lib/commands/cuneiform/summary/reprofile.d.ts +60 -0
  154. package/lib/commands/cuneiform/summary/reprofile.js +236 -0
  155. package/lib/commands/cuneiform/summary/reprofile.js.map +1 -0
  156. package/lib/commands/cuneiform/summary/stop.d.ts +59 -0
  157. package/lib/commands/cuneiform/summary/stop.js +234 -0
  158. package/lib/commands/cuneiform/summary/stop.js.map +1 -0
  159. package/lib/commands/cuneiform/user/details.d.ts +73 -0
  160. package/lib/commands/cuneiform/user/details.js +391 -0
  161. package/lib/commands/cuneiform/user/details.js.map +1 -0
  162. package/lib/constants/index.d.ts +8 -0
  163. package/lib/constants/index.js +16 -0
  164. package/lib/constants/index.js.map +1 -0
  165. package/lib/constants/namespace-constants.d.ts +91 -0
  166. package/lib/constants/namespace-constants.js +211 -0
  167. package/lib/constants/namespace-constants.js.map +1 -0
  168. package/lib/debug/command-debug-proxy.d.ts +101 -0
  169. package/lib/debug/command-debug-proxy.js +171 -0
  170. package/lib/debug/command-debug-proxy.js.map +1 -0
  171. package/lib/debug/debug-logger.d.ts +85 -0
  172. package/lib/debug/debug-logger.js +133 -0
  173. package/lib/debug/debug-logger.js.map +1 -0
  174. package/lib/debug/index.d.ts +12 -0
  175. package/lib/debug/index.js +20 -0
  176. package/lib/debug/index.js.map +1 -0
  177. package/lib/debug/service-debug-proxy.d.ts +30 -0
  178. package/lib/debug/service-debug-proxy.js +102 -0
  179. package/lib/debug/service-debug-proxy.js.map +1 -0
  180. package/lib/hooks/prerun.d.ts +25 -0
  181. package/lib/hooks/prerun.js +47 -0
  182. package/lib/hooks/prerun.js.map +1 -0
  183. package/lib/mcp/config/mcp-config.d.ts +55 -0
  184. package/lib/mcp/config/mcp-config.js +51 -0
  185. package/lib/mcp/config/mcp-config.js.map +1 -0
  186. package/lib/mcp/config/pagination.d.ts +96 -0
  187. package/lib/mcp/config/pagination.js +108 -0
  188. package/lib/mcp/config/pagination.js.map +1 -0
  189. package/lib/mcp/config/system-prompts.d.ts +18 -0
  190. package/lib/mcp/config/system-prompts.js +92 -0
  191. package/lib/mcp/config/system-prompts.js.map +1 -0
  192. package/lib/mcp/errors.d.ts +23 -0
  193. package/lib/mcp/errors.js +27 -0
  194. package/lib/mcp/errors.js.map +1 -0
  195. package/lib/mcp/schemas/input-schemas.d.ts +327 -0
  196. package/lib/mcp/schemas/input-schemas.js +302 -0
  197. package/lib/mcp/schemas/input-schemas.js.map +1 -0
  198. package/lib/mcp/server.d.ts +40 -0
  199. package/lib/mcp/server.js +316 -0
  200. package/lib/mcp/server.js.map +1 -0
  201. package/lib/mcp/tools/contactpoint-tools.d.ts +14 -0
  202. package/lib/mcp/tools/contactpoint-tools.js +34 -0
  203. package/lib/mcp/tools/contactpoint-tools.js.map +1 -0
  204. package/lib/mcp/tools/definition-io-tools.d.ts +19 -0
  205. package/lib/mcp/tools/definition-io-tools.js +152 -0
  206. package/lib/mcp/tools/definition-io-tools.js.map +1 -0
  207. package/lib/mcp/tools/definition-tools.d.ts +51 -0
  208. package/lib/mcp/tools/definition-tools.js +199 -0
  209. package/lib/mcp/tools/definition-tools.js.map +1 -0
  210. package/lib/mcp/tools/index.d.ts +37 -0
  211. package/lib/mcp/tools/index.js +88 -0
  212. package/lib/mcp/tools/index.js.map +1 -0
  213. package/lib/mcp/tools/object-tools.d.ts +22 -0
  214. package/lib/mcp/tools/object-tools.js +306 -0
  215. package/lib/mcp/tools/object-tools.js.map +1 -0
  216. package/lib/mcp/tools/org-tools.d.ts +14 -0
  217. package/lib/mcp/tools/org-tools.js +177 -0
  218. package/lib/mcp/tools/org-tools.js.map +1 -0
  219. package/lib/mcp/tools/profile-tools.d.ts +59 -0
  220. package/lib/mcp/tools/profile-tools.js +213 -0
  221. package/lib/mcp/tools/profile-tools.js.map +1 -0
  222. package/lib/mcp/tools/summary-tools.d.ts +14 -0
  223. package/lib/mcp/tools/summary-tools.js +38 -0
  224. package/lib/mcp/tools/summary-tools.js.map +1 -0
  225. package/lib/mcp/tools/tool-factory.d.ts +63 -0
  226. package/lib/mcp/tools/tool-factory.js +146 -0
  227. package/lib/mcp/tools/tool-factory.js.map +1 -0
  228. package/lib/mcp/tools/user-tools.d.ts +25 -0
  229. package/lib/mcp/tools/user-tools.js +167 -0
  230. package/lib/mcp/tools/user-tools.js.map +1 -0
  231. package/lib/models/date-literal.d.ts +211 -0
  232. package/lib/models/date-literal.js +615 -0
  233. package/lib/models/date-literal.js.map +1 -0
  234. package/lib/models/object-describe-types.d.ts +173 -0
  235. package/lib/models/object-describe-types.js +9 -0
  236. package/lib/models/object-describe-types.js.map +1 -0
  237. package/lib/models/profile-request-types.d.ts +118 -0
  238. package/lib/models/profile-request-types.js +23 -0
  239. package/lib/models/profile-request-types.js.map +1 -0
  240. package/lib/models/profiling-execution-types.d.ts +154 -0
  241. package/lib/models/profiling-execution-types.js +14 -0
  242. package/lib/models/profiling-execution-types.js.map +1 -0
  243. package/lib/models/service-result.d.ts +114 -0
  244. package/lib/models/service-result.js +81 -0
  245. package/lib/models/service-result.js.map +1 -0
  246. package/lib/models/sfdmu-types.d.ts +53 -0
  247. package/lib/models/sfdmu-types.js +23 -0
  248. package/lib/models/sfdmu-types.js.map +1 -0
  249. package/lib/models/status-types.d.ts +38 -0
  250. package/lib/models/status-types.js +12 -0
  251. package/lib/models/status-types.js.map +1 -0
  252. package/lib/models/summary-bulk-types.d.ts +61 -0
  253. package/lib/models/summary-bulk-types.js +23 -0
  254. package/lib/models/summary-bulk-types.js.map +1 -0
  255. package/lib/models/user-details-types.d.ts +163 -0
  256. package/lib/models/user-details-types.js +9 -0
  257. package/lib/models/user-details-types.js.map +1 -0
  258. package/lib/models/year-range.d.ts +78 -0
  259. package/lib/models/year-range.js +153 -0
  260. package/lib/models/year-range.js.map +1 -0
  261. package/lib/operations/CompatibilityCheckOperation.d.ts +62 -0
  262. package/lib/operations/CompatibilityCheckOperation.js +102 -0
  263. package/lib/operations/CompatibilityCheckOperation.js.map +1 -0
  264. package/lib/operations/DefinitionCreateOperation.d.ts +411 -0
  265. package/lib/operations/DefinitionCreateOperation.js +1121 -0
  266. package/lib/operations/DefinitionCreateOperation.js.map +1 -0
  267. package/lib/operations/DefinitionExportOperation.d.ts +155 -0
  268. package/lib/operations/DefinitionExportOperation.js +281 -0
  269. package/lib/operations/DefinitionExportOperation.js.map +1 -0
  270. package/lib/operations/DefinitionImportOperation.d.ts +144 -0
  271. package/lib/operations/DefinitionImportOperation.js +357 -0
  272. package/lib/operations/DefinitionImportOperation.js.map +1 -0
  273. package/lib/operations/DefinitionListOperation.d.ts +66 -0
  274. package/lib/operations/DefinitionListOperation.js +108 -0
  275. package/lib/operations/DefinitionListOperation.js.map +1 -0
  276. package/lib/operations/DefinitionPurgeOperation.d.ts +199 -0
  277. package/lib/operations/DefinitionPurgeOperation.js +465 -0
  278. package/lib/operations/DefinitionPurgeOperation.js.map +1 -0
  279. package/lib/operations/DefinitionUpdateOperation.d.ts +78 -0
  280. package/lib/operations/DefinitionUpdateOperation.js +142 -0
  281. package/lib/operations/DefinitionUpdateOperation.js.map +1 -0
  282. package/lib/operations/OrgDetailsOperation.d.ts +253 -0
  283. package/lib/operations/OrgDetailsOperation.js +456 -0
  284. package/lib/operations/OrgDetailsOperation.js.map +1 -0
  285. package/lib/operations/OrgResetOperation.d.ts +114 -0
  286. package/lib/operations/OrgResetOperation.js +209 -0
  287. package/lib/operations/OrgResetOperation.js.map +1 -0
  288. package/lib/operations/ProfileOperation.d.ts +187 -0
  289. package/lib/operations/ProfileOperation.js +373 -0
  290. package/lib/operations/ProfileOperation.js.map +1 -0
  291. package/lib/operations/ProfileRequestCancelOperation.d.ts +59 -0
  292. package/lib/operations/ProfileRequestCancelOperation.js +137 -0
  293. package/lib/operations/ProfileRequestCancelOperation.js.map +1 -0
  294. package/lib/operations/ProfileRequestDeleteOperation.d.ts +64 -0
  295. package/lib/operations/ProfileRequestDeleteOperation.js +134 -0
  296. package/lib/operations/ProfileRequestDeleteOperation.js.map +1 -0
  297. package/lib/operations/ProfileRequestListOperation.d.ts +39 -0
  298. package/lib/operations/ProfileRequestListOperation.js +61 -0
  299. package/lib/operations/ProfileRequestListOperation.js.map +1 -0
  300. package/lib/operations/SummaryPurgeOperation.d.ts +134 -0
  301. package/lib/operations/SummaryPurgeOperation.js +257 -0
  302. package/lib/operations/SummaryPurgeOperation.js.map +1 -0
  303. package/lib/operations/SummaryReprofileOperation.d.ts +88 -0
  304. package/lib/operations/SummaryReprofileOperation.js +174 -0
  305. package/lib/operations/SummaryReprofileOperation.js.map +1 -0
  306. package/lib/operations/SummaryStopOperation.d.ts +87 -0
  307. package/lib/operations/SummaryStopOperation.js +175 -0
  308. package/lib/operations/SummaryStopOperation.js.map +1 -0
  309. package/lib/services/BulkExecutionService.d.ts +120 -0
  310. package/lib/services/BulkExecutionService.js +535 -0
  311. package/lib/services/BulkExecutionService.js.map +1 -0
  312. package/lib/services/CompatibilityService.d.ts +81 -0
  313. package/lib/services/CompatibilityService.js +118 -0
  314. package/lib/services/CompatibilityService.js.map +1 -0
  315. package/lib/services/ConfigureMode.d.ts +85 -0
  316. package/lib/services/ConfigureMode.js +390 -0
  317. package/lib/services/ConfigureMode.js.map +1 -0
  318. package/lib/services/ContactPointService.d.ts +111 -0
  319. package/lib/services/ContactPointService.js +286 -0
  320. package/lib/services/ContactPointService.js.map +1 -0
  321. package/lib/services/DataAvailabilityService.d.ts +81 -0
  322. package/lib/services/DataAvailabilityService.js +128 -0
  323. package/lib/services/DataAvailabilityService.js.map +1 -0
  324. package/lib/services/DefinitionFieldGenerationService.d.ts +309 -0
  325. package/lib/services/DefinitionFieldGenerationService.js +795 -0
  326. package/lib/services/DefinitionFieldGenerationService.js.map +1 -0
  327. package/lib/services/DefinitionQueryBuilder.d.ts +59 -0
  328. package/lib/services/DefinitionQueryBuilder.js +234 -0
  329. package/lib/services/DefinitionQueryBuilder.js.map +1 -0
  330. package/lib/services/ObjectDescribeService.d.ts +436 -0
  331. package/lib/services/ObjectDescribeService.js +869 -0
  332. package/lib/services/ObjectDescribeService.js.map +1 -0
  333. package/lib/services/ObjectFilteringService.d.ts +400 -0
  334. package/lib/services/ObjectFilteringService.js +878 -0
  335. package/lib/services/ObjectFilteringService.js.map +1 -0
  336. package/lib/services/ObjectListCommandService.d.ts +429 -0
  337. package/lib/services/ObjectListCommandService.js +873 -0
  338. package/lib/services/ObjectListCommandService.js.map +1 -0
  339. package/lib/services/ObjectListService.d.ts +201 -0
  340. package/lib/services/ObjectListService.js +345 -0
  341. package/lib/services/ObjectListService.js.map +1 -0
  342. package/lib/services/OrgInfoService.d.ts +485 -0
  343. package/lib/services/OrgInfoService.js +1122 -0
  344. package/lib/services/OrgInfoService.js.map +1 -0
  345. package/lib/services/PollingService.d.ts +105 -0
  346. package/lib/services/PollingService.js +117 -0
  347. package/lib/services/PollingService.js.map +1 -0
  348. package/lib/services/ProfileRequestService.d.ts +186 -0
  349. package/lib/services/ProfileRequestService.js +555 -0
  350. package/lib/services/ProfileRequestService.js.map +1 -0
  351. package/lib/services/ProfilingDefinitionService.d.ts +535 -0
  352. package/lib/services/ProfilingDefinitionService.js +981 -0
  353. package/lib/services/ProfilingDefinitionService.js.map +1 -0
  354. package/lib/services/ProfilingExecutionService.d.ts +122 -0
  355. package/lib/services/ProfilingExecutionService.js +320 -0
  356. package/lib/services/ProfilingExecutionService.js.map +1 -0
  357. package/lib/services/ProfilingSummaryService.d.ts +292 -0
  358. package/lib/services/ProfilingSummaryService.js +685 -0
  359. package/lib/services/ProfilingSummaryService.js.map +1 -0
  360. package/lib/services/RecordTypeService.d.ts +129 -0
  361. package/lib/services/RecordTypeService.js +284 -0
  362. package/lib/services/RecordTypeService.js.map +1 -0
  363. package/lib/services/SFDMUService.d.ts +133 -0
  364. package/lib/services/SFDMUService.js +295 -0
  365. package/lib/services/SFDMUService.js.map +1 -0
  366. package/lib/services/TabDetectionService.d.ts +105 -0
  367. package/lib/services/TabDetectionService.js +206 -0
  368. package/lib/services/TabDetectionService.js.map +1 -0
  369. package/lib/services/UnconfigureMode.d.ts +74 -0
  370. package/lib/services/UnconfigureMode.js +378 -0
  371. package/lib/services/UnconfigureMode.js.map +1 -0
  372. package/lib/services/UserConfigurationService.d.ts +155 -0
  373. package/lib/services/UserConfigurationService.js +573 -0
  374. package/lib/services/UserConfigurationService.js.map +1 -0
  375. package/lib/services/UserConfigurationTypes.d.ts +181 -0
  376. package/lib/services/UserConfigurationTypes.js +14 -0
  377. package/lib/services/UserConfigurationTypes.js.map +1 -0
  378. package/lib/services/UserReadinessService.d.ts +330 -0
  379. package/lib/services/UserReadinessService.js +831 -0
  380. package/lib/services/UserReadinessService.js.map +1 -0
  381. package/lib/services/constants.d.ts +53 -0
  382. package/lib/services/constants.js +71 -0
  383. package/lib/services/constants.js.map +1 -0
  384. package/lib/services/namespace-constants.d.ts +1 -0
  385. package/lib/services/namespace-constants.js +11 -0
  386. package/lib/services/namespace-constants.js.map +1 -0
  387. package/lib/services/validation.d.ts +47 -0
  388. package/lib/services/validation.js +119 -0
  389. package/lib/services/validation.js.map +1 -0
  390. package/lib/utils/batch-processor.d.ts +13 -0
  391. package/lib/utils/batch-processor.js +39 -0
  392. package/lib/utils/batch-processor.js.map +1 -0
  393. package/lib/utils/formatting/availability-grid.d.ts +81 -0
  394. package/lib/utils/formatting/availability-grid.js +94 -0
  395. package/lib/utils/formatting/availability-grid.js.map +1 -0
  396. package/lib/utils/formatting/business-process-grid.d.ts +51 -0
  397. package/lib/utils/formatting/business-process-grid.js +58 -0
  398. package/lib/utils/formatting/business-process-grid.js.map +1 -0
  399. package/lib/utils/formatting/command-display.d.ts +154 -0
  400. package/lib/utils/formatting/command-display.js +154 -0
  401. package/lib/utils/formatting/command-display.js.map +1 -0
  402. package/lib/utils/formatting/definition-create-display.d.ts +118 -0
  403. package/lib/utils/formatting/definition-create-display.js +231 -0
  404. package/lib/utils/formatting/definition-create-display.js.map +1 -0
  405. package/lib/utils/formatting/empty-states.d.ts +35 -0
  406. package/lib/utils/formatting/empty-states.js +70 -0
  407. package/lib/utils/formatting/empty-states.js.map +1 -0
  408. package/lib/utils/formatting/errors.d.ts +33 -0
  409. package/lib/utils/formatting/errors.js +72 -0
  410. package/lib/utils/formatting/errors.js.map +1 -0
  411. package/lib/utils/formatting/field-types.d.ts +32 -0
  412. package/lib/utils/formatting/field-types.js +88 -0
  413. package/lib/utils/formatting/field-types.js.map +1 -0
  414. package/lib/utils/formatting/index.d.ts +29 -0
  415. package/lib/utils/formatting/index.js +28 -0
  416. package/lib/utils/formatting/index.js.map +1 -0
  417. package/lib/utils/formatting/indicators.d.ts +113 -0
  418. package/lib/utils/formatting/indicators.js +161 -0
  419. package/lib/utils/formatting/indicators.js.map +1 -0
  420. package/lib/utils/formatting/loading-messages.d.ts +37 -0
  421. package/lib/utils/formatting/loading-messages.js +50 -0
  422. package/lib/utils/formatting/loading-messages.js.map +1 -0
  423. package/lib/utils/formatting/namespace-display.d.ts +31 -0
  424. package/lib/utils/formatting/namespace-display.js +64 -0
  425. package/lib/utils/formatting/namespace-display.js.map +1 -0
  426. package/lib/utils/formatting/numbers.d.ts +73 -0
  427. package/lib/utils/formatting/numbers.js +187 -0
  428. package/lib/utils/formatting/numbers.js.map +1 -0
  429. package/lib/utils/formatting/object-describe-display.d.ts +114 -0
  430. package/lib/utils/formatting/object-describe-display.js +440 -0
  431. package/lib/utils/formatting/object-describe-display.js.map +1 -0
  432. package/lib/utils/formatting/object-list-display.d.ts +213 -0
  433. package/lib/utils/formatting/object-list-display.js +672 -0
  434. package/lib/utils/formatting/object-list-display.js.map +1 -0
  435. package/lib/utils/formatting/org-identity.d.ts +15 -0
  436. package/lib/utils/formatting/org-identity.js +28 -0
  437. package/lib/utils/formatting/org-identity.js.map +1 -0
  438. package/lib/utils/formatting/record-age-grid.d.ts +41 -0
  439. package/lib/utils/formatting/record-age-grid.js +56 -0
  440. package/lib/utils/formatting/record-age-grid.js.map +1 -0
  441. package/lib/utils/formatting/sections.d.ts +108 -0
  442. package/lib/utils/formatting/sections.js +150 -0
  443. package/lib/utils/formatting/sections.js.map +1 -0
  444. package/lib/utils/formatting/tables.d.ts +90 -0
  445. package/lib/utils/formatting/tables.js +113 -0
  446. package/lib/utils/formatting/tables.js.map +1 -0
  447. package/lib/utils/formatting/user-details-display.d.ts +101 -0
  448. package/lib/utils/formatting/user-details-display.js +425 -0
  449. package/lib/utils/formatting/user-details-display.js.map +1 -0
  450. package/lib/utils/pagination/index.d.ts +11 -0
  451. package/lib/utils/pagination/index.js +18 -0
  452. package/lib/utils/pagination/index.js.map +1 -0
  453. package/lib/utils/pagination/keypress-reader.d.ts +20 -0
  454. package/lib/utils/pagination/keypress-reader.js +63 -0
  455. package/lib/utils/pagination/keypress-reader.js.map +1 -0
  456. package/lib/utils/pagination/paginate-output.d.ts +48 -0
  457. package/lib/utils/pagination/paginate-output.js +136 -0
  458. package/lib/utils/pagination/paginate-output.js.map +1 -0
  459. package/messages/compatibility.check.md +71 -0
  460. package/messages/cuneiform.access.md +138 -0
  461. package/messages/definition.create.md +511 -0
  462. package/messages/definition.export.md +84 -0
  463. package/messages/definition.get.md +147 -0
  464. package/messages/definition.import.md +65 -0
  465. package/messages/definition.list.md +264 -0
  466. package/messages/definition.purge.md +318 -0
  467. package/messages/definition.update.md +118 -0
  468. package/messages/mcp.serve.md +66 -0
  469. package/messages/object.describe.md +201 -0
  470. package/messages/object.list.md +443 -0
  471. package/messages/org.details.md +386 -0
  472. package/messages/org.reset.md +71 -0
  473. package/messages/profile.md +231 -0
  474. package/messages/profile.request.cancel.md +143 -0
  475. package/messages/profile.request.delete.md +139 -0
  476. package/messages/profile.request.list.md +89 -0
  477. package/messages/summary.purge.md +218 -0
  478. package/messages/summary.reprofile.md +150 -0
  479. package/messages/summary.stop.md +157 -0
  480. package/messages/user.details.md +501 -0
  481. package/oclif.lock +2887 -2149
  482. package/oclif.manifest.json +2813 -31
  483. package/package.json +94 -19
  484. package/lib/commands/cuneiform/about.d.ts +0 -13
  485. package/lib/commands/cuneiform/about.js +0 -26
  486. package/lib/commands/cuneiform/about.js.map +0 -1
  487. package/lib/commands/hello/world.d.ts +0 -14
  488. package/lib/commands/hello/world.js +0 -27
  489. package/lib/commands/hello/world.js.map +0 -1
  490. package/lib/index.d.ts +0 -2
  491. package/lib/index.js +0 -2
  492. package/lib/index.js.map +0 -1
  493. package/messages/cuneiform.about.md +0 -19
  494. package/messages/hello.world.md +0 -29
@@ -0,0 +1,573 @@
1
+ /*
2
+ * Copyright (c) 2026, PeerNova, Inc. All Rights Reserved.
3
+ * PROPRIETARY AND CONFIDENTIAL. Unauthorized copying, modification,
4
+ * or distribution is strictly prohibited. Use is governed by the
5
+ * Master Subscription Agreement (MSA) between PeerNova, Inc. and the
6
+ * licensee. See LICENSE file in the repo root.
7
+ */
8
+ import { CuneiformQueryBuilder } from '../adapters/soql/cuneiform-query-builder.js';
9
+ import { createSuccessResult, createFailureResult } from '../models/service-result.js';
10
+ import { ServiceErrorCodes } from '../adapters/errors.js';
11
+ import { CUNEIFORM_NAMESPACE, CUNEIFORM_NAMESPACE_PREFIX } from './namespace-constants.js';
12
+ import { validateRequiredString, validateNamespace } from './validation.js';
13
+ import { ConfigureMode } from './ConfigureMode.js';
14
+ import { UnconfigureMode } from './UnconfigureMode.js';
15
+ // Re-export all public types and constants so consumers don't need to change imports
16
+ export { CONFIGURABLE_PERMISSION_SETS } from './UserConfigurationTypes.js';
17
+ /**
18
+ * Service for checking and updating user-level Cuneiform configuration.
19
+ *
20
+ * Provides methods to query current configuration profiles and trigger
21
+ * CMT updates via the ISV REST endpoint. Permission set assignment is
22
+ * handled via REST sObject insert.
23
+ *
24
+ * Configure and unconfigure workflows are delegated to {@link ConfigureMode}
25
+ * and {@link UnconfigureMode} respectively.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const service = new UserConfigurationService({
30
+ * soqlAdapter,
31
+ * restApiAdapter,
32
+ * });
33
+ *
34
+ * // Check current config
35
+ * const config = await service.getCurrentConfig(userId);
36
+ * if (config.success && !config.data.apiOnlyProfilingEnabled) {
37
+ * // Enable API-only profiling
38
+ * const result = await service.enableApiOnlyProfiling('Production');
39
+ * if (result.success && result.data.jobId) {
40
+ * // Check deployment status
41
+ * const status = await service.getDeploymentStatus(result.data.jobId);
42
+ * }
43
+ * }
44
+ * ```
45
+ */
46
+ export class UserConfigurationService {
47
+ soqlAdapter;
48
+ restApiAdapter;
49
+ userReadinessService;
50
+ logger;
51
+ /** Configure mode handler (lazy-initialized when userReadinessService is available) */
52
+ configureMode;
53
+ /** Unconfigure mode handler (lazy-initialized when userReadinessService is available) */
54
+ unconfigureMode;
55
+ constructor(config) {
56
+ this.soqlAdapter = config.soqlAdapter;
57
+ this.restApiAdapter = config.restApiAdapter;
58
+ this.userReadinessService = config.userReadinessService;
59
+ this.logger = config.logger;
60
+ // Initialize mode handlers when readiness service is available.
61
+ // Arrow functions are used instead of .bind() so that sinon stubs
62
+ // applied to the service instance are respected at call time.
63
+ if (config.userReadinessService) {
64
+ const deps = {
65
+ soqlAdapter: this.soqlAdapter,
66
+ restApiAdapter: this.restApiAdapter,
67
+ userReadinessService: config.userReadinessService,
68
+ logger: this.logger,
69
+ getPermissionSetId: (name, namespace) => this.getPermissionSetId(name, namespace),
70
+ enableApiOnlyProfiling: (name) => this.enableApiOnlyProfiling(name),
71
+ disableApiOnlyProfiling: (name) => this.disableApiOnlyProfiling(name),
72
+ waitForDeploymentCompletion: (jobId) => this.waitForDeploymentCompletion(jobId),
73
+ };
74
+ this.configureMode = new ConfigureMode(deps);
75
+ this.unconfigureMode = new UnconfigureMode(deps);
76
+ }
77
+ }
78
+ /**
79
+ * Checks if an error message indicates Cuneiform namespace is not found.
80
+ *
81
+ * This typically means the Cuneiform for Salesforce package is not installed in the org.
82
+ */
83
+ static isCuneiformNamespaceNotFoundError(message) {
84
+ const lowerMessage = message.toLowerCase();
85
+ return (lowerMessage.includes('sobject type') &&
86
+ (lowerMessage.includes('not supported') || lowerMessage.includes('invalid')));
87
+ }
88
+ /**
89
+ * Creates an empty UserConfig result for error cases.
90
+ */
91
+ static createEmptyConfig(userId) {
92
+ return {
93
+ userId,
94
+ apiOnlyProfilingEnabled: false,
95
+ };
96
+ }
97
+ /**
98
+ * Retrieves the current Cuneiform configuration for a user.
99
+ *
100
+ * Queries the Active Configuration CMT to get the linked Configuration Profile
101
+ * and its settings. Returns empty config if Cuneiform is not installed.
102
+ *
103
+ * @param userId - The Salesforce user ID (for context, not filtered)
104
+ * @returns ServiceResult containing UserConfig
105
+ */
106
+ async getCurrentConfig(userId) {
107
+ const startTime = Date.now();
108
+ // Validate userId
109
+ const validationError = validateRequiredString(userId, 'User ID');
110
+ if (validationError) {
111
+ const emptyResult = UserConfigurationService.createEmptyConfig(userId);
112
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_USER_ID_REQUIRED, validationError, {
113
+ metadata: { duration: Date.now() - startTime },
114
+ });
115
+ }
116
+ try {
117
+ this.logger?.log(`Getting current config for user: ${userId}`);
118
+ const soql = new CuneiformQueryBuilder()
119
+ .select([
120
+ 'Id',
121
+ 'DeveloperName',
122
+ `${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.Id`,
123
+ `${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.DeveloperName`,
124
+ `${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.Label`,
125
+ `${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.${CUNEIFORM_NAMESPACE_PREFIX}Enable_API_Only_Profiling__c`,
126
+ ])
127
+ .from(`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration__mdt`)
128
+ .where('DeveloperName', '=', 'Active_Configuration')
129
+ .limit(1)
130
+ .toSOQL();
131
+ const result = await this.soqlAdapter.query(soql);
132
+ // Check for namespace not found error
133
+ if (!result.success) {
134
+ if (UserConfigurationService.isCuneiformNamespaceNotFoundError(result.message ?? '')) {
135
+ const emptyResult = UserConfigurationService.createEmptyConfig(userId);
136
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CUNEIFORM_NAMESPACE_NOT_FOUND, 'Cuneiform namespace not found - package may not be installed', { metadata: { duration: Date.now() - startTime } });
137
+ }
138
+ const emptyResult = UserConfigurationService.createEmptyConfig(userId);
139
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, result.message ?? 'Configuration query failed', { metadata: { duration: Date.now() - startTime } });
140
+ }
141
+ // No config record found
142
+ if (result.data.records.length === 0) {
143
+ const duration = Date.now() - startTime;
144
+ const config = UserConfigurationService.createEmptyConfig(userId);
145
+ return createSuccessResult(config, {
146
+ message: 'No active configuration found',
147
+ metadata: { duration },
148
+ });
149
+ }
150
+ const record = result.data.records[0];
151
+ const profile = record[`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r`];
152
+ // Config exists but no profile linked
153
+ if (!profile) {
154
+ const duration = Date.now() - startTime;
155
+ const config = UserConfigurationService.createEmptyConfig(userId);
156
+ return createSuccessResult(config, {
157
+ message: 'Configuration exists but no profile is linked',
158
+ metadata: { duration },
159
+ });
160
+ }
161
+ const config = {
162
+ userId,
163
+ profileDeveloperName: profile.DeveloperName,
164
+ profileLabel: profile.Label,
165
+ apiOnlyProfilingEnabled: profile[`${CUNEIFORM_NAMESPACE_PREFIX}Enable_API_Only_Profiling__c`] ?? false,
166
+ };
167
+ const duration = Date.now() - startTime;
168
+ this.logger?.log(`Config retrieved: profile=${config.profileLabel ?? 'Unknown'}, apiOnly=${config.apiOnlyProfilingEnabled}`);
169
+ return createSuccessResult(config, {
170
+ message: `Active profile: ${config.profileLabel ?? 'Unknown'}`,
171
+ metadata: { duration },
172
+ });
173
+ }
174
+ catch (error) {
175
+ const errorMessage = error instanceof Error ? error.message : String(error);
176
+ this.logger?.log(`Config query failed: ${errorMessage}`);
177
+ // Check for namespace not found in exception
178
+ if (UserConfigurationService.isCuneiformNamespaceNotFoundError(errorMessage)) {
179
+ const emptyResult = UserConfigurationService.createEmptyConfig(userId);
180
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CUNEIFORM_NAMESPACE_NOT_FOUND, 'Cuneiform namespace not found - package may not be installed', { metadata: { duration: Date.now() - startTime } });
181
+ }
182
+ const emptyResult = UserConfigurationService.createEmptyConfig(userId);
183
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, errorMessage, {
184
+ metadata: { duration: Date.now() - startTime },
185
+ });
186
+ }
187
+ }
188
+ /**
189
+ * Enables API-only profiling for a configuration profile.
190
+ *
191
+ * Triggers a CMT configuration update via the ISV REST endpoint.
192
+ * Returns the deployment job ID for status tracking.
193
+ *
194
+ * @param profileDeveloperName - The developer name of the Configuration Profile to update
195
+ * @returns ServiceResult containing DeploymentResult with job ID
196
+ */
197
+ async enableApiOnlyProfiling(profileDeveloperName) {
198
+ return this.deployCmtViaRest(profileDeveloperName, true);
199
+ }
200
+ /**
201
+ * Retrieves the status of a CMT deployment job.
202
+ *
203
+ * Queries the DeployRequest object to check deployment progress.
204
+ *
205
+ * @param jobId - The deployment job ID to check
206
+ * @returns ServiceResult containing DeploymentStatus
207
+ */
208
+ async getDeploymentStatus(jobId) {
209
+ const startTime = Date.now();
210
+ // Validate job ID
211
+ const validationError = validateRequiredString(jobId, 'Job ID');
212
+ if (validationError) {
213
+ const emptyResult = {
214
+ jobId: jobId || '',
215
+ status: 'Unknown',
216
+ isComplete: false,
217
+ errorMessage: validationError,
218
+ };
219
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, validationError, {
220
+ metadata: { duration: Date.now() - startTime },
221
+ });
222
+ }
223
+ try {
224
+ this.logger?.log(`Checking deployment status for job: ${jobId}`);
225
+ // Query DeployRequest via Tooling API (needs special handling)
226
+ // Note: DeployRequest is accessible via regular SOQL from API v54.0+
227
+ const soql = new CuneiformQueryBuilder()
228
+ .select(['Id', 'Status', 'ErrorMessage'])
229
+ .from('DeployRequest')
230
+ .where('Id', '=', jobId)
231
+ .limit(1)
232
+ .toSOQL();
233
+ const result = await this.soqlAdapter.query(soql);
234
+ if (!result.success) {
235
+ const emptyResult = {
236
+ jobId,
237
+ status: 'Unknown',
238
+ isComplete: false,
239
+ errorMessage: result.message ?? 'Status query failed',
240
+ };
241
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_JOB_QUERY_FAILED, result.message ?? 'Deployment status query failed', { metadata: { duration: Date.now() - startTime } });
242
+ }
243
+ // No record found
244
+ if (result.data.records.length === 0) {
245
+ const duration = Date.now() - startTime;
246
+ const status = {
247
+ jobId,
248
+ status: 'Unknown',
249
+ isComplete: false,
250
+ errorMessage: 'Deployment job not found',
251
+ };
252
+ return createSuccessResult(status, {
253
+ message: 'Deployment job not found',
254
+ warnings: ['The job ID may be invalid or the deployment may have been purged'],
255
+ metadata: { duration },
256
+ });
257
+ }
258
+ const record = result.data.records[0];
259
+ const statusMap = {
260
+ Pending: 'Pending',
261
+ InProgress: 'InProgress',
262
+ Succeeded: 'Succeeded',
263
+ Failed: 'Failed',
264
+ Canceled: 'Canceled',
265
+ };
266
+ const status = {
267
+ jobId,
268
+ status: statusMap[record.Status] ?? 'Unknown',
269
+ isComplete: ['Succeeded', 'Failed', 'Canceled'].includes(record.Status),
270
+ errorMessage: record.ErrorMessage,
271
+ };
272
+ const duration = Date.now() - startTime;
273
+ this.logger?.log(`Deployment status: ${status.status}, complete=${status.isComplete}`);
274
+ return createSuccessResult(status, {
275
+ message: `Deployment ${status.status.toLowerCase()}`,
276
+ metadata: { duration },
277
+ });
278
+ }
279
+ catch (error) {
280
+ const errorMessage = error instanceof Error ? error.message : String(error);
281
+ this.logger?.log(`Deployment status query failed: ${errorMessage}`);
282
+ const emptyResult = {
283
+ jobId,
284
+ status: 'Unknown',
285
+ isComplete: false,
286
+ errorMessage,
287
+ };
288
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_JOB_QUERY_FAILED, errorMessage, {
289
+ metadata: { duration: Date.now() - startTime },
290
+ });
291
+ }
292
+ }
293
+ /**
294
+ * Polls for CMT deployment completion with exponential backoff.
295
+ *
296
+ * Waits for a metadata deployment to reach a terminal state (Succeeded, Failed, or Canceled).
297
+ * Uses exponential backoff starting at 1s, capped at 5s, with a maximum total wait of 30s.
298
+ *
299
+ * @param jobId - The deployment job ID to monitor
300
+ * @returns ServiceResult containing the final DeploymentStatus
301
+ */
302
+ async waitForDeploymentCompletion(jobId) {
303
+ const MAX_WAIT_MS = 30_000;
304
+ const INITIAL_DELAY_MS = 1000;
305
+ const MAX_DELAY_MS = 5000;
306
+ const startTime = Date.now();
307
+ let delay = INITIAL_DELAY_MS;
308
+ this.logger?.log(`Waiting for deployment ${jobId} to complete (max ${MAX_WAIT_MS / 1000}s)`);
309
+ /* eslint-disable no-await-in-loop -- polling loop requires sequential waits */
310
+ while (Date.now() - startTime < MAX_WAIT_MS) {
311
+ const statusResult = await this.getDeploymentStatus(jobId);
312
+ if (!statusResult.success) {
313
+ return statusResult;
314
+ }
315
+ if (statusResult.data.isComplete) {
316
+ this.logger?.log(`Deployment ${jobId} completed: ${statusResult.data.status}`);
317
+ return statusResult;
318
+ }
319
+ this.logger?.log(`Deployment ${jobId} status: ${statusResult.data.status}, waiting ${delay}ms`);
320
+ await new Promise((resolve) => {
321
+ setTimeout(resolve, delay);
322
+ });
323
+ delay = Math.min(delay * 2, MAX_DELAY_MS);
324
+ }
325
+ /* eslint-enable no-await-in-loop */
326
+ // Timed out — return last known status
327
+ const finalStatus = await this.getDeploymentStatus(jobId);
328
+ if (finalStatus.success && !finalStatus.data.isComplete) {
329
+ this.logger?.log(`Deployment ${jobId} timed out after ${MAX_WAIT_MS / 1000}s`);
330
+ return createSuccessResult(finalStatus.data, {
331
+ message: `Deployment polling timed out after ${MAX_WAIT_MS / 1000}s`,
332
+ warnings: ['Deployment may still be in progress'],
333
+ metadata: { duration: Date.now() - startTime },
334
+ });
335
+ }
336
+ return finalStatus;
337
+ }
338
+ /**
339
+ * Retrieves the ID of a permission set by name and namespace.
340
+ *
341
+ * Queries the PermissionSet object to find the permission set ID. This is
342
+ * needed before assigning a permission set to a user via PermissionSetAssignment.
343
+ *
344
+ * @param name - The permission set API name (e.g., 'Cuneiform_for_CRM_Global_Profiling_Support')
345
+ * @param namespace - The namespace prefix (e.g., 'pnova')
346
+ * @returns ServiceResult containing the permission set ID or null if not found
347
+ */
348
+ async getPermissionSetId(name, namespace) {
349
+ const startTime = Date.now();
350
+ const emptyResult = null;
351
+ // Validate name
352
+ const nameValidationError = validateRequiredString(name, 'Permission set name');
353
+ if (nameValidationError) {
354
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, nameValidationError, {
355
+ metadata: { duration: Date.now() - startTime },
356
+ });
357
+ }
358
+ // Validate namespace
359
+ const namespaceValidationError = validateNamespace(namespace);
360
+ if (namespaceValidationError) {
361
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, namespaceValidationError, {
362
+ metadata: { duration: Date.now() - startTime },
363
+ });
364
+ }
365
+ try {
366
+ this.logger?.log(`Querying permission set ID: ${namespace}__${name}`);
367
+ // Query PermissionSet by Name and NamespacePrefix
368
+ const soql = new CuneiformQueryBuilder()
369
+ .select(['Id', 'Name', 'NamespacePrefix'])
370
+ .from('PermissionSet')
371
+ .where('Name', '=', name)
372
+ .andWhere('NamespacePrefix', '=', namespace)
373
+ .limit(1)
374
+ .toSOQL();
375
+ const result = await this.soqlAdapter.query(soql);
376
+ if (!result.success) {
377
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, result.message ?? 'Permission set query failed', { metadata: { duration: Date.now() - startTime } });
378
+ }
379
+ // Not found is a valid outcome (return null with success)
380
+ if (result.data.records.length === 0) {
381
+ const duration = Date.now() - startTime;
382
+ this.logger?.log(`Permission set not found: ${namespace}__${name}`);
383
+ return createSuccessResult(null, {
384
+ message: `Permission set not found: ${namespace}__${name}`,
385
+ warnings: [`Permission set '${name}' with namespace '${namespace}' does not exist in this org`],
386
+ metadata: { duration },
387
+ });
388
+ }
389
+ const permissionSetId = result.data.records[0].Id;
390
+ const duration = Date.now() - startTime;
391
+ this.logger?.log(`Permission set found: ${permissionSetId}`);
392
+ return createSuccessResult(permissionSetId, {
393
+ message: `Permission set ID: ${permissionSetId}`,
394
+ metadata: { duration },
395
+ });
396
+ }
397
+ catch (error) {
398
+ const errorMessage = error instanceof Error ? error.message : String(error);
399
+ this.logger?.log(`Permission set query failed: ${errorMessage}`);
400
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, errorMessage, {
401
+ metadata: { duration: Date.now() - startTime },
402
+ });
403
+ }
404
+ }
405
+ /**
406
+ * Orchestrates user configuration for Cuneiform operations.
407
+ *
408
+ * Delegates to {@link ConfigureMode} for the full configure workflow.
409
+ * See ConfigureMode for implementation details.
410
+ *
411
+ * @param userId - The Salesforce user ID to configure
412
+ * @param options - Configuration options
413
+ * @param options.dryRun - If true, reports planned changes without applying them (default: false)
414
+ * @returns ServiceResult containing UserConfigurationResult with actions taken/skipped/failed
415
+ */
416
+ async configure(userId, options) {
417
+ const dependencyError = this.validateConfigureDependencies();
418
+ if (dependencyError) {
419
+ const dryRun = options?.dryRun ?? false;
420
+ return createFailureResult({
421
+ user: { id: userId, username: '' },
422
+ dryRun,
423
+ previousState: {
424
+ userId,
425
+ username: '',
426
+ hasRequiredPermissionSets: false,
427
+ missingPermissionSets: [],
428
+ apiOnlyProfilingEnabled: false,
429
+ },
430
+ actions: [],
431
+ currentState: null,
432
+ summary: { changesRequired: 0, changesApplied: 0, changesFailed: 0, isReady: false },
433
+ }, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, dependencyError, { metadata: { duration: 0 } });
434
+ }
435
+ return this.configureMode.execute(userId, options);
436
+ }
437
+ /**
438
+ * Orchestrates user unconfiguration — reverses the actions of configure().
439
+ *
440
+ * Delegates to {@link UnconfigureMode} for the full unconfigure workflow.
441
+ * See UnconfigureMode for implementation details.
442
+ *
443
+ * @param userId - The Salesforce user ID to unconfigure
444
+ * @returns ServiceResult containing UserConfigurationResult with actions taken/skipped/failed
445
+ */
446
+ async unconfigure(userId) {
447
+ const dependencyError = this.validateConfigureDependencies();
448
+ if (dependencyError) {
449
+ return createFailureResult({
450
+ user: { id: userId, username: '' },
451
+ dryRun: false,
452
+ previousState: {
453
+ userId,
454
+ username: '',
455
+ hasRequiredPermissionSets: false,
456
+ missingPermissionSets: [],
457
+ apiOnlyProfilingEnabled: false,
458
+ },
459
+ actions: [],
460
+ currentState: null,
461
+ summary: { changesRequired: 0, changesApplied: 0, changesFailed: 0, isReady: false },
462
+ }, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, dependencyError, { metadata: { duration: 0 } });
463
+ }
464
+ return this.unconfigureMode.execute(userId);
465
+ }
466
+ /**
467
+ * Disables API-only profiling for a configuration profile.
468
+ *
469
+ * Triggers a CMT configuration update via the ISV REST endpoint to set
470
+ * Enable_API_Only_Profiling__c to false. Uses the same deployment
471
+ * pattern as enableApiOnlyProfiling().
472
+ *
473
+ * @param profileDeveloperName - The developer name of the Configuration Profile to update
474
+ * @returns ServiceResult containing DeploymentResult with job ID
475
+ */
476
+ async disableApiOnlyProfiling(profileDeveloperName) {
477
+ return this.deployCmtViaRest(profileDeveloperName, false);
478
+ }
479
+ /**
480
+ * Deploys a CMT configuration update via the ISV REST endpoint and returns
481
+ * the result including any jobId from the response.
482
+ *
483
+ * On 404 (endpoint not available), returns a graceful error explaining that
484
+ * an ISV upgrade is needed.
485
+ *
486
+ * @param profileDeveloperName - The developer name of the Configuration Profile to update
487
+ * @param enableApiOnlyProfiling - Whether to enable (true) or disable (false) API-only profiling
488
+ * @returns ServiceResult containing DeploymentResult with job ID
489
+ */
490
+ async deployCmtViaRest(profileDeveloperName, enableApiOnlyProfiling) {
491
+ const startTime = Date.now();
492
+ const action = enableApiOnlyProfiling ? 'Enabling' : 'Disabling';
493
+ const validationError = validateRequiredString(profileDeveloperName, 'Profile Developer Name');
494
+ if (validationError) {
495
+ const emptyResult = { triggered: false, message: validationError };
496
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, validationError, {
497
+ metadata: { duration: Date.now() - startTime },
498
+ });
499
+ }
500
+ try {
501
+ this.logger?.log(`${action} API-only profiling for profile: ${profileDeveloperName}`);
502
+ // Call the ISV REST endpoint to trigger CMT deployment
503
+ const restResult = await this.restApiAdapter.request({
504
+ url: `/services/apexrest/${CUNEIFORM_NAMESPACE}/v1/profiling/configuration`,
505
+ method: 'PATCH',
506
+ body: { profileDeveloperName, enableApiOnlyProfiling },
507
+ });
508
+ if (!restResult.success) {
509
+ const errorMsg = restResult.message ?? 'REST request failed';
510
+ // Check for 404 — endpoint not available (ISV version too old)
511
+ // jsforce surfaces HTTP 404 as error messages containing these patterns:
512
+ // - "NOT_FOUND" / "Not Found" — standard HTTP status text
513
+ // - "404" — numeric status code in message
514
+ // - "Could not find a match for URL" — Salesforce REST dispatcher message
515
+ if (errorMsg.includes('404') ||
516
+ errorMsg.includes('Not Found') ||
517
+ errorMsg.includes('Could not find a match for URL')) {
518
+ return createFailureResult({ triggered: false, message: 'Configuration endpoint not available' }, ServiceErrorCodes.USER_CONFIG_ENDPOINT_UNAVAILABLE, 'This operation requires a newer version of Cuneiform for Salesforce. ' +
519
+ 'Contact your Salesforce administrator to upgrade the Cuneiform managed package.', { metadata: { duration: Date.now() - startTime } });
520
+ }
521
+ // Check for 403 — insufficient access to the REST endpoint
522
+ // jsforce surfaces HTTP 403 as error messages containing these patterns:
523
+ // - "403" — numeric status code in message
524
+ // - "Forbidden" — standard HTTP status text
525
+ // - "INSUFFICIENT_ACCESS" — Salesforce error code
526
+ if (errorMsg.includes('403') || errorMsg.includes('Forbidden') || errorMsg.includes('INSUFFICIENT_ACCESS')) {
527
+ return createFailureResult({ triggered: false, message: 'Insufficient access to configuration endpoint' }, ServiceErrorCodes.USER_CONFIG_ENDPOINT_INSUFFICIENT_ACCESS, 'Insufficient access to the Cuneiform REST endpoint. ' +
528
+ 'Verify that your user profile has API access to the Cuneiform managed package. ' +
529
+ 'Contact your Salesforce administrator to check permission set assignments.', { metadata: { duration: Date.now() - startTime } });
530
+ }
531
+ // Check for Feature Parameter not enabled
532
+ // ISV endpoint may return a specific error when the feature gate is disabled
533
+ if (errorMsg.includes('Feature is not enabled') ||
534
+ errorMsg.includes('FEATURE_DISABLED') ||
535
+ errorMsg.includes('feature parameter')) {
536
+ return createFailureResult({ triggered: false, message: 'Feature parameter not enabled' }, ServiceErrorCodes.USER_CONFIG_FEATURE_NOT_ENABLED, 'API-Based Profiling is not enabled in this org. ' +
537
+ 'Contact your Salesforce administrator to enable the Cuneiform Feature Parameter before using this command.', { metadata: { duration: Date.now() - startTime } });
538
+ }
539
+ return createFailureResult({ triggered: false, message: errorMsg }, ServiceErrorCodes.USER_CONFIG_DEPLOY_TRIGGER_FAILED, errorMsg, { metadata: { duration: Date.now() - startTime } });
540
+ }
541
+ // Extract jobId from REST response
542
+ const jobId = restResult.data?.results?.[0]?.jobId ?? undefined;
543
+ const duration = Date.now() - startTime;
544
+ this.logger?.log(`${action} deployment triggered successfully${jobId ? `: jobId=${jobId}` : ''}`);
545
+ return createSuccessResult({
546
+ triggered: true,
547
+ jobId,
548
+ message: `CMT deployment triggered to ${enableApiOnlyProfiling ? 'enable' : 'disable'} API-only profiling for ${profileDeveloperName}`,
549
+ }, {
550
+ message: jobId ? `Deployment job started: ${jobId}` : 'Deployment triggered',
551
+ metadata: { duration },
552
+ });
553
+ }
554
+ catch (error) {
555
+ const errorMessage = error instanceof Error ? error.message : String(error);
556
+ this.logger?.log(`${action} deployment trigger failed: ${errorMessage}`);
557
+ const emptyResult = { triggered: false, message: errorMessage };
558
+ return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_DEPLOY_TRIGGER_FAILED, errorMessage, {
559
+ metadata: { duration: Date.now() - startTime },
560
+ });
561
+ }
562
+ }
563
+ /**
564
+ * Validates dependencies required for configure()/unconfigure() methods.
565
+ */
566
+ validateConfigureDependencies() {
567
+ if (!this.userReadinessService) {
568
+ return 'UserReadinessService is required for configure() - provide userReadinessService in constructor config';
569
+ }
570
+ return null;
571
+ }
572
+ }
573
+ //# sourceMappingURL=UserConfigurationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserConfigurationService.js","sourceRoot":"","sources":["../../src/services/UserConfigurationService.ts"],"names":[],"mappings":"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"}