@devorash/core 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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/dist/constants/api-url.gen.d.ts +4 -0
  4. package/dist/constants/api-url.gen.d.ts.map +1 -0
  5. package/dist/constants/api-url.gen.example.d.ts +7 -0
  6. package/dist/constants/api-url.gen.example.d.ts.map +1 -0
  7. package/dist/constants/api-url.gen.example.js +7 -0
  8. package/dist/constants/api-url.gen.example.js.map +1 -0
  9. package/dist/constants/api-url.gen.js +4 -0
  10. package/dist/constants/api-url.gen.js.map +1 -0
  11. package/dist/constants/index.d.ts +203 -0
  12. package/dist/constants/index.d.ts.map +1 -0
  13. package/dist/constants/index.js +236 -0
  14. package/dist/constants/index.js.map +1 -0
  15. package/dist/constants/sessionLifecycle.d.ts +22 -0
  16. package/dist/constants/sessionLifecycle.d.ts.map +1 -0
  17. package/dist/constants/sessionLifecycle.js +21 -0
  18. package/dist/constants/sessionLifecycle.js.map +1 -0
  19. package/dist/index.d.ts +15 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +72 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/security/index.d.ts +118 -0
  24. package/dist/security/index.d.ts.map +1 -0
  25. package/dist/security/index.js +345 -0
  26. package/dist/security/index.js.map +1 -0
  27. package/dist/security/request-body.d.ts +16 -0
  28. package/dist/security/request-body.d.ts.map +1 -0
  29. package/dist/security/request-body.js +84 -0
  30. package/dist/security/request-body.js.map +1 -0
  31. package/dist/security/signing.d.ts +127 -0
  32. package/dist/security/signing.d.ts.map +1 -0
  33. package/dist/security/signing.js +297 -0
  34. package/dist/security/signing.js.map +1 -0
  35. package/dist/types/index.d.ts +487 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +19 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/dist/utils/index.d.ts +211 -0
  40. package/dist/utils/index.d.ts.map +1 -0
  41. package/dist/utils/index.js +600 -0
  42. package/dist/utils/index.js.map +1 -0
  43. package/package.json +53 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Utility functions for Devora SDKs
