@traffical/svelte 0.1.2 → 0.1.4

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/README.md CHANGED
@@ -82,9 +82,95 @@ In your root layout, initialize Traffical:
82
82
 
83
83
  ## SSR with SvelteKit
84
84
 
85
- For optimal performance and to prevent content flashing, fetch the config bundle on the server:
85
+ For optimal performance and to prevent content flashing, fetch the config bundle on the server.
86
86
 
87
- ### Server Load Function
87
+ ### Option A: Singleton Server Client (Recommended)
88
+
89
+ For production apps, use a singleton server client with caching, background refresh, and event tracking:
90
+
91
+ ```typescript
92
+ // src/hooks.server.ts
93
+ import { createTrafficalClient } from '@traffical/svelte/server';
94
+ import { TRAFFICAL_API_KEY } from '$env/static/private';
95
+
96
+ // Singleton client with ETag caching, background refresh, and event batching
97
+ const traffical = await createTrafficalClient({
98
+ orgId: 'org_123',
99
+ projectId: 'proj_456',
100
+ env: 'production',
101
+ apiKey: TRAFFICAL_API_KEY,
102
+ });
103
+
104
+ export const handle = async ({ event, resolve }) => {
105
+ event.locals.traffical = traffical;
106
+ return resolve(event);
107
+ };
108
+ ```
109
+
110
+ Then use it in your load functions:
111
+
112
+ ```typescript
113
+ // src/routes/+layout.server.ts
114
+ export async function load({ locals }) {
115
+ return {
116
+ traffical: { bundle: locals.traffical.getBundle() },
117
+ };
118
+ }
119
+ ```
120
+
121
+ ```typescript
122
+ // src/routes/checkout/+page.server.ts
123
+ export async function load({ locals, cookies }) {
124
+ const userId = cookies.get('userId') || 'anonymous';
125
+
126
+ // Full decision with tracking
127
+ const decision = locals.traffical.decide({
128
+ context: { userId },
129
+ defaults: {
130
+ 'checkout.ctaText': 'Buy Now',
131
+ 'checkout.ctaColor': '#000000',
132
+ },
133
+ });
134
+
135
+ return {
136
+ checkoutParams: decision.values,
137
+ };
138
+ }
139
+ ```
140
+
141
+ Track events from API routes:
142
+
143
+ ```typescript
144
+ // src/routes/api/purchase/+server.ts
145
+ export async function POST({ locals, request }) {
146
+ const { orderId, amount } = await request.json();
147
+
148
+ locals.traffical.track('purchase', { value: amount, orderId });
149
+
150
+ return new Response('OK');
151
+ }
152
+ ```
153
+
154
+ Don't forget to type `event.locals` in `app.d.ts`:
155
+
156
+ ```typescript
157
+ // src/app.d.ts
158
+ import type { TrafficalClient } from '@traffical/svelte/server';
159
+
160
+ declare global {
161
+ namespace App {
162
+ interface Locals {
163
+ traffical: TrafficalClient;
164
+ }
165
+ }
166
+ }
167
+
168
+ export {};
169
+ ```
170
+
171
+ ### Option B: Simple Load Function
172
+
173
+ For simpler apps, fetch the bundle per-request using SvelteKit's fetch:
88
174
 
89
175
  ```typescript
90
176
  // src/routes/+layout.server.ts
@@ -256,14 +342,44 @@ const domPlugin = useTrafficalPlugin<DOMBindingPlugin>('dom-binding');
256
342
  domPlugin?.applyBindings();
257
343
  ```
258
344
 
259
- ### SvelteKit Helpers
345
+ ### Server-Side Utilities
346
+
347
+ Import from `@traffical/svelte/server` for full server-side support:
348
+
349
+ #### `createTrafficalClient(options)`
350
+
351
+ Create a singleton server client with caching, background refresh, and event tracking.
352
+
353
+ ```typescript
354
+ import { createTrafficalClient } from '@traffical/svelte/server';
355
+
356
+ const traffical = await createTrafficalClient({
357
+ orgId: 'org_123',
358
+ projectId: 'proj_456',
359
+ env: 'production',
360
+ apiKey: 'sk_...',
361
+ });
362
+
363
+ // Make decisions with tracking
364
+ const decision = traffical.decide({
365
+ context: { userId: 'user_123' },
366
+ defaults: { 'feature.enabled': false },
367
+ });
368
+
369
+ // Track events
370
+ traffical.track('purchase', { value: 99.99 });
371
+
372
+ // Clean up on shutdown
373
+ await traffical.destroy();
374
+ ```
260
375
 
