permdock 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/README.md +327 -1
  2. package/dist/a2a/index.d.ts +169 -0
  3. package/dist/a2a/index.js +232 -0
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +95 -0
  6. package/dist/ai-sdk/index.js +154 -0
  7. package/dist/approval-required-TzNB9oQA.js +6 -0
  8. package/dist/approvals/index.d.ts +3 -0
  9. package/dist/approvals/index.js +5 -0
  10. package/dist/approvals-DbYAuNkG.js +224 -0
  11. package/dist/approvers-DT4AVyIg.js +52 -0
  12. package/dist/arazzo-BAgw9ap6.js +70 -0
  13. package/dist/arazzo-cmvX2jDe.js +54 -0
  14. package/dist/authzen/index.d.ts +39 -0
  15. package/dist/authzen/index.js +302 -0
  16. package/dist/better-auth/index.d.ts +109 -0
  17. package/dist/better-auth/index.js +344 -0
  18. package/dist/better-supabase/index.d.ts +206 -0
  19. package/dist/better-supabase/index.js +620 -0
  20. package/dist/bind-CVy3Espv.d.ts +25 -0
  21. package/dist/bind-VnYn2HKq.js +97 -0
  22. package/dist/boundary-BM8a_P6E.js +13 -0
  23. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  24. package/dist/budget-JqcRqyhK.d.ts +11 -0
  25. package/dist/budget-NbEtbJC_.js +11 -0
  26. package/dist/canonical-json-DemiK4Vp.js +26 -0
  27. package/dist/capability-4qPdO9gk.js +173 -0
  28. package/dist/capability-Dq43tT1u.d.ts +99 -0
  29. package/dist/catalog/index.d.ts +12 -0
  30. package/dist/catalog/index.js +2 -0
  31. package/dist/catalog-BjZSovXQ.js +2 -0
  32. package/dist/catalog-doc-Dsc9y7sd.js +309 -0
  33. package/dist/catalog-h2tlKFkq.js +48 -0
  34. package/dist/catalog-path-CnI0XTFK.js +12 -0
  35. package/dist/catalog-z8q6bi_r.js +55 -0
  36. package/dist/claude-agent/index.d.ts +72 -0
  37. package/dist/claude-agent/index.js +77 -0
  38. package/dist/clerk/index.d.ts +65 -0
  39. package/dist/clerk/index.js +301 -0
  40. package/dist/cli/bin.d.ts +1 -0
  41. package/dist/cli/bin.js +20 -0
  42. package/dist/cli/index.d.ts +46 -0
  43. package/dist/cli/index.js +5 -0
  44. package/dist/clients-C7zLFuWT.d.ts +12 -0
  45. package/dist/clients-DjU5ABMy.js +23 -0
  46. package/dist/cloud/index.d.ts +90 -0
  47. package/dist/cloud/index.js +404 -0
  48. package/dist/cloud-BGhHS-lY.js +50 -0
  49. package/dist/cloud-Bo3e9Ak3.js +118 -0
  50. package/dist/collect-DDDv_ESs.js +502 -0
  51. package/dist/collect-DLlujdHC.js +83 -0
  52. package/dist/collect-rG2IQ3t0.js +2 -0
  53. package/dist/commands-DWOrSQic.js +97 -0
  54. package/dist/compact-y6vfu2_f.js +19 -0
  55. package/dist/compare-pfyVnBjE.js +12 -0
  56. package/dist/compile/index.d.ts +3 -0
  57. package/dist/compile/index.js +2 -0
  58. package/dist/compile-Ba4blROR.js +613 -0
  59. package/dist/compile-CNnl6uIt.d.ts +94 -0
  60. package/dist/config-BJiM-xAm.js +157 -0
  61. package/dist/config-Bn00Z3ks.js +36 -0
  62. package/dist/config-report-Dw_JcUqT.js +44 -0
  63. package/dist/connection-CU8MQxRi.js +194 -0
  64. package/dist/context-Ttp0ekMT.js +82 -0
  65. package/dist/convex/index.d.ts +45 -0
  66. package/dist/convex/index.js +65 -0
  67. package/dist/create-BWyx3jua.d.ts +245 -0
  68. package/dist/create-CPhDL6qx.js +253 -0
  69. package/dist/credential-8P81ff4u.js +306 -0
  70. package/dist/delegation-D8pUEuce.js +103 -0
  71. package/dist/describe-B_gVZEVi.js +94 -0
  72. package/dist/describe-PdoqESvg.d.ts +36 -0
  73. package/dist/diff-B8Tunc3o.js +451 -0
  74. package/dist/diff-CzqLxZ77.js +48 -0
  75. package/dist/digest-B3kc_PgQ.d.ts +19 -0
  76. package/dist/digest-BI-6aa6d.js +27 -0
  77. package/dist/doctor-WpvG6p4k.js +1194 -0
  78. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  79. package/dist/doctor-rOr-4ZfS.js +53 -0
  80. package/dist/drizzle/index.d.ts +73 -0
  81. package/dist/drizzle/index.js +160 -0
  82. package/dist/duration-xK2jGFVc.js +25 -0
  83. package/dist/elysia/index.d.ts +49 -0
  84. package/dist/elysia/index.js +59 -0
  85. package/dist/errors-CWfoNg9N.js +47 -0
  86. package/dist/errors-Cz5zn0mW.js +123 -0
  87. package/dist/errors-DAqevpNk.d.ts +125 -0
  88. package/dist/errors-DRnGZHzF.js +30 -0
  89. package/dist/evaluation-items-CfCCejQd.js +40 -0
  90. package/dist/evaluations-tz6D9A2G.js +461 -0
  91. package/dist/eve/index.d.ts +86 -0
  92. package/dist/eve/index.js +176 -0
  93. package/dist/expiry-BoBJ8Tvc.js +7 -0
  94. package/dist/express/index.d.ts +23 -0
  95. package/dist/express/index.js +78 -0
  96. package/dist/fastify/index.d.ts +33 -0
  97. package/dist/fastify/index.js +92 -0
  98. package/dist/fields-BMl1RxoX.js +26 -0
  99. package/dist/files-DWUN9PzI.js +125 -0
  100. package/dist/fixtures-ht28Cplr.js +67 -0
  101. package/dist/freeze-CrU8nQeX.js +60 -0
  102. package/dist/from-snapshot-C3sHpZNS.js +569 -0
  103. package/dist/generate-CH7ThJ14.js +173 -0
  104. package/dist/grantee-Cv5Sogfv.js +602 -0
  105. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  106. package/dist/headers-BZSDieNT.js +6 -0
  107. package/dist/headers-Cf-zWvsO.d.ts +6 -0
  108. package/dist/helpers-H_KARDVC.js +421 -0
  109. package/dist/hono/index.d.ts +48 -0
  110. package/dist/hono/index.js +99 -0
  111. package/dist/hosted-DJQw46hn.js +266 -0
  112. package/dist/http-BIhmLfCc.js +95 -0
  113. package/dist/http-DPuDaChb.d.ts +13 -0
  114. package/dist/http-SO7qGttf.js +44 -0
  115. package/dist/ids-DC4V4CFu.js +18 -0
  116. package/dist/index-A0YNL8jZ.d.ts +177 -0
  117. package/dist/index-CtE07CBF.d.ts +6 -0
  118. package/dist/index-D3vbkoSI.d.ts +483 -0
  119. package/dist/index-D6_cSa1z.d.ts +201 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +26 -0
  122. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  123. package/dist/instance-options-Dhhcnm3y.js +22 -0
  124. package/dist/json-schema-BsAflUGW.js +106 -0
  125. package/dist/jwt/index.d.ts +91 -0
  126. package/dist/jwt/index.js +590 -0
  127. package/dist/kernel-GSQnMz3O.js +208 -0
  128. package/dist/kysely/index.d.ts +78 -0
  129. package/dist/kysely/index.js +129 -0
  130. package/dist/live-options-H2eG8dfJ.js +60 -0
  131. package/dist/load-DhWEB9P1.js +75 -0
  132. package/dist/load-DwJUafYN.js +2 -0
  133. package/dist/load-jose-BL6LH4bL.js +11 -0
  134. package/dist/lru-8q4WZjBV.js +28 -0
  135. package/dist/manifest-iaoBXHKc.js +783 -0
  136. package/dist/manifest-uDS9y5de.d.ts +206 -0
  137. package/dist/map-AcxK9o_D.js +147 -0
  138. package/dist/map-claims-Z4QZOiFF.js +369 -0
  139. package/dist/map-error-pgUWNNtG.js +23 -0
  140. package/dist/markers-B0hYLvMD.js +60 -0
  141. package/dist/may-use-DndQ5tQ-.js +77 -0
  142. package/dist/mcp/index.d.ts +159 -0
  143. package/dist/mcp/index.js +603 -0
  144. package/dist/nest/index.d.ts +75 -0
  145. package/dist/nest/index.js +261 -0
  146. package/dist/next/client.d.ts +23 -0
  147. package/dist/next/client.js +33 -0
  148. package/dist/next/index.d.ts +93 -0
  149. package/dist/next/index.js +180 -0
  150. package/dist/next/plugin.d.ts +14 -0
  151. package/dist/next/plugin.js +33 -0
  152. package/dist/node/index.d.ts +24 -0
  153. package/dist/node/index.js +34 -0
  154. package/dist/openai/index.d.ts +62 -0
  155. package/dist/openai/index.js +92 -0
  156. package/dist/openapi/index.d.ts +176 -0
  157. package/dist/openapi/index.js +3 -0
  158. package/dist/openapi-Bbg4wGVL.js +164 -0
  159. package/dist/openapi-BqRBvAng.js +538 -0
  160. package/dist/openapi-CqqEbHsL.js +250 -0
  161. package/dist/openapi-import-cmwetbzw.js +5959 -0
  162. package/dist/openapi-schema--ARjyfQr.js +6902 -0
  163. package/dist/orpc/index.d.ts +51 -0
  164. package/dist/orpc/index.js +145 -0
  165. package/dist/otel/index.d.ts +13 -0
  166. package/dist/otel/index.js +202 -0
  167. package/dist/package-root-zGkxO3oN.js +30 -0
  168. package/dist/parse-BuyjxhZV.js +53 -0
  169. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  170. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  171. package/dist/pdp/index.d.ts +22 -0
  172. package/dist/pdp/index.js +682 -0
  173. package/dist/peer-BOr_kJE1.js +31 -0
  174. package/dist/permdock-CzqXjCpU.js +3471 -0
  175. package/dist/permissions-CDgvKG5L.d.ts +52 -0
  176. package/dist/permissions-CpZrivYv.js +142 -0
  177. package/dist/permissions-DVoF6dMt.js +662 -0
  178. package/dist/permissions-DttnqqxC.d.ts +214 -0
  179. package/dist/pins-8ILTftC9.js +12 -0
  180. package/dist/policy-CFZAr_Al.d.ts +2252 -0
  181. package/dist/policy-D8UFyERw.d.ts +20 -0
  182. package/dist/policy-xyWg7QdR.js +1122 -0
  183. package/dist/powersync-A8x_Yyvh.js +2 -0
  184. package/dist/powersync-C7kLglqX.js +540 -0
  185. package/dist/powersync-yW1UUFzp.js +62 -0
  186. package/dist/prisma/index.d.ts +136 -0
  187. package/dist/prisma/index.js +455 -0
  188. package/dist/problem-B43ztKIm.js +191 -0
  189. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  190. package/dist/problem-details-_AMOYz-w.js +144 -0
  191. package/dist/prompt-CXYhLfsS.js +32 -0
  192. package/dist/protected-CNsMzrVd.d.ts +27 -0
  193. package/dist/protected-Cs6kTaHo.js +100 -0
  194. package/dist/protected-bZs6rbT1.d.ts +40 -0
  195. package/dist/provider-Cjr62YMV.d.ts +6 -0
  196. package/dist/provider-DLzpb2Xz.js +52 -0
  197. package/dist/provider-store-DNyC1y48.js +43 -0
  198. package/dist/react/index.d.ts +8 -0
  199. package/dist/react/index.js +7 -0
  200. package/dist/react/provider-client.d.ts +2 -0
  201. package/dist/react/provider-client.js +3 -0
  202. package/dist/react-native/index.d.ts +198 -0
  203. package/dist/react-native/index.js +696 -0
  204. package/dist/refs-KYb4ntaz.js +91 -0
  205. package/dist/relations-cjOL01hZ.js +505 -0
  206. package/dist/replay-BsOyTrdV.js +28 -0
  207. package/dist/replay-sqBGMnNs.d.ts +5 -0
  208. package/dist/resource-ref-CaS9yVPi.js +20 -0
  209. package/dist/revocations-Bhr0aMIC.js +27 -0
  210. package/dist/revocations-Cy06JNx2.d.ts +21 -0
  211. package/dist/rls-BMNydpHk.js +2521 -0
  212. package/dist/rls-CEvs64Kj.js +238 -0
  213. package/dist/rls-fields-BMasREhR.js +3502 -0
  214. package/dist/rls-graph-pc9fuXYm.js +435 -0
  215. package/dist/rls-import-D8F7j35Q.js +943 -0
  216. package/dist/rls-migrate-7wikfrVI.js +367 -0
  217. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  218. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  219. package/dist/rls-verify-D8B7dOTh.js +745 -0
  220. package/dist/row-check-Dt35czLy.d.ts +40 -0
  221. package/dist/rpc-DOK54_CS.js +89 -0
  222. package/dist/run-YXCJDNYk.js +174 -0
  223. package/dist/runtime-CB8gQFvS.js +11 -0
  224. package/dist/saas-Bj_FFkjN.js +1203 -0
  225. package/dist/schema-D3MnDMxa.js +300 -0
  226. package/dist/scim/index.d.ts +2 -0
  227. package/dist/scim/index.js +2 -0
  228. package/dist/scim-BFGBBAqR.js +1445 -0
  229. package/dist/scopes-CVdPrWN-.js +239 -0
  230. package/dist/server/index.d.ts +134 -0
  231. package/dist/server/index.js +11 -0
  232. package/dist/server-DlZ28Oz5.js +268 -0
  233. package/dist/sha256-BO0swRXL.js +150 -0
  234. package/dist/shared-DRu8VFVM.js +123 -0
  235. package/dist/sink-Bd9PSyfq.js +141 -0
  236. package/dist/sink-Gs6TTVa-.d.ts +104 -0
  237. package/dist/skills-Biq5uup3.js +192 -0
  238. package/dist/skills-JaymNCdK.js +56 -0
  239. package/dist/snapshot-Enxd0n-s.js +975 -0
  240. package/dist/snapshot-cache-D6jLelln.js +44 -0
  241. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  242. package/dist/solid/index.d.ts +93 -0
  243. package/dist/solid/index.js +188 -0
  244. package/dist/sources-B0UvrJ21.js +534 -0
  245. package/dist/sources-BcJgw0lt.d.ts +192 -0
  246. package/dist/sql-xdg5f4Fi.js +27 -0
  247. package/dist/src-CSbUiozF.js +568 -0
  248. package/dist/ssf/index.d.ts +4 -0
  249. package/dist/ssf/index.js +596 -0
  250. package/dist/store-DMAWwAJV.js +371 -0
  251. package/dist/store-D_pjn91-.d.ts +36 -0
  252. package/dist/store-options-yO0V6gRn.js +716 -0
  253. package/dist/stores-4_sqiOA1.js +87 -0
  254. package/dist/stores-DVR5NHLE.d.ts +52 -0
  255. package/dist/stream-DDpvynSB.js +66 -0
  256. package/dist/stream-DlvG2hs-.d.ts +12 -0
  257. package/dist/style-CTm1AXDT.js +22 -0
  258. package/dist/subject-C6dLxqHU.js +24 -0
  259. package/dist/subject-settings-BwBmCdTR.js +128 -0
  260. package/dist/supabase/index.d.ts +183 -0
  261. package/dist/supabase/index.js +5 -0
  262. package/dist/supabase/middleware.d.ts +82 -0
  263. package/dist/supabase/middleware.js +102 -0
  264. package/dist/supabase-CwafwxxF.js +83 -0
  265. package/dist/supabase-DTBaC20O.js +774 -0
  266. package/dist/supabase-config-Bs44dare.js +472 -0
  267. package/dist/supabase-hook-BuxLQLpU.js +1814 -0
  268. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  269. package/dist/supautils-DYZnzRWV.js +91 -0
  270. package/dist/svelte/PermissionBoundary.svelte +37 -0
  271. package/dist/svelte/Protected.svelte +40 -0
  272. package/dist/svelte/index.d.ts +13 -0
  273. package/dist/svelte/index.js +107 -0
  274. package/dist/svelte/runtime.d.ts +7 -0
  275. package/dist/svelte/runtime.js +4 -0
  276. package/dist/svelte/source.d.ts +13 -0
  277. package/dist/svelte/source.js +11 -0
  278. package/dist/terminal/index.d.ts +163 -0
  279. package/dist/terminal/index.js +833 -0
  280. package/dist/testing/index.d.ts +745 -0
  281. package/dist/testing/index.js +3672 -0
  282. package/dist/testing/saas/index.d.ts +194 -0
  283. package/dist/testing/saas/index.js +3 -0
  284. package/dist/testing/saas/permissions.d.ts +2 -0
  285. package/dist/testing/saas/permissions.js +2 -0
  286. package/dist/text-diff-BdkkYSbi.js +15 -0
  287. package/dist/thenable-okc2xDsj.js +10 -0
  288. package/dist/timeout-D51niuQP.js +8 -0
  289. package/dist/token-CIWxJOCh.js +50 -0
  290. package/dist/trpc/index.d.ts +61 -0
  291. package/dist/trpc/index.js +122 -0
  292. package/dist/types-9AWO9EGt.d.ts +197 -0
  293. package/dist/types-BPxgszlT.d.ts +550 -0
  294. package/dist/types-BVyImy5I.d.ts +120 -0
  295. package/dist/types-Bvc4oWT6.d.ts +9 -0
  296. package/dist/types-C3s9xVJG.d.ts +48 -0
  297. package/dist/types-Dnemwd77.d.ts +183 -0
  298. package/dist/types-kxznc7cn.d.ts +52 -0
  299. package/dist/types-vKyAMtcX.d.ts +157 -0
  300. package/dist/types-vNSDF7Dq.d.ts +66 -0
  301. package/dist/types-yF5LmQVD.d.ts +306 -0
  302. package/dist/unplugin/index.d.ts +7 -0
  303. package/dist/unplugin/index.js +31 -0
  304. package/dist/usage-D07N9QJ3.js +42 -0
  305. package/dist/usage-D82l1CwK.js +2 -0
  306. package/dist/usage-DG1oeCca.js +693 -0
  307. package/dist/validation-error-CnjZ4t92.js +33 -0
  308. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  309. package/dist/validity-uOp8UpYn.js +245 -0
  310. package/dist/verifier-BxBo6I44.js +466 -0
  311. package/dist/version-BvacVTZR.js +17 -0
  312. package/dist/views-Soe7bGSC.js +95 -0
  313. package/dist/vocabulary-DA8a8zif.d.ts +56 -0
  314. package/dist/vue/index.d.ts +79 -0
  315. package/dist/vue/index.js +196 -0
  316. package/dist/watch-Etoa_Mvr.js +2 -0
  317. package/dist/watch-UihESpsJ.js +128 -0
  318. package/dist/webmcp/index.d.ts +75 -0
  319. package/dist/webmcp/index.js +307 -0
  320. package/package.json +450 -5
  321. package/rulesets/permdock.yaml +29 -0
  322. package/schemas/approval-request-v1.json +175 -0
  323. package/schemas/catalog-v1.json +535 -0
  324. package/schemas/openapi/oas-3.1.json +1298 -0
  325. package/schemas/openapi/oas-3.2.json +1516 -0
  326. package/schemas/openapi/overlay-1.1.json +79 -0
  327. package/schemas/supabase-claims-v1.json +144 -0
  328. package/schemas/supabase-manifest-v1.json +361 -0
  329. package/skills/permdock/SKILL.md +66 -0
  330. package/skills/permdock-agents/SKILL.md +77 -0
  331. package/skills/permdock-agents/references/runtimes.md +213 -0
  332. package/skills/permdock-approvals/SKILL.md +80 -0
  333. package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
  334. package/skills/permdock-audit/SKILL.md +67 -0
  335. package/skills/permdock-credentials/SKILL.md +55 -0
  336. package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
  337. package/skills/permdock-data/SKILL.md +57 -0
  338. package/skills/permdock-data/references/queries-and-rls.md +62 -0
  339. package/skills/permdock-data/references/relationships.md +67 -0
  340. package/skills/permdock-tenancy/SKILL.md +80 -0
  341. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
  342. package/skills/permdock-wire/SKILL.md +116 -0
  343. package/skills/permdock-wire/references/adapters.md +492 -0
  344. package/skills/permdock-wire/references/policy-options.md +45 -0
