@traffical/core-io 0.3.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.
@@ -0,0 +1,52 @@
1
+ /**
2
+ * DecisionClient
3
+ *
4
+ * I/O client for Traffical server-evaluated resolution and per-entity decisions.
5
+ * Platform-agnostic (uses standard fetch API).
6
+ */
7
+ import type { Id, Context, EdgeDecideRequest, EdgeDecideResponse, ServerResolveRequest, ServerResolveResponse } from "@traffical/core";
8
+ export interface DecisionClientConfig {
9
+ /** Base URL for the edge worker (e.g., "https://sdk.traffical.io") */
10
+ baseUrl: string;
11
+ /** Organization ID */
12
+ orgId: Id;
13
+ /** Project ID */
14
+ projectId: Id;
15
+ /** Environment */
16
+ env: string;
17
+ /** API key for authentication */
18
+ apiKey: string;
19
+ /** Default timeout in milliseconds (default: 5000 for resolve, 100 for decide) */
20
+ defaultTimeoutMs?: number;
21
+ }
22
+ export declare class DecisionClient {
23
+ private readonly config;
24
+ private readonly defaultTimeout;
25
+ constructor(config: DecisionClientConfig);
26
+ /**
27
+ * Full server-side resolution via POST /v1/resolve.
28
+ * Returns all parameter assignments resolved on the edge worker.
29
+ */
30
+ resolve(request: ServerResolveRequest): Promise<ServerResolveResponse | null>;
31
+ /**
32
+ * Per-entity edge decision via POST /v1/decide/:policyId.
33
+ */
34
+ decideEntity(request: EdgeDecideRequest, timeoutMs?: number): Promise<EdgeDecideResponse | null>;
35
+ /**
36
+ * Batch per-entity edge decisions via POST /v1/decide/batch.
37
+ */
38
+ decideEntityBatch(requests: EdgeDecideRequest[], timeoutMs?: number): Promise<(EdgeDecideResponse | null)[]>;
39
+ private _headers;
40
+ }
41
+ /**
42
+ * Creates an edge decide request from policy and context.
43
+ *
44
+ * @param policyId - The policy ID
45
+ * @param entityKeys - Array of context keys that identify the entity
46
+ * @param context - The evaluation context
47
+ * @param unitKeyValue - The unit key value
48
+ * @param allocationCount - Number of allocations (for dynamic)
49
+ * @returns The decide request, or null if entity ID cannot be built
50
+ */
51
+ export declare function createEdgeDecideRequest(policyId: Id, entityKeys: string[], context: Context, unitKeyValue: string, allocationCount?: number): EdgeDecideRequest | null;
52
+ //# sourceMappingURL=decision-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-client.d.ts","sourceRoot":"","sources":["../src/decision-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,EAAE,EACF,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAElB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,EAAE,EAAE,CAAC;IACV,iBAAiB;IACjB,SAAS,EAAE,EAAE,CAAC;IACd,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,MAAM,EAAE,oBAAoB;IAKxC;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAqCnF;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAwCrC;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC;IA0CzC,OAAO,CAAC,QAAQ;CASjB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,iBAAiB,GAAG,IAAI,CAkB1B"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * DecisionClient
3
+ *
4
+ * I/O client for Traffical server-evaluated resolution and per-entity decisions.
5
+ * Platform-agnostic (uses standard fetch API).
6
+ */
7
+ // =============================================================================
8
+ // DecisionClient
9
+ // =============================================================================
10
+ export class DecisionClient {
11
+ config;
12
+ defaultTimeout;
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.defaultTimeout = config.defaultTimeoutMs ?? 5000;
16
+ }
17
+ /**
18
+ * Full server-side resolution via POST /v1/resolve.
19
+ * Returns all parameter assignments resolved on the edge worker.
20
+ */
21
+ async resolve(request) {
22
+ try {
23
+ const controller = new AbortController();
24
+ const timeoutId = setTimeout(() => controller.abort(), this.defaultTimeout);
25
+ const url = `${this.config.baseUrl}/v1/resolve`;
26
+ const response = await fetch(url, {
27
+ method: "POST",
28
+ headers: this._headers(),
29
+ body: JSON.stringify({
30
+ context: request.context,
31
+ env: request.env ?? this.config.env,
32
+ parameters: request.parameters,
33
+ }),
34
+ signal: controller.signal,
35
+ });
36
+ clearTimeout(timeoutId);
37
+ if (!response.ok) {
38
+ console.warn(`[Traffical] Resolve failed: ${response.status} ${response.statusText}`);
39
+ return null;
40
+ }
41
+ return (await response.json());
42
+ }
43
+ catch (error) {
44
+ if (error instanceof Error && error.name === "AbortError") {
45
+ console.warn(`[Traffical] Resolve timed out after ${this.defaultTimeout}ms`);
46
+ }
47
+ else {
48
+ console.warn(`[Traffical] Resolve error:`, error);
49
+ }
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Per-entity edge decision via POST /v1/decide/:policyId.
55
+ */
56
+ async decideEntity(request, timeoutMs) {
57
+ const timeout = timeoutMs ?? Math.min(this.defaultTimeout, 100);
58
+ try {
59
+ const controller = new AbortController();
60
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
61
+ const url = `${this.config.baseUrl}/v1/decide/${request.policyId}`;
62
+ const response = await fetch(url, {
63
+ method: "POST",
64
+ headers: this._headers(),
65
+ body: JSON.stringify({
66
+ entityId: request.entityId,
67
+ unitKeyValue: request.unitKeyValue,
68
+ allocationCount: request.allocationCount,
69
+ context: request.context,
70
+ }),
71
+ signal: controller.signal,
72
+ });
73
+ clearTimeout(timeoutId);
74
+ if (!response.ok) {
75
+ console.warn(`[Traffical] Edge decide failed: ${response.status} ${response.statusText}`);
76
+ return null;
77
+ }
78
+ return (await response.json());
79
+ }
80
+ catch (error) {
81
+ if (error instanceof Error && error.name === "AbortError") {
82
+ console.warn(`[Traffical] Edge decide timed out after ${timeout}ms`);
83
+ }
84
+ else {
85
+ console.warn(`[Traffical] Edge decide error:`, error);
86
+ }
87
+ return null;
88
+ }
89
+ }
90
+ /**
91
+ * Batch per-entity edge decisions via POST /v1/decide/batch.
92
+ */
93
+ async decideEntityBatch(requests, timeoutMs) {
94
+ if (requests.length === 0)
95
+ return [];
96
+ if (requests.length === 1) {
97
+ const result = await this.decideEntity(requests[0], timeoutMs);
98
+ return [result];
99
+ }
100
+ const timeout = timeoutMs ?? Math.min(this.defaultTimeout, 200);
101
+ try {
102
+ const controller = new AbortController();
103
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
104
+ const url = `${this.config.baseUrl}/v1/decide/batch`;
105
+ const response = await fetch(url, {
106
+ method: "POST",
107
+ headers: this._headers(),
108
+ body: JSON.stringify({ requests }),
109
+ signal: controller.signal,
110
+ });
111
+ clearTimeout(timeoutId);
112
+ if (!response.ok) {
113
+ console.warn(`[Traffical] Edge batch decide failed: ${response.status} ${response.statusText}`);
114
+ return requests.map(() => null);
115
+ }
116
+ const data = (await response.json());
117
+ return data.responses;
118
+ }
119
+ catch (error) {
120
+ if (error instanceof Error && error.name === "AbortError") {
121
+ console.warn(`[Traffical] Edge batch decide timed out after ${timeout}ms`);
122
+ }
123
+ else {
124
+ console.warn(`[Traffical] Edge batch decide error:`, error);
125
+ }
126
+ return requests.map(() => null);
127
+ }
128
+ }
129
+ _headers() {
130
+ return {
131
+ "Content-Type": "application/json",
132
+ Authorization: `Bearer ${this.config.apiKey}`,
133
+ "X-Org-Id": this.config.orgId,
134
+ "X-Project-Id": this.config.projectId,
135
+ "X-Env": this.config.env,
136
+ };
137
+ }
138
+ }
139
+ // =============================================================================
140
+ // Utility Functions (moved from @traffical/core)
141
+ // =============================================================================
142
+ /**
143
+ * Creates an edge decide request from policy and context.
144
+ *
145
+ * @param policyId - The policy ID
146
+ * @param entityKeys - Array of context keys that identify the entity
147
+ * @param context - The evaluation context
148
+ * @param unitKeyValue - The unit key value
149
+ * @param allocationCount - Number of allocations (for dynamic)
150
+ * @returns The decide request, or null if entity ID cannot be built
151
+ */
152
+ export function createEdgeDecideRequest(policyId, entityKeys, context, unitKeyValue, allocationCount) {
153
+ const parts = [];
154
+ for (const key of entityKeys) {
155
+ const value = context[key];
156
+ if (value === undefined || value === null) {
157
+ return null;
158
+ }
159
+ parts.push(String(value));
160
+ }
161
+ const entityId = parts.join("_");
162
+ return {
163
+ policyId,
164
+ entityId,
165
+ unitKeyValue,
166
+ allocationCount,
167
+ context,
168
+ };
169
+ }
170
+ //# sourceMappingURL=decision-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-client.js","sourceRoot":"","sources":["../src/decision-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @traffical/core-io
3
+ *
4
+ * I/O layer for Traffical SDK.
5
+ * Provides DecisionClient for server-evaluated resolution and per-entity decisions.
6
+ */
7
+ export { DecisionClient, createEdgeDecideRequest, type DecisionClientConfig, } from "./decision-client.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @traffical/core-io
3
+ *
4
+ * I/O layer for Traffical SDK.
5
+ * Provides DecisionClient for server-evaluated resolution and per-entity decisions.
6
+ */
7
+ export { DecisionClient, createEdgeDecideRequest, } from "./decision-client.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,GAExB,MAAM,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@traffical/core-io",
3
+ "version": "0.3.0",
4
+ "description": "I/O layer for Traffical SDK - DecisionClient for server-evaluated resolution",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "test": "bun test",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "dependencies": {
25
+ "@traffical/core": "0.3.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/bun": "latest",
29
+ "typescript": "^5.3.0"
30
+ },
31
+ "keywords": [
32
+ "traffical",
33
+ "feature-flags",
34
+ "experimentation",
35
+ "decision-client"
36
+ ],
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/traffical/js-sdk"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ }
45
+ }