261
376
  #### `loadTrafficalBundle(options)`
262
377
 
263
- Fetch the config bundle in a SvelteKit load function.
378
+ Fetch the config bundle in a SvelteKit load function (simpler alternative).
264
379
 
265
380
  ```typescript
266
- import { loadTrafficalBundle } from '@traffical/svelte/sveltekit';
381
+ import { loadTrafficalBundle } from '@traffical/svelte/server';
382
+ // or: import { loadTrafficalBundle } from '@traffical/svelte/sveltekit';
267
383
 
268
384
  const { bundle, error } = await loadTrafficalBundle({
269
385
  orgId: 'org_123',
@@ -279,7 +395,7 @@ const { bundle, error } = await loadTrafficalBundle({
279
395
  Resolve parameters on the server for SSR.
280
396
 
281
397
  ```typescript
282
- import { resolveParamsSSR } from '@traffical/svelte/sveltekit';
398
+ import { resolveParamsSSR } from '@traffical/svelte/server';
283
399
 
284
400
  const params = resolveParamsSSR(bundle, { userId: 'user_123' }, {
285
401
  'feature.name': 'default',
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @traffical/svelte - Server-side utilities
3
+ *
4
+ * Re-exports @traffical/node for SvelteKit server-side usage.
5
+ * Use this in hooks.server.ts, +server.ts, and +page.server.ts.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // hooks.server.ts - Singleton server client
10
+ * import { createTrafficalClient } from '@traffical/svelte/server';
11
+ * import { TRAFFICAL_API_KEY } from '$env/static/private';
12
+ *
13
+ * const traffical = await createTrafficalClient({
14
+ * orgId: 'org_123',
15
+ * projectId: 'proj_456',
16
+ * env: 'production',
17
+ * apiKey: TRAFFICAL_API_KEY,
18
+ * });
19
+ *
20
+ * export const handle = async ({ event, resolve }) => {
21
+ * event.locals.traffical = traffical;
22
+ * return resolve(event);
23
+ * };
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // +page.server.ts - Use the client
29
+ * export async function load({ locals, cookies }) {
30
+ * const userId = cookies.get('userId');
31
+ *
32
+ * const decision = locals.traffical.decide({
33
+ * context: { userId },
34
+ * defaults: { 'checkout.cta': 'Buy Now' },
35
+ * });
36
+ *
37
+ * return { params: decision.values };
38
+ * }
39
+ * ```
40
+ */
41
+ export { TrafficalClient, createTrafficalClient, createTrafficalClientSync, } from "@traffical/node";
42
+ export { loadTrafficalBundle, resolveParamsSSR } from "./sveltekit.js";
43
+ export type { TrafficalClientOptions } from "@traffical/node";
44
+ export type { LoadTrafficalBundleOptions, LoadTrafficalBundleResult, } from "./types.js";
45
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAMH,OAAO,EAEL,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMvE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @traffical/svelte - Server-side utilities
3
+ *
4
+ * Re-exports @traffical/node for SvelteKit server-side usage.
5
+ * Use this in hooks.server.ts, +server.ts, and +page.server.ts.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // hooks.server.ts - Singleton server client
10
+ * import { createTrafficalClient } from '@traffical/svelte/server';
11
+ * import { TRAFFICAL_API_KEY } from '$env/static/private';
12
+ *
13
+ * const traffical = await createTrafficalClient({
14
+ * orgId: 'org_123',
15
+ * projectId: 'proj_456',
16
+ * env: 'production',
17
+ * apiKey: TRAFFICAL_API_KEY,
18
+ * });
19
+ *
20
+ * export const handle = async ({ event, resolve }) => {
21
+ * event.locals.traffical = traffical;
22
+ * return resolve(event);
23
+ * };
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // +page.server.ts - Use the client
29
+ * export async function load({ locals, cookies }) {
30
+ * const userId = cookies.get('userId');
31
+ *
32
+ * const decision = locals.traffical.decide({
33
+ * context: { userId },
34
+ * defaults: { 'checkout.cta': 'Buy Now' },
35
+ * });
36
+ *
37
+ * return { params: decision.values };
38
+ * }
39
+ * ```
40
+ */
41
+ // =============================================================================
42
+ // Re-export from @traffical/node
43
+ // =============================================================================
44
+ export {
45
+ // Client
46
+ TrafficalClient, createTrafficalClient, createTrafficalClientSync, } from "@traffical/node";
47
+ // =============================================================================
48
+ // Re-export SvelteKit-specific helpers
49
+ // =============================================================================
50
+ export { loadTrafficalBundle, resolveParamsSSR } from "./sveltekit.js";
package/dist/types.d.ts CHANGED
@@ -203,4 +203,5 @@ export interface LoadTrafficalBundleResult {
203
203
  error?: string;
204
204
  }
205
205
  export type { ConfigBundle, Context, DecisionResult, ParameterValue, TrafficalClient, TrafficalPlugin, };
206
+ export type { TrafficalClientOptions } from "@traffical/node";
206
207
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traffical/svelte",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Traffical SDK for Svelte 5 - Provider and hooks for parameter resolution with SSR support",
5
5
  "type": "module",
6
6
  "svelte": "./src/index.ts",
@@ -18,6 +18,11 @@
18
18
  "types": "./dist/sveltekit.d.ts",
19
19
  "bun": "./src/sveltekit.ts",
20
20
  "import": "./src/sveltekit.ts"
21
+ },
22
+ "./server": {
23
+ "types": "./dist/server.d.ts",
24
+ "bun": "./src/server.ts",
25
+ "import": "./src/server.ts"
21
26
  }
22
27
  },