@@ -0,0 +1,125 @@
1
+ import { Gt as WireDenial, Pr as Subject, Yn as Decision } from "./policy-CFZAr_Al.js";
2
+ import { t as Disclosure } from "./problem-details-CkL50EEf.js";
3
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
+ //#region src/core/errors.d.ts
5
+ /** Where and how a human approves; carries no secret. */
6
+ type ApprovalHint = {
7
+ readonly at?: string;
8
+ readonly hint?: string;
9
+ };
10
+ type ProblemDetails = {
11
+ readonly type: string;
12
+ readonly title: string;
13
+ readonly status: number;
14
+ readonly detail: string;
15
+ readonly instance?: string;
16
+ readonly permission?: string;
17
+ readonly scope?: string;
18
+ readonly resource?: {
19
+ readonly type: string;
20
+ readonly id?: string;
21
+ };
22
+ readonly denials?: readonly WireDenial[];
23
+ readonly alternatives?: readonly string[];
24
+ readonly reason?: string;
25
+ readonly token?: string;
26
+ readonly issues?: readonly StandardSchemaV1.Issue[];
27
+ readonly approval?: ApprovalHint;
28
+ /** RFC 9470 step-up parameters on `step-up-required`. */
29
+ readonly acrValues?: readonly string[];
30
+ readonly maxAge?: number;
31
+ /** The plans that would grant the permission, on `not-entitled`. */
32
+ readonly plans?: readonly string[];
33
+ };
34
+ declare class PermDockDeniedError extends Error {
35
+ override readonly name: "PermDockDeniedError";
36
+ readonly decision: Extract<Decision, {
37
+ readonly outcome: "denied";
38
+ }>;
39
+ readonly permission: string;
40
+ readonly scope: string;
41
+ readonly resource: {
42
+ readonly type: string;
43
+ readonly id?: string;
44
+ };
45
+ readonly subject: Subject;
46
+ /** The resource's `disclosure` when the denied check carried a row; `'hide'` answers as `404`. */
47
+ readonly disclosure?: Disclosure;
48
+ /** `PERMDOCK_DENIED;<permission>`; survives the Server Component boundary (`parsePermDockDigest`). */
49
+ readonly digest: string;
50
+ constructor(input: {
51
+ readonly decision: Extract<Decision, {
52
+ readonly outcome: "denied";
53
+ }>;
54
+ readonly permission: string;
55
+ readonly scope: string;
56
+ readonly resource: {
57
+ readonly type: string;
58
+ readonly id?: string;
59
+ };
60
+ readonly subject: Subject;
61
+ readonly message: string;
62
+ readonly disclosure?: Disclosure;
63
+ });
64
+ /** The same status matrix as `protect`: `401`, `404`, `429`, `503` or `403`. */
65
+ toProblemDetails(options?: {
66
+ readonly instance?: string;
67
+ readonly disclosure?: Disclosure;
68
+ }): ProblemDetails;
69
+ }
70
+ declare class PermDockApprovalRequiredError extends Error {
71
+ override readonly name: "PermDockApprovalRequiredError";
72
+ readonly decision: Extract<Decision, {
73
+ readonly outcome: "approval-required";
74
+ }>;
75
+ readonly permission: string;
76
+ readonly scope: string;
77
+ readonly resource: {
78
+ readonly type: string;
79
+ readonly id?: string;
80
+ };
81
+ readonly token: string;
82
+ readonly reason: string;
83
+ /** `PERMDOCK_APPROVAL_REQUIRED;<permission>;<token>`; the token is already bound to this subject. */
84
+ readonly digest: string;
85
+ constructor(input: {
86
+ readonly decision: Extract<Decision, {
87
+ readonly outcome: "approval-required";
88
+ }>;
89
+ readonly permission: string;
90
+ readonly scope: string;
91
+ readonly resource: {
92
+ readonly type: string;
93
+ readonly id?: string;
94
+ };
95
+ readonly message: string;
96
+ });
97
+ toProblemDetails(options?: {
98
+ readonly instance?: string;
99
+ }): ProblemDetails;
100
+ }
101
+ type RevokedCode = "session-revoked" | "expired" | "denied" | "subject-changed";
102
+ /**
103
+ * The `reason` of a long-lived connection's aborted `signal`. `denied` carries
104
+ * the decision that re-denied the permission the connection was opened for.
105
+ */
106
+ declare class PermDockRevokedError extends Error {
107
+ override readonly name: "PermDockRevokedError";
108
+ readonly code: RevokedCode;
109
+ readonly permission?: string;
110
+ readonly decision?: Exclude<Decision, {
111
+ readonly outcome: "granted";
112
+ }>;
113
+ constructor(input: {
114
+ readonly code: RevokedCode;
115
+ readonly permission?: string;
116
+ readonly decision?: Exclude<Decision, {
117
+ readonly outcome: "granted";
118
+ }>;
119
+ });
120
+ toProblemDetails(options?: {
121
+ readonly instance?: string;
122
+ }): ProblemDetails;
123
+ }
124
+ //#endregion
125
+ export { ProblemDetails as a, PermDockRevokedError as i, PermDockApprovalRequiredError as n, RevokedCode as o, PermDockDeniedError as r, ApprovalHint as t };
@@ -0,0 +1,30 @@
1
+ //#region src/approvals/errors.ts
2
+ var ApprovalError = class extends Error {
3
+ name = "ApprovalError";
4
+ code;
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ }
9
+ };
10
+ const CODES = /* @__PURE__ */ new Set([
11
+ "approval-not-found",
12
+ "approval-not-pending",
13
+ "approval-expired",
14
+ "approver-unauthenticated",
15
+ "approver-is-actor",
16
+ "approver-is-principal",
17
+ "approver-not-eligible",
18
+ "approver-repeated"
19
+ ]);
20
+ function isApprovalErrorCode(value) {
21
+ return typeof value === "string" && CODES.has(value);
22
+ }
23
+ /** Matches by `name` and `code`, so an error from another copy of the module still maps. */
24
+ function isApprovalError(value) {
25
+ if (!(value instanceof Error) || value.name !== "ApprovalError") return false;
26
+ const code = Reflect.get(value, "code");
27
+ return typeof code === "string" && CODES.has(code);
28
+ }
29
+ //#endregion
30
+ export { isApprovalError as n, isApprovalErrorCode as r, ApprovalError as t };
@@ -0,0 +1,40 @@
1
+ import { _ as listPermissions, a as formerKeys, o as formerScopes } from "./permissions-DVoF6dMt.js";
2
+ //#region src/server/evaluation-items.ts
3
+ function firstWins(map, name, leaf) {
4
+ if (!map.has(name)) map.set(name, leaf);
5
+ }
6
+ /**
7
+ * Indexes `tree` once. The lookup tries `action` as a permission key or
8
+ * scope, then `<resource.type>.<action>`, then the leaf with that resource
9
+ * and action; current names win over former ones and earlier leaves over
10
+ * later ones. Anything else is `undefined`, which the caller denies.
11
+ */
12
+ function permissionLookup(tree) {
13
+ const current = /* @__PURE__ */ new Map();
14
+ const former = /* @__PURE__ */ new Map();
15
+ const byPair = /* @__PURE__ */ new Map();
16
+ for (const leaf of listPermissions(tree)) {
17
+ firstWins(current, leaf.key, leaf);
18
+ firstWins(current, leaf.scope, leaf);
19
+ for (const name of [...formerKeys(leaf), ...formerScopes(leaf)]) firstWins(former, name, leaf);
20
+ firstWins(byPair, `${leaf.resource}\u0000${leaf.action}`, leaf);
21
+ }
22
+ const named = (name) => current.get(name) ?? former.get(name);
23
+ return (action, resource) => {
24
+ if (action === void 0) return;
25
+ const byKey = named(action);
26
+ if (byKey !== void 0) return byKey;
27
+ const type = typeof resource?.type === "string" ? resource.type : void 0;
28
+ if (type === void 0) return;
29
+ return named(`${type}.${action}`) ?? byPair.get(`${type}\u0000${action}`);
30
+ };
31
+ }
32
+ /** The row an item's resource describes: its `properties`, else `{ id }`. */
33
+ function itemResourceData(resource) {
34
+ const properties = resource?.properties;
35
+ if (properties !== null && typeof properties === "object") return properties;
36
+ const id = resource?.id;
37
+ if (typeof id === "string" || typeof id === "number") return { id: String(id) };
38
+ }
39
+ //#endregion
40
+ export { permissionLookup as n, itemResourceData as t };
@@ -0,0 +1,461 @@
1
+ import { t as compact } from "./compact-y6vfu2_f.js";
2
+ import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
3
+ import { a as wireDenials } from "./problem-details-_AMOYz-w.js";
4
+ import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
5
+ import { s as problemResponse, t as batchTooLarge, u as validationProblem } from "./problem-B43ztKIm.js";
6
+ import { i as readApprovalHeader, s as resumeDecision } from "./helpers-H_KARDVC.js";
7
+ import { t as timeoutSignal } from "./timeout-D51niuQP.js";
8
+ import { n as permissionLookup, t as itemResourceData } from "./evaluation-items-CfCCejQd.js";
9
+ //#region src/core/decision.ts
10
+ /** The denial for a check that failed or named no declared permission. */
11
+ const NO_GRANT = Object.freeze({
12
+ outcome: "denied",
13
+ denials: Object.freeze([Object.freeze({
14
+ role: null,
15
+ reason: "no-grant"
16
+ })]),
17
+ alternatives: Object.freeze([])
18
+ });
19
+ //#endregion
20
+ //#region src/server/web-bot-auth.ts
21
+ /** Milliseconds a key directory fetch may take before the signature counts as unverifiable. */
22
+ const DIRECTORY_TIMEOUT_MS = 5e3;
23
+ const DEFAULT_MAX_AGE = 300;
24
+ const FUTURE_SKEW = 60;
25
+ const DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
26
+ var InvalidSignatureError = class extends Error {
27
+ name = "InvalidSignatureError";
28
+ response;
29
+ constructor(response) {
30
+ super("Web Bot Auth signature was rejected");
31
+ this.response = response;
32
+ }
33
+ };
34
+ function invalidSignatureResponse(error) {
35
+ return error instanceof InvalidSignatureError ? error.response : void 0;
36
+ }
37
+ function invalidSignatureProblem(detail) {
38
+ return problemResponse(compact({
39
+ type: `${PROBLEM_BASE}/invalid-signature`,
40
+ title: "Invalid signature",
41
+ status: 403,
42
+ detail
43
+ }));
44
+ }
45
+ function discoverViaSignatureAgent(options) {
46
+ const fetchFn = options.fetch ?? fetch;
47
+ const allow = new Set(options.allow);
48
+ const cache = /* @__PURE__ */ new Map();
49
+ const lookup = async ({ keyid, agent }) => {
50
+ if (agent === void 0) return;
51
+ let url;
52
+ try {
53
+ url = new URL(agent);
54
+ } catch {
55
+ return;
56
+ }
57
+ if (url.protocol !== "https:" || !allow.has(url.hostname)) return;
58
+ const directoryUrl = url.pathname === "/" || url.pathname === "" ? `${url.origin}${DIRECTORY_PATH}` : agent;
59
+ let pending = cache.get(directoryUrl);
60
+ if (pending === void 0) {
61
+ pending = loadDirectory(fetchFn, directoryUrl);
62
+ cache.set(directoryUrl, pending);
63
+ }
64
+ let keys;
65
+ try {
66
+ keys = await pending;
67
+ } catch {
68
+ cache.delete(directoryUrl);
69
+ return;
70
+ }
71
+ return keys.find((key) => key.kid === keyid);
72
+ };
73
+ return { lookup };
74
+ }
75
+ async function verifyWebBotAuth(request, options) {
76
+ if (options === void 0 || options.verify === false) return;
77
+ const signatureInput = request.headers.get("Signature-Input");
78
+ if (signatureInput === null) {
79
+ if (options.required === true) throw new InvalidSignatureError(invalidSignatureProblem("Signature-Input is required"));
80
+ return;
81
+ }
82
+ const parsed = parseSignatureInput(signatureInput);
83
+ const signatureHeader = request.headers.get("Signature");
84
+ if (parsed === void 0 || signatureHeader === null) throw reject("Signature-Input could not be parsed");
85
+ const signature = parseSignature(signatureHeader, parsed.label);
86
+ if (signature === void 0) throw reject("Signature could not be parsed");
87
+ const now = options.now?.() ?? Math.floor(Date.now() / 1e3);
88
+ const maxAge = options.maxAge ?? DEFAULT_MAX_AGE;
89
+ if (typeof parsed.created !== "number") throw reject("Signature-Input created is required");
90
+ if (parsed.created > now + FUTURE_SKEW) throw reject("Signature-Input created is in the future");
91
+ if (now - parsed.created > maxAge) throw reject("Signature-Input created is too old");
92
+ if (typeof parsed.expires === "number" && parsed.expires < now) throw reject("Signature-Input expires is in the past");
93
+ if (parsed.keyid === void 0) throw reject("Signature-Input keyid is required");
94
+ const agent = parseSignatureAgent(request.headers.get("Signature-Agent"), parsed.label);
95
+ const lookup = typeof options.keys === "function" ? options.keys : options.keys.lookup;
96
+ let key;
97
+ try {
98
+ key = await lookup({
99
+ request,
100
+ keyid: parsed.keyid,
101
+ agent
102
+ });
103
+ } catch {
104
+ throw reject("Web Bot Auth key lookup failed");
105
+ }
106
+ if (key === void 0) throw reject("Web Bot Auth key was not found");
107
+ const base = signatureBase(request, parsed);
108
+ if (base === void 0) throw reject("signed components could not be covered");
109
+ const alg = parsed.alg ?? algorithmFromJwk(key);
110
+ if (alg === void 0) throw reject("signature algorithm is not supported");
111
+ if (!await verifyBytes(key, alg, signature, base)) throw reject("HTTP Message Signature did not verify");
112
+ return Object.freeze({
113
+ id: parsed.keyid,
114
+ kind: "web-bot-auth"
115
+ });
116
+ }
117
+ function reject(detail) {
118
+ return new InvalidSignatureError(invalidSignatureProblem(detail));
119
+ }
120
+ function parseSignatureInput(header) {
121
+ const member = firstDictionaryMember(header);
122
+ if (member === void 0) return;
123
+ const inner = parseInnerListAndParams(member.value);
124
+ if (inner === void 0) return;
125
+ return compact({
126
+ label: member.key,
127
+ components: inner.components,
128
+ created: inner.created,
129
+ expires: inner.expires,
130
+ keyid: inner.keyid,
131
+ alg: inner.alg,
132
+ innerListAndParams: member.value.trim()
133
+ });
134
+ }
135
+ function parseSignature(header, label) {
136
+ const member = dictionaryMember(header, label);
137
+ if (member === void 0) return;
138
+ return decodeSfBytes(member);
139
+ }
140
+ function parseSignatureAgent(header, label) {
141
+ if (header === null) return;
142
+ const trimmed = header.trim();
143
+ if (trimmed.startsWith("\"")) return unquote(trimmed);
144
+ const member = dictionaryMember(trimmed, label) ?? firstDictionaryMember(trimmed)?.value;
145
+ if (member === void 0) return;
146
+ return unquote(member.trim());
147
+ }
148
+ function firstDictionaryMember(header) {
149
+ const first = splitTopLevel(header, ",")[0];
150
+ if (first === void 0) return;
151
+ const eq = first.indexOf("=");
152
+ if (eq <= 0) return;
153
+ return {
154
+ key: first.slice(0, eq).trim(),
155
+ value: first.slice(eq + 1)
156
+ };
157
+ }
158
+ function dictionaryMember(header, label) {
159
+ for (const part of splitTopLevel(header, ",")) {
160
+ const eq = part.indexOf("=");
161
+ if (eq <= 0) continue;
162
+ if (part.slice(0, eq).trim() === label) return part.slice(eq + 1);
163
+ }
164
+ }
165
+ function parseInnerListAndParams(value) {
166
+ const trimmed = value.trim();
167
+ if (!trimmed.startsWith("(")) return;
168
+ const close = trimmed.indexOf(")");
169
+ if (close < 0) return;
170
+ const components = parseQuotedList(trimmed.slice(1, close));
171
+ if (components === void 0) return;
172
+ const params = parseParams(trimmed.slice(close + 1));
173
+ return compact({
174
+ components,
175
+ created: asUnix(params["created"]),
176
+ expires: asUnix(params["expires"]),
177
+ keyid: typeof params["keyid"] === "string" ? params["keyid"] : void 0,
178
+ alg: typeof params["alg"] === "string" ? params["alg"] : void 0
179
+ });
180
+ }
181
+ function parseQuotedList(inner) {
182
+ const items = [];
183
+ const parts = splitTopLevel(inner, " ");
184
+ for (const part of parts) {
185
+ const next = part.trim();
186
+ if (next === "") continue;
187
+ if (!next.startsWith("\"") || !next.endsWith("\"")) return;
188
+ const item = unquote(next);
189
+ if (item === void 0) return;
190
+ items.push(item);
191
+ }
192
+ return items;
193
+ }
194
+ function parseParams(suffix) {
195
+ const params = {};
196
+ for (const part of suffix.split(";")) {
197
+ const next = part.trim();
198
+ if (next === "") continue;
199
+ const eq = next.indexOf("=");
200
+ if (eq <= 0) continue;
201
+ const name = next.slice(0, eq);
202
+ const raw = next.slice(eq + 1);
203
+ if (raw.startsWith("\"")) {
204
+ const quoted = unquote(raw);
205
+ if (quoted !== void 0) params[name] = quoted;
206
+ continue;
207
+ }
208
+ const numeric = Number(raw);
209
+ params[name] = Number.isFinite(numeric) ? numeric : raw;
210
+ }
211
+ return params;
212
+ }
213
+ function asUnix(value) {
214
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
215
+ }
216
+ function signatureBase(request, parsed) {
217
+ const lines = [];
218
+ for (const component of parsed.components) {
219
+ const value = componentValue(request, component);
220
+ if (value === void 0) return;
221
+ lines.push(`"${component}": ${value}`);
222
+ }
223
+ lines.push(`"@signature-params": ${parsed.innerListAndParams}`);
224
+ return new TextEncoder().encode(lines.join("\n"));
225
+ }
226
+ function componentValue(request, component) {
227
+ if (component.startsWith("@")) {
228
+ const url = new URL(request.url);
229
+ switch (component) {
230
+ case "@method": return request.method;
231
+ case "@authority": return url.host;
232
+ case "@path": return url.pathname;
233
+ case "@query": return url.search;
234
+ case "@target-uri": return url.href;
235
+ case "@scheme": return url.protocol.replace(":", "");
236
+ case "@request-target": return `${url.pathname}${url.search}`;
237
+ default: return;
238
+ }
239
+ }
240
+ return request.headers.get(component) ?? void 0;
241
+ }
242
+ function algorithmFromJwk(key) {
243
+ if (key.kty === "OKP" && key.crv === "Ed25519") return "ed25519";
244
+ if (key.kty === "EC" && key.crv === "P-256") return "ecdsa-p256-sha256";
245
+ }
246
+ async function verifyBytes(key, alg, signature, data) {
247
+ try {
248
+ if (alg === "ed25519") {
249
+ const cryptoKey = await crypto.subtle.importKey("jwk", key, "Ed25519", false, ["verify"]);
250
+ return await crypto.subtle.verify("Ed25519", cryptoKey, signature, data);
251
+ }
252
+ if (alg === "ecdsa-p256-sha256") {
253
+ const cryptoKey = await crypto.subtle.importKey("jwk", key, {
254
+ name: "ECDSA",
255
+ namedCurve: "P-256"
256
+ }, false, ["verify"]);
257
+ return await crypto.subtle.verify({
258
+ name: "ECDSA",
259
+ hash: "SHA-256"
260
+ }, cryptoKey, signature, data);
261
+ }
262
+ return false;
263
+ } catch {
264
+ return false;
265
+ }
266
+ }
267
+ async function loadDirectory(fetchFn, directoryUrl) {
268
+ const response = await fetchFn(directoryUrl, {
269
+ headers: { accept: "application/http-message-signatures-directory+json, application/json" },
270
+ signal: timeoutSignal(DIRECTORY_TIMEOUT_MS)
271
+ });
272
+ if (!response.ok) throw new TypeError("directory fetch failed");
273
+ const body = await response.json();
274
+ if (body === null || typeof body !== "object" || Array.isArray(body)) return [];
275
+ const keys = body.keys;
276
+ if (!Array.isArray(keys)) return [];
277
+ return keys.filter(isWebBotAuthJwk);
278
+ }
279
+ function isWebBotAuthJwk(value) {
280
+ return value !== null && typeof value === "object" && !Array.isArray(value);
281
+ }
282
+ function splitTopLevel(input, separator) {
283
+ const parts = [];
284
+ let current = "";
285
+ let quotes = false;
286
+ let depth = 0;
287
+ for (const char of input) {
288
+ if (char === "\"" && depth === 0) {
289
+ quotes = !quotes;
290
+ current += char;
291
+ continue;
292
+ }
293
+ if (!quotes && char === "(") {
294
+ depth += 1;
295
+ current += char;
296
+ continue;
297
+ }
298
+ if (!quotes && char === ")" && depth > 0) {
299
+ depth -= 1;
300
+ current += char;
301
+ continue;
302
+ }
303
+ if (!quotes && depth === 0 && char === separator) {
304
+ parts.push(current);
305
+ current = "";
306
+ continue;
307
+ }
308
+ current += char;
309
+ }
310
+ if (current !== "") parts.push(current);
311
+ return parts;
312
+ }
313
+ function unquote(value) {
314
+ if (!value.startsWith("\"")) return value;
315
+ if (!value.endsWith("\"") || value.length < 2) return;
316
+ return value.slice(1, -1).replaceAll("\\\"", "\"");
317
+ }
318
+ function decodeSfBytes(value) {
319
+ const trimmed = value.trim();
320
+ if (!trimmed.startsWith(":") || !trimmed.endsWith(":") || trimmed.length < 2) return;
321
+ try {
322
+ const binary = atob(trimmed.slice(1, -1));
323
+ const bytes = new Uint8Array(binary.length);
324
+ for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.codePointAt(index) ?? 0;
325
+ return bytes;
326
+ } catch {
327
+ return;
328
+ }
329
+ }
330
+ //#endregion
331
+ //#region src/server/evaluations.ts
332
+ function permissionOf(lookup, item) {
333
+ return lookup(typeof item.action?.name === "string" ? item.action.name : void 0, item.resource);
334
+ }
335
+ function evaluationRow(decision) {
336
+ switch (decision.outcome) {
337
+ case "granted": return {
338
+ decision: true,
339
+ context: {
340
+ outcome: "granted",
341
+ permdock: decision
342
+ }
343
+ };
344
+ case "denied": return {
345
+ decision: false,
346
+ context: {
347
+ outcome: "denied",
348
+ permdock: {
349
+ ...decision,
350
+ denials: wireDenials(decision.denials)
351
+ }
352
+ }
353
+ };
354
+ case "approval-required": return {
355
+ decision: false,
356
+ context: {
357
+ outcome: "approval-required",
358
+ permdock: decision
359
+ }
360
+ };
361
+ default: return decision;
362
+ }
363
+ }
364
+ function applyApprovalResume(decision, permission, permdock, store, request, resource, adapter) {
365
+ return resumeDecision({
366
+ decision,
367
+ permission,
368
+ subject: permdock.subject,
369
+ store,
370
+ resource,
371
+ adapter,
372
+ token: request === void 0 ? void 0 : readApprovalHeader(request.headers)
373
+ });
374
+ }
375
+ function evaluateOne(lookup, permdock, item, store, header, adapter) {
376
+ const permission = permissionOf(lookup, item);
377
+ if (permission === void 0) return Promise.resolve(NO_GRANT);
378
+ const data = itemResourceData(item.resource);
379
+ const decide = permdock.decide;
380
+ const decision = decide(permission, data, compact({
381
+ source: "endpoint",
382
+ adapter,
383
+ trusted: false,
384
+ boundary: "decision-endpoint"
385
+ }));
386
+ return resumeDecision({
387
+ decision,
388
+ permission,
389
+ subject: permdock.subject,
390
+ store,
391
+ resource: resourceRef(permission, data, item.resource?.id),
392
+ adapter,
393
+ token: header,
394
+ consume: false
395
+ });
396
+ }
397
+ async function resolvePermdock(options, request, tenant) {
398
+ if (options.resolve !== void 0) {
399
+ const permdock = await options.resolve(request);
400
+ return tenant === void 0 ? permdock : permdock.tenant(tenant);
401
+ }
402
+ if (options.getPermDock !== void 0) return options.getPermDock(tenant === void 0 ? void 0 : { tenant });
403
+ throw new TypeError("evaluations handler needs resolve or getPermDock");
404
+ }
405
+ function createEvaluationsHandler(options) {
406
+ const adapter = options.adapter ?? "server";
407
+ const lookup = permissionLookup(options.policy.permissions);
408
+ const maxEvaluations = options.maxEvaluations ?? 256;
409
+ const POST = async (request) => {
410
+ let body;
411
+ try {
412
+ body = await request.json();
413
+ } catch {
414
+ return validationProblem("evaluations body was not valid JSON");
415
+ }
416
+ if (body === null || typeof body !== "object" || Array.isArray(body)) return validationProblem("evaluations body must be an object");
417
+ const evaluations = body.evaluations;
418
+ if (evaluations === void 0) return validationProblem("evaluations array is required");
419
+ if (!Array.isArray(evaluations)) return validationProblem("evaluations must be an array");
420
+ if (evaluations.length > maxEvaluations) return batchTooLarge(maxEvaluations);
421
+ const header = readApprovalHeader(request.headers);
422
+ let permdock;
423
+ try {
424
+ permdock = await resolvePermdock(options, request);
425
+ } catch (error) {
426
+ if (error instanceof InvalidSignatureError) return error.response;
427
+ throw error;
428
+ }
429
+ const rows = await Promise.all(evaluations.map(async (item) => {
430
+ return evaluationRow(await evaluateOne(lookup, permdock, item !== null && typeof item === "object" ? item : {}, options.store, header, adapter));
431
+ }));
432
+ return Response.json({ evaluations: rows });
433
+ };
434
+ const GET = async (request) => {
435
+ const url = new URL(request.url);
436
+ if (url.pathname.includes("authzen-configuration")) {
437
+ const origin = url.origin;
438
+ return Response.json({
439
+ policy_decision_point: origin,
440
+ access_evaluation_endpoint: `${origin}/access/v1/evaluation`,
441
+ access_evaluations_endpoint: `${origin}/access/v1/evaluations`
442
+ });
443
+ }
444
+ const tenant = url.searchParams.get("tenant") ?? void 0;
445
+ let permdock;
446
+ try {
447
+ permdock = await resolvePermdock(options, request, tenant);
448
+ } catch (error) {
449
+ if (error instanceof InvalidSignatureError) return error.response;
450
+ throw error;
451
+ }
452
+ const snapshot = permdock.snapshot();
453
+ return Response.json(await Promise.resolve(snapshot));
454
+ };
455
+ return {
456
+ POST,
457
+ GET
458
+ };
459
+ }
460
+ //#endregion
461
+ export { invalidSignatureProblem as a, NO_GRANT as c, discoverViaSignatureAgent as i, createEvaluationsHandler as n, invalidSignatureResponse as o, InvalidSignatureError as r, verifyWebBotAuth as s, applyApprovalResume as t };