mppx 0.8.15 → 0.8.17

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 (464) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/Challenge.d.ts.map +1 -1
  3. package/dist/Challenge.js +40 -35
  4. package/dist/Challenge.js.map +1 -1
  5. package/dist/Constants.d.ts +17 -17
  6. package/dist/Constants.d.ts.map +1 -1
  7. package/dist/Credential.d.ts.map +1 -1
  8. package/dist/Errors.d.ts +3 -3
  9. package/dist/Errors.d.ts.map +1 -1
  10. package/dist/Errors.js.map +1 -1
  11. package/dist/Method.d.ts +35 -5
  12. package/dist/Method.d.ts.map +1 -1
  13. package/dist/Method.js +7 -22
  14. package/dist/Method.js.map +1 -1
  15. package/dist/Store.d.ts +19 -0
  16. package/dist/Store.d.ts.map +1 -1
  17. package/dist/Store.js +43 -0
  18. package/dist/Store.js.map +1 -1
  19. package/dist/attestation/Client.d.ts +17 -0
  20. package/dist/attestation/Client.d.ts.map +1 -0
  21. package/dist/attestation/Client.js +28 -0
  22. package/dist/attestation/Client.js.map +1 -0
  23. package/dist/attestation/Constants.d.ts +15 -0
  24. package/dist/attestation/Constants.d.ts.map +1 -0
  25. package/dist/attestation/Constants.js +15 -0
  26. package/dist/attestation/Constants.js.map +1 -0
  27. package/dist/attestation/Server.d.ts +4 -0
  28. package/dist/attestation/Server.d.ts.map +1 -0
  29. package/dist/attestation/Server.js +8 -0
  30. package/dist/attestation/Server.js.map +1 -0
  31. package/dist/attestation/Types.d.ts +76 -0
  32. package/dist/attestation/Types.d.ts.map +1 -0
  33. package/dist/attestation/Types.js +2 -0
  34. package/dist/attestation/Types.js.map +1 -0
  35. package/dist/attestation/index.d.ts +6 -0
  36. package/dist/attestation/index.d.ts.map +1 -0
  37. package/dist/attestation/index.js +6 -0
  38. package/dist/attestation/index.js.map +1 -0
  39. package/dist/attestation/internal/HttpMessageSignature.d.ts +73 -0
  40. package/dist/attestation/internal/HttpMessageSignature.d.ts.map +1 -0
  41. package/dist/attestation/internal/HttpMessageSignature.js +320 -0
  42. package/dist/attestation/internal/HttpMessageSignature.js.map +1 -0
  43. package/dist/attestation/internal/SigningContext.d.ts +4 -0
  44. package/dist/attestation/internal/SigningContext.d.ts.map +1 -0
  45. package/dist/attestation/internal/SigningContext.js +11 -0
  46. package/dist/attestation/internal/SigningContext.js.map +1 -0
  47. package/dist/cli/account.d.ts +14 -14
  48. package/dist/cli/account.d.ts.map +1 -1
  49. package/dist/cli/cli.d.ts +6 -6
  50. package/dist/cli/cli.d.ts.map +1 -1
  51. package/dist/cli/cli.js +1 -0
  52. package/dist/cli/cli.js.map +1 -1
  53. package/dist/cli/plugins/tempo.js.map +1 -1
  54. package/dist/cli/sessions/commands.d.ts +4 -4
  55. package/dist/cli/sessions/commands.d.ts.map +1 -1
  56. package/dist/cli/sessions/commands.js.map +1 -1
  57. package/dist/cli/sessions/store.d.ts.map +1 -1
  58. package/dist/cli/sessions/store.js.map +1 -1
  59. package/dist/cli/utils.d.ts +1 -1
  60. package/dist/cli/utils.d.ts.map +1 -1
  61. package/dist/cli/utils.js.map +1 -1
  62. package/dist/cli/validate/discovery.js.map +1 -1
  63. package/dist/cli/validate/index.d.ts +3 -3
  64. package/dist/cli/validate/index.d.ts.map +1 -1
  65. package/dist/client/Mppx.d.ts +3 -0
  66. package/dist/client/Mppx.d.ts.map +1 -1
  67. package/dist/client/Mppx.js +13 -5
  68. package/dist/client/Mppx.js.map +1 -1
  69. package/dist/client/Transport.d.ts +3 -5
  70. package/dist/client/Transport.d.ts.map +1 -1
  71. package/dist/client/Transport.js +1 -17
  72. package/dist/client/Transport.js.map +1 -1
  73. package/dist/client/internal/Fetch.d.ts.map +1 -1
  74. package/dist/client/internal/Fetch.js +2 -6
  75. package/dist/client/internal/Fetch.js.map +1 -1
  76. package/dist/client/node.js.map +1 -1
  77. package/dist/discovery/OpenApi.d.ts +3 -5
  78. package/dist/discovery/OpenApi.d.ts.map +1 -1
  79. package/dist/discovery/OpenApi.js +13 -34
  80. package/dist/discovery/OpenApi.js.map +1 -1
  81. package/dist/discovery/internal/Metadata.d.ts +20 -0
  82. package/dist/discovery/internal/Metadata.d.ts.map +1 -0
  83. package/dist/discovery/internal/Metadata.js +36 -0
  84. package/dist/discovery/internal/Metadata.js.map +1 -0
  85. package/dist/evm/Methods.d.ts +11 -11
  86. package/dist/evm/Methods.d.ts.map +1 -1
  87. package/dist/evm/Types.d.ts +17 -17
  88. package/dist/evm/Types.d.ts.map +1 -1
  89. package/dist/evm/client/Charge.d.ts +11 -11
  90. package/dist/evm/client/Methods.d.ts +11 -11
  91. package/dist/evm/server/Charge.d.ts +1 -1
  92. package/dist/evm/server/Charge.d.ts.map +1 -1
  93. package/dist/evm/server/Charge.js +2 -0
  94. package/dist/evm/server/Charge.js.map +1 -1
  95. package/dist/evm/server/Methods.d.ts +11 -11
  96. package/dist/internal/HeaderCodec.d.ts +2 -2
  97. package/dist/internal/HeaderCodec.d.ts.map +1 -1
  98. package/dist/internal/types.d.ts +6 -0
  99. package/dist/internal/types.d.ts.map +1 -1
  100. package/dist/middlewares/elysia.js.map +1 -1
  101. package/dist/middlewares/express.js.map +1 -1
  102. package/dist/middlewares/hono.js.map +1 -1
  103. package/dist/middlewares/nextjs.js.map +1 -1
  104. package/dist/proxy/Proxy.d.ts +2 -0
  105. package/dist/proxy/Proxy.d.ts.map +1 -1
  106. package/dist/proxy/Proxy.js +117 -9
  107. package/dist/proxy/Proxy.js.map +1 -1
  108. package/dist/proxy/Service.d.ts +36 -1
  109. package/dist/proxy/Service.d.ts.map +1 -1
  110. package/dist/proxy/Service.js +9 -8
  111. package/dist/proxy/Service.js.map +1 -1
  112. package/dist/proxy/services/anthropic.d.ts.map +1 -1
  113. package/dist/proxy/services/anthropic.js +1 -0
  114. package/dist/proxy/services/anthropic.js.map +1 -1
  115. package/dist/proxy/services/openai.d.ts.map +1 -1
  116. package/dist/proxy/services/openai.js +1 -0
  117. package/dist/proxy/services/openai.js.map +1 -1
  118. package/dist/proxy/services/stripe.d.ts.map +1 -1
  119. package/dist/proxy/services/stripe.js +1 -0
  120. package/dist/proxy/services/stripe.js.map +1 -1
  121. package/dist/server/Mppx.d.ts +75 -13
  122. package/dist/server/Mppx.d.ts.map +1 -1
  123. package/dist/server/Mppx.js +201 -23
  124. package/dist/server/Mppx.js.map +1 -1
  125. package/dist/server/internal/html/config.d.ts +9 -9
  126. package/dist/server/internal/html/config.d.ts.map +1 -1
  127. package/dist/server/internal/html/constants.d.ts +17 -17
  128. package/dist/server/internal/html/constants.d.ts.map +1 -1
  129. package/dist/stripe/Methods.d.ts +10 -10
  130. package/dist/stripe/Methods.d.ts.map +1 -1
  131. package/dist/stripe/client/Charge.d.ts +10 -10
  132. package/dist/stripe/client/Methods.d.ts +10 -10
  133. package/dist/stripe/internal/constants.d.ts +1 -1
  134. package/dist/stripe/internal/constants.js +1 -1
  135. package/dist/stripe/internal/types.d.ts +1 -0
  136. package/dist/stripe/internal/types.d.ts.map +1 -1
  137. package/dist/stripe/server/Charge.d.ts +11 -11
  138. package/dist/stripe/server/Charge.d.ts.map +1 -1
  139. package/dist/stripe/server/Charge.js +49 -1
  140. package/dist/stripe/server/Charge.js.map +1 -1
  141. package/dist/stripe/server/Methods.d.ts +137 -48
  142. package/dist/stripe/server/Methods.d.ts.map +1 -1
  143. package/dist/stripe/server/Methods.js +259 -4
  144. package/dist/stripe/server/Methods.js.map +1 -1
  145. package/dist/stripe/server/internal/deposit-address.d.ts +13 -0
  146. package/dist/stripe/server/internal/deposit-address.d.ts.map +1 -0
  147. package/dist/stripe/server/internal/deposit-address.js +28 -0
  148. package/dist/stripe/server/internal/deposit-address.js.map +1 -0
  149. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  150. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  151. package/dist/stripe/server/internal/html.gen.js +1 -1
  152. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  153. package/dist/stripe/server/internal/record-payment.d.ts +15 -0
  154. package/dist/stripe/server/internal/record-payment.d.ts.map +1 -0
  155. package/dist/stripe/server/internal/record-payment.js +42 -0
  156. package/dist/stripe/server/internal/record-payment.js.map +1 -0
  157. package/dist/stripe/server/internal/request.d.ts +25 -0
  158. package/dist/stripe/server/internal/request.d.ts.map +1 -0
  159. package/dist/stripe/server/internal/request.js +29 -0
  160. package/dist/stripe/server/internal/request.js.map +1 -0
  161. package/dist/tap/Constants.d.ts +28 -0
  162. package/dist/tap/Constants.d.ts.map +1 -0
  163. package/dist/tap/Constants.js +32 -0
  164. package/dist/tap/Constants.js.map +1 -0
  165. package/dist/tap/Types.d.ts +11 -0
  166. package/dist/tap/Types.d.ts.map +1 -0
  167. package/dist/tap/Types.js +2 -0
  168. package/dist/tap/Types.js.map +1 -0
  169. package/dist/tap/client/index.d.ts +26 -0
  170. package/dist/tap/client/index.d.ts.map +1 -0
  171. package/dist/tap/client/index.js +33 -0
  172. package/dist/tap/client/index.js.map +1 -0
  173. package/dist/tap/index.d.ts +5 -0
  174. package/dist/tap/index.d.ts.map +1 -0
  175. package/dist/tap/index.js +5 -0
  176. package/dist/tap/index.js.map +1 -0
  177. package/dist/tap/server/index.d.ts +20 -0
  178. package/dist/tap/server/index.d.ts.map +1 -0
  179. package/dist/tap/server/index.js +36 -0
  180. package/dist/tap/server/index.js.map +1 -0
  181. package/dist/tempo/Attribution.d.ts +1 -1
  182. package/dist/tempo/Methods.d.ts +60 -60
  183. package/dist/tempo/Methods.d.ts.map +1 -1
  184. package/dist/tempo/Proof.d.ts +16 -16
  185. package/dist/tempo/client/Charge.d.ts +19 -19
  186. package/dist/tempo/client/Charge.d.ts.map +1 -1
  187. package/dist/tempo/client/Charge.js +1 -7
  188. package/dist/tempo/client/Charge.js.map +1 -1
  189. package/dist/tempo/client/Methods.d.ts +38 -38
  190. package/dist/tempo/client/Methods.js.map +1 -1
  191. package/dist/tempo/client/Subscription.d.ts +23 -23
  192. package/dist/tempo/client/Subscription.js.map +1 -1
  193. package/dist/tempo/internal/address.d.ts +2 -1
  194. package/dist/tempo/internal/address.d.ts.map +1 -1
  195. package/dist/tempo/internal/address.js +3 -1
  196. package/dist/tempo/internal/address.js.map +1 -1
  197. package/dist/tempo/internal/auto-swap.d.ts.map +1 -1
  198. package/dist/tempo/internal/auto-swap.js +4 -19
  199. package/dist/tempo/internal/auto-swap.js.map +1 -1
  200. package/dist/tempo/internal/defaults.d.ts +6 -6
  201. package/dist/tempo/internal/defaults.d.ts.map +1 -1
  202. package/dist/tempo/internal/fee-payer.d.ts +12 -12
  203. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  204. package/dist/tempo/internal/fee-payer.js.map +1 -1
  205. package/dist/tempo/internal/proof.d.ts +17 -17
  206. package/dist/tempo/internal/proof.d.ts.map +1 -1
  207. package/dist/tempo/legacy/client/Session.d.ts +20 -20
  208. package/dist/tempo/legacy/client/Session.js.map +1 -1
  209. package/dist/tempo/legacy/client/SessionManager.js.map +1 -1
  210. package/dist/tempo/legacy/index.d.ts +1 -3
  211. package/dist/tempo/legacy/index.d.ts.map +1 -1
  212. package/dist/tempo/legacy/index.js +1 -3
  213. package/dist/tempo/legacy/index.js.map +1 -1
  214. package/dist/tempo/legacy/session/escrow.abi.d.ts +374 -374
  215. package/dist/tempo/legacy/session/escrow.abi.d.ts.map +1 -1
  216. package/dist/tempo/server/Charge.d.ts +25 -11
  217. package/dist/tempo/server/Charge.d.ts.map +1 -1
  218. package/dist/tempo/server/Charge.js +44 -39
  219. package/dist/tempo/server/Charge.js.map +1 -1
  220. package/dist/tempo/server/Methods.d.ts +37 -52
  221. package/dist/tempo/server/Methods.d.ts.map +1 -1
  222. package/dist/tempo/server/Methods.js +0 -14
  223. package/dist/tempo/server/Methods.js.map +1 -1
  224. package/dist/tempo/server/Relay.d.ts +1 -1
  225. package/dist/tempo/server/Relay.d.ts.map +1 -1
  226. package/dist/tempo/server/Relay.js +2 -2
  227. package/dist/tempo/server/Relay.js.map +1 -1
  228. package/dist/tempo/server/Subscription.d.ts +25 -25
  229. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  230. package/dist/tempo/server/Subscription.js +2 -0
  231. package/dist/tempo/server/Subscription.js.map +1 -1
  232. package/dist/tempo/server/index.d.ts +1 -1
  233. package/dist/tempo/server/index.d.ts.map +1 -1
  234. package/dist/tempo/server/index.js +1 -1
  235. package/dist/tempo/server/index.js.map +1 -1
  236. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  237. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  238. package/dist/tempo/server/internal/html.gen.js +1 -1
  239. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  240. package/dist/tempo/server/internal/transport.d.ts +2 -0
  241. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  242. package/dist/tempo/server/internal/transport.js +9 -2
  243. package/dist/tempo/server/internal/transport.js.map +1 -1
  244. package/dist/tempo/session/client/ChannelOps.js.map +1 -1
  245. package/dist/tempo/session/client/CredentialState.d.ts +1 -1
  246. package/dist/tempo/session/client/CredentialState.js.map +1 -1
  247. package/dist/tempo/session/client/ReceiptCoordinator.js.map +1 -1
  248. package/dist/tempo/session/client/Runtime.js.map +1 -1
  249. package/dist/tempo/session/client/Session.d.ts +19 -19
  250. package/dist/tempo/session/client/Session.js.map +1 -1
  251. package/dist/tempo/session/client/SessionManager.js.map +1 -1
  252. package/dist/tempo/session/client/Transports.d.ts.map +1 -1
  253. package/dist/tempo/session/precompile/Chain.d.ts +27 -0
  254. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -1
  255. package/dist/tempo/session/precompile/Chain.js +68 -7
  256. package/dist/tempo/session/precompile/Chain.js.map +1 -1
  257. package/dist/tempo/session/precompile/Protocol.js.map +1 -1
  258. package/dist/tempo/session/precompile/Voucher.d.ts +4 -4
  259. package/dist/tempo/session/precompile/Voucher.d.ts.map +1 -1
  260. package/dist/tempo/session/precompile/escrow.abi.d.ts +306 -306
  261. package/dist/tempo/session/precompile/escrow.abi.d.ts.map +1 -1
  262. package/dist/tempo/session/server/ChannelStore.d.ts +9 -0
  263. package/dist/tempo/session/server/ChannelStore.d.ts.map +1 -1
  264. package/dist/tempo/session/server/ChannelStore.js +16 -8
  265. package/dist/tempo/session/server/ChannelStore.js.map +1 -1
  266. package/dist/tempo/session/server/CredentialVerification.d.ts +30 -13
  267. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
  268. package/dist/tempo/session/server/CredentialVerification.js +207 -13
  269. package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
  270. package/dist/tempo/session/server/MeteredStream.d.ts +3 -0
  271. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -1
  272. package/dist/tempo/session/server/MeteredStream.js +3 -1
  273. package/dist/tempo/session/server/MeteredStream.js.map +1 -1
  274. package/dist/tempo/session/server/Session.d.ts +32 -21
  275. package/dist/tempo/session/server/Session.d.ts.map +1 -1
  276. package/dist/tempo/session/server/Session.js +116 -53
  277. package/dist/tempo/session/server/Session.js.map +1 -1
  278. package/dist/tempo/session/server/Sse.d.ts +3 -1
  279. package/dist/tempo/session/server/Sse.d.ts.map +1 -1
  280. package/dist/tempo/session/server/Sse.js +2 -1
  281. package/dist/tempo/session/server/Sse.js.map +1 -1
  282. package/dist/tempo/session/server/Transports.d.ts +1 -1
  283. package/dist/tempo/session/server/Transports.d.ts.map +1 -1
  284. package/dist/tempo/session/server/Transports.js +1 -0
  285. package/dist/tempo/session/server/Transports.js.map +1 -1
  286. package/dist/tempo/session/server/Ws.d.ts +6 -1
  287. package/dist/tempo/session/server/Ws.d.ts.map +1 -1
  288. package/dist/tempo/session/server/Ws.js +1 -0
  289. package/dist/tempo/session/server/Ws.js.map +1 -1
  290. package/dist/tempo/subscription/KeyAuthorization.d.ts +39 -39
  291. package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
  292. package/dist/viem/Account.d.ts.map +1 -1
  293. package/dist/viem/Account.js.map +1 -1
  294. package/dist/web-bot-auth/Constants.d.ts +20 -0
  295. package/dist/web-bot-auth/Constants.d.ts.map +1 -0
  296. package/dist/web-bot-auth/Constants.js +24 -0
  297. package/dist/web-bot-auth/Constants.js.map +1 -0
  298. package/dist/web-bot-auth/Types.d.ts +10 -0
  299. package/dist/web-bot-auth/Types.d.ts.map +1 -0
  300. package/dist/web-bot-auth/Types.js +2 -0
  301. package/dist/web-bot-auth/Types.js.map +1 -0
  302. package/dist/web-bot-auth/client/index.d.ts +29 -0
  303. package/dist/web-bot-auth/client/index.d.ts.map +1 -0
  304. package/dist/web-bot-auth/client/index.js +64 -0
  305. package/dist/web-bot-auth/client/index.js.map +1 -0
  306. package/dist/web-bot-auth/index.d.ts +7 -0
  307. package/dist/web-bot-auth/index.d.ts.map +1 -0
  308. package/dist/web-bot-auth/index.js +7 -0
  309. package/dist/web-bot-auth/index.js.map +1 -0
  310. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts +5 -0
  311. package/dist/web-bot-auth/internal/JwkThumbprint.d.ts.map +1 -0
  312. package/dist/web-bot-auth/internal/JwkThumbprint.js +20 -0
  313. package/dist/web-bot-auth/internal/JwkThumbprint.js.map +1 -0
  314. package/dist/web-bot-auth/internal/SignatureAgent.d.ts +3 -0
  315. package/dist/web-bot-auth/internal/SignatureAgent.d.ts.map +1 -0
  316. package/dist/web-bot-auth/internal/SignatureAgent.js +18 -0
  317. package/dist/web-bot-auth/internal/SignatureAgent.js.map +1 -0
  318. package/dist/web-bot-auth/server/index.d.ts +35 -0
  319. package/dist/web-bot-auth/server/index.d.ts.map +1 -0
  320. package/dist/web-bot-auth/server/index.js +88 -0
  321. package/dist/web-bot-auth/server/index.js.map +1 -0
  322. package/dist/x402/Assets.d.ts.map +1 -1
  323. package/dist/x402/Types.d.ts +6 -6
  324. package/dist/x402/Types.d.ts.map +1 -1
  325. package/dist/x402/server/EvmCharge.d.ts.map +1 -1
  326. package/dist/x402/server/EvmCharge.js +32 -20
  327. package/dist/x402/server/EvmCharge.js.map +1 -1
  328. package/package.json +19 -3
  329. package/src/Challenge.fuzz.test.ts +80 -47
  330. package/src/Challenge.test.ts +65 -0
  331. package/src/Challenge.ts +39 -35
  332. package/src/Method.ts +82 -68
  333. package/src/Store.test-d.ts +16 -0
  334. package/src/Store.test.ts +50 -0
  335. package/src/Store.ts +68 -0
  336. package/src/attestation/Attestation.integration.test.ts +208 -0
  337. package/src/attestation/Client.test.ts +83 -0
  338. package/src/attestation/Client.ts +34 -0
  339. package/src/attestation/Constants.ts +15 -0
  340. package/src/attestation/Server.test.ts +60 -0
  341. package/src/attestation/Server.ts +12 -0
  342. package/src/attestation/Types.test-d.ts +54 -0
  343. package/src/attestation/Types.ts +77 -0
  344. package/src/attestation/index.ts +5 -0
  345. package/src/attestation/internal/HttpMessageSignature.test.ts +101 -0
  346. package/src/attestation/internal/HttpMessageSignature.ts +429 -0
  347. package/src/attestation/internal/SigningContext.ts +13 -0
  348. package/src/bin.js +2 -0
  349. package/src/cli/cli.ts +1 -0
  350. package/src/client/Mppx.test-d.ts +17 -0
  351. package/src/client/Mppx.test.ts +14 -14
  352. package/src/client/Mppx.ts +25 -4
  353. package/src/client/Transport.test.ts +12 -45
  354. package/src/client/Transport.ts +3 -24
  355. package/src/client/internal/Fetch.ts +2 -6
  356. package/src/discovery/OpenApi.test.ts +170 -0
  357. package/src/discovery/OpenApi.ts +16 -48
  358. package/src/discovery/internal/Metadata.ts +51 -0
  359. package/src/evm/server/Charge.ts +6 -1
  360. package/src/internal/AcceptPayment.test.ts +12 -8
  361. package/src/internal/types.ts +9 -0
  362. package/src/mcp/client/McpClient.integration.test.ts +19 -32
  363. package/src/middlewares/elysia.test.ts +2 -12
  364. package/src/middlewares/express.test.ts +2 -12
  365. package/src/middlewares/hono.test.ts +6 -9
  366. package/src/middlewares/nextjs.test.ts +2 -12
  367. package/src/proxy/Proxy.test.ts +26 -19
  368. package/src/proxy/Proxy.ts +147 -9
  369. package/src/proxy/Proxy.upstreamError.test.ts +364 -0
  370. package/src/proxy/Service.test.ts +73 -3
  371. package/src/proxy/Service.ts +50 -23
  372. package/src/proxy/services/anthropic.ts +1 -0
  373. package/src/proxy/services/hooks.test-d.ts +14 -0
  374. package/src/proxy/services/hooks.test.ts +44 -0
  375. package/src/proxy/services/openai.ts +1 -0
  376. package/src/proxy/services/stripe.ts +1 -0
  377. package/src/server/Methods.test-d.ts +88 -0
  378. package/src/server/Methods.test.ts +69 -0
  379. package/src/server/Mppx.test-d.ts +141 -7
  380. package/src/server/Mppx.test.ts +1017 -119
  381. package/src/server/Mppx.ts +350 -54
  382. package/src/stripe/internal/constants.ts +1 -1
  383. package/src/stripe/internal/types.ts +1 -0
  384. package/src/stripe/server/Charge.test-d.ts +16 -1
  385. package/src/stripe/server/Charge.test.ts +79 -0
  386. package/src/stripe/server/Charge.ts +54 -1
  387. package/src/stripe/server/Methods.test-d.ts +157 -0
  388. package/src/stripe/server/Methods.test.ts +403 -0
  389. package/src/stripe/server/Methods.ts +423 -6
  390. package/src/stripe/server/internal/deposit-address.ts +57 -0
  391. package/src/stripe/server/internal/html/node_modules/.bin/mppx +3 -3
  392. package/src/stripe/server/internal/html/package.json +1 -1
  393. package/src/stripe/server/internal/html.gen.ts +1 -1
  394. package/src/stripe/server/internal/record-payment.ts +66 -0
  395. package/src/stripe/server/internal/request.ts +49 -0
  396. package/src/tap/Constants.ts +32 -0
  397. package/src/tap/Tap.test.ts +125 -0
  398. package/src/tap/Types.ts +11 -0
  399. package/src/tap/client/index.ts +54 -0
  400. package/src/tap/index.ts +4 -0
  401. package/src/tap/server/index.ts +48 -0
  402. package/src/tempo/PublicExports.test-d.ts +3 -3
  403. package/src/tempo/client/Charge.ts +1 -19
  404. package/src/tempo/internal/address.test.ts +42 -0
  405. package/src/tempo/internal/address.ts +3 -3
  406. package/src/tempo/internal/auto-swap.test.ts +4 -4
  407. package/src/tempo/internal/auto-swap.ts +7 -50
  408. package/src/tempo/legacy/README.md +5 -5
  409. package/src/tempo/legacy/index.ts +1 -3
  410. package/src/tempo/server/AtomicStore.test-d.ts +13 -0
  411. package/src/tempo/server/Charge.test.ts +19 -84
  412. package/src/tempo/server/Charge.ts +83 -55
  413. package/src/tempo/server/Methods.ts +0 -20
  414. package/src/tempo/server/Relay.test.ts +5 -5
  415. package/src/tempo/server/Relay.ts +2 -2
  416. package/src/tempo/server/Subscription.ts +4 -1
  417. package/src/tempo/server/index.ts +1 -1
  418. package/src/tempo/server/internal/html/node_modules/.bin/mppx +3 -3
  419. package/src/tempo/server/internal/html/package.json +1 -1
  420. package/src/tempo/server/internal/html.gen.ts +1 -1
  421. package/src/tempo/server/internal/transport.test.ts +22 -3
  422. package/src/tempo/server/internal/transport.ts +15 -3
  423. package/src/tempo/session/README.md +112 -0
  424. package/src/tempo/session/precompile/Chain.ts +131 -11
  425. package/src/tempo/session/server/ChannelStore.ts +33 -12
  426. package/src/tempo/session/server/CredentialVerification.test.ts +4 -4
  427. package/src/tempo/session/server/CredentialVerification.ts +340 -28
  428. package/src/tempo/session/server/MeteredStream.ts +5 -1
  429. package/src/tempo/session/server/Session.test.ts +428 -43
  430. package/src/tempo/session/server/Session.ts +159 -60
  431. package/src/tempo/session/server/Sse.test.ts +77 -0
  432. package/src/tempo/session/server/Sse.ts +8 -1
  433. package/src/tempo/session/server/Transports.ts +2 -1
  434. package/src/tempo/session/server/Ws.test.ts +171 -0
  435. package/src/tempo/session/server/Ws.ts +7 -1
  436. package/src/web-bot-auth/Constants.ts +24 -0
  437. package/src/web-bot-auth/Types.ts +9 -0
  438. package/src/web-bot-auth/WebBotAuth.test.ts +182 -0
  439. package/src/web-bot-auth/client/index.ts +84 -0
  440. package/src/web-bot-auth/index.ts +6 -0
  441. package/src/web-bot-auth/internal/JwkThumbprint.ts +21 -0
  442. package/src/web-bot-auth/internal/SignatureAgent.ts +18 -0
  443. package/src/web-bot-auth/server/index.ts +113 -0
  444. package/src/x402/Exact.e2e.test.ts +121 -81
  445. package/src/x402/Exact.localnet.test.ts +1 -1
  446. package/src/x402/server/EvmCharge.ts +35 -19
  447. package/dist/tempo/legacy/server/Session.d.ts +0 -208
  448. package/dist/tempo/legacy/server/Session.d.ts.map +0 -1
  449. package/dist/tempo/legacy/server/Session.js +0 -698
  450. package/dist/tempo/legacy/server/Session.js.map +0 -1
  451. package/dist/tempo/legacy/server/index.d.ts +0 -5
  452. package/dist/tempo/legacy/server/index.d.ts.map +0 -1
  453. package/dist/tempo/legacy/server/index.js +0 -5
  454. package/dist/tempo/legacy/server/index.js.map +0 -1
  455. package/dist/tempo/legacy/session/ChannelStore.d.ts +0 -22
  456. package/dist/tempo/legacy/session/ChannelStore.d.ts.map +0 -1
  457. package/dist/tempo/legacy/session/ChannelStore.js +0 -6
  458. package/dist/tempo/legacy/session/ChannelStore.js.map +0 -1
  459. package/src/tempo/legacy/server/Defaults.test-d.ts +0 -9
  460. package/src/tempo/legacy/server/Session.test.ts +0 -6370
  461. package/src/tempo/legacy/server/Session.ts +0 -1024
  462. package/src/tempo/legacy/server/index.ts +0 -4
  463. package/src/tempo/legacy/session/ChannelStore.test.ts +0 -58
  464. package/src/tempo/legacy/session/ChannelStore.ts +0 -39
