@fefade/common 1.0.5 → 1.0.7
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/dist/index.d.mts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +37 -27
- package/dist/index.mjs +37 -27
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -34,11 +34,13 @@ type MaybePromise<T> = T | Promise<T>;
|
|
|
34
34
|
type Handler<E extends HasRequest> = (event: E) => MaybePromise<Response>;
|
|
35
35
|
|
|
36
36
|
type RateLimiterLike = {
|
|
37
|
-
consume
|
|
37
|
+
consume(key: string | number, pointsToConsume?: number, options?: {
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
}): Promise<unknown>;
|
|
38
40
|
};
|
|
39
41
|
declare function export_default$1<E extends HasRequest>(handler: Handler<E>, limiter: RateLimiterLike): Handler<E>;
|
|
40
42
|
|
|
41
|
-
declare function export_default<E extends HasRequest>(handler: Handler<E>, secretKey
|
|
43
|
+
declare function export_default<E extends HasRequest>(handler: Handler<E>, secretKey?: string): Handler<E>;
|
|
42
44
|
|
|
43
45
|
declare const ORG_NAME = "Fefade";
|
|
44
46
|
declare const ACRONYM = "ff";
|
package/dist/index.d.ts
CHANGED
|
@@ -34,11 +34,13 @@ type MaybePromise<T> = T | Promise<T>;
|
|
|
34
34
|
type Handler<E extends HasRequest> = (event: E) => MaybePromise<Response>;
|
|
35
35
|
|
|
36
36
|
type RateLimiterLike = {
|
|
37
|
-
consume
|
|
37
|
+
consume(key: string | number, pointsToConsume?: number, options?: {
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
}): Promise<unknown>;
|
|
38
40
|
};
|
|
39
41
|
declare function export_default$1<E extends HasRequest>(handler: Handler<E>, limiter: RateLimiterLike): Handler<E>;
|
|
40
42
|
|
|
41
|
-
declare function export_default<E extends HasRequest>(handler: Handler<E>, secretKey
|
|
43
|
+
declare function export_default<E extends HasRequest>(handler: Handler<E>, secretKey?: string): Handler<E>;
|
|
42
44
|
|
|
43
45
|
declare const ORG_NAME = "Fefade";
|
|
44
46
|
declare const ACRONYM = "ff";
|
package/dist/index.js
CHANGED
|
@@ -14010,9 +14010,9 @@ function handleError_default(err) {
|
|
|
14010
14010
|
if (err instanceof external_exports.ZodError) {
|
|
14011
14011
|
return new Errors(err.issues[0].message, "VALIDATION_ERROR", 400);
|
|
14012
14012
|
}
|
|
14013
|
-
const
|
|
14014
|
-
if (
|
|
14015
|
-
return
|
|
14013
|
+
const fbError = firebaseError(err);
|
|
14014
|
+
if (fbError instanceof Errors) {
|
|
14015
|
+
return fbError;
|
|
14016
14016
|
}
|
|
14017
14017
|
return new Errors("Internal server error", "INTERNAL_SERVER_ERROR", 500);
|
|
14018
14018
|
}
|
|
@@ -14042,45 +14042,50 @@ function getIp_default(request) {
|
|
|
14042
14042
|
|
|
14043
14043
|
// src/withRateLimit.ts
|
|
14044
14044
|
function isRateLimiterRes(err) {
|
|
14045
|
-
return
|
|
14045
|
+
return typeof err === "object" && err !== null && "msBeforeNext" in err && "remainingPoints" in err;
|
|
14046
14046
|
}
|
|
14047
14047
|
function withRateLimit_default(handler, limiter) {
|
|
14048
14048
|
return async (event) => {
|
|
14049
|
-
const
|
|
14049
|
+
const ipAddress = getIp_default(event.request);
|
|
14050
14050
|
try {
|
|
14051
|
-
await limiter.consume(
|
|
14051
|
+
await limiter.consume(ipAddress);
|
|
14052
14052
|
} catch (err) {
|
|
14053
14053
|
if (isRateLimiterRes(err)) {
|
|
14054
|
-
Response.
|
|
14055
|
-
|
|
14056
|
-
{
|
|
14057
|
-
|
|
14058
|
-
|
|
14059
|
-
"Retry-After": "1800",
|
|
14060
|
-
"Content-Type": "application/json"
|
|
14061
|
-
}
|
|
14054
|
+
return new Response(JSON.stringify({ error: "Too many requests" }), {
|
|
14055
|
+
status: 429,
|
|
14056
|
+
headers: {
|
|
14057
|
+
"Retry-After": "1800",
|
|
14058
|
+
"Content-Type": "application/json"
|
|
14062
14059
|
}
|
|
14063
|
-
);
|
|
14060
|
+
});
|
|
14064
14061
|
}
|
|
14065
|
-
|
|
14066
|
-
{ error: "Internal server error" },
|
|
14067
|
-
{
|
|
14068
|
-
status: 500
|
|
14069
|
-
}
|
|
14070
|
-
);
|
|
14062
|
+
throw err;
|
|
14071
14063
|
}
|
|
14072
|
-
return handler(
|
|
14064
|
+
return handler(event);
|
|
14073
14065
|
};
|
|
14074
14066
|
}
|
|
14075
14067
|
|
|
14076
14068
|
// src/validateTurnstile.ts
|
|
14077
14069
|
function validateTurnstile_default(handler, secretKey) {
|
|
14078
14070
|
return async (event) => {
|
|
14071
|
+
if (!secretKey) {
|
|
14072
|
+
return new Response(JSON.stringify({ error: "Invalid secret key" }), {
|
|
14073
|
+
status: 500,
|
|
14074
|
+
headers: {
|
|
14075
|
+
"Content-Type": "application/json"
|
|
14076
|
+
}
|
|
14077
|
+
});
|
|
14078
|
+
}
|
|
14079
14079
|
const body = await event.request.json();
|
|
14080
14080
|
const token = body["cf-turnstile-response"];
|
|
14081
|
-
const
|
|
14081
|
+
const ipAddress = getIp_default(event.request);
|
|
14082
14082
|
if (!token) {
|
|
14083
|
-
return Response.
|
|
14083
|
+
return new Response(JSON.stringify({ error: "Captcha not sent" }), {
|
|
14084
|
+
status: 400,
|
|
14085
|
+
headers: {
|
|
14086
|
+
"Content-Type": "application/json"
|
|
14087
|
+
}
|
|
14088
|
+
});
|
|
14084
14089
|
}
|
|
14085
14090
|
const response = await fetch(
|
|
14086
14091
|
"https://challenges.cloudflare.com/turnstile/v0/siteverify",
|
|
@@ -14092,14 +14097,19 @@ function validateTurnstile_default(handler, secretKey) {
|
|
|
14092
14097
|
body: JSON.stringify({
|
|
14093
14098
|
secret: secretKey,
|
|
14094
14099
|
response: token.toString(),
|
|
14095
|
-
remoteip:
|
|
14100
|
+
remoteip: ipAddress
|
|
14096
14101
|
})
|
|
14097
14102
|
}
|
|
14098
14103
|
);
|
|
14099
14104
|
if (!response.ok) {
|
|
14100
|
-
return Response.
|
|
14105
|
+
return new Response(JSON.stringify({ error: "Invalid verification" }), {
|
|
14106
|
+
status: 400,
|
|
14107
|
+
headers: {
|
|
14108
|
+
"Content-Type": "application/json"
|
|
14109
|
+
}
|
|
14110
|
+
});
|
|
14101
14111
|
}
|
|
14102
|
-
return handler(
|
|
14112
|
+
return handler(event);
|
|
14103
14113
|
};
|
|
14104
14114
|
}
|
|
14105
14115
|
|
package/dist/index.mjs
CHANGED
|
@@ -13982,9 +13982,9 @@ function handleError_default(err) {
|
|
|
13982
13982
|
if (err instanceof external_exports.ZodError) {
|
|
13983
13983
|
return new Errors(err.issues[0].message, "VALIDATION_ERROR", 400);
|
|
13984
13984
|
}
|
|
13985
|
-
const
|
|
13986
|
-
if (
|
|
13987
|
-
return
|
|
13985
|
+
const fbError = firebaseError(err);
|
|
13986
|
+
if (fbError instanceof Errors) {
|
|
13987
|
+
return fbError;
|
|
13988
13988
|
}
|
|
13989
13989
|
return new Errors("Internal server error", "INTERNAL_SERVER_ERROR", 500);
|
|
13990
13990
|
}
|
|
@@ -14014,45 +14014,50 @@ function getIp_default(request) {
|
|
|
14014
14014
|
|
|
14015
14015
|
// src/withRateLimit.ts
|
|
14016
14016
|
function isRateLimiterRes(err) {
|
|
14017
|
-
return
|
|
14017
|
+
return typeof err === "object" && err !== null && "msBeforeNext" in err && "remainingPoints" in err;
|
|
14018
14018
|
}
|
|
14019
14019
|
function withRateLimit_default(handler, limiter) {
|
|
14020
14020
|
return async (event) => {
|
|
14021
|
-
const
|
|
14021
|
+
const ipAddress = getIp_default(event.request);
|
|
14022
14022
|
try {
|
|
14023
|
-
await limiter.consume(
|
|
14023
|
+
await limiter.consume(ipAddress);
|
|
14024
14024
|
} catch (err) {
|
|
14025
14025
|
if (isRateLimiterRes(err)) {
|
|
14026
|
-
Response.
|
|
14027
|
-
|
|
14028
|
-
{
|
|
14029
|
-
|
|
14030
|
-
|
|
14031
|
-
"Retry-After": "1800",
|
|
14032
|
-
"Content-Type": "application/json"
|
|
14033
|
-
}
|
|
14026
|
+
return new Response(JSON.stringify({ error: "Too many requests" }), {
|
|
14027
|
+
status: 429,
|
|
14028
|
+
headers: {
|
|
14029
|
+
"Retry-After": "1800",
|
|
14030
|
+
"Content-Type": "application/json"
|
|
14034
14031
|
}
|
|
14035
|
-
);
|
|
14032
|
+
});
|
|
14036
14033
|
}
|
|
14037
|
-
|
|
14038
|
-
{ error: "Internal server error" },
|
|
14039
|
-
{
|
|
14040
|
-
status: 500
|
|
14041
|
-
}
|
|
14042
|
-
);
|
|
14034
|
+
throw err;
|
|
14043
14035
|
}
|
|
14044
|
-
return handler(
|
|
14036
|
+
return handler(event);
|
|
14045
14037
|
};
|
|
14046
14038
|
}
|
|
14047
14039
|
|
|
14048
14040
|
// src/validateTurnstile.ts
|
|
14049
14041
|
function validateTurnstile_default(handler, secretKey) {
|
|
14050
14042
|
return async (event) => {
|
|
14043
|
+
if (!secretKey) {
|
|
14044
|
+
return new Response(JSON.stringify({ error: "Invalid secret key" }), {
|
|
14045
|
+
status: 500,
|
|
14046
|
+
headers: {
|
|
14047
|
+
"Content-Type": "application/json"
|
|
14048
|
+
}
|
|
14049
|
+
});
|
|
14050
|
+
}
|
|
14051
14051
|
const body = await event.request.json();
|
|
14052
14052
|
const token = body["cf-turnstile-response"];
|
|
14053
|
-
const
|
|
14053
|
+
const ipAddress = getIp_default(event.request);
|
|
14054
14054
|
if (!token) {
|
|
14055
|
-
return Response.
|
|
14055
|
+
return new Response(JSON.stringify({ error: "Captcha not sent" }), {
|
|
14056
|
+
status: 400,
|
|
14057
|
+
headers: {
|
|
14058
|
+
"Content-Type": "application/json"
|
|
14059
|
+
}
|
|
14060
|
+
});
|
|
14056
14061
|
}
|
|
14057
14062
|
const response = await fetch(
|
|
14058
14063
|
"https://challenges.cloudflare.com/turnstile/v0/siteverify",
|
|
@@ -14064,14 +14069,19 @@ function validateTurnstile_default(handler, secretKey) {
|
|
|
14064
14069
|
body: JSON.stringify({
|
|
14065
14070
|
secret: secretKey,
|
|
14066
14071
|
response: token.toString(),
|
|
14067
|
-
remoteip:
|
|
14072
|
+
remoteip: ipAddress
|
|
14068
14073
|
})
|
|
14069
14074
|
}
|
|
14070
14075
|
);
|
|
14071
14076
|
if (!response.ok) {
|
|
14072
|
-
return Response.
|
|
14077
|
+
return new Response(JSON.stringify({ error: "Invalid verification" }), {
|
|
14078
|
+
status: 400,
|
|
14079
|
+
headers: {
|
|
14080
|
+
"Content-Type": "application/json"
|
|
14081
|
+
}
|
|
14082
|
+
});
|
|
14073
14083
|
}
|
|
14074
|
-
return handler(
|
|
14084
|
+
return handler(event);
|
|
14075
14085
|
};
|
|
14076
14086
|
}
|
|
14077
14087
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fefade/common",
|
|
3
3
|
"description": "Containing common resources, constants, images, and utility functions that are used across various projects. This package aims to promote reusability and maintain consistency across different applications by centralizing commonly used assets and code.",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.7",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|