@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.
- package/README.md +2 -0
- package/dist/adapter/testing.d.ts +33 -0
- package/dist/adapter/testing.d.ts.map +1 -0
- package/dist/adapter/testing.js +251 -0
- package/dist/adapter/testing.js.map +1 -0
- package/dist/browser/file-router.d.ts.map +1 -1
- package/dist/chunks/document-shell-WoM8yZlR.js +35 -0
- package/dist/chunks/document-shell-WoM8yZlR.js.map +1 -0
- package/dist/chunks/image-codec-Di53WpcH.js +141 -0
- package/dist/chunks/image-codec-Di53WpcH.js.map +1 -0
- package/dist/chunks/images-Edar3eU1.js +339 -0
- package/dist/chunks/images-Edar3eU1.js.map +1 -0
- package/dist/chunks/request-metadata-DaIYq4Ea.js +677 -0
- package/dist/chunks/request-metadata-DaIYq4Ea.js.map +1 -0
- package/dist/chunks/streaming-D0fGAuiO.js +469 -0
- package/dist/chunks/streaming-D0fGAuiO.js.map +1 -0
- package/dist/chunks/{testing-DBjVCN5v.js → testing-CRflAw4X.js} +1300 -1139
- package/dist/chunks/testing-CRflAw4X.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +63 -54
- package/dist/cli.js.map +1 -1
- package/dist/data/cache.d.ts +8 -0
- package/dist/data/cache.d.ts.map +1 -1
- package/dist/data/idempotency.d.ts.map +1 -1
- package/dist/data/index.d.ts +3 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/testing.d.ts.map +1 -1
- package/dist/data/testing.js +94 -72
- package/dist/data/testing.js.map +1 -1
- package/dist/data/tiered.d.ts +7 -0
- package/dist/data/tiered.d.ts.map +1 -0
- package/dist/document/deferred-scripts.d.ts +11 -0
- package/dist/document/deferred-scripts.d.ts.map +1 -0
- package/dist/document/hydration.d.ts.map +1 -1
- package/dist/document/index.d.ts +4 -1
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/render.d.ts.map +1 -1
- package/dist/document/scripts.d.ts +12 -1
- package/dist/document/scripts.d.ts.map +1 -1
- package/dist/document/trusted-types.d.ts +10 -0
- package/dist/document/trusted-types.d.ts.map +1 -0
- package/dist/edge/assets.d.ts +14 -0
- package/dist/edge/assets.d.ts.map +1 -0
- package/dist/edge/index.d.ts +19 -0
- package/dist/edge/index.d.ts.map +1 -0
- package/dist/edge/index.js +286 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge/stores.d.ts +8 -0
- package/dist/edge/stores.d.ts.map +1 -0
- package/dist/edge/streaming.d.ts +7 -0
- package/dist/edge/streaming.d.ts.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +895 -556
- package/dist/index.js.map +1 -1
- package/dist/internal/testing.js +6 -6
- package/dist/kv/index.d.ts +5 -0
- package/dist/kv/index.d.ts.map +1 -0
- package/dist/kv/index.js +126 -0
- package/dist/kv/index.js.map +1 -0
- package/dist/kv/rate-limit-store.d.ts +8 -0
- package/dist/kv/rate-limit-store.d.ts.map +1 -0
- package/dist/kv/store.d.ts +28 -0
- package/dist/kv/store.d.ts.map +1 -0
- package/dist/node/font.d.ts +5 -0
- package/dist/node/font.d.ts.map +1 -0
- package/dist/node/http.d.ts.map +1 -1
- package/dist/node/image.d.ts +15 -0
- package/dist/node/image.d.ts.map +1 -0
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +25 -23
- package/dist/node/index.js.map +1 -1
- package/dist/node/static.d.ts.map +1 -1
- package/dist/node/streaming.d.ts.map +1 -1
- package/dist/platform/analytics.d.ts +58 -5
- package/dist/platform/analytics.d.ts.map +1 -1
- package/dist/platform/font-assets.d.ts +19 -0
- package/dist/platform/font-assets.d.ts.map +1 -0
- package/dist/platform/fonts.d.ts +14 -4
- package/dist/platform/fonts.d.ts.map +1 -1
- package/dist/platform/image-codec.d.ts +15 -0
- package/dist/platform/image-codec.d.ts.map +1 -0
- package/dist/platform/image-url.d.ts +17 -0
- package/dist/platform/image-url.d.ts.map +1 -0
- package/dist/platform/image.d.ts +8 -0
- package/dist/platform/image.d.ts.map +1 -0
- package/dist/platform/images.d.ts +15 -0
- package/dist/platform/images.d.ts.map +1 -1
- package/dist/platform/index.d.ts +13 -6
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/observability.d.ts +2 -1
- package/dist/platform/observability.d.ts.map +1 -1
- package/dist/platform/web-vitals-client.d.ts +32 -0
- package/dist/platform/web-vitals-client.d.ts.map +1 -0
- package/dist/platform/web-vitals.d.ts +78 -0
- package/dist/platform/web-vitals.d.ts.map +1 -0
- package/dist/redis/index.d.ts +5 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +209 -0
- package/dist/redis/index.js.map +1 -0
- package/dist/redis/rate-limit-store.d.ts +8 -0
- package/dist/redis/rate-limit-store.d.ts.map +1 -0
- package/dist/redis/store.d.ts +8 -0
- package/dist/redis/store.d.ts.map +1 -0
- package/dist/route/action.d.ts.map +1 -1
- package/dist/route/middleware.d.ts.map +1 -1
- package/dist/route/response.d.ts.map +1 -1
- package/dist/router/index.d.ts +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/manifest.d.ts +1 -0
- package/dist/router/manifest.d.ts.map +1 -1
- package/dist/security/cookies.d.ts +26 -0
- package/dist/security/cookies.d.ts.map +1 -0
- package/dist/security/env.d.ts.map +1 -1
- package/dist/security/fetch-metadata.d.ts +29 -0
- package/dist/security/fetch-metadata.d.ts.map +1 -0
- package/dist/security/index.d.ts +5 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/policy.d.ts +2 -27
- package/dist/security/policy.d.ts.map +1 -1
- package/dist/security/rate-limit.d.ts +6 -3
- package/dist/security/rate-limit.d.ts.map +1 -1
- package/dist/security/request.d.ts.map +1 -1
- package/dist/security/types.d.ts +82 -6
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/verification.d.ts.map +1 -1
- package/dist/server/document-shell.d.ts +12 -0
- package/dist/server/document-shell.d.ts.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/request-handler.d.ts +6 -2
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/static/images.d.ts +13 -0
- package/dist/static/images.d.ts.map +1 -0
- package/dist/static/index.d.ts +8 -0
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +421 -313
- package/dist/static/index.js.map +1 -1
- package/dist/static/vercel.d.ts +3 -0
- package/dist/static/vercel.d.ts.map +1 -1
- package/dist/vite/index.d.ts +3 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +1041 -652
- package/dist/vite/index.js.map +1 -1
- package/dist/vite/plugin.d.ts +9 -0
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/vite/policy-verification.d.ts.map +1 -1
- package/dist/vite/route-audit.d.ts +50 -0
- package/dist/vite/route-audit.d.ts.map +1 -0
- package/package.json +34 -3
- package/dist/chunks/request-metadata-DwEO1EAS.js +0 -477
- package/dist/chunks/request-metadata-DwEO1EAS.js.map +0 -1
- package/dist/chunks/streaming-Ci6vf3BB.js +0 -353
- package/dist/chunks/streaming-Ci6vf3BB.js.map +0 -1
- 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;;;;;;
|
|
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,
|
|
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;
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/route/response.ts"],"names":[],"mappings":"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"}
|
package/dist/router/index.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,aAAa,EACb,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE;QACT,KAAK,EAAE,aAAa,EAAE,CAAC;QACvB,OAAO,EAAE,aAAa,EAAE,CAAC;QACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACvC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IACE,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,GACD;IAAE,OAAO,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9C,CAAC,mBAAmB,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,GAC/C;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,iBAiHxE;AAqFD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,UAAkD,EACzD,WAAW,CAAC,EAAE,gBAAgB,EAC9B,KAAK,GAAE,KAA2B,EAClC,OAAO,GAAE;IACP,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,GACL,OAAO,CAAC,iBAAiB,CAAC,
|
|
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":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,EAAE,kBAAkB,EAAE,CAAC;gBAEjB,MAAM,EAAE,kBAAkB,EAAE;CAKzC;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IAC7D,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,SAAS,IAAI;KACpD,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,KAAK,EAAE,MAAM,QAAQ,CAAC,GAC/E,QAAQ,SAAS,IAAI,GACnB,KAAK,GAAG,SAAS,GACjB,KAAK,GACP,KAAK;CACV,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,QAAQ,EAAE,IAAI,CAAC;CAChB,CAAC;AAIF,KAAK,wBAAwB,GAAG,0BAA0B,GAAG;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,wBAAwB,GAAG,0BAA0B,GAAG;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,KAAK,qBAAqB,GAAG,0BAA0B,GAAG;IACxD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,qBAAqB,GAAG,0BAA0B,GAAG;IACxD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAIF,KAAK,yBAAyB,GAAG,0BAA0B,GAAG;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,yBAAyB,GAAG,0BAA0B,GAAG;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,wBAAgB,eAAe,CAAC,MAAM,SAAS,SAAS,EAAE,MAAM,EAAE,MAAM,UAEvE;AAED,wBAAgB,WAAW,CAAC,MAAM,SAAS,SAAS,EAClD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,cAAc,CAAC,MAAM,CAAC,
|
|
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"}
|
package/dist/security/index.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
|
3
|
-
|
|
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;
|
|
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,
|
|
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"}
|