@@ -0,0 +1,9 @@
1
+ /** Verified Web Bot Auth HTTPS-directory profile request signature. */
2
+ export type VerifiedRequest = {
3
+ /** Public-key thumbprint advertised by the bot. */
4
+ keyId: string
5
+ /** HTTPS directory origin carried in the signed `Signature-Agent` header. */
6
+ signatureAgent: string
7
+ /** Signature nonce supplied by the bot. */
8
+ nonce: string
9
+ }
@@ -0,0 +1,182 @@
1
+ import * as Attestation from 'mppx/attestation'
2
+ import * as WebBotAuth from 'mppx/attestation/web-bot-auth'
3
+ import { expect, test } from 'vp/test'
4
+ import { jwkThumbprint, keyPair, rsaKeyPair } from '~test/Attestation.js'
5
+
6
+ import * as HttpMessageSignature from '../attestation/internal/HttpMessageSignature.js'
7
+
8
+ test('emits and verifies a signed Signature-Agent member', async () => {
9
+ const keys = await keyPair()
10
+ const keyId = await jwkThumbprint(keys.publicKey)
11
+ const signatureAgent = 'https://agent.example'
12
+ const signed = await WebBotAuth.Client.signer({
13
+ expiresIn: WebBotAuth.Constants.defaultSignatureLifetime + 1,
14
+ key: keys.privateKey,
15
+ keyId,
16
+ signatureAgent: `${signatureAgent}/`,
17
+ }).sign(new Request('https://merchant.example/resource'))
18
+
19
+ expect(signed.headers.get(WebBotAuth.Constants.signatureAgentHeader)).toBe(
20
+ `${WebBotAuth.Constants.label}="${signatureAgent}"`,
21
+ )
22
+ expect(signed.headers.get(Attestation.Headers.signatureInput)).toContain(
23
+ `"signature-agent";key="${WebBotAuth.Constants.label}"`,
24
+ )
25
+ expect(
26
+ await WebBotAuth.Server.verifier({
27
+ keyResolver: () => keys.publicKey,
28
+ maxAge: WebBotAuth.Constants.defaultSignatureLifetime,
29
+ nonceStore: Attestation.Store.memory(),
30
+ }).verify(signed),
31
+ ).toMatchObject({ status: 'invalid' })
32
+ expect(
33
+ await WebBotAuth.Server.verifier({
34
+ keyResolver: () => keys.publicKey,
35
+ nonceStore: Attestation.Store.memory(),
36
+ }).verify(signed),
37
+ ).toMatchObject({
38
+ status: 'verified',
39
+ value: { keyId, signatureAgent },
40
+ })
41
+ })
42
+
43
+ test('signs and verifies RSA-PSS SHA-512', async () => {
44
+ const keys = await rsaKeyPair()
45
+ const keyId = await jwkThumbprint(keys.publicKey)
46
+ const algorithms: Attestation.SignatureAlgorithm[] = []
47
+ const signed = await WebBotAuth.Client.signer({
48
+ key: keys.privateKey,
49
+ keyId,
50
+ signatureAgent: 'https://agent.example',
51
+ }).sign(new Request('https://merchant.example/resource'))
52
+ const result = await WebBotAuth.Server.verifier({
53
+ keyResolver({ algorithm, keyId: candidate }) {
54
+ algorithms.push(algorithm)
55
+ return candidate === keyId ? keys.publicKey : undefined
56
+ },
57
+ nonceStore: Attestation.Store.memory(),
58
+ }).verify(signed)
59
+
60
+ expect(signed.headers.get(Attestation.Headers.signatureInput)).toContain(
61
+ `alg="${Attestation.Algorithms.rsaPssSha512}"`,
62
+ )
63
+ expect(algorithms).toEqual([Attestation.Algorithms.rsaPssSha512])
64
+ expect(result).toMatchObject({ status: 'verified' })
65
+ })
66
+
67
+ test('preserves directory lookup failures as unverified outcomes', async () => {
68
+ const keys = await keyPair()
69
+ const keyId = await jwkThumbprint(keys.publicKey)
70
+ const signed = await WebBotAuth.Client.signer({
71
+ key: keys.privateKey,
72
+ keyId,
73
+ signatureAgent: 'https://agent.example',
74
+ }).sign(new Request('https://merchant.example/resource'))
75
+
76
+ expect(
77
+ await WebBotAuth.Server.verifier({
78
+ keyResolver: () => undefined,
79
+ nonceStore: Attestation.Store.memory(),
80
+ }).verify(signed),
81
+ ).toEqual({
82
+ reason: 'No public key is available for the signature key ID.',
83
+ status: 'unverified',
84
+ })
85
+ expect(
86
+ await WebBotAuth.Server.verifier({
87
+ keyResolver() {
88
+ throw new Error('directory unavailable')
89
+ },
90
+ nonceStore: Attestation.Store.memory(),
91
+ }).verify(signed),
92
+ ).toEqual({
93
+ reason: 'The public key could not be resolved.',
94
+ status: 'unverified',
95
+ })
96
+ })
97
+
98
+ test('rejects mismatched keys, non-directory discovery, and header tampering', async () => {
99
+ const advertisedKeys = await keyPair()
100
+ const signingKeys = await keyPair()
101
+ const advertisedKeyId = await jwkThumbprint(advertisedKeys.publicKey)
102
+ const signatureAgent = 'https://agent.example'
103
+ const signed = await WebBotAuth.Client.signer({
104
+ key: signingKeys.privateKey,
105
+ keyId: advertisedKeyId,
106
+ signatureAgent,
107
+ }).sign(new Request('https://merchant.example/resource'))
108
+ const verifier = WebBotAuth.Server.verifier({
109
+ keyResolver: () => signingKeys.publicKey,
110
+ nonceStore: Attestation.Store.memory(),
111
+ })
112
+
113
+ expect(await verifier.verify(signed)).toMatchObject({ status: 'invalid' })
114
+
115
+ const alteredHeaders = new Headers(signed.headers)
116
+ alteredHeaders.set(
117
+ WebBotAuth.Constants.signatureAgentHeader,
118
+ `${WebBotAuth.Constants.label}="https://attacker.example"`,
119
+ )
120
+ expect(
121
+ await WebBotAuth.Server.verifier({
122
+ keyResolver: () => signingKeys.publicKey,
123
+ nonceStore: Attestation.Store.memory(),
124
+ }).verify(new Request(signed, { headers: alteredHeaders })),
125
+ ).toMatchObject({ status: 'invalid' })
126
+
127
+ const discoveryHeaders = new Headers({
128
+ [WebBotAuth.Constants.signatureAgentHeader]:
129
+ 'webbot="https://agent.example/keys";type=jwks_uri',
130
+ })
131
+ const unsupportedDiscovery = await HttpMessageSignature.sign(
132
+ new Request('https://merchant.example/resource', { headers: discoveryHeaders }),
133
+ {
134
+ components: [
135
+ HttpMessageSignature.Constants.components.authority,
136
+ {
137
+ id: HttpMessageSignature.Constants.components.signatureAgent,
138
+ parameters: new Map([['key', WebBotAuth.Constants.label]]),
139
+ },
140
+ ],
141
+ key: advertisedKeys.privateKey,
142
+ keyId: advertisedKeyId,
143
+ label: WebBotAuth.Constants.label,
144
+ tag: WebBotAuth.Constants.tag,
145
+ },
146
+ )
147
+ expect(
148
+ await WebBotAuth.Server.verifier({
149
+ keyResolver: () => advertisedKeys.publicKey,
150
+ nonceStore: Attestation.Store.memory(),
151
+ }).verify(unsupportedDiscovery),
152
+ ).toMatchObject({
153
+ reason: 'The Signature-Agent discovery type is not supported by this directory profile.',
154
+ status: 'invalid',
155
+ })
156
+ })
157
+
158
+ test('validates signer and verifier configuration', async () => {
159
+ const keys = await keyPair()
160
+ const keyId = await jwkThumbprint(keys.publicKey)
161
+ const config = { key: keys.privateKey, keyId, signatureAgent: 'https://agent.example' }
162
+
163
+ expect(() => WebBotAuth.Client.signer({ ...config, keyId: 'not-a-thumbprint' })).toThrow(
164
+ 'Web Bot Auth keyId must be an RFC 7638 SHA-256 JWK thumbprint.',
165
+ )
166
+ expect(() => WebBotAuth.Client.signer({ ...config, signatureAgent: 'https://' })).toThrow(
167
+ 'Signature-Agent must identify a valid HTTPS origin.',
168
+ )
169
+ expect(() =>
170
+ WebBotAuth.Client.signer({ ...config, signatureAgent: 'https://agent.example/keys' }),
171
+ ).toThrow('Signature-Agent must identify a valid HTTPS origin.')
172
+ expect(() => WebBotAuth.Client.signer({ ...config, expiresIn: 0 })).toThrow(
173
+ 'Web Bot Auth expiresIn must be a positive integer.',
174
+ )
175
+ expect(() =>
176
+ WebBotAuth.Server.verifier({
177
+ keyResolver: () => keys.publicKey,
178
+ maxAge: 0,
179
+ nonceStore: Attestation.Store.memory(),
180
+ }),
181
+ ).toThrow('Web Bot Auth maxAge must be a positive integer.')
182
+ })
@@ -0,0 +1,84 @@
1
+ import { parseDictionary, serializeDictionary } from 'structured-headers'
2
+ import type { Dictionary } from 'structured-headers'
3
+
4
+ import * as HttpMessageSignature from '../../attestation/internal/HttpMessageSignature.js'
5
+ import type * as AttestationTypes from '../../attestation/Types.js'
6
+ import { Constants } from '../Constants.js'
7
+ import * as JwkThumbprint from '../internal/JwkThumbprint.js'
8
+ import * as SignatureAgent from '../internal/SignatureAgent.js'
9
+
10
+ /**
11
+ * Creates a Web Bot Auth HTTPS-directory profile request signer.
12
+ *
13
+ * The signed `Signature-Agent` header links the request to the HTTPS origin
14
+ * of an HTTP Message Signatures Directory. This adapter does not support
15
+ * direct key configuration or other Web Bot Auth discovery types. It
16
+ * establishes bot identity only; it does not assert consumer identity or
17
+ * authority to make a payment.
18
+ */
19
+ export function signer(config: signer.Config): AttestationTypes.Signer<typeof Constants.protocol> {
20
+ const label = config.label ?? Constants.label
21
+ const signatureAgentKey = config.signatureAgentKey ?? label
22
+ const expiresIn = config.expiresIn ?? Constants.defaultSignatureLifetime
23
+ const signatureAgent = SignatureAgent.directoryOrigin(config.signatureAgent)
24
+ if (!JwkThumbprint.is(config.keyId))
25
+ throw new TypeError('Web Bot Auth keyId must be an RFC 7638 SHA-256 JWK thumbprint.')
26
+ if (!signatureAgent) throw new TypeError('Signature-Agent must identify a valid HTTPS origin.')
27
+ if (!Number.isInteger(expiresIn) || expiresIn <= 0)
28
+ throw new RangeError('Web Bot Auth expiresIn must be a positive integer.')
29
+ return {
30
+ protocol: Constants.protocol,
31
+ sign(request, context) {
32
+ const headers = new Headers(request.headers)
33
+ const signatureAgents = parseSignatureAgents(headers)
34
+ if (signatureAgents.has(signatureAgentKey))
35
+ throw new Error(`Signature-Agent member "${signatureAgentKey}" already exists.`)
36
+ signatureAgents.set(signatureAgentKey, [signatureAgent, new Map()])
37
+ headers.set(Constants.signatureAgentHeader, serializeDictionary(signatureAgents))
38
+ return HttpMessageSignature.sign(new Request(request, { headers }), {
39
+ components: [
40
+ HttpMessageSignature.Constants.components.authority,
41
+ {
42
+ id: HttpMessageSignature.Constants.components.signatureAgent,
43
+ parameters: new Map([['key', signatureAgentKey]]),
44
+ },
45
+ ],
46
+ context,
47
+ expiresIn,
48
+ key: config.key,
49
+ keyId: config.keyId,
50
+ label,
51
+ tag: Constants.tag,
52
+ })
53
+ },
54
+ }
55
+ }
56
+
57
+ export declare namespace signer {
58
+ type Config = {
59
+ /** Ed25519 or RSA-PSS SHA-512 private key registered for the bot. */
60
+ key: CryptoKey
61
+ /** RFC 7638 JWK thumbprint for the registered public key. */
62
+ keyId: string
63
+ /** Required HTTPS directory origin, sent with the default `directory` discovery type. */
64
+ signatureAgent: string
65
+ /** Dictionary member name used for `Signature-Agent`. @default signature label */
66
+ signatureAgentKey?: string | undefined
67
+ /** Signature lifetime in seconds. @default 60 */
68
+ expiresIn?: number | undefined
69
+ /** RFC 9421 dictionary label. @default 'webbot' */
70
+ label?: string | undefined
71
+ }
72
+ }
73
+
74
+ function parseSignatureAgents(headers: Headers): Dictionary {
75
+ const value = headers.get(Constants.signatureAgentHeader)
76
+ if (!value) return new Map()
77
+ try {
78
+ return parseDictionary(value)
79
+ } catch {
80
+ throw new Error(
81
+ `HTTP header "${Constants.signatureAgentHeader}" is not a structured dictionary.`,
82
+ )
83
+ }
84
+ }
@@ -0,0 +1,6 @@
1
+ /** Client helpers for the Web Bot Auth HTTPS-directory profile. */
2
+ export * as Client from './client/index.js'
3
+ /** Server helpers for the Web Bot Auth HTTPS-directory profile. */
4
+ export * as Server from './server/index.js'
5
+ export * from './Constants.js'
6
+ export * from './Types.js'
@@ -0,0 +1,21 @@
1
+ import { Base64 } from 'ox'
2
+
3
+ const pattern = /^[A-Za-z0-9_-]{43}$/
4
+
5
+ /** Returns whether a value has the RFC 7638 SHA-256 thumbprint encoding. */
6
+ export function is(value: string): boolean {
7
+ return pattern.test(value)
8
+ }
9
+
10
+ /** Derives an RFC 7638 thumbprint from an extractable Ed25519 or RSA public key. */
11
+ export async function fromKey(key: CryptoKey): Promise<string> {
12
+ const jwk = await crypto.subtle.exportKey('jwk', key)
13
+ let canonical: string
14
+ if (jwk.kty === 'OKP' && jwk.crv === 'Ed25519' && jwk.x)
15
+ canonical = JSON.stringify({ crv: jwk.crv, kty: jwk.kty, x: jwk.x })
16
+ else if (jwk.kty === 'RSA' && jwk.e && jwk.n)
17
+ canonical = JSON.stringify({ e: jwk.e, kty: jwk.kty, n: jwk.n })
18
+ else throw new TypeError('Web Bot Auth requires an Ed25519 or RSA public key.')
19
+ const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(canonical))
20
+ return Base64.fromBytes(new Uint8Array(digest), { pad: false, url: true })
21
+ }
@@ -0,0 +1,18 @@
1
+ /** Returns the canonical origin for a Web Bot Auth directory identifier. */
2
+ export function directoryOrigin(value: string): string | undefined {
3
+ try {
4
+ const url = new URL(value)
5
+ if (
6
+ url.protocol !== 'https:' ||
7
+ url.username ||
8
+ url.password ||
9
+ url.pathname !== '/' ||
10
+ url.search ||
11
+ url.hash
12
+ )
13
+ return undefined
14
+ return url.origin
15
+ } catch {
16
+ return undefined
17
+ }
18
+ }
@@ -0,0 +1,113 @@
1
+ import { isInnerList, parseDictionary, Token } from 'structured-headers'
2
+
3
+ import * as HttpMessageSignature from '../../attestation/internal/HttpMessageSignature.js'
4
+ import type * as Attestation from '../../attestation/Types.js'
5
+ import type * as Store from '../../Store.js'
6
+ import { Constants } from '../Constants.js'
7
+ import * as JwkThumbprint from '../internal/JwkThumbprint.js'
8
+ import * as SignatureAgent from '../internal/SignatureAgent.js'
9
+ import type * as Types from '../Types.js'
10
+
11
+ /**
12
+ * Creates a verifier for the Web Bot Auth HTTPS-directory profile.
13
+ *
14
+ * It requires an `@authority` and signed `Signature-Agent` directory member;
15
+ * direct key configuration and other Web Bot Auth discovery types are outside
16
+ * this adapter's scope. Verification confirms the cryptographic identity of an
17
+ * automated HTTP client. It must not be used on its own as user or payment
18
+ * authorization.
19
+ */
20
+ export function verifier(config: verifier.Config): Attestation.Verifier<Types.VerifiedRequest> {
21
+ const maxAge = config.maxAge ?? Constants.defaultMaximumSignatureLifetime
22
+ if (!Number.isInteger(maxAge) || maxAge <= 0)
23
+ throw new RangeError('Web Bot Auth maxAge must be a positive integer.')
24
+ return {
25
+ async verify(request) {
26
+ let signatureAgent: string | undefined
27
+ const result = await HttpMessageSignature.verify(request, {
28
+ async keyResolver(parameters) {
29
+ return config.keyResolver({
30
+ ...parameters,
31
+ signatureAgent: signatureAgent!,
32
+ })
33
+ },
34
+ async validateKey(key, input) {
35
+ try {
36
+ return (await JwkThumbprint.fromKey(key)) === input.keyId
37
+ ? undefined
38
+ : 'The Web Bot Auth key does not match its RFC 7638 keyid.'
39
+ } catch {
40
+ return 'The Web Bot Auth key must be an extractable Ed25519 or RSA public key.'
41
+ }
42
+ },
43
+ maxAge,
44
+ nonceNamespace: Constants.protocol,
45
+ nonceStore: config.nonceStore,
46
+ requiredComponents: Constants.requiredComponents,
47
+ tag: Constants.tag,
48
+ validate(signature, request) {
49
+ if (!JwkThumbprint.is(signature.keyId))
50
+ return 'The Web Bot Auth keyid must be an RFC 7638 SHA-256 JWK thumbprint.'
51
+ const component = signature.components.find(
52
+ (entry) => entry.id === HttpMessageSignature.Constants.components.signatureAgent,
53
+ )
54
+ const key = component?.parameters?.get('key')
55
+ if (typeof key !== 'string')
56
+ return 'The signed Signature-Agent component must identify a dictionary member.'
57
+ const value = request.headers.get(Constants.signatureAgentHeader)
58
+ if (!value) return 'The Signature-Agent header is required.'
59
+ let agents
60
+ try {
61
+ agents = parseDictionary(value)
62
+ } catch {
63
+ return 'The Signature-Agent header must be a structured dictionary.'
64
+ }
65
+ const agent = agents.get(key)
66
+ if (!agent || isInnerList(agent) || typeof agent[0] !== 'string')
67
+ return 'The signed Signature-Agent member must be an HTTPS URL.'
68
+ const type = agent[1].get('type')
69
+ if (
70
+ type !== undefined &&
71
+ (!(type instanceof Token) || type.toString() !== Constants.discoveryType)
72
+ )
73
+ return 'The Signature-Agent discovery type is not supported by this directory profile.'
74
+ const origin = SignatureAgent.directoryOrigin(agent[0])
75
+ if (!origin) return 'The Signature-Agent header must identify a valid HTTPS origin.'
76
+ signatureAgent = origin
77
+ return undefined
78
+ },
79
+ })
80
+ if (result.status !== 'verified') return result
81
+ return {
82
+ status: 'verified',
83
+ value: {
84
+ keyId: result.input.keyId,
85
+ nonce: result.input.nonce,
86
+ signatureAgent: signatureAgent!,
87
+ },
88
+ }
89
+ },
90
+ }
91
+ }
92
+
93
+ export declare namespace verifier {
94
+ type Config = {
95
+ /**
96
+ * Resolves a public key for the advertised directory.
97
+ *
98
+ * Apply the origin's trust policy before any network lookup; do not fetch an
99
+ * arbitrary caller-provided `signatureAgent` URL. Returned public keys
100
+ * must be extractable so their RFC 7638 thumbprints can be verified.
101
+ */
102
+ keyResolver: (parameters: {
103
+ algorithm: Attestation.SignatureAlgorithm
104
+ keyId: string
105
+ request: Request
106
+ signatureAgent: string
107
+ }) => Promise<CryptoKey | undefined> | CryptoKey | undefined
108
+ /** Maximum accepted signature lifetime in seconds. @default 86400 */
109
+ maxAge?: number | undefined
110
+ /** Atomically consumes each nonce in shared storage for multi-instance deployments. */
111
+ nonceStore: Store.AtomicStore
112
+ }
113
+ }