@demiurgejs/core 0.2.0-beta.1 → 0.2.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +2 -0
  2. package/dist/adapter/testing.d.ts +33 -0
  3. package/dist/adapter/testing.d.ts.map +1 -0
  4. package/dist/adapter/testing.js +251 -0
  5. package/dist/adapter/testing.js.map +1 -0
  6. package/dist/browser/file-router.d.ts.map +1 -1
  7. package/dist/chunks/document-shell-WoM8yZlR.js +35 -0
  8. package/dist/chunks/document-shell-WoM8yZlR.js.map +1 -0
  9. package/dist/chunks/image-codec-Di53WpcH.js +141 -0
  10. package/dist/chunks/image-codec-Di53WpcH.js.map +1 -0
  11. package/dist/chunks/images-Edar3eU1.js +339 -0
  12. package/dist/chunks/images-Edar3eU1.js.map +1 -0
  13. package/dist/chunks/request-metadata-DaIYq4Ea.js +677 -0
  14. package/dist/chunks/request-metadata-DaIYq4Ea.js.map +1 -0
  15. package/dist/chunks/streaming-D0fGAuiO.js +469 -0
  16. package/dist/chunks/streaming-D0fGAuiO.js.map +1 -0
  17. package/dist/chunks/{testing-DBjVCN5v.js → testing-CRflAw4X.js} +1300 -1139
  18. package/dist/chunks/testing-CRflAw4X.js.map +1 -0
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +63 -54
  21. package/dist/cli.js.map +1 -1
  22. package/dist/data/cache.d.ts +8 -0
  23. package/dist/data/cache.d.ts.map +1 -1
  24. package/dist/data/idempotency.d.ts.map +1 -1
  25. package/dist/data/index.d.ts +3 -1
  26. package/dist/data/index.d.ts.map +1 -1
  27. package/dist/data/testing.d.ts.map +1 -1
  28. package/dist/data/testing.js +94 -72
  29. package/dist/data/testing.js.map +1 -1
  30. package/dist/data/tiered.d.ts +7 -0
  31. package/dist/data/tiered.d.ts.map +1 -0
  32. package/dist/document/deferred-scripts.d.ts +11 -0
  33. package/dist/document/deferred-scripts.d.ts.map +1 -0
  34. package/dist/document/hydration.d.ts.map +1 -1
  35. package/dist/document/index.d.ts +4 -1
  36. package/dist/document/index.d.ts.map +1 -1
  37. package/dist/document/render.d.ts.map +1 -1
  38. package/dist/document/scripts.d.ts +12 -1
  39. package/dist/document/scripts.d.ts.map +1 -1
  40. package/dist/document/trusted-types.d.ts +10 -0
  41. package/dist/document/trusted-types.d.ts.map +1 -0
  42. package/dist/edge/assets.d.ts +14 -0
  43. package/dist/edge/assets.d.ts.map +1 -0
  44. package/dist/edge/index.d.ts +19 -0
  45. package/dist/edge/index.d.ts.map +1 -0
  46. package/dist/edge/index.js +286 -0
  47. package/dist/edge/index.js.map +1 -0
  48. package/dist/edge/stores.d.ts +8 -0
  49. package/dist/edge/stores.d.ts.map +1 -0
  50. package/dist/edge/streaming.d.ts +7 -0
  51. package/dist/edge/streaming.d.ts.map +1 -0
  52. package/dist/index.d.ts +7 -7
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +895 -556
  55. package/dist/index.js.map +1 -1
  56. package/dist/internal/testing.js +6 -6
  57. package/dist/kv/index.d.ts +5 -0
  58. package/dist/kv/index.d.ts.map +1 -0
  59. package/dist/kv/index.js +126 -0
  60. package/dist/kv/index.js.map +1 -0
  61. package/dist/kv/rate-limit-store.d.ts +8 -0
  62. package/dist/kv/rate-limit-store.d.ts.map +1 -0
  63. package/dist/kv/store.d.ts +28 -0
  64. package/dist/kv/store.d.ts.map +1 -0
  65. package/dist/node/font.d.ts +5 -0
  66. package/dist/node/font.d.ts.map +1 -0
  67. package/dist/node/http.d.ts.map +1 -1
  68. package/dist/node/image.d.ts +15 -0
  69. package/dist/node/image.d.ts.map +1 -0
  70. package/dist/node/index.d.ts +4 -0
  71. package/dist/node/index.d.ts.map +1 -1
  72. package/dist/node/index.js +25 -23
  73. package/dist/node/index.js.map +1 -1
  74. package/dist/node/static.d.ts.map +1 -1
  75. package/dist/node/streaming.d.ts.map +1 -1
  76. package/dist/platform/analytics.d.ts +58 -5
  77. package/dist/platform/analytics.d.ts.map +1 -1
  78. package/dist/platform/font-assets.d.ts +19 -0
  79. package/dist/platform/font-assets.d.ts.map +1 -0
  80. package/dist/platform/fonts.d.ts +14 -4
  81. package/dist/platform/fonts.d.ts.map +1 -1
  82. package/dist/platform/image-codec.d.ts +15 -0
  83. package/dist/platform/image-codec.d.ts.map +1 -0
  84. package/dist/platform/image-url.d.ts +17 -0
  85. package/dist/platform/image-url.d.ts.map +1 -0
  86. package/dist/platform/image.d.ts +8 -0
  87. package/dist/platform/image.d.ts.map +1 -0
  88. package/dist/platform/images.d.ts +15 -0
  89. package/dist/platform/images.d.ts.map +1 -1
  90. package/dist/platform/index.d.ts +13 -6
  91. package/dist/platform/index.d.ts.map +1 -1
  92. package/dist/platform/observability.d.ts +2 -1
  93. package/dist/platform/observability.d.ts.map +1 -1
  94. package/dist/platform/web-vitals-client.d.ts +32 -0
  95. package/dist/platform/web-vitals-client.d.ts.map +1 -0
  96. package/dist/platform/web-vitals.d.ts +78 -0
  97. package/dist/platform/web-vitals.d.ts.map +1 -0
  98. package/dist/redis/index.d.ts +5 -0
  99. package/dist/redis/index.d.ts.map +1 -0
  100. package/dist/redis/index.js +209 -0
  101. package/dist/redis/index.js.map +1 -0
  102. package/dist/redis/rate-limit-store.d.ts +8 -0
  103. package/dist/redis/rate-limit-store.d.ts.map +1 -0
  104. package/dist/redis/store.d.ts +8 -0
  105. package/dist/redis/store.d.ts.map +1 -0
  106. package/dist/route/action.d.ts.map +1 -1
  107. package/dist/route/middleware.d.ts.map +1 -1
  108. package/dist/route/response.d.ts.map +1 -1
  109. package/dist/router/index.d.ts +1 -1
  110. package/dist/router/index.d.ts.map +1 -1
  111. package/dist/router/manifest.d.ts +1 -0
  112. package/dist/router/manifest.d.ts.map +1 -1
  113. package/dist/security/cookies.d.ts +26 -0
  114. package/dist/security/cookies.d.ts.map +1 -0
  115. package/dist/security/env.d.ts.map +1 -1
  116. package/dist/security/fetch-metadata.d.ts +29 -0
  117. package/dist/security/fetch-metadata.d.ts.map +1 -0
  118. package/dist/security/index.d.ts +5 -1
  119. package/dist/security/index.d.ts.map +1 -1
  120. package/dist/security/policy.d.ts +2 -27
  121. package/dist/security/policy.d.ts.map +1 -1
  122. package/dist/security/rate-limit.d.ts +6 -3
  123. package/dist/security/rate-limit.d.ts.map +1 -1
  124. package/dist/security/request.d.ts.map +1 -1
  125. package/dist/security/types.d.ts +82 -6
  126. package/dist/security/types.d.ts.map +1 -1
  127. package/dist/security/verification.d.ts.map +1 -1
  128. package/dist/server/document-shell.d.ts +12 -0
  129. package/dist/server/document-shell.d.ts.map +1 -0
  130. package/dist/server/index.d.ts +1 -1
  131. package/dist/server/index.d.ts.map +1 -1
  132. package/dist/server/request-handler.d.ts +6 -2
  133. package/dist/server/request-handler.d.ts.map +1 -1
  134. package/dist/static/images.d.ts +13 -0
  135. package/dist/static/images.d.ts.map +1 -0
  136. package/dist/static/index.d.ts +8 -0
  137. package/dist/static/index.d.ts.map +1 -1
  138. package/dist/static/index.js +421 -313
  139. package/dist/static/index.js.map +1 -1
  140. package/dist/static/vercel.d.ts +3 -0
  141. package/dist/static/vercel.d.ts.map +1 -1
  142. package/dist/vite/index.d.ts +3 -0
  143. package/dist/vite/index.d.ts.map +1 -1
  144. package/dist/vite/index.js +1041 -652
  145. package/dist/vite/index.js.map +1 -1
  146. package/dist/vite/plugin.d.ts +9 -0
  147. package/dist/vite/plugin.d.ts.map +1 -1
  148. package/dist/vite/policy-verification.d.ts.map +1 -1
  149. package/dist/vite/route-audit.d.ts +50 -0
  150. package/dist/vite/route-audit.d.ts.map +1 -0
  151. package/package.json +34 -3
  152. package/dist/chunks/request-metadata-DwEO1EAS.js +0 -477
  153. package/dist/chunks/request-metadata-DwEO1EAS.js.map +0 -1
  154. package/dist/chunks/streaming-Ci6vf3BB.js +0 -353
  155. package/dist/chunks/streaming-Ci6vf3BB.js.map +0 -1
  156. package/dist/chunks/testing-DBjVCN5v.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ const o = "demiurge:cache:", u = `
2
+ local old = redis.call("GET", KEYS[1])
3
+ if old then
4
+ local oldTags = cjson.decode(old).tags
5
+ for i = 1, #oldTags do
6
+ redis.call("SREM", ARGV[3] .. oldTags[i], ARGV[4])
7
+ end
8
+ end
9
+ redis.call("SET", KEYS[1], ARGV[1])
10
+ if ARGV[2] ~= "" then
11
+ redis.call("PEXPIREAT", KEYS[1], ARGV[2])
12
+ end
13
+ local newTags = cjson.decode(ARGV[1]).tags
14
+ for i = 1, #newTags do
15
+ redis.call("SADD", ARGV[3] .. newTags[i], ARGV[4])
16
+ end
17
+ redis.call("DEL", KEYS[2])
18
+ return 1
19
+ `, f = `
20
+ local old = redis.call("GET", KEYS[1])
21
+ redis.call("DEL", KEYS[2])
22
+ if not old then
23
+ return 0
24
+ end
25
+ local oldTags = cjson.decode(old).tags
26
+ for i = 1, #oldTags do
27
+ redis.call("SREM", ARGV[1] .. oldTags[i], ARGV[2])
28
+ end
29
+ redis.call("DEL", KEYS[1])
30
+ return 1
31
+ `, m = `
32
+ local tags = cjson.decode(ARGV[1])
33
+ local seen = {}
34
+ local deleted = 0
35
+ for i = 1, #tags do
36
+ local tagSetKey = ARGV[2] .. tags[i]
37
+ local members = redis.call("SMEMBERS", tagSetKey)
38
+ for j = 1, #members do
39
+ local rawKey = members[j]
40
+ if not seen[rawKey] then
41
+ seen[rawKey] = true
42
+ local entryKey = ARGV[3] .. rawKey
43
+ local old = redis.call("GET", entryKey)
44
+ if old then
45
+ local oldTags = cjson.decode(old).tags
46
+ for t = 1, #oldTags do
47
+ redis.call("SREM", ARGV[2] .. oldTags[t], rawKey)
48
+ end
49
+ redis.call("DEL", entryKey)
50
+ redis.call("DEL", ARGV[4] .. rawKey)
51
+ deleted = deleted + 1
52
+ else
53
+ redis.call("SREM", tagSetKey, rawKey)
54
+ end
55
+ end
56
+ end
57
+ redis.call("DEL", tagSetKey)
58
+ end
59
+ return deleted
60
+ `, g = `
61
+ local owner = redis.call("GET", KEYS[2])
62
+ if not owner or owner ~= ARGV[1] then
63
+ return 0
64
+ end
65
+ local old = redis.call("GET", KEYS[1])
66
+ if old then
67
+ local oldTags = cjson.decode(old).tags
68
+ for i = 1, #oldTags do
69
+ redis.call("SREM", ARGV[4] .. oldTags[i], ARGV[5])
70
+ end
71
+ end
72
+ redis.call("SET", KEYS[1], ARGV[2])
73
+ if ARGV[3] ~= "" then
74
+ redis.call("PEXPIREAT", KEYS[1], ARGV[3])
75
+ end
76
+ local newTags = cjson.decode(ARGV[2]).tags
77
+ for i = 1, #newTags do
78
+ redis.call("SADD", ARGV[4] .. newTags[i], ARGV[5])
79
+ end
80
+ redis.call("DEL", KEYS[2])
81
+ return 1
82
+ `, R = `
83
+ local owner = redis.call("GET", KEYS[1])
84
+ if owner == ARGV[1] then
85
+ redis.call("DEL", KEYS[1])
86
+ end
87
+ return 0
88
+ `;
89
+ function E(a) {
90
+ const l = a;
91
+ return l.demiurgeCacheSet || a.defineCommand("demiurgeCacheSet", { lua: u, numberOfKeys: 2 }), l.demiurgeCacheDelete || a.defineCommand("demiurgeCacheDelete", {
92
+ lua: f,
93
+ numberOfKeys: 2
94
+ }), l.demiurgeCacheInvalidateTags || a.defineCommand("demiurgeCacheInvalidateTags", {
95
+ lua: m,
96
+ numberOfKeys: 0
97
+ }), l.demiurgeCachePublishRefresh || a.defineCommand("demiurgeCachePublishRefresh", {
98
+ lua: g,
99
+ numberOfKeys: 2
100
+ }), l.demiurgeCacheReleaseRefreshLease || a.defineCommand("demiurgeCacheReleaseRefreshLease", {
101
+ lua: R,
102
+ numberOfKeys: 1
103
+ }), l;
104
+ }
105
+ function T(a) {
106
+ if (!a.client || typeof a.client.defineCommand != "function")
107
+ throw new Error(
108
+ "Demiurge Redis cache store requires an ioredis client. Pass a connected ioredis Redis instance as `client`."
109
+ );
110
+ const l = E(a.client), s = a.keyPrefix ?? o, n = `${s}entry:`, i = `${s}tag:`, t = `${s}lease:`;
111
+ return {
112
+ async acquireRefreshLease(e, r, d) {
113
+ return await l.call(
114
+ "SET",
115
+ t + e,
116
+ r,
117
+ "NX",
118
+ "PXAT",
119
+ String(d)
120
+ ) === "OK";
121
+ },
122
+ async delete(e) {
123
+ return await l.demiurgeCacheDelete(
124
+ n + e,
125
+ t + e,
126
+ i,
127
+ e
128
+ ) === 1;
129
+ },
130
+ async get(e) {
131
+ const r = await l.get(n + e);
132
+ return r ? JSON.parse(r) : void 0;
133
+ },
134
+ async invalidateTags(e) {
135
+ return e.length === 0 ? 0 : await l.demiurgeCacheInvalidateTags(
136
+ JSON.stringify(e),
137
+ i,
138
+ n,
139
+ t
140
+ );
141
+ },
142
+ async publishRefresh(e, r, d) {
143
+ return await l.demiurgeCachePublishRefresh(
144
+ n + e,
145
+ t + e,
146
+ r,
147
+ JSON.stringify(d),
148
+ d.staleUntil === null ? "" : String(d.staleUntil),
149
+ i,
150
+ e
151
+ ) === 1;
152
+ },
153
+ async releaseRefreshLease(e, r) {
154
+ await l.demiurgeCacheReleaseRefreshLease(t + e, r);
155
+ },
156
+ async set(e, r) {
157
+ await l.demiurgeCacheSet(
158
+ n + e,
159
+ t + e,
160
+ JSON.stringify(r),
161
+ r.staleUntil === null ? "" : String(r.staleUntil),
162
+ i,
163
+ e
164
+ );
165
+ }
166
+ };
167
+ }
168
+ const S = "demiurge:ratelimit:", h = `
169
+ local count = redis.call("INCR", KEYS[1])
170
+ if count == 1 then
171
+ redis.call("PEXPIRE", KEYS[1], ARGV[1])
172
+ end
173
+ local ttl = redis.call("PTTL", KEYS[1])
174
+ if ttl < 0 then
175
+ redis.call("PEXPIRE", KEYS[1], ARGV[1])
176
+ ttl = tonumber(ARGV[1])
177
+ end
178
+ local time = redis.call("TIME")
179
+ local nowMs = math.floor(tonumber(time[1]) * 1000 + tonumber(time[2]) / 1000)
180
+ return { count, nowMs + ttl }
181
+ `;
182
+ function K(a) {
183
+ const l = a;
184
+ return l.demiurgeRateLimitIncrement || a.defineCommand("demiurgeRateLimitIncrement", {
185
+ lua: h,
186
+ numberOfKeys: 1
187
+ }), l;
188
+ }
189
+ function w(a) {
190
+ if (!a.client || typeof a.client.defineCommand != "function")
191
+ throw new Error(
192
+ "Demiurge Redis rate limit store requires an ioredis client. Pass a connected ioredis Redis instance as `client`."
193
+ );
194
+ const l = K(a.client), s = a.keyPrefix ?? S;
195
+ return {
196
+ async increment(n, i) {
197
+ const [t, e] = await l.demiurgeRateLimitIncrement(
198
+ s + n,
199
+ String(i)
200
+ );
201
+ return { count: t, resetAt: e };
202
+ }
203
+ };
204
+ }
205
+ export {
206
+ T as createRedisCacheStore,
207
+ w as createRedisRateLimitStore
208
+ };
209
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/redis/store.ts","../../src/redis/rate-limit-store.ts"],"sourcesContent":["import type { Redis } from \"ioredis\";\nimport type { CacheStore, CacheStoreEntry } from \"../data/cache\";\n\nexport type RedisCacheStoreOptions = {\n // Every consumer of one Redis database shares one keyspace. This prefix\n // scopes the store's entry, tag, and lease keys away from an application's\n // other Redis use. Two Demiurge deployments that share a database still\n // need distinct prefixes, the same way they need distinct cache namespaces.\n keyPrefix?: string;\n // The store issues commands on a client the application already\n // constructed and connected. Connection options, TLS, Sentinel, and retry\n // policy are the application's decision, not this store's.\n client: Redis;\n};\n\nconst defaultKeyPrefix = \"demiurge:cache:\";\n\n// Tag sets hold the raw, unprefixed cache key as each member, never the\n// prefixed entry key. invalidateTags() only knows a tag's members. It\n// rebuilds both the entry key and the lease key by applying their prefixes.\n// Every script below adds and removes the same raw-key member, so the two\n// stay in agreement.\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] entry JSON, ARGV[2] staleUntil epoch ms or \"\".\n// ARGV[3] tag key prefix, ARGV[4] raw key.\nconst setScript = `\nlocal old = redis.call(\"GET\", KEYS[1])\nif old then\n local oldTags = cjson.decode(old).tags\n for i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[3] .. oldTags[i], ARGV[4])\n end\nend\nredis.call(\"SET\", KEYS[1], ARGV[1])\nif ARGV[2] ~= \"\" then\n redis.call(\"PEXPIREAT\", KEYS[1], ARGV[2])\nend\nlocal newTags = cjson.decode(ARGV[1]).tags\nfor i = 1, #newTags do\n redis.call(\"SADD\", ARGV[3] .. newTags[i], ARGV[4])\nend\nredis.call(\"DEL\", KEYS[2])\nreturn 1\n`;\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] tag key prefix, ARGV[2] raw key.\nconst deleteScript = `\nlocal old = redis.call(\"GET\", KEYS[1])\nredis.call(\"DEL\", KEYS[2])\nif not old then\n return 0\nend\nlocal oldTags = cjson.decode(old).tags\nfor i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[1] .. oldTags[i], ARGV[2])\nend\nredis.call(\"DEL\", KEYS[1])\nreturn 1\n`;\n\n// No declared KEYS. Tags name a variable number of sets, so the script reads\n// their redis keys from ARGV instead.\n// ARGV[1] tags JSON array, ARGV[2] tag key prefix, ARGV[3] entry key prefix,\n// ARGV[4] lease key prefix\nconst invalidateTagsScript = `\nlocal tags = cjson.decode(ARGV[1])\nlocal seen = {}\nlocal deleted = 0\nfor i = 1, #tags do\n local tagSetKey = ARGV[2] .. tags[i]\n local members = redis.call(\"SMEMBERS\", tagSetKey)\n for j = 1, #members do\n local rawKey = members[j]\n if not seen[rawKey] then\n seen[rawKey] = true\n local entryKey = ARGV[3] .. rawKey\n local old = redis.call(\"GET\", entryKey)\n if old then\n local oldTags = cjson.decode(old).tags\n for t = 1, #oldTags do\n redis.call(\"SREM\", ARGV[2] .. oldTags[t], rawKey)\n end\n redis.call(\"DEL\", entryKey)\n redis.call(\"DEL\", ARGV[4] .. rawKey)\n deleted = deleted + 1\n else\n redis.call(\"SREM\", tagSetKey, rawKey)\n end\n end\n end\n redis.call(\"DEL\", tagSetKey)\nend\nreturn deleted\n`;\n\n// KEYS[1] entry key, KEYS[2] lease key.\n// ARGV[1] token, ARGV[2] entry JSON, ARGV[3] staleUntil epoch ms or \"\".\n// ARGV[4] tag key prefix, ARGV[5] raw key.\nconst publishRefreshScript = `\nlocal owner = redis.call(\"GET\", KEYS[2])\nif not owner or owner ~= ARGV[1] then\n return 0\nend\nlocal old = redis.call(\"GET\", KEYS[1])\nif old then\n local oldTags = cjson.decode(old).tags\n for i = 1, #oldTags do\n redis.call(\"SREM\", ARGV[4] .. oldTags[i], ARGV[5])\n end\nend\nredis.call(\"SET\", KEYS[1], ARGV[2])\nif ARGV[3] ~= \"\" then\n redis.call(\"PEXPIREAT\", KEYS[1], ARGV[3])\nend\nlocal newTags = cjson.decode(ARGV[2]).tags\nfor i = 1, #newTags do\n redis.call(\"SADD\", ARGV[4] .. newTags[i], ARGV[5])\nend\nredis.call(\"DEL\", KEYS[2])\nreturn 1\n`;\n\n// KEYS[1] lease key, ARGV[1] token\nconst releaseRefreshLeaseScript = `\nlocal owner = redis.call(\"GET\", KEYS[1])\nif owner == ARGV[1] then\n redis.call(\"DEL\", KEYS[1])\nend\nreturn 0\n`;\n\ntype RedisCacheCommands = {\n demiurgeCacheSet: (\n entryKey: string,\n leaseKey: string,\n entryJson: string,\n staleUntil: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheDelete: (\n entryKey: string,\n leaseKey: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheInvalidateTags: (\n tagsJson: string,\n tagPrefix: string,\n entryPrefix: string,\n leasePrefix: string,\n ) => Promise<number>;\n demiurgeCachePublishRefresh: (\n entryKey: string,\n leaseKey: string,\n token: string,\n entryJson: string,\n staleUntil: string,\n tagPrefix: string,\n rawKey: string,\n ) => Promise<number>;\n demiurgeCacheReleaseRefreshLease: (\n leaseKey: string,\n token: string,\n ) => Promise<number>;\n};\n\n// The application already owns one ioredis client. Attaching the store's\n// commands is idempotent, so building several stores on the same client, or\n// rebuilding one after a reconnect, never redefines a command twice.\nfunction commands(client: Redis): Redis & RedisCacheCommands {\n // TYPE-EVIDENCE: the cast adds the optional custom command methods before the runtime checks install them.\n const withCommands = client as Redis & Partial<RedisCacheCommands>;\n\n if (!withCommands.demiurgeCacheSet) {\n client.defineCommand(\"demiurgeCacheSet\", { lua: setScript, numberOfKeys: 2 });\n }\n\n if (!withCommands.demiurgeCacheDelete) {\n client.defineCommand(\"demiurgeCacheDelete\", {\n lua: deleteScript,\n numberOfKeys: 2,\n });\n }\n\n if (!withCommands.demiurgeCacheInvalidateTags) {\n client.defineCommand(\"demiurgeCacheInvalidateTags\", {\n lua: invalidateTagsScript,\n numberOfKeys: 0,\n });\n }\n\n if (!withCommands.demiurgeCachePublishRefresh) {\n client.defineCommand(\"demiurgeCachePublishRefresh\", {\n lua: publishRefreshScript,\n numberOfKeys: 2,\n });\n }\n\n if (!withCommands.demiurgeCacheReleaseRefreshLease) {\n client.defineCommand(\"demiurgeCacheReleaseRefreshLease\", {\n lua: releaseRefreshLeaseScript,\n numberOfKeys: 1,\n });\n }\n\n // TYPE-EVIDENCE: the defineCommand calls above install each custom command. The cast reflects that the methods now exist.\n return withCommands as Redis & RedisCacheCommands;\n}\n\n// Redis holds the entry, its tag memberships, and its refresh lease as\n// independent keys. Every process talking to the same database must see\n// these three stay coordinated. Each write path therefore runs as one Lua\n// script rather than several round trips a concurrent writer could\n// interleave with.\nexport function createRedisCacheStore(\n options: RedisCacheStoreOptions,\n): CacheStore {\n if (!options.client || typeof options.client.defineCommand !== \"function\") {\n throw new Error(\n \"Demiurge Redis cache store requires an ioredis client. Pass a connected ioredis Redis instance as `client`.\",\n );\n }\n\n const client = commands(options.client);\n const prefix = options.keyPrefix ?? defaultKeyPrefix;\n const entryPrefix = `${prefix}entry:`;\n const tagPrefix = `${prefix}tag:`;\n const leasePrefix = `${prefix}lease:`;\n\n return {\n async acquireRefreshLease(key, token, expiresAt) {\n // ioredis's typed SET overloads do not cover every flag order the\n // Redis SET command accepts, so this issues the raw command instead.\n const result = await client.call(\n \"SET\",\n leasePrefix + key,\n token,\n \"NX\",\n \"PXAT\",\n String(expiresAt),\n );\n\n return result === \"OK\";\n },\n async delete(key) {\n const deleted = await client.demiurgeCacheDelete(\n entryPrefix + key,\n leasePrefix + key,\n tagPrefix,\n key,\n );\n\n return deleted === 1;\n },\n async get(key) {\n const raw = await client.get(entryPrefix + key);\n // TYPE-EVIDENCE: the stored raw value is JSON that the store serialized from a cache entry. The cast restores that shape.\n return raw ? (JSON.parse(raw) as CacheStoreEntry) : undefined;\n },\n async invalidateTags(tags) {\n if (tags.length === 0) {\n return 0;\n }\n\n return await client.demiurgeCacheInvalidateTags(\n JSON.stringify(tags),\n tagPrefix,\n entryPrefix,\n leasePrefix,\n );\n },\n async publishRefresh(key, token, entry) {\n const result = await client.demiurgeCachePublishRefresh(\n entryPrefix + key,\n leasePrefix + key,\n token,\n JSON.stringify(entry),\n entry.staleUntil === null ? \"\" : String(entry.staleUntil),\n tagPrefix,\n key,\n );\n\n return result === 1;\n },\n async releaseRefreshLease(key, token) {\n await client.demiurgeCacheReleaseRefreshLease(leasePrefix + key, token);\n },\n async set(key, entry) {\n await client.demiurgeCacheSet(\n entryPrefix + key,\n leasePrefix + key,\n JSON.stringify(entry),\n entry.staleUntil === null ? \"\" : String(entry.staleUntil),\n tagPrefix,\n key,\n );\n },\n };\n}\n","import type { Redis } from \"ioredis\";\nimport type { RateLimitResult, RateLimitStore } from \"../security/types\";\n\nexport type RedisRateLimitStoreOptions = {\n // Every consumer of one Redis database shares one keyspace. This prefix\n // scopes the store's counter keys away from an application's other Redis\n // use, the same way RedisCacheStoreOptions.keyPrefix does for the cache\n // store. Two Demiurge deployments that share a database still need\n // distinct prefixes.\n keyPrefix?: string;\n // The store issues commands on a client the application already\n // constructed and connected. Connection options, TLS, Sentinel, and retry\n // policy are the application's decision, not this store's.\n client: Redis;\n};\n\nconst defaultKeyPrefix = \"demiurge:ratelimit:\";\n\n// KEYS[1] counter key. ARGV[1] window in ms.\n//\n// INCR and PEXPIRE run inside one script. Redis executes the whole script\n// as a single atomic step, so two instances racing to increment the same\n// key never both observe count 1. The window's reset time comes from\n// Redis's own clock (TIME), not the caller-supplied `now`. The counter's\n// TTL is authoritative once several processes share it, and a\n// client-supplied timestamp could disagree with the server that expires the\n// key. TIME is deterministic across replication because Redis rewrites the\n// script's effects rather than replaying non-deterministic commands.\nconst incrementScript = `\nlocal count = redis.call(\"INCR\", KEYS[1])\nif count == 1 then\n redis.call(\"PEXPIRE\", KEYS[1], ARGV[1])\nend\nlocal ttl = redis.call(\"PTTL\", KEYS[1])\nif ttl < 0 then\n redis.call(\"PEXPIRE\", KEYS[1], ARGV[1])\n ttl = tonumber(ARGV[1])\nend\nlocal time = redis.call(\"TIME\")\nlocal nowMs = math.floor(tonumber(time[1]) * 1000 + tonumber(time[2]) / 1000)\nreturn { count, nowMs + ttl }\n`;\n\ntype RedisRateLimitCommands = {\n demiurgeRateLimitIncrement: (\n counterKey: string,\n windowMs: string,\n ) => Promise<[number, number]>;\n};\n\n// The application already owns one ioredis client. Attaching the store's\n// command is idempotent, so building several stores on the same client, or\n// rebuilding one after a reconnect, never redefines the command twice.\nfunction commands(client: Redis): Redis & RedisRateLimitCommands {\n // TYPE-EVIDENCE: the cast adds the optional custom command methods before the runtime check installs them.\n const withCommands = client as Redis & Partial<RedisRateLimitCommands>;\n\n if (!withCommands.demiurgeRateLimitIncrement) {\n client.defineCommand(\"demiurgeRateLimitIncrement\", {\n lua: incrementScript,\n numberOfKeys: 1,\n });\n }\n\n // TYPE-EVIDENCE: the defineCommand call above installs the custom command. The cast reflects that the method now exists.\n return withCommands as Redis & RedisRateLimitCommands;\n}\n\nexport function createRedisRateLimitStore(\n options: RedisRateLimitStoreOptions,\n): RateLimitStore {\n if (!options.client || typeof options.client.defineCommand !== \"function\") {\n throw new Error(\n \"Demiurge Redis rate limit store requires an ioredis client. Pass a connected ioredis Redis instance as `client`.\",\n );\n }\n\n const client = commands(options.client);\n const prefix = options.keyPrefix ?? defaultKeyPrefix;\n\n return {\n async increment(key, windowMs): Promise<RateLimitResult> {\n const [count, resetAt] = await client.demiurgeRateLimitIncrement(\n prefix + key,\n String(windowMs),\n );\n\n return { count, resetAt };\n },\n };\n}\n"],"names":["defaultKeyPrefix","setScript","deleteScript","invalidateTagsScript","publishRefreshScript","releaseRefreshLeaseScript","commands","client","withCommands","createRedisCacheStore","options","prefix","entryPrefix","tagPrefix","leasePrefix","key","token","expiresAt","raw","tags","entry","incrementScript","createRedisRateLimitStore","windowMs","count","resetAt"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Redis } from "ioredis";
2
+ import type { RateLimitStore } from "../security/types";
3
+ export type RedisRateLimitStoreOptions = {
4
+ keyPrefix?: string;
5
+ client: Redis;
6
+ };
7
+ export declare function createRedisRateLimitStore(options: RedisRateLimitStoreOptions): RateLimitStore;
8
+ //# sourceMappingURL=rate-limit-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit-store.d.ts","sourceRoot":"","sources":["../../src/redis/rate-limit-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,MAAM,0BAA0B,GAAG;IAMvC,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAsDF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,cAAc,CAoBhB"}
@@ -0,0 +1,8 @@
1
+ import type { Redis } from "ioredis";
2
+ import type { CacheStore } from "../data/cache";
3
+ export type RedisCacheStoreOptions = {
4
+ keyPrefix?: string;
5
+ client: Redis;
6
+ };
7
+ export declare function createRedisCacheStore(options: RedisCacheStoreOptions): CacheStore;
8
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/redis/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAEjE,MAAM,MAAM,sBAAsB,GAAG;IAKnC,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AA4MF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,UAAU,CAkFZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/route/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,CACrB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,CACF,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,KACtC,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC/E,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,CACP,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAC3C,YAAY,CAAC,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CACpB,MAAM,GAAG,SAAS,EAClB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;;;;;;EAqC/C;AAED,eAAO,MAAM,WAAW;0BACM,gBAAgB;sBAGpB,gBAAgB;sBAGhB,gBAAgB;CAGzC,CAAC"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/route/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,CACrB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,CACF,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,KACtC,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC/E,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,MAAM,EACN,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,IACpD;IACF,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,CACP,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAC3C,YAAY,CAAC,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CACpB,MAAM,GAAG,SAAS,EAClB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;;;;;;EAsC/C;AAED,eAAO,MAAM,WAAW;0BACM,gBAAgB;sBAGpB,gBAAgB;sBAIhB,gBAAgB;CAGzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/route/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,EACrD,UAAU,EAAE,CACV,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,IAAI,EAAE,mBAAmB,KACtB,YAAY,CAAC,QAAQ,CAAC,GAC1B,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAG3E"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/route/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,6BAA6B,EAC7B,eAAe,EACf,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,EACrD,UAAU,EAAE,CACV,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,IAAI,EAAE,mBAAmB,KACtB,YAAY,CAAC,QAAQ,CAAC,GAC1B,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAI3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/route/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,cAAc,EAEd,eAAe,EAIf,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,sBAAsB,EAEtB,kBAAkB,EAGlB,qBAAqB,EAIrB,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAQ,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,IAAI,CAClB,CAAC,EACD,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,EACjD,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,KAAK,CACnB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,KAAK,EAAE,UAAU,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,EAClD,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,IAAI,CAClB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,IAAI,CAClB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,OAAO,EAChD,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EACnB,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,GAC9B,kBAAkB,CAAC;AACtB,wBAAgB,QAAQ,CACtB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,EAAE,EAAE,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,EAC5C,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,GAC9B,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAoBtC,wBAAgB,QAAQ,CACtB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,IAAI,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,QAAQ,CACtB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,EAC9C,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;;;;;;EAS7D;AAED,wBAAgB,MAAM,CACpB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,EAC9C,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,GAAG,CACjB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,MAAM,EAAE,UAAU,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,EACzD,IAAI,CAAC,EAAE,eAAe;;;;;;;;;;;EAUvB;AAED,wBAAgB,YAAY,CAC1B,GAAG,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACxC,SAAS,kBAAkB,EAAE,CAE/B;AAED,wBAAsB,UAAU,CAC9B,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAEtD,UAAU,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,EAC9C,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,qBA8F1C;AAwND,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,YAsBlD;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,kBAAkB,EAAE,UAGtC"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/route/response.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { collectStaticRoutePaths, createRouteManifest, findLayoutsForPath, findPoliciesForPath, findPageMatch, findRouteMatch, isAttachedFileForRoute, isLayoutForPage, loadErrorFallback, loadLoadingFallback, loadNotFoundMatch, loadPageRoute, loadRoute, MalformedPathnameError, matchSegments, scoreRoute, splitPathname, toRouteSegments, } from "./manifest";
1
+ export { collectStaticRoutePaths, createRouteManifest, findLayoutsForPath, findPoliciesForPath, findPageMatch, findRouteMatch, isAttachedFileForRoute, isLayoutForPage, isRouteGroupSegment, loadErrorFallback, loadLoadingFallback, loadNotFoundMatch, loadPageRoute, loadRoute, MalformedPathnameError, matchSegments, scoreRoute, splitPathname, toRoutePattern, toRouteSegments, } from "./manifest";
2
2
  export type { InitialRouteData } from "../document";
