@ryanstark24/sfgraph-core 1.1.8 → 1.4.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 (346) hide show
  1. package/dist/analyze/__tests__/audit-graph.test.js +79 -0
  2. package/dist/analyze/__tests__/audit-graph.test.js.map +1 -1
  3. package/dist/analyze/__tests__/edge-filters.test.d.ts +2 -0
  4. package/dist/analyze/__tests__/edge-filters.test.d.ts.map +1 -0
  5. package/dist/analyze/__tests__/edge-filters.test.js +66 -0
  6. package/dist/analyze/__tests__/edge-filters.test.js.map +1 -0
  7. package/dist/analyze/__tests__/find-nodes.test.d.ts +2 -0
  8. package/dist/analyze/__tests__/find-nodes.test.d.ts.map +1 -0
  9. package/dist/analyze/__tests__/find-nodes.test.js +129 -0
  10. package/dist/analyze/__tests__/find-nodes.test.js.map +1 -0
  11. package/dist/analyze/__tests__/findings.test.d.ts +2 -0
  12. package/dist/analyze/__tests__/findings.test.d.ts.map +1 -0
  13. package/dist/analyze/__tests__/findings.test.js +100 -0
  14. package/dist/analyze/__tests__/findings.test.js.map +1 -0
  15. package/dist/analyze/__tests__/governor-risks-detection.test.js +90 -0
  16. package/dist/analyze/__tests__/governor-risks-detection.test.js.map +1 -1
  17. package/dist/analyze/__tests__/security-fls-filter.test.d.ts +2 -0
  18. package/dist/analyze/__tests__/security-fls-filter.test.d.ts.map +1 -0
  19. package/dist/analyze/__tests__/security-fls-filter.test.js +23 -0
  20. package/dist/analyze/__tests__/security-fls-filter.test.js.map +1 -0
  21. package/dist/analyze/audit-graph.d.ts +26 -2
  22. package/dist/analyze/audit-graph.d.ts.map +1 -1
  23. package/dist/analyze/audit-graph.js +52 -5
  24. package/dist/analyze/audit-graph.js.map +1 -1
  25. package/dist/analyze/dependencies.d.ts +2 -2
  26. package/dist/analyze/dependencies.d.ts.map +1 -1
  27. package/dist/analyze/dependencies.js +9 -3
  28. package/dist/analyze/dependencies.js.map +1 -1
  29. package/dist/analyze/dependents.d.ts +6 -1
  30. package/dist/analyze/dependents.d.ts.map +1 -1
  31. package/dist/analyze/dependents.js +12 -2
  32. package/dist/analyze/dependents.js.map +1 -1
  33. package/dist/analyze/edge-filters.d.ts +37 -0
  34. package/dist/analyze/edge-filters.d.ts.map +1 -0
  35. package/dist/analyze/edge-filters.js +51 -0
  36. package/dist/analyze/edge-filters.js.map +1 -0
  37. package/dist/analyze/find-nodes.d.ts +38 -0
  38. package/dist/analyze/find-nodes.d.ts.map +1 -0
  39. package/dist/analyze/find-nodes.js +51 -0
  40. package/dist/analyze/find-nodes.js.map +1 -0
  41. package/dist/analyze/findings.d.ts +86 -0
  42. package/dist/analyze/findings.d.ts.map +1 -0
  43. package/dist/analyze/findings.js +141 -0
  44. package/dist/analyze/findings.js.map +1 -0
  45. package/dist/analyze/index.d.ts +2 -0
  46. package/dist/analyze/index.d.ts.map +1 -1
  47. package/dist/analyze/index.js +2 -0
  48. package/dist/analyze/index.js.map +1 -1
  49. package/dist/analyze/populate.d.ts.map +1 -1
  50. package/dist/analyze/populate.js +55 -10
  51. package/dist/analyze/populate.js.map +1 -1
  52. package/dist/analyze/security.d.ts +15 -0
  53. package/dist/analyze/security.d.ts.map +1 -1
  54. package/dist/analyze/security.js +59 -3
  55. package/dist/analyze/security.js.map +1 -1
  56. package/dist/analyze/wip-impact.d.ts.map +1 -1
  57. package/dist/analyze/wip-impact.js +12 -2
  58. package/dist/analyze/wip-impact.js.map +1 -1
  59. package/dist/domain/edge-fact.d.ts +25 -0
  60. package/dist/domain/edge-fact.d.ts.map +1 -1
  61. package/dist/domain/metadata-category.d.ts +1 -0
  62. package/dist/domain/metadata-category.d.ts.map +1 -1
  63. package/dist/domain/metadata-category.js +1 -0
  64. package/dist/domain/metadata-category.js.map +1 -1
  65. package/dist/domain/rel-types.d.ts +4 -0
  66. package/dist/domain/rel-types.d.ts.map +1 -1
  67. package/dist/domain/rel-types.js +7 -0
  68. package/dist/domain/rel-types.js.map +1 -1
  69. package/dist/embedding/__tests__/embed.test.d.ts +2 -0
  70. package/dist/embedding/__tests__/embed.test.d.ts.map +1 -0
  71. package/dist/embedding/__tests__/embed.test.js +72 -0
  72. package/dist/embedding/__tests__/embed.test.js.map +1 -0
  73. package/dist/embedding/embed.d.ts.map +1 -1
  74. package/dist/embedding/embed.js +14 -1
  75. package/dist/embedding/embed.js.map +1 -1
  76. package/dist/extractors/interfaces/metadata-source.d.ts +11 -0
  77. package/dist/extractors/interfaces/metadata-source.d.ts.map +1 -1
  78. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.js.map +1 -1
  79. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts +2 -0
  80. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts.map +1 -0
  81. package/dist/extractors/live-org/__tests__/custom-settings.test.js +79 -0
  82. package/dist/extractors/live-org/__tests__/custom-settings.test.js.map +1 -0
  83. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js +70 -8
  84. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js.map +1 -1
  85. package/dist/extractors/live-org/__tests__/liveness.test.d.ts +2 -0
  86. package/dist/extractors/live-org/__tests__/liveness.test.d.ts.map +1 -0
  87. package/dist/extractors/live-org/__tests__/liveness.test.js +148 -0
  88. package/dist/extractors/live-org/__tests__/liveness.test.js.map +1 -0
  89. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts +2 -0
  90. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts.map +1 -0
  91. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +177 -0
  92. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +1 -0
  93. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts +2 -0
  94. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts.map +1 -0
  95. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +75 -0
  96. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +1 -0
  97. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts +2 -0
  98. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts.map +1 -0
  99. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +135 -0
  100. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +1 -0
  101. package/dist/extractors/live-org/__tests__/pools.test.js +4 -1
  102. package/dist/extractors/live-org/__tests__/pools.test.js.map +1 -1
  103. package/dist/extractors/live-org/__tests__/rate-limit.test.js +1 -6
  104. package/dist/extractors/live-org/__tests__/rate-limit.test.js.map +1 -1
  105. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts +2 -0
  106. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts.map +1 -0
  107. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js +118 -0
  108. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +1 -0
  109. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts +2 -0
  110. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts.map +1 -0
  111. package/dist/extractors/live-org/__tests__/stop-waiting.test.js +243 -0
  112. package/dist/extractors/live-org/__tests__/stop-waiting.test.js.map +1 -0
  113. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js +27 -0
  114. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js.map +1 -1
  115. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts +2 -0
  116. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts.map +1 -0
  117. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js +40 -0
  118. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js.map +1 -0
  119. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts +2 -0
  120. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts.map +1 -0
  121. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js +270 -0
  122. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js.map +1 -0
  123. package/dist/extractors/live-org/bulk-retrieve.d.ts +176 -0
  124. package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
  125. package/dist/extractors/live-org/bulk-retrieve.js +509 -71
  126. package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
  127. package/dist/extractors/live-org/capabilities.d.ts.map +1 -1
  128. package/dist/extractors/live-org/capabilities.js.map +1 -1
  129. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts +2 -0
  130. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts.map +1 -0
  131. package/dist/extractors/live-org/extractors/__tests__/apex.test.js +73 -0
  132. package/dist/extractors/live-org/extractors/__tests__/apex.test.js.map +1 -0
  133. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts +2 -0
  134. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts.map +1 -0
  135. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js +183 -0
  136. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js.map +1 -0
  137. package/dist/extractors/live-org/extractors/apex.d.ts.map +1 -1
  138. package/dist/extractors/live-org/extractors/apex.js +76 -51
  139. package/dist/extractors/live-org/extractors/apex.js.map +1 -1
  140. package/dist/extractors/live-org/extractors/custom-settings.d.ts +3 -0
  141. package/dist/extractors/live-org/extractors/custom-settings.d.ts.map +1 -0
  142. package/dist/extractors/live-org/extractors/custom-settings.js +66 -0
  143. package/dist/extractors/live-org/extractors/custom-settings.js.map +1 -0
  144. package/dist/extractors/live-org/extractors/flow.d.ts.map +1 -1
  145. package/dist/extractors/live-org/extractors/flow.js.map +1 -1
  146. package/dist/extractors/live-org/extractors/generic-metadata.d.ts.map +1 -1
  147. package/dist/extractors/live-org/extractors/generic-metadata.js.map +1 -1
  148. package/dist/extractors/live-org/extractors/generic-sobject.js.map +1 -1
  149. package/dist/extractors/live-org/extractors/lwc.d.ts.map +1 -1
  150. package/dist/extractors/live-org/extractors/lwc.js +81 -41
  151. package/dist/extractors/live-org/extractors/lwc.js.map +1 -1
  152. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts +60 -0
  153. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts.map +1 -0
  154. package/dist/extractors/live-org/extractors/mcd-baseline.js +118 -0
  155. package/dist/extractors/live-org/extractors/mcd-baseline.js.map +1 -0
  156. package/dist/extractors/live-org/extractors/object.d.ts.map +1 -1
  157. package/dist/extractors/live-org/extractors/object.js.map +1 -1
  158. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts +23 -0
  159. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts.map +1 -0
  160. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js +172 -0
  161. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js.map +1 -0
  162. package/dist/extractors/live-org/extractors/omnistudio.d.ts +8 -1
  163. package/dist/extractors/live-org/extractors/omnistudio.d.ts.map +1 -1
  164. package/dist/extractors/live-org/extractors/omnistudio.js +59 -6
  165. package/dist/extractors/live-org/extractors/omnistudio.js.map +1 -1
  166. package/dist/extractors/live-org/rate-limit.d.ts +98 -15
  167. package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
  168. package/dist/extractors/live-org/rate-limit.js +278 -41
  169. package/dist/extractors/live-org/rate-limit.js.map +1 -1
  170. package/dist/extractors/live-org/vlocity/runner.d.ts +1 -1
  171. package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
  172. package/dist/extractors/live-org/vlocity/runner.js +49 -14
  173. package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
  174. package/dist/index.d.ts +1 -0
  175. package/dist/index.d.ts.map +1 -1
  176. package/dist/index.js +1 -0
  177. package/dist/index.js.map +1 -1
  178. package/dist/ingest/__tests__/config-values.test.d.ts +2 -0
  179. package/dist/ingest/__tests__/config-values.test.d.ts.map +1 -0
  180. package/dist/ingest/__tests__/config-values.test.js +65 -0
  181. package/dist/ingest/__tests__/config-values.test.js.map +1 -0
  182. package/dist/ingest/__tests__/full-sync-deletion.test.js +11 -4
  183. package/dist/ingest/__tests__/full-sync-deletion.test.js.map +1 -1
  184. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts +10 -0
  185. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts.map +1 -0
  186. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js +251 -0
  187. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js.map +1 -0
  188. package/dist/ingest/__tests__/live-ingest.test.js.map +1 -1
  189. package/dist/ingest/__tests__/multi-org-orchestrator.test.js +3 -0
  190. package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +1 -1
  191. package/dist/ingest/__tests__/parser-dispatch.test.d.ts +2 -0
  192. package/dist/ingest/__tests__/parser-dispatch.test.d.ts.map +1 -0
  193. package/dist/ingest/__tests__/parser-dispatch.test.js +55 -0
  194. package/dist/ingest/__tests__/parser-dispatch.test.js.map +1 -0
  195. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts +2 -0
  196. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts.map +1 -0
  197. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js +134 -0
  198. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js.map +1 -0
  199. package/dist/ingest/detect-deletions-guard.d.ts +45 -0
  200. package/dist/ingest/detect-deletions-guard.d.ts.map +1 -0
  201. package/dist/ingest/detect-deletions-guard.js +63 -0
  202. package/dist/ingest/detect-deletions-guard.js.map +1 -0
  203. package/dist/ingest/live-ingest.d.ts +86 -0
  204. package/dist/ingest/live-ingest.d.ts.map +1 -1
  205. package/dist/ingest/live-ingest.js +783 -449
  206. package/dist/ingest/live-ingest.js.map +1 -1
  207. package/dist/parsers/__tests__/datatransform-structured.test.d.ts +2 -0
  208. package/dist/parsers/__tests__/datatransform-structured.test.d.ts.map +1 -0
  209. package/dist/parsers/__tests__/datatransform-structured.test.js +147 -0
  210. package/dist/parsers/__tests__/datatransform-structured.test.js.map +1 -0
  211. package/dist/parsers/__tests__/edge-provenance.test.d.ts +2 -0
  212. package/dist/parsers/__tests__/edge-provenance.test.d.ts.map +1 -0
  213. package/dist/parsers/__tests__/edge-provenance.test.js +47 -0
  214. package/dist/parsers/__tests__/edge-provenance.test.js.map +1 -0
  215. package/dist/parsers/__tests__/lwc-bindings.test.js +78 -3
  216. package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -1
  217. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts +2 -0
  218. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts.map +1 -0
  219. package/dist/parsers/__tests__/mcd-gap-fills.test.js +75 -0
  220. package/dist/parsers/__tests__/mcd-gap-fills.test.js.map +1 -0
  221. package/dist/parsers/__tests__/object-inline-fields.test.js +2 -2
  222. package/dist/parsers/__tests__/object-inline-fields.test.js.map +1 -1
  223. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts +2 -0
  224. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts.map +1 -0
  225. package/dist/parsers/__tests__/omnistudio-overlap.test.js +163 -0
  226. package/dist/parsers/__tests__/omnistudio-overlap.test.js.map +1 -0
  227. package/dist/parsers/__tests__/omnistudio.golden.test.js +5 -6
  228. package/dist/parsers/__tests__/omnistudio.golden.test.js.map +1 -1
  229. package/dist/parsers/__tests__/reflection-walker.test.d.ts +2 -0
  230. package/dist/parsers/__tests__/reflection-walker.test.d.ts.map +1 -0
  231. package/dist/parsers/__tests__/reflection-walker.test.js +162 -0
  232. package/dist/parsers/__tests__/reflection-walker.test.js.map +1 -0
  233. package/dist/parsers/__tests__/vlocity.golden.test.js +9 -13
  234. package/dist/parsers/__tests__/vlocity.golden.test.js.map +1 -1
  235. package/dist/parsers/apex/__tests__/ast-extractor.test.js +64 -4
  236. package/dist/parsers/apex/__tests__/ast-extractor.test.js.map +1 -1
  237. package/dist/parsers/apex/__tests__/empty-body.test.d.ts +2 -0
  238. package/dist/parsers/apex/__tests__/empty-body.test.d.ts.map +1 -0
  239. package/dist/parsers/apex/__tests__/empty-body.test.js +40 -0
  240. package/dist/parsers/apex/__tests__/empty-body.test.js.map +1 -0
  241. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts +2 -0
  242. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts.map +1 -0
  243. package/dist/parsers/apex/__tests__/is-test-attribute.test.js +56 -0
  244. package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +1 -0
  245. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts +2 -0
  246. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts.map +1 -0
  247. package/dist/parsers/apex/__tests__/regex-arg-count.test.js +82 -0
  248. package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +1 -0
  249. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts +2 -0
  250. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts.map +1 -0
  251. package/dist/parsers/apex/__tests__/regex-inloop.test.js +70 -0
  252. package/dist/parsers/apex/__tests__/regex-inloop.test.js.map +1 -0
  253. package/dist/parsers/apex/arity-resolver.d.ts.map +1 -1
  254. package/dist/parsers/apex/arity-resolver.js.map +1 -1
  255. package/dist/parsers/apex/ast-extractor.d.ts.map +1 -1
  256. package/dist/parsers/apex/ast-extractor.js +33 -1
  257. package/dist/parsers/apex/ast-extractor.js.map +1 -1
  258. package/dist/parsers/apex/class.d.ts.map +1 -1
  259. package/dist/parsers/apex/class.js +162 -5
  260. package/dist/parsers/apex/class.js.map +1 -1
  261. package/dist/parsers/apex/trigger.d.ts.map +1 -1
  262. package/dist/parsers/apex/trigger.js +10 -0
  263. package/dist/parsers/apex/trigger.js.map +1 -1
  264. package/dist/parsers/common.d.ts +4 -1
  265. package/dist/parsers/common.d.ts.map +1 -1
  266. package/dist/parsers/common.js +15 -2
  267. package/dist/parsers/common.js.map +1 -1
  268. package/dist/parsers/flow/__tests__/invocable-resolver.test.js.map +1 -1
  269. package/dist/parsers/flow/invocable-resolver.d.ts.map +1 -1
  270. package/dist/parsers/flow/invocable-resolver.js.map +1 -1
  271. package/dist/parsers/generic/reflection-walker.d.ts +90 -0
  272. package/dist/parsers/generic/reflection-walker.d.ts.map +1 -0
  273. package/dist/parsers/generic/reflection-walker.js +193 -0
  274. package/dist/parsers/generic/reflection-walker.js.map +1 -0
  275. package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
  276. package/dist/parsers/lwc/html-visitor.js +82 -3
  277. package/dist/parsers/lwc/html-visitor.js.map +1 -1
  278. package/dist/parsers/lwc/js-visitor.d.ts.map +1 -1
  279. package/dist/parsers/lwc/js-visitor.js +6 -2
  280. package/dist/parsers/lwc/js-visitor.js.map +1 -1
  281. package/dist/parsers/object/object.d.ts.map +1 -1
  282. package/dist/parsers/object/object.js +35 -5
  283. package/dist/parsers/object/object.js.map +1 -1
  284. package/dist/parsers/omnistudio/data-transform.d.ts.map +1 -1
  285. package/dist/parsers/omnistudio/data-transform.js +39 -6
  286. package/dist/parsers/omnistudio/data-transform.js.map +1 -1
  287. package/dist/parsers/omnistudio/integration-procedure.d.ts.map +1 -1
  288. package/dist/parsers/omnistudio/integration-procedure.js +3 -2
  289. package/dist/parsers/omnistudio/integration-procedure.js.map +1 -1
  290. package/dist/parsers/omnistudio/overlap-detector.d.ts +50 -0
  291. package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -0
  292. package/dist/parsers/omnistudio/overlap-detector.js +122 -0
  293. package/dist/parsers/omnistudio/overlap-detector.js.map +1 -0
  294. package/dist/parsers/omnistudio/process.d.ts.map +1 -1
  295. package/dist/parsers/omnistudio/process.js +3 -2
  296. package/dist/parsers/omnistudio/process.js.map +1 -1
  297. package/dist/parsers/omnistudio/ui-card.d.ts.map +1 -1
  298. package/dist/parsers/omnistudio/ui-card.js +3 -2
  299. package/dist/parsers/omnistudio/ui-card.js.map +1 -1
  300. package/dist/parsers/rules/custom-metadata-type.yml +7 -0
  301. package/dist/parsers/rules/custom-setting.yml +24 -0
  302. package/dist/parsers/vlocity/common.d.ts +16 -0
  303. package/dist/parsers/vlocity/common.d.ts.map +1 -1
  304. package/dist/parsers/vlocity/common.js +62 -0
  305. package/dist/parsers/vlocity/common.js.map +1 -1
  306. package/dist/parsers/vlocity/data-raptor.d.ts.map +1 -1
  307. package/dist/parsers/vlocity/data-raptor.js +43 -14
  308. package/dist/parsers/vlocity/data-raptor.js.map +1 -1
  309. package/dist/render/__tests__/sarif.test.d.ts +2 -0
  310. package/dist/render/__tests__/sarif.test.d.ts.map +1 -0
  311. package/dist/render/__tests__/sarif.test.js +126 -0
  312. package/dist/render/__tests__/sarif.test.js.map +1 -0
  313. package/dist/render/sarif.d.ts +94 -0
  314. package/dist/render/sarif.d.ts.map +1 -0
  315. package/dist/render/sarif.js +131 -0
  316. package/dist/render/sarif.js.map +1 -0
  317. package/dist/storage/__tests__/analysis-tables-migration.test.js +1 -1
  318. package/dist/storage/__tests__/graph-store.test.js +13 -0
  319. package/dist/storage/__tests__/graph-store.test.js.map +1 -1
  320. package/dist/storage/__tests__/migrations.test.js +4 -4
  321. package/dist/storage/__tests__/rename-stability.test.d.ts +2 -0
  322. package/dist/storage/__tests__/rename-stability.test.d.ts.map +1 -0
  323. package/dist/storage/__tests__/rename-stability.test.js +135 -0
  324. package/dist/storage/__tests__/rename-stability.test.js.map +1 -0
  325. package/dist/storage/__tests__/sync-generation.test.d.ts +2 -0
  326. package/dist/storage/__tests__/sync-generation.test.d.ts.map +1 -0
  327. package/dist/storage/__tests__/sync-generation.test.js +159 -0
  328. package/dist/storage/__tests__/sync-generation.test.js.map +1 -0
  329. package/dist/storage/index.d.ts +1 -0
  330. package/dist/storage/index.d.ts.map +1 -1
  331. package/dist/storage/index.js +1 -0
  332. package/dist/storage/index.js.map +1 -1
  333. package/dist/storage/interfaces.d.ts +60 -0
  334. package/dist/storage/interfaces.d.ts.map +1 -1
  335. package/dist/storage/sqlite/graph-store.d.ts +21 -1
  336. package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
  337. package/dist/storage/sqlite/graph-store.js +86 -0
  338. package/dist/storage/sqlite/graph-store.js.map +1 -1
  339. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  340. package/dist/storage/sqlite/migrations.js +38 -0
  341. package/dist/storage/sqlite/migrations.js.map +1 -1
  342. package/dist/storage/sqlite/rename-stability.d.ts +94 -0
  343. package/dist/storage/sqlite/rename-stability.d.ts.map +1 -0
  344. package/dist/storage/sqlite/rename-stability.js +92 -0
  345. package/dist/storage/sqlite/rename-stability.js.map +1 -0
  346. package/package.json +4 -1
