@igniter-js/caller 0.1.3 → 0.1.5
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/AGENTS.md +2382 -172
- package/CHANGELOG.md +13 -0
- package/README.md +226 -14
- package/dist/adapters/index.d.mts +70 -0
- package/dist/adapters/index.d.ts +70 -0
- package/dist/adapters/index.js +91 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/index.mjs +89 -0
- package/dist/adapters/index.mjs.map +1 -0
- package/dist/client/index.d.mts +212 -0
- package/dist/client/index.d.ts +212 -0
- package/dist/client/index.js +688 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/index.mjs +679 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/index.d.mts +415 -870
- package/dist/index.d.ts +415 -870
- package/dist/index.js +1447 -297
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1439 -296
- package/dist/index.mjs.map +1 -1
- package/dist/manager-CVi9utzy.d.ts +1121 -0
- package/dist/manager-DWvX2zsz.d.mts +1121 -0
- package/dist/store-D2p2dqGN.d.mts +54 -0
- package/dist/store-D2p2dqGN.d.ts +54 -0
- package/dist/telemetry/index.d.mts +100 -0
- package/dist/telemetry/index.d.ts +100 -0
- package/dist/telemetry/index.js +54 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/index.mjs +52 -0
- package/dist/telemetry/index.mjs.map +1 -0
- package/package.json +35 -6
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store adapter interface compatible with Igniter.js Store.
|
|
3
|
+
*
|
|
4
|
+
* This allows IgniterCaller to use any store implementation (Redis, in-memory, etc.)
|
|
5
|
+
* for persistent caching across requests and deployments.
|
|
6
|
+
*/
|
|
7
|
+
interface IgniterCallerStoreAdapter<TClient = any> {
|
|
8
|
+
/** The underlying client instance (e.g., Redis client). */
|
|
9
|
+
readonly client: TClient;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves a value from the store by its key.
|
|
12
|
+
*
|
|
13
|
+
* @param key - The key to retrieve.
|
|
14
|
+
* @returns The value if found (auto-deserialized), otherwise null.
|
|
15
|
+
*/
|
|
16
|
+
get<T = any>(key: string): Promise<T | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Stores a value in the store.
|
|
19
|
+
*
|
|
20
|
+
* @param key - The key to store the value under.
|
|
21
|
+
* @param value - The value to store (will be auto-serialized).
|
|
22
|
+
* @param options - Configuration options, such as TTL.
|
|
23
|
+
*/
|
|
24
|
+
set(key: string, value: any, options?: {
|
|
25
|
+
ttl?: number;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Deletes a key from the store.
|
|
30
|
+
*
|
|
31
|
+
* @param key - The key to delete.
|
|
32
|
+
*/
|
|
33
|
+
delete(key: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a key exists in the store.
|
|
36
|
+
*
|
|
37
|
+
* @param key - The key to check.
|
|
38
|
+
* @returns `true` if the key exists, otherwise `false`.
|
|
39
|
+
*/
|
|
40
|
+
has(key: string): Promise<boolean>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Configuration options for store-based caching.
|
|
44
|
+
*/
|
|
45
|
+
interface IgniterCallerStoreOptions {
|
|
46
|
+
/** Default TTL in seconds for cached entries (default: 3600 = 1 hour). */
|
|
47
|
+
ttl?: number;
|
|
48
|
+
/** Prefix for all cache keys (default: 'igniter:caller:'). */
|
|
49
|
+
keyPrefix?: string;
|
|
50
|
+
/** Whether to fallback to fetch cache when store is unavailable (default: true). */
|
|
51
|
+
fallbackToFetch?: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { IgniterCallerStoreAdapter as I, IgniterCallerStoreOptions as a };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store adapter interface compatible with Igniter.js Store.
|
|
3
|
+
*
|
|
4
|
+
* This allows IgniterCaller to use any store implementation (Redis, in-memory, etc.)
|
|
5
|
+
* for persistent caching across requests and deployments.
|
|
6
|
+
*/
|
|
7
|
+
interface IgniterCallerStoreAdapter<TClient = any> {
|
|
8
|
+
/** The underlying client instance (e.g., Redis client). */
|
|
9
|
+
readonly client: TClient;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves a value from the store by its key.
|
|
12
|
+
*
|
|
13
|
+
* @param key - The key to retrieve.
|
|
14
|
+
* @returns The value if found (auto-deserialized), otherwise null.
|
|
15
|
+
*/
|
|
16
|
+
get<T = any>(key: string): Promise<T | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Stores a value in the store.
|
|
19
|
+
*
|
|
20
|
+
* @param key - The key to store the value under.
|
|
21
|
+
* @param value - The value to store (will be auto-serialized).
|
|
22
|
+
* @param options - Configuration options, such as TTL.
|
|
23
|
+
*/
|
|
24
|
+
set(key: string, value: any, options?: {
|
|
25
|
+
ttl?: number;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Deletes a key from the store.
|
|
30
|
+
*
|
|
31
|
+
* @param key - The key to delete.
|
|
32
|
+
*/
|
|
33
|
+
delete(key: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a key exists in the store.
|
|
36
|
+
*
|
|
37
|
+
* @param key - The key to check.
|
|
38
|
+
* @returns `true` if the key exists, otherwise `false`.
|
|
39
|
+
*/
|
|
40
|
+
has(key: string): Promise<boolean>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Configuration options for store-based caching.
|
|
44
|
+
*/
|
|
45
|
+
interface IgniterCallerStoreOptions {
|
|
46
|
+
/** Default TTL in seconds for cached entries (default: 3600 = 1 hour). */
|
|
47
|
+
ttl?: number;
|
|
48
|
+
/** Prefix for all cache keys (default: 'igniter:caller:'). */
|
|
49
|
+
keyPrefix?: string;
|
|
50
|
+
/** Whether to fallback to fetch cache when store is unavailable (default: true). */
|
|
51
|
+
fallbackToFetch?: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { IgniterCallerStoreAdapter as I, IgniterCallerStoreOptions as a };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as _igniter_js_telemetry from '@igniter-js/telemetry';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Telemetry events registry for `@igniter-js/caller`.
|
|
6
|
+
*/
|
|
7
|
+
declare const IgniterCallerTelemetryEvents: _igniter_js_telemetry.IgniterTelemetryEventsDescriptor<"igniter.caller", {
|
|
8
|
+
request: {
|
|
9
|
+
"execute.started": z.ZodObject<{
|
|
10
|
+
"ctx.request.method": z.ZodString;
|
|
11
|
+
"ctx.request.url": z.ZodString;
|
|
12
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
13
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
} & {
|
|
16
|
+
"execute.success": z.ZodObject<{
|
|
17
|
+
"ctx.request.method": z.ZodString;
|
|
18
|
+
"ctx.request.url": z.ZodString;
|
|
19
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
20
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
"ctx.request.durationMs": z.ZodNumber;
|
|
22
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
"ctx.response.contentType": z.ZodOptional<z.ZodString>;
|
|
24
|
+
"ctx.cache.hit": z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
"ctx.request.fallback": z.ZodOptional<z.ZodBoolean>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
} & {
|
|
28
|
+
"execute.error": z.ZodObject<{
|
|
29
|
+
"ctx.request.method": z.ZodString;
|
|
30
|
+
"ctx.request.url": z.ZodString;
|
|
31
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
32
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
"ctx.request.durationMs": z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
"ctx.error.code": z.ZodString;
|
|
36
|
+
"ctx.error.message": z.ZodString;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
} & {
|
|
39
|
+
"timeout.error": z.ZodObject<{
|
|
40
|
+
"ctx.request.method": z.ZodString;
|
|
41
|
+
"ctx.request.url": z.ZodString;
|
|
42
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
43
|
+
"ctx.request.timeoutMs": z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
};
|
|
46
|
+
} & {
|
|
47
|
+
cache: {
|
|
48
|
+
"read.hit": z.ZodObject<{
|
|
49
|
+
"ctx.request.method": z.ZodString;
|
|
50
|
+
"ctx.request.url": z.ZodString;
|
|
51
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
52
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
"ctx.cache.key": z.ZodString;
|
|
54
|
+
"ctx.cache.staleTime": z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
};
|
|
57
|
+
} & {
|
|
58
|
+
retry: {
|
|
59
|
+
"attempt.started": z.ZodObject<{
|
|
60
|
+
"ctx.request.method": z.ZodString;
|
|
61
|
+
"ctx.request.url": z.ZodString;
|
|
62
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
63
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
"ctx.retry.attempt": z.ZodNumber;
|
|
65
|
+
"ctx.retry.maxAttempts": z.ZodNumber;
|
|
66
|
+
"ctx.retry.delayMs": z.ZodNumber;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
};
|
|
69
|
+
} & {
|
|
70
|
+
validation: {
|
|
71
|
+
"request.error": z.ZodObject<{
|
|
72
|
+
"ctx.request.method": z.ZodString;
|
|
73
|
+
"ctx.request.url": z.ZodString;
|
|
74
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
75
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
"ctx.validation.type": z.ZodEnum<{
|
|
77
|
+
request: "request";
|
|
78
|
+
response: "response";
|
|
79
|
+
}>;
|
|
80
|
+
"ctx.validation.error": z.ZodString;
|
|
81
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
} & {
|
|
84
|
+
"response.error": z.ZodObject<{
|
|
85
|
+
"ctx.request.method": z.ZodString;
|
|
86
|
+
"ctx.request.url": z.ZodString;
|
|
87
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
88
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
"ctx.validation.type": z.ZodEnum<{
|
|
90
|
+
request: "request";
|
|
91
|
+
response: "response";
|
|
92
|
+
}>;
|
|
93
|
+
"ctx.validation.error": z.ZodString;
|
|
94
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
};
|
|
97
|
+
}>;
|
|
98
|
+
type IgniterCallerTelemetryEvents = typeof IgniterCallerTelemetryEvents.$Infer.registry;
|
|
99
|
+
|
|
100
|
+
export { IgniterCallerTelemetryEvents };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as _igniter_js_telemetry from '@igniter-js/telemetry';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Telemetry events registry for `@igniter-js/caller`.
|
|
6
|
+
*/
|
|
7
|
+
declare const IgniterCallerTelemetryEvents: _igniter_js_telemetry.IgniterTelemetryEventsDescriptor<"igniter.caller", {
|
|
8
|
+
request: {
|
|
9
|
+
"execute.started": z.ZodObject<{
|
|
10
|
+
"ctx.request.method": z.ZodString;
|
|
11
|
+
"ctx.request.url": z.ZodString;
|
|
12
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
13
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
} & {
|
|
16
|
+
"execute.success": z.ZodObject<{
|
|
17
|
+
"ctx.request.method": z.ZodString;
|
|
18
|
+
"ctx.request.url": z.ZodString;
|
|
19
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
20
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
"ctx.request.durationMs": z.ZodNumber;
|
|
22
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
"ctx.response.contentType": z.ZodOptional<z.ZodString>;
|
|
24
|
+
"ctx.cache.hit": z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
"ctx.request.fallback": z.ZodOptional<z.ZodBoolean>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
} & {
|
|
28
|
+
"execute.error": z.ZodObject<{
|
|
29
|
+
"ctx.request.method": z.ZodString;
|
|
30
|
+
"ctx.request.url": z.ZodString;
|
|
31
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
32
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
"ctx.request.durationMs": z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
"ctx.error.code": z.ZodString;
|
|
36
|
+
"ctx.error.message": z.ZodString;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
} & {
|
|
39
|
+
"timeout.error": z.ZodObject<{
|
|
40
|
+
"ctx.request.method": z.ZodString;
|
|
41
|
+
"ctx.request.url": z.ZodString;
|
|
42
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
43
|
+
"ctx.request.timeoutMs": z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
};
|
|
46
|
+
} & {
|
|
47
|
+
cache: {
|
|
48
|
+
"read.hit": z.ZodObject<{
|
|
49
|
+
"ctx.request.method": z.ZodString;
|
|
50
|
+
"ctx.request.url": z.ZodString;
|
|
51
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
52
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
"ctx.cache.key": z.ZodString;
|
|
54
|
+
"ctx.cache.staleTime": z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
};
|
|
57
|
+
} & {
|
|
58
|
+
retry: {
|
|
59
|
+
"attempt.started": z.ZodObject<{
|
|
60
|
+
"ctx.request.method": z.ZodString;
|
|
61
|
+
"ctx.request.url": z.ZodString;
|
|
62
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
63
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
"ctx.retry.attempt": z.ZodNumber;
|
|
65
|
+
"ctx.retry.maxAttempts": z.ZodNumber;
|
|
66
|
+
"ctx.retry.delayMs": z.ZodNumber;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
};
|
|
69
|
+
} & {
|
|
70
|
+
validation: {
|
|
71
|
+
"request.error": z.ZodObject<{
|
|
72
|
+
"ctx.request.method": z.ZodString;
|
|
73
|
+
"ctx.request.url": z.ZodString;
|
|
74
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
75
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
"ctx.validation.type": z.ZodEnum<{
|
|
77
|
+
request: "request";
|
|
78
|
+
response: "response";
|
|
79
|
+
}>;
|
|
80
|
+
"ctx.validation.error": z.ZodString;
|
|
81
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
} & {
|
|
84
|
+
"response.error": z.ZodObject<{
|
|
85
|
+
"ctx.request.method": z.ZodString;
|
|
86
|
+
"ctx.request.url": z.ZodString;
|
|
87
|
+
"ctx.request.baseUrl": z.ZodOptional<z.ZodString>;
|
|
88
|
+
"ctx.request.timeoutMs": z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
"ctx.validation.type": z.ZodEnum<{
|
|
90
|
+
request: "request";
|
|
91
|
+
response: "response";
|
|
92
|
+
}>;
|
|
93
|
+
"ctx.validation.error": z.ZodString;
|
|
94
|
+
"ctx.response.status": z.ZodOptional<z.ZodNumber>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
};
|
|
97
|
+
}>;
|
|
98
|
+
type IgniterCallerTelemetryEvents = typeof IgniterCallerTelemetryEvents.$Infer.registry;
|
|
99
|
+
|
|
100
|
+
export { IgniterCallerTelemetryEvents };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var telemetry = require('@igniter-js/telemetry');
|
|
4
|
+
var zod = require('zod');
|
|
5
|
+
|
|
6
|
+
// src/telemetry/index.ts
|
|
7
|
+
var RequestBaseSchema = zod.z.object({
|
|
8
|
+
"ctx.request.method": zod.z.string(),
|
|
9
|
+
"ctx.request.url": zod.z.string(),
|
|
10
|
+
"ctx.request.baseUrl": zod.z.string().optional(),
|
|
11
|
+
"ctx.request.timeoutMs": zod.z.number().optional()
|
|
12
|
+
});
|
|
13
|
+
var RequestSuccessSchema = RequestBaseSchema.extend({
|
|
14
|
+
"ctx.request.durationMs": zod.z.number(),
|
|
15
|
+
"ctx.response.status": zod.z.number().optional(),
|
|
16
|
+
"ctx.response.contentType": zod.z.string().optional(),
|
|
17
|
+
"ctx.cache.hit": zod.z.boolean().optional(),
|
|
18
|
+
"ctx.request.fallback": zod.z.boolean().optional()
|
|
19
|
+
});
|
|
20
|
+
var RequestErrorSchema = RequestBaseSchema.extend({
|
|
21
|
+
"ctx.request.durationMs": zod.z.number().optional(),
|
|
22
|
+
"ctx.response.status": zod.z.number().optional(),
|
|
23
|
+
"ctx.error.code": zod.z.string(),
|
|
24
|
+
"ctx.error.message": zod.z.string()
|
|
25
|
+
});
|
|
26
|
+
var CacheHitSchema = RequestBaseSchema.extend({
|
|
27
|
+
"ctx.cache.key": zod.z.string(),
|
|
28
|
+
"ctx.cache.staleTime": zod.z.number().optional()
|
|
29
|
+
});
|
|
30
|
+
var RetryAttemptSchema = RequestBaseSchema.extend({
|
|
31
|
+
"ctx.retry.attempt": zod.z.number(),
|
|
32
|
+
"ctx.retry.maxAttempts": zod.z.number(),
|
|
33
|
+
"ctx.retry.delayMs": zod.z.number()
|
|
34
|
+
});
|
|
35
|
+
var ValidationErrorSchema = RequestBaseSchema.extend({
|
|
36
|
+
"ctx.validation.type": zod.z.enum(["request", "response"]),
|
|
37
|
+
"ctx.validation.error": zod.z.string(),
|
|
38
|
+
"ctx.response.status": zod.z.number().optional()
|
|
39
|
+
});
|
|
40
|
+
var IgniterCallerTelemetryEvents = telemetry.IgniterTelemetryEvents.namespace(
|
|
41
|
+
"igniter.caller"
|
|
42
|
+
).group(
|
|
43
|
+
"request",
|
|
44
|
+
(g) => g.event("execute.started", RequestBaseSchema).event("execute.success", RequestSuccessSchema).event("execute.error", RequestErrorSchema).event("timeout.error", RequestBaseSchema.extend({
|
|
45
|
+
"ctx.request.timeoutMs": zod.z.number()
|
|
46
|
+
}))
|
|
47
|
+
).group("cache", (g) => g.event("read.hit", CacheHitSchema)).group("retry", (g) => g.event("attempt.started", RetryAttemptSchema)).group(
|
|
48
|
+
"validation",
|
|
49
|
+
(g) => g.event("request.error", ValidationErrorSchema).event("response.error", ValidationErrorSchema)
|
|
50
|
+
).build();
|
|
51
|
+
|
|
52
|
+
exports.IgniterCallerTelemetryEvents = IgniterCallerTelemetryEvents;
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/telemetry/index.ts"],"names":["z","IgniterTelemetryEvents"],"mappings":";;;;;;AAeA,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACjC,oBAAA,EAAsBA,MAAE,MAAA,EAAO;AAAA,EAC/B,iBAAA,EAAmBA,MAAE,MAAA,EAAO;AAAA,EAC5B,qBAAA,EAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,uBAAA,EAAyBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtC,CAAC,CAAA;AAKD,IAAM,oBAAA,GAAuB,kBAAkB,MAAA,CAAO;AAAA,EACpD,wBAAA,EAA0BA,MAAE,MAAA,EAAO;AAAA,EACnC,qBAAA,EAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,0BAAA,EAA4BA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChD,eAAA,EAAiBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACtC,sBAAA,EAAwBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtC,CAAC,CAAA;AAKD,IAAM,kBAAA,GAAqB,kBAAkB,MAAA,CAAO;AAAA,EAClD,wBAAA,EAA0BA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9C,qBAAA,EAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,gBAAA,EAAkBA,MAAE,MAAA,EAAO;AAAA,EAC3B,mBAAA,EAAqBA,MAAE,MAAA;AACzB,CAAC,CAAA;AAKD,IAAM,cAAA,GAAiB,kBAAkB,MAAA,CAAO;AAAA,EAC9C,eAAA,EAAiBA,MAAE,MAAA,EAAO;AAAA,EAC1B,qBAAA,EAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpC,CAAC,CAAA;AAKD,IAAM,kBAAA,GAAqB,kBAAkB,MAAA,CAAO;AAAA,EAClD,mBAAA,EAAqBA,MAAE,MAAA,EAAO;AAAA,EAC9B,uBAAA,EAAyBA,MAAE,MAAA,EAAO;AAAA,EAClC,mBAAA,EAAqBA,MAAE,MAAA;AACzB,CAAC,CAAA;AAKD,IAAM,qBAAA,GAAwB,kBAAkB,MAAA,CAAO;AAAA,EACrD,uBAAuBA,KAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,UAAU,CAAC,CAAA;AAAA,EACrD,sBAAA,EAAwBA,MAAE,MAAA,EAAO;AAAA,EACjC,qBAAA,EAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpC,CAAC,CAAA;AAKM,IAAM,+BAA+BC,gCAAA,CAAuB,SAAA;AAAA,EACjE;AACF,CAAA,CAIG,KAAA;AAAA,EAAM,SAAA;AAAA,EAAW,CAAC,CAAA,KACjB,CAAA,CACG,MAAM,iBAAA,EAAmB,iBAAiB,EAC1C,KAAA,CAAM,iBAAA,EAAmB,oBAAoB,CAAA,CAC7C,MAAM,eAAA,EAAiB,kBAAkB,EACzC,KAAA,CAAM,eAAA,EAAiB,kBAAkB,MAAA,CAAO;AAAA,IAC/C,uBAAA,EAAyBD,MAAE,MAAA;AAAO,GACnC,CAAC;AACN,CAAA,CAIC,MAAM,OAAA,EAAS,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,YAAY,cAAc,CAAC,EAIzD,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,iBAAA,EAAmB,kBAAkB,CAAC,CAAA,CAIpE,KAAA;AAAA,EAAM,YAAA;AAAA,EAAc,CAAC,MACpB,CAAA,CACG,KAAA,CAAM,iBAAiB,qBAAqB,CAAA,CAC5C,KAAA,CAAM,gBAAA,EAAkB,qBAAqB;AAClD,CAAA,CACC,KAAA","file":"index.js","sourcesContent":["/**\n * @fileoverview Telemetry events for @igniter-js/caller\n * @module @igniter-js/caller/telemetry\n *\n * @description\n * Defines all telemetry events for request execution, caching, retry, and validation.\n * Events follow the `igniter.caller.<group>.<event>` convention.\n */\n\nimport { IgniterTelemetryEvents } from \"@igniter-js/telemetry\";\nimport { z } from \"zod\";\n\n/**\n * Base attributes for request-level telemetry.\n */\nconst RequestBaseSchema = z.object({\n \"ctx.request.method\": z.string(),\n \"ctx.request.url\": z.string(),\n \"ctx.request.baseUrl\": z.string().optional(),\n \"ctx.request.timeoutMs\": z.number().optional(),\n});\n\n/**\n * Attributes for successful request completion.\n */\nconst RequestSuccessSchema = RequestBaseSchema.extend({\n \"ctx.request.durationMs\": z.number(),\n \"ctx.response.status\": z.number().optional(),\n \"ctx.response.contentType\": z.string().optional(),\n \"ctx.cache.hit\": z.boolean().optional(),\n \"ctx.request.fallback\": z.boolean().optional(),\n});\n\n/**\n * Attributes for failed request completion.\n */\nconst RequestErrorSchema = RequestBaseSchema.extend({\n \"ctx.request.durationMs\": z.number().optional(),\n \"ctx.response.status\": z.number().optional(),\n \"ctx.error.code\": z.string(),\n \"ctx.error.message\": z.string(),\n});\n\n/**\n * Attributes for cache hits.\n */\nconst CacheHitSchema = RequestBaseSchema.extend({\n \"ctx.cache.key\": z.string(),\n \"ctx.cache.staleTime\": z.number().optional(),\n});\n\n/**\n * Attributes for retry attempts.\n */\nconst RetryAttemptSchema = RequestBaseSchema.extend({\n \"ctx.retry.attempt\": z.number(),\n \"ctx.retry.maxAttempts\": z.number(),\n \"ctx.retry.delayMs\": z.number(),\n});\n\n/**\n * Attributes for validation errors.\n */\nconst ValidationErrorSchema = RequestBaseSchema.extend({\n \"ctx.validation.type\": z.enum([\"request\", \"response\"]),\n \"ctx.validation.error\": z.string(),\n \"ctx.response.status\": z.number().optional(),\n});\n\n/**\n * Telemetry events registry for `@igniter-js/caller`.\n */\nexport const IgniterCallerTelemetryEvents = IgniterTelemetryEvents.namespace(\n \"igniter.caller\",\n)\n // ============================================================================\n // REQUEST EVENTS\n // ============================================================================\n .group(\"request\", (g) =>\n g\n .event(\"execute.started\", RequestBaseSchema)\n .event(\"execute.success\", RequestSuccessSchema)\n .event(\"execute.error\", RequestErrorSchema)\n .event(\"timeout.error\", RequestBaseSchema.extend({\n \"ctx.request.timeoutMs\": z.number(),\n })),\n )\n // ============================================================================\n // CACHE EVENTS\n // ============================================================================\n .group(\"cache\", (g) => g.event(\"read.hit\", CacheHitSchema))\n // ============================================================================\n // RETRY EVENTS\n // ============================================================================\n .group(\"retry\", (g) => g.event(\"attempt.started\", RetryAttemptSchema))\n // ============================================================================\n // VALIDATION EVENTS\n // ============================================================================\n .group(\"validation\", (g) =>\n g\n .event(\"request.error\", ValidationErrorSchema)\n .event(\"response.error\", ValidationErrorSchema),\n )\n .build();\n\nexport type IgniterCallerTelemetryEvents =\n typeof IgniterCallerTelemetryEvents.$Infer.registry;\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { IgniterTelemetryEvents } from '@igniter-js/telemetry';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
// src/telemetry/index.ts
|
|
5
|
+
var RequestBaseSchema = z.object({
|
|
6
|
+
"ctx.request.method": z.string(),
|
|
7
|
+
"ctx.request.url": z.string(),
|
|
8
|
+
"ctx.request.baseUrl": z.string().optional(),
|
|
9
|
+
"ctx.request.timeoutMs": z.number().optional()
|
|
10
|
+
});
|
|
11
|
+
var RequestSuccessSchema = RequestBaseSchema.extend({
|
|
12
|
+
"ctx.request.durationMs": z.number(),
|
|
13
|
+
"ctx.response.status": z.number().optional(),
|
|
14
|
+
"ctx.response.contentType": z.string().optional(),
|
|
15
|
+
"ctx.cache.hit": z.boolean().optional(),
|
|
16
|
+
"ctx.request.fallback": z.boolean().optional()
|
|
17
|
+
});
|
|
18
|
+
var RequestErrorSchema = RequestBaseSchema.extend({
|
|
19
|
+
"ctx.request.durationMs": z.number().optional(),
|
|
20
|
+
"ctx.response.status": z.number().optional(),
|
|
21
|
+
"ctx.error.code": z.string(),
|
|
22
|
+
"ctx.error.message": z.string()
|
|
23
|
+
});
|
|
24
|
+
var CacheHitSchema = RequestBaseSchema.extend({
|
|
25
|
+
"ctx.cache.key": z.string(),
|
|
26
|
+
"ctx.cache.staleTime": z.number().optional()
|
|
27
|
+
});
|
|
28
|
+
var RetryAttemptSchema = RequestBaseSchema.extend({
|
|
29
|
+
"ctx.retry.attempt": z.number(),
|
|
30
|
+
"ctx.retry.maxAttempts": z.number(),
|
|
31
|
+
"ctx.retry.delayMs": z.number()
|
|
32
|
+
});
|
|
33
|
+
var ValidationErrorSchema = RequestBaseSchema.extend({
|
|
34
|
+
"ctx.validation.type": z.enum(["request", "response"]),
|
|
35
|
+
"ctx.validation.error": z.string(),
|
|
36
|
+
"ctx.response.status": z.number().optional()
|
|
37
|
+
});
|
|
38
|
+
var IgniterCallerTelemetryEvents = IgniterTelemetryEvents.namespace(
|
|
39
|
+
"igniter.caller"
|
|
40
|
+
).group(
|
|
41
|
+
"request",
|
|
42
|
+
(g) => g.event("execute.started", RequestBaseSchema).event("execute.success", RequestSuccessSchema).event("execute.error", RequestErrorSchema).event("timeout.error", RequestBaseSchema.extend({
|
|
43
|
+
"ctx.request.timeoutMs": z.number()
|
|
44
|
+
}))
|
|
45
|
+
).group("cache", (g) => g.event("read.hit", CacheHitSchema)).group("retry", (g) => g.event("attempt.started", RetryAttemptSchema)).group(
|
|
46
|
+
"validation",
|
|
47
|
+
(g) => g.event("request.error", ValidationErrorSchema).event("response.error", ValidationErrorSchema)
|
|
48
|
+
).build();
|
|
49
|
+
|
|
50
|
+
export { IgniterCallerTelemetryEvents };
|
|
51
|
+
//# sourceMappingURL=index.mjs.map
|
|
52
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/telemetry/index.ts"],"names":[],"mappings":";;;;AAeA,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACjC,oBAAA,EAAsB,EAAE,MAAA,EAAO;AAAA,EAC/B,iBAAA,EAAmB,EAAE,MAAA,EAAO;AAAA,EAC5B,qBAAA,EAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,uBAAA,EAAyB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtC,CAAC,CAAA;AAKD,IAAM,oBAAA,GAAuB,kBAAkB,MAAA,CAAO;AAAA,EACpD,wBAAA,EAA0B,EAAE,MAAA,EAAO;AAAA,EACnC,qBAAA,EAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,0BAAA,EAA4B,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChD,eAAA,EAAiB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACtC,sBAAA,EAAwB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACtC,CAAC,CAAA;AAKD,IAAM,kBAAA,GAAqB,kBAAkB,MAAA,CAAO;AAAA,EAClD,wBAAA,EAA0B,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9C,qBAAA,EAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3C,gBAAA,EAAkB,EAAE,MAAA,EAAO;AAAA,EAC3B,mBAAA,EAAqB,EAAE,MAAA;AACzB,CAAC,CAAA;AAKD,IAAM,cAAA,GAAiB,kBAAkB,MAAA,CAAO;AAAA,EAC9C,eAAA,EAAiB,EAAE,MAAA,EAAO;AAAA,EAC1B,qBAAA,EAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpC,CAAC,CAAA;AAKD,IAAM,kBAAA,GAAqB,kBAAkB,MAAA,CAAO;AAAA,EAClD,mBAAA,EAAqB,EAAE,MAAA,EAAO;AAAA,EAC9B,uBAAA,EAAyB,EAAE,MAAA,EAAO;AAAA,EAClC,mBAAA,EAAqB,EAAE,MAAA;AACzB,CAAC,CAAA;AAKD,IAAM,qBAAA,GAAwB,kBAAkB,MAAA,CAAO;AAAA,EACrD,uBAAuB,CAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,UAAU,CAAC,CAAA;AAAA,EACrD,sBAAA,EAAwB,EAAE,MAAA,EAAO;AAAA,EACjC,qBAAA,EAAuB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpC,CAAC,CAAA;AAKM,IAAM,+BAA+B,sBAAA,CAAuB,SAAA;AAAA,EACjE;AACF,CAAA,CAIG,KAAA;AAAA,EAAM,SAAA;AAAA,EAAW,CAAC,CAAA,KACjB,CAAA,CACG,MAAM,iBAAA,EAAmB,iBAAiB,EAC1C,KAAA,CAAM,iBAAA,EAAmB,oBAAoB,CAAA,CAC7C,MAAM,eAAA,EAAiB,kBAAkB,EACzC,KAAA,CAAM,eAAA,EAAiB,kBAAkB,MAAA,CAAO;AAAA,IAC/C,uBAAA,EAAyB,EAAE,MAAA;AAAO,GACnC,CAAC;AACN,CAAA,CAIC,MAAM,OAAA,EAAS,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,YAAY,cAAc,CAAC,EAIzD,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,iBAAA,EAAmB,kBAAkB,CAAC,CAAA,CAIpE,KAAA;AAAA,EAAM,YAAA;AAAA,EAAc,CAAC,MACpB,CAAA,CACG,KAAA,CAAM,iBAAiB,qBAAqB,CAAA,CAC5C,KAAA,CAAM,gBAAA,EAAkB,qBAAqB;AAClD,CAAA,CACC,KAAA","file":"index.mjs","sourcesContent":["/**\n * @fileoverview Telemetry events for @igniter-js/caller\n * @module @igniter-js/caller/telemetry\n *\n * @description\n * Defines all telemetry events for request execution, caching, retry, and validation.\n * Events follow the `igniter.caller.<group>.<event>` convention.\n */\n\nimport { IgniterTelemetryEvents } from \"@igniter-js/telemetry\";\nimport { z } from \"zod\";\n\n/**\n * Base attributes for request-level telemetry.\n */\nconst RequestBaseSchema = z.object({\n \"ctx.request.method\": z.string(),\n \"ctx.request.url\": z.string(),\n \"ctx.request.baseUrl\": z.string().optional(),\n \"ctx.request.timeoutMs\": z.number().optional(),\n});\n\n/**\n * Attributes for successful request completion.\n */\nconst RequestSuccessSchema = RequestBaseSchema.extend({\n \"ctx.request.durationMs\": z.number(),\n \"ctx.response.status\": z.number().optional(),\n \"ctx.response.contentType\": z.string().optional(),\n \"ctx.cache.hit\": z.boolean().optional(),\n \"ctx.request.fallback\": z.boolean().optional(),\n});\n\n/**\n * Attributes for failed request completion.\n */\nconst RequestErrorSchema = RequestBaseSchema.extend({\n \"ctx.request.durationMs\": z.number().optional(),\n \"ctx.response.status\": z.number().optional(),\n \"ctx.error.code\": z.string(),\n \"ctx.error.message\": z.string(),\n});\n\n/**\n * Attributes for cache hits.\n */\nconst CacheHitSchema = RequestBaseSchema.extend({\n \"ctx.cache.key\": z.string(),\n \"ctx.cache.staleTime\": z.number().optional(),\n});\n\n/**\n * Attributes for retry attempts.\n */\nconst RetryAttemptSchema = RequestBaseSchema.extend({\n \"ctx.retry.attempt\": z.number(),\n \"ctx.retry.maxAttempts\": z.number(),\n \"ctx.retry.delayMs\": z.number(),\n});\n\n/**\n * Attributes for validation errors.\n */\nconst ValidationErrorSchema = RequestBaseSchema.extend({\n \"ctx.validation.type\": z.enum([\"request\", \"response\"]),\n \"ctx.validation.error\": z.string(),\n \"ctx.response.status\": z.number().optional(),\n});\n\n/**\n * Telemetry events registry for `@igniter-js/caller`.\n */\nexport const IgniterCallerTelemetryEvents = IgniterTelemetryEvents.namespace(\n \"igniter.caller\",\n)\n // ============================================================================\n // REQUEST EVENTS\n // ============================================================================\n .group(\"request\", (g) =>\n g\n .event(\"execute.started\", RequestBaseSchema)\n .event(\"execute.success\", RequestSuccessSchema)\n .event(\"execute.error\", RequestErrorSchema)\n .event(\"timeout.error\", RequestBaseSchema.extend({\n \"ctx.request.timeoutMs\": z.number(),\n })),\n )\n // ============================================================================\n // CACHE EVENTS\n // ============================================================================\n .group(\"cache\", (g) => g.event(\"read.hit\", CacheHitSchema))\n // ============================================================================\n // RETRY EVENTS\n // ============================================================================\n .group(\"retry\", (g) => g.event(\"attempt.started\", RetryAttemptSchema))\n // ============================================================================\n // VALIDATION EVENTS\n // ============================================================================\n .group(\"validation\", (g) =>\n g\n .event(\"request.error\", ValidationErrorSchema)\n .event(\"response.error\", ValidationErrorSchema),\n )\n .build();\n\nexport type IgniterCallerTelemetryEvents =\n typeof IgniterCallerTelemetryEvents.$Infer.registry;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igniter-js/caller",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Type-safe HTTP client for Igniter.js with interceptors, retries, caching, and StandardSchema validation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,8 +14,23 @@
|
|
|
14
14
|
"exports": {
|
|
15
15
|
".": {
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
|
-
"import": "./dist/index.
|
|
17
|
+
"import": "./dist/index.mjs",
|
|
18
18
|
"require": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./telemetry": {
|
|
21
|
+
"types": "./dist/telemetry/index.d.ts",
|
|
22
|
+
"import": "./dist/telemetry/index.mjs",
|
|
23
|
+
"require": "./dist/telemetry/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./adapters": {
|
|
26
|
+
"types": "./dist/adapters/index.d.ts",
|
|
27
|
+
"import": "./dist/adapters/index.mjs",
|
|
28
|
+
"require": "./dist/adapters/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./client": {
|
|
31
|
+
"types": "./dist/client/index.d.ts",
|
|
32
|
+
"import": "./dist/client/index.mjs",
|
|
33
|
+
"require": "./dist/client/index.js"
|
|
19
34
|
}
|
|
20
35
|
},
|
|
21
36
|
"scripts": {
|
|
@@ -52,17 +67,31 @@
|
|
|
52
67
|
"url": "https://github.com/felipebarcelospro/igniter-js/issues"
|
|
53
68
|
},
|
|
54
69
|
"homepage": "https://igniterjs.com",
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"@igniter-js/common": ">=0.1.0",
|
|
72
|
+
"@igniter-js/telemetry": ">=0.1.12"
|
|
73
|
+
},
|
|
55
74
|
"devDependencies": {
|
|
56
|
-
"@igniter-js/
|
|
75
|
+
"@igniter-js/common": "*",
|
|
76
|
+
"@igniter-js/telemetry": "*",
|
|
57
77
|
"@types/node": "^22.7.5",
|
|
58
78
|
"tsup": "^8.3.0",
|
|
59
79
|
"typescript": "^5.6.3",
|
|
60
80
|
"vitest": "^2.1.4",
|
|
61
|
-
"zod": "^
|
|
81
|
+
"zod": "^4.2.1",
|
|
82
|
+
"@types/react": "^18.3.12",
|
|
83
|
+
"react": "^18.3.1"
|
|
62
84
|
},
|
|
63
85
|
"peerDependencies": {
|
|
64
|
-
"@igniter-js/
|
|
65
|
-
"
|
|
86
|
+
"@igniter-js/common": ">=0.1.0",
|
|
87
|
+
"@igniter-js/telemetry": ">=0.1.12",
|
|
88
|
+
"zod": ">=4.2.1",
|
|
89
|
+
"react": ">=18.0.0"
|
|
90
|
+
},
|
|
91
|
+
"peerDependenciesMeta": {
|
|
92
|
+
"zod": {
|
|
93
|
+
"optional": true
|
|
94
|
+
}
|
|
66
95
|
},
|
|
67
96
|
"publishConfig": {
|
|
68
97
|
"access": "public"
|