@c9up/ream 0.2.28 → 0.2.30

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 (293) hide show
  1. package/README.md +5 -6
  2. package/dist/Codemods.d.ts +24 -0
  3. package/dist/Codemods.d.ts.map +1 -1
  4. package/dist/Codemods.js +211 -1
  5. package/dist/Codemods.js.map +1 -1
  6. package/dist/HttpKernel.d.ts.map +1 -1
  7. package/dist/HttpKernel.js +17 -5
  8. package/dist/HttpKernel.js.map +1 -1
  9. package/dist/Ignitor.d.ts +15 -2
  10. package/dist/Ignitor.d.ts.map +1 -1
  11. package/dist/Ignitor.js +33 -23
  12. package/dist/Ignitor.js.map +1 -1
  13. package/dist/bodyparser/BodyParserMiddleware.d.ts +4 -4
  14. package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -1
  15. package/dist/bodyparser/BodyParserMiddleware.js +41 -11
  16. package/dist/bodyparser/BodyParserMiddleware.js.map +1 -1
  17. package/dist/bodyparser/MultipartFile.d.ts +21 -15
  18. package/dist/bodyparser/MultipartFile.d.ts.map +1 -1
  19. package/dist/bodyparser/MultipartFile.js +40 -58
  20. package/dist/bodyparser/MultipartFile.js.map +1 -1
  21. package/dist/bodyparser/parseSize.d.ts +7 -4
  22. package/dist/bodyparser/parseSize.d.ts.map +1 -1
  23. package/dist/bodyparser/parseSize.js +12 -17
  24. package/dist/bodyparser/parseSize.js.map +1 -1
  25. package/dist/bodyparser/qsParse.d.ts +20 -1
  26. package/dist/bodyparser/qsParse.d.ts.map +1 -1
  27. package/dist/bodyparser/qsParse.js +78 -25
  28. package/dist/bodyparser/qsParse.js.map +1 -1
  29. package/dist/codemods/source.d.ts +57 -0
  30. package/dist/codemods/source.d.ts.map +1 -0
  31. package/dist/codemods/source.js +282 -0
  32. package/dist/codemods/source.js.map +1 -0
  33. package/dist/console/prompts.d.ts.map +1 -1
  34. package/dist/console/prompts.js +3 -1
  35. package/dist/console/prompts.js.map +1 -1
  36. package/dist/container/Container.d.ts.map +1 -1
  37. package/dist/container/Container.js +61 -71
  38. package/dist/container/Container.js.map +1 -1
  39. package/dist/events/Emitter.d.ts +12 -0
  40. package/dist/events/Emitter.d.ts.map +1 -1
  41. package/dist/events/Emitter.js +36 -9
  42. package/dist/events/Emitter.js.map +1 -1
  43. package/dist/events/helix/helpers.d.ts.map +1 -1
  44. package/dist/events/helix/helpers.js +19 -9
  45. package/dist/events/helix/helpers.js.map +1 -1
  46. package/dist/graphql/GraphQLEngine.d.ts +8 -0
  47. package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
  48. package/dist/graphql/GraphQLEngine.js +79 -12
  49. package/dist/graphql/GraphQLEngine.js.map +1 -1
  50. package/dist/helpers/MessageBuilder.d.ts +4 -2
  51. package/dist/helpers/MessageBuilder.d.ts.map +1 -1
  52. package/dist/helpers/MessageBuilder.js +4 -2
  53. package/dist/helpers/MessageBuilder.js.map +1 -1
  54. package/dist/helpers/errors.d.ts +11 -0
  55. package/dist/helpers/errors.d.ts.map +1 -0
  56. package/dist/helpers/errors.js +17 -0
  57. package/dist/helpers/errors.js.map +1 -0
  58. package/dist/helpers/napi-loader.d.ts.map +1 -1
  59. package/dist/helpers/napi-loader.js +3 -2
  60. package/dist/helpers/napi-loader.js.map +1 -1
  61. package/dist/http/Exception.d.ts +14 -1
  62. package/dist/http/Exception.d.ts.map +1 -1
  63. package/dist/http/Exception.js +10 -2
  64. package/dist/http/Exception.js.map +1 -1
  65. package/dist/http/HttpContext.d.ts +31 -2
  66. package/dist/http/HttpContext.d.ts.map +1 -1
  67. package/dist/http/HttpContext.js +12 -5
  68. package/dist/http/HttpContext.js.map +1 -1
  69. package/dist/http/RedirectBuilder.d.ts +9 -3
  70. package/dist/http/RedirectBuilder.d.ts.map +1 -1
  71. package/dist/http/RedirectBuilder.js +43 -37
  72. package/dist/http/RedirectBuilder.js.map +1 -1
  73. package/dist/http/Request.d.ts +42 -17
  74. package/dist/http/Request.d.ts.map +1 -1
  75. package/dist/http/Request.js +80 -58
  76. package/dist/http/Request.js.map +1 -1
  77. package/dist/http/Response.d.ts +7 -4
  78. package/dist/http/Response.d.ts.map +1 -1
  79. package/dist/http/Response.js +14 -6
  80. package/dist/http/Response.js.map +1 -1
  81. package/dist/http/SseStream.js +6 -7
  82. package/dist/http/SseStream.js.map +1 -1
  83. package/dist/http/permissions.d.ts +25 -0
  84. package/dist/http/permissions.d.ts.map +1 -0
  85. package/dist/http/permissions.js +38 -0
  86. package/dist/http/permissions.js.map +1 -0
  87. package/dist/http-client/HttpClient.d.ts +111 -0
  88. package/dist/http-client/HttpClient.d.ts.map +1 -0
  89. package/dist/http-client/HttpClient.js +386 -0
  90. package/dist/http-client/HttpClient.js.map +1 -0
  91. package/dist/http-client/addresses.d.ts +14 -0
  92. package/dist/http-client/addresses.d.ts.map +1 -0
  93. package/dist/http-client/addresses.js +57 -0
  94. package/dist/http-client/addresses.js.map +1 -0
  95. package/dist/http-client/fake.d.ts +50 -0
  96. package/dist/http-client/fake.d.ts.map +1 -0
  97. package/dist/http-client/fake.js +95 -0
  98. package/dist/http-client/fake.js.map +1 -0
  99. package/dist/http-client/index.d.ts +7 -0
  100. package/dist/http-client/index.d.ts.map +1 -0
  101. package/dist/http-client/index.js +7 -0
  102. package/dist/http-client/index.js.map +1 -0
  103. package/dist/index.d.ts +4 -3
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +1 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/middleware/Pipeline.d.ts.map +1 -1
  108. package/dist/middleware/Pipeline.js +6 -3
  109. package/dist/middleware/Pipeline.js.map +1 -1
  110. package/dist/native/generated.d.ts +93 -36
  111. package/dist/native/generated.d.ts.map +1 -1
  112. package/dist/profiler/Profiler.d.ts.map +1 -1
  113. package/dist/profiler/Profiler.js +4 -1
  114. package/dist/profiler/Profiler.js.map +1 -1
  115. package/dist/profiler/client.generated.d.ts +5 -0
  116. package/dist/profiler/client.generated.d.ts.map +1 -0
  117. package/dist/profiler/client.generated.js +6 -0
  118. package/dist/profiler/client.generated.js.map +1 -0
  119. package/dist/profiler/collectors.d.ts +92 -13
  120. package/dist/profiler/collectors.d.ts.map +1 -1
  121. package/dist/profiler/collectors.js +106 -19
  122. package/dist/profiler/collectors.js.map +1 -1
  123. package/dist/profiler/endpoint.d.ts +2 -1
  124. package/dist/profiler/endpoint.d.ts.map +1 -1
  125. package/dist/profiler/endpoint.js +25 -1
  126. package/dist/profiler/endpoint.js.map +1 -1
  127. package/dist/profiler/index.d.ts +8 -4
  128. package/dist/profiler/index.d.ts.map +1 -1
  129. package/dist/profiler/index.js +11 -4
  130. package/dist/profiler/index.js.map +1 -1
  131. package/dist/profiler/middleware.d.ts.map +1 -1
  132. package/dist/profiler/middleware.js +76 -10
  133. package/dist/profiler/middleware.js.map +1 -1
  134. package/dist/profiler/preview.d.ts +17 -0
  135. package/dist/profiler/preview.d.ts.map +1 -0
  136. package/dist/profiler/preview.js +100 -0
  137. package/dist/profiler/preview.js.map +1 -0
  138. package/dist/profiler/toolbar.d.ts +15 -23
  139. package/dist/profiler/toolbar.d.ts.map +1 -1
  140. package/dist/profiler/toolbar.js +25 -91
  141. package/dist/profiler/toolbar.js.map +1 -1
  142. package/dist/profiler/types.d.ts +6 -1
  143. package/dist/profiler/types.d.ts.map +1 -1
  144. package/dist/router/Router.d.ts +6 -0
  145. package/dist/router/Router.d.ts.map +1 -1
  146. package/dist/router/Router.js +115 -12
  147. package/dist/router/Router.js.map +1 -1
  148. package/dist/rpc/RpcProvider.d.ts +6 -0
  149. package/dist/rpc/RpcProvider.d.ts.map +1 -1
  150. package/dist/rpc/RpcProvider.js +4 -1
  151. package/dist/rpc/RpcProvider.js.map +1 -1
  152. package/dist/rpc/RpcRouter.d.ts +27 -14
  153. package/dist/rpc/RpcRouter.d.ts.map +1 -1
  154. package/dist/rpc/RpcRouter.js +97 -40
  155. package/dist/rpc/RpcRouter.js.map +1 -1
  156. package/dist/scheduler/Scheduler.js +1 -1
  157. package/dist/scheduler/Scheduler.js.map +1 -1
  158. package/dist/scheduler/locks/RedisLockBackend.d.ts.map +1 -1
  159. package/dist/scheduler/locks/RedisLockBackend.js +13 -2
  160. package/dist/scheduler/locks/RedisLockBackend.js.map +1 -1
  161. package/dist/security/CookieSigner.d.ts.map +1 -1
  162. package/dist/security/CookieSigner.js +32 -8
  163. package/dist/security/CookieSigner.js.map +1 -1
  164. package/dist/security/SignedUrl.d.ts.map +1 -1
  165. package/dist/security/SignedUrl.js +16 -19
  166. package/dist/security/SignedUrl.js.map +1 -1
  167. package/dist/server/Server.d.ts +44 -12
  168. package/dist/server/Server.d.ts.map +1 -1
  169. package/dist/server/Server.js +31 -10
  170. package/dist/server/Server.js.map +1 -1
  171. package/dist/server/nativeGrpc.d.ts +27 -0
  172. package/dist/server/nativeGrpc.d.ts.map +1 -0
  173. package/dist/server/nativeGrpc.js +47 -0
  174. package/dist/server/nativeGrpc.js.map +1 -0
  175. package/dist/server/nativeLimits.d.ts +57 -0
  176. package/dist/server/nativeLimits.d.ts.map +1 -0
  177. package/dist/server/nativeLimits.js +75 -0
  178. package/dist/server/nativeLimits.js.map +1 -0
  179. package/dist/session/Session.d.ts +12 -0
  180. package/dist/session/Session.d.ts.map +1 -1
  181. package/dist/session/Session.js +13 -4
  182. package/dist/session/Session.js.map +1 -1
  183. package/dist/session/SessionMiddleware.d.ts.map +1 -1
  184. package/dist/session/SessionMiddleware.js +28 -9
  185. package/dist/session/SessionMiddleware.js.map +1 -1
  186. package/dist/session/config.d.ts +5 -0
  187. package/dist/session/config.d.ts.map +1 -1
  188. package/dist/session/config.js +8 -0
  189. package/dist/session/config.js.map +1 -1
  190. package/dist/session/drivers/MemoryDriver.d.ts.map +1 -1
  191. package/dist/session/drivers/MemoryDriver.js +26 -7
  192. package/dist/session/drivers/MemoryDriver.js.map +1 -1
  193. package/dist/session/errors.d.ts +17 -0
  194. package/dist/session/errors.d.ts.map +1 -1
  195. package/dist/session/errors.js +21 -0
  196. package/dist/session/errors.js.map +1 -1
  197. package/dist/session/templateTags.d.ts +14 -0
  198. package/dist/session/templateTags.d.ts.map +1 -1
  199. package/dist/session/templateTags.js +45 -17
  200. package/dist/session/templateTags.js.map +1 -1
  201. package/dist/storage/StaticMiddleware.d.ts.map +1 -1
  202. package/dist/storage/StaticMiddleware.js +49 -27
  203. package/dist/storage/StaticMiddleware.js.map +1 -1
  204. package/dist/testing/ApiResponse.d.ts.map +1 -1
  205. package/dist/testing/ApiResponse.js +7 -1
  206. package/dist/testing/ApiResponse.js.map +1 -1
  207. package/dist/testing/TestClient.d.ts.map +1 -1
  208. package/dist/testing/TestClient.js +16 -4
  209. package/dist/testing/TestClient.js.map +1 -1
  210. package/dist/utils/Macroable.d.ts +1 -1
  211. package/dist/utils/Macroable.js +2 -2
  212. package/dist/utils/Macroable.js.map +1 -1
  213. package/events.darwin-arm64.node +0 -0
  214. package/events.darwin-x64.node +0 -0
  215. package/events.linux-arm64-gnu.node +0 -0
  216. package/events.linux-x64-gnu.node +0 -0
  217. package/events.win32-x64-msvc.node +0 -0
  218. package/index.darwin-arm64.node +0 -0
  219. package/index.darwin-x64.node +0 -0
  220. package/index.linux-arm64-gnu.node +0 -0
  221. package/index.linux-x64-gnu.node +0 -0
  222. package/index.win32-x64-msvc.node +0 -0
  223. package/package.json +11 -3
  224. package/scheduler.darwin-arm64.node +0 -0
  225. package/scheduler.darwin-x64.node +0 -0
  226. package/scheduler.linux-arm64-gnu.node +0 -0
  227. package/scheduler.linux-x64-gnu.node +0 -0
  228. package/scheduler.win32-x64-msvc.node +0 -0
  229. package/src/Codemods.ts +314 -3
  230. package/src/HttpKernel.ts +18 -7
  231. package/src/Ignitor.ts +58 -26
  232. package/src/bodyparser/BodyParserMiddleware.ts +45 -16
  233. package/src/bodyparser/MultipartFile.ts +46 -67
  234. package/src/bodyparser/parseSize.ts +17 -17
  235. package/src/bodyparser/qsParse.ts +96 -26
  236. package/src/codemods/source.ts +303 -0
  237. package/src/console/prompts.ts +3 -1
  238. package/src/container/Container.ts +97 -81
  239. package/src/events/Emitter.ts +37 -10
  240. package/src/events/helix/helpers.ts +24 -19
  241. package/src/graphql/GraphQLEngine.ts +91 -14
  242. package/src/helpers/MessageBuilder.ts +4 -2
  243. package/src/helpers/errors.ts +16 -0
  244. package/src/helpers/napi-loader.ts +3 -2
  245. package/src/http/Exception.ts +17 -2
  246. package/src/http/HttpContext.ts +34 -5
  247. package/src/http/RedirectBuilder.ts +51 -37
  248. package/src/http/Request.ts +102 -58
  249. package/src/http/Response.ts +15 -7
  250. package/src/http/SseStream.ts +6 -7
  251. package/src/http/permissions.ts +47 -0
  252. package/src/http-client/HttpClient.ts +505 -0
  253. package/src/http-client/addresses.ts +58 -0
  254. package/src/http-client/fake.ts +141 -0
  255. package/src/http-client/index.ts +21 -0
  256. package/src/index.ts +6 -1
  257. package/src/middleware/Pipeline.ts +7 -3
  258. package/src/native/generated.ts +106 -48
  259. package/src/profiler/Profiler.ts +4 -1
  260. package/src/profiler/client/toolbar.css +595 -0
  261. package/src/profiler/client/toolbar.js +1299 -0
  262. package/src/profiler/client.generated.ts +7 -0
  263. package/src/profiler/collectors.ts +156 -19
  264. package/src/profiler/endpoint.ts +27 -1
  265. package/src/profiler/index.ts +17 -3
  266. package/src/profiler/middleware.ts +74 -9
  267. package/src/profiler/preview.ts +104 -0
  268. package/src/profiler/toolbar.ts +28 -91
  269. package/src/profiler/types.ts +6 -1
  270. package/src/router/Router.ts +136 -13
  271. package/src/rpc/RpcProvider.ts +10 -1
  272. package/src/rpc/RpcRouter.ts +129 -45
  273. package/src/scheduler/Scheduler.ts +1 -1
  274. package/src/scheduler/locks/RedisLockBackend.ts +12 -4
  275. package/src/security/CookieSigner.ts +30 -8
  276. package/src/security/SignedUrl.ts +18 -17
  277. package/src/server/Server.ts +60 -12
  278. package/src/server/nativeGrpc.ts +59 -0
  279. package/src/server/nativeLimits.ts +111 -0
  280. package/src/session/Session.ts +29 -4
  281. package/src/session/SessionMiddleware.ts +30 -10
  282. package/src/session/config.ts +7 -0
  283. package/src/session/drivers/MemoryDriver.ts +26 -7
  284. package/src/session/errors.ts +31 -0
  285. package/src/session/templateTags.ts +57 -0
  286. package/src/storage/StaticMiddleware.ts +46 -27
  287. package/src/testing/ApiResponse.ts +7 -1
  288. package/src/testing/TestClient.ts +14 -5
  289. package/src/utils/Macroable.ts +2 -2
  290. package/scripts/build-napi-types.mjs +0 -69
  291. package/scripts/copy-napi.mjs +0 -121
  292. package/scripts/generate-mime.mjs +0 -119
  293. package/scripts/generate-napi-types.mjs +0 -187