@@ -0,0 +1,172 @@
1
+ import { Buffer } from "node:buffer";
2
+ import JSZip from "jszip";
3
+ import { METADATA_CATEGORY } from "../../../domain/index.js";
4
+ import { withTimeout } from "../rate-limit.js";
5
+ /**
6
+ * OmniStudio-on-Core retrieval via Metadata API `retrieve()` rather than
7
+ * SOQL on the standard SObjects. SOQL gives you `OmniProcess.PropertySet`
8
+ * and `OmniProcessElement.PropertySet` as JSON blobs — useful, but the
9
+ * platform omits design-time XML constructs that only the Metadata API
10
+ * envelope carries (conditional branches inside IPs, layout config on
11
+ * UI cards, embedded server-script references on DataTransforms).
12
+ *
13
+ * This extractor runs **alongside** the SOQL path rather than replacing
14
+ * it: SOQL has lower latency for "what processes exist + their element
15
+ * graph"; retrieve() has higher fidelity for "what does this process
16
+ * actually do." Parsers can choose which input to consume per use case.
17
+ *
18
+ * Constraints, all from W2-02's research:
19
+ * - Metadata API has a documented org-wide quota of 10,000 retrieve
20
+ * calls per 24h. We track the response's `Sforce-Limit-Info` header
21
+ * when available and bail out at 90% utilisation rather than blow
22
+ * the budget on a single ingest.
23
+ * - retrieve() is async — call returns a locator with an async process
24
+ * ID; we poll via `checkRetrieveStatus`. jsforce's
25
+ * `RetrieveResultLocator.complete()` wraps the polling loop.
26
+ * - `package.xml` can list up to 5,000 components per call. Our types
27
+ * are wildcards (`<members>*</members>`), which DOES count against
28
+ * the cap if the org has 5k+ of any one type — chunk by listing
29
+ * first and slicing.
30
+ *
31
+ * Capability-gated by `caps.omnistudioOncore`; the caller (bulk-retrieve)
32
+ * additionally gates on the opt-in `enableOmnistudioRetrieve` flag from
33
+ * LiveIngestOpts.
34
+ */
35
+ /** OmniStudio-on-Core Metadata API type names. These differ from the
36
+ * Vlocity DataPack type vocabulary — the cross-flavor resolver and
37
+ * overlap detector understand both. */
38
+ const RETRIEVE_TYPES = ["OmniUiCard", "OmniIntegrationProcedure", "OmniDataTransform"];
39
+ /** Polling cadence for `retrieve()` job status. Salesforce typically
40
+ * finishes within 5-15s for small types; aggressive polling burns
41
+ * rate-limit headroom for no value. */
42
+ const POLL_INTERVAL_MS = 3_000;
43
+ /** Hard ceiling on per-retrieve wall time. Large orgs (5k+ components
44
+ * of a single type) legitimately take 60-90s; the bisection / quota
45
+ * guard handles the catastrophic case. */
46
+ const RETRIEVE_TIMEOUT_MS = 180_000;
47
+ /** Conservative quota utilisation threshold. When usage exceeds this
48
+ * fraction of the daily 10k limit, skip remaining retrieves and
49
+ * surface a warning. Leaves headroom for downstream operations. */
50
+ const QUOTA_SKIP_THRESHOLD = 0.9;
51
+ /** Parse the `Sforce-Limit-Info` header which Salesforce attaches to most
52
+ * REST/SOAP responses: `api-usage=12345/15000`. Returns null if absent
53
+ * or malformed — caller assumes "enough quota" in that case rather
54
+ * than refusing to proceed. */
55
+ function parseLimitInfo(header) {
56
+ if (!header)
57
+ return null;
58
+ const m = header.match(/api-usage=(\d+)\/(\d+)/);
59
+ if (!m)
60
+ return null;
61
+ const current = Number.parseInt(m[1] ?? "", 10);
62
+ const limit = Number.parseInt(m[2] ?? "", 10);
63
+ if (!Number.isFinite(current) || !Number.isFinite(limit) || limit <= 0)
64
+ return null;
65
+ return { current, limit };
66
+ }
67
+ /** Decide whether to skip a retrieve based on current quota utilisation.
68
+ * Conservative: when in doubt (no limit info available) we proceed. */
69
+ export function shouldSkipForQuota(limit) {
70
+ if (!limit)
71
+ return false;
72
+ return limit.current / limit.limit >= QUOTA_SKIP_THRESHOLD;
73
+ }
74
+ /** Yield one RawMember per file extracted from the retrieve zip. The
75
+ * `category` is set to OMNI_PROCESS uniformly — the parser layer
76
+ * discriminates on the file path / XML root element. */
77
+ async function* yieldFromZip(zipBase64, orgId, type) {
78
+ const buf = Buffer.from(zipBase64, "base64");
79
+ const zip = await JSZip.loadAsync(buf);
80
+ for (const [path, file] of Object.entries(zip.files)) {
81
+ if (file.dir)
82
+ continue;
83
+ // Skip the manifest file — it's metadata about the retrieve, not a
84
+ // component definition. Path looks like `unpackaged/package.xml`.
85
+ if (path.endsWith("/package.xml") || path === "package.xml")
86
+ continue;
87
+ // Each file is `unpackaged/<typeFolder>/<name>.<ext>`. The parsed
88
+ // name is just the file basename without extension.
89
+ const segments = path.split("/");
90
+ const filename = segments[segments.length - 1] ?? path;
91
+ const memberName = filename.replace(/\.[^.]+$/, "");
92
+ const content = await file.async("string");
93
+ yield {
94
+ ref: {
95
+ category: METADATA_CATEGORY.OMNI_PROCESS,
96
+ memberType: type,
97
+ memberName,
98
+ lastModifiedAt: "",
99
+ sourceUri: `sf://${orgId}/${type}/${memberName}.xml`,
100
+ namespace: null,
101
+ },
102
+ content,
103
+ };
104
+ }
105
+ }
106
+ /**
107
+ * Async iterator yielding XML envelopes for OmniStudio-on-Core types via
108
+ * Metadata API `retrieve()`. Falls back silently (yields nothing) on
109
+ * orgs without the capability or when quota would be exhausted.
110
+ */
111
+ export async function* iterOmnistudioRetrieve(conn, orgId, opts) {
112
+ // Check quota up-front (single call to limits endpoint via REST). If the
113
+ // helper isn't available we proceed and let per-call failures surface.
114
+ let limit = null;
115
+ try {
116
+ const limitInfo = conn._sforceLimitInfo;
117
+ limit = parseLimitInfo(limitInfo);
118
+ }
119
+ catch {
120
+ // jsforce holds the most-recent limit header on the conn after any
121
+ // call; if no calls have happened yet, we have no signal and proceed.
122
+ }
123
+ if (shouldSkipForQuota(limit)) {
124
+ opts.onError?.("omnistudio-retrieve:quota-guard", new Error(`metadata API quota at ${limit?.current}/${limit?.limit} (>=${QUOTA_SKIP_THRESHOLD * 100}%) — skipping retrieve()`));
125
+ return;
126
+ }
127
+ for (const type of RETRIEVE_TYPES) {
128
+ const label = `omnistudio-retrieve:${type}`;
129
+ try {
130
+ const request = {
131
+ apiVersion: opts.apiVersion,
132
+ unpackaged: {
133
+ types: [{ name: type, members: ["*"] }],
134
+ version: opts.apiVersion,
135
+ },
136
+ };
137
+ const locator = conn.metadata.retrieve(request);
138
+ const result = (await withTimeout(locator.complete({ details: false }), RETRIEVE_TIMEOUT_MS, label));
139
+ if (result.status && result.status !== "Succeeded") {
140
+ opts.onError?.(label, new Error(`retrieve() status=${result.status} ${result.errorMessage ?? ""}`));
141
+ continue;
142
+ }
143
+ if (!result.zipFile) {
144
+ opts.onError?.(label, new Error("retrieve() returned no zipFile"));
145
+ continue;
146
+ }
147
+ for await (const member of yieldFromZip(result.zipFile, orgId, type)) {
148
+ yield member;
149
+ }
150
+ // Re-check quota between types — a single retrieve can return
151
+ // thousands of components and shift utilisation significantly.
152
+ const nextLimit = (() => {
153
+ try {
154
+ return parseLimitInfo(conn._sforceLimitInfo);
155
+ }
156
+ catch {
157
+ return null;
158
+ }
159
+ })();
160
+ if (shouldSkipForQuota(nextLimit)) {
161
+ opts.onError?.("omnistudio-retrieve:quota-guard", new Error(`metadata API quota crossed ${QUOTA_SKIP_THRESHOLD * 100}% after ${type} — skipping remaining types`));
162
+ return;
163
+ }
164
+ }
165
+ catch (e) {
166
+ opts.onError?.(label, e);
167
+ // continue to next type — one type failing (e.g. permission gap on
168
+ // OmniUiCard) shouldn't disable retrieval of the other two.
169
+ }
170
+ }
171
+ }
172
+ //# sourceMappingURL=omnistudio-retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omnistudio-retrieve.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/omnistudio-retrieve.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
1
  import type { RawMember } from "../../interfaces/metadata-source.js";
