@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.
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -43
- package/dist/index.js.map +1 -1
- package/dist/lib/database.d.ts.map +1 -1
- package/dist/lib/database.js +160 -12
- package/dist/lib/database.js.map +1 -1
- package/dist/lib/event-emitter.d.ts +46 -0
- package/dist/lib/event-emitter.d.ts.map +1 -0
- package/dist/lib/event-emitter.js +24 -0
- package/dist/lib/event-emitter.js.map +1 -0
- package/dist/lib/fingerprint.d.ts +64 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/lib/fingerprint.js +343 -0
- package/dist/lib/fingerprint.js.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +12 -21
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/webhook.d.ts +18 -0
- package/dist/lib/webhook.d.ts.map +1 -0
- package/dist/lib/webhook.js +141 -0
- package/dist/lib/webhook.js.map +1 -0
- package/dist/routes/analytics.js +14 -17
- package/dist/routes/analytics.js.map +1 -1
- package/dist/routes/debug.d.ts +7 -0
- package/dist/routes/debug.d.ts.map +1 -0
- package/dist/routes/debug.js +318 -0
- package/dist/routes/debug.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +8 -9
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/links.d.ts.map +1 -1
- package/dist/routes/links.js +53 -38
- package/dist/routes/links.js.map +1 -1
- package/dist/routes/preview.d.ts +3 -0
- package/dist/routes/preview.d.ts.map +1 -0
- package/dist/routes/preview.js +222 -0
- package/dist/routes/preview.js.map +1 -0
- package/dist/routes/qr.d.ts +6 -0
- package/dist/routes/qr.d.ts.map +1 -0
- package/dist/routes/qr.js +130 -0
- package/dist/routes/qr.js.map +1 -0
- package/dist/routes/redirect.d.ts.map +1 -1
- package/dist/routes/redirect.js +142 -22
- package/dist/routes/redirect.js.map +1 -1
- package/dist/routes/sdk.d.ts +7 -0
- package/dist/routes/sdk.d.ts.map +1 -0
- package/dist/routes/sdk.js +262 -0
- package/dist/routes/sdk.js.map +1 -0
- package/dist/routes/webhooks.d.ts +3 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +176 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/scripts/migrate.js +2 -4
- package/dist/scripts/migrate.js.map +1 -1
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -2
- 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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"}
|
package/dist/scripts/migrate.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/types/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkforty/core",
|
|
3
|
-
"version": "1.
|
|
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
|
-
"
|
|
31
|
-
"
|
|
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",
|