@zayne-labs/callapi-plugins 3.1.1 → 3.1.2
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/esm/index.d.ts +5 -15
- package/dist/esm/index.js +21 -8
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -3
package/dist/esm/index.d.ts
CHANGED
@@ -30,7 +30,7 @@ type LoggerOptions = {
|
|
30
30
|
/**
|
31
31
|
* Enable or disable verbose mode
|
32
32
|
*/
|
33
|
-
|
33
|
+
mode?: "basic" | "verbose";
|
34
34
|
};
|
35
35
|
declare const defaultConsoleObject: ConsoleLikeObject;
|
36
36
|
declare const loggerPlugin: (options?: LoggerOptions) => {
|
@@ -40,28 +40,18 @@ declare const loggerPlugin: (options?: LoggerOptions) => {
|
|
40
40
|
hooks: {
|
41
41
|
onRequest: (ctx: _zayne_labs_callapi0.RequestContext & _zayne_labs_callapi0.PluginExtraOptions<unknown>) => void;
|
42
42
|
onRequestError: (ctx: _zayne_labs_callapi0.RequestContext & {
|
43
|
-
error: _zayne_labs_callapi0.
|
43
|
+
error: _zayne_labs_callapi0.PossibleJavaScriptError;
|
44
44
|
response: null;
|
45
45
|
} & _zayne_labs_callapi0.PluginExtraOptions<unknown>) => void;
|
46
46
|
onResponseError: (ctx: _zayne_labs_callapi0.RequestContext & {
|
47
|
-
error:
|
48
|
-
errorData: never;
|
49
|
-
message: string;
|
50
|
-
name: "HTTPError";
|
51
|
-
originalError: _zayne_labs_callapi0.HTTPError;
|
52
|
-
};
|
47
|
+
error: _zayne_labs_callapi0.PossibleHTTPError<never>;
|
53
48
|
response: Response;
|
54
49
|
} & _zayne_labs_callapi0.PluginExtraOptions<unknown>) => void;
|
55
50
|
onRetry: (ctx: ((_zayne_labs_callapi0.RequestContext & ({
|
56
51
|
error: _zayne_labs_callapi0.PossibleJavaScriptOrValidationError;
|
57
52
|
response: Response | null;
|
58
53
|
} | {
|
59
|
-
error:
|
60
|
-
errorData: never;
|
61
|
-
message: string;
|
62
|
-
name: "HTTPError";
|
63
|
-
originalError: _zayne_labs_callapi0.HTTPError;
|
64
|
-
};
|
54
|
+
error: _zayne_labs_callapi0.PossibleHTTPError<never>;
|
65
55
|
response: Response;
|
66
56
|
})) & {
|
67
57
|
retryAttemptCount: number;
|
@@ -71,7 +61,7 @@ declare const loggerPlugin: (options?: LoggerOptions) => {
|
|
71
61
|
response: Response;
|
72
62
|
} & _zayne_labs_callapi0.PluginExtraOptions<unknown>) => void;
|
73
63
|
onValidationError: (ctx: _zayne_labs_callapi0.RequestContext & {
|
74
|
-
error: _zayne_labs_callapi0.
|
64
|
+
error: _zayne_labs_callapi0.PossibleValidationError;
|
75
65
|
response: Response | null;
|
76
66
|
} & _zayne_labs_callapi0.PluginExtraOptions<unknown>) => void;
|
77
67
|
};
|
package/dist/esm/index.js
CHANGED
@@ -92,7 +92,12 @@ const defaultConsoleObject = {
|
|
92
92
|
warn: (...args) => consola.warn("", ...args)
|
93
93
|
};
|
94
94
|
const loggerPlugin = definePlugin((options) => {
|
95
|
-
const { consoleObject = defaultConsoleObject, enabled = true,
|
95
|
+
const { consoleObject = defaultConsoleObject, enabled = true, mode = "basic" } = options ?? {};
|
96
|
+
const isBasicMode = mode === "basic";
|
97
|
+
const isVerboseMode = mode === "verbose";
|
98
|
+
const lineBreak = "\n\n";
|
99
|
+
const successLog = consoleObject.success ?? consoleObject.log;
|
100
|
+
const errorLog = consoleObject.fail ?? consoleObject.error;
|
96
101
|
return {
|
97
102
|
id: "logger",
|
98
103
|
name: "Logger",
|
@@ -104,13 +109,16 @@ const loggerPlugin = definePlugin((options) => {
|
|
104
109
|
},
|
105
110
|
onRequestError: (ctx) => {
|
106
111
|
if (!(isBoolean(enabled) ? enabled : enabled.onRequestError === true)) return;
|
107
|
-
|
108
|
-
|
112
|
+
const message = [`(${ctx.request.method}) Request to ${ctx.options.fullURL} failed!`, `${ctx.error.name}: ${ctx.error.message}`].join(lineBreak);
|
113
|
+
errorLog(message);
|
109
114
|
},
|
110
115
|
onResponseError: (ctx) => {
|
111
116
|
if (!(isBoolean(enabled) ? enabled : enabled.onResponseError === true)) return;
|
112
|
-
|
113
|
-
|
117
|
+
const message = [`(${ctx.request.method}) Request to ${ctx.options.fullURL} failed with status:
|
118
|
+
${ctx.response.status} (${ctx.response.statusText || getStatusText(ctx.response.status)})`, `${ctx.error.name}: ${ctx.error.message}`].join(lineBreak);
|
119
|
+
isBasicMode && errorLog(message);
|
120
|
+
const verboseMessage = [message, "ErrorData: "].join(lineBreak);
|
121
|
+
isVerboseMode && consoleObject.error(verboseMessage, ctx.error.errorData);
|
114
122
|
},
|
115
123
|
onRetry: (ctx) => {
|
116
124
|
if (!(isBoolean(enabled) ? enabled : enabled.onRetry === true)) return;
|
@@ -118,12 +126,17 @@ const loggerPlugin = definePlugin((options) => {
|
|
118
126
|
},
|
119
127
|
onSuccess: (ctx) => {
|
120
128
|
if (!(isBoolean(enabled) ? enabled : enabled.onSuccess === true)) return;
|
121
|
-
(
|
129
|
+
successLog("Request succeeded!", ctx.data);
|
122
130
|
},
|
123
131
|
onValidationError: (ctx) => {
|
124
132
|
if (!(isBoolean(enabled) ? enabled : enabled.onValidationError === true)) return;
|
125
|
-
|
126
|
-
|
133
|
+
const getMessage = (limit = null) => {
|
134
|
+
const errorMessage = limit === null ? ctx.error.message : `${ctx.error.message.slice(0, limit).trimEnd()}${ctx.error.message.length > limit ? "..." : ""}`;
|
135
|
+
return [`(${ctx.error.issueCause.toUpperCase()}) Validation for request to ${ctx.options.fullURL} failed!`, `${ctx.error.name}: ${errorMessage}`].join(lineBreak);
|
136
|
+
};
|
137
|
+
isBasicMode && errorLog(getMessage(150));
|
138
|
+
const verboseMessage = [getMessage(), "Issues: "].join(lineBreak);
|
139
|
+
isVerboseMode && consoleObject.error(verboseMessage, ctx.error.errorData);
|
127
140
|
}
|
128
141
|
}
|
129
142
|
};
|
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","names":["defaultConsoleObject: ConsoleLikeObject"],"sources":["../../src/logger/constants.ts","../../src/logger/utils.ts","../../src/logger/logger.ts"],"sourcesContent":["export const getStatusTextMap = () => {\n\treturn new Map<number, string>([\n\t\t[100, \"Continue\"],\n\t\t[101, \"Switching Protocols\"],\n\t\t[102, \"Processing\"],\n\t\t[200, \"OK\"],\n\t\t[201, \"Created\"],\n\t\t[202, \"Accepted\"],\n\t\t[203, \"Non-Authoritative Information\"],\n\t\t[204, \"No Content\"],\n\t\t[205, \"Reset Content\"],\n\t\t[206, \"Partial Content\"],\n\t\t[207, \"Multi-Status\"],\n\t\t[208, \"Already Reported\"],\n\t\t[226, \"IM Used\"],\n\t\t[300, \"Multiple Choices\"],\n\t\t[301, \"Moved Permanently\"],\n\t\t[302, \"Found\"],\n\t\t[303, \"See Other\"],\n\t\t[304, \"Not Modified\"],\n\t\t[305, \"Use Proxy\"],\n\t\t[307, \"Temporary Redirect\"],\n\t\t[308, \"Permanent Redirect\"],\n\t\t[400, \"Bad Request\"],\n\t\t[401, \"Unauthorized\"],\n\t\t[402, \"Payment Required\"],\n\t\t[403, \"Forbidden\"],\n\t\t[404, \"Not Found\"],\n\t\t[405, \"Method Not Allowed\"],\n\t\t[406, \"Not Acceptable\"],\n\t\t[407, \"Proxy Authentication Required\"],\n\t\t[408, \"Request Timeout\"],\n\t\t[409, \"Conflict\"],\n\t\t[410, \"Gone\"],\n\t\t[411, \"Length Required\"],\n\t\t[412, \"Precondition Failed\"],\n\t\t[413, \"Payload Too Large\"],\n\t\t[414, \"URI Too Long\"],\n\t\t[415, \"Unsupported Media Type\"],\n\t\t[416, \"Range Not Satisfiable\"],\n\t\t[417, \"Expectation Failed\"],\n\t\t[418, \"I'm a teapot\"],\n\t\t[421, \"Misdirected Request\"],\n\t\t[422, \"Unprocessable Entity\"],\n\t\t[423, \"Locked\"],\n\t\t[424, \"Failed Dependency\"],\n\t\t[425, \"Too Early\"],\n\t\t[426, \"Upgrade Required\"],\n\t\t[428, \"Precondition Required\"],\n\t\t[429, \"Too Many Requests\"],\n\t\t[431, \"Request Header Fields Too Large\"],\n\t\t[451, \"Unavailable For Legal Reasons\"],\n\t\t[500, \"Internal Server Error\"],\n\t\t[501, \"Not Implemented\"],\n\t\t[502, \"Bad Gateway\"],\n\t\t[503, \"Service Unavailable\"],\n\t\t[504, \"Gateway Timeout\"],\n\t\t[505, \"HTTP Version Not Supported\"],\n\t\t[506, \"Variant Also Negotiates\"],\n\t\t[507, \"Insufficient Storage\"],\n\t\t[508, \"Loop Detected\"],\n\t\t[510, \"Not Extended\"],\n\t\t[511, \"Network Authentication Required\"],\n\t]);\n};\n","import { getStatusTextMap } from \"./constants\";\n\nexport const getStatusText = (status: number) => {\n\tconst statusTextMap = getStatusTextMap();\n\n\tconst statusText = statusTextMap.get(status) ?? \"Unknown\";\n\n\treturn statusText;\n};\n","import { definePlugin } from \"@zayne-labs/callapi\";\nimport { type AnyFunction, isBoolean } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createConsola } from \"consola\";\nimport { getStatusText } from \"./utils\";\n\ntype ConsoleLikeObject = {\n\terror: AnyFunction<void>;\n\tfail?: AnyFunction<void>;\n\tlog: AnyFunction<void>;\n\tsuccess?: AnyFunction<void>;\n\twarn?: AnyFunction<void>;\n};\n\nconst consola = createConsola({\n\tformatOptions: {\n\t\tcolors: true,\n\t\tcolumns: 80,\n\t\tcompact: 10,\n\t\tdate: false,\n\t\tfancy: true,\n\t},\n});\n\nexport type LoggerOptions = {\n\t/**\n\t * Custom console object\n\t */\n\tconsoleObject?: ConsoleLikeObject;\n\t/**\n\t * Enable or disable the logger\n\t * @default true\n\t */\n\tenabled?:\n\t\t| boolean\n\t\t| {\n\t\t\t\tonRequest?: boolean;\n\t\t\t\tonRequestError?: boolean;\n\t\t\t\tonResponse?: boolean;\n\t\t\t\tonResponseError?: boolean;\n\t\t\t\tonRetry?: boolean;\n\t\t\t\tonSuccess?: boolean;\n\t\t\t\tonValidationError?: boolean;\n\t\t };\n\t/**\n\t * Enable or disable verbose mode\n\t */\n\tverbose?: boolean;\n};\n\n/* eslint-disable ts-eslint/no-unsafe-argument -- Ignore for now */\nexport const defaultConsoleObject: ConsoleLikeObject = {\n\terror: (...args) => consola.error(\"\", ...args),\n\tfail: (...args) => consola.fail(\"\", ...args),\n\tlog: (...args) => consola.info(\"\", ...args),\n\tsuccess: (...args) => consola.success(\"\", ...args),\n\twarn: (...args) => consola.warn(\"\", ...args),\n};\n/* eslint-enable ts-eslint/no-unsafe-argument -- Ignore for now */\n\nexport const loggerPlugin = definePlugin((options?: LoggerOptions) => {\n\tconst { consoleObject = defaultConsoleObject, enabled = true, verbose } = options ?? {};\n\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- Ignore for now */\n\t\tid: \"logger\",\n\t\tname: \"Logger\",\n\t\tversion: \"1.1.0\",\n\n\t\thooks: {\n\t\t\t/* eslint-enable perfectionist/sort-objects -- Ignore */\n\t\t\tonRequest: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRequest === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconsoleObject.log(`Request being sent to: ${ctx.options.fullURL}`);\n\t\t\t},\n\n\t\t\tonRequestError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRequestError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.fail ?? consoleObject.error;\n\n\t\t\t\tlog(`Request to failed with error: ${ctx.error.name}`, ctx.error.message);\n\n\t\t\t\tverbose && consoleObject.error(ctx.error.errorData);\n\t\t\t},\n\n\t\t\tonResponseError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onResponseError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.fail ?? consoleObject.error;\n\n\t\t\t\tlog(\n\t\t\t\t\t\"Request failed with status: \",\n\t\t\t\t\tctx.response.status,\n\t\t\t\t\t`(${ctx.response.statusText || getStatusText(ctx.response.status)})`,\n\t\t\t\t\tctx.error.message\n\t\t\t\t);\n\n\t\t\t\tverbose && consoleObject.error(ctx.error.errorData);\n\t\t\t},\n\n\t\t\tonRetry: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRetry === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.warn ?? consoleObject.log;\n\n\t\t\t\tlog(`Retrying request... Attempt: `, ctx.retryAttemptCount);\n\t\t\t},\n\n\t\t\tonSuccess: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onSuccess === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.success ?? consoleObject.log;\n\n\t\t\t\tlog(\"Request succeeded!\", ctx.data);\n\t\t\t},\n\n\t\t\tonValidationError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onValidationError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.fail ?? consoleObject.error;\n\n\t\t\t\tlog(`Validation failed with error: ${ctx.error.name}`, ctx.error.message);\n\n\t\t\t\tverbose && consoleObject.error(ctx.error.errorData);\n\t\t\t},\n\t\t},\n\t};\n});\n"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","names":["defaultConsoleObject: ConsoleLikeObject"],"sources":["../../src/logger/constants.ts","../../src/logger/utils.ts","../../src/logger/logger.ts"],"sourcesContent":["export const getStatusTextMap = () => {\n\treturn new Map<number, string>([\n\t\t[100, \"Continue\"],\n\t\t[101, \"Switching Protocols\"],\n\t\t[102, \"Processing\"],\n\t\t[200, \"OK\"],\n\t\t[201, \"Created\"],\n\t\t[202, \"Accepted\"],\n\t\t[203, \"Non-Authoritative Information\"],\n\t\t[204, \"No Content\"],\n\t\t[205, \"Reset Content\"],\n\t\t[206, \"Partial Content\"],\n\t\t[207, \"Multi-Status\"],\n\t\t[208, \"Already Reported\"],\n\t\t[226, \"IM Used\"],\n\t\t[300, \"Multiple Choices\"],\n\t\t[301, \"Moved Permanently\"],\n\t\t[302, \"Found\"],\n\t\t[303, \"See Other\"],\n\t\t[304, \"Not Modified\"],\n\t\t[305, \"Use Proxy\"],\n\t\t[307, \"Temporary Redirect\"],\n\t\t[308, \"Permanent Redirect\"],\n\t\t[400, \"Bad Request\"],\n\t\t[401, \"Unauthorized\"],\n\t\t[402, \"Payment Required\"],\n\t\t[403, \"Forbidden\"],\n\t\t[404, \"Not Found\"],\n\t\t[405, \"Method Not Allowed\"],\n\t\t[406, \"Not Acceptable\"],\n\t\t[407, \"Proxy Authentication Required\"],\n\t\t[408, \"Request Timeout\"],\n\t\t[409, \"Conflict\"],\n\t\t[410, \"Gone\"],\n\t\t[411, \"Length Required\"],\n\t\t[412, \"Precondition Failed\"],\n\t\t[413, \"Payload Too Large\"],\n\t\t[414, \"URI Too Long\"],\n\t\t[415, \"Unsupported Media Type\"],\n\t\t[416, \"Range Not Satisfiable\"],\n\t\t[417, \"Expectation Failed\"],\n\t\t[418, \"I'm a teapot\"],\n\t\t[421, \"Misdirected Request\"],\n\t\t[422, \"Unprocessable Entity\"],\n\t\t[423, \"Locked\"],\n\t\t[424, \"Failed Dependency\"],\n\t\t[425, \"Too Early\"],\n\t\t[426, \"Upgrade Required\"],\n\t\t[428, \"Precondition Required\"],\n\t\t[429, \"Too Many Requests\"],\n\t\t[431, \"Request Header Fields Too Large\"],\n\t\t[451, \"Unavailable For Legal Reasons\"],\n\t\t[500, \"Internal Server Error\"],\n\t\t[501, \"Not Implemented\"],\n\t\t[502, \"Bad Gateway\"],\n\t\t[503, \"Service Unavailable\"],\n\t\t[504, \"Gateway Timeout\"],\n\t\t[505, \"HTTP Version Not Supported\"],\n\t\t[506, \"Variant Also Negotiates\"],\n\t\t[507, \"Insufficient Storage\"],\n\t\t[508, \"Loop Detected\"],\n\t\t[510, \"Not Extended\"],\n\t\t[511, \"Network Authentication Required\"],\n\t]);\n};\n","import { getStatusTextMap } from \"./constants\";\n\nexport const getStatusText = (status: number) => {\n\tconst statusTextMap = getStatusTextMap();\n\n\tconst statusText = statusTextMap.get(status) ?? \"Unknown\";\n\n\treturn statusText;\n};\n","import { definePlugin } from \"@zayne-labs/callapi\";\nimport { type AnyFunction, isBoolean } from \"@zayne-labs/toolkit-type-helpers\";\nimport { createConsola } from \"consola\";\nimport { getStatusText } from \"./utils\";\n\ntype ConsoleLikeObject = {\n\terror: AnyFunction<void>;\n\tfail?: AnyFunction<void>;\n\tlog: AnyFunction<void>;\n\tsuccess?: AnyFunction<void>;\n\twarn?: AnyFunction<void>;\n};\n\nconst consola = createConsola({\n\tformatOptions: {\n\t\tcolors: true,\n\t\tcolumns: 80,\n\t\tcompact: 10,\n\t\tdate: false,\n\t\tfancy: true,\n\t},\n});\n\nexport type LoggerOptions = {\n\t/**\n\t * Custom console object\n\t */\n\tconsoleObject?: ConsoleLikeObject;\n\t/**\n\t * Enable or disable the logger\n\t * @default true\n\t */\n\tenabled?:\n\t\t| boolean\n\t\t| {\n\t\t\t\tonRequest?: boolean;\n\t\t\t\tonRequestError?: boolean;\n\t\t\t\tonResponse?: boolean;\n\t\t\t\tonResponseError?: boolean;\n\t\t\t\tonRetry?: boolean;\n\t\t\t\tonSuccess?: boolean;\n\t\t\t\tonValidationError?: boolean;\n\t\t };\n\t/**\n\t * Enable or disable verbose mode\n\t */\n\tmode?: \"basic\" | \"verbose\";\n};\n\n/* eslint-disable ts-eslint/no-unsafe-argument -- Ignore for now */\nexport const defaultConsoleObject: ConsoleLikeObject = {\n\terror: (...args) => consola.error(\"\", ...args),\n\tfail: (...args) => consola.fail(\"\", ...args),\n\tlog: (...args) => consola.info(\"\", ...args),\n\tsuccess: (...args) => consola.success(\"\", ...args),\n\twarn: (...args) => consola.warn(\"\", ...args),\n};\n/* eslint-enable ts-eslint/no-unsafe-argument -- Ignore for now */\n\nexport const loggerPlugin = definePlugin((options?: LoggerOptions) => {\n\tconst { consoleObject = defaultConsoleObject, enabled = true, mode = \"basic\" } = options ?? {};\n\n\tconst isBasicMode = mode === \"basic\";\n\tconst isVerboseMode = mode === \"verbose\";\n\n\tconst lineBreak = \"\\n\\n\";\n\n\tconst successLog = consoleObject.success ?? consoleObject.log;\n\n\tconst errorLog = consoleObject.fail ?? consoleObject.error;\n\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- Ignore for now */\n\t\tid: \"logger\",\n\t\tname: \"Logger\",\n\t\tversion: \"1.1.0\",\n\n\t\thooks: {\n\t\t\t/* eslint-enable perfectionist/sort-objects -- Ignore */\n\t\t\tonRequest: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRequest === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconsoleObject.log(`Request being sent to: ${ctx.options.fullURL}`);\n\t\t\t},\n\n\t\t\tonRequestError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRequestError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst message = [\n\t\t\t\t\t`(${ctx.request.method}) Request to ${ctx.options.fullURL} failed!`,\n\t\t\t\t\t`${ctx.error.name}: ${ctx.error.message}`,\n\t\t\t\t].join(lineBreak);\n\n\t\t\t\terrorLog(message);\n\t\t\t},\n\n\t\t\tonResponseError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onResponseError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst message = [\n\t\t\t\t\t`(${ctx.request.method}) Request to ${ctx.options.fullURL} failed with status:\n\t\t\t\t\t${ctx.response.status} (${ctx.response.statusText || getStatusText(ctx.response.status)})`,\n\n\t\t\t\t\t`${ctx.error.name}: ${ctx.error.message}`,\n\t\t\t\t].join(lineBreak);\n\n\t\t\t\tisBasicMode && errorLog(message);\n\n\t\t\t\tconst verboseMessage = [message, \"ErrorData: \"].join(lineBreak);\n\n\t\t\t\tisVerboseMode && consoleObject.error(verboseMessage, ctx.error.errorData);\n\t\t\t},\n\n\t\t\tonRetry: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onRetry === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst log = consoleObject.warn ?? consoleObject.log;\n\n\t\t\t\tlog(`Retrying request... Attempt: `, ctx.retryAttemptCount);\n\t\t\t},\n\n\t\t\tonSuccess: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onSuccess === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tsuccessLog(\"Request succeeded!\", ctx.data);\n\t\t\t},\n\n\t\t\tonValidationError: (ctx) => {\n\t\t\t\tconst isEnabled = isBoolean(enabled) ? enabled : enabled.onValidationError === true;\n\n\t\t\t\tif (!isEnabled) return;\n\n\t\t\t\tconst getMessage = (limit: number | null = null) => {\n\t\t\t\t\tconst errorMessage =\n\t\t\t\t\t\tlimit === null ?\n\t\t\t\t\t\t\tctx.error.message\n\t\t\t\t\t\t:\t`${ctx.error.message.slice(0, limit).trimEnd()}${ctx.error.message.length > limit ? \"...\" : \"\"}`;\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`(${ctx.error.issueCause.toUpperCase()}) Validation for request to ${ctx.options.fullURL} failed!`,\n\t\t\t\t\t\t`${ctx.error.name}: ${errorMessage}`,\n\t\t\t\t\t].join(lineBreak);\n\t\t\t\t};\n\n\t\t\t\tisBasicMode && errorLog(getMessage(150));\n\n\t\t\t\tconst verboseMessage = [getMessage(), \"Issues: \"].join(lineBreak);\n\n\t\t\t\tisVerboseMode && consoleObject.error(verboseMessage, ctx.error.errorData);\n\t\t\t},\n\t\t},\n\t};\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@zayne-labs/callapi-plugins",
|
3
3
|
"type": "module",
|
4
|
-
"version": "3.1.
|
4
|
+
"version": "3.1.2",
|
5
5
|
"description": "A collection of plugins for callapi",
|
6
6
|
"author": "Ryan Zayne",
|
7
7
|
"license": "MIT",
|
@@ -21,7 +21,7 @@
|
|
21
21
|
"peerDependencies": {
|
22
22
|
"@zayne-labs/toolkit-type-helpers": ">=0.9.35",
|
23
23
|
"consola": "^3.4.2",
|
24
|
-
"@zayne-labs/callapi": "1.10.
|
24
|
+
"@zayne-labs/callapi": "1.10.3"
|
25
25
|
},
|
26
26
|
"devDependencies": {
|
27
27
|
"@arethetypeswrong/cli": "0.18.2",
|
@@ -38,7 +38,7 @@
|
|
38
38
|
"tsdown": "^0.15.2",
|
39
39
|
"typescript": "5.9.2",
|
40
40
|
"vitest": "^3.2.4",
|
41
|
-
"@zayne-labs/callapi": "1.10.
|
41
|
+
"@zayne-labs/callapi": "1.10.3"
|
42
42
|
},
|
43
43
|
"publishConfig": {
|
44
44
|
"access": "public",
|