@traffical/svelte 0.1.2 → 0.1.3
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 +122 -6
- package/dist/server.d.ts +45 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +50 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -3
- package/src/server.ts +68 -0
- package/src/types.ts +3 -0
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
|
|
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
|
-
###
|
|
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/
|
|
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/
|
|
398
|
+
import { resolveParamsSSR } from '@traffical/svelte/server';
|
|
283
399
|
|
|
284
400
|
const params = resolveParamsSSR(bundle, { userId: 'user_123' }, {
|
|
285
401
|
'feature.name': 'default',
|
package/dist/server.d.ts
ADDED
|
@@ -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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.1.3",
|
|
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
|
+
|