@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.
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/dist/constants/api-url.gen.d.ts +4 -0
- package/dist/constants/api-url.gen.d.ts.map +1 -0
- package/dist/constants/api-url.gen.example.d.ts +7 -0
- package/dist/constants/api-url.gen.example.d.ts.map +1 -0
- package/dist/constants/api-url.gen.example.js +7 -0
- package/dist/constants/api-url.gen.example.js.map +1 -0
- package/dist/constants/api-url.gen.js +4 -0
- package/dist/constants/api-url.gen.js.map +1 -0
- package/dist/constants/index.d.ts +203 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +236 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/sessionLifecycle.d.ts +22 -0
- package/dist/constants/sessionLifecycle.d.ts.map +1 -0
- package/dist/constants/sessionLifecycle.js +21 -0
- package/dist/constants/sessionLifecycle.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/security/index.d.ts +118 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +345 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/request-body.d.ts +16 -0
- package/dist/security/request-body.d.ts.map +1 -0
- package/dist/security/request-body.js +84 -0
- package/dist/security/request-body.js.map +1 -0
- package/dist/security/signing.d.ts +127 -0
- package/dist/security/signing.d.ts.map +1 -0
- package/dist/security/signing.js +297 -0
- package/dist/security/signing.js.map +1 -0
- package/dist/types/index.d.ts +487 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +211 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +600 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for Devora SDKs
|
|
3
|
+
* @module @devorash/core/utils
|
|
4
|
+
*/
|
|
5
|
+
import { SDK_VERSION } from "../constants/index.js";
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Response Helpers
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Create a successful SDK response
|
|
11
|
+
*/
|
|
12
|
+
export function createSuccessResponse(data) {
|
|
13
|
+
return {
|
|
14
|
+
success: true,
|
|
15
|
+
data,
|
|
16
|
+
timestamp: Date.now(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create an error SDK response
|
|
21
|
+
*/
|
|
22
|
+
export function createErrorResponse(error, errorCode) {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error,
|
|
26
|
+
errorCode,
|
|
27
|
+
timestamp: Date.now(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// URL Helpers
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Extract URL parameters.
|
|
35
|
+
*/
|
|
36
|
+
export function extractUrlParams(url) {
|
|
37
|
+
try {
|
|
38
|
+
const urlObj = new URL(url, "http://placeholder");
|
|
39
|
+
const params = {};
|
|
40
|
+
for (const [key, value] of urlObj.searchParams.entries()) {
|
|
41
|
+
params[key] = value;
|
|
42
|
+
}
|
|
43
|
+
return params;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Clean impersonation parameters from URL
|
|
51
|
+
* Handles both absolute and relative URLs
|
|
52
|
+
*/
|
|
53
|
+
export function cleanImpersonationParams(url) {
|
|
54
|
+
const PLACEHOLDER_BASE = "http://placeholder.local";
|
|
55
|
+
// The code travels in the fragment; drop it there too, keeping router state.
|
|
56
|
+
const stripFragment = (hash) => {
|
|
57
|
+
let previous;
|
|
58
|
+
do {
|
|
59
|
+
previous = hash;
|
|
60
|
+
hash = hash
|
|
61
|
+
.replace(/([?&])devora_exchange=[^&]*&?/, (_m, sep) => sep)
|
|
62
|
+
.replace(/^#devora_exchange=[^&]*&?/, "#");
|
|
63
|
+
} while (hash !== previous);
|
|
64
|
+
return hash.replace(/[?&]$/, "").replace(/^#$/, "");
|
|
65
|
+
};
|
|
66
|
+
try {
|
|
67
|
+
// First try parsing as absolute URL
|
|
68
|
+
const urlObj = new URL(url);
|
|
69
|
+
urlObj.searchParams.delete("devora_exchange");
|
|
70
|
+
urlObj.hash = stripFragment(urlObj.hash);
|
|
71
|
+
return urlObj.toString();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Handle relative URLs by parsing with placeholder base
|
|
75
|
+
try {
|
|
76
|
+
const urlObj = new URL(url, PLACEHOLDER_BASE);
|
|
77
|
+
urlObj.searchParams.delete("devora_exchange");
|
|
78
|
+
urlObj.hash = stripFragment(urlObj.hash);
|
|
79
|
+
// Return relative form: pathname + search + hash
|
|
80
|
+
const search = urlObj.search;
|
|
81
|
+
const hash = urlObj.hash;
|
|
82
|
+
return `${urlObj.pathname}${search}${hash}`;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// If all parsing fails, return original (shouldn't happen with valid relative URLs)
|
|
86
|
+
return url;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// Path Matching
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Match a path pattern against an actual path
|
|
95
|
+
* Supports :param patterns (e.g., /impersonate/:id)
|
|
96
|
+
*/
|
|
97
|
+
export function matchPath(pattern, path) {
|
|
98
|
+
const patternParts = pattern.split("/").filter(Boolean);
|
|
99
|
+
const pathParts = path.split("/").filter(Boolean);
|
|
100
|
+
if (patternParts.length !== pathParts.length) {
|
|
101
|
+
return { match: false, params: {} };
|
|
102
|
+
}
|
|
103
|
+
const params = {};
|
|
104
|
+
for (let i = 0; i < patternParts.length; i++) {
|
|
105
|
+
const patternPart = patternParts[i];
|
|
106
|
+
const pathPart = pathParts[i];
|
|
107
|
+
if (patternPart.startsWith(":")) {
|
|
108
|
+
// This is a parameter
|
|
109
|
+
const paramName = patternPart.slice(1);
|
|
110
|
+
params[paramName] = safeDecodePathPart(pathPart);
|
|
111
|
+
}
|
|
112
|
+
else if (patternPart !== pathPart) {
|
|
113
|
+
// Static part doesn't match
|
|
114
|
+
return { match: false, params: {} };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { match: true, params };
|
|
118
|
+
}
|
|
119
|
+
function safeDecodePathPart(value) {
|
|
120
|
+
try {
|
|
121
|
+
return decodeURIComponent(value);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Extract path parameters from a matched route
|
|
129
|
+
*/
|
|
130
|
+
export function extractPathParams(pattern, path) {
|
|
131
|
+
const result = matchPath(pattern, path);
|
|
132
|
+
return result.params;
|
|
133
|
+
}
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// Scope Helpers
|
|
136
|
+
// ============================================================================
|
|
137
|
+
/**
|
|
138
|
+
* Check if a scope allows write operations
|
|
139
|
+
*/
|
|
140
|
+
export function scopeAllowsWrite(scope) {
|
|
141
|
+
return scope === "write";
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get human-readable scope description
|
|
145
|
+
*/
|
|
146
|
+
export function getScopeDescription(scope) {
|
|
147
|
+
switch (scope) {
|
|
148
|
+
case "read":
|
|
149
|
+
return "Read-only access (view only, no changes allowed)";
|
|
150
|
+
case "write":
|
|
151
|
+
return "Full access (can view and modify)";
|
|
152
|
+
default:
|
|
153
|
+
return "Unknown scope";
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// ============================================================================
|
|
157
|
+
// Logging Helpers
|
|
158
|
+
// ============================================================================
|
|
159
|
+
/**
|
|
160
|
+
* Create a log event
|
|
161
|
+
*/
|
|
162
|
+
export function createLogEvent(type, sessionId, options = {}) {
|
|
163
|
+
return {
|
|
164
|
+
type,
|
|
165
|
+
sessionId,
|
|
166
|
+
timestamp: Date.now(),
|
|
167
|
+
...options,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// SDK Info Helpers
|
|
172
|
+
// ============================================================================
|
|
173
|
+
/**
|
|
174
|
+
* Create SDK info object
|
|
175
|
+
*/
|
|
176
|
+
export function createSDKInfo(name, type, runtime) {
|
|
177
|
+
return {
|
|
178
|
+
name,
|
|
179
|
+
version: SDK_VERSION,
|
|
180
|
+
type,
|
|
181
|
+
runtime,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// Logger Service
|
|
186
|
+
// ============================================================================
|
|
187
|
+
/**
|
|
188
|
+
* Log levels in order of severity (lower = more verbose)
|
|
189
|
+
*/
|
|
190
|
+
export var LogLevel;
|
|
191
|
+
(function (LogLevel) {
|
|
192
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
193
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
194
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
195
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
196
|
+
LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
|
|
197
|
+
})(LogLevel || (LogLevel = {}));
|
|
198
|
+
/**
|
|
199
|
+
* Global logger configuration (can be set at app initialization)
|
|
200
|
+
*/
|
|
201
|
+
let globalLoggerConfig = {
|
|
202
|
+
level: undefined, // Will be auto-detected
|
|
203
|
+
enabled: undefined, // Will be auto-detected
|
|
204
|
+
prefix: "Devora",
|
|
205
|
+
includeTimestamp: false,
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Detect if we're in development mode
|
|
209
|
+
*/
|
|
210
|
+
function isDevEnvironment() {
|
|
211
|
+
// Check common environment variables
|
|
212
|
+
if (typeof process !== "undefined") {
|
|
213
|
+
const nodeEnv = process.env?.NODE_ENV;
|
|
214
|
+
if (nodeEnv === "development" || nodeEnv === "dev")
|
|
215
|
+
return true;
|
|
216
|
+
if (nodeEnv === "production" || nodeEnv === "prod")
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
// Browser: check for localhost
|
|
220
|
+
// Use globalThis for cross-platform compatibility (browser and Node.js)
|
|
221
|
+
const globalWindow = typeof globalThis !== "undefined"
|
|
222
|
+
? globalThis.window
|
|
223
|
+
: undefined;
|
|
224
|
+
if (globalWindow?.location?.hostname) {
|
|
225
|
+
const hostname = globalWindow.location.hostname;
|
|
226
|
+
if (hostname === "localhost" || hostname === "127.0.0.1" || hostname.endsWith(".local")) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Default to production (safer)
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get default log level based on environment
|
|
235
|
+
*/
|
|
236
|
+
function getDefaultLogLevel() {
|
|
237
|
+
return isDevEnvironment() ? LogLevel.DEBUG : LogLevel.WARN;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get default enabled state based on environment
|
|
241
|
+
*/
|
|
242
|
+
function getDefaultEnabled() {
|
|
243
|
+
return isDevEnvironment();
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Configure the global logger settings.
|
|
247
|
+
* Call this once at your application's entry point.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* import { configureLogger, LogLevel } from "@devorash/core"
|
|
252
|
+
*
|
|
253
|
+
* // Enable verbose logging in development
|
|
254
|
+
* configureLogger({
|
|
255
|
+
* level: LogLevel.DEBUG,
|
|
256
|
+
* enabled: true,
|
|
257
|
+
* includeTimestamp: true,
|
|
258
|
+
* })
|
|
259
|
+
*
|
|
260
|
+
* // Disable all logging in production
|
|
261
|
+
* configureLogger({
|
|
262
|
+
* enabled: false,
|
|
263
|
+
* })
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
export function configureLogger(config) {
|
|
267
|
+
globalLoggerConfig = {
|
|
268
|
+
...globalLoggerConfig,
|
|
269
|
+
...config,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get the current global logger configuration
|
|
274
|
+
*/
|
|
275
|
+
export function getLoggerConfig() {
|
|
276
|
+
return { ...globalLoggerConfig };
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Reset logger configuration to defaults
|
|
280
|
+
*/
|
|
281
|
+
export function resetLoggerConfig() {
|
|
282
|
+
globalLoggerConfig = {
|
|
283
|
+
level: undefined,
|
|
284
|
+
enabled: undefined,
|
|
285
|
+
prefix: "Devora",
|
|
286
|
+
includeTimestamp: false,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Format a log message with prefix and optional timestamp
|
|
291
|
+
*/
|
|
292
|
+
function formatLogPrefix(prefix, includeTimestamp) {
|
|
293
|
+
if (includeTimestamp) {
|
|
294
|
+
const now = new Date();
|
|
295
|
+
const time = now.toISOString().slice(11, 23); // HH:MM:SS.mmm
|
|
296
|
+
return `[${time}] [${prefix}]`;
|
|
297
|
+
}
|
|
298
|
+
return `[${prefix}]`;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Create a logger instance with the given options.
|
|
302
|
+
*
|
|
303
|
+
* @param prefix - Prefix for log messages (e.g., "Devora SDK", "Devora React")
|
|
304
|
+
* @param enabled - Override to enable/disable this specific logger
|
|
305
|
+
* @returns Logger instance
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```typescript
|
|
309
|
+
* const logger = createLogger("MyComponent")
|
|
310
|
+
* logger.debug("Initializing...")
|
|
311
|
+
* logger.info("Ready")
|
|
312
|
+
* logger.warn("Something unexpected happened")
|
|
313
|
+
* logger.error("Failed!", error)
|
|
314
|
+
* ```
|
|
315
|
+
*/
|
|
316
|
+
export function createLogger(prefix, enabled) {
|
|
317
|
+
let instanceEnabled = enabled;
|
|
318
|
+
let instanceLevel;
|
|
319
|
+
const getEffectiveEnabled = () => {
|
|
320
|
+
if (instanceEnabled !== undefined)
|
|
321
|
+
return instanceEnabled;
|
|
322
|
+
if (globalLoggerConfig.enabled !== undefined)
|
|
323
|
+
return globalLoggerConfig.enabled;
|
|
324
|
+
return getDefaultEnabled();
|
|
325
|
+
};
|
|
326
|
+
const getEffectiveLevel = () => {
|
|
327
|
+
if (instanceLevel !== undefined)
|
|
328
|
+
return instanceLevel;
|
|
329
|
+
if (globalLoggerConfig.level !== undefined)
|
|
330
|
+
return globalLoggerConfig.level;
|
|
331
|
+
return getDefaultLogLevel();
|
|
332
|
+
};
|
|
333
|
+
const getPrefix = () => {
|
|
334
|
+
return prefix ?? globalLoggerConfig.prefix ?? "Devora";
|
|
335
|
+
};
|
|
336
|
+
const shouldLog = (level) => {
|
|
337
|
+
if (!getEffectiveEnabled())
|
|
338
|
+
return false;
|
|
339
|
+
return level >= getEffectiveLevel();
|
|
340
|
+
};
|
|
341
|
+
const getHandler = () => {
|
|
342
|
+
return (globalLoggerConfig.handler ?? {
|
|
343
|
+
debug: console.debug ?? console.log,
|
|
344
|
+
info: console.info ?? console.log,
|
|
345
|
+
warn: console.warn ?? console.log,
|
|
346
|
+
error: console.error ?? console.log,
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
const formatPrefix = () => {
|
|
350
|
+
return formatLogPrefix(getPrefix(), globalLoggerConfig.includeTimestamp ?? false);
|
|
351
|
+
};
|
|
352
|
+
return {
|
|
353
|
+
debug: (...args) => {
|
|
354
|
+
if (shouldLog(LogLevel.DEBUG)) {
|
|
355
|
+
getHandler().debug(formatPrefix(), ...args);
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
log: (...args) => {
|
|
359
|
+
// Alias for info
|
|
360
|
+
if (shouldLog(LogLevel.INFO)) {
|
|
361
|
+
getHandler().info(formatPrefix(), ...args);
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
info: (...args) => {
|
|
365
|
+
if (shouldLog(LogLevel.INFO)) {
|
|
366
|
+
getHandler().info(formatPrefix(), ...args);
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
warn: (...args) => {
|
|
370
|
+
if (shouldLog(LogLevel.WARN)) {
|
|
371
|
+
getHandler().warn(formatPrefix(), ...args);
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
error: (...args) => {
|
|
375
|
+
// Errors are always logged unless explicitly disabled
|
|
376
|
+
if (getEffectiveEnabled() || globalLoggerConfig.enabled === undefined) {
|
|
377
|
+
getHandler().error(formatPrefix(), ...args);
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
setLevel: (level) => {
|
|
381
|
+
instanceLevel = level;
|
|
382
|
+
},
|
|
383
|
+
setEnabled: (enabled) => {
|
|
384
|
+
instanceEnabled = enabled;
|
|
385
|
+
},
|
|
386
|
+
isEnabled: () => getEffectiveEnabled(),
|
|
387
|
+
getLevel: () => getEffectiveLevel(),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
// ============================================================================
|
|
391
|
+
// Validation Helpers
|
|
392
|
+
// ============================================================================
|
|
393
|
+
/**
|
|
394
|
+
* Validate API key format
|
|
395
|
+
*/
|
|
396
|
+
export function validateApiKeyFormat(apiKey) {
|
|
397
|
+
// Expected formats:
|
|
398
|
+
// Server ID: pk_server_live_xxx
|
|
399
|
+
// Client ID: pk_client_live_xxx
|
|
400
|
+
if (/^pk_server_live_[a-zA-Z0-9_-]+$/.test(apiKey)) {
|
|
401
|
+
return { valid: true, type: "server" };
|
|
402
|
+
}
|
|
403
|
+
if (/^pk_client_live_[a-zA-Z0-9_-]+$/.test(apiKey)) {
|
|
404
|
+
return { valid: true, type: "client" };
|
|
405
|
+
}
|
|
406
|
+
return { valid: false };
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Validate organization ID format
|
|
410
|
+
*/
|
|
411
|
+
export function validateOrgIdFormat(orgId) {
|
|
412
|
+
// Expected format: org_xxx
|
|
413
|
+
return /^org_[a-zA-Z0-9]+$/.test(orgId);
|
|
414
|
+
}
|
|
415
|
+
// ============================================================================
|
|
416
|
+
// Header Utilities
|
|
417
|
+
// ============================================================================
|
|
418
|
+
/**
|
|
419
|
+
* Get header value from headers object (handles array values and case-insensitive lookup)
|
|
420
|
+
*/
|
|
421
|
+
export function getHeaderValue(headers, key) {
|
|
422
|
+
const value = headers[key] ?? headers[key.toLowerCase()];
|
|
423
|
+
if (Array.isArray(value)) {
|
|
424
|
+
return value[0];
|
|
425
|
+
}
|
|
426
|
+
return value;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Get HTTP status code from Devora error code
|
|
430
|
+
*/
|
|
431
|
+
export function getErrorStatusCode(errorCode) {
|
|
432
|
+
if (!errorCode)
|
|
433
|
+
return 400;
|
|
434
|
+
// Impersonation context errors -> 401 Unauthorized
|
|
435
|
+
if (errorCode === "INVALID_IMPERSONATION_CONTEXT" ||
|
|
436
|
+
errorCode === "IMPERSONATION_EXPIRED" ||
|
|
437
|
+
errorCode === "IMPERSONATION_SESSION_ENDED") {
|
|
438
|
+
return 401;
|
|
439
|
+
}
|
|
440
|
+
// Impersonation policy or replay protection unavailable -> 503 (fail closed)
|
|
441
|
+
if (errorCode === "IMPERSONATION_POLICY_UNAVAILABLE" ||
|
|
442
|
+
errorCode === "REPLAY_STORE_UNAVAILABLE") {
|
|
443
|
+
return 503;
|
|
444
|
+
}
|
|
445
|
+
// A signed request id seen before -> 401
|
|
446
|
+
if (errorCode === "REPLAYED_REQUEST")
|
|
447
|
+
return 401;
|
|
448
|
+
// The body digest is over wire bytes; encoded bodies are refused -> 415
|
|
449
|
+
if (errorCode === "UNSUPPORTED_CONTENT_ENCODING")
|
|
450
|
+
return 415;
|
|
451
|
+
// Impersonation scope/endpoint blocks -> 403 Forbidden
|
|
452
|
+
if (errorCode === "IMPERSONATION_ENDPOINT_BLOCKED" ||
|
|
453
|
+
errorCode === "IMPERSONATION_SCOPE_VIOLATION") {
|
|
454
|
+
return 403;
|
|
455
|
+
}
|
|
456
|
+
// Security errors -> 401 Unauthorized
|
|
457
|
+
if (errorCode.includes("SECURITY") ||
|
|
458
|
+
errorCode.includes("SIGNATURE") ||
|
|
459
|
+
errorCode.includes("TIMESTAMP") ||
|
|
460
|
+
errorCode.includes("MISSING_HEADERS") ||
|
|
461
|
+
errorCode.includes("ORG_MISMATCH")) {
|
|
462
|
+
return 401;
|
|
463
|
+
}
|
|
464
|
+
// Not found -> 404
|
|
465
|
+
if (errorCode === "NOT_FOUND") {
|
|
466
|
+
return 404;
|
|
467
|
+
}
|
|
468
|
+
// Scope violations -> 403 Forbidden
|
|
469
|
+
if (errorCode.includes("SCOPE") || errorCode.includes("WRITE_BLOCKED")) {
|
|
470
|
+
return 403;
|
|
471
|
+
}
|
|
472
|
+
// Payload too large -> 413
|
|
473
|
+
if (errorCode.includes("BODY_TOO_LARGE") || errorCode.includes("PAYLOAD_TOO_LARGE")) {
|
|
474
|
+
return 413;
|
|
475
|
+
}
|
|
476
|
+
// Rate limited -> 429
|
|
477
|
+
if (errorCode.includes("RATE_LIMITED") || errorCode.includes("TOO_MANY_REQUESTS")) {
|
|
478
|
+
return 429;
|
|
479
|
+
}
|
|
480
|
+
// Internal server errors -> 500
|
|
481
|
+
if (errorCode === "INTERNAL_ERROR") {
|
|
482
|
+
return 500;
|
|
483
|
+
}
|
|
484
|
+
// Default -> 400 Bad Request
|
|
485
|
+
return 400;
|
|
486
|
+
}
|
|
487
|
+
// ============================================================================
|
|
488
|
+
// Rate Limiting
|
|
489
|
+
// ============================================================================
|
|
490
|
+
/**
|
|
491
|
+
* Simple rate limiter for SDK API calls
|
|
492
|
+
*/
|
|
493
|
+
export class RateLimiter {
|
|
494
|
+
maxRequests;
|
|
495
|
+
windowMs;
|
|
496
|
+
requests = [];
|
|
497
|
+
constructor(maxRequests = 10, windowMs = 1000) {
|
|
498
|
+
this.maxRequests = maxRequests;
|
|
499
|
+
this.windowMs = windowMs;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Check if a request is allowed
|
|
503
|
+
*/
|
|
504
|
+
isAllowed() {
|
|
505
|
+
const now = Date.now();
|
|
506
|
+
// Remove old requests outside the window
|
|
507
|
+
this.requests = this.requests.filter((t) => now - t < this.windowMs);
|
|
508
|
+
if (this.requests.length >= this.maxRequests) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
this.requests.push(now);
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Get remaining requests in current window
|
|
516
|
+
*/
|
|
517
|
+
getRemaining() {
|
|
518
|
+
const now = Date.now();
|
|
519
|
+
this.requests = this.requests.filter((t) => now - t < this.windowMs);
|
|
520
|
+
return Math.max(0, this.maxRequests - this.requests.length);
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Reset the rate limiter
|
|
524
|
+
*/
|
|
525
|
+
reset() {
|
|
526
|
+
this.requests = [];
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Wait until a request is allowed
|
|
530
|
+
* Uses iterative approach to avoid stack overflow under sustained load
|
|
531
|
+
*/
|
|
532
|
+
async waitForSlot() {
|
|
533
|
+
while (true) {
|
|
534
|
+
const now = Date.now();
|
|
535
|
+
// Filter stale requests outside the window
|
|
536
|
+
this.requests = this.requests.filter((t) => now - t < this.windowMs);
|
|
537
|
+
if (this.requests.length < this.maxRequests) {
|
|
538
|
+
this.requests.push(now);
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
// Calculate wait time based on oldest request
|
|
542
|
+
const oldestRequest = this.requests[0];
|
|
543
|
+
if (oldestRequest) {
|
|
544
|
+
const waitTime = this.windowMs - (now - oldestRequest) + 10;
|
|
545
|
+
await new Promise((resolve) => setTimeout(resolve, Math.max(waitTime, 10)));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
// ============================================================================
|
|
551
|
+
// Miscellaneous
|
|
552
|
+
// ============================================================================
|
|
553
|
+
/**
|
|
554
|
+
* Safely parse JSON
|
|
555
|
+
*/
|
|
556
|
+
export function safeJsonParse(json, fallback) {
|
|
557
|
+
try {
|
|
558
|
+
return JSON.parse(json);
|
|
559
|
+
}
|
|
560
|
+
catch {
|
|
561
|
+
return fallback;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Safely stringify JSON
|
|
566
|
+
*/
|
|
567
|
+
export function safeJsonStringify(value) {
|
|
568
|
+
try {
|
|
569
|
+
return JSON.stringify(value);
|
|
570
|
+
}
|
|
571
|
+
catch {
|
|
572
|
+
return "{}";
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Deep freeze an object (make immutable)
|
|
577
|
+
*/
|
|
578
|
+
export function deepFreeze(obj) {
|
|
579
|
+
Object.freeze(obj);
|
|
580
|
+
for (const key of Object.keys(obj)) {
|
|
581
|
+
const value = obj[key];
|
|
582
|
+
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
583
|
+
deepFreeze(value);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
return obj;
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Create a deferred promise
|
|
590
|
+
*/
|
|
591
|
+
export function createDeferred() {
|
|
592
|
+
let resolve;
|
|
593
|
+
let reject;
|
|
594
|
+
const promise = new Promise((res, rej) => {
|
|
595
|
+
resolve = res;
|
|
596
|
+
reject = rej;
|
|
597
|
+
});
|
|
598
|
+
return { promise, resolve, reject };
|
|
599
|
+
}
|
|
600
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devorash/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core utilities, types, and constants for Devora SDKs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"customer-support",
|
|
7
|
+
"devora",
|
|
8
|
+
"impersonation",
|
|
9
|
+
"sdk",
|
|
10
|
+
"support"
|
|
11
|
+
],
|
|
12
|
+
"homepage": "https://docs.devora.sh/reference/packages",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/getdevora/devora-sdks/issues"
|
|
15
|
+
},
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "Devora",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/getdevora/devora-sdks.git",
|
|
21
|
+
"directory": "core"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"type": "module",
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"module": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"import": "./dist/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./types": {
|
|
38
|
+
"types": "./dist/types/index.d.ts",
|
|
39
|
+
"import": "./dist/types/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./constants": {
|
|
42
|
+
"types": "./dist/constants/index.d.ts",
|
|
43
|
+
"import": "./dist/constants/index.js"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public",
|
|
48
|
+
"provenance": true
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=20.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|