@linkforty/core 1.0.0 → 1.2.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.
Files changed (61) hide show
  1. package/dist/index.d.ts +4 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +26 -43
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/database.d.ts.map +1 -1
  6. package/dist/lib/database.js +160 -12
  7. package/dist/lib/database.js.map +1 -1
  8. package/dist/lib/event-emitter.d.ts +46 -0
  9. package/dist/lib/event-emitter.d.ts.map +1 -0
  10. package/dist/lib/event-emitter.js +24 -0
  11. package/dist/lib/event-emitter.js.map +1 -0
  12. package/dist/lib/fingerprint.d.ts +64 -0
  13. package/dist/lib/fingerprint.d.ts.map +1 -0
  14. package/dist/lib/fingerprint.js +343 -0
  15. package/dist/lib/fingerprint.js.map +1 -0
  16. package/dist/lib/utils.d.ts +1 -0
  17. package/dist/lib/utils.d.ts.map +1 -1
  18. package/dist/lib/utils.js +12 -21
  19. package/dist/lib/utils.js.map +1 -1
  20. package/dist/lib/webhook.d.ts +18 -0
  21. package/dist/lib/webhook.d.ts.map +1 -0
  22. package/dist/lib/webhook.js +141 -0
  23. package/dist/lib/webhook.js.map +1 -0
  24. package/dist/routes/analytics.js +14 -17
  25. package/dist/routes/analytics.js.map +1 -1
  26. package/dist/routes/debug.d.ts +7 -0
  27. package/dist/routes/debug.d.ts.map +1 -0
  28. package/dist/routes/debug.js +318 -0
  29. package/dist/routes/debug.js.map +1 -0
  30. package/dist/routes/index.d.ts +5 -0
  31. package/dist/routes/index.d.ts.map +1 -1
  32. package/dist/routes/index.js +8 -9
  33. package/dist/routes/index.js.map +1 -1
  34. package/dist/routes/links.d.ts.map +1 -1
  35. package/dist/routes/links.js +53 -38
  36. package/dist/routes/links.js.map +1 -1
  37. package/dist/routes/preview.d.ts +3 -0
  38. package/dist/routes/preview.d.ts.map +1 -0
  39. package/dist/routes/preview.js +222 -0
  40. package/dist/routes/preview.js.map +1 -0
  41. package/dist/routes/qr.d.ts +6 -0
  42. package/dist/routes/qr.d.ts.map +1 -0
  43. package/dist/routes/qr.js +130 -0
  44. package/dist/routes/qr.js.map +1 -0
  45. package/dist/routes/redirect.d.ts.map +1 -1
  46. package/dist/routes/redirect.js +142 -22
  47. package/dist/routes/redirect.js.map +1 -1
  48. package/dist/routes/sdk.d.ts +7 -0
  49. package/dist/routes/sdk.d.ts.map +1 -0
  50. package/dist/routes/sdk.js +262 -0
  51. package/dist/routes/sdk.js.map +1 -0
  52. package/dist/routes/webhooks.d.ts +3 -0
  53. package/dist/routes/webhooks.d.ts.map +1 -0
  54. package/dist/routes/webhooks.js +176 -0
  55. package/dist/routes/webhooks.js.map +1 -0
  56. package/dist/scripts/migrate.js +2 -4
  57. package/dist/scripts/migrate.js.map +1 -1
  58. package/dist/types/index.d.ts +81 -0
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/index.js +1 -2
  61. package/package.json +11 -7
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyticsRoutes = analyticsRoutes;
4
- const database_js_1 = require("../lib/database.js");
5
- async function analyticsRoutes(fastify) {
1
+ import { db } from '../lib/database.js';
2
+ export async function analyticsRoutes(fastify) {
6
3
  // Get overall analytics for a user
7
4
  fastify.get('/api/analytics/overview', async (request) => {
8
5
  const { userId, days = 30 } = request.query;
@@ -10,14 +7,14 @@ async function analyticsRoutes(fastify) {
10
7
  throw new Error('userId query parameter is required');
11
8
  }
12
9
  // Get total and unique clicks
13
- const clicksResult = await database_js_1.db.query(`SELECT
10
+ const clicksResult = await db.query(`SELECT
14
11
  COUNT(*) as total_clicks,
15
12
  COUNT(DISTINCT ip_address) as unique_clicks
16
13
  FROM click_events ce
17
14
  JOIN links l ON ce.link_id = l.id
18
15
  WHERE l.user_id = $1 AND ce.clicked_at >= NOW() - INTERVAL '${days} days'`, [userId]);
19
16
  // Get clicks by date
20
- const dateResult = await database_js_1.db.query(`SELECT
17
+ const dateResult = await db.query(`SELECT
21
18
  DATE(ce.clicked_at) as date,
22
19
  COUNT(*) as clicks
23
20
  FROM click_events ce
@@ -26,7 +23,7 @@ async function analyticsRoutes(fastify) {
26
23
  GROUP BY DATE(ce.clicked_at)
27
24
  ORDER BY date`, [userId]);
28
25
  // Get clicks by country
29
- const countryResult = await database_js_1.db.query(`SELECT
26
+ const countryResult = await db.query(`SELECT
30
27
  COALESCE(ce.country_code, 'Unknown') as country_code,
31
28
  COALESCE(ce.country_name, ce.country_code, 'Unknown') as country,
32
29
  COUNT(*) as clicks
@@ -36,7 +33,7 @@ async function analyticsRoutes(fastify) {
36
33
  GROUP BY ce.country_code, ce.country_name
37
34
  ORDER BY clicks DESC`, [userId]);
38
35
  // Get clicks by device
39
- const deviceResult = await database_js_1.db.query(`SELECT
36
+ const deviceResult = await db.query(`SELECT
40
37
  COALESCE(ce.device_type, 'Unknown') as device,
41
38
  COUNT(*) as clicks
42
39
  FROM click_events ce
@@ -45,7 +42,7 @@ async function analyticsRoutes(fastify) {
45
42
  GROUP BY ce.device_type
46
43
  ORDER BY clicks DESC`, [userId]);
47
44
  // Get clicks by platform
48
- const platformResult = await database_js_1.db.query(`SELECT
45
+ const platformResult = await db.query(`SELECT
49
46
  COALESCE(ce.platform, 'Unknown') as platform,
50
47
  COUNT(*) as clicks
51
48
  FROM click_events ce
@@ -54,7 +51,7 @@ async function analyticsRoutes(fastify) {
54
51
  GROUP BY ce.platform
55
52
  ORDER BY clicks DESC`, [userId]);
56
53
  // Get top performing links
57
- const topLinksResult = await database_js_1.db.query(`SELECT
54
+ const topLinksResult = await db.query(`SELECT
58
55
  l.id,
59
56
  l.short_code,
60
57
  l.title,
@@ -106,24 +103,24 @@ async function analyticsRoutes(fastify) {
106
103
  throw new Error('userId query parameter is required');
107
104
  }
108
105
  // Verify link ownership
109
- const linkResult = await database_js_1.db.query('SELECT id FROM links WHERE id = $1 AND user_id = $2', [linkId, userId]);
106
+ const linkResult = await db.query('SELECT id FROM links WHERE id = $1 AND user_id = $2', [linkId, userId]);
110
107
  if (linkResult.rows.length === 0) {
111
108
  throw new Error('Link not found');
112
109
  }
113
110
  // Get analytics for specific link
114
- const clicksResult = await database_js_1.db.query(`SELECT
111
+ const clicksResult = await db.query(`SELECT
115
112
  COUNT(*) as total_clicks,
116
113
  COUNT(DISTINCT ip_address) as unique_clicks
117
114
  FROM click_events
118
115
  WHERE link_id = $1 AND clicked_at >= NOW() - INTERVAL '${days} days'`, [linkId]);
119
- const dateResult = await database_js_1.db.query(`SELECT
116
+ const dateResult = await db.query(`SELECT
120
117
  DATE(clicked_at) as date,
121
118
  COUNT(*) as clicks
122
119
  FROM click_events
123
120
  WHERE link_id = $1 AND clicked_at >= NOW() - INTERVAL '${days} days'
124
121
  GROUP BY DATE(clicked_at)
125
122
  ORDER BY date`, [linkId]);
126
- const countryResult = await database_js_1.db.query(`SELECT
123
+ const countryResult = await db.query(`SELECT
127
124
  COALESCE(country_code, 'Unknown') as country_code,
128
125
  COALESCE(country_name, country_code, 'Unknown') as country,
129
126
  COUNT(*) as clicks
@@ -131,14 +128,14 @@ async function analyticsRoutes(fastify) {
131
128
  WHERE link_id = $1 AND clicked_at >= NOW() - INTERVAL '${days} days'
132
129
  GROUP BY country_code, country_name
133
130
  ORDER BY clicks DESC`, [linkId]);
134
- const deviceResult = await database_js_1.db.query(`SELECT
131
+ const deviceResult = await db.query(`SELECT
135
132
  COALESCE(device_type, 'Unknown') as device,
136
133
  COUNT(*) as clicks
137
134
  FROM click_events
138
135
  WHERE link_id = $1 AND clicked_at >= NOW() - INTERVAL '${days} days'
139
136
  GROUP BY device_type
140
137
  ORDER BY clicks DESC`, [linkId]);
141
- const platformResult = await database_js_1.db.query(`SELECT
138
+ const platformResult = await db.query(`SELECT
142
139
  COALESCE(platform, 'Unknown') as platform,
143
140
  COUNT(*) as clicks
144
141
  FROM click_events
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ /**
3
+ * Debugging routes for testing and validation
4
+ * Premium Cloud-only feature
5
+ */
6
+ export declare function debugRoutes(fastify: FastifyInstance): Promise<void>;
7
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/routes/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAqB1D;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,iBAoVzD"}
@@ -0,0 +1,318 @@
1
+ import { z } from 'zod';
2
+ import { db } from '../lib/database.js';
3
+ import { detectDevice } from '../lib/utils.js';
4
+ import { subscribeToClickEvents } from '../lib/event-emitter.js';
5
+ /**
6
+ * Device simulation request schema
7
+ */
8
+ const simulateRequestSchema = z.object({
9
+ linkId: z.string().uuid(),
10
+ userId: z.string().uuid(),
11
+ deviceType: z.enum(['ios', 'android', 'web']).optional(),
12
+ userAgent: z.string().optional(),
13
+ country: z.string().length(2).optional(), // ISO country code
14
+ language: z.string().optional(), // e.g., "en", "es", "fr"
15
+ ipAddress: z.string().ip().optional(),
16
+ });
17
+ /**
18
+ * Debugging routes for testing and validation
19
+ * Premium Cloud-only feature
20
+ */
21
+ export async function debugRoutes(fastify) {
22
+ /**
23
+ * POST /api/debug/simulate
24
+ * Simulate a link click with custom device parameters
25
+ * Returns detailed information about redirect decision without logging
26
+ */
27
+ fastify.post('/api/debug/simulate', async (request) => {
28
+ const data = simulateRequestSchema.parse(request.body);
29
+ // Fetch the link
30
+ const linkResult = await db.query(`SELECT * FROM links WHERE id = $1 AND user_id = $2`, [data.linkId, data.userId]);
31
+ if (linkResult.rows.length === 0) {
32
+ throw new Error('Link not found');
33
+ }
34
+ const link = linkResult.rows[0];
35
+ // Determine device type
36
+ let deviceType;
37
+ if (data.deviceType) {
38
+ deviceType = data.deviceType;
39
+ }
40
+ else if (data.userAgent) {
41
+ deviceType = detectDevice(data.userAgent);
42
+ }
43
+ else {
44
+ deviceType = 'web'; // Default
45
+ }
46
+ // Simulate targeting rules evaluation
47
+ const targetingRules = link.targeting_rules || {};
48
+ const simulatedCountry = data.country || 'US';
49
+ const simulatedLanguage = data.language || 'en';
50
+ let targetingMatched = true;
51
+ const targetingDetails = {
52
+ countryMatch: null,
53
+ deviceMatch: null,
54
+ languageMatch: null,
55
+ };
56
+ // Check country targeting
57
+ if (targetingRules.countries && targetingRules.countries.length > 0) {
58
+ targetingDetails.countryMatch = targetingRules.countries.includes(simulatedCountry);
59
+ if (!targetingDetails.countryMatch) {
60
+ targetingMatched = false;
61
+ }
62
+ }
63
+ // Check device targeting
64
+ if (targetingRules.devices && targetingRules.devices.length > 0) {
65
+ targetingDetails.deviceMatch = targetingRules.devices.includes(deviceType);
66
+ if (!targetingDetails.deviceMatch) {
67
+ targetingMatched = false;
68
+ }
69
+ }
70
+ // Check language targeting
71
+ if (targetingRules.languages && targetingRules.languages.length > 0) {
72
+ const primaryLang = simulatedLanguage.split('-')[0];
73
+ targetingDetails.languageMatch = targetingRules.languages.some((lang) => lang.toLowerCase().startsWith(primaryLang.toLowerCase()));
74
+ if (!targetingDetails.languageMatch) {
75
+ targetingMatched = false;
76
+ }
77
+ }
78
+ // Determine redirect URL based on device type
79
+ let redirectUrl = link.original_url;
80
+ let redirectReason = 'original_url (default)';
81
+ if (deviceType === 'ios' && link.ios_url) {
82
+ redirectUrl = link.ios_url;
83
+ redirectReason = 'ios_url (iOS device detected)';
84
+ }
85
+ else if (deviceType === 'android' && link.android_url) {
86
+ redirectUrl = link.android_url;
87
+ redirectReason = 'android_url (Android device detected)';
88
+ }
89
+ else if (deviceType === 'web' && link.web_fallback_url) {
90
+ redirectUrl = link.web_fallback_url;
91
+ redirectReason = 'web_fallback_url (Web device detected)';
92
+ }
93
+ // Add UTM parameters if present
94
+ let finalUrl = redirectUrl;
95
+ const utmParameters = link.utm_parameters || {};
96
+ if (Object.keys(utmParameters).length > 0) {
97
+ const url = new URL(redirectUrl);
98
+ if (utmParameters.source)
99
+ url.searchParams.set('utm_source', utmParameters.source);
100
+ if (utmParameters.medium)
101
+ url.searchParams.set('utm_medium', utmParameters.medium);
102
+ if (utmParameters.campaign)
103
+ url.searchParams.set('utm_campaign', utmParameters.campaign);
104
+ if (utmParameters.term)
105
+ url.searchParams.set('utm_term', utmParameters.term);
106
+ if (utmParameters.content)
107
+ url.searchParams.set('utm_content', utmParameters.content);
108
+ finalUrl = url.toString();
109
+ }
110
+ // Return detailed simulation results
111
+ return {
112
+ simulation: {
113
+ linkId: link.id,
114
+ shortCode: link.short_code,
115
+ title: link.title,
116
+ isActive: link.is_active,
117
+ expiresAt: link.expires_at,
118
+ },
119
+ input: {
120
+ deviceType: data.deviceType || 'auto-detected',
121
+ userAgent: data.userAgent || 'Not provided',
122
+ country: simulatedCountry,
123
+ language: simulatedLanguage,
124
+ ipAddress: data.ipAddress || 'Not provided',
125
+ },
126
+ detection: {
127
+ detectedDevice: deviceType,
128
+ detectionMethod: data.deviceType
129
+ ? 'manual (provided in request)'
130
+ : data.userAgent
131
+ ? 'user-agent parsing'
132
+ : 'default (web)',
133
+ },
134
+ targeting: {
135
+ hasRules: Object.keys(targetingRules).length > 0,
136
+ rules: targetingRules,
137
+ matched: targetingMatched,
138
+ details: targetingDetails,
139
+ },
140
+ redirect: {
141
+ wouldRedirect: link.is_active && targetingMatched,
142
+ finalUrl: targetingMatched ? finalUrl : null,
143
+ redirectReason: targetingMatched ? redirectReason : 'Targeting rules not matched',
144
+ utmParametersAdded: Object.keys(utmParameters).length > 0,
145
+ utmParameters: utmParameters,
146
+ },
147
+ warnings: [
148
+ ...(!link.is_active ? ['Link is inactive - would return 404'] : []),
149
+ ...(link.expires_at && new Date(link.expires_at) < new Date()
150
+ ? ['Link has expired - would return 404']
151
+ : []),
152
+ ...(!targetingMatched ? ['Targeting rules not matched - would return 404'] : []),
153
+ ],
154
+ };
155
+ });
156
+ /**
157
+ * GET /api/debug/user-agents
158
+ * Get a list of common User-Agent strings for testing
159
+ */
160
+ fastify.get('/api/debug/user-agents', async () => {
161
+ return {
162
+ ios: [
163
+ {
164
+ name: 'iPhone 15 Pro - iOS 17 - Safari',
165
+ userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
166
+ device: 'ios',
167
+ },
168
+ {
169
+ name: 'iPhone 14 - iOS 16 - Safari',
170
+ userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
171
+ device: 'ios',
172
+ },
173
+ {
174
+ name: 'iPad Pro - iOS 17 - Safari',
175
+ userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1',
176
+ device: 'ios',
177
+ },
178
+ ],
179
+ android: [
180
+ {
181
+ name: 'Samsung Galaxy S23 - Android 13 - Chrome',
182
+ userAgent: 'Mozilla/5.0 (Linux; Android 13; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36',
183
+ device: 'android',
184
+ },
185
+ {
186
+ name: 'Google Pixel 8 - Android 14 - Chrome',
187
+ userAgent: 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36',
188
+ device: 'android',
189
+ },
190
+ {
191
+ name: 'OnePlus 11 - Android 13 - Chrome',
192
+ userAgent: 'Mozilla/5.0 (Linux; Android 13; CPH2449) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36',
193
+ device: 'android',
194
+ },
195
+ ],
196
+ web: [
197
+ {
198
+ name: 'Chrome on Windows',
199
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
200
+ device: 'web',
201
+ },
202
+ {
203
+ name: 'Safari on macOS',
204
+ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15',
205
+ device: 'web',
206
+ },
207
+ {
208
+ name: 'Firefox on Linux',
209
+ userAgent: 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0',
210
+ device: 'web',
211
+ },
212
+ ],
213
+ };
214
+ });
215
+ /**
216
+ * GET /api/debug/countries
217
+ * Get a list of common countries for testing
218
+ */
219
+ fastify.get('/api/debug/countries', async () => {
220
+ return {
221
+ countries: [
222
+ { code: 'US', name: 'United States' },
223
+ { code: 'GB', name: 'United Kingdom' },
224
+ { code: 'CA', name: 'Canada' },
225
+ { code: 'AU', name: 'Australia' },
226
+ { code: 'DE', name: 'Germany' },
227
+ { code: 'FR', name: 'France' },
228
+ { code: 'ES', name: 'Spain' },
229
+ { code: 'IT', name: 'Italy' },
230
+ { code: 'JP', name: 'Japan' },
231
+ { code: 'CN', name: 'China' },
232
+ { code: 'IN', name: 'India' },
233
+ { code: 'BR', name: 'Brazil' },
234
+ { code: 'MX', name: 'Mexico' },
235
+ { code: 'KR', name: 'South Korea' },
236
+ { code: 'SG', name: 'Singapore' },
237
+ ],
238
+ };
239
+ });
240
+ /**
241
+ * GET /api/debug/languages
242
+ * Get a list of common languages for testing
243
+ */
244
+ fastify.get('/api/debug/languages', async () => {
245
+ return {
246
+ languages: [
247
+ { code: 'en', name: 'English' },
248
+ { code: 'es', name: 'Spanish' },
249
+ { code: 'fr', name: 'French' },
250
+ { code: 'de', name: 'German' },
251
+ { code: 'it', name: 'Italian' },
252
+ { code: 'pt', name: 'Portuguese' },
253
+ { code: 'ja', name: 'Japanese' },
254
+ { code: 'zh', name: 'Chinese' },
255
+ { code: 'ko', name: 'Korean' },
256
+ { code: 'ar', name: 'Arabic' },
257
+ { code: 'ru', name: 'Russian' },
258
+ { code: 'hi', name: 'Hindi' },
259
+ ],
260
+ };
261
+ });
262
+ /**
263
+ * WebSocket: /api/debug/live
264
+ * Real-time click event streaming
265
+ * Clients can subscribe to live click events filtered by userId and optionally linkId
266
+ */
267
+ fastify.get('/api/debug/live', { websocket: true }, (connection, request) => {
268
+ const { userId, linkId } = request.query;
269
+ if (!userId) {
270
+ connection.socket.send(JSON.stringify({
271
+ type: 'error',
272
+ message: 'userId query parameter is required',
273
+ }));
274
+ connection.socket.close();
275
+ return;
276
+ }
277
+ // Send welcome message
278
+ connection.socket.send(JSON.stringify({
279
+ type: 'connected',
280
+ message: 'Connected to live request inspector',
281
+ filters: {
282
+ userId,
283
+ linkId: linkId || 'all',
284
+ },
285
+ }));
286
+ // Subscribe to click events
287
+ const unsubscribe = subscribeToClickEvents((eventData) => {
288
+ // Filter by userId
289
+ if (eventData.userId !== userId) {
290
+ return;
291
+ }
292
+ // Filter by linkId if provided
293
+ if (linkId && eventData.linkId !== linkId) {
294
+ return;
295
+ }
296
+ // Send event to client
297
+ try {
298
+ connection.socket.send(JSON.stringify({
299
+ type: 'click_event',
300
+ data: eventData,
301
+ }));
302
+ }
303
+ catch (error) {
304
+ console.error('Failed to send WebSocket message:', error);
305
+ }
306
+ });
307
+ // Handle client disconnect
308
+ connection.socket.on('close', () => {
309
+ unsubscribe();
310
+ });
311
+ // Handle errors
312
+ connection.socket.on('error', (error) => {
313
+ console.error('WebSocket error:', error);
314
+ unsubscribe();
315
+ });
316
+ });
317
+ }
318
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/routes/debug.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  export { redirectRoutes } from './redirect.js';
2
2
  export { linkRoutes } from './links.js';
3
3
  export { analyticsRoutes } from './analytics.js';
4
+ export { sdkRoutes } from './sdk.js';
5
+ export { qrRoutes } from './qr.js';
6
+ export { webhookRoutes } from './webhooks.js';
7
+ export { previewRoutes } from './preview.js';
8
+ export { debugRoutes } from './debug.js';
4
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -1,10 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyticsRoutes = exports.linkRoutes = exports.redirectRoutes = void 0;
4
- var redirect_js_1 = require("./redirect.js");
5
- Object.defineProperty(exports, "redirectRoutes", { enumerable: true, get: function () { return redirect_js_1.redirectRoutes; } });
6
- var links_js_1 = require("./links.js");
7
- Object.defineProperty(exports, "linkRoutes", { enumerable: true, get: function () { return links_js_1.linkRoutes; } });
8
- var analytics_js_1 = require("./analytics.js");
9
- Object.defineProperty(exports, "analyticsRoutes", { enumerable: true, get: function () { return analytics_js_1.analyticsRoutes; } });
1
+ export { redirectRoutes } from './redirect.js';
2
+ export { linkRoutes } from './links.js';
3
+ export { analyticsRoutes } from './analytics.js';
4
+ export { sdkRoutes } from './sdk.js';
5
+ export { qrRoutes } from './qr.js';
6
+ export { webhookRoutes } from './webhooks.js';
7
+ export { previewRoutes } from './preview.js';
8
+ export { debugRoutes } from './debug.js';
10
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;AAAA,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA;AACnB,+CAAiD;AAAxC,+GAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/routes/links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAgC1D,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,iBA2MxD"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/routes/links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AA0C1D,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,iBAmNxD"}