2
- export declare function iterOmnistudio(conn: any): AsyncIterable<RawMember>;
2
+ export interface IterOmnistudioOpts {
3
+ /** Member types to skip on the SOQL path. Used by bulk-retrieve to avoid
4
+ * double-ingesting types the Metadata-API retrieve path already covers
5
+ * with higher fidelity (OmniDataTransform, OmniUiCard) when
6
+ * enableOmnistudioRetrieve is on. */
7
+ skipTypes?: Set<string>;
8
+ }
9
+ export declare function iterOmnistudio(conn: any, opts?: IterOmnistudioOpts): AsyncIterable<RawMember>;
3
10
  //# sourceMappingURL=omnistudio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"omnistudio.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/omnistudio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AA2GrE,wBAAuB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CA4EzE"}
1
+ {"version":3,"file":"omnistudio.d.ts","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/omnistudio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AA+JrE,MAAM,WAAW,kBAAkB;IACjC;;;0CAGsC;IACtC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,wBAAuB,cAAc,CACnC,IAAI,EAAE,GAAG,EACT,IAAI,GAAE,kBAAuB,GAC5B,aAAa,CAAC,SAAS,CAAC,CAsF1B"}
@@ -16,6 +16,7 @@ const QUERIES = [
16
16
  memberType: "OmniDataTransform",
17
17
  category: METADATA_CATEGORY.OMNI_DATA_TRANSFORM,
18
18
  soql: "SELECT Id, Name, LastModifiedDate FROM OmniDataTransform",
19
+ fetchItems: true,
19
20
  },