3
+ * @module @devorash/core/utils
4
+ */
5
+ import type { DevoraResponse, ImpersonationScope, LogEvent, SDKInfo } from "../types/index.js";
6
+ /**
7
+ * Create a successful SDK response
8
+ */
9
+ export declare function createSuccessResponse<T>(data: T): DevoraResponse<T>;
10
+ /**
11
+ * Create an error SDK response
12
+ */
13
+ export declare function createErrorResponse(error: string, errorCode?: string): DevoraResponse<never>;
14
+ /**
15
+ * Extract URL parameters.
16
+ */
17
+ export declare function extractUrlParams(url: string): Record<string, string | undefined>;
18
+ /**
19
+ * Clean impersonation parameters from URL
20
+ * Handles both absolute and relative URLs
21
+ */
22
+ export declare function cleanImpersonationParams(url: string): string;
23
+ /**
24
+ * Match a path pattern against an actual path
25
+ * Supports :param patterns (e.g., /impersonate/:id)
26
+ */
27
+ export declare function matchPath(pattern: string, path: string): {
28
+ match: boolean;
29
+ params: Record<string, string>;
30
+ };
31
+ /**
32
+ * Extract path parameters from a matched route
33
+ */
34
+ export declare function extractPathParams(pattern: string, path: string): Record<string, string>;
35
+ /**
36
+ * Check if a scope allows write operations
37
+ */
38
+ export declare function scopeAllowsWrite(scope: ImpersonationScope): boolean;
39
+ /**
40
+ * Get human-readable scope description
41
+ */
42
+ export declare function getScopeDescription(scope: ImpersonationScope): string;
43
+ /**
44
+ * Create a log event
45
+ */
46
+ export declare function createLogEvent(type: LogEvent["type"], sessionId: string, options?: Partial<Omit<LogEvent, "type" | "sessionId" | "timestamp">>): LogEvent;
47
+ /**
48
+ * Create SDK info object
49
+ */
50
+ export declare function createSDKInfo(name: string, type: SDKInfo["type"], runtime?: SDKInfo["runtime"]): SDKInfo;
51
+ /**
52
+ * Log levels in order of severity (lower = more verbose)
53
+ */
54
+ export declare enum LogLevel {
55
+ DEBUG = 0,
56
+ INFO = 1,
57
+ WARN = 2,
58
+ ERROR = 3,
59
+ SILENT = 4
60
+ }
61
+ /**
62
+ * Logger configuration options
63
+ */
64
+ export interface LoggerConfig {
65
+ /** Minimum log level to output (default: WARN in production, DEBUG in development) */
66
+ level?: LogLevel;
67
+ /** Custom prefix for log messages (default: "Devora") */
68
+ prefix?: string;
69
+ /** Enable/disable logging entirely (overrides level) */
70
+ enabled?: boolean;
71
+ /** Include timestamp in log messages */
72
+ includeTimestamp?: boolean;
73
+ /** Custom log handler (for testing or custom logging backends) */
74
+ handler?: LogHandler;
75
+ }
76
+ /**
77
+ * Custom log handler interface
78
+ */
79
+ export interface LogHandler {
80
+ debug: (...args: unknown[]) => void;
81
+ info: (...args: unknown[]) => void;
82
+ warn: (...args: unknown[]) => void;
83
+ error: (...args: unknown[]) => void;
84
+ }
85
+ /**
86
+ * Logger instance interface
87
+ */
88
+ export interface Logger {
89
+ debug: (...args: unknown[]) => void;
90
+ log: (...args: unknown[]) => void;
91
+ info: (...args: unknown[]) => void;
92
+ warn: (...args: unknown[]) => void;
93
+ error: (...args: unknown[]) => void;
94
+ setLevel: (level: LogLevel) => void;
95
+ setEnabled: (enabled: boolean) => void;
96
+ isEnabled: () => boolean;
97
+ getLevel: () => LogLevel;
98
+ }
99
+ /**
100
+ * Configure the global logger settings.
101
+ * Call this once at your application's entry point.
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * import { configureLogger, LogLevel } from "@devorash/core"
106
+ *
107
+ * // Enable verbose logging in development
108
+ * configureLogger({
109
+ * level: LogLevel.DEBUG,
110
+ * enabled: true,
111
+ * includeTimestamp: true,
112
+ * })
113
+ *
114
+ * // Disable all logging in production
115
+ * configureLogger({
116
+ * enabled: false,
117
+ * })
118
+ * ```
119
+ */
120
+ export declare function configureLogger(config: Partial<LoggerConfig>): void;
121
+ /**
122
+ * Get the current global logger configuration
123
+ */
124
+ export declare function getLoggerConfig(): LoggerConfig;
125
+ /**
126
+ * Reset logger configuration to defaults
127
+ */
128
+ export declare function resetLoggerConfig(): void;
129
+ /**
130
+ * Create a logger instance with the given options.
131
+ *
132
+ * @param prefix - Prefix for log messages (e.g., "Devora SDK", "Devora React")
133
+ * @param enabled - Override to enable/disable this specific logger
134
+ * @returns Logger instance
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * const logger = createLogger("MyComponent")
139
+ * logger.debug("Initializing...")
140
+ * logger.info("Ready")
141
+ * logger.warn("Something unexpected happened")
142
+ * logger.error("Failed!", error)
143
+ * ```
144
+ */
145
+ export declare function createLogger(prefix?: string, enabled?: boolean): Logger;
146
+ /**
147
+ * Validate API key format
148
+ */
149
+ export declare function validateApiKeyFormat(apiKey: string): {
150
+ valid: boolean;
151
+ type?: "server" | "client";
152
+ };
153
+ /**
154
+ * Validate organization ID format
155
+ */
156
+ export declare function validateOrgIdFormat(orgId: string): boolean;
157
+ /**
158
+ * Get header value from headers object (handles array values and case-insensitive lookup)
159
+ */
160
+ export declare function getHeaderValue(headers: Record<string, string | string[] | undefined>, key: string): string | undefined;
161
+ /**
162
+ * Get HTTP status code from Devora error code
163
+ */
164
+ export declare function getErrorStatusCode(errorCode?: string): number;
165
+ /**
166
+ * Simple rate limiter for SDK API calls
167
+ */
168
+ export declare class RateLimiter {
169
+ private maxRequests;
170
+ private windowMs;
171
+ private requests;
172
+ constructor(maxRequests?: number, windowMs?: number);
173
+ /**
174
+ * Check if a request is allowed
175
+ */
176
+ isAllowed(): boolean;
177
+ /**
178
+ * Get remaining requests in current window
179
+ */
180
+ getRemaining(): number;
181
+ /**
182
+ * Reset the rate limiter
183
+ */
184
+ reset(): void;
185
+ /**
186
+ * Wait until a request is allowed
187
+ * Uses iterative approach to avoid stack overflow under sustained load
188
+ */
189
+ waitForSlot(): Promise<void>;
190
+ }
191
+ /**
192
+ * Safely parse JSON
193
+ */
194
+ export declare function safeJsonParse<T>(json: string, fallback: T): T;
195
+ /**
196
+ * Safely stringify JSON
197
+ */
198
+ export declare function safeJsonStringify(value: unknown): string;
199
+ /**
200
+ * Deep freeze an object (make immutable)
201
+ */
202
+ export declare function deepFreeze<T extends object>(obj: T): Readonly<T>;
203
+ /**
204
+ * Create a deferred promise
205
+ */
206
+ export declare function createDeferred<T>(): {
207
+ promise: Promise<T>;
208
+ resolve: (value: T) => void;
209
+ reject: (reason?: unknown) => void;
210
+ };
211
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}