@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,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
+ }