20
21
  {
21
22
  memberType: "OmniUiCard",
@@ -71,7 +72,45 @@ async function fetchElementsByProcess(conn, processIds) {
71
72
  }
72
73
  return byProcess;
73
74
  }
74
- export async function* iterOmnistudio(conn) {
75
+ /**
76
+ * Fetch every OmniDataTransformItem mapping row for the given transform Ids,
77
+ * grouped by OmniDataTransformationId. These rows carry the structured
78
+ * field mappings (InputObjectName/InputFieldName, Output*, Lookup*) that
79
+ * the OmniDataTransform parser turns into DR_READS_FIELD / DR_WRITES_FIELD
80
+ * edges. Wrapped in its own try/catch per chunk so field-name drift on a
81
+ * newer org version degrades to "no items" with a breadcrumb, never a
82
+ * failed source.
83
+ */
84
+ async function fetchItemsByTransform(conn, transformIds) {
85
+ const byTransform = new Map();
86
+ if (transformIds.length === 0)
87
+ return byTransform;
88
+ const CHUNK = 200;
89
+ for (let i = 0; i < transformIds.length; i += CHUNK) {
90
+ const slice = transformIds.slice(i, i + CHUNK);
91
+ const idList = slice.map((id) => `'${id.replace(/'/g, "\\'")}'`).join(",");
92
+ const ITEM_FIELDS = "Id, Name, InputObjectName, InputFieldName, OutputObjectName, OutputFieldName, LookupObjectName, LookupByFieldName, FilterValue, FilterOperator, OmniDataTransformationId";
93
+ const soql = `SELECT ${ITEM_FIELDS} FROM OmniDataTransformItem WHERE OmniDataTransformationId IN (${idList})`;
94
+ let res = null;
95
+ try {
96
+ res = (await scheduleData(() => soqlWithTimeout(conn.query(soql), "data OmniDataTransformItem")));
97
+ }
98
+ catch (e) {
99
+ console.log(`ingest: omnistudio item query failed for OmniDataTransformItem: ${e.message?.slice(0, 200) ?? String(e)}`);
100
+ continue;
101
+ }
102
+ for (const r of res?.records ?? []) {
103
+ const parentId = String(r.OmniDataTransformationId ?? "");
104
+ if (!parentId)
105
+ continue;
106
+ const arr = byTransform.get(parentId) ?? [];
107
+ arr.push(r);
108
+ byTransform.set(parentId, arr);
109
+ }
110
+ }
111
+ return byTransform;
112
+ }
113
+ export async function* iterOmnistudio(conn, opts = {}) {
75
114
  // Fire all 4 Tooling SOQL queries in parallel — they're independent and
76
115
  // the Tooling pool throttles concurrency.
77
116
  // Each mapped task wraps scheduleQuery in try/catch so allSettled is
@@ -82,7 +121,8 @@ export async function* iterOmnistudio(conn) {
82
121
  // how capabilities.ts detects them). They are NOT Tooling objects, so
83
122
  // routing through `conn.tooling.query` silently returned zero rows on
84
123
  // orgs that actually had data. Use regular SOQL via the data pool.
85
- const settled = await Promise.allSettled(QUERIES.map(async (q) => {
124
+ const activeQueries = QUERIES.filter((q) => !opts.skipTypes?.has(q.memberType));
125
+ const settled = await Promise.allSettled(activeQueries.map(async (q) => {
86
126
  try {
87
127
  const res = (await scheduleData(() => soqlWithTimeout(conn.query(q.soql), `data ${q.memberType}`)));
88
128
  return { q, res, err: null };
@@ -110,20 +150,33 @@ export async function* iterOmnistudio(conn) {
110
150
  // pass those edges never get emitted (parent-only rows have no nested
111
151
  // configuration to walk).
112
152
  const parentIds = [];
153
+ const transformIds = [];
113
154
  for (const { q, res } of results) {
114
- if (!q.fetchElements)
155
+ if (!q.fetchElements && !q.fetchItems)
115
156
  continue;
116
157
  for (const r of res?.records ?? []) {
117
- if (r.Id)
158
+ if (!r.Id)
159
+ continue;
160
+ if (q.fetchElements)
118
161
  parentIds.push(String(r.Id));
162
+ if (q.fetchItems)
163
+ transformIds.push(String(r.Id));
119
164
  }
120
165
  }
121
- const elementsByProcess = await fetchElementsByProcess(conn, parentIds);
166
+ const [elementsByProcess, itemsByTransform] = await Promise.all([
167
+ fetchElementsByProcess(conn, parentIds),
168
+ fetchItemsByTransform(conn, transformIds),
169
+ ]);
122
170
  for (const { q, res } of results) {
123
171
  for (const r of res?.records ?? []) {
124
172
  const name = String(r.DeveloperName ?? r.Name ?? r.Id ?? "");
125
173
  const elements = q.fetchElements && r.Id ? (elementsByProcess.get(String(r.Id)) ?? []) : [];
126
- const enriched = elements.length > 0 ? { ...r, elements } : r;
174
+ const items = q.fetchItems && r.Id ? (itemsByTransform.get(String(r.Id)) ?? []) : [];
175
+ let enriched = r;
176
+ if (elements.length > 0)
177
+ enriched = { ...enriched, elements };
178
+ if (items.length > 0)
179
+ enriched = { ...enriched, items };
127
180
  yield {
128
181
  ref: {
129
182
  category: q.category,
@@ -1 +1 @@
1
- {"version":3,"file":"omnistudio.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/omnistudio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"omnistudio.js","sourceRoot":"","sources":["../../../../src/extractors/live-org/extractors/omnistudio.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,33 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
1
2
  import Bottleneck from "bottleneck";
2
3
  /** Cap concurrent query invocations against a single org connection. */
3
4
  export declare const queryLimit: import("p-limit").LimitFunction;
5
+ /** Mutable cell observed by every rate-limit wrapper. The merger (W1.5-02)
6
+ * flips `.value = true` to instruct callers to abandon the current await.
7
+ * Compatible with `BackgroundWedgeEntry.stopWaitingRef` (same shape). */
8
+ export interface StopSignal {
9
+ value: boolean;
10
+ }
11
+ /** Typed sentinel surfaced by the rate-limit wrappers when a stop-signal
12
+ * is observed mid-race. Distinct from a real timeout so callers (e.g. the
13
+ * late-drain loop in bulk-retrieve.ts) can branch on the kind of failure.
14
+ *
15
+ * This is a voluntary stop on the caller side — it is NOT a wedge, and it
16
+ * is NOT proof that the underlying HTTP request was cancelled (see
17
+ * socket-leak limitation above). */
18
+ export declare class StopWaitingError extends Error {
19
+ readonly stopWaiting: true;
20
+ constructor(label: string);
21
+ }
22
+ /**
23
+ * AsyncLocalStorage context channel — the merger's `failSoft` wrapper
24
+ * `.run()`s the body inside `stopSignalContext.run(stopSignal, ...)` so any
25
+ * downstream call into a rate-limit wrapper that did not receive an
26
+ * explicit stopSignal can still pick one up. Tradeoff: implicit, but the
27
+ * alternative is threading a new optional param through every extractor
28
+ * signature (~13 files). Documented as a deviation in the W1.5-03 SUMMARY.
29
+ */
30
+ export declare const stopSignalContext: AsyncLocalStorage<StopSignal>;
4
31
  /**
5
32
  * Hard upper bound on a single jsforce call. Used to wrap metadata.list /
6
33
  * metadata.read calls in extractors so a Salesforce-side stall can't park
@@ -8,8 +35,14 @@ export declare const queryLimit: import("p-limit").LimitFunction;
8
35
  * Rejects with a descriptive error after `ms`; the failSoft wrapper one
9
36
  * level up surfaces it as a skip. The underlying jsforce HTTP request may
10
37
  * continue until libuv tears it down — we just stop waiting.
38
+ *
39
+ * Phase 1.5 W1.5-03: accepts an optional `stopSignal` cell. When the cell's
40
+ * `.value` flips to `true` mid-race, the timer is cleared and the returned
41
+ * promise rejects with `StopWaitingError`. The underlying jsforce request
42
+ * is NOT cancelled — see the socket-leak limitation block at the top of
43
+ * this file.
11
44
  */
12
- export declare function withTimeout<T>(p: Promise<T>, ms: number, label: string): Promise<T>;
45
+ export declare function withTimeout<T>(p: Promise<T>, ms: number, label: string, stopSignal?: StopSignal): Promise<T>;
13
46
  /** Per-call ceilings — kept here so all extractors apply them consistently.
14
47
  * Read timeout raised 45s -> 120s. A single metadata.read of a heavy
15
48
  * Profile / Layout / Workflow legitimately takes 60-90s on production orgs;
@@ -35,7 +68,21 @@ export declare const METADATA_DESCRIBE_TIMEOUT_MS = 60000;
35
68
  * with a SOQL-flavoured withTimeout. Centralizes the timeout value so
36
69
  * callers don't drift; centralizes the label format so failures are
37
70
  * greppable. */
38
- export declare function soqlWithTimeout<T>(p: Promise<T>, label: string, ms?: number): Promise<T>;
71
+ export declare function soqlWithTimeout<T>(p: Promise<T>, label: string, ms?: number, stopSignal?: StopSignal): Promise<T>;
72
+ /**
73
+ * Maximum items per `metadata.read` Salesforce SOAP call. The platform docs
74
+ * cap this at 10 — passing more makes jsforce either error or silently
75
+ * truncate depending on version. Most callers already hand-chunk at 10
76
+ * (see extractors/generic-metadata, flow, integration); this constant
77
+ * centralises that value and lets readMetadataBatchAdaptive enforce it
78
+ * defensively for callers that don't.
79
+ *
80
+ * NOTE: The Salesforce Composite REST API allows 25 subrequests per call,
81
+ * but that's a different API (REST, not SOAP Metadata) which sfgraph does
82
+ * not currently use. Don't conflate the two — bumping this to 25 against
83
+ * the Metadata SOAP path is silently broken on real orgs.
84
+ */
85
+ export declare const METADATA_READ_BATCH_SIZE: number;
39
86
  export declare function readMetadataBatchAdaptive<TItem extends {
40
87
  fullName: string;
41
88
  }>(conn: {
@@ -55,9 +102,9 @@ export interface RateLimitPools {
55
102
  toolingPool: Bottleneck;
56
103
  metadataPool: Bottleneck;
57
104
  dataPool: Bottleneck;
58
- scheduleQuery<T>(fn: () => Promise<T>): Promise<T>;
59
- scheduleMetadata<T>(fn: () => Promise<T>): Promise<T>;
60
- scheduleData<T>(fn: () => Promise<T>): Promise<T>;
105
+ scheduleQuery<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
106
+ scheduleMetadata<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
107
+ scheduleData<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
61
108
  }
62
109
  /**
63
110
  * Per-pool concurrency overrides. Each value, when provided, replaces the
@@ -80,13 +127,6 @@ export declare const DEFAULT_POOL_CONCURRENCY: {
80
127
  readonly metadata: 10;
81
128
  readonly data: 10;
82
129
  };
83
- /**
84
- * Build a fresh independent {@link RateLimitPools} set. Each pool has its own
85
- * Bottleneck reservoir, so two pool sets do not contend for budget.
86
- *
87
- * Concurrency resolution order: explicit `overrides` arg > `SFGRAPH_*_POOL`
88
- * env vars > {@link DEFAULT_POOL_CONCURRENCY}.
89
- */
90
130
  export declare function createRateLimitPools(overrides?: PoolConcurrencyOverrides): RateLimitPools;
91
131
  export declare const toolingPool: Bottleneck;
92
132
  export declare const metadataPool: Bottleneck;
@@ -98,11 +138,11 @@ export declare const dataPool: Bottleneck;
98
138
  */
99
139
  export declare const limiter: Bottleneck;
100
140
  /** Helper that runs a single SOQL/Tooling callable through both gates. */
101
- export declare function scheduleQuery<T>(fn: () => Promise<T>): Promise<T>;
141
+ export declare function scheduleQuery<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
102
142
  /** Schedule a Metadata API call (list/read/retrieve/deploy). */
103
- export declare function scheduleMetadata<T>(fn: () => Promise<T>): Promise<T>;
143
+ export declare function scheduleMetadata<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
104
144
  /** Schedule a SObject SOQL / Bulk query (Vlocity, CMDT, generic records). */
105
- export declare function scheduleData<T>(fn: () => Promise<T>): Promise<T>;
145
+ export declare function scheduleData<T>(fn: () => Promise<T>, stopSignal?: StopSignal): Promise<T>;
106
146
  /**
107
147
  * Mutate the *default* (process-level) pools' concurrency caps at runtime.
108
148
  * Used by the CLI when `--tooling-pool` / `--metadata-pool` / `--data-pool`
@@ -113,6 +153,49 @@ export declare function scheduleData<T>(fn: () => Promise<T>): Promise<T>;
113
153
  * Returns the concurrency caps actually applied (after merging defaults +
114
154
  * env vars + overrides), so callers can log what the user got.
115
155
  */
156
+ export interface SoqlRebatchOpts<TRecord> {
157
+ /** Quoted, comma-joined ID list. The caller has already escaped each id. */
158
+ ids: string[];
159
+ /** SOQL template containing `${IDS}` exactly once — replaced with the
160
+ * quoted, comma-joined list at execution time. */
161
+ template: string;
162
+ /** Greppable label for timeouts + warning messages. */
163
+ label: string;
164
+ /** Maximum IDs per request before the helper pre-splits. Default 300 —
165
+ * conservative below the documented SOQL `IN()` 4000 cap but above the
166
+ * 200 most extractors hand-chunked at. */
167
+ rebatchAt?: number;
168
+ /** Maximum recursive split depth before giving up on a slice. Default 6 —
169
+ * enough to cover (300 × 2^6 = 19200) IDs in a single starting batch. */
170
+ maxDepth?: number;
171
+ /**
172
+ * Pool to schedule each individual SOQL call through. Defaults to the
173
+ * Tooling pool; pass `scheduleQuery`/`scheduleData` for non-Tooling
174
+ * paths. The helper does NOT pick a pool based on the SOQL itself —
175
+ * staying explicit avoids "this call went to the wrong pool, why is
176
+ * Tooling starved" surprises.
177
+ */
178
+ scheduler?: <T>(fn: () => Promise<T>) => Promise<T>;
179
+ /** Per-call timeout label override. Defaults to SOQL_TIMEOUT_MS. */
180
+ timeoutMs?: number;
181
+ /** Function that runs the actual SOQL on the right API surface
182
+ * (`conn.tooling.query` or `conn.query`). Returning a value with a
183
+ * `records` array is required. */
184
+ runner: (soql: string) => Promise<{
185
+ records?: TRecord[];
186
+ }>;
187
+ }
188
+ /** Detect errors that should trigger a smaller-batch retry rather than
189
+ * failing the whole call. Tries the canonical jsforce error shape first
190
+ * (`statusCode` / `errorCode`) then falls back to message matching. */
191
+ export declare function isRebatchableSoqlError(err: unknown): boolean;
192
+ /**
193
+ * Execute `template` against `ids`, splitting the ID set on a rebatchable
194
+ * error or when it exceeds `rebatchAt`. Returns the merged record set.
195
+ * Throws only on non-rebatchable errors (the caller's existing failSoft /
196
+ * onError plumbing handles those).
197
+ */
198
+ export declare function runSoqlInRebatchable<TRecord>(opts: SoqlRebatchOpts<TRecord>): Promise<TRecord[]>;
116
199
  export declare function configureDefaultPools(overrides?: PoolConcurrencyOverrides): Promise<{
117
200
  tooling: number;
118
201
  metadata: number;
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/extractors/live-org/rate-limit.ts"],"names":[],"mappings":"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"}