@oobe-protocol-labs/sap-mcp-server 0.9.2 → 0.9.3

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 (703) hide show
  1. package/.env.example +8 -7
  2. package/CHANGELOG.md +731 -0
  3. package/README.md +9 -3
  4. package/USER_DOCS/00_START_HERE.md +51 -4
  5. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
  6. package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +32 -3
  7. package/USER_DOCS/04_CLIENT_CONFIGS.md +14 -7
  8. package/USER_DOCS/05_SKILLS_AND_TOOLS.md +68 -8
  9. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +20 -14
  10. package/USER_DOCS/07_SMITHERY_AND_MARKETPLACES.md +7 -0
  11. package/config.example.json +5 -4
  12. package/config.schema.json +9 -4
  13. package/config.secure-example.json +5 -4
  14. package/dist/adapters/index.d.ts +7 -1
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +7 -1
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/mcp/errors.d.ts +13 -1
  19. package/dist/adapters/mcp/errors.d.ts.map +1 -1
  20. package/dist/adapters/mcp/errors.js +13 -1
  21. package/dist/adapters/mcp/errors.js.map +1 -1
  22. package/dist/adapters/mcp/index.d.ts +7 -1
  23. package/dist/adapters/mcp/index.d.ts.map +1 -1
  24. package/dist/adapters/mcp/index.js +7 -1
  25. package/dist/adapters/mcp/index.js.map +1 -1
  26. package/dist/adapters/mcp/prompt-response.d.ts +13 -1
  27. package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
  28. package/dist/adapters/mcp/prompt-response.js +13 -1
  29. package/dist/adapters/mcp/prompt-response.js.map +1 -1
  30. package/dist/adapters/mcp/resource-response.d.ts +14 -1
  31. package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
  32. package/dist/adapters/mcp/resource-response.js +14 -1
  33. package/dist/adapters/mcp/resource-response.js.map +1 -1
  34. package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
  35. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
  36. package/dist/adapters/mcp/sdk-compat.js +232 -25
  37. package/dist/adapters/mcp/sdk-compat.js.map +1 -1
  38. package/dist/adapters/mcp/tool-response.d.ts +51 -3
  39. package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
  40. package/dist/adapters/mcp/tool-response.js +48 -3
  41. package/dist/adapters/mcp/tool-response.js.map +1 -1
  42. package/dist/adapters/solana/commitment.d.ts +14 -2
  43. package/dist/adapters/solana/commitment.d.ts.map +1 -1
  44. package/dist/adapters/solana/commitment.js +14 -2
  45. package/dist/adapters/solana/commitment.js.map +1 -1
  46. package/dist/adapters/solana/connection.d.ts +11 -2
  47. package/dist/adapters/solana/connection.d.ts.map +1 -1
  48. package/dist/adapters/solana/connection.js +11 -2
  49. package/dist/adapters/solana/connection.js.map +1 -1
  50. package/dist/adapters/solana/index.d.ts +7 -1
  51. package/dist/adapters/solana/index.d.ts.map +1 -1
  52. package/dist/adapters/solana/index.js +7 -1
  53. package/dist/adapters/solana/index.js.map +1 -1
  54. package/dist/adapters/solana/public-key.d.ts +11 -2
  55. package/dist/adapters/solana/public-key.d.ts.map +1 -1
  56. package/dist/adapters/solana/public-key.js +11 -2
  57. package/dist/adapters/solana/public-key.js.map +1 -1
  58. package/dist/config/defaults.d.ts +5 -0
  59. package/dist/config/defaults.d.ts.map +1 -1
  60. package/dist/config/defaults.js +5 -0
  61. package/dist/config/defaults.js.map +1 -1
  62. package/dist/config/env.d.ts +4 -0
  63. package/dist/config/env.d.ts.map +1 -1
  64. package/dist/config/env.js +15 -10
  65. package/dist/config/env.js.map +1 -1
  66. package/dist/config/index.d.ts +5 -0
  67. package/dist/config/index.d.ts.map +1 -1
  68. package/dist/config/index.js +5 -0
  69. package/dist/config/index.js.map +1 -1
  70. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  71. package/dist/config/mcp-client-injection.js +136 -33
  72. package/dist/config/mcp-client-injection.js.map +1 -1
  73. package/dist/config/paths.d.ts +14 -1
  74. package/dist/config/paths.d.ts.map +1 -1
  75. package/dist/config/paths.js +20 -1
  76. package/dist/config/paths.js.map +1 -1
  77. package/dist/config/profiles.d.ts +3 -10
  78. package/dist/config/profiles.d.ts.map +1 -1
  79. package/dist/config/profiles.js +5 -0
  80. package/dist/config/profiles.js.map +1 -1
  81. package/dist/config/schema.d.ts +5 -0
  82. package/dist/config/schema.d.ts.map +1 -1
  83. package/dist/config/schema.js +5 -0
  84. package/dist/config/schema.js.map +1 -1
  85. package/dist/config/secure-config.d.ts +5 -0
  86. package/dist/config/secure-config.d.ts.map +1 -1
  87. package/dist/config/secure-config.js +5 -0
  88. package/dist/config/secure-config.js.map +1 -1
  89. package/dist/config/setup.d.ts +5 -0
  90. package/dist/config/setup.d.ts.map +1 -1
  91. package/dist/config/setup.js +5 -0
  92. package/dist/config/setup.js.map +1 -1
  93. package/dist/config/wizard.d.ts +6 -0
  94. package/dist/config/wizard.d.ts.map +1 -1
  95. package/dist/config/wizard.js +102 -18
  96. package/dist/config/wizard.js.map +1 -1
  97. package/dist/config-cli.d.ts +3 -13
  98. package/dist/config-cli.d.ts.map +1 -1
  99. package/dist/config-cli.js +14 -1
  100. package/dist/config-cli.js.map +1 -1
  101. package/dist/core/constants.d.ts +33 -6
  102. package/dist/core/constants.d.ts.map +1 -1
  103. package/dist/core/constants.js +38 -8
  104. package/dist/core/constants.js.map +1 -1
  105. package/dist/core/errors.d.ts +5 -0
  106. package/dist/core/errors.d.ts.map +1 -1
  107. package/dist/core/errors.js +5 -0
  108. package/dist/core/errors.js.map +1 -1
  109. package/dist/core/guards.d.ts +5 -0
  110. package/dist/core/guards.d.ts.map +1 -1
  111. package/dist/core/guards.js +3 -1
  112. package/dist/core/guards.js.map +1 -1
  113. package/dist/core/index.d.ts +7 -1
  114. package/dist/core/index.d.ts.map +1 -1
  115. package/dist/core/index.js +7 -1
  116. package/dist/core/index.js.map +1 -1
  117. package/dist/core/logger.js +1 -1
  118. package/dist/core/result.d.ts +77 -9
  119. package/dist/core/result.d.ts.map +1 -1
  120. package/dist/core/result.js +68 -9
  121. package/dist/core/result.js.map +1 -1
  122. package/dist/core/types.d.ts +5 -0
  123. package/dist/core/types.d.ts.map +1 -1
  124. package/dist/core/types.js +3 -4
  125. package/dist/core/types.js.map +1 -1
  126. package/dist/index.d.ts +5 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/memory/async-processor.d.ts +107 -0
  131. package/dist/memory/async-processor.d.ts.map +1 -0
  132. package/dist/memory/async-processor.js +204 -0
  133. package/dist/memory/async-processor.js.map +1 -0
  134. package/dist/memory/auto-record.d.ts +47 -0
  135. package/dist/memory/auto-record.d.ts.map +1 -0
  136. package/dist/memory/auto-record.js +133 -0
  137. package/dist/memory/auto-record.js.map +1 -0
  138. package/dist/memory/database.d.ts +103 -0
  139. package/dist/memory/database.d.ts.map +1 -0
  140. package/dist/memory/database.js +337 -0
  141. package/dist/memory/database.js.map +1 -0
  142. package/dist/memory/hermes-bridge.d.ts +70 -0
  143. package/dist/memory/hermes-bridge.d.ts.map +1 -0
  144. package/dist/memory/hermes-bridge.js +155 -0
  145. package/dist/memory/hermes-bridge.js.map +1 -0
  146. package/dist/memory/index.d.ts +23 -0
  147. package/dist/memory/index.d.ts.map +1 -0
  148. package/dist/memory/index.js +22 -0
  149. package/dist/memory/index.js.map +1 -0
  150. package/dist/memory/memory-store.d.ts +76 -0
  151. package/dist/memory/memory-store.d.ts.map +1 -0
  152. package/dist/memory/memory-store.js +231 -0
  153. package/dist/memory/memory-store.js.map +1 -0
  154. package/dist/memory/stream-buffer-store.d.ts +69 -0
  155. package/dist/memory/stream-buffer-store.d.ts.map +1 -0
  156. package/dist/memory/stream-buffer-store.js +182 -0
  157. package/dist/memory/stream-buffer-store.js.map +1 -0
  158. package/dist/memory/tool-call-store.d.ts +68 -0
  159. package/dist/memory/tool-call-store.d.ts.map +1 -0
  160. package/dist/memory/tool-call-store.js +189 -0
  161. package/dist/memory/tool-call-store.js.map +1 -0
  162. package/dist/memory/types.d.ts +197 -0
  163. package/dist/memory/types.d.ts.map +1 -0
  164. package/dist/memory/types.js +15 -0
  165. package/dist/memory/types.js.map +1 -0
  166. package/dist/memory/utils.d.ts +30 -0
  167. package/dist/memory/utils.d.ts.map +1 -0
  168. package/dist/memory/utils.js +47 -0
  169. package/dist/memory/utils.js.map +1 -0
  170. package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
  171. package/dist/payments/facilitator-rpc-fallback.js +95 -0
  172. package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
  173. package/dist/payments/hosted-tool-eligibility.d.ts +22 -0
  174. package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -0
  175. package/dist/payments/hosted-tool-eligibility.js +173 -0
  176. package/dist/payments/hosted-tool-eligibility.js.map +1 -0
  177. package/dist/payments/index.d.ts +2 -2
  178. package/dist/payments/index.d.ts.map +1 -1
  179. package/dist/payments/index.js +1 -1
  180. package/dist/payments/index.js.map +1 -1
  181. package/dist/payments/mcp-session-cache.d.ts +35 -0
  182. package/dist/payments/mcp-session-cache.d.ts.map +1 -0
  183. package/dist/payments/mcp-session-cache.js +83 -0
  184. package/dist/payments/mcp-session-cache.js.map +1 -0
  185. package/dist/payments/monetization-gate.d.ts +33 -0
  186. package/dist/payments/monetization-gate.d.ts.map +1 -1
  187. package/dist/payments/monetization-gate.js +124 -12
  188. package/dist/payments/monetization-gate.js.map +1 -1
  189. package/dist/payments/pricing.d.ts +31 -0
  190. package/dist/payments/pricing.d.ts.map +1 -1
  191. package/dist/payments/pricing.js +317 -19
  192. package/dist/payments/pricing.js.map +1 -1
  193. package/dist/payments/usage-ledger.d.ts +36 -2
  194. package/dist/payments/usage-ledger.d.ts.map +1 -1
  195. package/dist/payments/usage-ledger.js +121 -4
  196. package/dist/payments/usage-ledger.js.map +1 -1
  197. package/dist/payments/x402-paid-call.d.ts +121 -0
  198. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  199. package/dist/payments/x402-paid-call.js +428 -1
  200. package/dist/payments/x402-paid-call.js.map +1 -1
  201. package/dist/policy/default-policies.d.ts +18 -2
  202. package/dist/policy/default-policies.d.ts.map +1 -1
  203. package/dist/policy/default-policies.js +18 -2
  204. package/dist/policy/default-policies.js.map +1 -1
  205. package/dist/policy/index.d.ts +6 -3
  206. package/dist/policy/index.d.ts.map +1 -1
  207. package/dist/policy/index.js +6 -3
  208. package/dist/policy/index.js.map +1 -1
  209. package/dist/policy/local-policy-engine.d.ts +71 -13
  210. package/dist/policy/local-policy-engine.d.ts.map +1 -1
  211. package/dist/policy/local-policy-engine.js +33 -11
  212. package/dist/policy/local-policy-engine.js.map +1 -1
  213. package/dist/policy/permission-checks.d.ts +29 -3
  214. package/dist/policy/permission-checks.d.ts.map +1 -1
  215. package/dist/policy/permission-checks.js +29 -3
  216. package/dist/policy/permission-checks.js.map +1 -1
  217. package/dist/policy/policy-engine.d.ts +22 -2
  218. package/dist/policy/policy-engine.d.ts.map +1 -1
  219. package/dist/policy/policy-engine.js +22 -2
  220. package/dist/policy/policy-engine.js.map +1 -1
  221. package/dist/policy/policy-types.d.ts +55 -5
  222. package/dist/policy/policy-types.d.ts.map +1 -1
  223. package/dist/policy/policy-types.js +8 -1
  224. package/dist/policy/policy-types.js.map +1 -1
  225. package/dist/policy/risk-level.d.ts +32 -3
  226. package/dist/policy/risk-level.d.ts.map +1 -1
  227. package/dist/policy/risk-level.js +32 -3
  228. package/dist/policy/risk-level.js.map +1 -1
  229. package/dist/policy/spending-limits.d.ts +29 -3
  230. package/dist/policy/spending-limits.d.ts.map +1 -1
  231. package/dist/policy/spending-limits.js +29 -3
  232. package/dist/policy/spending-limits.js.map +1 -1
  233. package/dist/premium/activation-manager.d.ts +43 -0
  234. package/dist/premium/activation-manager.d.ts.map +1 -0
  235. package/dist/premium/activation-manager.js +131 -0
  236. package/dist/premium/activation-manager.js.map +1 -0
  237. package/dist/premium/builtin-plugins.d.ts +165 -0
  238. package/dist/premium/builtin-plugins.d.ts.map +1 -0
  239. package/dist/premium/builtin-plugins.js +422 -0
  240. package/dist/premium/builtin-plugins.js.map +1 -0
  241. package/dist/premium/event-store.d.ts +61 -0
  242. package/dist/premium/event-store.d.ts.map +1 -0
  243. package/dist/premium/event-store.js +130 -0
  244. package/dist/premium/event-store.js.map +1 -0
  245. package/dist/premium/index.d.ts +54 -0
  246. package/dist/premium/index.d.ts.map +1 -0
  247. package/dist/premium/index.js +54 -0
  248. package/dist/premium/index.js.map +1 -0
  249. package/dist/premium/manifest-builder.d.ts +65 -0
  250. package/dist/premium/manifest-builder.d.ts.map +1 -0
  251. package/dist/premium/manifest-builder.js +182 -0
  252. package/dist/premium/manifest-builder.js.map +1 -0
  253. package/dist/premium/meme-radar-capabilities.d.ts +38 -0
  254. package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
  255. package/dist/premium/meme-radar-capabilities.js +306 -0
  256. package/dist/premium/meme-radar-capabilities.js.map +1 -0
  257. package/dist/premium/metrics.d.ts +27 -0
  258. package/dist/premium/metrics.d.ts.map +1 -0
  259. package/dist/premium/metrics.js +65 -0
  260. package/dist/premium/metrics.js.map +1 -0
  261. package/dist/premium/plugin-validator.d.ts +39 -0
  262. package/dist/premium/plugin-validator.d.ts.map +1 -0
  263. package/dist/premium/plugin-validator.js +325 -0
  264. package/dist/premium/plugin-validator.js.map +1 -0
  265. package/dist/premium/private-manifest-loader.d.ts +111 -0
  266. package/dist/premium/private-manifest-loader.d.ts.map +1 -0
  267. package/dist/premium/private-manifest-loader.js +285 -0
  268. package/dist/premium/private-manifest-loader.js.map +1 -0
  269. package/dist/premium/provider-bridge.d.ts +133 -0
  270. package/dist/premium/provider-bridge.d.ts.map +1 -0
  271. package/dist/premium/provider-bridge.js +349 -0
  272. package/dist/premium/provider-bridge.js.map +1 -0
  273. package/dist/premium/session-manager.d.ts +125 -0
  274. package/dist/premium/session-manager.d.ts.map +1 -0
  275. package/dist/premium/session-manager.js +337 -0
  276. package/dist/premium/session-manager.js.map +1 -0
  277. package/dist/premium/stream-broker.d.ts +98 -0
  278. package/dist/premium/stream-broker.d.ts.map +1 -0
  279. package/dist/premium/stream-broker.js +199 -0
  280. package/dist/premium/stream-broker.js.map +1 -0
  281. package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
  282. package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
  283. package/dist/premium/tech-fundamentals-capabilities.js +283 -0
  284. package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
  285. package/dist/premium/trading-capabilities.d.ts +36 -0
  286. package/dist/premium/trading-capabilities.d.ts.map +1 -0
  287. package/dist/premium/trading-capabilities.js +205 -0
  288. package/dist/premium/trading-capabilities.js.map +1 -0
  289. package/dist/premium/types.d.ts +518 -0
  290. package/dist/premium/types.d.ts.map +1 -0
  291. package/dist/premium/types.js +23 -0
  292. package/dist/premium/types.js.map +1 -0
  293. package/dist/premium/webhook-engine.d.ts +138 -0
  294. package/dist/premium/webhook-engine.d.ts.map +1 -0
  295. package/dist/premium/webhook-engine.js +516 -0
  296. package/dist/premium/webhook-engine.js.map +1 -0
  297. package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
  298. package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
  299. package/dist/prompts/context/sap-agent-context.prompt.js +20 -16
  300. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  301. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
  302. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
  303. package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
  304. package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
  305. package/dist/prompts/context/sap-agent-start.prompt.js +7 -0
  306. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
  307. package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
  308. package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
  309. package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
  310. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
  311. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
  312. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
  313. package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
  314. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  315. package/dist/prompts/developer/index.d.ts +4 -1
  316. package/dist/prompts/developer/index.d.ts.map +1 -1
  317. package/dist/prompts/developer/index.js +4 -1
  318. package/dist/prompts/developer/index.js.map +1 -1
  319. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
  320. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
  321. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
  322. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
  323. package/dist/prompts/execution-proof/index.d.ts +4 -1
  324. package/dist/prompts/execution-proof/index.d.ts.map +1 -1
  325. package/dist/prompts/execution-proof/index.js +4 -1
  326. package/dist/prompts/execution-proof/index.js.map +1 -1
  327. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
  328. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
  329. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
  330. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
  331. package/dist/prompts/index.d.ts +4 -1
  332. package/dist/prompts/index.d.ts.map +1 -1
  333. package/dist/prompts/index.js +4 -1
  334. package/dist/prompts/index.js.map +1 -1
  335. package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
  336. package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
  337. package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
  338. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
  339. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
  340. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
  341. package/dist/prompts/payments/explain-x402-settlement.prompt.js +4 -5
  342. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  343. package/dist/prompts/payments/index.d.ts +4 -1
  344. package/dist/prompts/payments/index.d.ts.map +1 -1
  345. package/dist/prompts/payments/index.js +4 -1
  346. package/dist/prompts/payments/index.js.map +1 -1
  347. package/dist/prompts/register-prompts.d.ts +18 -2
  348. package/dist/prompts/register-prompts.d.ts.map +1 -1
  349. package/dist/prompts/register-prompts.js +21 -3
  350. package/dist/prompts/register-prompts.js.map +1 -1
  351. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
  352. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
  353. package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
  354. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
  355. package/dist/prompts/registry/index.d.ts +4 -1
  356. package/dist/prompts/registry/index.d.ts.map +1 -1
  357. package/dist/prompts/registry/index.js +4 -1
  358. package/dist/prompts/registry/index.js.map +1 -1
  359. package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
  360. package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
  361. package/dist/prompts/registry/register-sap-agent.prompt.js +22 -23
  362. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
  363. package/dist/remote/premium-memory.d.ts +90 -0
  364. package/dist/remote/premium-memory.d.ts.map +1 -0
  365. package/dist/remote/premium-memory.js +161 -0
  366. package/dist/remote/premium-memory.js.map +1 -0
  367. package/dist/remote/premium-routes.d.ts +99 -0
  368. package/dist/remote/premium-routes.d.ts.map +1 -0
  369. package/dist/remote/premium-routes.js +347 -0
  370. package/dist/remote/premium-routes.js.map +1 -0
  371. package/dist/remote/public-home/sections.d.ts.map +1 -1
  372. package/dist/remote/public-home/sections.js +23 -4
  373. package/dist/remote/public-home/sections.js.map +1 -1
  374. package/dist/remote/public-home/types.d.ts +9 -0
  375. package/dist/remote/public-home/types.d.ts.map +1 -1
  376. package/dist/remote/server.d.ts +20 -0
  377. package/dist/remote/server.d.ts.map +1 -1
  378. package/dist/remote/server.js +369 -8
  379. package/dist/remote/server.js.map +1 -1
  380. package/dist/remote/tx-relay.d.ts +42 -0
  381. package/dist/remote/tx-relay.d.ts.map +1 -0
  382. package/dist/remote/tx-relay.js +118 -0
  383. package/dist/remote/tx-relay.js.map +1 -0
  384. package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
  385. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
  386. package/dist/resources/current/sap-current-config.resource.js +2 -5
  387. package/dist/resources/current/sap-current-config.resource.js.map +1 -1
  388. package/dist/resources/execution-proof/index.d.ts +5 -0
  389. package/dist/resources/execution-proof/index.d.ts.map +1 -1
  390. package/dist/resources/execution-proof/index.js +5 -0
  391. package/dist/resources/execution-proof/index.js.map +1 -1
  392. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
  393. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
  394. package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
  395. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
  396. package/dist/resources/index.d.ts +5 -0
  397. package/dist/resources/index.d.ts.map +1 -1
  398. package/dist/resources/index.js +5 -0
  399. package/dist/resources/index.js.map +1 -1
  400. package/dist/resources/memory/index.d.ts +5 -0
  401. package/dist/resources/memory/index.d.ts.map +1 -1
  402. package/dist/resources/memory/index.js +5 -0
  403. package/dist/resources/memory/index.js.map +1 -1
  404. package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
  405. package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
  406. package/dist/resources/memory/sap-memory.resource.js +3 -4
  407. package/dist/resources/memory/sap-memory.resource.js.map +1 -1
  408. package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
  409. package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
  410. package/dist/resources/profile/sap-active-profile.resource.js +2 -5
  411. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
  412. package/dist/resources/register-resources.d.ts +5 -0
  413. package/dist/resources/register-resources.d.ts.map +1 -1
  414. package/dist/resources/register-resources.js +3 -1
  415. package/dist/resources/register-resources.js.map +1 -1
  416. package/dist/resources/registry/index.d.ts +5 -0
  417. package/dist/resources/registry/index.d.ts.map +1 -1
  418. package/dist/resources/registry/index.js +5 -0
  419. package/dist/resources/registry/index.js.map +1 -1
  420. package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
  421. package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
  422. package/dist/resources/registry/sap-agent.resource.js +3 -4
  423. package/dist/resources/registry/sap-agent.resource.js.map +1 -1
  424. package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
  425. package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
  426. package/dist/resources/registry/sap-global-registry.resource.js +18 -4
  427. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
  428. package/dist/resources/reputation/index.d.ts +4 -1
  429. package/dist/resources/reputation/index.d.ts.map +1 -1
  430. package/dist/resources/reputation/index.js +4 -1
  431. package/dist/resources/reputation/index.js.map +1 -1
  432. package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
  433. package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
  434. package/dist/resources/reputation/sap-reputation.resource.js +18 -4
  435. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
  436. package/dist/resources/tool-schema/index.d.ts +4 -1
  437. package/dist/resources/tool-schema/index.d.ts.map +1 -1
  438. package/dist/resources/tool-schema/index.js +4 -1
  439. package/dist/resources/tool-schema/index.js.map +1 -1
  440. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
  441. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
  442. package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
  443. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
  444. package/dist/sap/index.d.ts +7 -1
  445. package/dist/sap/index.d.ts.map +1 -1
  446. package/dist/sap/index.js +7 -1
  447. package/dist/sap/index.js.map +1 -1
  448. package/dist/sap/sap-client-manager.d.ts +80 -13
  449. package/dist/sap/sap-client-manager.d.ts.map +1 -1
  450. package/dist/sap/sap-client-manager.js +80 -13
  451. package/dist/sap/sap-client-manager.js.map +1 -1
  452. package/dist/sap/sap-errors.d.ts +22 -3
  453. package/dist/sap/sap-errors.d.ts.map +1 -1
  454. package/dist/sap/sap-errors.js +22 -3
  455. package/dist/sap/sap-errors.js.map +1 -1
  456. package/dist/sap/sap-types.d.ts +75 -6
  457. package/dist/sap/sap-types.d.ts.map +1 -1
  458. package/dist/sap/sap-types.js +11 -1
  459. package/dist/sap/sap-types.js.map +1 -1
  460. package/dist/schemas/common.schema.d.ts +45 -8
  461. package/dist/schemas/common.schema.d.ts.map +1 -1
  462. package/dist/schemas/common.schema.js +45 -8
  463. package/dist/schemas/common.schema.js.map +1 -1
  464. package/dist/schemas/developer.schema.d.ts +22 -3
  465. package/dist/schemas/developer.schema.d.ts.map +1 -1
  466. package/dist/schemas/developer.schema.js +22 -3
  467. package/dist/schemas/developer.schema.js.map +1 -1
  468. package/dist/schemas/execution-proof.schema.d.ts +29 -4
  469. package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
  470. package/dist/schemas/execution-proof.schema.js +29 -4
  471. package/dist/schemas/execution-proof.schema.js.map +1 -1
  472. package/dist/schemas/identity.schema.d.ts +23 -3
  473. package/dist/schemas/identity.schema.d.ts.map +1 -1
  474. package/dist/schemas/identity.schema.js +23 -3
  475. package/dist/schemas/identity.schema.js.map +1 -1
  476. package/dist/schemas/index.d.ts +11 -1
  477. package/dist/schemas/index.d.ts.map +1 -1
  478. package/dist/schemas/index.js +11 -1
  479. package/dist/schemas/index.js.map +1 -1
  480. package/dist/schemas/memory.schema.d.ts +23 -3
  481. package/dist/schemas/memory.schema.d.ts.map +1 -1
  482. package/dist/schemas/memory.schema.js +23 -3
  483. package/dist/schemas/memory.schema.js.map +1 -1
  484. package/dist/schemas/payments.schema.d.ts +24 -3
  485. package/dist/schemas/payments.schema.d.ts.map +1 -1
  486. package/dist/schemas/payments.schema.js +24 -3
  487. package/dist/schemas/payments.schema.js.map +1 -1
  488. package/dist/schemas/registry.schema.d.ts +38 -6
  489. package/dist/schemas/registry.schema.d.ts.map +1 -1
  490. package/dist/schemas/registry.schema.js +36 -4
  491. package/dist/schemas/registry.schema.js.map +1 -1
  492. package/dist/schemas/reputation.schema.d.ts +22 -3
  493. package/dist/schemas/reputation.schema.d.ts.map +1 -1
  494. package/dist/schemas/reputation.schema.js +22 -3
  495. package/dist/schemas/reputation.schema.js.map +1 -1
  496. package/dist/schemas/settlement.schema.d.ts +31 -4
  497. package/dist/schemas/settlement.schema.d.ts.map +1 -1
  498. package/dist/schemas/settlement.schema.js +31 -4
  499. package/dist/schemas/settlement.schema.js.map +1 -1
  500. package/dist/schemas/tool-schema.schema.d.ts +29 -3
  501. package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
  502. package/dist/schemas/tool-schema.schema.js +29 -3
  503. package/dist/schemas/tool-schema.schema.js.map +1 -1
  504. package/dist/schemas/transaction.schema.d.ts +23 -3
  505. package/dist/schemas/transaction.schema.d.ts.map +1 -1
  506. package/dist/schemas/transaction.schema.js +23 -3
  507. package/dist/schemas/transaction.schema.js.map +1 -1
  508. package/dist/security/approval-required.d.ts +19 -2
  509. package/dist/security/approval-required.d.ts.map +1 -1
  510. package/dist/security/approval-required.js +19 -2
  511. package/dist/security/approval-required.js.map +1 -1
  512. package/dist/security/index.d.ts +7 -1
  513. package/dist/security/index.d.ts.map +1 -1
  514. package/dist/security/index.js +7 -1
  515. package/dist/security/index.js.map +1 -1
  516. package/dist/security/private-key-guard.d.ts +18 -2
  517. package/dist/security/private-key-guard.d.ts.map +1 -1
  518. package/dist/security/private-key-guard.js +19 -2
  519. package/dist/security/private-key-guard.js.map +1 -1
  520. package/dist/security/prompt-injection-notes.d.ts +10 -1
  521. package/dist/security/prompt-injection-notes.d.ts.map +1 -1
  522. package/dist/security/prompt-injection-notes.js +10 -1
  523. package/dist/security/prompt-injection-notes.js.map +1 -1
  524. package/dist/security/tool-permissions.d.ts.map +1 -1
  525. package/dist/security/tool-permissions.js +12 -0
  526. package/dist/security/tool-permissions.js.map +1 -1
  527. package/dist/security/unsafe-action-guard.d.ts +36 -10
  528. package/dist/security/unsafe-action-guard.d.ts.map +1 -1
  529. package/dist/security/unsafe-action-guard.js +67 -15
  530. package/dist/security/unsafe-action-guard.js.map +1 -1
  531. package/dist/server/create-server.d.ts +18 -3
  532. package/dist/server/create-server.d.ts.map +1 -1
  533. package/dist/server/create-server.js +18 -3
  534. package/dist/server/create-server.js.map +1 -1
  535. package/dist/server/index.d.ts +6 -1
  536. package/dist/server/index.d.ts.map +1 -1
  537. package/dist/server/index.js +6 -1
  538. package/dist/server/index.js.map +1 -1
  539. package/dist/server/register-capabilities.d.ts +17 -2
  540. package/dist/server/register-capabilities.d.ts.map +1 -1
  541. package/dist/server/register-capabilities.js +17 -2
  542. package/dist/server/register-capabilities.js.map +1 -1
  543. package/dist/server/server-metadata.d.ts +35 -1
  544. package/dist/server/server-metadata.d.ts.map +1 -1
  545. package/dist/server/server-metadata.js +36 -2
  546. package/dist/server/server-metadata.js.map +1 -1
  547. package/dist/session/agent-session.d.ts +35 -4
  548. package/dist/session/agent-session.d.ts.map +1 -1
  549. package/dist/session/agent-session.js +35 -4
  550. package/dist/session/agent-session.js.map +1 -1
  551. package/dist/session/delegated-session.d.ts +31 -3
  552. package/dist/session/delegated-session.d.ts.map +1 -1
  553. package/dist/session/delegated-session.js +31 -3
  554. package/dist/session/delegated-session.js.map +1 -1
  555. package/dist/session/index.d.ts +7 -1
  556. package/dist/session/index.d.ts.map +1 -1
  557. package/dist/session/index.js +7 -1
  558. package/dist/session/index.js.map +1 -1
  559. package/dist/session/redis-session-store.d.ts +94 -21
  560. package/dist/session/redis-session-store.d.ts.map +1 -1
  561. package/dist/session/redis-session-store.js +87 -20
  562. package/dist/session/redis-session-store.js.map +1 -1
  563. package/dist/session/session-limits.d.ts +34 -4
  564. package/dist/session/session-limits.d.ts.map +1 -1
  565. package/dist/session/session-limits.js +34 -4
  566. package/dist/session/session-limits.js.map +1 -1
  567. package/dist/session/session-permissions.d.ts +57 -7
  568. package/dist/session/session-permissions.d.ts.map +1 -1
  569. package/dist/session/session-permissions.js +57 -7
  570. package/dist/session/session-permissions.js.map +1 -1
  571. package/dist/session/session-store.d.ts +9 -1
  572. package/dist/session/session-store.d.ts.map +1 -1
  573. package/dist/session/session-store.js +18 -3
  574. package/dist/session/session-store.js.map +1 -1
  575. package/dist/session/session-types.d.ts +33 -4
  576. package/dist/session/session-types.d.ts.map +1 -1
  577. package/dist/session/session-types.js +9 -1
  578. package/dist/session/session-types.js.map +1 -1
  579. package/dist/signer/index.d.ts +7 -1
  580. package/dist/signer/index.d.ts.map +1 -1
  581. package/dist/signer/index.js +7 -1
  582. package/dist/signer/index.js.map +1 -1
  583. package/dist/signer/load-keypair.d.ts +25 -4
  584. package/dist/signer/load-keypair.d.ts.map +1 -1
  585. package/dist/signer/load-keypair.js +25 -4
  586. package/dist/signer/load-keypair.js.map +1 -1
  587. package/dist/signer/local-keypair-signer.d.ts +19 -3
  588. package/dist/signer/local-keypair-signer.d.ts.map +1 -1
  589. package/dist/signer/local-keypair-signer.js +24 -4
  590. package/dist/signer/local-keypair-signer.js.map +1 -1
  591. package/dist/signer/signer-resolver.d.ts +19 -2
  592. package/dist/signer/signer-resolver.d.ts.map +1 -1
  593. package/dist/signer/signer-resolver.js +26 -3
  594. package/dist/signer/signer-resolver.js.map +1 -1
  595. package/dist/signer/signer-types.d.ts +47 -5
  596. package/dist/signer/signer-types.d.ts.map +1 -1
  597. package/dist/signer/signer-types.js +13 -1
  598. package/dist/signer/signer-types.js.map +1 -1
  599. package/dist/strategies/strategy-store.d.ts +82 -0
  600. package/dist/strategies/strategy-store.d.ts.map +1 -0
  601. package/dist/strategies/strategy-store.js +165 -0
  602. package/dist/strategies/strategy-store.js.map +1 -0
  603. package/dist/tools/agent-start-tool.d.ts.map +1 -1
  604. package/dist/tools/agent-start-tool.js +481 -5
  605. package/dist/tools/agent-start-tool.js.map +1 -1
  606. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  607. package/dist/tools/client-sdk-tools.js +32 -7
  608. package/dist/tools/client-sdk-tools.js.map +1 -1
  609. package/dist/tools/estimate-tool-cost.d.ts +13 -0
  610. package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
  611. package/dist/tools/estimate-tool-cost.js +139 -0
  612. package/dist/tools/estimate-tool-cost.js.map +1 -0
  613. package/dist/tools/index.d.ts +8 -0
  614. package/dist/tools/index.d.ts.map +1 -1
  615. package/dist/tools/index.js +11 -0
  616. package/dist/tools/index.js.map +1 -1
  617. package/dist/tools/magicblock-tools.d.ts +31 -6
  618. package/dist/tools/magicblock-tools.d.ts.map +1 -1
  619. package/dist/tools/magicblock-tools.js +178 -53
  620. package/dist/tools/magicblock-tools.js.map +1 -1
  621. package/dist/tools/memory-tools.d.ts +26 -0
  622. package/dist/tools/memory-tools.d.ts.map +1 -0
  623. package/dist/tools/memory-tools.js +533 -0
  624. package/dist/tools/memory-tools.js.map +1 -0
  625. package/dist/tools/perp-tools.d.ts +39 -0
  626. package/dist/tools/perp-tools.d.ts.map +1 -0
  627. package/dist/tools/perp-tools.js +1110 -0
  628. package/dist/tools/perp-tools.js.map +1 -0
  629. package/dist/tools/premium-tools.d.ts +8 -0
  630. package/dist/tools/premium-tools.d.ts.map +1 -0
  631. package/dist/tools/premium-tools.js +1102 -0
  632. package/dist/tools/premium-tools.js.map +1 -0
  633. package/dist/tools/profile-tools.d.ts.map +1 -1
  634. package/dist/tools/profile-tools.js +18 -1
  635. package/dist/tools/profile-tools.js.map +1 -1
  636. package/dist/tools/quick-context-tool.d.ts +16 -0
  637. package/dist/tools/quick-context-tool.d.ts.map +1 -0
  638. package/dist/tools/quick-context-tool.js +304 -0
  639. package/dist/tools/quick-context-tool.js.map +1 -0
  640. package/dist/tools/register-tools.d.ts.map +1 -1
  641. package/dist/tools/register-tools.js +17 -0
  642. package/dist/tools/register-tools.js.map +1 -1
  643. package/dist/tools/sap-sdk-tools.d.ts +419 -0
  644. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  645. package/dist/tools/sap-sdk-tools.js +1547 -126
  646. package/dist/tools/sap-sdk-tools.js.map +1 -1
  647. package/dist/tools/sap-sns-tools.d.ts +2 -2
  648. package/dist/tools/sap-sns-tools.d.ts.map +1 -1
  649. package/dist/tools/sap-sns-tools.js +12 -8
  650. package/dist/tools/sap-sns-tools.js.map +1 -1
  651. package/dist/tools/skills-tools.d.ts +16 -0
  652. package/dist/tools/skills-tools.d.ts.map +1 -1
  653. package/dist/tools/skills-tools.js +282 -5
  654. package/dist/tools/skills-tools.js.map +1 -1
  655. package/dist/tools/tool-aliases.d.ts.map +1 -1
  656. package/dist/tools/tool-aliases.js +7 -0
  657. package/dist/tools/tool-aliases.js.map +1 -1
  658. package/dist/tools/transaction-tools.d.ts +135 -0
  659. package/dist/tools/transaction-tools.d.ts.map +1 -1
  660. package/dist/tools/transaction-tools.js +515 -16
  661. package/dist/tools/transaction-tools.js.map +1 -1
  662. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  663. package/dist/tools/x402-paid-call-tool.js +756 -23
  664. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  665. package/dist/transports/index.d.ts +6 -1
  666. package/dist/transports/index.d.ts.map +1 -1
  667. package/dist/transports/index.js +6 -1
  668. package/dist/transports/index.js.map +1 -1
  669. package/dist/transports/stdio.d.ts +17 -5
  670. package/dist/transports/stdio.d.ts.map +1 -1
  671. package/dist/transports/stdio.js +17 -5
  672. package/dist/transports/stdio.js.map +1 -1
  673. package/dist/tui/wizard-save.d.ts +88 -8
  674. package/dist/tui/wizard-save.d.ts.map +1 -1
  675. package/dist/tui/wizard-save.js +77 -8
  676. package/dist/tui/wizard-save.js.map +1 -1
  677. package/dist/wizard-core/desktop-flow.d.ts.map +1 -1
  678. package/dist/wizard-core/desktop-flow.js +4 -2
  679. package/dist/wizard-core/desktop-flow.js.map +1 -1
  680. package/docs/03_CONFIGURATION_AND_WIZARD.md +5 -3
  681. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +82 -4
  682. package/docs/07_ENDPOINTS_AND_CLIENTS.md +7 -3
  683. package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +21 -3
  684. package/docs/14_DESKTOP_WIZARD_RELEASE.md +8 -6
  685. package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +304 -0
  686. package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
  687. package/docs/BRANCH_AND_CI.md +67 -0
  688. package/docs/README.md +19 -2
  689. package/docs/magicblock-tools.md +70 -29
  690. package/package.json +10 -6
  691. package/server.json +3 -3
  692. package/skills/README.md +12 -2
  693. package/skills/sap-agent-registry/SKILL.md +99 -4
  694. package/skills/sap-defi/SKILL.md +8 -4
  695. package/skills/sap-discovery-indexing/SKILL.md +26 -4
  696. package/skills/sap-escrow-settlement/SKILL.md +22 -4
  697. package/skills/sap-mcp/SKILL.md +140 -22
  698. package/skills/sap-mcp/TOOL_REFERENCE.md +47 -7
  699. package/skills/sap-nft-metaplex/SKILL.md +22 -0
  700. package/skills/sap-operations/SKILL.md +32 -3
  701. package/skills/sap-payments-x402/SKILL.md +85 -8
  702. package/skills/sap-sns/SKILL.md +32 -10
  703. package/smithery.config.schema.json +7 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @name premium/webhook-engine
