@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
@@ -0,0 +1,176 @@
1
+ import { z } from 'zod';
2
+ import { db } from '../lib/database.js';
3
+ import { generateWebhookSecret } from '../lib/webhook.js';
4
+ const webhookEventSchema = z.enum(['click_event', 'install_event', 'conversion_event']);
5
+ const createWebhookSchema = z.object({
6
+ userId: z.string().uuid(),
7
+ name: z.string().min(1).max(255),
8
+ url: z.string().url(),
9
+ events: z.array(webhookEventSchema).min(1),
10
+ headers: z.record(z.string()).optional(),
11
+ retryCount: z.number().int().min(1).max(10).optional(),
12
+ timeoutMs: z.number().int().min(1000).max(60000).optional(),
13
+ });
14
+ const updateWebhookSchema = z.object({
15
+ name: z.string().min(1).max(255).optional(),
16
+ url: z.string().url().optional(),
17
+ events: z.array(webhookEventSchema).min(1).optional(),
18
+ isActive: z.boolean().optional(),
19
+ headers: z.record(z.string()).optional(),
20
+ retryCount: z.number().int().min(1).max(10).optional(),
21
+ timeoutMs: z.number().int().min(1000).max(60000).optional(),
22
+ });
23
+ export async function webhookRoutes(fastify) {
24
+ // Get all webhooks for a user
25
+ fastify.get('/api/webhooks', async (request) => {
26
+ const { userId } = request.query;
27
+ if (!userId) {
28
+ throw new Error('userId query parameter is required');
29
+ }
30
+ const result = await db.query(`SELECT id, user_id, name, url, events, is_active, retry_count, timeout_ms, headers, created_at, updated_at
31
+ FROM webhooks
32
+ WHERE user_id = $1
33
+ ORDER BY created_at DESC`, [userId]);
34
+ // Don't expose secrets in list view
35
+ return result.rows;
36
+ });
37
+ // Get a single webhook with secret
38
+ fastify.get('/api/webhooks/:id', async (request) => {
39
+ const { id } = request.params;
40
+ const { userId } = request.query;
41
+ if (!userId) {
42
+ throw new Error('userId query parameter is required');
43
+ }
44
+ const result = await db.query('SELECT * FROM webhooks WHERE id = $1 AND user_id = $2', [id, userId]);
45
+ if (result.rows.length === 0) {
46
+ throw new Error('Webhook not found');
47
+ }
48
+ return result.rows[0];
49
+ });
50
+ // Create a new webhook
51
+ fastify.post('/api/webhooks', async (request) => {
52
+ const data = createWebhookSchema.parse(request.body);
53
+ // Generate secure random secret
54
+ const secret = generateWebhookSecret();
55
+ const result = await db.query(`INSERT INTO webhooks (user_id, name, url, secret, events, retry_count, timeout_ms, headers)
56
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
57
+ RETURNING *`, [
58
+ data.userId,
59
+ data.name,
60
+ data.url,
61
+ secret,
62
+ data.events,
63
+ data.retryCount || 3,
64
+ data.timeoutMs || 10000,
65
+ JSON.stringify(data.headers || {}),
66
+ ]);
67
+ return result.rows[0];
68
+ });
69
+ // Update a webhook
70
+ fastify.put('/api/webhooks/:id', async (request) => {
71
+ const { id } = request.params;
72
+ const { userId } = request.query;
73
+ const data = updateWebhookSchema.parse(request.body);
74
+ if (!userId) {
75
+ throw new Error('userId query parameter is required');
76
+ }
77
+ // Build dynamic update query
78
+ const updates = [];
79
+ const values = [];
80
+ let paramCount = 1;
81
+ if (data.name !== undefined) {
82
+ updates.push(`name = $${paramCount++}`);
83
+ values.push(data.name);
84
+ }
85
+ if (data.url !== undefined) {
86
+ updates.push(`url = $${paramCount++}`);
87
+ values.push(data.url);
88
+ }
89
+ if (data.events !== undefined) {
90
+ updates.push(`events = $${paramCount++}`);
91
+ values.push(data.events);
92
+ }
93
+ if (data.isActive !== undefined) {
94
+ updates.push(`is_active = $${paramCount++}`);
95
+ values.push(data.isActive);
96
+ }
97
+ if (data.headers !== undefined) {
98
+ updates.push(`headers = $${paramCount++}`);
99
+ values.push(JSON.stringify(data.headers));
100
+ }
101
+ if (data.retryCount !== undefined) {
102
+ updates.push(`retry_count = $${paramCount++}`);
103
+ values.push(data.retryCount);
104
+ }
105
+ if (data.timeoutMs !== undefined) {
106
+ updates.push(`timeout_ms = $${paramCount++}`);
107
+ values.push(data.timeoutMs);
108
+ }
109
+ if (updates.length === 0) {
110
+ throw new Error('No fields to update');
111
+ }
112
+ updates.push(`updated_at = NOW()`);
113
+ values.push(id, userId);
114
+ const result = await db.query(`UPDATE webhooks
115
+ SET ${updates.join(', ')}
116
+ WHERE id = $${paramCount++} AND user_id = $${paramCount}
117
+ RETURNING *`, values);
118
+ if (result.rows.length === 0) {
119
+ throw new Error('Webhook not found');
120
+ }
121
+ return result.rows[0];
122
+ });
123
+ // Delete a webhook
124
+ fastify.delete('/api/webhooks/:id', async (request) => {
125
+ const { id } = request.params;
126
+ const { userId } = request.query;
127
+ if (!userId) {
128
+ throw new Error('userId query parameter is required');
129
+ }
130
+ const result = await db.query('DELETE FROM webhooks WHERE id = $1 AND user_id = $2 RETURNING id', [id, userId]);
131
+ if (result.rows.length === 0) {
132
+ throw new Error('Webhook not found');
133
+ }
134
+ return { success: true };
135
+ });
136
+ // Test a webhook
137
+ fastify.post('/api/webhooks/:id/test', async (request) => {
138
+ const { id } = request.params;
139
+ const { userId } = request.query;
140
+ if (!userId) {
141
+ throw new Error('userId query parameter is required');
142
+ }
143
+ // Get webhook
144
+ const webhookResult = await db.query('SELECT * FROM webhooks WHERE id = $1 AND user_id = $2', [id, userId]);
145
+ if (webhookResult.rows.length === 0) {
146
+ throw new Error('Webhook not found');
147
+ }
148
+ const webhook = webhookResult.rows[0];
149
+ // Create test payload
150
+ const testPayload = {
151
+ event: 'click_event',
152
+ event_id: '00000000-0000-0000-0000-000000000000',
153
+ timestamp: new Date().toISOString(),
154
+ data: {
155
+ id: '00000000-0000-0000-0000-000000000000',
156
+ linkId: '00000000-0000-0000-0000-000000000000',
157
+ clickedAt: new Date().toISOString(),
158
+ ipAddress: '127.0.0.1',
159
+ userAgent: 'LinkForty-Test/1.0',
160
+ deviceType: 'web',
161
+ platform: 'test',
162
+ countryCode: 'US',
163
+ },
164
+ };
165
+ // Deliver webhook synchronously for testing
166
+ const { deliverWebhook } = await import('../lib/webhook.js');
167
+ const result = await deliverWebhook(webhook, testPayload);
168
+ return {
169
+ success: result.success,
170
+ statusCode: result.responseStatus,
171
+ responseBody: result.responseBody,
172
+ error: result.errorMessage,
173
+ };
174
+ });
175
+ }
176
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/routes/webhooks.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const database_js_1 = require("../lib/database.js");
1
+ import { initializeDatabase } from '../lib/database.js';
4
2
  async function runMigrations() {
5
3
  try {
6
4
  console.log('Starting database migration...');
7
- await (0, database_js_1.initializeDatabase)();
5
+ await initializeDatabase();
8
6
  console.log('Database migration completed successfully!');
9
7
  process.exit(0);
10
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/scripts/migrate.ts"],"names":[],"mappings":";;AAAA,oDAAwD;AAExD,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,IAAA,gCAAkB,GAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/scripts/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,aAAa,EAAE,CAAC"}
@@ -11,11 +11,17 @@ export interface Link {
11
11
  short_code: string;
12
12
  original_url: string;
13
13
  title?: string;
14
+ description?: string;
14
15
  ios_url?: string;
15
16
  android_url?: string;
16
17
  web_fallback_url?: string;
17
18
  utmParameters?: UTMParameters;
18
19
  targeting_rules?: TargetingRules;
20
+ og_title?: string;
21
+ og_description?: string;
22
+ og_image_url?: string;
23
+ og_type?: string;
24
+ attribution_window_hours?: number;
19
25
  is_active: boolean;
20
26
  expires_at?: string;
21
27
  created_at: string;
@@ -57,11 +63,17 @@ export interface ClickEvent {
57
63
  export interface CreateLinkRequest {
58
64
  originalUrl: string;
59
65
  title?: string;
66
+ description?: string;
60
67
  iosUrl?: string;
61
68
  androidUrl?: string;
62
69
  webFallbackUrl?: string;
63
70
  utmParameters?: UTMParameters;
64
71
  targetingRules?: TargetingRules;
72
+ ogTitle?: string;
73
+ ogDescription?: string;
74
+ ogImageUrl?: string;
75
+ ogType?: string;
76
+ attributionWindowHours?: number;
65
77
  customCode?: string;
66
78
  expiresAt?: string;
67
79
  }
@@ -136,4 +148,73 @@ export interface AnalyticsData {
136
148
  uniqueClicks: number;
137
149
  }>;
138
150
  }
151
+ export type WebhookEvent = 'click_event' | 'install_event' | 'conversion_event';
152
+ export interface Webhook {
153
+ id: string;
154
+ user_id: string;
155
+ name: string;
156
+ url: string;
157
+ secret: string;
158
+ events: WebhookEvent[];
159
+ is_active: boolean;
160
+ retry_count: number;
161
+ timeout_ms: number;
162
+ headers: Record<string, string>;
163
+ created_at: string;
164
+ updated_at: string;
165
+ }
166
+ export interface CreateWebhookRequest {
167
+ name: string;
168
+ url: string;
169
+ events: WebhookEvent[];
170
+ headers?: Record<string, string>;
171
+ retryCount?: number;
172
+ timeoutMs?: number;
173
+ }
174
+ export interface UpdateWebhookRequest {
175
+ name?: string;
176
+ url?: string;
177
+ events?: WebhookEvent[];
178
+ isActive?: boolean;
179
+ headers?: Record<string, string>;
180
+ retryCount?: number;
181
+ timeoutMs?: number;
182
+ }
183
+ export interface WebhookPayload {
184
+ event: WebhookEvent;
185
+ event_id: string;
186
+ timestamp: string;
187
+ data: ClickEvent | InstallEvent | ConversionEvent;
188
+ }
189
+ export interface WebhookDeliveryResult {
190
+ success: boolean;
191
+ webhookId: string;
192
+ eventType: WebhookEvent;
193
+ eventId: string;
194
+ responseStatus?: number;
195
+ responseBody?: string;
196
+ attemptNumber: number;
197
+ deliveredAt?: string;
198
+ errorMessage?: string;
199
+ }
200
+ export interface InstallEvent {
201
+ id: string;
202
+ linkId?: string;
203
+ fingerprintHash: string;
204
+ confidenceScore?: number;
205
+ installedAt: string;
206
+ deepLinkData?: any;
207
+ ipAddress?: string;
208
+ userAgent?: string;
209
+ platform?: string;
210
+ }
211
+ export interface ConversionEvent {
212
+ id: string;
213
+ installId: string;
214
+ eventName: string;
215
+ eventProperties: Record<string, any>;
216
+ revenue?: number;
217
+ currency?: string;
218
+ timestamp: string;
219
+ }
139
220
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@linkforty/core",
3
- "version": "1.0.0",
3
+ "version": "1.2.1",
4
+ "type": "module",
4
5
  "description": "Open-source deeplink management engine with device detection and analytics",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
@@ -24,20 +25,23 @@
24
25
  "test": "vitest"
25
26
  },
26
27
  "dependencies": {
27
- "fastify": "^4.24.0",
28
28
  "@fastify/cors": "^8.4.0",
29
29
  "@fastify/redis": "^6.1.0",
30
- "pg": "^8.11.0",
31
- "nanoid": "^5.0.0",
30
+ "@fastify/websocket": "^10.0.1",
31
+ "@types/qrcode": "^1.5.6",
32
+ "dotenv": "^16.3.0",
33
+ "fastify": "^4.24.0",
32
34
  "geoip-lite": "^1.4.7",
35
+ "nanoid": "^3.3.11",
36
+ "pg": "^8.11.0",
37
+ "qrcode": "^1.5.4",
33
38
  "ua-parser-js": "^1.0.37",
34
- "zod": "^3.22.0",
35
- "dotenv": "^16.3.0"
39
+ "zod": "^3.22.0"
36
40
  },
37
41
  "devDependencies": {
42
+ "@types/geoip-lite": "^1.4.4",
38
43
  "@types/node": "^20.8.0",
39
44
  "@types/pg": "^8.10.0",
40
- "@types/geoip-lite": "^1.4.4",
41
45
  "@types/ua-parser-js": "^0.7.39",
42
46
  "tsx": "^4.0.0",
43
47
  "typescript": "^5.2.0",