@@ -5,13 +5,15 @@
5
5
  *
6
6
  * Usage:
7
7
  * rpc.method('task.validate', handler).guard('jwt').role('cs_member')
8
- * rpc.namespace('task', TaskController) // every public method, DI-resolved per call
8
+ * rpc.namespace('task', TaskController, ['show', 'update']) // listed methods, DI-resolved per call
9
9
  * rpc.group({ guard: 'jwt' }, (r) => { r.method('user.find', handler) })
10
10
  *
11
11
  * @implements MISS-27
12
12
  */
13
13
  import { buildSuccess, isNotification, isRpcShapedError, parseRequest as parseRpcRequest, buildError as rpcError, } from '@c9up/comet';
14
14
  import { currentNodeEnv } from '../env/nodeEnv.js';
15
+ import { isReamError, ReamError } from '../errors/ReamError.js';
16
+ import { holdsPermissions } from '../http/permissions.js';
15
17
  import { composeMiddleware, runValidator } from '../middleware/Pipeline.js';
16
18
  export class RpcMethodBuilder {
17
19
  #def;
@@ -40,25 +42,49 @@ export class RpcMethodBuilder {
40
42
  }
41
43
  }
42
44
  /**
43
- * Unwrap the `{ _body: [...] }` envelope `request.body()` puts around a
44
- * top-level JSON array (it only treats plain objects as the body verbatim). A
45
- * JSON-RPC batch arrives this way; a single request is a plain object and is
46
- * returned unchanged.
45
+ * A -32603 whose detail reaches the caller only outside production: an
46
+ * internal failure's message is where hosts, credentials and queries end up.
47
47
  */
