@techinject/server 0.0.0-stage → 0.1.0-alpha.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SignalKit contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
- # Temporary Holding Version
1
+ # @techinject/server
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ SignalKit server adapter/package. MIT licensed, local v1.
4
+
5
+ See https://github.com/TechInjectIndia/signal-kit/tree/main/packages/features/signals/INTEGRATION.md for wiring, consent behavior and verification limits.
@@ -0,0 +1,51 @@
1
+ import { createSignals } from '@techinject/core';
2
+ import type { Consent, Observer, Provider } from '@techinject/contracts';
3
+ export type ServerConfig = Parameters<typeof createSignals>[0] & {
4
+ observer?: Observer;
5
+ traceOrigins?: string[];
6
+ excludeUrls?: string[];
7
+ fetch?: typeof globalThis.fetch;
8
+ };
9
+ export declare function createServerSignals(config?: ServerConfig): {
10
+ fetch: typeof fetch;
11
+ wrapFetch: (transport: typeof globalThis.fetch) => typeof globalThis.fetch;
12
+ setConsent(consent: Consent): void;
13
+ handle(request: Request, handler: (request: Request) => Response | Promise<Response>, options?: {
14
+ route?: string;
15
+ }): Promise<Response>;
16
+ flush(): Promise<void>;
17
+ dispose(): void;
18
+ track: (input: import("@techinject/contracts").EventInput) => Promise<import("@techinject/contracts").DispatchResult>;
19
+ getConsent: () => {
20
+ analytics: boolean;
21
+ marketing: boolean;
22
+ observability: boolean;
23
+ };
24
+ getConnections: () => import("@techinject/core").ConnectionStatus[];
25
+ subscribeConnections(listener: () => void): () => void;
26
+ };
27
+ export type ServerSignals = ReturnType<typeof createServerSignals>;
28
+ export interface MetaCapiOptions {
29
+ pixelId: string;
30
+ accessToken: string;
31
+ /** Require an explicit supported Graph API version; never silently use latest. */
32
+ apiVersion?: string;
33
+ endpoint?: string;
34
+ fetch?: typeof globalThis.fetch;
35
+ testEventCode?: string;
36
+ /** Only SHA-256 hashed em/ph/external_id and validated fbp/fbc are accepted. */
37
+ userData?: () => Record<string, string | string[]>;
38
+ eventSourceUrl?: string;
39
+ }
40
+ export declare function createMetaCapiProvider(options: MetaCapiOptions): Provider;
41
+ export interface OTLPOptions {
42
+ endpoint: string;
43
+ serviceName: string;
44
+ headers?: Record<string, string>;
45
+ fetch?: typeof globalThis.fetch;
46
+ maxPending?: number;
47
+ timeoutMs?: number;
48
+ onError?: (reason: 'capacity' | 'transport' | 'timeout') => void;
49
+ }
50
+ export declare function createOTLPObserver(options: OTLPOptions): Observer;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA+B,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAGR,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC,CAAC;AAYF,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,YAAiB;;2BAsC7C,OAAO,UAAU,CAAC,KAAK,KAAG,OAAO,UAAU,CAAC,KAAK;wBAkDzC,OAAO;oBAShB,OAAO,WACP,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAClD;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1B,OAAO,CAAC,QAAQ,CAAC;;;;;;;;;;;EA6CvB;AACD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AASnE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA4BD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CA+DzE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC;CAClE;AACD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,CAoHjE"}
package/dist/index.js ADDED
@@ -0,0 +1,374 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { createSignals, safeRoute, parseTraceparent } from '@techinject/core';
3
+ const randomHex = (bytes) => Array.from(crypto.getRandomValues(new Uint8Array(bytes)), (b) => b.toString(16).padStart(2, '0')).join('');
4
+ function trace(header) {
5
+ const match = /^00-([a-f0-9]{32})-([a-f0-9]{16})-([a-f0-9]{2})$/.exec(header ?? '');
6
+ return match && !/^0+$/.test(match[1]) && !/^0+$/.test(match[2])
7
+ ? { traceId: match[1], parentSpanId: match[2], spanId: randomHex(8), flags: match[3] }
8
+ : { traceId: randomHex(16), spanId: randomHex(8), flags: '01' };
9
+ }
10
+ export function createServerSignals(config = {}) {
11
+ const signals = createSignals(config);
12
+ const context = new AsyncLocalStorage();
13
+ let disposed = false;
14
+ const observations = new Set();
15
+ const maxObservations = Number.isFinite(config.maxPending)
16
+ ? Math.max(1, Math.min(100, Math.floor(config.maxPending)))
17
+ : 20;
18
+ const observationTimeout = Number.isFinite(config.timeoutMs)
19
+ ? Math.max(1, Math.min(30_000, config.timeoutMs))
20
+ : 2000;
21
+ try {
22
+ config.observer?.setConsent?.(signals.getConsent());
23
+ }
24
+ catch {
25
+ /* isolated */
26
+ }
27
+ const excluded = (url) => (config.excludeUrls ?? []).some((value) => url.includes(value));
28
+ const observe = (record) => {
29
+ if (disposed || !signals.getConsent().observability || observations.size >= maxObservations)
30
+ return;
31
+ // Bound even a custom observer that never settles; it cannot delay host responses.
32
+ let timer;
33
+ const deadline = new Promise((resolve) => {
34
+ timer = setTimeout(resolve, observationTimeout);
35
+ });
36
+ let delivery;
37
+ try {
38
+ delivery = Promise.resolve(config.observer?.record(record)).catch(() => undefined);
39
+ }
40
+ catch {
41
+ delivery = Promise.resolve();
42
+ }
43
+ const pending = Promise.race([delivery, deadline]).finally(() => {
44
+ clearTimeout(timer);
45
+ observations.delete(pending);
46
+ });
47
+ observations.add(pending);
48
+ };
49
+ const instrumentFetch = (transport) => async (input, init) => {
50
+ const url = input instanceof Request ? input.url : String(input);
51
+ if (disposed || !signals.getConsent().observability || excluded(url))
52
+ return transport(input, init);
53
+ const request = new Request(input, init);
54
+ const parent = context.getStore();
55
+ const headers = new Headers(request.headers);
56
+ const existingHeader = headers.get('traceparent');
57
+ const existing = parseTraceparent(existingHeader);
58
+ // The outgoing record identifies the span actually propagated on the wire.
59
+ const span = existing
60
+ ? {
61
+ traceId: existing.traceId,
62
+ spanId: existing.spanId,
63
+ flags: existingHeader.split('-')[3],
64
+ }
65
+ : parent
66
+ ? { ...parent, parentSpanId: parent.spanId, spanId: randomHex(8) }
67
+ : trace(null);
68
+ if ((config.traceOrigins ?? []).includes(new URL(request.url).origin) &&
69
+ !headers.has('traceparent')) {
70
+ headers.set('traceparent', `00-${span.traceId}-${span.spanId}-${span.flags}`);
71
+ }
72
+ const start = performance.now();
73
+ const startTime = Date.now();
74
+ let status = 0;
75
+ try {
76
+ const response = await transport(new Request(request, { headers }));
77
+ status = response.status;
78
+ return response;
79
+ }
80
+ finally {
81
+ observe({
82
+ kind: 'request',
83
+ route: safeRoute(request.url),
84
+ method: request.method,
85
+ status,
86
+ durationMs: performance.now() - start,
87
+ ...span,
88
+ error: status === 0 || status >= 400,
89
+ ...{ startTime, spanKind: 3 },
90
+ });
91
+ }
92
+ };
93
+ return {
94
+ ...signals,
95
+ fetch: instrumentFetch(config.fetch ?? globalThis.fetch),
96
+ wrapFetch: instrumentFetch,
97
+ setConsent(consent) {
98
+ signals.setConsent(consent);
99
+ try {
100
+ config.observer?.setConsent?.(signals.getConsent());
101
+ }
102
+ catch {
103
+ /* isolated */
104
+ }
105
+ },
106
+ async handle(request, handler, options = {}) {
107
+ if (disposed || !signals.getConsent().observability || excluded(request.url))
108
+ return handler(request);
109
+ const span = trace(request.headers.get('traceparent'));
110
+ const start = performance.now();
111
+ const startTime = Date.now();
112
+ return context.run(span, async () => {
113
+ let status = 0;
114
+ try {
115
+ const response = await handler(request);
116
+ status = response.status;
117
+ return response;
118
+ }
119
+ finally {
120
+ observe({
121
+ kind: 'request',
122
+ route: safeRoute(request.url, options.route),
123
+ method: request.method,
124
+ status,
125
+ durationMs: performance.now() - start,
126
+ ...span,
127
+ error: status === 0 || status >= 400,
128
+ ...{ startTime, spanKind: 2 },
129
+ });
130
+ }
131
+ });
132
+ },
133
+ async flush() {
134
+ await signals.flush();
135
+ await Promise.all([...observations]);
136
+ try {
137
+ await config.observer?.flush?.();
138
+ }
139
+ catch {
140
+ /* isolated */
141
+ }
142
+ },
143
+ dispose() {
144
+ disposed = true;
145
+ signals.dispose();
146
+ try {
147
+ config.observer?.dispose?.();
148
+ }
149
+ catch {
150
+ /* isolated */
151
+ }
152
+ },
153
+ };
154
+ }
155
+ const metaNames = {
156
+ page_view: 'PageView',
157
+ product_view: 'ViewContent',
158
+ add_to_cart: 'AddToCart',
159
+ begin_checkout: 'InitiateCheckout',
160
+ purchase: 'Purchase',
161
+ };
162
+ function safeUserData(input) {
163
+ const result = {};
164
+ for (const key of ['em', 'ph', 'external_id']) {
165
+ const raw = input[key];
166
+ if (raw === undefined)
167
+ continue;
168
+ const values = Array.isArray(raw) ? raw : [raw];
169
+ if (values.length > 10 || !values.every((value) => /^[a-f0-9]{64}$/i.test(value)))
170
+ throw new Error('Invalid hashed matching data');
171
+ result[key] = values;
172
+ }
173
+ for (const key of ['fbp', 'fbc']) {
174
+ const value = input[key];
175
+ if (value !== undefined) {
176
+ if (typeof value !== 'string' ||
177
+ value.length > 256 ||
178
+ !/^fb\.\d+\.\d+\.[A-Za-z0-9_-]+$/.test(value))
179
+ throw new Error('Invalid matching cookie');
180
+ result[key] = value;
181
+ }
182
+ }
183
+ if (Object.keys(input).some((key) => !['em', 'ph', 'external_id', 'fbp', 'fbc'].includes(key)))
184
+ throw new Error('Unsupported matching data');
185
+ if (Object.keys(result).length === 0)
186
+ throw new Error('Matching data required');
187
+ return result;
188
+ }
189
+ export function createMetaCapiProvider(options) {
190
+ if (!/^\d+$/.test(options.pixelId) || !options.accessToken)
191
+ throw new Error('Invalid Meta configuration');
192
+ if (!options.endpoint && !/^v\d+\.\d+$/.test(options.apiVersion ?? ''))
193
+ throw new Error('Explicit Graph API version required');
194
+ const endpoint = options.endpoint ??
195
+ `https://graph.facebook.com/${options.apiVersion}/${options.pixelId}/events`;
196
+ const transport = options.fetch ?? globalThis.fetch;
197
+ const source = options.eventSourceUrl ? new URL(options.eventSourceUrl) : undefined;
198
+ if (source) {
199
+ source.pathname = safeRoute(source);
200
+ source.search = '';
201
+ source.hash = '';
202
+ source.username = '';
203
+ source.password = '';
204
+ }
205
+ return {
206
+ name: 'meta-capi',
207
+ category: 'marketing',
208
+ async send(event, signal) {
209
+ const data = safeUserData(options.userData?.() ?? {});
210
+ const items = event.properties.items;
211
+ const customData = {
212
+ currency: event.properties.currency,
213
+ value: event.properties.value,
214
+ order_id: event.properties.transaction_id,
215
+ content_type: 'product',
216
+ content_ids: items?.map((item) => item.item_id).filter(Boolean),
217
+ contents: items?.map((item) => ({
218
+ id: item.item_id,
219
+ quantity: item.quantity ?? 1,
220
+ item_price: item.price,
221
+ })),
222
+ };
223
+ const response = await transport(endpoint, {
224
+ method: 'POST',
225
+ signal: signal ?? null,
226
+ headers: { 'content-type': 'application/json' },
227
+ body: JSON.stringify({
228
+ access_token: options.accessToken,
229
+ test_event_code: options.testEventCode,
230
+ data: [
231
+ {
232
+ event_name: metaNames[event.name],
233
+ event_time: Math.floor(event.timestamp / 1000),
234
+ event_id: event.eventId,
235
+ action_source: 'website',
236
+ event_source_url: source?.href,
237
+ user_data: data,
238
+ custom_data: customData,
239
+ },
240
+ ],
241
+ }),
242
+ });
243
+ if (!response.ok)
244
+ throw new Error('Meta transport rejected event');
245
+ const payload = (await response.json());
246
+ if (payload.error || payload.events_received !== 1)
247
+ throw new Error('Meta did not accept event');
248
+ },
249
+ };
250
+ }
251
+ export function createOTLPObserver(options) {
252
+ const transport = options.fetch ?? globalThis.fetch;
253
+ const pending = new Set();
254
+ const controllers = new Set();
255
+ const max = Number.isFinite(options.maxPending)
256
+ ? Math.max(1, Math.min(100, Math.floor(options.maxPending)))
257
+ : 20;
258
+ const timeout = Number.isFinite(options.timeoutMs)
259
+ ? Math.max(10, Math.min(30_000, options.timeoutMs))
260
+ : 2000;
261
+ let disposed = false;
262
+ let allowed = true;
263
+ const diagnostic = (reason) => {
264
+ try {
265
+ options.onError?.(reason);
266
+ }
267
+ catch {
268
+ /* isolated */
269
+ }
270
+ };
271
+ return {
272
+ record(record) {
273
+ if (disposed || !allowed)
274
+ return;
275
+ if (pending.size >= max) {
276
+ diagnostic('capacity');
277
+ return;
278
+ }
279
+ const controller = new AbortController();
280
+ controllers.add(controller);
281
+ const data = record;
282
+ const end = Date.now();
283
+ const start = data.startTime ?? end - record.durationMs;
284
+ const route = safeRoute(record.route);
285
+ const attributes = [
286
+ { key: 'http.request.method', value: { stringValue: record.method } },
287
+ { key: 'http.route', value: { stringValue: route } },
288
+ { key: 'http.response.status_code', value: { intValue: String(record.status) } },
289
+ ];
290
+ const body = JSON.stringify({
291
+ resourceSpans: [
292
+ {
293
+ resource: {
294
+ attributes: [{ key: 'service.name', value: { stringValue: options.serviceName } }],
295
+ },
296
+ scopeSpans: [
297
+ {
298
+ scope: { name: '@techinject/server', version: '0.1.0-alpha.1' },
299
+ spans: [
300
+ {
301
+ traceId: record.traceId ?? randomHex(16),
302
+ spanId: record.spanId ?? randomHex(8),
303
+ parentSpanId: record.parentSpanId,
304
+ name: `${record.method} ${route}`,
305
+ kind: data.spanKind ?? 3,
306
+ startTimeUnixNano: String(BigInt(Math.floor(start * 1_000_000))),
307
+ endTimeUnixNano: String(BigInt(end) * 1000000n),
308
+ attributes,
309
+ status: { code: record.error ? 2 : 0 },
310
+ },
311
+ ],
312
+ },
313
+ ],
314
+ },
315
+ ],
316
+ });
317
+ let timer;
318
+ const deadline = new Promise((resolve) => {
319
+ controller.signal.addEventListener('abort', () => resolve(), { once: true });
320
+ timer = setTimeout(() => {
321
+ diagnostic('timeout');
322
+ controller.abort();
323
+ resolve();
324
+ }, timeout);
325
+ });
326
+ const delivery = Promise.resolve()
327
+ .then(async () => {
328
+ if (controller.signal.aborted)
329
+ return;
330
+ const response = await transport(options.endpoint, {
331
+ method: 'POST',
332
+ headers: { ...options.headers, 'content-type': 'application/json' },
333
+ body,
334
+ signal: controller.signal,
335
+ });
336
+ if (!response.ok)
337
+ throw new Error('OTLP rejected span');
338
+ // OTLP partial rejection is not successful delivery.
339
+ const text = await response.text();
340
+ if (text) {
341
+ const result = JSON.parse(text);
342
+ if (Number(result.partialSuccess?.rejectedSpans ?? 0) > 0)
343
+ throw new Error('OTLP rejected spans');
344
+ }
345
+ })
346
+ .catch(() => {
347
+ if (!controller.signal.aborted)
348
+ diagnostic('transport');
349
+ });
350
+ const task = Promise.race([delivery, deadline]).finally(() => {
351
+ clearTimeout(timer);
352
+ controllers.delete(controller);
353
+ pending.delete(task);
354
+ });
355
+ pending.add(task);
356
+ return task;
357
+ },
358
+ setConsent(consent) {
359
+ allowed = consent.observability === true;
360
+ if (!allowed)
361
+ for (const controller of controllers)
362
+ controller.abort();
363
+ },
364
+ async flush() {
365
+ await Promise.all([...pending]);
366
+ },
367
+ dispose() {
368
+ disposed = true;
369
+ for (const controller of controllers)
370
+ controller.abort();
371
+ },
372
+ };
373
+ }
374
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,42 @@
1
1
  {
2
2
  "name": "@techinject/server",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0-alpha.1",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "LICENSE",
18
+ "README.md"
19
+ ],
20
+ "dependencies": {
21
+ "@techinject/contracts": "0.1.0-alpha.1",
22
+ "@techinject/core": "0.1.0-alpha.1"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/TechInjectIndia/signal-kit.git",
27
+ "directory": "packages/features/signals/server"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "engines": {
33
+ "node": ">=22"
34
+ },
35
+ "description": "SignalKit server consent-aware telemetry package",
36
+ "scripts": {
37
+ "build": "tsc -p tsconfig.json",
38
+ "typecheck": "tsc -p tsconfig.json --noEmit",
39
+ "test": "vitest run",
40
+ "lint": "tsc -p tsconfig.json --noEmit"
41
+ }
6
42
  }