3
+ * @description Signed webhook delivery engine for premium event callbacks.
4
+ *
5
+ * After a session is activated, the webhook engine registers a buyer-owned
6
+ * HTTPS endpoint, subscribes to the provider for matching events, signs each
7
+ * delivery with HMAC-SHA256, and dispatches it via HTTP POST.
8
+ *
9
+ * The engine enforces:
10
+ * - Event filtering: only delivers event ids listed in the subscription.
11
+ * - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
12
+ * - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
13
+ * the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
14
+ * - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
15
+ * - Unit quota: decrements after each successful delivery.
16
+ * - Idempotency: deduplicates via `eventId` in the event store.
17
+ *
18
+ * @flow
19
+ * 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
20
+ * 2. → `registerWebhook()` validates URL, creates subscription.
21
+ * 3. Engine subscribes to provider, receives events matching the subscription.
22
+ * 4. For each matching event: sign, POST to targetUrl, record delivery.
23
+ * 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
24
+ *
25
+ * @module premium/webhook-engine
26
+ */
27
+ import type { PremiumWebhookDelivery, PremiumWebhookSubscription } from './types.js';
28
+ /**
29
+ * @name registerWebhook
30
+ * @description Register a webhook subscription for an active premium session.
31
+ *
32
+ * @param sessionId - The activated premium session id.
33
+ * @param targetUrl - HTTPS endpoint owned by the buyer.
34
+ * @param events - Exact event ids to deliver.
35
+ * @param signingPublicKey - Optional buyer public key for signature verification.
36
+ * @returns The `PremiumWebhookSubscription`, or `null` if the session is not
37
+ * active or the URL is invalid.
38
+ *
39
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
40
+ * `remote/server.ts` → `POST /premium/webhook/register`
41
+ */
42
+ export declare function registerWebhook(sessionId: string, targetUrl: string, events: string[], signingPublicKey?: string): Promise<PremiumWebhookSubscription | null>;
43
+ /**
44
+ * @name RELAY_TARGET_URL_EXPORT
45
+ * @description Exported relay sentinel so premium-tools and tests can reference it
46
+ * without duplicating the literal.
47
+ */
48
+ export declare const PREMIUM_WEBHOOK_RELAY_TARGET_URL = "relay://buffer";
49
+ /**
50
+ * @name registerWebhookRelay
51
+ * @description Register a buffer-only (relay) webhook subscription for an active
52
+ * premium session.
53
+ *
54
+ * Unlike `registerWebhook`, this does not require a public HTTPS endpoint.
55
+ * Events matching the subscription are appended to the event store by the
56
+ * delivery loop and the agent consumes them via `sap_premium_stream_poll` or
57
+ * `sap_premium_stream_flush`. This solves the core problem for agents running
58
+ * locally without a publicly reachable HTTPS callback URL.
59
+ *
60
+ * @param sessionId - The activated premium session id.
61
+ * @param events - Exact event ids to buffer.
62
+ * @returns The `PremiumWebhookSubscription`, or `null` if the session is not
63
+ * active or no events were provided.
64
+ *
65
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay`
66
+ */
67
+ export declare function registerWebhookRelay(sessionId: string, events: string[]): Promise<PremiumWebhookSubscription | null>;
68
+ /**
69
+ * @name getRelaySubscriptionsForSession
70
+ * @description Return all active relay (buffer-only) webhook subscriptions for a
71
+ * session id. Used by the relay status tool to report buffered event counts.
72
+ *
73
+ * @param sessionId - The premium session id.
74
+ * @returns Array of relay subscriptions for the session.
75
+ *
76
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay_status`
77
+ */
78
+ export declare function getRelaySubscriptionsForSession(sessionId: string): PremiumWebhookSubscription[];
79
+ /**
80
+ * @name startWebhookDelivery
81
+ * @description Start the webhook delivery loop for a subscription.
82
+ *
83
+ * Subscribes to the provider, receives events, filters by the subscription's
84
+ * event list, signs and delivers each matching event, and decrements the
85
+ * session quota. Stops when the quota reaches zero or the subscription is
86
+ * deactivated.
87
+ *
88
+ * @param subscription - The webhook subscription to deliver for.
89
+ *
90
+ * @usedBy `remote/server.ts` → webhook delivery worker
91
+ */
92
+ export declare function startWebhookDelivery(subscription: PremiumWebhookSubscription): Promise<void>;
93
+ /**
94
+ * @name unregisterWebhook
95
+ * @description Deactivate and remove a webhook subscription.
96
+ *
97
+ * @param subscriptionId - The webhook subscription id.
98
+ * @returns True if the subscription was found and removed.
99
+ *
100
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
101
+ */
102
+ export declare function unregisterWebhook(subscriptionId: string): boolean;
103
+ /**
104
+ * @name getWebhookSubscription
105
+ * @description Retrieve a webhook subscription by id.
106
+ *
107
+ * @param subscriptionId - The webhook subscription id.
108
+ * @returns The subscription, or `null` if not found.
109
+ *
110
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
111
+ */
112
+ export declare function getWebhookSubscription(subscriptionId: string): PremiumWebhookSubscription | null;
113
+ /**
114
+ * @name getWebhookDeliveries
115
+ * @description Retrieve delivery records for a subscription.
116
+ *
117
+ * @param subscriptionId - The webhook subscription id.
118
+ * @param limit - Maximum records to return (default 50).
119
+ * @returns Array of `PremiumWebhookDelivery` records.
120
+ *
121
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
122
+ */
123
+ export declare function getWebhookDeliveries(subscriptionId: string, limit?: number): PremiumWebhookDelivery[];
124
+ /**
125
+ * @name getActiveWebhookCount
126
+ * @description Return the number of currently active webhook subscriptions.
127
+ *
128
+ * @usedBy `metrics.ts`
129
+ */
130
+ export declare function getActiveWebhookCount(): number;
131
+ /**
132
+ * @name stopAllWebhooks
133
+ * @description Deactivate all webhook subscriptions. Called during graceful shutdown.
134
+ *
135
+ * @usedBy `remote/server.ts` shutdown handler
136
+ */
137
+ export declare function stopAllWebhooks(): void;
138
+ //# sourceMappingURL=webhook-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-engine.d.ts","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,EAAiB,MAAM,YAAY,CAAC;AAwPpG;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAwB5C;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAuB5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAQ/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ElG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,0BAA0B,GAAG,IAAI,CAGhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,sBAAsB,EAAE,CASjG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
@@ -0,0 +1,516 @@
1
+ /**
2
+ * @name premium/webhook-engine
3
+ * @description Signed webhook delivery engine for premium event callbacks.
4
+ *
5
+ * After a session is activated, the webhook engine registers a buyer-owned
6
+ * HTTPS endpoint, subscribes to the provider for matching events, signs each
7
+ * delivery with HMAC-SHA256, and dispatches it via HTTP POST.
8
+ *
9
+ * The engine enforces:
10
+ * - Event filtering: only delivers event ids listed in the subscription.
11
+ * - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
12
+ * - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
13
+ * the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
14
+ * - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
15
+ * - Unit quota: decrements after each successful delivery.
16
+ * - Idempotency: deduplicates via `eventId` in the event store.
17
+ *
18
+ * @flow
19
+ * 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
20
+ * 2. → `registerWebhook()` validates URL, creates subscription.
21
+ * 3. Engine subscribes to provider, receives events matching the subscription.
22
+ * 4. For each matching event: sign, POST to targetUrl, record delivery.
23
+ * 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
24
+ *
25
+ * @module premium/webhook-engine
26
+ */
27
+ import { createHmac, randomUUID } from 'node:crypto';
28
+ import { request } from 'node:https';
29
+ import { request as httpRequest } from 'node:http';
30
+ import { URL } from 'node:url';
31
+ import { getPremiumSession, decrementSessionQuota, closeSession } from './session-manager.js';
32
+ import { subscribeToProvider } from './provider-bridge.js';
33
+ import { appendEvent } from './event-store.js';
34
+ /**
35
+ * @description Registry of active webhook subscriptions keyed by subscription id.
36
+ */
37
+ const webhookSubscriptions = new Map();
38
+ /**
39
+ * @description Delivery attempt records keyed by delivery id.
40
+ */
41
+ const deliveryRecords = new Map();
42
+ /**
43
+ * @description Hard cap on stored delivery records.
44
+ *
45
+ * Default: 100_000 (tuned for a 312GB RAM production server).
46
+ * Each record is ~512B, so 100K records ≈ 50MB.
47
+ * Override via `SAP_MCP_PREMIUM_MAX_DELIVERIES` env var.
48
+ */
49
+ const MAX_DELIVERY_RECORDS = (() => {
50
+ const raw = process.env.SAP_MCP_PREMIUM_MAX_DELIVERIES;
51
+ const parsed = Number(raw);
52
+ return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 100_000;
53
+ })();
54
+ /**
55
+ * @description Maximum retry attempts per delivery.
56
+ */
57
+ const MAX_RETRIES = 3;
58
+ /**
59
+ * @description Base delay for exponential backoff in milliseconds.
60
+ */
61
+ const RETRY_BASE_DELAY_MS = 500;
62
+ /**
63
+ * @name RELAY_TARGET_URL
64
+ * @description Sentinel target URL for buffer-only (relay) webhook subscriptions.
65
+ *
66
+ * When a subscription's `targetUrl` equals this value, the webhook engine skips
67
+ * HTTP POST delivery entirely. Events are still appended to the event store via
68
+ * `appendEvent()`, and the agent consumes them through
69
+ * `sap_premium_stream_poll` / `sap_premium_stream_flush`. This eliminates the
70
+ * need for a public HTTPS endpoint — agents running locally can receive webhook
71
+ * events by polling the server-side buffer.
72
+ *
73
+ * @internal
74
+ */
75
+ const RELAY_TARGET_URL = 'relay://buffer';
76
+ /**
77
+ * @name isRelayTarget
78
+ * @description Returns true when a target URL is the buffer-only relay sentinel.
79
+ *
80
+ * @param targetUrl - The target URL to check.
81
+ * @returns True if the URL is the relay buffer sentinel.
82
+ *
83
+ * @internal
84
+ */
85
+ function isRelayTarget(targetUrl) {
86
+ return targetUrl === RELAY_TARGET_URL;
87
+ }
88
+ /**
89
+ * @name validateWebhookUrl
90
+ * @description Validate that a webhook target URL is safe for delivery.
91
+ *
92
+ * Accepts the relay sentinel `relay://buffer` as a buffer-only delivery mode
93
+ * that never makes an outbound HTTP call.
94
+ *
95
+ * Rejects:
96
+ * - Non-HTTPS URLs in production (allow HTTP for localhost testing).
97
+ * - localhost, 127.0.0.1, 0.0.0.0, private network ranges (10.x, 172.16-31.x, 192.168.x).
98
+ *
99
+ * @param targetUrl - The URL to validate.
100
+ * @returns True if the URL is safe for webhook delivery.
101
+ *
102
+ * @internal
103
+ */
104
+ function validateWebhookUrl(targetUrl) {
105
+ // The relay sentinel is always valid — it never makes an outbound HTTP call.
106
+ if (isRelayTarget(targetUrl))
107
+ return true;
108
+ let parsed;
109
+ try {
110
+ parsed = new URL(targetUrl);
111
+ }
112
+ catch {
113
+ return false;
114
+ }
115
+ // Must be HTTPS in production. Allow HTTP only for localhost testing.
116
+ const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
117
+ if (parsed.protocol !== 'https:' && !isLocalhost)
118
+ return false;
119
+ // Block private network ranges (SSRF prevention).
120
+ const host = parsed.hostname;
121
+ if (host.startsWith('10.') ||
122
+ host.startsWith('172.16.') || host.startsWith('172.17.') || host.startsWith('172.18.') ||
123
+ host.startsWith('172.19.') || host.startsWith('172.20.') || host.startsWith('172.21.') ||
124
+ host.startsWith('172.22.') || host.startsWith('172.23.') || host.startsWith('172.24.') ||
125
+ host.startsWith('172.25.') || host.startsWith('172.26.') || host.startsWith('172.27.') ||
126
+ host.startsWith('172.28.') || host.startsWith('172.29.') || host.startsWith('172.30.') ||
127
+ host.startsWith('172.31.') ||
128
+ host.startsWith('192.168.') ||
129
+ host === '0.0.0.0' ||
130
+ host === '::1' ||
131
+ host.startsWith('fe80:')) {
132
+ return false;
133
+ }
134
+ return true;
135
+ }
136
+ /**
137
+ * @name signDelivery
138
+ * @description Sign a webhook delivery payload with HMAC-SHA256.
139
+ *
140
+ * The signature is computed over the string `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`
141
+ * using the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var as the key.
142
+ *
143
+ * @param deliveryId - The unique delivery id.
144
+ * @param deliveredAt - ISO timestamp of the delivery.
145
+ * @param payload - The event payload to sign.
146
+ * @returns Hex-encoded HMAC-SHA256 signature.
147
+ *
148
+ * @internal
149
+ */
150
+ function signDelivery(deliveryId, deliveredAt, payload) {
151
+ const key = process.env.SAP_MCP_PREMIUM_WEBHOOK_SIGNER;
152
+ if (!key) {
153
+ throw new Error('SAP_MCP_PREMIUM_WEBHOOK_SIGNER is not set — webhook delivery requires a configured signing key');
154
+ }
155
+ const message = `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`;
156
+ return createHmac('sha256', key).update(message).digest('hex');
157
+ }
158
+ /**
159
+ * @name deliverWebhook
160
+ * @description Deliver a single event to a webhook target URL with retries.
161
+ *
162
+ * @param subscription - The webhook subscription.
163
+ * @param event - The provider event to deliver.
164
+ * @returns The `PremiumWebhookDelivery` record for this attempt.
165
+ *
166
+ * @internal
167
+ */
168
+ async function deliverWebhook(subscription, event) {
169
+ const deliveryId = `wh-delivery-${randomUUID()}`;
170
+ const deliveredAt = new Date().toISOString();
171
+ const signature = signDelivery(deliveryId, deliveredAt, event.payload);
172
+ const body = JSON.stringify({
173
+ deliveryId,
174
+ eventType: event.eventType,
175
+ deliveredAt,
176
+ signature,
177
+ payload: event.payload,
178
+ });
179
+ let httpStatus = null;
180
+ let success = false;
181
+ let responseBody;
182
+ let retryCount = 0;
183
+ const parsedUrl = new URL(subscription.targetUrl);
184
+ const isHttps = parsedUrl.protocol === 'https:';
185
+ const reqFn = isHttps ? request : httpRequest;
186
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
187
+ retryCount = attempt;
188
+ try {
189
+ const response = await new Promise((resolve, reject) => {
190
+ const req = reqFn({
191
+ hostname: parsedUrl.hostname,
192
+ port: parsedUrl.port || (isHttps ? 443 : 80),
193
+ path: `${parsedUrl.pathname}${parsedUrl.search}`,
194
+ method: 'POST',
195
+ headers: {
196
+ 'Content-Type': 'application/json',
197
+ 'Content-Length': Buffer.byteLength(body),
198
+ 'X-SAP-Premium-Delivery-Id': deliveryId,
199
+ 'X-SAP-Premium-Signature': signature,
200
+ },
201
+ timeout: 10_000,
202
+ }, (res) => {
203
+ let data = '';
204
+ res.on('data', (chunk) => { data += chunk.toString(); });
205
+ res.on('end', () => resolve({ status: res.statusCode ?? 0, body: data }));
206
+ });
207
+ req.on('error', reject);
208
+ req.on('timeout', () => { req.destroy(); reject(new Error('Webhook delivery timeout.')); });
209
+ req.write(body);
210
+ req.end();
211
+ });
212
+ httpStatus = response.status;
213
+ responseBody = response.body.slice(0, 512);
214
+ success = response.status >= 200 && response.status < 300;
215
+ if (success)
216
+ break;
217
+ }
218
+ catch (error) {
219
+ responseBody = error instanceof Error ? error.message : 'Unknown delivery error.';
220
+ }
221
+ if (attempt < MAX_RETRIES) {
222
+ await new Promise(resolve => setTimeout(resolve, RETRY_BASE_DELAY_MS * 2 ** attempt));
223
+ }
224
+ }
225
+ const delivery = {
226
+ deliveryId,
227
+ subscriptionId: subscription.subscriptionId,
228
+ eventId: event.eventId,
229
+ eventType: event.eventType,
230
+ deliveredAt,
231
+ signature,
232
+ httpStatus,
233
+ success,
234
+ responseBody,
235
+ retryCount,
236
+ };
237
+ // Store delivery record with cap.
238
+ deliveryRecords.set(deliveryId, delivery);
239
+ if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
240
+ const oldestKey = deliveryRecords.keys().next().value;
241
+ if (oldestKey)
242
+ deliveryRecords.delete(oldestKey);
243
+ }
244
+ // Update subscription stats.
245
+ subscription.deliveriesAttempted++;
246
+ if (success)
247
+ subscription.deliveriesSucceeded++;
248
+ subscription.lastDeliveryAt = deliveredAt;
249
+ subscription.lastDeliveryStatus = httpStatus;
250
+ return delivery;
251
+ }
252
+ /**
253
+ * @name registerWebhook
254
+ * @description Register a webhook subscription for an active premium session.
255
+ *
256
+ * @param sessionId - The activated premium session id.
257
+ * @param targetUrl - HTTPS endpoint owned by the buyer.
258
+ * @param events - Exact event ids to deliver.
259
+ * @param signingPublicKey - Optional buyer public key for signature verification.
260
+ * @returns The `PremiumWebhookSubscription`, or `null` if the session is not
261
+ * active or the URL is invalid.
262
+ *
263
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
264
+ * `remote/server.ts` → `POST /premium/webhook/register`
265
+ */
266
+ export async function registerWebhook(sessionId, targetUrl, events, signingPublicKey) {
267
+ const session = getPremiumSession(sessionId);
268
+ if (!session || session.status !== 'active')
269
+ return null;
270
+ if (!validateWebhookUrl(targetUrl))
271
+ return null;
272
+ if (events.length === 0)
273
+ return null;
274
+ const subscription = {
275
+ subscriptionId: `wh-sub-${randomUUID()}`,
276
+ sessionId,
277
+ pluginId: session.pluginId,
278
+ capabilityId: session.capabilityId,
279
+ targetUrl,
280
+ events,
281
+ signingPublicKey,
282
+ createdAt: new Date().toISOString(),
283
+ deliveriesAttempted: 0,
284
+ deliveriesSucceeded: 0,
285
+ lastDeliveryAt: null,
286
+ lastDeliveryStatus: null,
287
+ active: true,
288
+ };
289
+ webhookSubscriptions.set(subscription.subscriptionId, subscription);
290
+ return subscription;
291
+ }
292
+ /**
293
+ * @name RELAY_TARGET_URL_EXPORT
294
+ * @description Exported relay sentinel so premium-tools and tests can reference it
295
+ * without duplicating the literal.
296
+ */
297
+ export const PREMIUM_WEBHOOK_RELAY_TARGET_URL = RELAY_TARGET_URL;
298
+ /**
299
+ * @name registerWebhookRelay
300
+ * @description Register a buffer-only (relay) webhook subscription for an active
301
+ * premium session.
302
+ *
303
+ * Unlike `registerWebhook`, this does not require a public HTTPS endpoint.
304
+ * Events matching the subscription are appended to the event store by the
305
+ * delivery loop and the agent consumes them via `sap_premium_stream_poll` or
306
+ * `sap_premium_stream_flush`. This solves the core problem for agents running
307
+ * locally without a publicly reachable HTTPS callback URL.
308
+ *
309
+ * @param sessionId - The activated premium session id.
310
+ * @param events - Exact event ids to buffer.
311
+ * @returns The `PremiumWebhookSubscription`, or `null` if the session is not
312
+ * active or no events were provided.
313
+ *
314
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay`
315
+ */
316
+ export async function registerWebhookRelay(sessionId, events) {
317
+ const session = getPremiumSession(sessionId);
318
+ if (!session || session.status !== 'active')
319
+ return null;
320
+ if (events.length === 0)
321
+ return null;
322
+ const subscription = {
323
+ subscriptionId: `wh-relay-${randomUUID()}`,
324
+ sessionId,
325
+ pluginId: session.pluginId,
326
+ capabilityId: session.capabilityId,
327
+ targetUrl: RELAY_TARGET_URL,
328
+ events,
329
+ signingPublicKey: undefined,
330
+ createdAt: new Date().toISOString(),
331
+ deliveriesAttempted: 0,
332
+ deliveriesSucceeded: 0,
333
+ lastDeliveryAt: null,
334
+ lastDeliveryStatus: null,
335
+ active: true,
336
+ };
337
+ webhookSubscriptions.set(subscription.subscriptionId, subscription);
338
+ return subscription;
339
+ }
340
+ /**
341
+ * @name getRelaySubscriptionsForSession
342
+ * @description Return all active relay (buffer-only) webhook subscriptions for a
343
+ * session id. Used by the relay status tool to report buffered event counts.
344
+ *
345
+ * @param sessionId - The premium session id.
346
+ * @returns Array of relay subscriptions for the session.
347
+ *
348
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay_status`
349
+ */
350
+ export function getRelaySubscriptionsForSession(sessionId) {
351
+ const results = [];
352
+ for (const sub of webhookSubscriptions.values()) {
353
+ if (sub.sessionId === sessionId && isRelayTarget(sub.targetUrl)) {
354
+ results.push({ ...sub });
355
+ }
356
+ }
357
+ return results;
358
+ }
359
+ /**
360
+ * @name startWebhookDelivery
361
+ * @description Start the webhook delivery loop for a subscription.
362
+ *
363
+ * Subscribes to the provider, receives events, filters by the subscription's
364
+ * event list, signs and delivers each matching event, and decrements the
365
+ * session quota. Stops when the quota reaches zero or the subscription is
366
+ * deactivated.
367
+ *
368
+ * @param subscription - The webhook subscription to deliver for.
369
+ *
370
+ * @usedBy `remote/server.ts` → webhook delivery worker
371
+ */
372
+ export async function startWebhookDelivery(subscription) {
373
+ const iterable = await subscribeToProvider(subscription.pluginId, subscription.capabilityId, {});
374
+ if (!iterable) {
375
+ console.error(`[webhook-engine] Failed to start delivery loop for ${subscription.subscriptionId}: ` +
376
+ `provider adapter not available for ${subscription.pluginId}:${subscription.capabilityId}. ` +
377
+ `Check SAP_MCP_ENABLE_PREMIUM_PLUGINS, SAP_MCP_PLUGIN_DIR, and that providers are compiled (.js).`);
378
+ return;
379
+ }
380
+ console.log(`[webhook-engine] Delivery loop started for ${subscription.subscriptionId} ` +
381
+ `(${subscription.pluginId}:${subscription.capabilityId}, events: ${subscription.events.join(', ')}).`);
382
+ for await (const event of iterable) {
383
+ if (!subscription.active)
384
+ break;
385
+ // Filter: only deliver events listed in the subscription.
386
+ if (!subscription.events.includes(event.eventType))
387
+ continue;
388
+ // Store the event for replay/idempotency.
389
+ appendEvent({
390
+ eventId: event.eventId,
391
+ sessionId: subscription.sessionId,
392
+ pluginId: subscription.pluginId,
393
+ capabilityId: subscription.capabilityId,
394
+ eventType: event.eventType,
395
+ observedAt: event.observedAt,
396
+ payload: event.payload,
397
+ deliveredAt: new Date().toISOString(),
398
+ });
399
+ // Relay (buffer-only) mode: skip HTTP POST delivery entirely.
400
+ // The event is already in the event store; the agent consumes it via
401
+ // sap_premium_stream_poll / sap_premium_stream_flush.
402
+ if (isRelayTarget(subscription.targetUrl)) {
403
+ subscription.deliveriesAttempted++;
404
+ subscription.deliveriesSucceeded++;
405
+ subscription.lastDeliveryAt = new Date().toISOString();
406
+ subscription.lastDeliveryStatus = 200;
407
+ const relayDelivery = {
408
+ deliveryId: `wh-relay-${randomUUID()}`,
409
+ subscriptionId: subscription.subscriptionId,
410
+ eventId: event.eventId,
411
+ eventType: event.eventType,
412
+ deliveredAt: new Date().toISOString(),
413
+ signature: 'relay-buffer',
414
+ httpStatus: 200,
415
+ success: true,
416
+ responseBody: 'Buffered for agent poll consumption.',
417
+ retryCount: 0,
418
+ };
419
+ deliveryRecords.set(relayDelivery.deliveryId, relayDelivery);
420
+ if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
421
+ const oldestKey = deliveryRecords.keys().next().value;
422
+ if (oldestKey)
423
+ deliveryRecords.delete(oldestKey);
424
+ }
425
+ }
426
+ else {
427
+ // Deliver via HTTP POST with retries.
428
+ await deliverWebhook(subscription, event);
429
+ }
430
+ // Decrement quota and auto-close at zero.
431
+ const remaining = decrementSessionQuota(subscription.sessionId);
432
+ if (remaining <= 0) {
433
+ subscription.active = false;
434
+ closeSession(subscription.sessionId, 'Webhook unit quota exhausted.');
435
+ break;
436
+ }
437
+ }
438
+ }
439
+ /**
440
+ * @name unregisterWebhook
441
+ * @description Deactivate and remove a webhook subscription.
442
+ *
443
+ * @param subscriptionId - The webhook subscription id.
444
+ * @returns True if the subscription was found and removed.
445
+ *
446
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
447
+ */
448
+ export function unregisterWebhook(subscriptionId) {
449
+ const subscription = webhookSubscriptions.get(subscriptionId);
450
+ if (!subscription)
451
+ return false;
452
+ subscription.active = false;
453
+ webhookSubscriptions.delete(subscriptionId);
454
+ return true;
455
+ }
456
+ /**
457
+ * @name getWebhookSubscription
458
+ * @description Retrieve a webhook subscription by id.
459
+ *
460
+ * @param subscriptionId - The webhook subscription id.
461
+ * @returns The subscription, or `null` if not found.
462
+ *
463
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
464
+ */
465
+ export function getWebhookSubscription(subscriptionId) {
466
+ const sub = webhookSubscriptions.get(subscriptionId);
467
+ return sub ? { ...sub } : null;
468
+ }
469
+ /**
470
+ * @name getWebhookDeliveries
471
+ * @description Retrieve delivery records for a subscription.
472
+ *
473
+ * @param subscriptionId - The webhook subscription id.
474
+ * @param limit - Maximum records to return (default 50).
475
+ * @returns Array of `PremiumWebhookDelivery` records.
476
+ *
477
+ * @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
478
+ */
479
+ export function getWebhookDeliveries(subscriptionId, limit = 50) {
480
+ const results = [];
481
+ for (const delivery of deliveryRecords.values()) {
482
+ if (delivery.subscriptionId === subscriptionId) {
483
+ results.push(delivery);
484
+ if (results.length >= limit)
485
+ break;
486
+ }
487
+ }
488
+ return results;
489
+ }
490
+ /**
491
+ * @name getActiveWebhookCount
492
+ * @description Return the number of currently active webhook subscriptions.
493
+ *
494
+ * @usedBy `metrics.ts`
495
+ */
496
+ export function getActiveWebhookCount() {
497
+ let count = 0;
498
+ for (const sub of webhookSubscriptions.values()) {
499
+ if (sub.active)
500
+ count++;
501
+ }
502
+ return count;
503
+ }
504
+ /**
505
+ * @name stopAllWebhooks
506
+ * @description Deactivate all webhook subscriptions. Called during graceful shutdown.
507
+ *
508
+ * @usedBy `remote/server.ts` shutdown handler
509
+ */
510
+ export function stopAllWebhooks() {
511
+ for (const sub of webhookSubscriptions.values()) {
512
+ sub.active = false;
513
+ }
514
+ webhookSubscriptions.clear();
515
+ }
516
+ //# sourceMappingURL=webhook-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-engine.js","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"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"}