48
- function unwrapBatchBody(value) {
49
- if (typeof value === 'object' && value !== null && '_body' in value) {
50
- const inner = value._body;
51
- if (Array.isArray(inner))
52
- return inner;
48
+ function internalError(detail, id) {
49
+ return rpcError(-32603, currentNodeEnv() !== 'production' ? detail : 'Internal error', id);
50
+ }
51
+ /**
52
+ * Whether `name` is a plain method of the controller's own class chain.
53
+ * The walk stops before `Object.prototype` and reads descriptors, so
54
+ * neither `toString` nor a getter (whose read would run code) qualifies.
55
+ */
56
+ function isControllerMethod(proto, name) {
57
+ if (typeof name !== 'string' || name === '' || name === 'constructor')
58
+ return false;
59
+ let current = proto;
60
+ while (typeof current === 'object' && current !== null && current !== Object.prototype) {
61
+ const descriptor = Object.getOwnPropertyDescriptor(current, name);
62
+ if (descriptor)
63
+ return typeof descriptor.value === 'function';
64
+ current = Object.getPrototypeOf(current);
53
65
  }
54
- return value;
66
+ return false;
67
+ }
68
+ /**
69
+ * The JSON media types JSON-RPC over HTTP is sent with. None of them is a
70
+ * CORS-safelisted request type, so a foreign page cannot send one without a
71
+ * preflight.
72
+ */
73
+ const DEFAULT_CONTENT_TYPES = [
74
+ 'application/json',
75
+ 'application/json-rpc',
76
+ 'application/jsonrequest',
77
+ ];
78
+ /** `Application/JSON; charset=utf-8` → `application/json`. */
79
+ function mediaType(contentType) {
80
+ return (contentType?.split(';')[0] ?? '').trim().toLowerCase();
55
81
  }
56
82
  /**
57
83
  * Enforce the method's guards/roles/permissions against the request auth state.
58
84
  * Returns the JSON-RPC error code+message to reject with, or undefined when the
59
85
  * caller is authorized.
60
86
  */
61
- function checkRpcAuthorization(ctx, def) {
87
+ async function checkRpcAuthorization(ctx, def) {
62
88
  const needsAuth = def.guards.length > 0 || def.roles.length > 0 || def.permissions.length > 0;
63
89
  if (needsAuth && !ctx.auth?.isAuthenticated) {
64
90
  return { code: -32003, message: 'Unauthorized' };
@@ -71,9 +97,9 @@ function checkRpcAuthorization(ctx, def) {
71
97
  return { code: -32003, message: 'Insufficient role' };
72
98
  }
73
99
  }
100
+ // A token-authenticated call also needs the token to allow each permission.
74
101
  if (def.permissions.length > 0) {
75
- const userPerms = ctx.auth?.permissions ?? ctx.auth?.user?.permissions ?? [];
76
- if (!def.permissions.every((p) => userPerms.includes(p))) {
102
+ if (!(await holdsPermissions(ctx.auth, def.permissions))) {
77
103
  return { code: -32003, message: 'Insufficient permissions' };
78
104
  }
79
105
  }
@@ -83,6 +109,10 @@ export class RpcRouter {
83
109
  #methods = new Map();
84
110
  #groupConfig = null;
85
111
  #container;
112
+ #contentTypes;
113
+ constructor(options = {}) {
114
+ this.#contentTypes = new Set((options.contentTypes ?? DEFAULT_CONTENT_TYPES).map((type) => mediaType(type)));
115
+ }
86
116
  /**
87
117
  * Set the IoC container used to resolve `namespace()` controllers — mirrors
88
118
  * `GraphQLEngine.useContainer()` so RPC and GraphQL resolve class handlers the
@@ -92,8 +122,20 @@ export class RpcRouter {
92
122
  useContainer(container) {
93
123
  this.#container = container;
94
124
  }
95
- /** Register an RPC method. */
125
+ /**
126
+ * Register an RPC method. JSON-RPC 2.0 §4 reserves names starting with
127
+ * `rpc.` for the protocol itself, so they are refused here, as an empty
128
+ * name is.
129
+ */
96
130
  method(name, handler) {
131
+ if (typeof name !== 'string' || name === '') {
132
+ throw new ReamError('E_RPC_INVALID_METHOD_NAME', 'An RPC method name must be a non-empty string');
133
+ }
134
+ if (name.startsWith('rpc.')) {
135
+ throw new ReamError('E_RPC_RESERVED_METHOD_NAME', `'${name}' is a reserved RPC method name`, {
136
+ hint: 'JSON-RPC 2.0 reserves names starting with "rpc." for rpc-internal methods; pick another prefix.',
137
+ });
138
+ }
97
139
  const def = {
98
140
  name,
99
141
  handler,
@@ -106,22 +148,21 @@ export class RpcRouter {
106
148
  return new RpcMethodBuilder(def);
107
149
  }
108
150
  /**
109
- * Register methods from a controller — auto-registers all public methods.
110
- *
111
- * The parameter used to demand
112
- * `new (...args: unknown[]) => Record<string, (...args: unknown[]) => unknown>`,
113
- * which NO real controller satisfies: a class with any non-method property
114
- * fails the `Record`, and a method declared `bump(): number` fails the
115
- * `unknown[]` parameters, which are compared contravariantly. So the
116
- * documented call — `rpc.namespace('task', TaskController)` — did not
117
- * typecheck, and nothing noticed because the tests were outside `tsc`.
151
+ * Register the listed methods of a controller as `<prefix>.<method>`.
118
152
  *
119
- * Any class, then. The body already checks that what it found is callable
120
- * and names the method when it is not.
153
+ * The list is explicit, like a route binding one `[Controller, 'method']`
154
+ * pair: TypeScript `private`/`protected` vanish at runtime, so a namespace
155
+ * that published "every method on the prototype" made helpers the author
156
+ * never meant to expose remotely callable. The type admits only public
157
+ * method names; the runtime check refuses a name with no plain method
158
+ * behind it (a getter, `constructor`, anything from `Object.prototype`).
121
159
  */
122
- namespace(prefix, controller) {
123
- const proto = controller.prototype;
124
- const methods = Object.getOwnPropertyNames(proto).filter((m) => m !== 'constructor' && typeof proto[m] === 'function');
160
+ namespace(prefix, controller, methods) {
161
+ for (const methodName of methods) {
162
+ if (!isControllerMethod(controller.prototype, methodName)) {
163
+ throw new ReamError('E_RPC_UNKNOWN_CONTROLLER_METHOD', `${controller.name} has no method '${String(methodName)}' to expose as an RPC method`);
164
+ }
165
+ }
125
166
  for (const methodName of methods) {
126
167
  this.method(`${prefix}.${methodName}`, async (ctx, params) => {
127
168
  // Resolve through the container on every call (fresh DI per request,
@@ -158,10 +199,26 @@ export class RpcRouter {
158
199
  }
159
200
  /** Handle an incoming JSON-RPC request. */
160
201
  async handle(ctx) {
161
- // `request.body()` wraps a top-level JSON array — a JSON-RPC batch — as its
162
- // non-object envelope `{ _body: [...] }`. Unwrap it so batch detection works;
163
- // a single request is a plain object and passes through untouched.
164
- const body = unwrapBatchBody(ctx.request.body());
202
+ // A form post, a text/plain body or one with no Content-Type is a CORS
203
+ // simple request: a foreign page sends it with the victim's cookies and
204
+ // no preflight. Refused before the body is read, as JSON-RPC servers
205
+ // answer 415 to anything but JSON.
206
+ if (!this.#contentTypes.has(mediaType(ctx.request.header('content-type')))) {
207
+ ctx.response.status(415).send('');
208
+ return;
209
+ }
210
+ // Parsed here, not through `request.body()`, which turns malformed JSON
211
+ // into `{}` — and §5.1 answers invalid JSON with -32700, not -32600.
212
+ // `raw()` stays outside the try: its 413 is not a parse error.
213
+ const raw = ctx.request.raw();
214
+ let body;
215
+ try {
216
+ body = JSON.parse(raw);
217
+ }
218
+ catch {
219
+ ctx.response.status(200).json(rpcError(-32700, 'Parse error', null));
220
+ return;
221
+ }
165
222
  // Batch support (max 50 to prevent DoS)
166
223
  if (Array.isArray(body)) {
167
224
  // §6: "If the batch rpc call itself fails to be recognized as an valid
@@ -236,7 +293,7 @@ export class RpcRouter {
236
293
  if (!def)
237
294
  return rpcError(-32601, 'Method not found', id);
238
295
  try {
239
- const denied = checkRpcAuthorization(ctx, def);
296
+ const denied = await checkRpcAuthorization(ctx, def);
240
297
  if (denied)
241
298
  return rpcError(denied.code, denied.message, id);
242
299
  // Run declared named middleware (e.g. guards) — they throw to deny, mapped
@@ -250,7 +307,7 @@ export class RpcRouter {
250
307
  if (def.validator) {
251
308
  const token = `validator:${def.validator}`;
252
309
  if (!this.#container?.has(token)) {
253
- return rpcError(-32603, `Validator '${def.validator}' is not registered (bind container.singleton('${token}', () => schema)).`, id);
310
+ return internalError(`Validator '${def.validator}' is not registered (bind container.singleton('${token}', () => schema)).`, id);
254
311
  }
255
312
  const validator = await this.#container.resolve(token);
256
313
  // `runValidator` picks the async result form first — the synchronous
@@ -261,7 +318,10 @@ export class RpcRouter {
261
318
  outcome = await runValidator(validator, params);
262
319
  }
263
320
  catch (err) {
264
- return rpcError(-32603, err instanceof TypeError
321
+ // Caught here rather than below so a validator's error is never
322
+ // honoured as a domain error: a rule hitting the database throws
323
+ // whatever the driver throws.
324
+ return internalError(isReamError(err, 'E_VALIDATOR_UNUSABLE')
265
325
  ? `Validator '${def.validator}' exposes no usable validate method.`
266
326
  : `Validator '${def.validator}' failed: ${err instanceof Error ? err.message : String(err)}`, id);
267
327
  }
@@ -280,10 +340,7 @@ export class RpcRouter {
280
340
  const message = typeof err.message === 'string' ? err.message : 'RPC error';
281
341
  return rpcError(err.code, message, id, err.data);
282
342
  }
283
- // Otherwise don't leak internal error details to the caller.
284
- const isDev = currentNodeEnv() !== 'production';
285
- const message = isDev && err instanceof Error ? err.message : 'Internal error';
286
- return rpcError(-32603, message, id);
343
+ return internalError(err instanceof Error ? err.message : 'Internal error', id);
287
344
  }
288
345
  }
289
346
  /** Get all registered method names. */
@@ -1 +1 @@
1
- {"version":3,"file":"RpcRouter.js","sourceRoot":"","sources":["../../src/rpc/RpcRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RpcRouter.js","sourceRoot":"","sources":["../../src/rpc/RpcRouter.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ function loadNative() {
34
34
  * so scheduler context is never lost.
35
35
  */
36
36
  function translateNativeError(e) {
37
- const asError = e;
37
+ const asError = e instanceof Error ? e : new Error(String(e));
38
38
  const parsed = ReamError.fromNapi(asError);
39
39
  // `fromNapi` returns an `E_UNKNOWN`-coded error when the message is not
40
40
  // a JSON payload. Preserve that context under a scheduler-specific
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/scheduler/Scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../src/scheduler/Scheduler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RedisLockBackend.d.ts","sourceRoot":"","sources":["../../../src/scheduler/locks/RedisLockBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnE,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,2EAA2E;IAC3E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAEpG,MAAM,WAAW,uBAAuB;IACtC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAkBD,qBAAa,gBAAiB,YAAW,WAAW;;gBAOtC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,uBAA4B;IAmB5E;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3C"}
1
+ {"version":3,"file":"RedisLockBackend.d.ts","sourceRoot":"","sources":["../../../src/scheduler/locks/RedisLockBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnE,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,2EAA2E;IAC3E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAEpG,MAAM,WAAW,uBAAuB;IACtC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAkBD,qBAAa,gBAAiB,YAAW,WAAW;;gBAOtC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,uBAA4B;IA2B5E;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3C"}
@@ -38,10 +38,21 @@ export class RedisLockBackend {
38
38
  this.#source = client;
39
39
  this.#prefix = options.prefix ?? 'ream:schedule:lock:';
40
40
  }
41
- /** The client, resolved once and kept. */
41
+ /**
42
+ * The client, resolved once and kept. Only a success is kept: a lookup
43
+ * that fails (the connection is not registered yet at boot, Redis is
44
+ * briefly down) is forgotten so the next task retries it, instead of
45
+ * every lock failing with the same error until the process restarts.
46
+ */
42
47
  #client() {
43
48
  if (!this.#resolved) {
44
- this.#resolved = Promise.resolve(typeof this.#source === 'function' ? this.#source() : this.#source);
49
+ const source = this.#source;
50
+ const pending = (async () => (typeof source === 'function' ? source() : source))();
51
+ this.#resolved = pending;
52
+ pending.catch(() => {
53
+ if (this.#resolved === pending)
54
+ this.#resolved = undefined;
55
+ });
45
56
  }
46
57
  return this.#resolved;
47
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RedisLockBackend.js","sourceRoot":"","sources":["../../../src/scheduler/locks/RedisLockBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAoB,MAAM,kBAAkB,CAAA;AA0BnE;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAG;;;;;CAKf,CAAA;AAED,MAAM,OAAO,gBAAgB;IAClB,OAAO,CAAmB;IAC1B,OAAO,CAAQ;IACxB,SAAS,CAAsC;IAC/C,yEAAyE;IAChE,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE5C,YAAY,MAAyB,EAAE,UAAmC,EAAE;QAC1E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAA;IACxD,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAC9B,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CACnE,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAA;IACjC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,KAAa;QACvC,cAAc,CAAC,KAAK,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;QAC1B,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;QACrF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;IACvD,CAAC;CACF"}
1
+ {"version":3,"file":"RedisLockBackend.js","sourceRoot":"","sources":["../../../src/scheduler/locks/RedisLockBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAoB,MAAM,kBAAkB,CAAA;AA0BnE;;;;;;;;GAQG;AACH,MAAM,OAAO,GAAG;;;;;CAKf,CAAA;AAED,MAAM,OAAO,gBAAgB;IAClB,OAAO,CAAmB;IAC1B,OAAO,CAAQ;IACxB,SAAS,CAAsC;IAC/C,yEAAyE;IAChE,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE5C,YAAY,MAAyB,EAAE,UAAmC,EAAE;QAC1E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAA;IACxD,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;YAC3B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;YAClF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;YACxB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;oBAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC5D,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,IAAI,CAAC,IAAY;QACf,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAA;IACjC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,KAAa;QACvC,cAAc,CAAC,KAAK,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;QAC1B,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;QACrF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;IACvD,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CookieSigner.d.ts","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,2EAA2E;AAC3E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;;CAK7C;AAED,gFAAgF;AAChF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAS;gBACjC,MAAM,SAAsC;CAIzD;AA8BD,qBAAa,YAAY;;gBAIX,MAAM,EAAE,MAAM;IAyD1B;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAMlE,iFAAiF;IACjF,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa9D;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,aAAa,CAE7B;IAED;;;;;;;OAOG;IACH,IAAI,MAAM,IAAI;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;QACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAChC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACxC,CAOA;IAED;;;;;;OAMG;IACH,IAAI,QAAQ,IAAI;QACd,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACpE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAA;KAChE,CAKA;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY;IAIpC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IASrE,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;CAyBnE"}
1
+ {"version":3,"file":"CookieSigner.d.ts","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAUH,2EAA2E;AAC3E,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAS;;CAK7C;AAED,gFAAgF;AAChF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAS;gBACjC,MAAM,SAAsC;CAIzD;AA8BD,qBAAa,YAAY;;gBAIX,MAAM,EAAE,MAAM;IAiE1B;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAMlE,iFAAiF;IACjF,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAa9D;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,aAAa,CAE7B;IAED;;;;;;;OAOG;IACH,IAAI,MAAM,IAAI;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;QACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;QAChC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACxC,CAOA;IAED;;;;;;OAMG;IACH,IAAI,QAAQ,IAAI;QACd,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACpE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAA;KAChE,CAKA;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY;IAIpC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAWrE,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;CAgCnE"}
@@ -21,6 +21,10 @@
21
21
  */
22
22
  import { createCipheriv, createDecipheriv, createHmac, randomBytes } from 'node:crypto';
23
23
  import { hmacSign, hmacVerify } from './crypto.js';
24
+ /** The 96-bit nonce GCM is specified for. */
25
+ const GCM_IV_BYTES = 12;
26
+ /** The full 128-bit authentication tag — never a truncated one. */
27
+ const GCM_TAG_BYTES = 16;
24
28
  /** Raised when no APP_KEY is configured (AdonisJS `E_MISSING_APP_KEY`). */
25
29
  export class E_MISSING_APP_KEY extends Error {
26
30
  code = 'E_MISSING_APP_KEY';
@@ -102,17 +106,27 @@ export class CookieSigner {
102
106
  }
103
107
  if (typeof parsed !== 'object' || parsed === null)
104
108
  return null;
105
- const envelope = parsed;
106
109
  // The KEY must be there, whatever it holds — that is what distinguishes an
107
110
  // envelope from an arbitrary JSON document, and a signed `null` or `0` is a
108
111
  // legitimate payload.
109
- if (!('m' in envelope))
112
+ if (!('m' in parsed))
110
113
  return null;
111
- if (envelope.e !== undefined && envelope.e < Date.now())
114
+ // Each field checked for the type `#seal` writes before it is compared: an
115
+ // expiry that is not a number (`"e": "9999"`, `"e": null`) or a purpose
116
+ // that is not a string must not slip past the comparisons below.
117
+ const expiry = 'e' in parsed ? parsed.e : undefined;
118
+ if (expiry !== undefined) {
119
+ if (typeof expiry !== 'number' || !Number.isFinite(expiry))
120
+ return null;
121
+ if (expiry < Date.now())
122
+ return null;
123
+ }
124
+ const sealedFor = 'p' in parsed ? parsed.p : undefined;
125
+ if (sealedFor !== undefined && typeof sealedFor !== 'string')
112
126
  return null;
113
- if ((envelope.p ?? undefined) !== purpose)
127
+ if (sealedFor !== purpose)
114
128
  return null;
115
- return envelope.m;
129
+ return parsed.m;
116
130
  }
117
131
  /**
118
132
  * Sign a value (AdonisJS `Encryption.verifier.sign`).
@@ -190,8 +204,10 @@ export class CookieSigner {
190
204
  return new CookieSigner(secret ?? this.#secret);
191
205
  }
192
206
  encrypt(value, expiresIn, purpose) {
193
- const iv = randomBytes(12);
194
- const cipher = createCipheriv('aes-256-gcm', this.#keyBuffer, iv);
207
+ const iv = randomBytes(GCM_IV_BYTES);
208
+ const cipher = createCipheriv('aes-256-gcm', this.#keyBuffer, iv, {
209
+ authTagLength: GCM_TAG_BYTES,
210
+ });
195
211
  const sealed = this.#seal(value, expiresIn, purpose);
196
212
  const encrypted = Buffer.concat([cipher.update(sealed, 'utf8'), cipher.final()]);
197
213
  const tag = cipher.getAuthTag();
@@ -212,7 +228,15 @@ export class CookieSigner {
212
228
  const iv = Buffer.from(ivPart, 'base64url');
213
229
  const data = Buffer.from(dataPart, 'base64url');
214
230
  const tag = Buffer.from(tagPart, 'base64url');
215
- const decipher = createDecipheriv('aes-256-gcm', this.#keyBuffer, iv);
231
+ // GCM verifies only as many tag bytes as it is handed: a client that
232
+ // trims the tag to 4 bytes would cut forgery cost from 2^128 to 2^32
233
+ // guesses. Only what `encrypt` produces is accepted — a 12-byte IV and
234
+ // the full 16-byte tag — and the decipher is pinned to that length too.
235
+ if (iv.length !== GCM_IV_BYTES || tag.length !== GCM_TAG_BYTES)
236
+ return null;
237
+ const decipher = createDecipheriv('aes-256-gcm', this.#keyBuffer, iv, {
238
+ authTagLength: GCM_TAG_BYTES,
239
+ });
216
240
  decipher.setAuthTag(tag);
217
241
  const raw = Buffer.concat([decipher.update(data), decipher.final()]).toString('utf8');
218
242
  return this.#open(raw, purpose);
@@ -1 +1 @@
1
- {"version":3,"file":"CookieSigner.js","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CookieSigner.js","sourceRoot":"","sources":["../../src/security/CookieSigner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,6CAA6C;AAC7C,MAAM,YAAY,GAAG,EAAE,CAAA;AACvB,mEAAmE;AACnE,MAAM,aAAa,GAAG,EAAE,CAAA;AAExB,2EAA2E;AAC3E,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,GAAG,mBAA4B,CAAA;IAC5C;QACE,KAAK,CAAC,yEAAyE,CAAC,CAAA;QAChF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,oBAA6B,CAAA;IAC7C,YAAY,MAAM,GAAG,mCAAmC;QACtD,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,yCAAyC;IACzC,WAAW;IACX,mBAAmB;IACnB,QAAQ;CACT,CAAC,CAAA;AAgBF,MAAM,OAAO,YAAY;IACvB,OAAO,CAAQ;IACf,UAAU,CAAQ;IAElB,YAAY,MAAc;QACxB,oEAAoE;QACpE,kEAAkE;QAClE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAA;QACpF,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;QACtD,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,kBAAkB,CAC1B,4FAA4F,CAC7F,CAAA;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,gEAAgE;QAChE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3F,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QACxD,MAAM,QAAQ,GAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;QACvC,IAAI,SAAS,KAAK,SAAS;YAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QAChE,IAAI,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAA;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAW,EAAE,OAAgB;QACjC,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC9D,2EAA2E;QAC3E,4EAA4E;QAC5E,sBAAsB;QACtB,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;YAAE,OAAO,IAAI,CAAA;QACjC,2EAA2E;QAC3E,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,MAAM,GAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC5D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAA;YACvE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;gBAAE,OAAO,IAAI,CAAA;QACtC,CAAC;QACD,MAAM,SAAS,GAAY,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/D,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QACzE,IAAI,SAAS,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QACtC,OAAO,MAAM,CAAC,CAAC,CAAA;IACjB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1C,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,iFAAiF;IACjF,MAAM,CAAa,MAAc,EAAE,OAAgB;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACvD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAa,CAAA;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAI,SAAS;QACX,OAAO,aAAa,CAAA;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,MAAM;QAMR,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAClF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAiB,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9E,CAAC,CAAA;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;IACjE,CAAC;IAED;;;;;;OAMG;IACH,IAAI,QAAQ;QAIV,OAAO;YACL,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;YAC7E,MAAM,EAAE,CAAI,OAAe,EAAE,OAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAI,OAAO,EAAE,OAAO,CAAC;SACnF,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAe;QACnB,OAAO,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,CAAC,KAAc,EAAE,SAAkB,EAAE,OAAgB;QAC1D,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE;YAChE,aAAa,EAAE,aAAa;SAC7B,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAChF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC/B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAA;IACtG,CAAC;IAED,OAAO,CAAa,SAAiB,EAAE,OAAgB;QACrD,sEAAsE;QACtE,0EAA0E;QAC1E,2CAA2C;QAC3C,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC/D,IACE,MAAM,KAAK,SAAS;YACpB,QAAQ,KAAK,SAAS;YACtB,OAAO,KAAK,SAAS;YACrB,KAAK,KAAK,SAAS,EACnB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC7C,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,wEAAwE;YACxE,IAAI,EAAE,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa;gBAAE,OAAO,IAAI,CAAA;YAC3E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE;gBACpE,aAAa,EAAE,aAAa;aAC7B,CAAC,CAAA;YACF,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACrF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAa,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignedUrl.d.ts","sourceRoot":"","sources":["../../src/security/SignedUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,SAAS;;gBAGR,MAAM,EAAE,eAAe;IAInC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAqBvF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAYrD"}
1
+ {"version":3,"file":"SignedUrl.d.ts","sourceRoot":"","sources":["../../src/security/SignedUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,SAAS;;gBAGR,MAAM,EAAE,eAAe;IAInC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAqBvF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAiBrD"}
@@ -2,6 +2,7 @@
2
2
  * Signed URLs — HMAC-SHA256 with expiration.
3
3
  * Uses Rust NAPI via crypto facade when available.
4
4
  */
5
+ import { durationToSeconds } from '../helpers/duration.js';
5
6
  import { constantTimeEq, hmacSign } from './crypto.js';
6
7
  export class SignedUrl {
7
8
  #secret;
@@ -33,32 +34,28 @@ export class SignedUrl {
33
34
  const expires = url.searchParams.get('expires');
34
35
  if (expires && Math.floor(Date.now() / 1000) > parseInt(expires, 10))
35
36
  return false;
36
- if (purpose && url.searchParams.get('purpose') !== purpose)
37
+ // Exact match both ways: a URL minted for `password-reset` must not pass a
38
+ // check that names no purpose (or another one), and a purpose-less URL
39
+ // must not pass a check that names one. An empty purpose is no purpose,
40
+ // as in `make`.
41
+ const signedPurpose = url.searchParams.get('purpose') || undefined;
42
+ if (signedPurpose !== (purpose || undefined))
37
43
  return false;
38
44
  url.searchParams.delete('signature');
39
45
  const expectedSig = hmacSign(url.pathname + url.search, this.#secret);
40
46
  return constantTimeEq(providedSig, expectedSig);
41
47
  }
42
48
  }
49
+ /**
50
+ * The lifetime of a signed URL in seconds. Read with the duration grammar
51
+ * used everywhere else (`'30 minutes'`, `'1 week'`, `'2h'`), and refused when
52
+ * it cannot be read: signing with a default instead turned "one week" into
53
+ * one hour without a word.
54
+ */
43
55
  function parseExpiry(value) {
44
- if (typeof value === 'number')
45
- return value;
46
- const match = value.match(/^(\d+)(s|m|h|d)$/);
47
- if (!match)
48
- return 3600;
49
- const [, digits, unit] = match;
50
- const num = parseInt(digits ?? '0', 10);
51
- switch (unit) {
52
- case 's':
53
- return num;
54
- case 'm':
55
- return num * 60;
56
- case 'h':
57
- return num * 3600;
58
- case 'd':
59
- return num * 86400;
60
- default:
61
- return 3600;
56
+ if (typeof value === 'number' && !Number.isFinite(value)) {
57
+ throw new Error(`Cannot read ${value} as a signed URL expiry: it must be a finite number of seconds.`);
62
58
  }
59
+ return durationToSeconds(value, 'a signed URL expiry');
63
60
  }
64
61
  //# sourceMappingURL=SignedUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignedUrl.js","sourceRoot":"","sources":["../../src/security/SignedUrl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SignedUrl.js","sourceRoot":"","sources":["../../src/security/SignedUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMtD,MAAM,OAAO,SAAS;IACpB,OAAO,CAAQ;IAEf,YAAY,MAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,OAA2D;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;QAC7C,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,mEAAmE;QACnE,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAClB,SAAS,EACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACvE,CAAA;QACH,CAAC;QACD,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAClD,CAAC;QACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,OAAO,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAA;IAClC,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,OAAgB;QACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;QAClD,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAA;QAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAAE,OAAO,KAAK,CAAA;QAClF,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,gBAAgB;QAChB,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAA;QAClE,IAAI,aAAa,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;YAAE,OAAO,KAAK,CAAA;QAE1D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACrE,OAAO,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACjD,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAsB;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,eAAe,KAAK,iEAAiE,CACtF,CAAA;IACH,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAA;AACxD,CAAC"}