@spinajs/authn-keys 0.0.0-stage → 3.0.1

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 (342) hide show
  1. package/README.md +165 -2
  2. package/lib/cjs/bootstrap.d.ts +6 -0
  3. package/lib/cjs/bootstrap.d.ts.map +1 -0
  4. package/lib/cjs/bootstrap.js +23 -0
  5. package/lib/cjs/bootstrap.js.map +1 -0
  6. package/lib/cjs/challenge/challenge.d.ts +27 -0
  7. package/lib/cjs/challenge/challenge.d.ts.map +1 -0
  8. package/lib/cjs/challenge/challenge.js +56 -0
  9. package/lib/cjs/challenge/challenge.js.map +1 -0
  10. package/lib/cjs/challenge/index.d.ts +2 -0
  11. package/lib/cjs/challenge/index.d.ts.map +1 -0
  12. package/lib/cjs/challenge/index.js +18 -0
  13. package/lib/cjs/challenge/index.js.map +1 -0
  14. package/lib/cjs/cli/AddKey.d.ts +18 -0
  15. package/lib/cjs/cli/AddKey.d.ts.map +1 -0
  16. package/lib/cjs/cli/AddKey.js +65 -0
  17. package/lib/cjs/cli/AddKey.js.map +1 -0
  18. package/lib/cjs/cli/ListKeys.d.ts +11 -0
  19. package/lib/cjs/cli/ListKeys.d.ts.map +1 -0
  20. package/lib/cjs/cli/ListKeys.js +48 -0
  21. package/lib/cjs/cli/ListKeys.js.map +1 -0
  22. package/lib/cjs/cli/RevokeKey.d.ts +9 -0
  23. package/lib/cjs/cli/RevokeKey.d.ts.map +1 -0
  24. package/lib/cjs/cli/RevokeKey.js +42 -0
  25. package/lib/cjs/cli/RevokeKey.js.map +1 -0
  26. package/lib/cjs/cli/common.d.ts +9 -0
  27. package/lib/cjs/cli/common.d.ts.map +1 -0
  28. package/lib/cjs/cli/common.js +35 -0
  29. package/lib/cjs/cli/common.js.map +1 -0
  30. package/lib/cjs/cli/index.d.ts +5 -0
  31. package/lib/cjs/cli/index.d.ts.map +1 -0
  32. package/lib/cjs/cli/index.js +21 -0
  33. package/lib/cjs/cli/index.js.map +1 -0
  34. package/lib/cjs/config/authn-keys.d.ts +9 -0
  35. package/lib/cjs/config/authn-keys.d.ts.map +1 -0
  36. package/lib/cjs/config/authn-keys.js +23 -0
  37. package/lib/cjs/config/authn-keys.js.map +1 -0
  38. package/lib/cjs/httpsig/base.d.ts +8 -0
  39. package/lib/cjs/httpsig/base.d.ts.map +1 -0
  40. package/lib/cjs/httpsig/base.js +73 -0
  41. package/lib/cjs/httpsig/base.js.map +1 -0
  42. package/lib/cjs/httpsig/fields.d.ts +17 -0
  43. package/lib/cjs/httpsig/fields.d.ts.map +1 -0
  44. package/lib/cjs/httpsig/fields.js +137 -0
  45. package/lib/cjs/httpsig/fields.js.map +1 -0
  46. package/lib/cjs/httpsig/index.d.ts +3 -0
  47. package/lib/cjs/httpsig/index.d.ts.map +1 -0
  48. package/lib/cjs/httpsig/index.js +19 -0
  49. package/lib/cjs/httpsig/index.js.map +1 -0
  50. package/lib/cjs/index.d.ts +13 -0
  51. package/lib/cjs/index.d.ts.map +1 -0
  52. package/lib/cjs/index.js +29 -0
  53. package/lib/cjs/index.js.map +1 -0
  54. package/lib/cjs/jwk/base64url.d.ts +7 -0
  55. package/lib/cjs/jwk/base64url.d.ts.map +1 -0
  56. package/lib/cjs/jwk/base64url.js +22 -0
  57. package/lib/cjs/jwk/base64url.js.map +1 -0
  58. package/lib/cjs/jwk/ed25519.d.ts +9 -0
  59. package/lib/cjs/jwk/ed25519.d.ts.map +1 -0
  60. package/lib/cjs/jwk/ed25519.js +47 -0
  61. package/lib/cjs/jwk/ed25519.js.map +1 -0
  62. package/lib/cjs/jwk/index.d.ts +5 -0
  63. package/lib/cjs/jwk/index.d.ts.map +1 -0
  64. package/lib/cjs/jwk/index.js +21 -0
  65. package/lib/cjs/jwk/index.js.map +1 -0
  66. package/lib/cjs/jwk/keys.d.ts +18 -0
  67. package/lib/cjs/jwk/keys.d.ts.map +1 -0
  68. package/lib/cjs/jwk/keys.js +102 -0
  69. package/lib/cjs/jwk/keys.js.map +1 -0
  70. package/lib/cjs/jwk/signature.d.ts +11 -0
  71. package/lib/cjs/jwk/signature.d.ts.map +1 -0
  72. package/lib/cjs/jwk/signature.js +45 -0
  73. package/lib/cjs/jwk/signature.js.map +1 -0
  74. package/lib/cjs/jws/index.d.ts +4 -0
  75. package/lib/cjs/jws/index.d.ts.map +1 -0
  76. package/lib/cjs/jws/index.js +20 -0
  77. package/lib/cjs/jws/index.js.map +1 -0
  78. package/lib/cjs/jws/json.d.ts +11 -0
  79. package/lib/cjs/jws/json.d.ts.map +1 -0
  80. package/lib/cjs/jws/json.js +76 -0
  81. package/lib/cjs/jws/json.js.map +1 -0
  82. package/lib/cjs/jws/signer.d.ts +25 -0
  83. package/lib/cjs/jws/signer.d.ts.map +1 -0
  84. package/lib/cjs/jws/signer.js +83 -0
  85. package/lib/cjs/jws/signer.js.map +1 -0
  86. package/lib/cjs/jws/verifier.d.ts +10 -0
  87. package/lib/cjs/jws/verifier.d.ts.map +1 -0
  88. package/lib/cjs/jws/verifier.js +86 -0
  89. package/lib/cjs/jws/verifier.js.map +1 -0
  90. package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts +7 -0
  91. package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts.map +1 -0
  92. package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.js +40 -0
  93. package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.js.map +1 -0
  94. package/lib/cjs/migrations/index.d.ts +2 -0
  95. package/lib/cjs/migrations/index.d.ts.map +1 -0
  96. package/lib/cjs/migrations/index.js +18 -0
  97. package/lib/cjs/migrations/index.js.map +1 -0
  98. package/lib/cjs/models/AuthnKey.d.ts +22 -0
  99. package/lib/cjs/models/AuthnKey.d.ts.map +1 -0
  100. package/lib/cjs/models/AuthnKey.js +43 -0
  101. package/lib/cjs/models/AuthnKey.js.map +1 -0
  102. package/lib/cjs/models/AuthnNonce.d.ts +8 -0
  103. package/lib/cjs/models/AuthnNonce.d.ts.map +1 -0
  104. package/lib/cjs/models/AuthnNonce.js +31 -0
  105. package/lib/cjs/models/AuthnNonce.js.map +1 -0
  106. package/lib/cjs/models/index.d.ts +3 -0
  107. package/lib/cjs/models/index.d.ts.map +1 -0
  108. package/lib/cjs/models/index.js +19 -0
  109. package/lib/cjs/models/index.js.map +1 -0
  110. package/lib/cjs/nonce/index.d.ts +2 -0
  111. package/lib/cjs/nonce/index.d.ts.map +1 -0
  112. package/lib/cjs/nonce/index.js +18 -0
  113. package/lib/cjs/nonce/index.js.map +1 -0
  114. package/lib/cjs/nonce/store.d.ts +22 -0
  115. package/lib/cjs/nonce/store.d.ts.map +1 -0
  116. package/lib/cjs/nonce/store.js +98 -0
  117. package/lib/cjs/nonce/store.js.map +1 -0
  118. package/lib/cjs/options/index.d.ts +2 -0
  119. package/lib/cjs/options/index.d.ts.map +1 -0
  120. package/lib/cjs/options/index.js +18 -0
  121. package/lib/cjs/options/index.js.map +1 -0
  122. package/lib/cjs/options/options.d.ts +47 -0
  123. package/lib/cjs/options/options.d.ts.map +1 -0
  124. package/lib/cjs/options/options.js +42 -0
  125. package/lib/cjs/options/options.js.map +1 -0
  126. package/lib/cjs/package.json +1 -0
  127. package/lib/cjs/register-schema.d.ts +2 -0
  128. package/lib/cjs/register-schema.d.ts.map +1 -0
  129. package/lib/cjs/register-schema.js +9 -0
  130. package/lib/cjs/register-schema.js.map +1 -0
  131. package/lib/cjs/registry/index.d.ts +4 -0
  132. package/lib/cjs/registry/index.d.ts.map +1 -0
  133. package/lib/cjs/registry/index.js +20 -0
  134. package/lib/cjs/registry/index.js.map +1 -0
  135. package/lib/cjs/registry/orm-store.d.ts +15 -0
  136. package/lib/cjs/registry/orm-store.d.ts.map +1 -0
  137. package/lib/cjs/registry/orm-store.js +109 -0
  138. package/lib/cjs/registry/orm-store.js.map +1 -0
  139. package/lib/cjs/registry/registry.d.ts +54 -0
  140. package/lib/cjs/registry/registry.d.ts.map +1 -0
  141. package/lib/cjs/registry/registry.js +244 -0
  142. package/lib/cjs/registry/registry.js.map +1 -0
  143. package/lib/cjs/registry/store.d.ts +25 -0
  144. package/lib/cjs/registry/store.d.ts.map +1 -0
  145. package/lib/cjs/registry/store.js +66 -0
  146. package/lib/cjs/registry/store.js.map +1 -0
  147. package/lib/cjs/schema.d.ts +88 -0
  148. package/lib/cjs/schema.d.ts.map +1 -0
  149. package/lib/cjs/schema.js +41 -0
  150. package/lib/cjs/schema.js.map +1 -0
  151. package/lib/cjs/strategies/assertion.d.ts +29 -0
  152. package/lib/cjs/strategies/assertion.d.ts.map +1 -0
  153. package/lib/cjs/strategies/assertion.js +118 -0
  154. package/lib/cjs/strategies/assertion.js.map +1 -0
  155. package/lib/cjs/strategies/challenge.d.ts +25 -0
  156. package/lib/cjs/strategies/challenge.d.ts.map +1 -0
  157. package/lib/cjs/strategies/challenge.js +81 -0
  158. package/lib/cjs/strategies/challenge.js.map +1 -0
  159. package/lib/cjs/strategies/httpsig.d.ts +34 -0
  160. package/lib/cjs/strategies/httpsig.d.ts.map +1 -0
  161. package/lib/cjs/strategies/httpsig.js +127 -0
  162. package/lib/cjs/strategies/httpsig.js.map +1 -0
  163. package/lib/cjs/strategies/index.d.ts +5 -0
  164. package/lib/cjs/strategies/index.d.ts.map +1 -0
  165. package/lib/cjs/strategies/index.js +21 -0
  166. package/lib/cjs/strategies/index.js.map +1 -0
  167. package/lib/cjs/strategies/keys.d.ts +43 -0
  168. package/lib/cjs/strategies/keys.d.ts.map +1 -0
  169. package/lib/cjs/strategies/keys.js +93 -0
  170. package/lib/cjs/strategies/keys.js.map +1 -0
  171. package/lib/mjs/bootstrap.d.ts +6 -0
  172. package/lib/mjs/bootstrap.d.ts.map +1 -0
  173. package/lib/mjs/bootstrap.js +20 -0
  174. package/lib/mjs/bootstrap.js.map +1 -0
  175. package/lib/mjs/challenge/challenge.d.ts +27 -0
  176. package/lib/mjs/challenge/challenge.d.ts.map +1 -0
  177. package/lib/mjs/challenge/challenge.js +45 -0
  178. package/lib/mjs/challenge/challenge.js.map +1 -0
  179. package/lib/mjs/challenge/index.d.ts +2 -0
  180. package/lib/mjs/challenge/index.d.ts.map +1 -0
  181. package/lib/mjs/challenge/index.js +2 -0
  182. package/lib/mjs/challenge/index.js.map +1 -0
  183. package/lib/mjs/cli/AddKey.d.ts +18 -0
  184. package/lib/mjs/cli/AddKey.d.ts.map +1 -0
  185. package/lib/mjs/cli/AddKey.js +62 -0
  186. package/lib/mjs/cli/AddKey.js.map +1 -0
  187. package/lib/mjs/cli/ListKeys.d.ts +11 -0
  188. package/lib/mjs/cli/ListKeys.d.ts.map +1 -0
  189. package/lib/mjs/cli/ListKeys.js +44 -0
  190. package/lib/mjs/cli/ListKeys.js.map +1 -0
  191. package/lib/mjs/cli/RevokeKey.d.ts +9 -0
  192. package/lib/mjs/cli/RevokeKey.d.ts.map +1 -0
  193. package/lib/mjs/cli/RevokeKey.js +39 -0
  194. package/lib/mjs/cli/RevokeKey.js.map +1 -0
  195. package/lib/mjs/cli/common.d.ts +9 -0
  196. package/lib/mjs/cli/common.d.ts.map +1 -0
  197. package/lib/mjs/cli/common.js +30 -0
  198. package/lib/mjs/cli/common.js.map +1 -0
  199. package/lib/mjs/cli/index.d.ts +5 -0
  200. package/lib/mjs/cli/index.d.ts.map +1 -0
  201. package/lib/mjs/cli/index.js +5 -0
  202. package/lib/mjs/cli/index.js.map +1 -0
  203. package/lib/mjs/config/authn-keys.d.ts +9 -0
  204. package/lib/mjs/config/authn-keys.d.ts.map +1 -0
  205. package/lib/mjs/config/authn-keys.js +21 -0
  206. package/lib/mjs/config/authn-keys.js.map +1 -0
  207. package/lib/mjs/httpsig/base.d.ts +8 -0
  208. package/lib/mjs/httpsig/base.d.ts.map +1 -0
  209. package/lib/mjs/httpsig/base.js +67 -0
  210. package/lib/mjs/httpsig/base.js.map +1 -0
  211. package/lib/mjs/httpsig/fields.d.ts +17 -0
  212. package/lib/mjs/httpsig/fields.d.ts.map +1 -0
  213. package/lib/mjs/httpsig/fields.js +133 -0
  214. package/lib/mjs/httpsig/fields.js.map +1 -0
  215. package/lib/mjs/httpsig/index.d.ts +3 -0
  216. package/lib/mjs/httpsig/index.d.ts.map +1 -0
  217. package/lib/mjs/httpsig/index.js +3 -0
  218. package/lib/mjs/httpsig/index.js.map +1 -0
  219. package/lib/mjs/index.d.ts +13 -0
  220. package/lib/mjs/index.d.ts.map +1 -0
  221. package/lib/mjs/index.js +13 -0
  222. package/lib/mjs/index.js.map +1 -0
  223. package/lib/mjs/jwk/base64url.d.ts +7 -0
  224. package/lib/mjs/jwk/base64url.d.ts.map +1 -0
  225. package/lib/mjs/jwk/base64url.js +18 -0
  226. package/lib/mjs/jwk/base64url.js.map +1 -0
  227. package/lib/mjs/jwk/ed25519.d.ts +9 -0
  228. package/lib/mjs/jwk/ed25519.d.ts.map +1 -0
  229. package/lib/mjs/jwk/ed25519.js +42 -0
  230. package/lib/mjs/jwk/ed25519.js.map +1 -0
  231. package/lib/mjs/jwk/index.d.ts +5 -0
  232. package/lib/mjs/jwk/index.d.ts.map +1 -0
  233. package/lib/mjs/jwk/index.js +5 -0
  234. package/lib/mjs/jwk/index.js.map +1 -0
  235. package/lib/mjs/jwk/keys.d.ts +18 -0
  236. package/lib/mjs/jwk/keys.d.ts.map +1 -0
  237. package/lib/mjs/jwk/keys.js +95 -0
  238. package/lib/mjs/jwk/keys.js.map +1 -0
  239. package/lib/mjs/jwk/signature.d.ts +11 -0
  240. package/lib/mjs/jwk/signature.d.ts.map +1 -0
  241. package/lib/mjs/jwk/signature.js +39 -0
  242. package/lib/mjs/jwk/signature.js.map +1 -0
  243. package/lib/mjs/jws/index.d.ts +4 -0
  244. package/lib/mjs/jws/index.d.ts.map +1 -0
  245. package/lib/mjs/jws/index.js +4 -0
  246. package/lib/mjs/jws/index.js.map +1 -0
  247. package/lib/mjs/jws/json.d.ts +11 -0
  248. package/lib/mjs/jws/json.d.ts.map +1 -0
  249. package/lib/mjs/jws/json.js +72 -0
  250. package/lib/mjs/jws/json.js.map +1 -0
  251. package/lib/mjs/jws/signer.d.ts +25 -0
  252. package/lib/mjs/jws/signer.d.ts.map +1 -0
  253. package/lib/mjs/jws/signer.js +79 -0
  254. package/lib/mjs/jws/signer.js.map +1 -0
  255. package/lib/mjs/jws/verifier.d.ts +10 -0
  256. package/lib/mjs/jws/verifier.d.ts.map +1 -0
  257. package/lib/mjs/jws/verifier.js +83 -0
  258. package/lib/mjs/jws/verifier.js.map +1 -0
  259. package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts +7 -0
  260. package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts.map +1 -0
  261. package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.js +37 -0
  262. package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.js.map +1 -0
  263. package/lib/mjs/migrations/index.d.ts +2 -0
  264. package/lib/mjs/migrations/index.d.ts.map +1 -0
  265. package/lib/mjs/migrations/index.js +2 -0
  266. package/lib/mjs/migrations/index.js.map +1 -0
  267. package/lib/mjs/models/AuthnKey.d.ts +22 -0
  268. package/lib/mjs/models/AuthnKey.d.ts.map +1 -0
  269. package/lib/mjs/models/AuthnKey.js +40 -0
  270. package/lib/mjs/models/AuthnKey.js.map +1 -0
  271. package/lib/mjs/models/AuthnNonce.d.ts +8 -0
  272. package/lib/mjs/models/AuthnNonce.d.ts.map +1 -0
  273. package/lib/mjs/models/AuthnNonce.js +28 -0
  274. package/lib/mjs/models/AuthnNonce.js.map +1 -0
  275. package/lib/mjs/models/index.d.ts +3 -0
  276. package/lib/mjs/models/index.d.ts.map +1 -0
  277. package/lib/mjs/models/index.js +3 -0
  278. package/lib/mjs/models/index.js.map +1 -0
  279. package/lib/mjs/nonce/index.d.ts +2 -0
  280. package/lib/mjs/nonce/index.d.ts.map +1 -0
  281. package/lib/mjs/nonce/index.js +2 -0
  282. package/lib/mjs/nonce/index.js.map +1 -0
  283. package/lib/mjs/nonce/store.d.ts +22 -0
  284. package/lib/mjs/nonce/store.d.ts.map +1 -0
  285. package/lib/mjs/nonce/store.js +92 -0
  286. package/lib/mjs/nonce/store.js.map +1 -0
  287. package/lib/mjs/options/index.d.ts +2 -0
  288. package/lib/mjs/options/index.d.ts.map +1 -0
  289. package/lib/mjs/options/index.js +2 -0
  290. package/lib/mjs/options/index.js.map +1 -0
  291. package/lib/mjs/options/options.d.ts +47 -0
  292. package/lib/mjs/options/options.d.ts.map +1 -0
  293. package/lib/mjs/options/options.js +39 -0
  294. package/lib/mjs/options/options.js.map +1 -0
  295. package/lib/mjs/package.json +1 -0
  296. package/lib/mjs/register-schema.d.ts +2 -0
  297. package/lib/mjs/register-schema.d.ts.map +1 -0
  298. package/lib/mjs/register-schema.js +7 -0
  299. package/lib/mjs/register-schema.js.map +1 -0
  300. package/lib/mjs/registry/index.d.ts +4 -0
  301. package/lib/mjs/registry/index.d.ts.map +1 -0
  302. package/lib/mjs/registry/index.js +4 -0
  303. package/lib/mjs/registry/index.js.map +1 -0
  304. package/lib/mjs/registry/orm-store.d.ts +15 -0
  305. package/lib/mjs/registry/orm-store.d.ts.map +1 -0
  306. package/lib/mjs/registry/orm-store.js +106 -0
  307. package/lib/mjs/registry/orm-store.js.map +1 -0
  308. package/lib/mjs/registry/registry.d.ts +54 -0
  309. package/lib/mjs/registry/registry.d.ts.map +1 -0
  310. package/lib/mjs/registry/registry.js +239 -0
  311. package/lib/mjs/registry/registry.js.map +1 -0
  312. package/lib/mjs/registry/store.d.ts +25 -0
  313. package/lib/mjs/registry/store.d.ts.map +1 -0
  314. package/lib/mjs/registry/store.js +57 -0
  315. package/lib/mjs/registry/store.js.map +1 -0
  316. package/lib/mjs/schema.d.ts +88 -0
  317. package/lib/mjs/schema.d.ts.map +1 -0
  318. package/lib/mjs/schema.js +38 -0
  319. package/lib/mjs/schema.js.map +1 -0
  320. package/lib/mjs/strategies/assertion.d.ts +29 -0
  321. package/lib/mjs/strategies/assertion.d.ts.map +1 -0
  322. package/lib/mjs/strategies/assertion.js +115 -0
  323. package/lib/mjs/strategies/assertion.js.map +1 -0
  324. package/lib/mjs/strategies/challenge.d.ts +25 -0
  325. package/lib/mjs/strategies/challenge.d.ts.map +1 -0
  326. package/lib/mjs/strategies/challenge.js +78 -0
  327. package/lib/mjs/strategies/challenge.js.map +1 -0
  328. package/lib/mjs/strategies/httpsig.d.ts +34 -0
  329. package/lib/mjs/strategies/httpsig.d.ts.map +1 -0
  330. package/lib/mjs/strategies/httpsig.js +124 -0
  331. package/lib/mjs/strategies/httpsig.js.map +1 -0
  332. package/lib/mjs/strategies/index.d.ts +5 -0
  333. package/lib/mjs/strategies/index.d.ts.map +1 -0
  334. package/lib/mjs/strategies/index.js +5 -0
  335. package/lib/mjs/strategies/index.js.map +1 -0
  336. package/lib/mjs/strategies/keys.d.ts +43 -0
  337. package/lib/mjs/strategies/keys.d.ts.map +1 -0
  338. package/lib/mjs/strategies/keys.js +85 -0
  339. package/lib/mjs/strategies/keys.js.map +1 -0
  340. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  341. package/lib/tsconfig.mjs.tsbuildinfo +1 -0
  342. package/package.json +79 -4
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OrmKeyStore = void 0;
13
+ const di_1 = require("@spinajs/di");
14
+ const orm_1 = require("@spinajs/orm");
15
+ const contracts_1 = require("@spinajs/authn/contracts");
16
+ const AuthnKey_js_1 = require("../models/AuthnKey.js");
17
+ const luxon_1 = require("luxon");
18
+ const store_js_1 = require("./store.js");
19
+ function toRecord(row) {
20
+ const createdBy = row.created_by ? (0, store_js_1.decodePrincipalRef)(row.created_by) : undefined;
21
+ const expiresAt = row.expires_at?.toJSDate();
22
+ const revokedAt = row.revoked_at?.toJSDate();
23
+ const lastUsedAt = row.last_used_at?.toJSDate();
24
+ return Object.freeze({
25
+ kid: row.kid,
26
+ owner: Object.freeze({ type: row.owner_type, id: row.owner_id }),
27
+ alg: row.alg,
28
+ jwk: Object.freeze(JSON.parse(row.jwk)),
29
+ thumbprint: row.thumbprint,
30
+ ...(row.name ? { name: row.name } : {}),
31
+ ...(row.scope ? { scope: (0, store_js_1.decodeCeiling)(row.scope) } : {}),
32
+ createdAt: row.created_at.toJSDate(),
33
+ ...(createdBy ? { createdBy } : {}),
34
+ ...(expiresAt ? { expiresAt } : {}),
35
+ ...(revokedAt ? { revokedAt } : {}),
36
+ ...(lastUsedAt ? { lastUsedAt } : {}),
37
+ });
38
+ }
39
+ /** authn_key through the ORM (connection 'default', migration AuthnKeys_2026_10_02_00_00_00). */
40
+ let OrmKeyStore = class OrmKeyStore extends store_js_1.KeyStore {
41
+ async taken(key) {
42
+ const byKid = await AuthnKey_js_1.AuthnKey.where('kid', key.kid);
43
+ const byThumb = await AuthnKey_js_1.AuthnKey.where('thumbprint', key.thumbprint);
44
+ return byKid.length > 0 || byThumb.length > 0;
45
+ }
46
+ async insert(key) {
47
+ if (await this.taken(key)) {
48
+ return 'duplicate';
49
+ }
50
+ const row = new AuthnKey_js_1.AuthnKey({
51
+ kid: key.kid,
52
+ owner_type: key.owner.type,
53
+ owner_id: key.owner.id,
54
+ alg: key.alg,
55
+ jwk: JSON.stringify(key.jwk),
56
+ thumbprint: key.thumbprint,
57
+ scope: key.scope ? (0, store_js_1.encodeCeiling)(key.scope) : null,
58
+ name: key.name ?? null,
59
+ created_by: key.createdBy ? (0, store_js_1.encodePrincipalRef)(key.createdBy) : null,
60
+ created_at: luxon_1.DateTime.fromJSDate(key.createdAt),
61
+ ...(key.expiresAt ? { expires_at: luxon_1.DateTime.fromJSDate(key.expiresAt) } : {}),
62
+ });
63
+ try {
64
+ await row.insert();
65
+ }
66
+ catch (e) {
67
+ // Drivers report a unique violation differently; a row that now exists means another insert won the race.
68
+ if (await this.taken(key)) {
69
+ return 'duplicate';
70
+ }
71
+ throw e;
72
+ }
73
+ return 'inserted';
74
+ }
75
+ async get(kid) {
76
+ // A case-insensitive collation (MySQL's default) would also match another case of the kid.
77
+ const row = (await AuthnKey_js_1.AuthnKey.where('kid', kid)).find((r) => r.kid === kid);
78
+ return row ? toRecord(row) : null;
79
+ }
80
+ async listByOwner(owner) {
81
+ const rows = await AuthnKey_js_1.AuthnKey.where({ owner_type: owner.type, owner_id: owner.id });
82
+ return rows.map(toRecord);
83
+ }
84
+ async revoke(owner, kid, at) {
85
+ const row = await this.get(kid);
86
+ if (!row || !(0, contracts_1.sameRef)(row.owner, owner)) {
87
+ return 'none';
88
+ }
89
+ if (row.revokedAt) {
90
+ return 'already';
91
+ }
92
+ const r = await AuthnKey_js_1.AuthnKey.update({ revoked_at: luxon_1.DateTime.fromJSDate(at) })
93
+ .where('kid', kid)
94
+ .whereNull('revoked_at');
95
+ return (0, orm_1.rowsAffected)(r) > 0 ? 'revoked' : 'already';
96
+ }
97
+ async touch(kid, at) {
98
+ await AuthnKey_js_1.AuthnKey.update({ last_used_at: luxon_1.DateTime.fromJSDate(at) }).where('kid', kid);
99
+ }
100
+ };
101
+ exports.OrmKeyStore = OrmKeyStore;
102
+ __decorate([
103
+ (0, di_1.Autoinject)(orm_1.Orm),
104
+ __metadata("design:type", orm_1.Orm)
105
+ ], OrmKeyStore.prototype, "Orm", void 0);
106
+ exports.OrmKeyStore = OrmKeyStore = __decorate([
107
+ (0, di_1.Injectable)(store_js_1.KeyStore)
108
+ ], OrmKeyStore);
109
+ //# sourceMappingURL=orm-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orm-store.js","sourceRoot":"","sources":["../../../src/registry/orm-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import '../register-schema.js';
2
+ import { AuthnAudit } from '@spinajs/authn/audit';
3
+ import type { AuthnAuditor, AuthnEventBody } from '@spinajs/authn/audit';
4
+ import { AuthnThrottle, KeyRegistry, SecretStore } from '@spinajs/authn/contracts';
5
+ import type { AuthnContext, IdentityRef, KeyChallengeRequest, KeyChallengeResult, KeyMaterial, KeyOwner, KeyRecord, KeyRegisterResult, KeyRegistration, PrincipalRef } from '@spinajs/authn/contracts';
6
+ import type { KeysConfig, KeysOptions } from '../options/options.js';
7
+ import { KeyStore } from './store.js';
8
+ /** Usable for verification: neither revoked nor expired at `now`. */
9
+ export declare const isUsableKey: (key: KeyRecord, now: Date) => boolean;
10
+ /**
11
+ * A login challenge is stored for the key it names; a name that is not a kid still gets a challenge of the same shape
12
+ * (A02), stored under a digest so anonymous input never becomes a long identity id.
13
+ */
14
+ export declare const loginChallengeIdentity: (kid: string) => IdentityRef;
15
+ /** A test seam for building the registry with `new`: each field replaces what DI injects. */
16
+ export interface DefaultKeyRegistryDeps {
17
+ readonly store?: KeyStore;
18
+ readonly secrets?: SecretStore;
19
+ readonly throttle?: AuthnThrottle;
20
+ /** Published to instead of the container's AuthnAudit. */
21
+ readonly audit?: AuthnAuditor;
22
+ /** Complete options that bypass the configuration. */
23
+ readonly options?: KeysOptions;
24
+ }
25
+ /** KeyRegistry over a KeyStore, challenges in SecretStore (lane notes D7, D12). */
26
+ export declare class DefaultKeyRegistry extends KeyRegistry {
27
+ protected readonly Deps?: DefaultKeyRegistryDeps | undefined;
28
+ protected KeysConfig: KeysConfig;
29
+ protected Audit: AuthnAudit;
30
+ protected Store: KeyStore;
31
+ protected Secrets: SecretStore;
32
+ protected Throttle: AuthnThrottle;
33
+ private readonly stamped;
34
+ /** Kids whose last stamp is remembered; past this the least recently stamped is forgotten and costs one extra write. */
35
+ protected readonly maxStamped: number;
36
+ constructor(Deps?: DefaultKeyRegistryDeps | undefined);
37
+ protected get store(): KeyStore;
38
+ protected get secrets(): SecretStore;
39
+ protected get throttle(): AuthnThrottle;
40
+ protected get options(): KeysOptions;
41
+ protected publish(ctx: AuthnContext, e: AuthnEventBody): Promise<void>;
42
+ /** The new key's signature over a 'register' challenge issued to this user; the challenge is redeemed only after the signature holds. */
43
+ protected proofHolds(owner: KeyOwner, key: KeyMaterial, proof: unknown): Promise<boolean>;
44
+ register(reg: KeyRegistration, ctx: AuthnContext): Promise<KeyRegisterResult>;
45
+ list(owner: IdentityRef): Promise<readonly KeyRecord[]>;
46
+ revoke(owner: IdentityRef, kid: string, ctx: AuthnContext, opts?: {
47
+ readonly actor?: PrincipalRef;
48
+ }): Promise<boolean>;
49
+ byId(kid: string): Promise<KeyRecord | null>;
50
+ /** Stamps last_used_at after a successful verification, at most once a minute per key so busy clients write little. */
51
+ touch(kid: string, at: Date): Promise<void>;
52
+ challenge(req: KeyChallengeRequest, ctx: AuthnContext): Promise<KeyChallengeResult>;
53
+ }
54
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/registry/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DefaultKeyRegistry = exports.loginChallengeIdentity = exports.isUsableKey = void 0;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const di_1 = require("@spinajs/di");
15
+ const configuration_1 = require("@spinajs/configuration");
16
+ require("../register-schema.js");
17
+ const audit_1 = require("@spinajs/authn/audit");
18
+ const contracts_1 = require("@spinajs/authn/contracts");
19
+ const util_1 = require("@spinajs/util");
20
+ const exceptions_1 = require("@spinajs/exceptions");
21
+ const challenge_js_1 = require("../challenge/challenge.js");
22
+ const keys_js_1 = require("../jwk/keys.js");
23
+ const options_js_1 = require("../options/options.js");
24
+ const store_js_1 = require("./store.js");
25
+ const OWNER_TYPES = ['user', 'service', 'agent'];
26
+ const MAX_OWNER_ID = 64;
27
+ const MAX_NAME = 128;
28
+ const TOUCH_INTERVAL_MS = 60_000;
29
+ const MAX_CREATED_BY = 100;
30
+ const CEILING_KEYS = ['roles', 'permissions', 'resources', 'expiresAt', 'reason'];
31
+ const nonEmpty = (v, max) => typeof v === 'string' && v.length > 0 && v.length <= max;
32
+ function ownerOf(v) {
33
+ const o = (0, util_1.isPlainObject)(v) ? v : {};
34
+ const [typeOk, type] = (0, util_1._try_check_arg)((0, util_1._is_string)((0, util_1._contains)(OWNER_TYPES)))(o.type, 'owner.type');
35
+ const [idOk, id] = (0, util_1._try_check_arg)((0, util_1._is_string)((0, util_1._between)(1, MAX_OWNER_ID)))(o.id, 'owner.id');
36
+ if (!typeOk || !idOk) {
37
+ throw new exceptions_1.InvalidArgument('a key owner is a user, a service or an agent with an id of 1-64 characters');
38
+ }
39
+ return Object.freeze({ type: type, id: id });
40
+ }
41
+ /** An actor that fits authn_key.created_by (varchar 100). */
42
+ function principalRefOf(v) {
43
+ const o = (0, util_1.isPlainObject)(v) ? v : {};
44
+ const [typeOk, type] = (0, util_1._try_check_arg)((0, util_1._is_string)((0, util_1._between)(1, MAX_CREATED_BY)))(o.type, 'actor.type');
45
+ const [idOk, id] = (0, util_1._try_check_arg)((0, util_1._is_string)((0, util_1._between)(1, MAX_CREATED_BY)))(o.id, 'actor.id');
46
+ if (!typeOk || !idOk) {
47
+ return null;
48
+ }
49
+ const ref = Object.freeze({ type: type, id: id });
50
+ return (0, store_js_1.encodePrincipalRef)(ref).length <= MAX_CREATED_BY ? ref : null;
51
+ }
52
+ const strings = (v) => Array.isArray(v) && v.every((x) => typeof x === 'string');
53
+ /** The Ceiling shape (design §5), so a malformed scope never reaches storage. */
54
+ function isCeiling(v) {
55
+ if (!(0, util_1.isPlainObject)(v) || Object.keys(v).some((k) => !CEILING_KEYS.includes(k))) {
56
+ return false;
57
+ }
58
+ const resources = v.resources;
59
+ return (v.roles === undefined || strings(v.roles)) && (v.permissions === undefined || strings(v.permissions)) && (resources === undefined || (Array.isArray(resources) && resources.every((r) => (0, util_1.isPlainObject)(r) && typeof r.type === 'string' && (r.id === undefined || typeof r.id === 'string')))) && (v.expiresAt === undefined || (v.expiresAt instanceof Date && !Number.isNaN(v.expiresAt.getTime()))) && (v.reason === undefined || typeof v.reason === 'string');
60
+ }
61
+ /** Usable for verification: neither revoked nor expired at `now`. */
62
+ const isUsableKey = (key, now) => !key.revokedAt && (!key.expiresAt || now.getTime() < key.expiresAt.getTime());
63
+ exports.isUsableKey = isUsableKey;
64
+ /**
65
+ * A login challenge is stored for the key it names; a name that is not a kid still gets a challenge of the same shape
66
+ * (A02), stored under a digest so anonymous input never becomes a long identity id.
67
+ */
68
+ const loginChallengeIdentity = (kid) => ({ type: 'key', id: (0, keys_js_1.isValidKid)(kid) ? kid : (0, node_crypto_1.createHash)('sha256').update(kid, 'utf8').digest('hex') });
69
+ exports.loginChallengeIdentity = loginChallengeIdentity;
70
+ /** KeyRegistry over a KeyStore, challenges in SecretStore (lane notes D7, D12). */
71
+ let DefaultKeyRegistry = class DefaultKeyRegistry extends contracts_1.KeyRegistry {
72
+ constructor(Deps) {
73
+ super();
74
+ this.Deps = Deps;
75
+ this.stamped = new Map();
76
+ /** Kids whose last stamp is remembered; past this the least recently stamped is forgotten and costs one extra write. */
77
+ this.maxStamped = 10_000;
78
+ }
79
+ get store() {
80
+ return this.Deps?.store ?? this.Store;
81
+ }
82
+ get secrets() {
83
+ return this.Deps?.secrets ?? this.Secrets;
84
+ }
85
+ get throttle() {
86
+ return this.Deps?.throttle ?? this.Throttle;
87
+ }
88
+ get options() {
89
+ return (0, options_js_1.keysOptionsOf)(this.Deps?.options ?? this.KeysConfig);
90
+ }
91
+ publish(ctx, e) {
92
+ return (this.Deps?.audit ?? this.Audit).publishIn(ctx, e);
93
+ }
94
+ /** The new key's signature over a 'register' challenge issued to this user; the challenge is redeemed only after the signature holds. */
95
+ async proofHolds(owner, key, proof) {
96
+ if (!(0, util_1.isPlainObject)(proof)) {
97
+ return false;
98
+ }
99
+ const parsed = (0, challenge_js_1.parseChallengeId)(proof.challengeId);
100
+ const audience = this.options.challenge.audience;
101
+ if (!parsed || audience === null || !(0, challenge_js_1.verifyChallengeSignature)(key, parsed.nonce, 'register', audience, proof.signature)) {
102
+ return false;
103
+ }
104
+ return this.secrets.redeem({ type: 'user', id: owner.id }, (0, challenge_js_1.challengeSecretPurpose)(parsed.rid), parsed.nonce);
105
+ }
106
+ async register(reg, ctx) {
107
+ const r = reg;
108
+ const owner = ownerOf(r.owner);
109
+ const fail = async (code) => {
110
+ await this.publish(ctx, { type: 'key.register', outcome: 'failure', identity: owner, reason: code });
111
+ return { ok: false, code };
112
+ };
113
+ const material = (0, keys_js_1.checkPublicJwk)(r.jwk, this.options.algorithms);
114
+ const kid = r.kid === undefined && material ? (0, keys_js_1.thumbprint)(material.jwk) : r.kid;
115
+ const expiresAt = r.expiresAt;
116
+ const badExpiry = expiresAt !== undefined && (!(expiresAt instanceof Date) || !(expiresAt.getTime() > ctx.now.getTime()));
117
+ // Names reach admin terminals (authn:key-list): no control characters.
118
+ const badName = r.name !== undefined && (!nonEmpty(r.name, MAX_NAME) || /[\u0000-\u001f\u007f-\u009f]/.test(r.name));
119
+ const badScope = r.scope !== undefined && !isCeiling(r.scope);
120
+ if (!material || !(0, keys_js_1.isValidKid)(kid) || badExpiry || badName || badScope) {
121
+ return fail('invalid_key');
122
+ }
123
+ let createdBy;
124
+ if (owner.type === 'user') {
125
+ if (!(await this.proofHolds(owner, material, r.proof))) {
126
+ return fail('invalid_proof');
127
+ }
128
+ }
129
+ else {
130
+ const actor = principalRefOf(r.actor);
131
+ if (!actor) {
132
+ throw new exceptions_1.InvalidArgument('a service or agent key is registered by an actor (admin route or CLI)');
133
+ }
134
+ createdBy = actor;
135
+ }
136
+ const key = {
137
+ ...material,
138
+ kid,
139
+ owner,
140
+ thumbprint: (0, keys_js_1.thumbprint)(material.jwk),
141
+ ...(r.name !== undefined ? { name: r.name } : {}),
142
+ // A copy through the stored form, so the memory store keeps what the ORM store would return.
143
+ ...(r.scope !== undefined ? { scope: (0, store_js_1.decodeCeiling)((0, store_js_1.encodeCeiling)(r.scope)) } : {}),
144
+ createdAt: ctx.now,
145
+ ...(createdBy ? { createdBy } : {}),
146
+ ...(expiresAt !== undefined ? { expiresAt: expiresAt } : {}),
147
+ };
148
+ if ((await this.store.insert(key)) === 'duplicate') {
149
+ return fail('duplicate');
150
+ }
151
+ const stored = (await this.store.get(kid)) ?? key;
152
+ await this.publish(ctx, { type: 'key.register', outcome: 'success', identity: owner, ...(createdBy ? { actor: createdBy } : {}), data: { kid, thumbprint: stored.thumbprint, alg: stored.alg } });
153
+ return { ok: true, key: stored };
154
+ }
155
+ async list(owner) {
156
+ return this.store.listByOwner(owner);
157
+ }
158
+ async revoke(owner, kid, ctx, opts) {
159
+ const done = (0, keys_js_1.isValidKid)(kid) ? await this.store.revoke(owner, kid, ctx.now) : 'none';
160
+ if (done === 'none') {
161
+ return false;
162
+ }
163
+ if (done === 'already') {
164
+ return true;
165
+ }
166
+ await this.publish(ctx, { type: 'key.revoke', outcome: 'success', identity: owner, ...(opts?.actor ? { actor: opts.actor } : {}), data: { kid } });
167
+ return true;
168
+ }
169
+ async byId(kid) {
170
+ return (0, keys_js_1.isValidKid)(kid) ? this.store.get(kid) : null;
171
+ }
172
+ /** Stamps last_used_at after a successful verification, at most once a minute per key so busy clients write little. */
173
+ async touch(kid, at) {
174
+ const last = this.stamped.get(kid);
175
+ if (last !== undefined && at.getTime() - last < TOUCH_INTERVAL_MS && at.getTime() >= last) {
176
+ return;
177
+ }
178
+ this.stamped.delete(kid);
179
+ if (this.stamped.size >= this.maxStamped) {
180
+ this.stamped.delete(this.stamped.keys().next().value);
181
+ }
182
+ this.stamped.set(kid, at.getTime());
183
+ await this.store.touch(kid, at);
184
+ }
185
+ async challenge(req, ctx) {
186
+ const r = req;
187
+ let identity;
188
+ if (r.purpose === 'register') {
189
+ const owner = ownerOf(r.owner);
190
+ if (owner.type !== 'user') {
191
+ throw new exceptions_1.InvalidArgument('register challenges are issued to users; services and agents register without a proof');
192
+ }
193
+ identity = owner;
194
+ }
195
+ else if (r.purpose === 'login' && typeof r.kid === 'string') {
196
+ if (ctx.ip) {
197
+ const t = await this.throttle.attempt([{ kind: 'ip', value: ctx.ip }], 'login', ctx);
198
+ if (!t.allowed) {
199
+ return { ok: false, retryAfterSeconds: t.retryAfterSeconds };
200
+ }
201
+ }
202
+ identity = (0, exports.loginChallengeIdentity)(r.kid);
203
+ }
204
+ else {
205
+ throw new exceptions_1.InvalidArgument('a key challenge is { purpose: register, owner } or { purpose: login, kid }');
206
+ }
207
+ const { ttlSeconds: ttl, audience } = this.options.challenge;
208
+ if (audience === null) {
209
+ throw new exceptions_1.InvalidOption('authn.keys.challenge.audience (or authn.keys.assertion.audience) must be set to issue key challenges');
210
+ }
211
+ const rid = (0, challenge_js_1.newChallengeRid)();
212
+ const nonce = await this.secrets.issue(identity, (0, challenge_js_1.challengeSecretPurpose)(rid), ttl);
213
+ if (!(0, challenge_js_1.isChallengeNonce)(nonce)) {
214
+ throw new exceptions_1.UnexpectedServerError('the SecretStore must issue base64url secrets of at least 128 bits for key challenges');
215
+ }
216
+ return { ok: true, challenge: Object.freeze({ id: (0, challenge_js_1.challengeId)(rid, nonce), nonce, expiresAt: new Date(ctx.now.getTime() + ttl * 1000) }) };
217
+ }
218
+ };
219
+ exports.DefaultKeyRegistry = DefaultKeyRegistry;
220
+ __decorate([
221
+ (0, configuration_1.Config)('authn.keys'),
222
+ __metadata("design:type", Object)
223
+ ], DefaultKeyRegistry.prototype, "KeysConfig", void 0);
224
+ __decorate([
225
+ (0, di_1.Autoinject)(audit_1.AuthnAudit),
226
+ __metadata("design:type", audit_1.AuthnAudit)
227
+ ], DefaultKeyRegistry.prototype, "Audit", void 0);
228
+ __decorate([
229
+ (0, di_1.Autoinject)(store_js_1.KeyStore),
230
+ __metadata("design:type", store_js_1.KeyStore)
231
+ ], DefaultKeyRegistry.prototype, "Store", void 0);
232
+ __decorate([
233
+ (0, di_1.Autoinject)(contracts_1.SecretStore),
234
+ __metadata("design:type", contracts_1.SecretStore)
235
+ ], DefaultKeyRegistry.prototype, "Secrets", void 0);
236
+ __decorate([
237
+ (0, di_1.Autoinject)(contracts_1.AuthnThrottle),
238
+ __metadata("design:type", contracts_1.AuthnThrottle)
239
+ ], DefaultKeyRegistry.prototype, "Throttle", void 0);
240
+ exports.DefaultKeyRegistry = DefaultKeyRegistry = __decorate([
241
+ (0, di_1.Injectable)(contracts_1.KeyRegistry),
242
+ __metadata("design:paramtypes", [Object])
243
+ ], DefaultKeyRegistry);
244
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/registry/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Ceiling, IdentityRef, KeyRecord, PrincipalRef } from '@spinajs/authn/contracts';
2
+ /** authn_key behind DefaultKeyRegistry: MemoryKeyStore, or OrmKeyStore in apps. */
3
+ export declare abstract class KeyStore {
4
+ /** 'duplicate' when the kid or the thumbprint is taken, also when another insert won a race. */
5
+ abstract insert(key: KeyRecord): Promise<'inserted' | 'duplicate'>;
6
+ abstract get(kid: string): Promise<KeyRecord | null>;
7
+ abstract listByOwner(owner: IdentityRef): Promise<readonly KeyRecord[]>;
8
+ /** Sets revokedAt unless already set ('already'); 'none' when the key does not exist or belongs to another owner (type and id). */
9
+ abstract revoke(owner: IdentityRef, kid: string, at: Date): Promise<'revoked' | 'already' | 'none'>;
10
+ abstract touch(kid: string, at: Date): Promise<void>;
11
+ }
12
+ export declare function encodePrincipalRef(ref: PrincipalRef): string;
13
+ export declare function decodePrincipalRef(text: string): PrincipalRef;
14
+ export declare function encodeCeiling(scope: Ceiling): string;
15
+ export declare function decodeCeiling(text: string): Ceiling;
16
+ /** In-process authn_key, for tests and single-process apps. */
17
+ export declare class MemoryKeyStore extends KeyStore {
18
+ private readonly rows;
19
+ insert(key: KeyRecord): Promise<'inserted' | 'duplicate'>;
20
+ get(kid: string): Promise<KeyRecord | null>;
21
+ listByOwner(owner: IdentityRef): Promise<readonly KeyRecord[]>;
22
+ revoke(owner: IdentityRef, kid: string, at: Date): Promise<'revoked' | 'already' | 'none'>;
23
+ touch(kid: string, at: Date): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/registry/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG9F,mFAAmF;AACnF,8BAAsB,QAAQ;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;IACnE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IACxE,mIAAmI;IACnI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;IACpG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAG7D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAID,+DAA+D;AAC/D,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IAE/C,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAM9D;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAEhD;IAEK,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAEnE;IAEK,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,CAU/F;IAEK,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhD;CACF"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoryKeyStore = exports.KeyStore = void 0;
4
+ exports.encodePrincipalRef = encodePrincipalRef;
5
+ exports.decodePrincipalRef = decodePrincipalRef;
6
+ exports.encodeCeiling = encodeCeiling;
7
+ exports.decodeCeiling = decodeCeiling;
8
+ const contracts_1 = require("@spinajs/authn/contracts");
9
+ /** authn_key behind DefaultKeyRegistry: MemoryKeyStore, or OrmKeyStore in apps. */
10
+ class KeyStore {
11
+ }
12
+ exports.KeyStore = KeyStore;
13
+ function encodePrincipalRef(ref) {
14
+ return (0, contracts_1.principalKey)(ref);
15
+ }
16
+ function decodePrincipalRef(text) {
17
+ const at = text.indexOf(':');
18
+ return { type: decodeURIComponent(text.slice(0, at)), id: text.slice(at + 1) };
19
+ }
20
+ function encodeCeiling(scope) {
21
+ return JSON.stringify(scope);
22
+ }
23
+ function decodeCeiling(text) {
24
+ const raw = JSON.parse(text);
25
+ return Object.freeze(raw.expiresAt === undefined ? raw : { ...raw, expiresAt: new Date(raw.expiresAt) });
26
+ }
27
+ const freeze = (k) => Object.freeze({ ...k, owner: Object.freeze({ ...k.owner }), jwk: Object.freeze({ ...k.jwk }) });
28
+ /** In-process authn_key, for tests and single-process apps. */
29
+ class MemoryKeyStore extends KeyStore {
30
+ constructor() {
31
+ super(...arguments);
32
+ this.rows = new Map();
33
+ }
34
+ async insert(key) {
35
+ if (this.rows.has(key.kid) || [...this.rows.values()].some((r) => r.thumbprint === key.thumbprint)) {
36
+ return 'duplicate';
37
+ }
38
+ this.rows.set(key.kid, freeze(key));
39
+ return 'inserted';
40
+ }
41
+ async get(kid) {
42
+ return this.rows.get(kid) ?? null;
43
+ }
44
+ async listByOwner(owner) {
45
+ return [...this.rows.values()].filter((r) => (0, contracts_1.sameRef)(r.owner, owner));
46
+ }
47
+ async revoke(owner, kid, at) {
48
+ const row = this.rows.get(kid);
49
+ if (!row || !(0, contracts_1.sameRef)(row.owner, owner)) {
50
+ return 'none';
51
+ }
52
+ if (row.revokedAt) {
53
+ return 'already';
54
+ }
55
+ this.rows.set(kid, freeze({ ...row, revokedAt: at }));
56
+ return 'revoked';
57
+ }
58
+ async touch(kid, at) {
59
+ const row = this.rows.get(kid);
60
+ if (row) {
61
+ this.rows.set(kid, freeze({ ...row, lastUsedAt: at }));
62
+ }
63
+ }
64
+ }
65
+ exports.MemoryKeyStore = MemoryKeyStore;
66
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/registry/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /** The authn.keys fragment of the authn configuration; `assertion.typ` is in the authn schema. */
2
+ export declare const AUTHN_KEYS_CONFIGURATION_SCHEMA: {
3
+ $id: string;
4
+ $configurationModule: string;
5
+ description: string;
6
+ type: string;
7
+ properties: {
8
+ algorithms: {
9
+ type: string;
10
+ minItems: number;
11
+ uniqueItems: boolean;
12
+ items: {
13
+ type: string;
14
+ enum: string[];
15
+ };
16
+ default: string[];
17
+ };
18
+ challenge: {
19
+ type: string;
20
+ default: {};
21
+ properties: {
22
+ ttlSeconds: {
23
+ type: string;
24
+ minimum: number;
25
+ maximum: number;
26
+ default: number;
27
+ };
28
+ audience: {
29
+ type: string[];
30
+ minLength: number;
31
+ default: null;
32
+ description: string;
33
+ };
34
+ };
35
+ };
36
+ assertion: {
37
+ type: string;
38
+ default: {};
39
+ properties: {
40
+ audience: {
41
+ type: string[];
42
+ minLength: number;
43
+ default: null;
44
+ description: string;
45
+ };
46
+ maxLifetimeSeconds: {
47
+ type: string;
48
+ minimum: number;
49
+ maximum: number;
50
+ default: number;
51
+ };
52
+ skewSeconds: {
53
+ type: string;
54
+ minimum: number;
55
+ maximum: number;
56
+ default: number;
57
+ };
58
+ };
59
+ };
60
+ httpSignature: {
61
+ type: string;
62
+ default: {};
63
+ properties: {
64
+ maxAgeSeconds: {
65
+ type: string;
66
+ minimum: number;
67
+ maximum: number;
68
+ default: number;
69
+ };
70
+ skewSeconds: {
71
+ type: string;
72
+ minimum: number;
73
+ maximum: number;
74
+ default: number;
75
+ };
76
+ requiredComponents: {
77
+ type: string;
78
+ items: {
79
+ type: string;
80
+ minLength: number;
81
+ };
82
+ default: string[];
83
+ };
84
+ };
85
+ };
86
+ };
87
+ };
88
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,eAAO,MAAM,+BAA+B;;;;;;;YAM1B,IAAI;YAAW,QAAQ;YAAK,WAAW;YAAQ,KAAK;gBAAI,IAAI;gBAAY,IAAI;;YAAwB,OAAO;;;YAEvH,IAAI;YACJ,OAAO;YACP,UAAU;gBACR,UAAU;oBAAI,IAAI;oBAAa,OAAO;oBAAK,OAAO;oBAAQ,OAAO;;gBACjE,QAAQ;oBAAI,IAAI;oBAAsB,SAAS;oBAAK,OAAO;oBAAQ,WAAW;;;;;YAIhF,IAAI;YACJ,OAAO;YACP,UAAU;gBACR,QAAQ;oBAAI,IAAI;oBAAsB,SAAS;oBAAK,OAAO;oBAAQ,WAAW;;gBAC9E,kBAAkB;oBAAI,IAAI;oBAAa,OAAO;oBAAK,OAAO;oBAAO,OAAO;;gBACxE,WAAW;oBAAI,IAAI;oBAAa,OAAO;oBAAK,OAAO;oBAAO,OAAO;;;;;;;;;oBAOhD,IAAI;oBAAa,OAAO;oBAAK,OAAO;oBAAO,OAAO;;;oBACpD,IAAI;oBAAa,OAAO;oBAAK,OAAO;oBAAO,OAAO;;;;;wBAhC5B,IAAI;wBAAY,SAAS;;;;;;;CAqCrE,CAAC"}