@20syldev/api 5.5.0 → 5.7.0
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/.prettierignore +5 -0
- package/README.md +204 -80
- package/dist/app.d.ts +2 -0
- package/dist/config/env.d.ts +21 -0
- package/dist/config/env.js +10 -2
- package/dist/config/env.js.map +1 -1
- package/dist/config/plans.d.ts +26 -0
- package/dist/config/versions.d.ts +18 -0
- package/dist/config/versions.js +6 -0
- package/dist/config/versions.js.map +1 -1
- package/dist/constants.d.ts +39 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/middleware/cors.d.ts +2 -0
- package/dist/middleware/cors.js +2 -1
- package/dist/middleware/cors.js.map +1 -1
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/json.d.ts +2 -0
- package/dist/middleware/logger.d.ts +26 -0
- package/dist/middleware/logger.js +34 -1
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/ratelimit.d.ts +2 -0
- package/dist/middleware/version.d.ts +3 -0
- package/dist/middleware/version.js +2 -2
- package/dist/middleware/version.js.map +1 -1
- package/dist/modules/v3/algorithms.d.ts +82 -0
- package/dist/modules/v3/captcha.d.ts +8 -0
- package/dist/modules/v3/chat.d.ts +9 -0
- package/dist/modules/v3/chat.js +3 -3
- package/dist/modules/v3/chat.js.map +1 -1
- package/dist/modules/v3/color.d.ts +6 -0
- package/dist/modules/v3/convert.d.ts +10 -0
- package/dist/modules/v3/domain.d.ts +6 -0
- package/dist/modules/v3/hash.d.ts +8 -0
- package/dist/modules/v3/hyperplanning.d.ts +9 -0
- package/dist/modules/v3/levenshtein.d.ts +9 -0
- package/dist/modules/v3/personal.d.ts +6 -0
- package/dist/modules/v3/qrcode.d.ts +8 -0
- package/dist/modules/v3/tic_tac_toe.d.ts +9 -0
- package/dist/modules/v3/tic_tac_toe.js +3 -3
- package/dist/modules/v3/tic_tac_toe.js.map +1 -1
- package/dist/modules/v3/time.d.ts +12 -0
- package/dist/modules/v3/token.d.ts +9 -0
- package/dist/modules/v3/username.d.ts +6 -0
- package/dist/modules/v3/utils.d.ts +50 -0
- package/dist/modules/v3.d.ts +15 -0
- package/dist/modules/v4/address.d.ts +20 -0
- package/dist/modules/v4/agent.d.ts +30 -0
- package/dist/modules/v4/algorithms.d.ts +90 -0
- package/dist/modules/v4/avatar.d.ts +23 -0
- package/dist/modules/v4/barcode.d.ts +27 -0
- package/dist/modules/v4/captcha.d.ts +22 -0
- package/dist/modules/v4/chat.d.ts +21 -0
- package/dist/modules/v4/chat.js +3 -3
- package/dist/modules/v4/chat.js.map +1 -1
- package/dist/modules/v4/color.d.ts +16 -0
- package/dist/modules/v4/convert.d.ts +15 -0
- package/dist/modules/v4/credit.d.ts +22 -0
- package/dist/modules/v4/cron.d.ts +17 -0
- package/dist/modules/v4/dice.d.ts +16 -0
- package/dist/modules/v4/domain.d.ts +6 -0
- package/dist/modules/v4/encode.d.ts +81 -0
- package/dist/modules/v4/geo.d.ts +30 -0
- package/dist/modules/v4/hash.d.ts +15 -0
- package/dist/modules/v4/hyperplanning.d.ts +19 -0
- package/dist/modules/v4/ip.d.ts +19 -0
- package/dist/modules/v4/levenshtein.d.ts +13 -0
- package/dist/modules/v4/palette.d.ts +19 -0
- package/dist/modules/v4/password.d.ts +25 -0
- package/dist/modules/v4/personal.d.ts +6 -0
- package/dist/modules/v4/placeholder.d.ts +30 -0
- package/dist/modules/v4/qrcode.d.ts +25 -0
- package/dist/modules/v4/regex.d.ts +23 -0
- package/dist/modules/v4/statistics.d.ts +20 -0
- package/dist/modules/v4/text.d.ts +43 -0
- package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v4/tic_tac_toe.js +3 -3
- package/dist/modules/v4/tic_tac_toe.js.map +1 -1
- package/dist/modules/v4/time.d.ts +15 -0
- package/dist/modules/v4/token.d.ts +9 -0
- package/dist/modules/v4/username.d.ts +6 -0
- package/dist/modules/v4/validate.d.ts +34 -0
- package/dist/modules/v4.d.ts +32 -0
- package/dist/modules/v5/address.d.ts +5 -0
- package/dist/modules/v5/algorithms.d.ts +9 -0
- package/dist/modules/v5/asymmetric.d.ts +26 -0
- package/dist/modules/v5/barcode.d.ts +27 -0
- package/dist/modules/v5/case.d.ts +10 -0
- package/dist/modules/v5/chart.d.ts +53 -0
- package/dist/modules/v5/chat.d.ts +21 -0
- package/dist/modules/v5/chat.js +3 -3
- package/dist/modules/v5/chat.js.map +1 -1
- package/dist/modules/v5/csv.d.ts +29 -0
- package/dist/modules/v5/csv.js +143 -0
- package/dist/modules/v5/csv.js.map +1 -0
- package/dist/modules/v5/evaluate.d.ts +14 -0
- package/dist/modules/v5/jwt.d.ts +11 -0
- package/dist/modules/v5/matrix.d.ts +77 -0
- package/dist/modules/v5/otp.d.ts +30 -0
- package/dist/modules/v5/symmetric.d.ts +15 -0
- package/dist/modules/v5/text.d.ts +5 -0
- package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v5/tic_tac_toe.js +3 -3
- package/dist/modules/v5/tic_tac_toe.js.map +1 -1
- package/dist/modules/v5/url.d.ts +18 -0
- package/dist/modules/v5/url.js +51 -0
- package/dist/modules/v5/url.js.map +1 -0
- package/dist/modules/v5.d.ts +17 -0
- package/dist/modules/v5.js +2 -0
- package/dist/modules/v5.js.map +1 -1
- package/dist/routes/delete.d.ts +2 -0
- package/dist/routes/delete.js +2 -2
- package/dist/routes/delete.js.map +1 -1
- package/dist/routes/get.d.ts +2 -0
- package/dist/routes/get.js +104 -82
- package/dist/routes/get.js.map +1 -1
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +8 -4
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/patch.d.ts +2 -0
- package/dist/routes/patch.js +1 -1
- package/dist/routes/patch.js.map +1 -1
- package/dist/routes/post.d.ts +2 -0
- package/dist/routes/post.js +54 -29
- package/dist/routes/post.js.map +1 -1
- package/dist/storage/index.d.ts +4 -0
- package/dist/types/storage.d.ts +49 -0
- package/dist/utils/colors.d.ts +44 -0
- package/dist/utils/helpers.d.ts +55 -0
- package/dist/utils/response.d.ts +9 -0
- package/dist/utils/response.js +2 -4
- package/dist/utils/response.js.map +1 -1
- package/package.json +17 -16
- package/robots.txt +74 -0
- package/src/favicon.ico +0 -0
- package/dist/middleware/connection.js +0 -23
- package/dist/middleware/connection.js.map +0 -1
- package/dist/modules/v4/colors.js +0 -54
- package/dist/modules/v4/colors.js.map +0 -1
- package/dist/modules/v4/utils.js +0 -26
- package/dist/modules/v4/utils.js.map +0 -1
- package/dist/modules/v5/diff.js +0 -52
- package/dist/modules/v5/diff.js.map +0 -1
- package/dist/modules/v5/read.js +0 -39
- package/dist/modules/v5/read.js.map +0 -1
- package/dist/utils/version.js +0 -3
- package/dist/utils/version.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface StatisticsResult {
|
|
2
|
+
count: number;
|
|
3
|
+
sum: number;
|
|
4
|
+
min: number;
|
|
5
|
+
max: number;
|
|
6
|
+
range: number;
|
|
7
|
+
mean: number;
|
|
8
|
+
median: number;
|
|
9
|
+
mode: number[];
|
|
10
|
+
variance: number;
|
|
11
|
+
stddev: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Computes descriptive statistics for a comma-separated list of numbers.
|
|
15
|
+
*
|
|
16
|
+
* @param values - Comma-separated numeric string (e.g. "1,2,3,4,5")
|
|
17
|
+
* @returns Object containing count, sum, min, max, range, mean, median, mode, variance, and standard deviation
|
|
18
|
+
* @throws Error if values is missing, contains non-numeric entries, or exceeds the maximum count
|
|
19
|
+
*/
|
|
20
|
+
export default function statistics(values: string): StatisticsResult;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface TextStats {
|
|
2
|
+
characters: number;
|
|
3
|
+
charactersNoSpaces: number;
|
|
4
|
+
words: number;
|
|
5
|
+
sentences: number;
|
|
6
|
+
paragraphs: number;
|
|
7
|
+
readingTime: string;
|
|
8
|
+
mostFrequentChar: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Analyzes a text string and returns character, word, sentence, and reading time statistics.
|
|
12
|
+
*
|
|
13
|
+
* @param value - The text to analyze
|
|
14
|
+
* @returns Object containing character counts, word/sentence/paragraph counts, reading time, and most frequent character
|
|
15
|
+
* @throws Error if value is missing, not a string, or too long
|
|
16
|
+
*/
|
|
17
|
+
export declare function stats(value: string): TextStats;
|
|
18
|
+
/**
|
|
19
|
+
* Converts a string to a URL-friendly slug.
|
|
20
|
+
*
|
|
21
|
+
* @param value - The string to slugify
|
|
22
|
+
* @returns Lowercase hyphenated slug with diacritics and special characters removed
|
|
23
|
+
* @throws Error if value is missing, not a string, or too long
|
|
24
|
+
*/
|
|
25
|
+
export declare function slug(value: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Generates Lorem Ipsum placeholder text.
|
|
28
|
+
*
|
|
29
|
+
* @param type - Content type: "words", "sentences", or "paragraphs"
|
|
30
|
+
* @param count - Number of words, sentences, or paragraphs to generate
|
|
31
|
+
* @returns Generated Lorem Ipsum text
|
|
32
|
+
* @throws Error if count is out of range or type is not one of the accepted values
|
|
33
|
+
*/
|
|
34
|
+
export declare function lorem(type: string, count: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Converts an integer to its written-out word form in French or English.
|
|
37
|
+
*
|
|
38
|
+
* @param value - The integer to convert (must be less than 1 billion)
|
|
39
|
+
* @param lang - Language: "fr" for French or "en" for English
|
|
40
|
+
* @returns The number written out in words
|
|
41
|
+
* @throws Error if value is not an integer, exceeds the maximum, or lang is not supported
|
|
42
|
+
*/
|
|
43
|
+
export declare function number(value: string, lang: string): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TicTacToeStorage } from '../../types/storage.js';
|
|
2
|
+
interface TicTacToeParams {
|
|
3
|
+
username?: string;
|
|
4
|
+
move?: string;
|
|
5
|
+
session?: string;
|
|
6
|
+
game?: string;
|
|
7
|
+
private?: boolean;
|
|
8
|
+
storage: TicTacToeStorage;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Handles Tic-Tac-Toe game actions including playing a move, fetching game state, listing games, and forfeiting.
|
|
12
|
+
*
|
|
13
|
+
* @param action - The action to perform: "play", "fetch", "list", or "forfeit"
|
|
14
|
+
* @param params - Game parameters including username, move, session, game ID, and shared storage
|
|
15
|
+
* @returns Game state or action result depending on the action
|
|
16
|
+
* @throws Error if a required parameter is missing, the action is invalid, or a rate limit is exceeded
|
|
17
|
+
*/
|
|
18
|
+
export default function tic_tac_toe(action: string, params: TicTacToeParams): Record<string, unknown>;
|
|
19
|
+
export {};
|
|
@@ -98,19 +98,19 @@ function playMove(params, games, sessions, u, now) {
|
|
|
98
98
|
moves.push(play);
|
|
99
99
|
const result = checkGame(moves);
|
|
100
100
|
if (result.winner || result.tie) {
|
|
101
|
-
setTimeout(() => delete games[game], GAME_CLEANUP_TTL);
|
|
101
|
+
setTimeout(() => delete games[game], GAME_CLEANUP_TTL).unref();
|
|
102
102
|
return {
|
|
103
103
|
message: `Move sent successfully. ${result.winner ? result.winner + ' wins. ' + result.loser + ' loses.' : "It's a tie."}`,
|
|
104
104
|
...result,
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
|
-
setTimeout(() => delete games[game], SESSION_TTL);
|
|
107
|
+
setTimeout(() => delete games[game], SESSION_TTL).unref();
|
|
108
108
|
sessions[u] = sessions[u] ?? { user: session, last: now };
|
|
109
109
|
sessions[u].last = now;
|
|
110
110
|
setTimeout(() => {
|
|
111
111
|
if (sessions[u] && now - sessions[u].last >= SESSION_TTL)
|
|
112
112
|
delete sessions[u];
|
|
113
|
-
}, SESSION_TTL);
|
|
113
|
+
}, SESSION_TTL).unref();
|
|
114
114
|
return { message: 'Move sent successfully' };
|
|
115
115
|
}
|
|
116
116
|
function fetchGame(params, games, u) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v4/tic_tac_toe.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tic_tac_toe.js","sourceRoot":"","sources":["../../../src/modules/v4/tic_tac_toe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const VALID_TIMEZONES: readonly ["UTC", "America/New_York", "Europe/Paris", "Asia/Tokyo", "Australia/Sydney"];
|
|
2
|
+
/**
|
|
3
|
+
* Returns the current or a random date/time in various formats and timezones,
|
|
4
|
+
* or computes a countdown/elapsed time to/from a target date.
|
|
5
|
+
*
|
|
6
|
+
* @param type - "live" for the current time, "random" for a random date, or "countdown" for a time diff
|
|
7
|
+
* @param start - Optional start date for random mode (YYYY-MM-DD)
|
|
8
|
+
* @param end - Optional end date for random mode (YYYY-MM-DD)
|
|
9
|
+
* @param format - Optional specific format to return (e.g. "iso", "timestamp", "year")
|
|
10
|
+
* @param timezone - Optional timezone (e.g. "UTC", "Europe/Paris")
|
|
11
|
+
* @param target - Required for countdown mode: target date in ISO 8601 or YYYY-MM-DD format
|
|
12
|
+
* @returns Object containing all time formats, a single format, or a countdown result
|
|
13
|
+
* @throws Error if type, format, timezone, or target is invalid
|
|
14
|
+
*/
|
|
15
|
+
export default function time(type?: string, start?: string, end?: string, format?: string, timezone?: string, target?: string): Record<string, unknown>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a cryptographically random token of the specified length and type.
|
|
3
|
+
*
|
|
4
|
+
* @param len - Token length (must be between 12 and 4096)
|
|
5
|
+
* @param type - Character set to use: "alpha", "alphanum", "base64", "hex", "num", "punct", "urlsafe", or "uuid"
|
|
6
|
+
* @returns The generated token string
|
|
7
|
+
* @throws Error if length is out of range or the type is not valid
|
|
8
|
+
*/
|
|
9
|
+
export default function token(len: number, type?: string): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a random username combining adjectives, animals, and job titles.
|
|
3
|
+
*
|
|
4
|
+
* @returns Object containing the generated username, the number used, and the components (adjective, animal, job)
|
|
5
|
+
*/
|
|
6
|
+
export default function username(): Record<string, unknown>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates a credit/debit card number using the Luhn algorithm.
|
|
3
|
+
*
|
|
4
|
+
* @param value - Card number string (digits, spaces, or dashes allowed)
|
|
5
|
+
* @returns Object containing the validity result and the sanitized digit string
|
|
6
|
+
* @throws Error if value is missing, contains non-digit characters, or has an invalid length
|
|
7
|
+
*/
|
|
8
|
+
export declare function luhn(value: string): {
|
|
9
|
+
valid: boolean;
|
|
10
|
+
value: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Validates an IBAN using the mod-97 checksum algorithm.
|
|
14
|
+
*
|
|
15
|
+
* @param value - IBAN string (spaces allowed)
|
|
16
|
+
* @returns Object containing the validity result, sanitized IBAN, and country code
|
|
17
|
+
* @throws Error if value is missing, has an invalid format, or is out of length bounds
|
|
18
|
+
*/
|
|
19
|
+
export declare function iban(value: string): {
|
|
20
|
+
valid: boolean;
|
|
21
|
+
value: string;
|
|
22
|
+
country?: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Validates an email address against a basic format check.
|
|
26
|
+
*
|
|
27
|
+
* @param value - The email address string to validate
|
|
28
|
+
* @returns Object containing the validity result and the original value
|
|
29
|
+
* @throws Error if value is missing, not a string, or too long
|
|
30
|
+
*/
|
|
31
|
+
export declare function email(value: string): {
|
|
32
|
+
valid: boolean;
|
|
33
|
+
value: string;
|
|
34
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export { default as address } from './v4/address.js';
|
|
2
|
+
export { default as agent } from './v4/agent.js';
|
|
3
|
+
export * as algorithms from './v4/algorithms.js';
|
|
4
|
+
export { default as avatar } from './v4/avatar.js';
|
|
5
|
+
export { default as barcode } from './v4/barcode.js';
|
|
6
|
+
export { default as captcha } from './v4/captcha.js';
|
|
7
|
+
export { default as chat } from './v4/chat.js';
|
|
8
|
+
export { default as color } from './v4/color.js';
|
|
9
|
+
export { default as convert } from './v4/convert.js';
|
|
10
|
+
export { default as credit } from './v4/credit.js';
|
|
11
|
+
export { default as cron } from './v4/cron.js';
|
|
12
|
+
export { default as dice } from './v4/dice.js';
|
|
13
|
+
export { default as domain } from './v4/domain.js';
|
|
14
|
+
export * as encode from './v4/encode.js';
|
|
15
|
+
export { default as geo } from './v4/geo.js';
|
|
16
|
+
export { default as hash } from './v4/hash.js';
|
|
17
|
+
export { default as hyperplanning } from './v4/hyperplanning.js';
|
|
18
|
+
export { default as ip } from './v4/ip.js';
|
|
19
|
+
export { default as levenshtein } from './v4/levenshtein.js';
|
|
20
|
+
export { default as palette } from './v4/palette.js';
|
|
21
|
+
export { default as password } from './v4/password.js';
|
|
22
|
+
export { default as personal } from './v4/personal.js';
|
|
23
|
+
export { default as placeholder } from './v4/placeholder.js';
|
|
24
|
+
export { default as qrcode } from './v4/qrcode.js';
|
|
25
|
+
export { default as regex } from './v4/regex.js';
|
|
26
|
+
export { default as statistics } from './v4/statistics.js';
|
|
27
|
+
export * as text from './v4/text.js';
|
|
28
|
+
export { default as tic_tac_toe } from './v4/tic_tac_toe.js';
|
|
29
|
+
export { default as time } from './v4/time.js';
|
|
30
|
+
export { default as token } from './v4/token.js';
|
|
31
|
+
export { default as username } from './v4/username.js';
|
|
32
|
+
export * as validate from './v4/validate.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from '../v4/algorithms.js';
|
|
2
|
+
/**
|
|
3
|
+
* Computes the factorial of a non-negative integer.
|
|
4
|
+
*/
|
|
5
|
+
export declare function factorial(value: string | number): number;
|
|
6
|
+
/**
|
|
7
|
+
* Determines whether a given number is prime.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isprime(value: string | number): boolean;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface KeygenResult {
|
|
2
|
+
action: string;
|
|
3
|
+
algorithm: string;
|
|
4
|
+
modulusLength: number;
|
|
5
|
+
publicKey: string;
|
|
6
|
+
privateKey: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AsymmetricCryptResult {
|
|
9
|
+
action: string;
|
|
10
|
+
algorithm: string;
|
|
11
|
+
result: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* RSA asymmetric key generation, encryption and decryption.
|
|
15
|
+
*
|
|
16
|
+
* @param action - "keygen", "encrypt", or "decrypt"
|
|
17
|
+
* @param options - Options object with text, publicKey, privateKey, modulusLength, algorithm
|
|
18
|
+
* @returns Keygen or crypt result object
|
|
19
|
+
*/
|
|
20
|
+
export default function asymmetric(action: string, options?: {
|
|
21
|
+
text?: string;
|
|
22
|
+
publicKey?: string;
|
|
23
|
+
privateKey?: string;
|
|
24
|
+
modulusLength?: number;
|
|
25
|
+
algorithm?: string;
|
|
26
|
+
}): KeygenResult | AsymmetricCryptResult;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface BarcodeOptions {
|
|
2
|
+
data: string;
|
|
3
|
+
type?: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
format?: string;
|
|
7
|
+
color?: string;
|
|
8
|
+
bg?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BarcodeResult {
|
|
11
|
+
contentType: string;
|
|
12
|
+
body: Buffer | string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generates a barcode image in SVG or PNG format.
|
|
16
|
+
*
|
|
17
|
+
* @param options.data - Data to encode (required)
|
|
18
|
+
* @param options.type - Barcode type: code128, ean13, ean8, upca, code39 (default: code128)
|
|
19
|
+
* @param options.width - Bar unit width in px (1–5, default 2)
|
|
20
|
+
* @param options.height - Bar height in px (50–300, default 100)
|
|
21
|
+
* @param options.format - Output format: svg or png (default: svg)
|
|
22
|
+
* @param options.color - Bar color hex (default: #000000)
|
|
23
|
+
* @param options.bg - Background color hex (default: #ffffff)
|
|
24
|
+
* @returns Object with contentType and body
|
|
25
|
+
* @throws Error if data is missing, invalid for the type, or parameters are out of range
|
|
26
|
+
*/
|
|
27
|
+
export default function barcode(options: BarcodeOptions): BarcodeResult;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CaseResult {
|
|
2
|
+
text: string;
|
|
3
|
+
to: string;
|
|
4
|
+
result: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Converts text to the specified case format.
|
|
8
|
+
* Supports: camel, pascal, snake, kebab, constant, title, sentence, upper, lower.
|
|
9
|
+
*/
|
|
10
|
+
export default function caseConvert(text: string, to?: string): CaseResult;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type ChartOutput = {
|
|
2
|
+
contentType: 'image/svg+xml';
|
|
3
|
+
body: string;
|
|
4
|
+
} | {
|
|
5
|
+
contentType: 'application/json';
|
|
6
|
+
body: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
interface ChartOptions {
|
|
9
|
+
title?: unknown;
|
|
10
|
+
width?: unknown;
|
|
11
|
+
height?: unknown;
|
|
12
|
+
colors?: unknown;
|
|
13
|
+
bg?: unknown;
|
|
14
|
+
legend?: unknown;
|
|
15
|
+
mode?: unknown;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Renders a bar chart as SVG or returns its raw data.
|
|
19
|
+
*
|
|
20
|
+
* @param data - Chart data with labels and one or more datasets (each with a name and values array)
|
|
21
|
+
* @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
|
|
22
|
+
* @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
|
|
23
|
+
* @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
|
|
24
|
+
*/
|
|
25
|
+
export declare function bar(data: unknown, options: ChartOptions): ChartOutput;
|
|
26
|
+
/**
|
|
27
|
+
* Renders a line chart as SVG or returns its raw data.
|
|
28
|
+
*
|
|
29
|
+
* @param data - Chart data with labels and one or more datasets (each with a name and values array)
|
|
30
|
+
* @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
|
|
31
|
+
* @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
|
|
32
|
+
* @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
|
|
33
|
+
*/
|
|
34
|
+
export declare function line(data: unknown, options: ChartOptions): ChartOutput;
|
|
35
|
+
/**
|
|
36
|
+
* Renders a pie chart as SVG or returns its raw data.
|
|
37
|
+
*
|
|
38
|
+
* @param data - Chart data with labels and a single dataset (each with a name and values array)
|
|
39
|
+
* @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
|
|
40
|
+
* @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
|
|
41
|
+
* @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
|
|
42
|
+
*/
|
|
43
|
+
export declare function pie(data: unknown, options: ChartOptions): ChartOutput;
|
|
44
|
+
/**
|
|
45
|
+
* Renders a donut chart as SVG or returns its raw data.
|
|
46
|
+
*
|
|
47
|
+
* @param data - Chart data with labels and a single dataset (each with a name and values array)
|
|
48
|
+
* @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
|
|
49
|
+
* @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
|
|
50
|
+
* @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
|
|
51
|
+
*/
|
|
52
|
+
export declare function donut(data: unknown, options: ChartOptions): ChartOutput;
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ChatMessage, ChatStorage } from '../../types/storage.js';
|
|
2
|
+
interface ChatParams {
|
|
3
|
+
username: string;
|
|
4
|
+
message?: string;
|
|
5
|
+
timestamp?: string;
|
|
6
|
+
session?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
storage: ChatStorage;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Handles real-time chat actions including sending, fetching, and clearing messages.
|
|
12
|
+
*
|
|
13
|
+
* @param action - The action to perform: "message", "private", "fetch", or "clear"
|
|
14
|
+
* @param params - Chat parameters including username, message, session, and shared storage
|
|
15
|
+
* @returns The result of the action — a message list, a sent confirmation, or a status message
|
|
16
|
+
* @throws Error if a required parameter is missing or the action is invalid
|
|
17
|
+
*/
|
|
18
|
+
export default function chat(action: string, params: ChatParams): ChatMessage[] | ChatMessage | {
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
package/dist/modules/v5/chat.js
CHANGED
|
@@ -62,18 +62,18 @@ function sendMessage(params, messages, privateChats, sessions, u, now) {
|
|
|
62
62
|
thread.splice(idx, 1);
|
|
63
63
|
if (thread.length === 0)
|
|
64
64
|
delete privateChats[token];
|
|
65
|
-
}, SESSION_TTL);
|
|
65
|
+
}, SESSION_TTL).unref();
|
|
66
66
|
}
|
|
67
67
|
else {
|
|
68
68
|
messages.push(msg);
|
|
69
|
-
setTimeout(() => messages.splice(messages.indexOf(msg), 1), SESSION_TTL);
|
|
69
|
+
setTimeout(() => messages.splice(messages.indexOf(msg), 1), SESSION_TTL).unref();
|
|
70
70
|
}
|
|
71
71
|
sessions[u] = sessions[u] || { user: session, last: now };
|
|
72
72
|
sessions[u].last = now;
|
|
73
73
|
setTimeout(() => {
|
|
74
74
|
if (sessions[u] && Date.now() - sessions[u].last >= SESSION_TTL)
|
|
75
75
|
delete sessions[u];
|
|
76
|
-
}, SESSION_TTL);
|
|
76
|
+
}, SESSION_TTL).unref();
|
|
77
77
|
return { message: 'Message sent successfully' };
|
|
78
78
|
}
|
|
79
79
|
function getPrivateChat(params, privateChats) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/modules/v5/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/modules/v5/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface CsvParseResult {
|
|
2
|
+
action: 'parse';
|
|
3
|
+
rows: Record<string, string>[];
|
|
4
|
+
count: number;
|
|
5
|
+
}
|
|
6
|
+
export interface CsvFormatResult {
|
|
7
|
+
action: 'format';
|
|
8
|
+
csv: string;
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export type CsvResult = CsvParseResult | CsvFormatResult;
|
|
12
|
+
/**
|
|
13
|
+
* Converts between CSV and JSON.
|
|
14
|
+
* - `parse`: CSV string → array of objects
|
|
15
|
+
* - `format`: array of objects → CSV string
|
|
16
|
+
*
|
|
17
|
+
* @param action - "parse" or "format"
|
|
18
|
+
* @param data - Input payload: `csv` string for parse, `json` array of objects for format
|
|
19
|
+
* @param options - `delimiter` (single character, default ",") and `headers` (parse only: use the first row as keys, default true)
|
|
20
|
+
* @returns Parse result with the rows and their count, or format result with the CSV string and the row count
|
|
21
|
+
* @throws Error if the action is invalid, the delimiter is not a single character, the input data is missing, or a size limit is exceeded
|
|
22
|
+
*/
|
|
23
|
+
export default function csv(action: string, data: {
|
|
24
|
+
csv?: string;
|
|
25
|
+
json?: Record<string, unknown>[];
|
|
26
|
+
}, options?: {
|
|
27
|
+
delimiter?: string;
|
|
28
|
+
headers?: boolean;
|
|
29
|
+
}): CsvResult;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { MAX_CSV_LENGTH, MAX_CSV_ROWS } from '../../constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a full CSV text into rows of fields, respecting quoted fields
|
|
4
|
+
* (including escaped quotes and newlines inside quotes).
|
|
5
|
+
*
|
|
6
|
+
* @param text - Raw CSV text; CRLF and CR line endings are normalized to LF
|
|
7
|
+
* @param delimiter - Field separator, a single character
|
|
8
|
+
* @returns Array of rows, each row being an array of field values
|
|
9
|
+
*/
|
|
10
|
+
function parseRows(text, delimiter) {
|
|
11
|
+
const src = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
12
|
+
const rows = [];
|
|
13
|
+
let fields = [];
|
|
14
|
+
let value = '';
|
|
15
|
+
let inQuotes = false;
|
|
16
|
+
let fieldStarted = false;
|
|
17
|
+
const endField = () => {
|
|
18
|
+
fields.push(value);
|
|
19
|
+
value = '';
|
|
20
|
+
fieldStarted = false;
|
|
21
|
+
};
|
|
22
|
+
const endRow = () => {
|
|
23
|
+
if (fields.length > 0 || value !== '' || fieldStarted) {
|
|
24
|
+
endField();
|
|
25
|
+
rows.push(fields);
|
|
26
|
+
}
|
|
27
|
+
fields = [];
|
|
28
|
+
};
|
|
29
|
+
let i = 0;
|
|
30
|
+
while (i < src.length) {
|
|
31
|
+
const ch = src[i];
|
|
32
|
+
if (inQuotes) {
|
|
33
|
+
if (ch === '"') {
|
|
34
|
+
if (src[i + 1] === '"') {
|
|
35
|
+
value += '"';
|
|
36
|
+
i += 2;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
inQuotes = false;
|
|
40
|
+
i++;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
value += ch;
|
|
44
|
+
i++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (ch === '"' && value === '') {
|
|
48
|
+
inQuotes = true;
|
|
49
|
+
fieldStarted = true;
|
|
50
|
+
i++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (ch === delimiter) {
|
|
54
|
+
endField();
|
|
55
|
+
fieldStarted = true;
|
|
56
|
+
i++;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (ch === '\n') {
|
|
60
|
+
endRow();
|
|
61
|
+
i++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
value += ch;
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
endRow();
|
|
68
|
+
return rows;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Escapes a value for CSV output. Wraps in quotes if it contains the delimiter, quotes, or newlines.
|
|
72
|
+
*
|
|
73
|
+
* @param value - Field value to escape
|
|
74
|
+
* @param delimiter - Field separator used in the output
|
|
75
|
+
* @returns The value, quoted with inner quotes doubled when escaping is needed
|
|
76
|
+
*/
|
|
77
|
+
function escapeField(value, delimiter) {
|
|
78
|
+
if (value.includes(delimiter) || value.includes('"') || value.includes('\n')) {
|
|
79
|
+
return '"' + value.replace(/"/g, '""') + '"';
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Converts between CSV and JSON.
|
|
85
|
+
* - `parse`: CSV string → array of objects
|
|
86
|
+
* - `format`: array of objects → CSV string
|
|
87
|
+
*
|
|
88
|
+
* @param action - "parse" or "format"
|
|
89
|
+
* @param data - Input payload: `csv` string for parse, `json` array of objects for format
|
|
90
|
+
* @param options - `delimiter` (single character, default ",") and `headers` (parse only: use the first row as keys, default true)
|
|
91
|
+
* @returns Parse result with the rows and their count, or format result with the CSV string and the row count
|
|
92
|
+
* @throws Error if the action is invalid, the delimiter is not a single character, the input data is missing, or a size limit is exceeded
|
|
93
|
+
*/
|
|
94
|
+
export default function csv(action, data, options = {}) {
|
|
95
|
+
if (!action || (action !== 'parse' && action !== 'format'))
|
|
96
|
+
throw new Error('Please provide a valid action (?action=parse|format)');
|
|
97
|
+
const delimiter = options.delimiter ?? ',';
|
|
98
|
+
if (delimiter.length !== 1)
|
|
99
|
+
throw new Error('Delimiter must be a single character');
|
|
100
|
+
if (action === 'parse') {
|
|
101
|
+
const text = data.csv;
|
|
102
|
+
if (!text)
|
|
103
|
+
throw new Error('Please provide CSV data (?csv={data})');
|
|
104
|
+
if (text.length > MAX_CSV_LENGTH)
|
|
105
|
+
throw new Error(`CSV cannot exceed ${MAX_CSV_LENGTH} characters`);
|
|
106
|
+
const useHeaders = options.headers !== false;
|
|
107
|
+
const allRows = parseRows(text, delimiter);
|
|
108
|
+
if (allRows.length === 0)
|
|
109
|
+
return { action: 'parse', rows: [], count: 0 };
|
|
110
|
+
let headers;
|
|
111
|
+
let dataRows;
|
|
112
|
+
if (useHeaders) {
|
|
113
|
+
headers = allRows[0];
|
|
114
|
+
dataRows = allRows.slice(1);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
headers = allRows[0].map((_, i) => String(i));
|
|
118
|
+
dataRows = allRows;
|
|
119
|
+
}
|
|
120
|
+
if (dataRows.length > MAX_CSV_ROWS)
|
|
121
|
+
throw new Error(`CSV cannot exceed ${MAX_CSV_ROWS} rows`);
|
|
122
|
+
const rows = dataRows.map((fields) => {
|
|
123
|
+
const row = {};
|
|
124
|
+
for (let i = 0; i < headers.length; i++) {
|
|
125
|
+
row[headers[i]] = fields[i] ?? '';
|
|
126
|
+
}
|
|
127
|
+
return row;
|
|
128
|
+
});
|
|
129
|
+
return { action: 'parse', rows, count: rows.length };
|
|
130
|
+
}
|
|
131
|
+
// action === 'format'
|
|
132
|
+
const json = data.json;
|
|
133
|
+
if (!json || !Array.isArray(json) || json.length === 0)
|
|
134
|
+
throw new Error('Please provide a JSON array (?json=[...])');
|
|
135
|
+
if (json.length > MAX_CSV_ROWS)
|
|
136
|
+
throw new Error(`JSON cannot exceed ${MAX_CSV_ROWS} rows`);
|
|
137
|
+
const headers = Object.keys(json[0]);
|
|
138
|
+
const headerLine = headers.map((h) => escapeField(h, delimiter)).join(delimiter);
|
|
139
|
+
const dataLines = json.map((obj) => headers.map((h) => escapeField(String(obj[h] ?? ''), delimiter)).join(delimiter));
|
|
140
|
+
const csvOutput = headerLine + '\n' + dataLines.join('\n');
|
|
141
|
+
return { action: 'format', csv: csvOutput, count: json.length };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=csv.js.map
|