@blossu/ui 0.4.0
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/LICENSE +21 -0
- package/README.md +460 -0
- package/dist/blossu.d.ts +34 -0
- package/dist/blossu.d.ts.map +1 -0
- package/dist/blossu.esm.js +2 -0
- package/dist/blossu.esm.js.map +1 -0
- package/dist/blossu.js +2 -0
- package/dist/blossu.js.map +1 -0
- package/dist/blossu.min.js +2 -0
- package/dist/blossu.min.js.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.react.d.ts +4 -0
- package/dist/index.react.d.ts.map +1 -0
- package/dist/react/Analytics.d.ts +3 -0
- package/dist/react/Analytics.d.ts.map +1 -0
- package/dist/react/Loader.d.ts +8 -0
- package/dist/react/Loader.d.ts.map +1 -0
- package/dist/react/ReferralLink.d.ts +4 -0
- package/dist/react/ReferralLink.d.ts.map +1 -0
- package/dist/react/ReferralStats.d.ts +4 -0
- package/dist/react/ReferralStats.d.ts.map +1 -0
- package/dist/react/ReferralWidget.d.ts +4 -0
- package/dist/react/ReferralWidget.d.ts.map +1 -0
- package/dist/react/blossu.d.ts +34 -0
- package/dist/react/blossu.d.ts.map +1 -0
- package/dist/react/constants.d.ts +6 -0
- package/dist/react/constants.d.ts.map +1 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.esm.js +2 -0
- package/dist/react/index.esm.js.map +1 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.react.d.ts +4 -0
- package/dist/react/index.react.d.ts.map +1 -0
- package/dist/react/react/Analytics.d.ts +3 -0
- package/dist/react/react/Analytics.d.ts.map +1 -0
- package/dist/react/react/Loader.d.ts +8 -0
- package/dist/react/react/Loader.d.ts.map +1 -0
- package/dist/react/react/ReferralLink.d.ts +4 -0
- package/dist/react/react/ReferralLink.d.ts.map +1 -0
- package/dist/react/react/ReferralStats.d.ts +4 -0
- package/dist/react/react/ReferralStats.d.ts.map +1 -0
- package/dist/react/react/ReferralWidget.d.ts +4 -0
- package/dist/react/react/ReferralWidget.d.ts.map +1 -0
- package/dist/react/react/index.d.ts +9 -0
- package/dist/react/react/index.d.ts.map +1 -0
- package/dist/react/react/types.d.ts +76 -0
- package/dist/react/react/types.d.ts.map +1 -0
- package/dist/react/react/usePartner.d.ts +3 -0
- package/dist/react/react/usePartner.d.ts.map +1 -0
- package/dist/react/tracker.d.ts +53 -0
- package/dist/react/tracker.d.ts.map +1 -0
- package/dist/react/types.d.ts +51 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/usePartner.d.ts +3 -0
- package/dist/react/usePartner.d.ts.map +1 -0
- package/dist/react/utils.d.ts +20 -0
- package/dist/react/utils.d.ts.map +1 -0
- package/dist/tracker.d.ts +53 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +20 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +97 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 SMASHSEND
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
# @blossu/ui
|
|
2
|
+
|
|
3
|
+
Client-side tracking SDK for [Blossu](https://blossu.com) - the affiliate and referral tracking platform.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @blossu/ui
|
|
9
|
+
# or
|
|
10
|
+
yarn add @blossu/ui
|
|
11
|
+
# or
|
|
12
|
+
pnpm add @blossu/ui
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
import { init } from "@blossu/ui";
|
|
19
|
+
|
|
20
|
+
// Initialize the SDK
|
|
21
|
+
const blossu = init({
|
|
22
|
+
apiKey: "your-api-key",
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// The SDK automatically tracks referral codes from the URL (e.g., ?ref=PARTNER123)
|
|
26
|
+
// and stores them in a cookie for attribution
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
### Automatic Tracking
|
|
32
|
+
|
|
33
|
+
By default, the SDK automatically:
|
|
34
|
+
|
|
35
|
+
1. Detects referral codes in the URL (e.g., `?ref=PARTNER123`)
|
|
36
|
+
2. Saves the referral info in a cookie
|
|
37
|
+
3. Tracks the click event
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
import { init } from "@blossu/ui";
|
|
41
|
+
|
|
42
|
+
init({
|
|
43
|
+
apiKey: "your-api-key",
|
|
44
|
+
trackingParam: "ref", // URL parameter to look for (default: 'ref')
|
|
45
|
+
autoTrack: true, // Enable automatic tracking (default: true)
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Track Signup
|
|
50
|
+
|
|
51
|
+
Track when a user signs up after being referred:
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
import { getClient } from "@blossu/ui";
|
|
55
|
+
|
|
56
|
+
const blossu = getClient();
|
|
57
|
+
|
|
58
|
+
// After user signs up
|
|
59
|
+
await blossu.signup({
|
|
60
|
+
email: "customer@example.com",
|
|
61
|
+
externalCustomerId: "user_123",
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Track Sale
|
|
66
|
+
|
|
67
|
+
Track a purchase/conversion:
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
await blossu.sale({
|
|
71
|
+
externalCustomerId: "user_123",
|
|
72
|
+
amount: 9900, // $99.00 in cents
|
|
73
|
+
currency: "USD",
|
|
74
|
+
provider: "stripe",
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Stripe Integration
|
|
79
|
+
|
|
80
|
+
Get the referral ID for Stripe Checkout:
|
|
81
|
+
|
|
82
|
+
```javascript
|
|
83
|
+
import { getClient } from "@blossu/ui";
|
|
84
|
+
|
|
85
|
+
const blossu = getClient();
|
|
86
|
+
|
|
87
|
+
// For Stripe Checkout - pass as client_reference_id
|
|
88
|
+
const checkoutSession = await stripe.checkout.sessions.create({
|
|
89
|
+
// ... other options
|
|
90
|
+
client_reference_id: blossu.getStripeClientReferenceId(),
|
|
91
|
+
metadata: blossu.getStripeMetadata(),
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Access Referral Info
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
import { getClient } from "@blossu/ui";
|
|
99
|
+
|
|
100
|
+
const blossu = getClient();
|
|
101
|
+
|
|
102
|
+
// Check if user was referred
|
|
103
|
+
if (blossu.hasReferral()) {
|
|
104
|
+
console.log("Referral code:", blossu.getCode());
|
|
105
|
+
console.log("Referral ID:", blossu.getRefId());
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Get full referral info
|
|
109
|
+
const info = blossu.getReferralInfo();
|
|
110
|
+
// { code: 'partner123', refId: 'bls_abc123_xyz789', timestamp: 1704067200000 }
|
|
111
|
+
|
|
112
|
+
// Access globally
|
|
113
|
+
console.log(window.blossu_ref_id);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Manual Click Tracking
|
|
117
|
+
|
|
118
|
+
If you need to manually track a click:
|
|
119
|
+
|
|
120
|
+
```javascript
|
|
121
|
+
await blossu.trackClick("PARTNER123");
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Clear Referral
|
|
125
|
+
|
|
126
|
+
Clear the stored referral info:
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
blossu.clearReferral();
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Usage with React
|
|
133
|
+
|
|
134
|
+
### Option 1: Pre-built Components (Recommended)
|
|
135
|
+
|
|
136
|
+
The easiest way to add referral functionality to your React app:
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
import { ReferralWidget } from "@blossu/ui/react";
|
|
140
|
+
|
|
141
|
+
function MyApp() {
|
|
142
|
+
const user = useUser(); // Your user hook
|
|
143
|
+
|
|
144
|
+
return (
|
|
145
|
+
<ReferralWidget
|
|
146
|
+
workspaceId="wks_xxx"
|
|
147
|
+
email={user.email}
|
|
148
|
+
signature={user.blossuSignature} // HMAC signature from your backend
|
|
149
|
+
theme="light"
|
|
150
|
+
primaryColor="#3b82f6"
|
|
151
|
+
/>
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Option 2: Individual Components
|
|
157
|
+
|
|
158
|
+
Use individual components for more control:
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import { ReferralLink, ReferralStats } from "@blossu/ui/react";
|
|
162
|
+
|
|
163
|
+
function MyReferralPage() {
|
|
164
|
+
return (
|
|
165
|
+
<div>
|
|
166
|
+
<h2>My Referral Program</h2>
|
|
167
|
+
|
|
168
|
+
<ReferralStats
|
|
169
|
+
clicks={120}
|
|
170
|
+
conversions={45}
|
|
171
|
+
revenue={450000} // in cents
|
|
172
|
+
/>
|
|
173
|
+
|
|
174
|
+
<ReferralLink
|
|
175
|
+
code="FRIEND10"
|
|
176
|
+
destinationUrl="https://myapp.com"
|
|
177
|
+
label="Share your referral link"
|
|
178
|
+
showCopyButton={true}
|
|
179
|
+
/>
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Option 3: Custom UI with Hook
|
|
186
|
+
|
|
187
|
+
Build completely custom UIs using the `usePartner` hook:
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
import { usePartner } from "@blossu/ui/react";
|
|
191
|
+
|
|
192
|
+
function CustomReferralUI() {
|
|
193
|
+
const {
|
|
194
|
+
partner,
|
|
195
|
+
codes,
|
|
196
|
+
stats,
|
|
197
|
+
isLoading,
|
|
198
|
+
error,
|
|
199
|
+
referralLink,
|
|
200
|
+
copyLink,
|
|
201
|
+
createCode,
|
|
202
|
+
} = usePartner({
|
|
203
|
+
workspaceId: "wks_xxx",
|
|
204
|
+
email: user.email,
|
|
205
|
+
signature: user.blossuSignature,
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
if (isLoading) return <div>Loading...</div>;
|
|
209
|
+
if (error) return <div>Error: {error}</div>;
|
|
210
|
+
|
|
211
|
+
return (
|
|
212
|
+
<div>
|
|
213
|
+
<h2>Welcome, {partner?.firstName}!</h2>
|
|
214
|
+
<p>You've earned: ${(partner?.totalEarned || 0) / 100}</p>
|
|
215
|
+
|
|
216
|
+
<div>
|
|
217
|
+
<h3>Stats</h3>
|
|
218
|
+
<p>Clicks: {stats?.clicks}</p>
|
|
219
|
+
<p>Conversions: {stats?.conversions}</p>
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
<div>
|
|
223
|
+
<h3>Your Codes</h3>
|
|
224
|
+
{codes.map((code) => (
|
|
225
|
+
<div key={code.id}>
|
|
226
|
+
<span>{code.code}</span>
|
|
227
|
+
<button onClick={() => copyLink(code.code)}>Copy Link</button>
|
|
228
|
+
</div>
|
|
229
|
+
))}
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<button onClick={() => createCode("newcode123", "My New Code")}>
|
|
233
|
+
Create New Code
|
|
234
|
+
</button>
|
|
235
|
+
</div>
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Option 4: Analytics Wrapper
|
|
241
|
+
|
|
242
|
+
For tracking only (no UI):
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import { Analytics } from "@blossu/ui/react";
|
|
246
|
+
|
|
247
|
+
export default function RootLayout({ children }) {
|
|
248
|
+
return (
|
|
249
|
+
<html>
|
|
250
|
+
<body>
|
|
251
|
+
<Analytics publicKey={process.env.NEXT_PUBLIC_BLOSSU_KEY!}>
|
|
252
|
+
{children}
|
|
253
|
+
</Analytics>
|
|
254
|
+
</body>
|
|
255
|
+
</html>
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Then in your components:
|
|
261
|
+
|
|
262
|
+
```tsx
|
|
263
|
+
import { getClient } from "@blossu/ui";
|
|
264
|
+
|
|
265
|
+
function SignupForm() {
|
|
266
|
+
const blossu = getClient();
|
|
267
|
+
|
|
268
|
+
const handleSignup = async (email: string) => {
|
|
269
|
+
// ... create user
|
|
270
|
+
|
|
271
|
+
// Track signup with Blossu
|
|
272
|
+
if (blossu?.hasReferral()) {
|
|
273
|
+
await blossu.signup({ email });
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
return <form>...</form>;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Generating HMAC Signature (Backend)
|
|
282
|
+
|
|
283
|
+
For the widget and `usePartner` hook, you need to generate an HMAC signature on your backend:
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
// app/api/blossu-token/route.ts
|
|
287
|
+
import crypto from "crypto";
|
|
288
|
+
import { NextResponse } from "next/server";
|
|
289
|
+
|
|
290
|
+
export async function GET(req: Request) {
|
|
291
|
+
const user = await getCurrentUser(req); // Your auth logic
|
|
292
|
+
|
|
293
|
+
const signature = crypto
|
|
294
|
+
.createHmac("sha256", process.env.BLOSSU_SECRET_KEY!)
|
|
295
|
+
.update(user.email)
|
|
296
|
+
.digest("hex");
|
|
297
|
+
|
|
298
|
+
return NextResponse.json({
|
|
299
|
+
email: user.email,
|
|
300
|
+
signature,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Then fetch it in your component:
|
|
306
|
+
|
|
307
|
+
```tsx
|
|
308
|
+
function MyApp() {
|
|
309
|
+
const [auth, setAuth] = useState(null);
|
|
310
|
+
|
|
311
|
+
useEffect(() => {
|
|
312
|
+
fetch("/api/blossu-token")
|
|
313
|
+
.then((res) => res.json())
|
|
314
|
+
.then(setAuth);
|
|
315
|
+
}, []);
|
|
316
|
+
|
|
317
|
+
if (!auth) return <div>Loading...</div>;
|
|
318
|
+
|
|
319
|
+
return (
|
|
320
|
+
<ReferralWidget
|
|
321
|
+
workspaceId="wks_xxx"
|
|
322
|
+
email={auth.email}
|
|
323
|
+
signature={auth.signature}
|
|
324
|
+
/>
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## Usage with React (Manual Hook)
|
|
330
|
+
|
|
331
|
+
```jsx
|
|
332
|
+
// hooks/useBlossu.ts
|
|
333
|
+
import { useEffect, useState } from 'react';
|
|
334
|
+
import { init, getClient, BlossuClient } from '@blossu/ui';
|
|
335
|
+
|
|
336
|
+
export function useBlossu() {
|
|
337
|
+
const [client, setClient] = useState<BlossuClient | null>(null);
|
|
338
|
+
|
|
339
|
+
useEffect(() => {
|
|
340
|
+
const blossu = init({
|
|
341
|
+
apiKey: process.env.NEXT_PUBLIC_BLOSSU_API_KEY!,
|
|
342
|
+
});
|
|
343
|
+
setClient(blossu);
|
|
344
|
+
}, []);
|
|
345
|
+
|
|
346
|
+
return client;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Usage in component
|
|
350
|
+
function SignupForm() {
|
|
351
|
+
const blossu = useBlossu();
|
|
352
|
+
|
|
353
|
+
const handleSubmit = async (email: string) => {
|
|
354
|
+
// ... create user
|
|
355
|
+
|
|
356
|
+
// Track signup with Blossu
|
|
357
|
+
if (blossu?.hasReferral()) {
|
|
358
|
+
await blossu.signup({ email });
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
return <form>...</form>;
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Usage with Script Tag
|
|
367
|
+
|
|
368
|
+
You can also load the SDK via a script tag:
|
|
369
|
+
|
|
370
|
+
```html
|
|
371
|
+
<script src="https://cdn.blossu.com/blossu.min.js"></script>
|
|
372
|
+
<script>
|
|
373
|
+
Blossu.init({
|
|
374
|
+
apiKey: "your-api-key",
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
// Later...
|
|
378
|
+
if (window.blossu.hasReferral()) {
|
|
379
|
+
console.log("Referred by:", window.blossu.getCode());
|
|
380
|
+
}
|
|
381
|
+
</script>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Configuration Options
|
|
385
|
+
|
|
386
|
+
```javascript
|
|
387
|
+
init({
|
|
388
|
+
// Required
|
|
389
|
+
apiKey: "your-api-key",
|
|
390
|
+
|
|
391
|
+
// Optional
|
|
392
|
+
apiUrl: "https://api.blossu.com", // API endpoint
|
|
393
|
+
trackingParam: "ref", // URL parameter for referral codes
|
|
394
|
+
cookieName: "blossu_ref", // Cookie name for storing referral info
|
|
395
|
+
cookieExpiryDays: 30, // How long to remember the referral
|
|
396
|
+
autoTrack: true, // Auto-track referral codes from URL
|
|
397
|
+
debug: false, // Enable debug logging
|
|
398
|
+
});
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
## API Reference
|
|
402
|
+
|
|
403
|
+
### `init(config)`
|
|
404
|
+
|
|
405
|
+
Initialize the SDK and returns a `BlossuClient` instance.
|
|
406
|
+
|
|
407
|
+
### `getClient()`
|
|
408
|
+
|
|
409
|
+
Get the current `BlossuClient` instance (after calling `init`).
|
|
410
|
+
|
|
411
|
+
### `BlossuClient`
|
|
412
|
+
|
|
413
|
+
| Method | Description |
|
|
414
|
+
| ------------------------------ | ------------------------------- |
|
|
415
|
+
| `trackClick(code)` | Track a referral link click |
|
|
416
|
+
| `signup(data?)` | Track a signup/lead |
|
|
417
|
+
| `sale(data)` | Track a sale/conversion |
|
|
418
|
+
| `pageview()` | Track a page view |
|
|
419
|
+
| `hasReferral()` | Check if user has referral info |
|
|
420
|
+
| `getCode()` | Get the referral code |
|
|
421
|
+
| `getRefId()` | Get the unique referral ID |
|
|
422
|
+
| `getReferralInfo()` | Get full referral info object |
|
|
423
|
+
| `clearReferral()` | Clear stored referral info |
|
|
424
|
+
| `getStripeClientReferenceId()` | Get refId for Stripe checkout |
|
|
425
|
+
| `getStripeMetadata()` | Get metadata object for Stripe |
|
|
426
|
+
|
|
427
|
+
## How It Works
|
|
428
|
+
|
|
429
|
+
1. When a user visits your site with a referral link (e.g., `?ref=PARTNER123`), the SDK:
|
|
430
|
+
|
|
431
|
+
- Extracts the referral code
|
|
432
|
+
- Generates a unique `blossu_ref_id`
|
|
433
|
+
- Stores both in a cookie
|
|
434
|
+
- Sends a click event to Blossu
|
|
435
|
+
|
|
436
|
+
2. When the user converts (signup, purchase):
|
|
437
|
+
|
|
438
|
+
- Use the SDK to track the event
|
|
439
|
+
- The `blossu_ref_id` links the conversion to the original click
|
|
440
|
+
|
|
441
|
+
3. For Stripe payments:
|
|
442
|
+
- Pass `getStripeClientReferenceId()` as `client_reference_id` in Checkout
|
|
443
|
+
- Blossu's webhook handler will automatically attribute the payment
|
|
444
|
+
|
|
445
|
+
## TypeScript Support
|
|
446
|
+
|
|
447
|
+
This SDK is written in TypeScript and provides full type definitions:
|
|
448
|
+
|
|
449
|
+
```typescript
|
|
450
|
+
import type {
|
|
451
|
+
BlossuConfig,
|
|
452
|
+
ReferralInfo,
|
|
453
|
+
TrackSignupData,
|
|
454
|
+
TrackSaleData,
|
|
455
|
+
} from "@blossu/ui";
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
## License
|
|
459
|
+
|
|
460
|
+
MIT
|
package/dist/blossu.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BlossuConfig, ReferralInfo, TrackSignupData, TrackSaleData, PublicReferralInfo } from './types';
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
blossu: BlossuClient;
|
|
5
|
+
blossu_ref_id?: string;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare class BlossuClient {
|
|
9
|
+
private config;
|
|
10
|
+
private tracker;
|
|
11
|
+
private initialized;
|
|
12
|
+
private referralInfo;
|
|
13
|
+
constructor(config: BlossuConfig);
|
|
14
|
+
private log;
|
|
15
|
+
private exposeToWindow;
|
|
16
|
+
private loadReferralInfo;
|
|
17
|
+
private autoTrackReferral;
|
|
18
|
+
getRefId(): string | null;
|
|
19
|
+
getCode(): string | null;
|
|
20
|
+
getReferralInfo(): ReferralInfo | null;
|
|
21
|
+
hasReferral(): boolean;
|
|
22
|
+
clearReferral(): void;
|
|
23
|
+
trackClick(code: string): Promise<boolean>;
|
|
24
|
+
signup(data?: TrackSignupData): Promise<boolean>;
|
|
25
|
+
sale(data: TrackSaleData): Promise<boolean>;
|
|
26
|
+
pageview(): Promise<boolean>;
|
|
27
|
+
getStripeClientReferenceId(): string | null;
|
|
28
|
+
getStripeMetadata(): Record<string, string>;
|
|
29
|
+
getPartnerInfo(code: string): Promise<PublicReferralInfo | null>;
|
|
30
|
+
getProgramSlug(): string;
|
|
31
|
+
}
|
|
32
|
+
export declare function init(config: BlossuConfig): BlossuClient;
|
|
33
|
+
export declare function getClient(): BlossuClient | null;
|
|
34
|
+
//# sourceMappingURL=blossu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blossu.d.ts","sourceRoot":"","sources":["../src/blossu.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAKjB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,YAAY,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;CACF;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,EAAE,YAAY;IA0BhC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAUzB,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,IAAI;IASf,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB1C,MAAM,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3C,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAWlC,0BAA0B,IAAI,MAAM,GAAG,IAAI;IAI3C,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWrC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAuBtE,cAAc,IAAI,MAAM;CAGzB;AAID,wBAAgB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAGvD;AAED,wBAAgB,SAAS,IAAI,YAAY,GAAG,IAAI,CAE/C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e="0.1.0",r="https://api.blossu.com",t="blossu_ref",n=30,o="ref";function i(){return`bls_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,10)}`}function a(e,r,t){if("undefined"==typeof document)return;const n=new Date;n.setTime(n.getTime()+24*t*60*60*1e3);const o="https:"===window.location.protocol?"; Secure":"";document.cookie=`${e}=${encodeURIComponent(r)}; expires=${n.toUTCString()}; path=/; SameSite=Lax${o}`}function s(e){if("undefined"==typeof document)return null;const r=`${e}=`,t=document.cookie.split(";");for(let e=0;e<t.length;e++){let n=t[e];for(;" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(r))return decodeURIComponent(n.substring(r.length,n.length))}return null}function f(e){"undefined"!=typeof document&&(document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`)}function l(e){if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(e)}function c(e,r=t,n=30){const o=i(),s={code:e.toLowerCase(),refId:o,timestamp:Date.now()};return a(r,JSON.stringify(s),n),s}function u(e=t){const r=s(e);if(!r)return null;try{return JSON.parse(r)}catch{return null}}function d(e=t){f(e)}function g(){return"undefined"==typeof navigator?{userAgent:"",language:"",timezone:""}:{userAgent:navigator.userAgent||"",language:navigator.language||"",timezone:Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||""}}function h(){return"undefined"==typeof window||"undefined"==typeof document?{url:"",referrer:"",title:""}:{url:window.location.href,referrer:document.referrer||"",title:document.title||""}}class p{constructor(e){this.config={apiUrl:e.apiUrl||r,programSlug:e.programSlug,debug:e.debug||!1}}log(...e){this.config.debug&&console.log("[Blossu]",...e)}getEndpoint(e){return`${this.config.apiUrl}/v1/track/${e}`}getMeta(){const r="undefined"!=typeof window;return{url:r?window.location.href:"",referrer:r?document.referrer:"",userAgent:r?navigator.userAgent:"",language:r?navigator.language:"",timezone:r&&Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||"",timestamp:Date.now(),sdkVersion:e}}async send(e,r){const t={event:e,data:r,meta:this.getMeta()};this.log("Sending event:",e,t);const n=this.getEndpoint(e),o=JSON.stringify(t);if("undefined"!=typeof navigator&&navigator.sendBeacon){const e=new Blob([o],{type:"application/json"});try{const r=navigator.sendBeacon(n,e);return this.log("sendBeacon result:",r),r}catch(e){this.log("sendBeacon failed, falling back to fetch:",e)}}try{const e=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:o,keepalive:!0});return this.log("fetch response:",e.status),e.ok}catch(e){return this.log("fetch error:",e),!1}}trackClick(e){return this.send("click",e)}trackSignup(e){return this.send("signup",e)}trackSale(e){return this.send("sale",e)}trackPageview(e){return this.send("pageview",e)}}class m{constructor(e){this.initialized=!1,this.referralInfo=null,this.config={programSlug:e.programSlug,apiUrl:e.apiUrl||r,trackingParam:e.trackingParam||"ref",cookieName:e.cookieName||t,cookieExpiryDays:e.cookieExpiryDays||30,debug:e.debug||!1,autoTrack:!1!==e.autoTrack},this.tracker=new p({apiUrl:this.config.apiUrl,programSlug:this.config.programSlug,debug:this.config.debug}),this.loadReferralInfo(),this.config.autoTrack&&this.autoTrackReferral(),this.exposeToWindow()}log(...e){this.config.debug&&console.log("[Blossu]",...e)}exposeToWindow(){"undefined"!=typeof window&&(window.blossu=this,this.referralInfo&&(window.blossu_ref_id=this.referralInfo.refId))}loadReferralInfo(){this.referralInfo=u(this.config.cookieName),this.referralInfo&&this.log("Loaded referral info from cookie:",this.referralInfo)}autoTrackReferral(){if("undefined"==typeof window)return;const e=l(this.config.trackingParam);e&&e!==this.referralInfo?.code&&(this.log("Detected referral code in URL:",e),this.trackClick(e))}getRefId(){return this.referralInfo?.refId||null}getCode(){return this.referralInfo?.code||null}getReferralInfo(){return this.referralInfo}hasReferral(){return null!==this.referralInfo}clearReferral(){d(this.config.cookieName),this.referralInfo=null,"undefined"!=typeof window&&delete window.blossu_ref_id,this.log("Cleared referral info")}async trackClick(e){return this.referralInfo=c(e,this.config.cookieName,this.config.cookieExpiryDays),"undefined"!=typeof window&&(window.blossu_ref_id=this.referralInfo.refId),this.log("Tracking click for code:",e,"refId:",this.referralInfo.refId),this.tracker.trackClick({code:this.referralInfo.code,refId:this.referralInfo.refId})}async signup(e={}){return this.referralInfo?(this.log("Tracking signup:",e),this.tracker.trackSignup({code:this.referralInfo.code,refId:this.referralInfo.refId,email:e.email,externalCustomerId:e.externalCustomerId,metadata:e.metadata})):(this.log("No referral info, skipping signup tracking"),!1)}async sale(e){return this.referralInfo?(this.log("Tracking sale:",e),this.tracker.trackSale({code:this.referralInfo.code,refId:this.referralInfo.refId,externalCustomerId:e.externalCustomerId,amount:e.amount,currency:e.currency,provider:e.provider||"custom",metadata:e.metadata})):(this.log("No referral info, skipping sale tracking"),!1)}async pageview(){return!!this.referralInfo&&this.tracker.trackPageview({code:this.referralInfo.code,refId:this.referralInfo.refId})}getStripeClientReferenceId(){return this.referralInfo?.refId||null}getStripeMetadata(){return this.referralInfo?{blossu_ref_id:this.referralInfo.refId,blossu_code:this.referralInfo.code}:{}}async getPartnerInfo(e){const r=`${this.config.apiUrl}/v1/public/programs/${this.config.programSlug}/referral/${encodeURIComponent(e)}`;try{const t=await fetch(r);if(!t.ok){if(404===t.status)return this.log("Partner info not found for code:",e),null;throw new Error(`HTTP error! status: ${t.status}`)}const n=await t.json();return this.log("Fetched partner info:",n),n}catch(e){return this.log("Error fetching partner info:",e),null}}getProgramSlug(){return this.config.programSlug}}let I=null;function k(e){return I=new m(e),I}function w(){return I}export{m as BlossuClient,n as COOKIE_EXPIRY_DAYS,t as COOKIE_NAME,r as DEFAULT_API_URL,o as TRACKING_PARAM,p as Tracker,e as VERSION,d as clearReferralInfo,m as default,f as deleteCookie,i as generateRefId,g as getBrowserInfo,w as getClient,s as getCookie,h as getPageInfo,u as getReferralInfo,l as getUrlParam,k as init,c as saveReferralInfo,a as setCookie};
|
|
2
|
+
//# sourceMappingURL=blossu.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blossu.esm.js","sources":["../src/constants.ts","../src/utils.ts","../src/tracker.ts","../src/blossu.ts"],"sourcesContent":[null,null,null,null],"names":["VERSION","DEFAULT_API_URL","COOKIE_NAME","COOKIE_EXPIRY_DAYS","TRACKING_PARAM","generateRefId","Date","now","toString","Math","random","substring","setCookie","name","value","days","document","expires","setTime","getTime","secure","window","location","protocol","cookie","encodeURIComponent","toUTCString","getCookie","nameEQ","cookies","split","i","length","charAt","indexOf","decodeURIComponent","deleteCookie","getUrlParam","param","URLSearchParams","search","get","saveReferralInfo","code","cookieName","expiryDays","refId","info","toLowerCase","timestamp","JSON","stringify","getReferralInfo","parse","clearReferralInfo","getBrowserInfo","navigator","userAgent","language","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","getPageInfo","url","referrer","title","href","Tracker","constructor","config","this","apiUrl","programSlug","debug","log","args","console","getEndpoint","event","getMeta","isBrowser","sdkVersion","send","data","payload","meta","endpoint","body","sendBeacon","blob","Blob","type","success","error","response","fetch","method","headers","keepalive","status","ok","trackClick","trackSignup","trackSale","trackPageview","BlossuClient","initialized","referralInfo","trackingParam","cookieExpiryDays","autoTrack","tracker","loadReferralInfo","autoTrackReferral","exposeToWindow","blossu","blossu_ref_id","getRefId","getCode","hasReferral","clearReferral","signup","email","externalCustomerId","metadata","sale","amount","currency","provider","pageview","getStripeClientReferenceId","getStripeMetadata","blossu_code","getPartnerInfo","Error","json","getProgramSlug","defaultClient","init","getClient"],"mappings":"AAAO,MAAMA,EAAU,QACVC,EAAkB,yBAClBC,EAAc,aACdC,EAAqB,GACrBC,EAAiB,eCDdC,IAGd,MAAO,OAFWC,KAAKC,MAAMC,SAAS,OACnBC,KAAKC,SAASF,SAAS,IAAIG,UAAU,EAAG,KAE7D,UAEgBC,EAAUC,EAAcC,EAAeC,GACrD,GAAwB,oBAAbC,SAA0B,OAErC,MAAMC,EAAU,IAAIX,KACpBW,EAAQC,QAAQD,EAAQE,UAAmB,GAAPJ,EAAY,GAAK,GAAK,KAE1D,MACMK,EAAsC,WAA7BC,OAAOC,SAASC,SAAwB,WAAa,GAEpEP,SAASQ,OAAS,GAAGX,KAAQY,mBAAmBX,eAAmBG,EAAQS,sCAA8CN,GAC3H,CAEM,SAAUO,EAAUd,GACxB,GAAwB,oBAAbG,SAA0B,OAAO,KAE5C,MAAMY,EAAS,GAAGf,KACZgB,EAAUb,SAASQ,OAAOM,MAAM,KAEtC,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAQG,OAAQD,IAAK,CACvC,IAAIP,EAASK,EAAQE,GACrB,KAA4B,MAArBP,EAAOS,OAAO,IACnBT,EAASA,EAAOb,UAAU,EAAGa,EAAOQ,QAEtC,GAA+B,IAA3BR,EAAOU,QAAQN,GACjB,OAAOO,mBAAmBX,EAAOb,UAAUiB,EAAOI,OAAQR,EAAOQ,QAEpE,CACD,OAAO,IACT,CAEM,SAAUI,EAAavB,GACH,oBAAbG,WACXA,SAASQ,OAAS,GAAGX,qDACvB,CAEM,SAAUwB,EAAYC,GAC1B,GAAsB,oBAAXjB,OAAwB,OAAO,KAG1C,OADkB,IAAIkB,gBAAgBlB,OAAOC,SAASkB,QACrCC,IAAIH,EACvB,CAEM,SAAUI,EACdC,EACAC,EAAqB1C,EACrB2C,EDnDgC,ICqDhC,MAAMC,EAAQzC,IACR0C,EAAqB,CACzBJ,KAAMA,EAAKK,cACXF,QACAG,UAAW3C,KAAKC,OAKlB,OAFAK,EAAUgC,EAAYM,KAAKC,UAAUJ,GAAOF,GAErCE,CACT,CAEgB,SAAAK,EACdR,EAAqB1C,GAErB,MAAMsB,EAASG,EAAUiB,GACzB,IAAKpB,EAAQ,OAAO,KAEpB,IACE,OAAO0B,KAAKG,MAAM7B,EACnB,CAAC,MACA,OAAO,IACR,CACH,CAEgB,SAAA8B,EAAkBV,EAAqB1C,GACrDkC,EAAaQ,EACf,UAEgBW,IAKd,MAAyB,oBAAdC,UACF,CAAEC,UAAW,GAAIC,SAAU,GAAIC,SAAU,IAG3C,CACLF,UAAWD,UAAUC,WAAa,GAClCC,SAAUF,UAAUE,UAAY,GAChCC,SAAUC,MAAMC,oBAAoBC,qBAAqBC,UAAY,GAEzE,UAEgBC,IAKd,MAAsB,oBAAX3C,QAA8C,oBAAbL,SACnC,CAAEiD,IAAK,GAAIC,SAAU,GAAIC,MAAO,IAGlC,CACLF,IAAK5C,OAAOC,SAAS8C,KACrBF,SAAUlD,SAASkD,UAAY,GAC/BC,MAAOnD,SAASmD,OAAS,GAE7B,OC7FaE,EAGX,WAAAC,CAAYC,GACVC,KAAKD,OAAS,CACZE,OAAQF,EAAOE,QAAUxE,EACzByE,YAAaH,EAAOG,YACpBC,MAAOJ,EAAOI,QAAS,EAE1B,CAEO,GAAAC,IAAOC,GACTL,KAAKD,OAAOI,OACdG,QAAQF,IAAI,cAAeC,EAE9B,CAEO,WAAAE,CAAYC,GAClB,MAAO,GAAGR,KAAKD,OAAOE,mBAAmBO,GAC1C,CAEO,OAAAC,GACN,MAAMC,EAA8B,oBAAX7D,OAEzB,MAAO,CACL4C,IAAKiB,EAAY7D,OAAOC,SAAS8C,KAAO,GACxCF,SAAUgB,EAAYlE,SAASkD,SAAW,GAC1CT,UAAWyB,EAAY1B,UAAUC,UAAY,GAC7CC,SAAUwB,EAAY1B,UAAUE,SAAW,GAC3CC,SAAUuB,GACNtB,MAAMC,oBAAoBC,qBAAqBC,UAC/C,GACJd,UAAW3C,KAAKC,MAChB4E,WAAYnF,EAEf,CAED,UAAMoF,CACJJ,EACAK,GAEA,MAAMC,EAAwB,CAC5BN,QACAK,OACAE,KAAMf,KAAKS,WAGbT,KAAKI,IAAI,iBAAkBI,EAAOM,GAElC,MAAME,EAAWhB,KAAKO,YAAYC,GAC5BS,EAAOvC,KAAKC,UAAUmC,GAE5B,GAAyB,oBAAd9B,WAA6BA,UAAUkC,WAAY,CAC5D,MAAMC,EAAO,IAAIC,KAAK,CAACH,GAAO,CAAEI,KAAM,qBAEtC,IACE,MAAMC,EAAUtC,UAAUkC,WAAWF,EAAUG,GAE/C,OADAnB,KAAKI,IAAI,qBAAsBkB,GACxBA,CACR,CAAC,MAAOC,GACPvB,KAAKI,IAAI,4CAA6CmB,EACvD,CACF,CAED,IACE,MAAMC,QAAiBC,MAAMT,EAAU,CACrCU,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBV,OACAW,WAAW,IAIb,OADA5B,KAAKI,IAAI,kBAAmBoB,EAASK,QAC9BL,EAASM,EACjB,CAAC,MAAOP,GAEP,OADAvB,KAAKI,IAAI,eAAgBmB,IAClB,CACR,CACF,CAED,UAAAQ,CAAWlB,GACT,OAAOb,KAAKY,KAAK,QAASC,EAC3B,CAED,WAAAmB,CAAYnB,GAOV,OAAOb,KAAKY,KAAK,SAAUC,EAC5B,CAED,SAAAoB,CAAUpB,GASR,OAAOb,KAAKY,KAAK,OAAQC,EAC1B,CAED,aAAAqB,CAAcrB,GACZ,OAAOb,KAAKY,KAAK,WAAYC,EAC9B,QClHUsB,EAMX,WAAArC,CAAYC,GAHJC,KAAWoC,aAAY,EACvBpC,KAAYqC,aAAwB,KAG1CrC,KAAKD,OAAS,CACZG,YAAaH,EAAOG,YACpBD,OAAQF,EAAOE,QAAUxE,EACzB6G,cAAevC,EAAOuC,eHxBE,MGyBxBlE,WAAY2B,EAAO3B,YAAc1C,EACjC6G,iBAAkBxC,EAAOwC,kBH3BG,GG4B5BpC,MAAOJ,EAAOI,QAAS,EACvBqC,WAAgC,IAArBzC,EAAOyC,WAGpBxC,KAAKyC,QAAU,IAAI5C,EAAQ,CACzBI,OAAQD,KAAKD,OAAOE,OACpBC,YAAaF,KAAKD,OAAOG,YACzBC,MAAOH,KAAKD,OAAOI,QAGrBH,KAAK0C,mBAED1C,KAAKD,OAAOyC,WACdxC,KAAK2C,oBAGP3C,KAAK4C,gBACN,CAEO,GAAAxC,IAAOC,GACTL,KAAKD,OAAOI,OACdG,QAAQF,IAAI,cAAeC,EAE9B,CAEO,cAAAuC,GACgB,oBAAX/F,SACTA,OAAOgG,OAAS7C,KACZA,KAAKqC,eACPxF,OAAOiG,cAAgB9C,KAAKqC,aAAa/D,OAG9C,CAEO,gBAAAoE,GACN1C,KAAKqC,aAAezD,EAAgBoB,KAAKD,OAAO3B,YAC5C4B,KAAKqC,cACPrC,KAAKI,IAAI,oCAAqCJ,KAAKqC,aAEtD,CAEO,iBAAAM,GACN,GAAsB,oBAAX9F,OAAwB,OAEnC,MAAMsB,EAAON,EAAYmC,KAAKD,OAAOuC,eACjCnE,GAAQA,IAAS6B,KAAKqC,cAAclE,OACtC6B,KAAKI,IAAI,iCAAkCjC,GAC3C6B,KAAK+B,WAAW5D,GAEnB,CAED,QAAA4E,GACE,OAAO/C,KAAKqC,cAAc/D,OAAS,IACpC,CAED,OAAA0E,GACE,OAAOhD,KAAKqC,cAAclE,MAAQ,IACnC,CAED,eAAAS,GACE,OAAOoB,KAAKqC,YACb,CAED,WAAAY,GACE,OAA6B,OAAtBjD,KAAKqC,YACb,CAED,aAAAa,GACEpE,EAAkBkB,KAAKD,OAAO3B,YAC9B4B,KAAKqC,aAAe,KACE,oBAAXxF,eACFA,OAAOiG,cAEhB9C,KAAKI,IAAI,wBACV,CAED,gBAAM2B,CAAW5D,GAaf,OAZA6B,KAAKqC,aAAenE,EAClBC,EACA6B,KAAKD,OAAO3B,WACZ4B,KAAKD,OAAOwC,kBAGQ,oBAAX1F,SACTA,OAAOiG,cAAgB9C,KAAKqC,aAAa/D,OAG3C0B,KAAKI,IAAI,2BAA4BjC,EAAM,SAAU6B,KAAKqC,aAAa/D,OAEhE0B,KAAKyC,QAAQV,WAAW,CAC7B5D,KAAM6B,KAAKqC,aAAalE,KACxBG,MAAO0B,KAAKqC,aAAa/D,OAE5B,CAED,YAAM6E,CAAOtC,EAAwB,IACnC,OAAKb,KAAKqC,cAKVrC,KAAKI,IAAI,mBAAoBS,GAEtBb,KAAKyC,QAAQT,YAAY,CAC9B7D,KAAM6B,KAAKqC,aAAalE,KACxBG,MAAO0B,KAAKqC,aAAa/D,MACzB8E,MAAOvC,EAAKuC,MACZC,mBAAoBxC,EAAKwC,mBACzBC,SAAUzC,EAAKyC,aAXftD,KAAKI,IAAI,+CACF,EAYV,CAED,UAAMmD,CAAK1C,GACT,OAAKb,KAAKqC,cAKVrC,KAAKI,IAAI,iBAAkBS,GAEpBb,KAAKyC,QAAQR,UAAU,CAC5B9D,KAAM6B,KAAKqC,aAAalE,KACxBG,MAAO0B,KAAKqC,aAAa/D,MACzB+E,mBAAoBxC,EAAKwC,mBACzBG,OAAQ3C,EAAK2C,OACbC,SAAU5C,EAAK4C,SACfC,SAAU7C,EAAK6C,UAAY,SAC3BJ,SAAUzC,EAAKyC,aAbftD,KAAKI,IAAI,6CACF,EAcV,CAED,cAAMuD,GACJ,QAAK3D,KAAKqC,cAIHrC,KAAKyC,QAAQP,cAAc,CAChC/D,KAAM6B,KAAKqC,aAAalE,KACxBG,MAAO0B,KAAKqC,aAAa/D,OAE5B,CAED,0BAAAsF,GACE,OAAO5D,KAAKqC,cAAc/D,OAAS,IACpC,CAED,iBAAAuF,GACE,OAAK7D,KAAKqC,aAIH,CACLS,cAAe9C,KAAKqC,aAAa/D,MACjCwF,YAAa9D,KAAKqC,aAAalE,MALxB,EAOV,CAED,oBAAM4F,CAAe5F,GACnB,MAAMsB,EAAM,GAAGO,KAAKD,OAAOE,6BAA6BD,KAAKD,OAAOG,wBAAwBjD,mBAAmBkB,KAE/G,IACE,MAAMqD,QAAiBC,MAAMhC,GAE7B,IAAK+B,EAASM,GAAI,CAChB,GAAwB,MAApBN,EAASK,OAEX,OADA7B,KAAKI,IAAI,mCAAoCjC,GACtC,KAET,MAAM,IAAI6F,MAAM,uBAAuBxC,EAASK,SACjD,CAED,MAAMhB,QAAaW,EAASyC,OAE5B,OADAjE,KAAKI,IAAI,wBAAyBS,GAC3BA,CACR,CAAC,MAAOU,GAEP,OADAvB,KAAKI,IAAI,+BAAgCmB,GAClC,IACR,CACF,CAED,cAAA2C,GACE,OAAOlE,KAAKD,OAAOG,WACpB,EAGH,IAAIiE,EAAqC,KAEnC,SAAUC,EAAKrE,GAEnB,OADAoE,EAAgB,IAAIhC,EAAapC,GAC1BoE,CACT,UAEgBE,IACd,OAAOF,CACT"}
|
package/dist/blossu.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).Blossu={})}(this,(function(e){"use strict";const r="0.1.0",t="https://api.blossu.com",n="blossu_ref";function o(){return`bls_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,10)}`}function i(e,r,t){if("undefined"==typeof document)return;const n=new Date;n.setTime(n.getTime()+24*t*60*60*1e3);const o="https:"===window.location.protocol?"; Secure":"";document.cookie=`${e}=${encodeURIComponent(r)}; expires=${n.toUTCString()}; path=/; SameSite=Lax${o}`}function a(e){if("undefined"==typeof document)return null;const r=`${e}=`,t=document.cookie.split(";");for(let e=0;e<t.length;e++){let n=t[e];for(;" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(r))return decodeURIComponent(n.substring(r.length,n.length))}return null}function s(e){"undefined"!=typeof document&&(document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`)}function f(e){if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(e)}function l(e,r=n,t=30){const a=o(),s={code:e.toLowerCase(),refId:a,timestamp:Date.now()};return i(r,JSON.stringify(s),t),s}function c(e=n){const r=a(e);if(!r)return null;try{return JSON.parse(r)}catch{return null}}function u(e=n){s(e)}class d{constructor(e){this.config={apiUrl:e.apiUrl||t,programSlug:e.programSlug,debug:e.debug||!1}}log(...e){this.config.debug&&console.log("[Blossu]",...e)}getEndpoint(e){return`${this.config.apiUrl}/v1/track/${e}`}getMeta(){const e="undefined"!=typeof window;return{url:e?window.location.href:"",referrer:e?document.referrer:"",userAgent:e?navigator.userAgent:"",language:e?navigator.language:"",timezone:e&&Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||"",timestamp:Date.now(),sdkVersion:r}}async send(e,r){const t={event:e,data:r,meta:this.getMeta()};this.log("Sending event:",e,t);const n=this.getEndpoint(e),o=JSON.stringify(t);if("undefined"!=typeof navigator&&navigator.sendBeacon){const e=new Blob([o],{type:"application/json"});try{const r=navigator.sendBeacon(n,e);return this.log("sendBeacon result:",r),r}catch(e){this.log("sendBeacon failed, falling back to fetch:",e)}}try{const e=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:o,keepalive:!0});return this.log("fetch response:",e.status),e.ok}catch(e){return this.log("fetch error:",e),!1}}trackClick(e){return this.send("click",e)}trackSignup(e){return this.send("signup",e)}trackSale(e){return this.send("sale",e)}trackPageview(e){return this.send("pageview",e)}}class g{constructor(e){this.initialized=!1,this.referralInfo=null,this.config={programSlug:e.programSlug,apiUrl:e.apiUrl||t,trackingParam:e.trackingParam||"ref",cookieName:e.cookieName||n,cookieExpiryDays:e.cookieExpiryDays||30,debug:e.debug||!1,autoTrack:!1!==e.autoTrack},this.tracker=new d({apiUrl:this.config.apiUrl,programSlug:this.config.programSlug,debug:this.config.debug}),this.loadReferralInfo(),this.config.autoTrack&&this.autoTrackReferral(),this.exposeToWindow()}log(...e){this.config.debug&&console.log("[Blossu]",...e)}exposeToWindow(){"undefined"!=typeof window&&(window.blossu=this,this.referralInfo&&(window.blossu_ref_id=this.referralInfo.refId))}loadReferralInfo(){this.referralInfo=c(this.config.cookieName),this.referralInfo&&this.log("Loaded referral info from cookie:",this.referralInfo)}autoTrackReferral(){if("undefined"==typeof window)return;const e=f(this.config.trackingParam);e&&e!==this.referralInfo?.code&&(this.log("Detected referral code in URL:",e),this.trackClick(e))}getRefId(){return this.referralInfo?.refId||null}getCode(){return this.referralInfo?.code||null}getReferralInfo(){return this.referralInfo}hasReferral(){return null!==this.referralInfo}clearReferral(){u(this.config.cookieName),this.referralInfo=null,"undefined"!=typeof window&&delete window.blossu_ref_id,this.log("Cleared referral info")}async trackClick(e){return this.referralInfo=l(e,this.config.cookieName,this.config.cookieExpiryDays),"undefined"!=typeof window&&(window.blossu_ref_id=this.referralInfo.refId),this.log("Tracking click for code:",e,"refId:",this.referralInfo.refId),this.tracker.trackClick({code:this.referralInfo.code,refId:this.referralInfo.refId})}async signup(e={}){return this.referralInfo?(this.log("Tracking signup:",e),this.tracker.trackSignup({code:this.referralInfo.code,refId:this.referralInfo.refId,email:e.email,externalCustomerId:e.externalCustomerId,metadata:e.metadata})):(this.log("No referral info, skipping signup tracking"),!1)}async sale(e){return this.referralInfo?(this.log("Tracking sale:",e),this.tracker.trackSale({code:this.referralInfo.code,refId:this.referralInfo.refId,externalCustomerId:e.externalCustomerId,amount:e.amount,currency:e.currency,provider:e.provider||"custom",metadata:e.metadata})):(this.log("No referral info, skipping sale tracking"),!1)}async pageview(){return!!this.referralInfo&&this.tracker.trackPageview({code:this.referralInfo.code,refId:this.referralInfo.refId})}getStripeClientReferenceId(){return this.referralInfo?.refId||null}getStripeMetadata(){return this.referralInfo?{blossu_ref_id:this.referralInfo.refId,blossu_code:this.referralInfo.code}:{}}async getPartnerInfo(e){const r=`${this.config.apiUrl}/v1/public/programs/${this.config.programSlug}/referral/${encodeURIComponent(e)}`;try{const t=await fetch(r);if(!t.ok){if(404===t.status)return this.log("Partner info not found for code:",e),null;throw new Error(`HTTP error! status: ${t.status}`)}const n=await t.json();return this.log("Fetched partner info:",n),n}catch(e){return this.log("Error fetching partner info:",e),null}}getProgramSlug(){return this.config.programSlug}}let h=null;e.BlossuClient=g,e.COOKIE_EXPIRY_DAYS=30,e.COOKIE_NAME=n,e.DEFAULT_API_URL=t,e.TRACKING_PARAM="ref",e.Tracker=d,e.VERSION=r,e.clearReferralInfo=u,e.default=g,e.deleteCookie=s,e.generateRefId=o,e.getBrowserInfo=function(){return"undefined"==typeof navigator?{userAgent:"",language:"",timezone:""}:{userAgent:navigator.userAgent||"",language:navigator.language||"",timezone:Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||""}},e.getClient=function(){return h},e.getCookie=a,e.getPageInfo=function(){return"undefined"==typeof window||"undefined"==typeof document?{url:"",referrer:"",title:""}:{url:window.location.href,referrer:document.referrer||"",title:document.title||""}},e.getReferralInfo=c,e.getUrlParam=f,e.init=function(e){return h=new g(e),h},e.saveReferralInfo=l,e.setCookie=i,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=blossu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blossu.js","sources":["../src/constants.ts","../src/utils.ts","../src/tracker.ts","../src/blossu.ts"],"sourcesContent":[null,null,null,null],"names":["VERSION","DEFAULT_API_URL","COOKIE_NAME","generateRefId","Date","now","toString","Math","random","substring","setCookie","name","value","days","document","expires","setTime","getTime","secure","window","location","protocol","cookie","encodeURIComponent","toUTCString","getCookie","nameEQ","cookies","split","i","length","charAt","indexOf","decodeURIComponent","deleteCookie","getUrlParam","param","URLSearchParams","search","get","saveReferralInfo","code","cookieName","expiryDays","refId","info","toLowerCase","timestamp","JSON","stringify","getReferralInfo","parse","clearReferralInfo","Tracker","constructor","config","this","apiUrl","programSlug","debug","log","args","console","getEndpoint","event","getMeta","isBrowser","url","href","referrer","userAgent","navigator","language","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","sdkVersion","send","data","payload","meta","endpoint","body","sendBeacon","blob","Blob","type","success","error","response","fetch","method","headers","keepalive","status","ok","trackClick","trackSignup","trackSale","trackPageview","BlossuClient","initialized","referralInfo","trackingParam","cookieExpiryDays","autoTrack","tracker","loadReferralInfo","autoTrackReferral","exposeToWindow","blossu","blossu_ref_id","getRefId","getCode","hasReferral","clearReferral","signup","email","externalCustomerId","metadata","sale","amount","currency","provider","pageview","getStripeClientReferenceId","getStripeMetadata","blossu_code","getPartnerInfo","Error","json","getProgramSlug","defaultClient","title"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var Blossu=function(e){"use strict";const r="0.1.0",t="https://api.blossu.com",n="blossu_ref";function o(){return`bls_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,10)}`}function i(e,r,t){if("undefined"==typeof document)return;const n=new Date;n.setTime(n.getTime()+24*t*60*60*1e3);const o="https:"===window.location.protocol?"; Secure":"";document.cookie=`${e}=${encodeURIComponent(r)}; expires=${n.toUTCString()}; path=/; SameSite=Lax${o}`}function a(e){if("undefined"==typeof document)return null;const r=`${e}=`,t=document.cookie.split(";");for(let e=0;e<t.length;e++){let n=t[e];for(;" "===n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(r))return decodeURIComponent(n.substring(r.length,n.length))}return null}function s(e){"undefined"!=typeof document&&(document.cookie=`${e}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`)}function f(e){if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(e)}function l(e,r=n,t=30){const a=o(),s={code:e.toLowerCase(),refId:a,timestamp:Date.now()};return i(r,JSON.stringify(s),t),s}function c(e=n){const r=a(e);if(!r)return null;try{return JSON.parse(r)}catch{return null}}function u(e=n){s(e)}class d{constructor(e){this.config={apiUrl:e.apiUrl||t,programSlug:e.programSlug,debug:e.debug||!1}}log(...e){this.config.debug&&console.log("[Blossu]",...e)}getEndpoint(e){return`${this.config.apiUrl}/v1/track/${e}`}getMeta(){const e="undefined"!=typeof window;return{url:e?window.location.href:"",referrer:e?document.referrer:"",userAgent:e?navigator.userAgent:"",language:e?navigator.language:"",timezone:e&&Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||"",timestamp:Date.now(),sdkVersion:r}}async send(e,r){const t={event:e,data:r,meta:this.getMeta()};this.log("Sending event:",e,t);const n=this.getEndpoint(e),o=JSON.stringify(t);if("undefined"!=typeof navigator&&navigator.sendBeacon){const e=new Blob([o],{type:"application/json"});try{const r=navigator.sendBeacon(n,e);return this.log("sendBeacon result:",r),r}catch(e){this.log("sendBeacon failed, falling back to fetch:",e)}}try{const e=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:o,keepalive:!0});return this.log("fetch response:",e.status),e.ok}catch(e){return this.log("fetch error:",e),!1}}trackClick(e){return this.send("click",e)}trackSignup(e){return this.send("signup",e)}trackSale(e){return this.send("sale",e)}trackPageview(e){return this.send("pageview",e)}}class g{constructor(e){this.initialized=!1,this.referralInfo=null,this.config={programSlug:e.programSlug,apiUrl:e.apiUrl||t,trackingParam:e.trackingParam||"ref",cookieName:e.cookieName||n,cookieExpiryDays:e.cookieExpiryDays||30,debug:e.debug||!1,autoTrack:!1!==e.autoTrack},this.tracker=new d({apiUrl:this.config.apiUrl,programSlug:this.config.programSlug,debug:this.config.debug}),this.loadReferralInfo(),this.config.autoTrack&&this.autoTrackReferral(),this.exposeToWindow()}log(...e){this.config.debug&&console.log("[Blossu]",...e)}exposeToWindow(){"undefined"!=typeof window&&(window.blossu=this,this.referralInfo&&(window.blossu_ref_id=this.referralInfo.refId))}loadReferralInfo(){this.referralInfo=c(this.config.cookieName),this.referralInfo&&this.log("Loaded referral info from cookie:",this.referralInfo)}autoTrackReferral(){if("undefined"==typeof window)return;const e=f(this.config.trackingParam);e&&e!==this.referralInfo?.code&&(this.log("Detected referral code in URL:",e),this.trackClick(e))}getRefId(){return this.referralInfo?.refId||null}getCode(){return this.referralInfo?.code||null}getReferralInfo(){return this.referralInfo}hasReferral(){return null!==this.referralInfo}clearReferral(){u(this.config.cookieName),this.referralInfo=null,"undefined"!=typeof window&&delete window.blossu_ref_id,this.log("Cleared referral info")}async trackClick(e){return this.referralInfo=l(e,this.config.cookieName,this.config.cookieExpiryDays),"undefined"!=typeof window&&(window.blossu_ref_id=this.referralInfo.refId),this.log("Tracking click for code:",e,"refId:",this.referralInfo.refId),this.tracker.trackClick({code:this.referralInfo.code,refId:this.referralInfo.refId})}async signup(e={}){return this.referralInfo?(this.log("Tracking signup:",e),this.tracker.trackSignup({code:this.referralInfo.code,refId:this.referralInfo.refId,email:e.email,externalCustomerId:e.externalCustomerId,metadata:e.metadata})):(this.log("No referral info, skipping signup tracking"),!1)}async sale(e){return this.referralInfo?(this.log("Tracking sale:",e),this.tracker.trackSale({code:this.referralInfo.code,refId:this.referralInfo.refId,externalCustomerId:e.externalCustomerId,amount:e.amount,currency:e.currency,provider:e.provider||"custom",metadata:e.metadata})):(this.log("No referral info, skipping sale tracking"),!1)}async pageview(){return!!this.referralInfo&&this.tracker.trackPageview({code:this.referralInfo.code,refId:this.referralInfo.refId})}getStripeClientReferenceId(){return this.referralInfo?.refId||null}getStripeMetadata(){return this.referralInfo?{blossu_ref_id:this.referralInfo.refId,blossu_code:this.referralInfo.code}:{}}async getPartnerInfo(e){const r=`${this.config.apiUrl}/v1/public/programs/${this.config.programSlug}/referral/${encodeURIComponent(e)}`;try{const t=await fetch(r);if(!t.ok){if(404===t.status)return this.log("Partner info not found for code:",e),null;throw new Error(`HTTP error! status: ${t.status}`)}const n=await t.json();return this.log("Fetched partner info:",n),n}catch(e){return this.log("Error fetching partner info:",e),null}}getProgramSlug(){return this.config.programSlug}}let h=null;return e.BlossuClient=g,e.COOKIE_EXPIRY_DAYS=30,e.COOKIE_NAME=n,e.DEFAULT_API_URL=t,e.TRACKING_PARAM="ref",e.Tracker=d,e.VERSION=r,e.clearReferralInfo=u,e.default=g,e.deleteCookie=s,e.generateRefId=o,e.getBrowserInfo=function(){return"undefined"==typeof navigator?{userAgent:"",language:"",timezone:""}:{userAgent:navigator.userAgent||"",language:navigator.language||"",timezone:Intl?.DateTimeFormat?.()?.resolvedOptions?.()?.timeZone||""}},e.getClient=function(){return h},e.getCookie=a,e.getPageInfo=function(){return"undefined"==typeof window||"undefined"==typeof document?{url:"",referrer:"",title:""}:{url:window.location.href,referrer:document.referrer||"",title:document.title||""}},e.getReferralInfo=c,e.getUrlParam=f,e.init=function(e){return h=new g(e),h},e.saveReferralInfo=l,e.setCookie=i,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
|
|
2
|
+
//# sourceMappingURL=blossu.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blossu.min.js","sources":["../src/constants.ts","../src/utils.ts","../src/tracker.ts","../src/blossu.ts"],"sourcesContent":[null,null,null,null],"names":["VERSION","DEFAULT_API_URL","COOKIE_NAME","generateRefId","Date","now","toString","Math","random","substring","setCookie","name","value","days","document","expires","setTime","getTime","secure","window","location","protocol","cookie","encodeURIComponent","toUTCString","getCookie","nameEQ","cookies","split","i","length","charAt","indexOf","decodeURIComponent","deleteCookie","getUrlParam","param","URLSearchParams","search","get","saveReferralInfo","code","cookieName","expiryDays","refId","info","toLowerCase","timestamp","JSON","stringify","getReferralInfo","parse","clearReferralInfo","Tracker","constructor","config","this","apiUrl","programSlug","debug","log","args","console","getEndpoint","event","getMeta","isBrowser","url","href","referrer","userAgent","navigator","language","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","sdkVersion","send","data","payload","meta","endpoint","body","sendBeacon","blob","Blob","type","success","error","response","fetch","method","headers","keepalive","status","ok","trackClick","trackSignup","trackSale","trackPageview","BlossuClient","initialized","referralInfo","trackingParam","cookieExpiryDays","autoTrack","tracker","loadReferralInfo","autoTrackReferral","exposeToWindow","blossu","blossu_ref_id","getRefId","getCode","hasReferral","clearReferral","signup","email","externalCustomerId","metadata","sale","amount","currency","provider","pageview","getStripeClientReferenceId","getStripeMetadata","blossu_code","getPartnerInfo","Error","json","getProgramSlug","defaultClient","title"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
|
2
|
+
export declare const DEFAULT_API_URL = "https://api.blossu.com";
|
|
3
|
+
export declare const COOKIE_NAME = "blossu_ref";
|
|
4
|
+
export declare const COOKIE_EXPIRY_DAYS = 30;
|
|
5
|
+
export declare const TRACKING_PARAM = "ref";
|
|
6
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,WAAW,eAAe,CAAC;AACxC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,cAAc,QAAQ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { BlossuClient, init, getClient } from './blossu';
|
|
2
|
+
export { Tracker } from './tracker';
|
|
3
|
+
export type { BlossuConfig, TrackClickData, TrackSignupData, TrackSaleData, ReferralInfo, PublicPartnerInfo, PublicReferralInfo, PartnerBrand, } from './types';
|
|
4
|
+
export { generateRefId, setCookie, getCookie, deleteCookie, getUrlParam, saveReferralInfo, getReferralInfo, clearReferralInfo, getBrowserInfo, getPageInfo, } from './utils';
|
|
5
|
+
export { VERSION, DEFAULT_API_URL, COOKIE_NAME, COOKIE_EXPIRY_DAYS, TRACKING_PARAM, } from './constants';
|
|
6
|
+
import { BlossuClient } from './blossu';
|
|
7
|
+
export default BlossuClient;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,OAAO,EACP,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,eAAe,YAAY,CAAC"}
|