@alsania-io/utils 0.1.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/README.md +157 -0
- package/dist/index.d.ts +158 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +433 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# @alsania-io/utils
|
|
2
|
+
|
|
3
|
+
> Shared utilities for Alsania ecosystem
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 📝 **Response Parsing** — Extract text from various AI response formats (OpenAI, Anthropic, etc.)
|
|
8
|
+
- 🔐 **Hash Utilities** — BLAKE3, SHA3-256, SHA256, HMAC-SHA256
|
|
9
|
+
- 🆔 **UUID Generation** — Random UUIDs and short IDs
|
|
10
|
+
- ⏱️ **Async Utilities** — Sleep, retry with exponential backoff, timeout
|
|
11
|
+
- 📦 **Object Utilities** — Deep merge, deep clone, pick, omit
|
|
12
|
+
- 📝 **String Utilities** — Truncate, capitalize, camelCase, snake_case
|
|
13
|
+
- 🔍 **Type Guards** — isNotNull, isString, isObject, isArray
|
|
14
|
+
- 🌐 **Environment Utilities** — Type-safe env variable access
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @alsania-io/utils
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
### Response Parsing
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { extractText } from '@alsania-io/utils';
|
|
28
|
+
|
|
29
|
+
// OpenAI format
|
|
30
|
+
const openaiResponse = {
|
|
31
|
+
choices: [{ message: { content: 'Hello!' } }]
|
|
32
|
+
};
|
|
33
|
+
console.log(extractText(openaiResponse)); // 'Hello!'
|
|
34
|
+
|
|
35
|
+
// Anthropic format
|
|
36
|
+
const anthropicResponse = {
|
|
37
|
+
content: [{ text: 'Hello!' }]
|
|
38
|
+
};
|
|
39
|
+
console.log(extractText(anthropicResponse)); // 'Hello!'
|
|
40
|
+
|
|
41
|
+
// Direct text
|
|
42
|
+
console.log(extractText('Hello!')); // 'Hello!'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Hashing
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { blake3Hash, sha3Hash, sha256Hash } from '@alsania-io/utils';
|
|
49
|
+
|
|
50
|
+
const data = 'hello world';
|
|
51
|
+
console.log(sha3Hash(data)); // 0x...
|
|
52
|
+
console.log(sha256Hash(data)); // ...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Async Utilities
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { sleep, retry, timeout } from '@alsania-io/utils';
|
|
59
|
+
|
|
60
|
+
// Sleep
|
|
61
|
+
await sleep(1000); // Wait 1 second
|
|
62
|
+
|
|
63
|
+
// Retry with exponential backoff
|
|
64
|
+
const result = await retry(
|
|
65
|
+
async () => {
|
|
66
|
+
// Your async operation
|
|
67
|
+
return await fetchData();
|
|
68
|
+
},
|
|
69
|
+
{ maxAttempts: 5, initialDelay: 100 }
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Timeout
|
|
73
|
+
const result = await timeout(fetchData(), 5000);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Object Utilities
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { deepMerge, pick, omit } from '@alsania-io/utils';
|
|
80
|
+
|
|
81
|
+
const obj1 = { a: 1, b: { c: 2 } };
|
|
82
|
+
const obj2 = { b: { d: 3 }, e: 4 };
|
|
83
|
+
console.log(deepMerge(obj1, obj2)); // { a: 1, b: { c: 2, d: 3 }, e: 4 }
|
|
84
|
+
|
|
85
|
+
const picked = pick(obj1, ['a']); // { a: 1 }
|
|
86
|
+
const omitted = omit(obj1, ['a']); // { b: { c: 2 } }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### String Utilities
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { capitalize, toCamelCase, toSnakeCase, truncate } from '@alsania-io/utils';
|
|
93
|
+
|
|
94
|
+
console.log(capitalize('hello')); // 'Hello'
|
|
95
|
+
console.log(toCamelCase('hello-world')); // 'helloWorld'
|
|
96
|
+
console.log(toSnakeCase('helloWorld')); // 'hello_world'
|
|
97
|
+
console.log(truncate('hello world', 5)); // 'hello...'
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Environment Utilities
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { getEnv, getEnvNumber, getEnvBoolean } from '@alsania-io/utils';
|
|
104
|
+
|
|
105
|
+
const apiKey = getEnv('API_KEY', 'default-key');
|
|
106
|
+
const port = getEnvNumber('PORT', 3000);
|
|
107
|
+
const debug = getEnvBoolean('DEBUG', false);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## API Reference
|
|
111
|
+
|
|
112
|
+
### Response Parsing
|
|
113
|
+
- `extractText(data: any): string` — Extract text from various AI response formats
|
|
114
|
+
- `safeJsonParse<T>(json: string, fallback: T): T` — Safe JSON parsing
|
|
115
|
+
- `safeStringify(obj: any, indent?: number): string` — Safe JSON stringify with circular ref handling
|
|
116
|
+
|
|
117
|
+
### Hash Utilities
|
|
118
|
+
- `blake3Hash(data: string | Buffer): string` — BLAKE3 hash (SHA3-256 fallback)
|
|
119
|
+
- `sha3Hash(data: string | Buffer): string` — SHA3-256 hash
|
|
120
|
+
- `sha256Hash(data: string | Buffer): string` — SHA256 hash
|
|
121
|
+
- `hmacSha256(key: string | Buffer, data: string | Buffer): string` — HMAC-SHA256
|
|
122
|
+
|
|
123
|
+
### UUID
|
|
124
|
+
- `uuid(): string` — Generate UUID v4
|
|
125
|
+
- `shortId(length?: number): string` — Generate short ID
|
|
126
|
+
|
|
127
|
+
### Async
|
|
128
|
+
- `sleep(ms: number): Promise<void>` — Sleep
|
|
129
|
+
- `retry<T>(fn: () => Promise<T>, options?): Promise<T>` — Retry with exponential backoff
|
|
130
|
+
- `timeout<T>(promise: Promise<T>, ms: number): Promise<T>` — Timeout a promise
|
|
131
|
+
|
|
132
|
+
### Object
|
|
133
|
+
- `deepMerge<T>(target: T, source: Partial<T>): T` — Deep merge objects
|
|
134
|
+
- `deepClone<T>(obj: T): T` — Deep clone
|
|
135
|
+
- `pick<T, K>(obj: T, keys: K[]): Pick<T, K>` — Pick specific keys
|
|
136
|
+
- `omit<T, K>(obj: T, keys: K[]): Omit<T, K>` — Omit specific keys
|
|
137
|
+
|
|
138
|
+
### String
|
|
139
|
+
- `truncate(str: string, maxLength: number, suffix?: string): string` — Truncate string
|
|
140
|
+
- `capitalize(str: string): string` — Capitalize first letter
|
|
141
|
+
- `toCamelCase(str: string): string` — Convert to camelCase
|
|
142
|
+
- `toSnakeCase(str: string): string` — Convert to snake_case
|
|
143
|
+
|
|
144
|
+
### Type Guards
|
|
145
|
+
- `isNotNull<T>(value: T | null | undefined): value is T`
|
|
146
|
+
- `isString(value: unknown): value is string`
|
|
147
|
+
- `isObject(value: unknown): value is Record<string, any>`
|
|
148
|
+
- `isArray(value: unknown): value is any[]`
|
|
149
|
+
|
|
150
|
+
### Environment
|
|
151
|
+
- `getEnv(key: string, defaultValue?: string): string`
|
|
152
|
+
- `getEnvNumber(key: string, defaultValue?: number): number`
|
|
153
|
+
- `getEnvBoolean(key: string, defaultValue?: boolean): boolean`
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @alsania-io/utils
|
|
3
|
+
* Shared utilities for Alsania ecosystem
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Response parsing (text/choices/output formats)
|
|
7
|
+
* - Hash utilities (BLAKE3, SHA3-256)
|
|
8
|
+
* - Configuration helpers
|
|
9
|
+
* - Type definitions
|
|
10
|
+
* - Async utilities
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Extract text from various AI response formats
|
|
14
|
+
* Handles: {text}, {choices[].message.content}, {output}, and raw strings
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractText(data: any): string;
|
|
17
|
+
/**
|
|
18
|
+
* Safe JSON parsing with fallback
|
|
19
|
+
*/
|
|
20
|
+
export declare function safeJsonParse<T>(json: string, fallback: T): T;
|
|
21
|
+
/**
|
|
22
|
+
* Safe JSON stringify with circular reference handling
|
|
23
|
+
*/
|
|
24
|
+
export declare function safeStringify(obj: any, indent?: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* Compute BLAKE3 hash (using Node.js crypto with SHA3-256 as fallback)
|
|
27
|
+
* Note: Native BLAKE3 requires @noble/hashes or similar
|
|
28
|
+
*/
|
|
29
|
+
export declare function blake3Hash(data: string | Buffer): string;
|
|
30
|
+
/**
|
|
31
|
+
* Compute SHA3-256 hash
|
|
32
|
+
*/
|
|
33
|
+
export declare function sha3Hash(data: string | Buffer): string;
|
|
34
|
+
/**
|
|
35
|
+
* Compute SHA256 hash
|
|
36
|
+
*/
|
|
37
|
+
export declare function sha256Hash(data: string | Buffer): string;
|
|
38
|
+
/**
|
|
39
|
+
* HMAC-SHA256
|
|
40
|
+
*/
|
|
41
|
+
export declare function hmacSha256(key: string | Buffer, data: string | Buffer): string;
|
|
42
|
+
/**
|
|
43
|
+
* Generate a random UUID v4
|
|
44
|
+
*/
|
|
45
|
+
export declare function uuid(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Generate a short ID (8 characters)
|
|
48
|
+
*/
|
|
49
|
+
export declare function shortId(length?: number): string;
|
|
50
|
+
/**
|
|
51
|
+
* Sleep for a given number of milliseconds
|
|
52
|
+
*/
|
|
53
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Retry an async function with exponential backoff
|
|
56
|
+
*/
|
|
57
|
+
export declare function retry<T>(fn: () => Promise<T>, options?: {
|
|
58
|
+
maxAttempts?: number;
|
|
59
|
+
initialDelay?: number;
|
|
60
|
+
maxDelay?: number;
|
|
61
|
+
backoff?: number;
|
|
62
|
+
onRetry?: (attempt: number, error: Error) => void;
|
|
63
|
+
}): Promise<T>;
|
|
64
|
+
/**
|
|
65
|
+
* Timeout a promise
|
|
66
|
+
*/
|
|
67
|
+
export declare function timeout<T>(promise: Promise<T>, ms: number): Promise<T>;
|
|
68
|
+
/**
|
|
69
|
+
* Deep merge objects
|
|
70
|
+
*/
|
|
71
|
+
export declare function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T;
|
|
72
|
+
/**
|
|
73
|
+
* Deep clone an object
|
|
74
|
+
*/
|
|
75
|
+
export declare function deepClone<T>(obj: T): T;
|
|
76
|
+
/**
|
|
77
|
+
* Pick specific keys from an object
|
|
78
|
+
*/
|
|
79
|
+
export declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
80
|
+
/**
|
|
81
|
+
* Omit specific keys from an object
|
|
82
|
+
*/
|
|
83
|
+
export declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
|
|
84
|
+
/**
|
|
85
|
+
* Truncate a string to a maximum length with ellipsis
|
|
86
|
+
*/
|
|
87
|
+
export declare function truncate(str: string, maxLength: number, suffix?: string): string;
|
|
88
|
+
/**
|
|
89
|
+
* Capitalize the first letter of a string
|
|
90
|
+
*/
|
|
91
|
+
export declare function capitalize(str: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* Convert a string to camelCase
|
|
94
|
+
*/
|
|
95
|
+
export declare function toCamelCase(str: string): string;
|
|
96
|
+
/**
|
|
97
|
+
* Convert a string to snake_case
|
|
98
|
+
*/
|
|
99
|
+
export declare function toSnakeCase(str: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* Type guard for non-null values
|
|
102
|
+
*/
|
|
103
|
+
export declare function isNotNull<T>(value: T | null | undefined): value is T;
|
|
104
|
+
/**
|
|
105
|
+
* Type guard for strings
|
|
106
|
+
*/
|
|
107
|
+
export declare function isString(value: unknown): value is string;
|
|
108
|
+
/**
|
|
109
|
+
* Type guard for objects
|
|
110
|
+
*/
|
|
111
|
+
export declare function isObject(value: unknown): value is Record<string, any>;
|
|
112
|
+
/**
|
|
113
|
+
* Type guard for arrays
|
|
114
|
+
*/
|
|
115
|
+
export declare function isArray(value: unknown): value is any[];
|
|
116
|
+
/**
|
|
117
|
+
* Get an environment variable with a default value
|
|
118
|
+
*/
|
|
119
|
+
export declare function getEnv(key: string, defaultValue?: string): string;
|
|
120
|
+
/**
|
|
121
|
+
* Get an environment variable as a number
|
|
122
|
+
*/
|
|
123
|
+
export declare function getEnvNumber(key: string, defaultValue?: number): number;
|
|
124
|
+
/**
|
|
125
|
+
* Get an environment variable as a boolean
|
|
126
|
+
*/
|
|
127
|
+
export declare function getEnvBoolean(key: string, defaultValue?: boolean): boolean;
|
|
128
|
+
declare const _default: {
|
|
129
|
+
extractText: typeof extractText;
|
|
130
|
+
safeJsonParse: typeof safeJsonParse;
|
|
131
|
+
safeStringify: typeof safeStringify;
|
|
132
|
+
blake3Hash: typeof blake3Hash;
|
|
133
|
+
sha3Hash: typeof sha3Hash;
|
|
134
|
+
sha256Hash: typeof sha256Hash;
|
|
135
|
+
hmacSha256: typeof hmacSha256;
|
|
136
|
+
uuid: typeof uuid;
|
|
137
|
+
shortId: typeof shortId;
|
|
138
|
+
sleep: typeof sleep;
|
|
139
|
+
retry: typeof retry;
|
|
140
|
+
timeout: typeof timeout;
|
|
141
|
+
deepMerge: typeof deepMerge;
|
|
142
|
+
deepClone: typeof deepClone;
|
|
143
|
+
pick: typeof pick;
|
|
144
|
+
omit: typeof omit;
|
|
145
|
+
truncate: typeof truncate;
|
|
146
|
+
capitalize: typeof capitalize;
|
|
147
|
+
toCamelCase: typeof toCamelCase;
|
|
148
|
+
toSnakeCase: typeof toSnakeCase;
|
|
149
|
+
isNotNull: typeof isNotNull;
|
|
150
|
+
isString: typeof isString;
|
|
151
|
+
isObject: typeof isObject;
|
|
152
|
+
isArray: typeof isArray;
|
|
153
|
+
getEnv: typeof getEnv;
|
|
154
|
+
getEnvNumber: typeof getEnvNumber;
|
|
155
|
+
getEnvBoolean: typeof getEnvBoolean;
|
|
156
|
+
};
|
|
157
|
+
export default _default;
|
|
158
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CA8B7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAM7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAe/D;AAQD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CASxD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAQtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAQxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAQ9E;AAMD;;GAEG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAM7B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,GAAE,MAAU,GAAG,MAAM,CAOlD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC9C,GACL,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAgBtE;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAWzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAQtC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACnE,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EAAE,GACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAQZ;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACnE,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EAAE,GACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAMZ;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAc,GAAG,MAAM,CAGvF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAErE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,EAAE,CAEtD;AAMD;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAG1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMD,wBAoCE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @alsania-io/utils
|
|
4
|
+
* Shared utilities for Alsania ecosystem
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Response parsing (text/choices/output formats)
|
|
8
|
+
* - Hash utilities (BLAKE3, SHA3-256)
|
|
9
|
+
* - Configuration helpers
|
|
10
|
+
* - Type definitions
|
|
11
|
+
* - Async utilities
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.extractText = extractText;
|
|
15
|
+
exports.safeJsonParse = safeJsonParse;
|
|
16
|
+
exports.safeStringify = safeStringify;
|
|
17
|
+
exports.blake3Hash = blake3Hash;
|
|
18
|
+
exports.sha3Hash = sha3Hash;
|
|
19
|
+
exports.sha256Hash = sha256Hash;
|
|
20
|
+
exports.hmacSha256 = hmacSha256;
|
|
21
|
+
exports.uuid = uuid;
|
|
22
|
+
exports.shortId = shortId;
|
|
23
|
+
exports.sleep = sleep;
|
|
24
|
+
exports.retry = retry;
|
|
25
|
+
exports.timeout = timeout;
|
|
26
|
+
exports.deepMerge = deepMerge;
|
|
27
|
+
exports.deepClone = deepClone;
|
|
28
|
+
exports.pick = pick;
|
|
29
|
+
exports.omit = omit;
|
|
30
|
+
exports.truncate = truncate;
|
|
31
|
+
exports.capitalize = capitalize;
|
|
32
|
+
exports.toCamelCase = toCamelCase;
|
|
33
|
+
exports.toSnakeCase = toSnakeCase;
|
|
34
|
+
exports.isNotNull = isNotNull;
|
|
35
|
+
exports.isString = isString;
|
|
36
|
+
exports.isObject = isObject;
|
|
37
|
+
exports.isArray = isArray;
|
|
38
|
+
exports.getEnv = getEnv;
|
|
39
|
+
exports.getEnvNumber = getEnvNumber;
|
|
40
|
+
exports.getEnvBoolean = getEnvBoolean;
|
|
41
|
+
// ============================================
|
|
42
|
+
// Response Parsing
|
|
43
|
+
// ============================================
|
|
44
|
+
/**
|
|
45
|
+
* Extract text from various AI response formats
|
|
46
|
+
* Handles: {text}, {choices[].message.content}, {output}, and raw strings
|
|
47
|
+
*/
|
|
48
|
+
function extractText(data) {
|
|
49
|
+
try {
|
|
50
|
+
if (typeof data === 'string')
|
|
51
|
+
return data;
|
|
52
|
+
if (typeof data !== 'object' || data === null)
|
|
53
|
+
return String(data);
|
|
54
|
+
// Direct text field
|
|
55
|
+
if (typeof data.text === 'string')
|
|
56
|
+
return data.text;
|
|
57
|
+
// OpenAI/Anthropic style: choices[].message.content
|
|
58
|
+
if (Array.isArray(data.choices) && data.choices.length > 0) {
|
|
59
|
+
const choice = data.choices[0];
|
|
60
|
+
if (choice && typeof choice === 'object') {
|
|
61
|
+
const message = choice.message;
|
|
62
|
+
if (message && typeof message === 'object') {
|
|
63
|
+
if (typeof message.content === 'string')
|
|
64
|
+
return message.content;
|
|
65
|
+
if (typeof message.text === 'string')
|
|
66
|
+
return message.text;
|
|
67
|
+
}
|
|
68
|
+
if (typeof choice.text === 'string')
|
|
69
|
+
return choice.text;
|
|
70
|
+
if (typeof choice.content === 'string')
|
|
71
|
+
return choice.content;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Output field
|
|
75
|
+
if (typeof data.output === 'string')
|
|
76
|
+
return data.output;
|
|
77
|
+
// Fallback: JSON stringify
|
|
78
|
+
return JSON.stringify(data, null, 2);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
return String(data);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Safe JSON parsing with fallback
|
|
86
|
+
*/
|
|
87
|
+
function safeJsonParse(json, fallback) {
|
|
88
|
+
try {
|
|
89
|
+
return JSON.parse(json);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return fallback;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Safe JSON stringify with circular reference handling
|
|
97
|
+
*/
|
|
98
|
+
function safeStringify(obj, indent) {
|
|
99
|
+
try {
|
|
100
|
+
return JSON.stringify(obj, null, indent);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Handle circular references
|
|
104
|
+
const seen = new WeakSet();
|
|
105
|
+
const replacer = (key, value) => {
|
|
106
|
+
if (typeof value === 'object' && value !== null) {
|
|
107
|
+
if (seen.has(value))
|
|
108
|
+
return '[Circular]';
|
|
109
|
+
seen.add(value);
|
|
110
|
+
}
|
|
111
|
+
return value;
|
|
112
|
+
};
|
|
113
|
+
return JSON.stringify(obj, replacer, indent);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ============================================
|
|
117
|
+
// Hash Utilities
|
|
118
|
+
// ============================================
|
|
119
|
+
const crypto_1 = require("crypto");
|
|
120
|
+
/**
|
|
121
|
+
* Compute BLAKE3 hash (using Node.js crypto with SHA3-256 as fallback)
|
|
122
|
+
* Note: Native BLAKE3 requires @noble/hashes or similar
|
|
123
|
+
*/
|
|
124
|
+
function blake3Hash(data) {
|
|
125
|
+
// Use SHA3-256 as a close alternative to BLAKE3
|
|
126
|
+
const hash = (0, crypto_1.createHash)('sha3-256');
|
|
127
|
+
if (typeof data === 'string') {
|
|
128
|
+
hash.update(data, 'utf-8');
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
hash.update(data);
|
|
132
|
+
}
|
|
133
|
+
return '0x' + hash.digest('hex');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Compute SHA3-256 hash
|
|
137
|
+
*/
|
|
138
|
+
function sha3Hash(data) {
|
|
139
|
+
const hash = (0, crypto_1.createHash)('sha3-256');
|
|
140
|
+
if (typeof data === 'string') {
|
|
141
|
+
hash.update(data, 'utf-8');
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
hash.update(data);
|
|
145
|
+
}
|
|
146
|
+
return '0x' + hash.digest('hex');
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Compute SHA256 hash
|
|
150
|
+
*/
|
|
151
|
+
function sha256Hash(data) {
|
|
152
|
+
const hash = (0, crypto_1.createHash)('sha256');
|
|
153
|
+
if (typeof data === 'string') {
|
|
154
|
+
hash.update(data, 'utf-8');
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
hash.update(data);
|
|
158
|
+
}
|
|
159
|
+
return hash.digest('hex');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* HMAC-SHA256
|
|
163
|
+
*/
|
|
164
|
+
function hmacSha256(key, data) {
|
|
165
|
+
const hmac = (0, crypto_1.createHmac)('sha256', key);
|
|
166
|
+
if (typeof data === 'string') {
|
|
167
|
+
hmac.update(data, 'utf-8');
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
hmac.update(data);
|
|
171
|
+
}
|
|
172
|
+
return hmac.digest('hex');
|
|
173
|
+
}
|
|
174
|
+
// ============================================
|
|
175
|
+
// UUID Utilities
|
|
176
|
+
// ============================================
|
|
177
|
+
/**
|
|
178
|
+
* Generate a random UUID v4
|
|
179
|
+
*/
|
|
180
|
+
function uuid() {
|
|
181
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
182
|
+
const r = Math.random() * 16 | 0;
|
|
183
|
+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
184
|
+
return v.toString(16);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate a short ID (8 characters)
|
|
189
|
+
*/
|
|
190
|
+
function shortId(length = 8) {
|
|
191
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
192
|
+
let result = '';
|
|
193
|
+
for (let i = 0; i < length; i++) {
|
|
194
|
+
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
// ============================================
|
|
199
|
+
// Async Utilities
|
|
200
|
+
// ============================================
|
|
201
|
+
/**
|
|
202
|
+
* Sleep for a given number of milliseconds
|
|
203
|
+
*/
|
|
204
|
+
function sleep(ms) {
|
|
205
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Retry an async function with exponential backoff
|
|
209
|
+
*/
|
|
210
|
+
async function retry(fn, options = {}) {
|
|
211
|
+
const { maxAttempts = 5, initialDelay = 100, maxDelay = 10000, backoff = 2, onRetry = () => { }, } = options;
|
|
212
|
+
let lastError;
|
|
213
|
+
let delay = initialDelay;
|
|
214
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
215
|
+
try {
|
|
216
|
+
return await fn();
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
lastError = error;
|
|
220
|
+
if (attempt < maxAttempts - 1) {
|
|
221
|
+
onRetry(attempt + 1, lastError);
|
|
222
|
+
await sleep(delay);
|
|
223
|
+
delay = Math.min(delay * backoff, maxDelay);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
throw lastError;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Timeout a promise
|
|
231
|
+
*/
|
|
232
|
+
function timeout(promise, ms) {
|
|
233
|
+
return new Promise((resolve, reject) => {
|
|
234
|
+
const timer = setTimeout(() => {
|
|
235
|
+
reject(new Error(`Timeout after ${ms}ms`));
|
|
236
|
+
}, ms);
|
|
237
|
+
promise.then((value) => {
|
|
238
|
+
clearTimeout(timer);
|
|
239
|
+
resolve(value);
|
|
240
|
+
}, (error) => {
|
|
241
|
+
clearTimeout(timer);
|
|
242
|
+
reject(error);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// ============================================
|
|
247
|
+
// Object Utilities
|
|
248
|
+
// ============================================
|
|
249
|
+
/**
|
|
250
|
+
* Deep merge objects
|
|
251
|
+
*/
|
|
252
|
+
function deepMerge(target, source) {
|
|
253
|
+
const result = { ...target };
|
|
254
|
+
for (const key in source) {
|
|
255
|
+
const val = source[key];
|
|
256
|
+
if (val && typeof val === 'object' && !Array.isArray(val) && result[key]) {
|
|
257
|
+
result[key] = deepMerge(result[key], val);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
result[key] = val;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Deep clone an object
|
|
267
|
+
*/
|
|
268
|
+
function deepClone(obj) {
|
|
269
|
+
if (obj === null || typeof obj !== 'object')
|
|
270
|
+
return obj;
|
|
271
|
+
if (Array.isArray(obj))
|
|
272
|
+
return obj.map(deepClone);
|
|
273
|
+
const result = {};
|
|
274
|
+
for (const key in obj) {
|
|
275
|
+
result[key] = deepClone(obj[key]);
|
|
276
|
+
}
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Pick specific keys from an object
|
|
281
|
+
*/
|
|
282
|
+
function pick(obj, keys) {
|
|
283
|
+
const result = {};
|
|
284
|
+
for (const key of keys) {
|
|
285
|
+
if (key in obj) {
|
|
286
|
+
result[key] = obj[key];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return result;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Omit specific keys from an object
|
|
293
|
+
*/
|
|
294
|
+
function omit(obj, keys) {
|
|
295
|
+
const result = { ...obj };
|
|
296
|
+
for (const key of keys) {
|
|
297
|
+
delete result[key];
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
// ============================================
|
|
302
|
+
// String Utilities
|
|
303
|
+
// ============================================
|
|
304
|
+
/**
|
|
305
|
+
* Truncate a string to a maximum length with ellipsis
|
|
306
|
+
*/
|
|
307
|
+
function truncate(str, maxLength, suffix = '...') {
|
|
308
|
+
if (str.length <= maxLength)
|
|
309
|
+
return str;
|
|
310
|
+
return str.slice(0, maxLength - suffix.length) + suffix;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Capitalize the first letter of a string
|
|
314
|
+
*/
|
|
315
|
+
function capitalize(str) {
|
|
316
|
+
if (!str)
|
|
317
|
+
return str;
|
|
318
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Convert a string to camelCase
|
|
322
|
+
*/
|
|
323
|
+
function toCamelCase(str) {
|
|
324
|
+
return str.replace(/[-_]([a-z])/g, (_, char) => char.toUpperCase());
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Convert a string to snake_case
|
|
328
|
+
*/
|
|
329
|
+
function toSnakeCase(str) {
|
|
330
|
+
return str.replace(/[A-Z]/g, (char) => '_' + char.toLowerCase()).replace(/^_/, '');
|
|
331
|
+
}
|
|
332
|
+
// ============================================
|
|
333
|
+
// Type Utilities
|
|
334
|
+
// ============================================
|
|
335
|
+
/**
|
|
336
|
+
* Type guard for non-null values
|
|
337
|
+
*/
|
|
338
|
+
function isNotNull(value) {
|
|
339
|
+
return value !== null && value !== undefined;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Type guard for strings
|
|
343
|
+
*/
|
|
344
|
+
function isString(value) {
|
|
345
|
+
return typeof value === 'string';
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Type guard for objects
|
|
349
|
+
*/
|
|
350
|
+
function isObject(value) {
|
|
351
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Type guard for arrays
|
|
355
|
+
*/
|
|
356
|
+
function isArray(value) {
|
|
357
|
+
return Array.isArray(value);
|
|
358
|
+
}
|
|
359
|
+
// ============================================
|
|
360
|
+
// Environment Utilities
|
|
361
|
+
// ============================================
|
|
362
|
+
/**
|
|
363
|
+
* Get an environment variable with a default value
|
|
364
|
+
*/
|
|
365
|
+
function getEnv(key, defaultValue) {
|
|
366
|
+
const value = process.env[key];
|
|
367
|
+
if (value === undefined) {
|
|
368
|
+
if (defaultValue === undefined) {
|
|
369
|
+
throw new Error(`Environment variable ${key} is not set`);
|
|
370
|
+
}
|
|
371
|
+
return defaultValue;
|
|
372
|
+
}
|
|
373
|
+
return value;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Get an environment variable as a number
|
|
377
|
+
*/
|
|
378
|
+
function getEnvNumber(key, defaultValue) {
|
|
379
|
+
const value = getEnv(key, defaultValue?.toString());
|
|
380
|
+
const num = Number(value);
|
|
381
|
+
if (isNaN(num)) {
|
|
382
|
+
throw new Error(`Environment variable ${key} is not a number: ${value}`);
|
|
383
|
+
}
|
|
384
|
+
return num;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Get an environment variable as a boolean
|
|
388
|
+
*/
|
|
389
|
+
function getEnvBoolean(key, defaultValue) {
|
|
390
|
+
const value = getEnv(key, defaultValue?.toString());
|
|
391
|
+
return value.toLowerCase() === 'true' || value === '1';
|
|
392
|
+
}
|
|
393
|
+
// ============================================
|
|
394
|
+
// Export all
|
|
395
|
+
// ============================================
|
|
396
|
+
exports.default = {
|
|
397
|
+
// Response parsing
|
|
398
|
+
extractText,
|
|
399
|
+
safeJsonParse,
|
|
400
|
+
safeStringify,
|
|
401
|
+
// Hash
|
|
402
|
+
blake3Hash,
|
|
403
|
+
sha3Hash,
|
|
404
|
+
sha256Hash,
|
|
405
|
+
hmacSha256,
|
|
406
|
+
// UUID
|
|
407
|
+
uuid,
|
|
408
|
+
shortId,
|
|
409
|
+
// Async
|
|
410
|
+
sleep,
|
|
411
|
+
retry,
|
|
412
|
+
timeout,
|
|
413
|
+
// Object
|
|
414
|
+
deepMerge,
|
|
415
|
+
deepClone,
|
|
416
|
+
pick,
|
|
417
|
+
omit,
|
|
418
|
+
// String
|
|
419
|
+
truncate,
|
|
420
|
+
capitalize,
|
|
421
|
+
toCamelCase,
|
|
422
|
+
toSnakeCase,
|
|
423
|
+
// Type
|
|
424
|
+
isNotNull,
|
|
425
|
+
isString,
|
|
426
|
+
isObject,
|
|
427
|
+
isArray,
|
|
428
|
+
// Env
|
|
429
|
+
getEnv,
|
|
430
|
+
getEnvNumber,
|
|
431
|
+
getEnvBoolean,
|
|
432
|
+
};
|
|
433
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alsania-io/utils",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Shared utilities for Alsania ecosystem",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"clean": "rm -rf dist",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"utils",
|
|
21
|
+
"alsania",
|
|
22
|
+
"shared",
|
|
23
|
+
"utilities",
|
|
24
|
+
"hash",
|
|
25
|
+
"parse"
|
|
26
|
+
],
|
|
27
|
+
"author": "Alsania I/O <admin@alsania-io.com>",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/alsania-dev/alsania-io-utils.git"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^20.0.0",
|
|
42
|
+
"typescript": "^5.0.0"
|
|
43
|
+
}
|
|
44
|
+
}
|