3
3
  export { createNavigationDataResponse, isNavigationDataRequest, markNavigationResponse, NAVIGATION_DATA_HEADER, NAVIGATION_DATA_REQUEST, NAVIGATION_DATA_RESPONSE, NAVIGATION_ERROR_RESPONSE, NAVIGATION_NOT_FOUND_RESPONSE, } from "./navigation-data";
4
4
  export type { FallbackRoute, LayoutRoute, LoadedNotFoundMatch, LoadedRouteMatch, MiddlewareRoute, PendingRouteMatch, PolicyRoute, RouteRecord, RouteManifest, StaticRoutePath, } from "./manifest";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -111,6 +111,7 @@ export declare function isLayoutForPage(layoutSegments: string[], pageSegments:
111
111
  export declare function isAttachedFileForRoute(attachedFileSegments: string[], routeFileSegments: string[]): boolean;
112
112
  export declare function toRouteSegments(fileSegments: string[]): string[];
113
113
  export declare function isRouteGroupSegment(segment: string): boolean;
114
+ export declare function toRoutePattern(routeSegments: string[]): string;
114
115
  export declare function scoreRoute(fileSegments: string[]): number;
115
116
  export declare function splitPathname(pathname: string): string[];
116
117
  export declare class MalformedPathnameError extends URIError {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/router/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/router/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type CookieScope = "host" | "none" | "secure";
2
+ export type CookieSameSite = "Lax" | "None" | "Strict";
3
+ export type SecureCookieDeclaration = {
4
+ domain?: string;
5
+ expires?: Date;
6
+ httpOnly?: boolean;
7
+ maxAge?: number;
8
+ name: string;
9
+ path?: string;
10
+ sameSite?: CookieSameSite;
11
+ scope?: CookieScope;
12
+ secure?: boolean;
13
+ value: string;
14
+ };
15
+ export type SecureCookieDefinition = Omit<SecureCookieDeclaration, "value">;
16
+ export type CookieIssueCode = "cookie-domain-not-allowed" | "cookie-max-age-invalid" | "cookie-name-carries-prefix" | "cookie-name-invalid" | "cookie-path-not-allowed" | "cookie-same-site-none-requires-secure" | "cookie-scope-requires-secure" | "cookie-too-large";
17
+ export type CookieIssue = {
18
+ code: CookieIssueCode;
19
+ message: string;
20
+ name: string;
21
+ };
22
+ export declare function secureCookieName(name: string, scope?: CookieScope): string;
23
+ export declare function validateSecureCookie(declaration: SecureCookieDeclaration): CookieIssue[];
24
+ export declare function readSecureCookie(reference: SecureCookieDefinition | string, scope?: CookieScope): string | undefined;
25
+ export declare function createSecureCookie(declaration: SecureCookieDeclaration): string;
26
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/security/cookies.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAQF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GACvB,2BAA2B,GAC3B,wBAAwB,GACxB,4BAA4B,GAC5B,qBAAqB,GACrB,yBAAyB,GACzB,uCAAuC,GACvC,8BAA8B,GAC9B,kBAAkB,CAAC;AAEvB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAYF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,WAAoB,UAEzE;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,uBAAuB,GACnC,WAAW,EAAE,CA8Ef;AAUD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,sBAAsB,GAAG,MAAM,EAC1C,KAAK,GAAE,WAAoB,sBAY5B;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,uBAAuB,UAYtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/security/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/security/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { HttpMethod } from "../route/types";
2
+ import type { FetchMetadataCheck, FetchMetadataPolicy } from "./types";
3
+ /**
4
+ * Applies the MDN resource-isolation algorithm to one request.
5
+ *
6
+ * The check reads a Fetch Metadata header only when the decision needs it.
7
+ * The returned `vary` list names exactly the fields that the decision read.
8
+ */
9
+ export declare function checkFetchMetadata(policy: Exclude<FetchMetadataPolicy, false>, request: Request, method?: HttpMethod | string): FetchMetadataCheck;
10
+ export type FetchMetadataEnforcement = {
11
+ response: Response | null;
12
+ vary: readonly string[];
13
+ };
14
+ /**
15
+ * Runs the policy before a route body runs.
16
+ *
17
+ * `response` holds a 403 response when the policy denies the request. `vary`
18
+ * names the fields that every response for this route must declare, including
19
+ * the responses that the route itself produces.
20
+ */
21
+ export declare function enforceFetchMetadataPolicy(policy: FetchMetadataPolicy | undefined, request: Request, method?: HttpMethod | string): FetchMetadataEnforcement;
22
+ /**
23
+ * Adds the consulted Fetch Metadata fields to `Vary` without a duplicate.
24
+ *
25
+ * A shared cache must key on every field that changed the decision. The W3C
26
+ * Fetch Metadata specification makes this requirement.
27
+ */
28
+ export declare function applyFetchMetadataVary(response: Response, fields: readonly string[]): Response;
29
+ //# sourceMappingURL=fetch-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-metadata.d.ts","sourceRoot":"","sources":["../../src/security/fetch-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAyBjB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAC3C,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,UAAU,GAAG,MAAuB,GAC3C,kBAAkB,CAyEpB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,UAAU,GAAG,MAAuB,GAC3C,wBAAwB,CAkB1B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,SAAS,MAAM,EAAE,YA4B1B"}
@@ -1,7 +1,11 @@
1
1
  export { auditScriptDependencies, createSecurityAudit, } from "./audit";
2
2
  export { applyCorsHeaders, createCorsHeaders, createCorsPreflightResponse, validateCorsPolicy, } from "./cors";
3
+ export { createSecureCookie, readSecureCookie, secureCookieName, validateSecureCookie, } from "./cookies";
4
+ export type { CookieIssue, CookieIssueCode, CookieSameSite, CookieScope, SecureCookieDeclaration, SecureCookieDefinition, } from "./cookies";
3
5
  export { createCsrfCookie, createCsrfToken, enforceCsrfProtection, issueCsrfToken, parseCookieHeader, } from "./csrf";
4
6
  export type { CsrfCookieOptions, IssuedCsrfToken } from "./csrf";
7
+ export { applyFetchMetadataVary, checkFetchMetadata, enforceFetchMetadataPolicy, } from "./fetch-metadata";
8
+ export type { FetchMetadataEnforcement } from "./fetch-metadata";
5
9
  export { EnvValidationError, defineEnvSchema, env, validateEnv, } from "./env";
6
10
  export { createSecurityHeaders, cspNonce, cspHash, defineRoutePolicy, defineSecurityPolicy, mergeRoutePolicies, mergeRouteSecurityPolicies, mergeSecurityPolicies, security, } from "./policy";
7
11
  export { createMemoryRateLimitStore, enforceRateLimit, parseRateLimitWindow, validateRateLimitPolicy, } from "./rate-limit";
@@ -11,7 +15,7 @@ export { validateUploads, } from "./upload";
11
15
  export { validateRouteModules } from "./verification";
12
16
  export type { RouteModuleVerificationOptions } from "./verification";
13
17
  export { checkWebSocketOrigin, enforceWebSocketOrigin, } from "./websocket";
14
- export type { ContentSecurityPolicy, CorsPolicy, CorsRequestContext, CorsResponseOptions, CsrfPolicy, CspHashAlgorithm, CspDirectiveValue, CspDirectiveReplacement, CspSource, CspSourceDirective, MemoryRateLimitStoreOptions, RateLimitKey, RateLimitPolicy, RateLimitResult, RateLimitStore, ReferrerPolicy, ReportingEndpointUrl, ReportingEndpoints, SecurityAudit, SecurityAuditFinding, SecurityAuditOptions, ScriptDependencyAuditOptions, RequestSecurityPolicy, RoutePolicy, RouteSecurityPolicy, SecurityHeadersOptions, SecurityHeaderPolicy, SecurityPolicy, SecurityPreset, StrictTransportSecurityPolicy, TrustedTypesPolicy, } from "./types";
18
+ export type { ContentSecurityPolicy, CorsPolicy, CorsRequestContext, CorsResponseOptions, CsrfPolicy, CspHashAlgorithm, CspDirectiveValue, CspDirectiveReplacement, CspSource, CspSourceDirective, FetchMetadataCheck, FetchMetadataDestination, FetchMetadataPolicy, FetchMetadataPolicyOptions, FetchMetadataReason, MemoryRateLimitStoreOptions, RateLimitKey, RateLimitPolicy, RateLimitResult, RateLimitStore, ReferrerPolicy, ReportingEndpointUrl, ReportingEndpoints, SecurityAudit, SecurityAuditFinding, SecurityAuditOptions, ScriptDependencyAuditOptions, RequestSecurityPolicy, RoutePolicy, RouteSecurityNeeds, RouteSecurityPolicy, SecurityHeadersOptions, SecurityHeaderPolicy, SecurityPolicy, SecurityPreset, StrictTransportSecurityPolicy, TrustedTypesPolicy, } from "./types";
15
19
  export type { UploadFilePolicy, UploadPolicy, UploadValidationIssue, UploadValidationResult, } from "./upload";
16
20
  export type { EnvSchema, EnvSource, EnvValidationIssue, EnvVariable, InferEnvSchema, } from "./env";
17
21
  export type { SecurityReportContext, SecurityReportHandlerOptions, SecurityReportPayload, } from "./report";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,iBAAiB,GAClB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,GAAG,EACH,WAAW,GACZ,MAAM,OAAO,CAAC;AACf,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,QAAQ,GACT,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,kBAAkB,EAClB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,OAAO,CAAC;AACf,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,iBAAiB,GAClB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,GAAG,EACH,WAAW,GACZ,MAAM,OAAO,CAAC;AACf,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,QAAQ,GACT,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,OAAO,CAAC;AACf,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CspHashAlgorithm, ReportingEndpointUrl, RoutePolicy, RouteSecurityPolicy, SecurityHeadersOptions, SecurityHeaderPolicy, SecurityPolicy, SecurityPreset, TrustedTypesPolicy } from "./types";
1
+ import type { CspHashAlgorithm, RoutePolicy, RouteSecurityPolicy, SecurityHeadersOptions, SecurityPolicy, SecurityPreset } from "./types";
2
2
  export declare const cspNonce: "'nonce-{nonce}'";
3
3
  export declare const security: {
4
4
  api(options?: SecurityPolicy): SecurityPolicy;
@@ -11,32 +11,7 @@ export declare function defineSecurityPolicy(policy: SecurityPolicy): SecurityPo
11
11
  export declare function defineRoutePolicy(policy: RoutePolicy): RoutePolicy;
12
12
  export declare function mergeSecurityPolicies(...policies: Array<SecurityPolicy | false | undefined>): SecurityPolicy;
13
13
  export declare function mergeRoutePolicies(...policies: Array<RoutePolicy | false | undefined>): {
14
- document: SecurityPolicy | {
15
- csp: {
16
- scriptSrc: any[];
17
- baseUri?: import("./types").CspSourceDirective;
18
- childSrc?: import("./types").CspSourceDirective;
19
- connectSrc?: import("./types").CspSourceDirective;
20
- defaultSrc?: import("./types").CspSourceDirective;
21
- fontSrc?: import("./types").CspSourceDirective;
22
- formAction?: import("./types").CspSourceDirective;
23
- frameAncestors?: import("./types").CspSourceDirective;
24
- frameSrc?: import("./types").CspSourceDirective;
25
- imgSrc?: import("./types").CspSourceDirective;
26
- manifestSrc?: import("./types").CspSourceDirective;
27
- mediaSrc?: import("./types").CspSourceDirective;
28
- objectSrc?: import("./types").CspSourceDirective;
29
- reportUri?: readonly ReportingEndpointUrl[] | import("./types").CspDirectiveReplacement<ReportingEndpointUrl> | false;
30
- reportTo?: string;
31
- styleSrc?: import("./types").CspSourceDirective;
32
- styleSrcAttr?: import("./types").CspSourceDirective;
33
- styleSrcElem?: import("./types").CspSourceDirective;
34
- upgradeInsecureRequests?: boolean;
35
- workerSrc?: import("./types").CspSourceDirective;
36
- };
37
- headers?: SecurityHeaderPolicy;
38
- trustedTypes?: TrustedTypesPolicy | false;
39
- } | undefined;
14
+ document: SecurityPolicy | undefined;
40
15
  security?: RouteSecurityPolicy;
41
16
  };
42
17
  export declare function mergeRouteSecurityPolicies(...policies: Array<RouteSecurityPolicy | false | undefined>): RouteSecurityPolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/security/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,cAAc,EAEd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAIjB,eAAO,MAAM,QAAQ,mBAAmC,CAAC;AAyCzD,eAAO,MAAM,QAAQ;kBACN,cAAc;iBAQd,cAAc,YAAW,cAAc;qBAepC,cAAc;qBASd,cAAc;kCASD,cAAc;CAW5C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,kBAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,eAEpD;AAED,wBAAgB,qBAAqB,CACnC,GAAG,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC,kBASvD;AAED,wBAAgB,kBAAkB,CAChC,GAAG,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBpD;AAED,wBAAgB,0BAA0B,CACxC,GAAG,QAAQ,EAAE,KAAK,CAAC,mBAAmB,GAAG,KAAK,GAAG,SAAS,CAAC,uBAc5D;AAuDD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,gBAA2B,mBAQvC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,sBAA2B,WAsCrC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS,WAY3C;AAED,wBAAgB,cAAc,WAK7B"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/security/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAGhB,WAAW,EAEX,mBAAmB,EACnB,sBAAsB,EAEtB,cAAc,EACd,cAAc,EAGf,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,QAAQ,mBAAmC,CAAC;AAyCzD,eAAO,MAAM,QAAQ;kBACN,cAAc;iBAQd,cAAc,YAAW,cAAc;qBAepC,cAAc;qBASd,cAAc;kCASD,cAAc;CAW5C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,kBAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,eAEpD;AAED,wBAAgB,qBAAqB,CACnC,GAAG,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC,kBASvD;AAED,wBAAgB,kBAAkB,CAChC,GAAG,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;;;EAiBpD;AAED,wBAAgB,0BAA0B,CACxC,GAAG,QAAQ,EAAE,KAAK,CAAC,mBAAmB,GAAG,KAAK,GAAG,SAAS,CAAC,uBAe5D;AAyFD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,gBAA2B,mBAQvC;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,sBAA2B,WAsCrC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS,WAY3C;AAED,wBAAgB,cAAc,WAK7B"}
@@ -1,6 +1,9 @@
1
- import type { MemoryRateLimitStoreOptions, RateLimitPolicy, RateLimitStore } from "./types";
2
- export declare function createMemoryRateLimitStore(options?: MemoryRateLimitStoreOptions): RateLimitStore;
3
- export declare function enforceRateLimit(policy: RateLimitPolicy | undefined, request: Request, store: RateLimitStore, now?: number): Response | null;
1
+ import type { MemoryRateLimitStoreOptions, RateLimitPolicy, RateLimitResult, RateLimitStore } from "./types";
2
+ export type MemoryRateLimitStore = {
3
+ increment: (key: string, windowMs: number, now: number) => RateLimitResult;
4
+ };
5
+ export declare function createMemoryRateLimitStore(options?: MemoryRateLimitStoreOptions): MemoryRateLimitStore;
6
+ export declare function enforceRateLimit(policy: RateLimitPolicy | undefined, request: Request, store: RateLimitStore, now?: number): Promise<Response | null>;
4
7
  export declare function parseRateLimitWindow(value: number | string): number;
5
8
  export declare function validateRateLimitPolicy(policy: RateLimitPolicy): void;
6
9
  //# sourceMappingURL=rate-limit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/security/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAE3B,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC;AAgBjB,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,2BAAgC,GACxC,cAAc,CAwChB;AA+BD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,EACrB,GAAG,SAAa,mBA2BjB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,UAwB1D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,QAM9D"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/security/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAE3B,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC;AAqBjB,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,eAAe,CAAC;CAC5E,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CA6CtB;AA+BD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,EACrB,GAAG,SAAa,4BA2BjB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,UAyB1D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,QAM9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/security/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAUrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,mBAmCnB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAKlD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,OAAO,EAAE,OAAO,WAmDjB;AAED,wBAAgB,2BAA2B,aAE1C;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,MAAM,EAAE,UAAU,mBAgBnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,UA0BnD"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/security/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAUrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,mBAmCnB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;;CAKlD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,OAAO,EAAE,OAAO,WAoDjB;AAED,wBAAgB,2BAA2B,aAE1C;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,MAAM,EAAE,UAAU,mBAgBnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,UA2BnD"}