23
28
  "files": [
@@ -28,11 +33,13 @@
28
33
  "build": "svelte-package --input src",
29
34
  "dev": "svelte-package --input src --watch",
30
35
  "test": "bun test",
31
- "typecheck": "svelte-check --tsconfig ./tsconfig.json"
36
+ "typecheck": "svelte-check --tsconfig ./tsconfig.json",
37
+ "release": "bun scripts/release.ts"
32
38
  },
33
39
  "dependencies": {
34
40
  "@traffical/core": "^0.1.3",
35
- "@traffical/js-client": "^0.1.4"
41
+ "@traffical/js-client": "^0.1.4",
42
+ "@traffical/node": "^0.1.4"
36
43
  },
37
44
  "devDependencies": {
38
45
  "@sveltejs/package": "^2.3.0",
package/src/server.ts ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @traffical/svelte - Server-side utilities
3
+ *
4
+ * Re-exports @traffical/node for SvelteKit server-side usage.
5
+ * Use this in hooks.server.ts, +server.ts, and +page.server.ts.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // hooks.server.ts - Singleton server client
10
+ * import { createTrafficalClient } from '@traffical/svelte/server';
11
+ * import { TRAFFICAL_API_KEY } from '$env/static/private';
12
+ *
13
+ * const traffical = await createTrafficalClient({
14
+ * orgId: 'org_123',
15
+ * projectId: 'proj_456',
16
+ * env: 'production',
17
+ * apiKey: TRAFFICAL_API_KEY,
18
+ * });
19
+ *
20
+ * export const handle = async ({ event, resolve }) => {
21
+ * event.locals.traffical = traffical;
22
+ * return resolve(event);
23
+ * };
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // +page.server.ts - Use the client
29
+ * export async function load({ locals, cookies }) {
30
+ * const userId = cookies.get('userId');
31
+ *
32
+ * const decision = locals.traffical.decide({
33
+ * context: { userId },
34
+ * defaults: { 'checkout.cta': 'Buy Now' },
35
+ * });
36
+ *
37
+ * return { params: decision.values };
38
+ * }
39
+ * ```
40
+ */
41
+
42
+ // =============================================================================
43
+ // Re-export from @traffical/node
44
+ // =============================================================================
45
+
46
+ export {
47
+ // Client
48
+ TrafficalClient,
49
+ createTrafficalClient,
50
+ createTrafficalClientSync,
51
+ } from "@traffical/node";
52
+
53
+ // =============================================================================
54
+ // Re-export SvelteKit-specific helpers
55
+ // =============================================================================
56
+
57
+ export { loadTrafficalBundle, resolveParamsSSR } from "./sveltekit.js";
58
+
59
+ // =============================================================================
60
+ // Types
61
+ // =============================================================================
62
+
63
+ export type { TrafficalClientOptions } from "@traffical/node";
64
+ export type {
65
+ LoadTrafficalBundleOptions,
66
+ LoadTrafficalBundleResult,
67
+ } from "./types.js";
68
+
package/src/types.ts CHANGED
@@ -294,3 +294,6 @@ export type {
294
294
  TrafficalPlugin,
295
295
  };
296
296
 
297
+ // Server-side types (from @traffical/node)
298
+ export type { TrafficalClientOptions } from "@traffical/node";
299
+