rd-mini-browser 0.1.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/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Raindrop Browser SDK
2
+
3
+ Lightweight client-side SDK for AI observability.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @raindrop/browser
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { RaindropBrowser } from "@raindrop/browser";
15
+
16
+ const raindrop = new RaindropBrowser({
17
+ apiKey: "your-api-key",
18
+ });
19
+
20
+ // Identify user
21
+ raindrop.identify("user-123", {
22
+ name: "John Doe",
23
+ email: "john@example.com",
24
+ plan: "pro",
25
+ });
26
+
27
+ // Send feedback on AI responses
28
+ raindrop.feedback(traceId, {
29
+ type: "thumbs_up",
30
+ comment: "Great response!",
31
+ });
32
+
33
+ // Or with numeric score
34
+ raindrop.feedback(traceId, {
35
+ score: 0.8,
36
+ comment: "Mostly accurate",
37
+ });
38
+
39
+ // Track custom events
40
+ raindrop.track("chat_started", {
41
+ properties: {
42
+ source: "homepage",
43
+ },
44
+ });
45
+ ```
46
+
47
+ ## API
48
+
49
+ ### `new RaindropBrowser(config)`
50
+
51
+ - `apiKey` (required): Your Raindrop API key
52
+ - `baseUrl` (optional): API base URL (default: `https://api.raindrop.ai`)
53
+ - `debug` (optional): Enable debug logging
54
+
55
+ ### `identify(userId, traits?)`
56
+
57
+ Identify a user for all subsequent calls.
58
+
59
+ ### `feedback(traceId, options)`
60
+
61
+ Send feedback for a specific AI trace.
62
+
63
+ Options:
64
+ - `type`: `"thumbs_up"` | `"thumbs_down"`
65
+ - `score`: `0-1` numeric score
66
+ - `comment`: Text feedback
67
+ - `signalType`: `"default"` | `"feedback"` | `"edit"`
68
+ - `properties`: Additional properties
69
+
70
+ ### `track(event, options?)`
71
+
72
+ Track a custom event.
73
+
74
+ ### `flush()`
75
+
76
+ Manually flush pending events (called automatically on page unload).
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Raindrop Browser SDK
3
+ *
4
+ * Lightweight client-side SDK for AI observability.
5
+ *
6
+ * Usage:
7
+ * const raindrop = new Raindrop({ apiKey: "..." });
8
+ *
9
+ * // Single-shot AI event
10
+ * const { eventIds } = await raindrop.trackAi({
11
+ * event: "chat",
12
+ * userId: "user_123",
13
+ * model: "gpt-4o",
14
+ * input: "hello",
15
+ * output: "hi there",
16
+ * });
17
+ *
18
+ * // Partial AI event (streaming)
19
+ * const partial = await raindrop.trackAiPartial({
20
+ * eventId: "evt_123",
21
+ * event: "chat",
22
+ * userId: "user_123",
23
+ * model: "gpt-4o",
24
+ * });
25
+ * await partial.finish({ output: "final response" });
26
+ */
27
+ export interface RaindropConfig {
28
+ apiKey: string;
29
+ baseUrl?: string;
30
+ debug?: boolean;
31
+ }
32
+ export interface UserTraits {
33
+ name?: string;
34
+ email?: string;
35
+ plan?: string;
36
+ [key: string]: unknown;
37
+ }
38
+ export interface Attachment {
39
+ type: "code" | "text" | "image" | "iframe";
40
+ name?: string;
41
+ value: string;
42
+ role: "input" | "output";
43
+ language?: string;
44
+ }
45
+ export interface TrackAiOptions {
46
+ event: string;
47
+ userId?: string;
48
+ eventId?: string;
49
+ model?: string;
50
+ input?: string;
51
+ output?: string;
52
+ convoId?: string;
53
+ properties?: Record<string, unknown>;
54
+ attachments?: Attachment[];
55
+ }
56
+ export interface TrackAiPartialOptions {
57
+ eventId: string;
58
+ event?: string;
59
+ userId?: string;
60
+ model?: string;
61
+ input?: string;
62
+ output?: string;
63
+ convoId?: string;
64
+ properties?: Record<string, unknown>;
65
+ attachments?: Attachment[];
66
+ }
67
+ export interface PartialEvent {
68
+ eventId: string;
69
+ finish: (options?: {
70
+ output?: string;
71
+ properties?: Record<string, unknown>;
72
+ }) => Promise<{
73
+ success: boolean;
74
+ }>;
75
+ }
76
+ export interface SignalOptions {
77
+ eventId: string;
78
+ name: string;
79
+ type?: "default" | "feedback" | "edit";
80
+ sentiment?: "POSITIVE" | "NEGATIVE";
81
+ comment?: string;
82
+ after?: string;
83
+ attachmentId?: string;
84
+ properties?: Record<string, unknown>;
85
+ }
86
+ export interface FeedbackOptions {
87
+ type?: "thumbs_up" | "thumbs_down";
88
+ score?: number;
89
+ comment?: string;
90
+ signalType?: "default" | "feedback" | "edit" | "standard";
91
+ properties?: Record<string, unknown>;
92
+ }
93
+ export interface IdentifyOptions {
94
+ userId: string;
95
+ traits?: UserTraits;
96
+ }
97
+ export declare class Raindrop {
98
+ private apiKey;
99
+ private baseUrl;
100
+ private debug;
101
+ private currentUserId;
102
+ private partialEvents;
103
+ constructor(config: RaindropConfig);
104
+ /**
105
+ * Identify a user for all subsequent calls.
106
+ */
107
+ identify(options: IdentifyOptions | IdentifyOptions[]): Promise<{
108
+ success: boolean;
109
+ }>;
110
+ /**
111
+ * Track a single-shot AI event.
112
+ */
113
+ trackAi(options: TrackAiOptions): Promise<{
114
+ eventIds: string[];
115
+ }>;
116
+ /**
117
+ * Start a partial AI event (for streaming or multi-turn).
118
+ * Returns an object with finish() to complete the event.
119
+ */
120
+ trackAiPartial(options: TrackAiPartialOptions): Promise<PartialEvent>;
121
+ /**
122
+ * Finish a partial AI event.
123
+ */
124
+ private finishPartial;
125
+ /**
126
+ * Track a signal (feedback, edit, etc.) on an AI event.
127
+ */
128
+ trackSignal(options: SignalOptions): Promise<{
129
+ success: boolean;
130
+ }>;
131
+ /**
132
+ * Send feedback for a specific trace (convenience wrapper for trackSignal).
133
+ */
134
+ feedback(traceId: string, options: FeedbackOptions): Promise<{
135
+ success: boolean;
136
+ }>;
137
+ /**
138
+ * Send data to the API.
139
+ */
140
+ private send;
141
+ /**
142
+ * Generate a unique event ID.
143
+ */
144
+ private generateId;
145
+ }
146
+ export default Raindrop;
147
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,183 @@
1
+ // src/index.ts
2
+ class Raindrop {
3
+ apiKey;
4
+ baseUrl;
5
+ debug;
6
+ currentUserId = null;
7
+ partialEvents = new Map;
8
+ constructor(config) {
9
+ this.apiKey = config.apiKey;
10
+ this.baseUrl = config.baseUrl || "https://api.raindrop.ai";
11
+ this.debug = config.debug || false;
12
+ if (this.debug) {
13
+ console.log("[raindrop] Browser SDK initialized");
14
+ }
15
+ }
16
+ async identify(options) {
17
+ const items = Array.isArray(options) ? options : [options];
18
+ for (const item of items) {
19
+ if (!this.currentUserId) {
20
+ this.currentUserId = item.userId;
21
+ }
22
+ }
23
+ const payload = items.map((item) => ({
24
+ user_id: item.userId,
25
+ traits: item.traits || {}
26
+ }));
27
+ await this.send("/users/identify", payload);
28
+ if (this.debug) {
29
+ console.log(`[raindrop] Identified ${items.length} user(s)`);
30
+ }
31
+ return { success: true };
32
+ }
33
+ async trackAi(options) {
34
+ const eventId = options.eventId || this.generateId();
35
+ const event = {
36
+ event_id: eventId,
37
+ user_id: options.userId || this.currentUserId,
38
+ event: options.event,
39
+ timestamp: new Date().toISOString(),
40
+ properties: options.properties || {},
41
+ ai_data: {
42
+ model: options.model,
43
+ input: options.input,
44
+ output: options.output,
45
+ convo_id: options.convoId
46
+ },
47
+ ...options.attachments && { attachments: options.attachments }
48
+ };
49
+ await this.send("/events/track", [event]);
50
+ if (this.debug) {
51
+ console.log(`[raindrop] AI event tracked: ${eventId}`);
52
+ }
53
+ return { eventIds: [eventId] };
54
+ }
55
+ async trackAiPartial(options) {
56
+ const existing = this.partialEvents.get(options.eventId);
57
+ if (existing) {
58
+ if (options.output) {
59
+ existing.output = (existing.output || "") + options.output;
60
+ }
61
+ if (options.properties) {
62
+ existing.properties = { ...existing.properties, ...options.properties };
63
+ }
64
+ if (options.attachments) {
65
+ existing.attachments = [
66
+ ...existing.attachments || [],
67
+ ...options.attachments
68
+ ];
69
+ }
70
+ } else {
71
+ this.partialEvents.set(options.eventId, { ...options });
72
+ }
73
+ if (this.debug) {
74
+ console.log(`[raindrop] Partial event updated: ${options.eventId}`);
75
+ }
76
+ return {
77
+ eventId: options.eventId,
78
+ finish: async (finishOptions) => {
79
+ return this.finishPartial(options.eventId, finishOptions);
80
+ }
81
+ };
82
+ }
83
+ async finishPartial(eventId, options) {
84
+ const partial = this.partialEvents.get(eventId);
85
+ if (!partial) {
86
+ if (this.debug) {
87
+ console.warn(`[raindrop] No partial event found: ${eventId}`);
88
+ }
89
+ return { success: false };
90
+ }
91
+ if (options?.output) {
92
+ partial.output = options.output;
93
+ }
94
+ if (options?.properties) {
95
+ partial.properties = { ...partial.properties, ...options.properties };
96
+ }
97
+ const event = {
98
+ event_id: eventId,
99
+ user_id: partial.userId || this.currentUserId,
100
+ event: partial.event || "ai_interaction",
101
+ timestamp: new Date().toISOString(),
102
+ properties: partial.properties || {},
103
+ ai_data: {
104
+ model: partial.model,
105
+ input: partial.input,
106
+ output: partial.output,
107
+ convo_id: partial.convoId
108
+ },
109
+ ...partial.attachments && { attachments: partial.attachments }
110
+ };
111
+ await this.send("/events/track", [event]);
112
+ this.partialEvents.delete(eventId);
113
+ if (this.debug) {
114
+ console.log(`[raindrop] Partial event finished: ${eventId}`);
115
+ }
116
+ return { success: true };
117
+ }
118
+ async trackSignal(options) {
119
+ const signal = {
120
+ event_id: options.eventId,
121
+ signal_name: options.name,
122
+ signal_type: options.type || "default",
123
+ sentiment: options.sentiment || "NEGATIVE",
124
+ timestamp: new Date().toISOString(),
125
+ ...options.attachmentId && { attachment_id: options.attachmentId },
126
+ properties: {
127
+ ...options.comment && { comment: options.comment },
128
+ ...options.after && { after: options.after },
129
+ ...options.properties
130
+ }
131
+ };
132
+ await this.send("/signals/track", [signal]);
133
+ if (this.debug) {
134
+ console.log(`[raindrop] Signal tracked: ${options.name} on ${options.eventId}`);
135
+ }
136
+ return { success: true };
137
+ }
138
+ async feedback(traceId, options) {
139
+ const name = options.score !== undefined ? options.score >= 0.5 ? "thumbs_up" : "thumbs_down" : options.type || "thumbs_down";
140
+ const sentiment = options.score !== undefined ? options.score >= 0.5 ? "POSITIVE" : "NEGATIVE" : options.type === "thumbs_up" ? "POSITIVE" : "NEGATIVE";
141
+ return this.trackSignal({
142
+ eventId: traceId,
143
+ name,
144
+ type: options.signalType === "standard" ? "default" : options.signalType,
145
+ sentiment,
146
+ comment: options.comment,
147
+ properties: options.properties
148
+ });
149
+ }
150
+ async send(endpoint, data) {
151
+ const url = `${this.baseUrl}/v1${endpoint}`;
152
+ const body = JSON.stringify(data);
153
+ try {
154
+ const response = await fetch(url, {
155
+ method: "POST",
156
+ headers: {
157
+ "Content-Type": "application/json",
158
+ Authorization: `Bearer ${this.apiKey}`
159
+ },
160
+ body,
161
+ keepalive: true
162
+ });
163
+ if (!response.ok && this.debug) {
164
+ console.warn(`[raindrop] API error: ${response.status}`);
165
+ }
166
+ } catch (error) {
167
+ if (this.debug) {
168
+ console.error(`[raindrop] Failed to send:`, error);
169
+ }
170
+ }
171
+ }
172
+ generateId() {
173
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
174
+ return crypto.randomUUID();
175
+ }
176
+ return "evt_" + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
177
+ }
178
+ }
179
+ var src_default = Raindrop;
180
+ export {
181
+ src_default as default,
182
+ Raindrop
183
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "rd-mini-browser",
3
+ "version": "0.1.0",
4
+ "description": "Raindrop browser SDK for client-side AI observability",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "bun build src/index.ts --outdir dist --target browser && tsc --emitDeclarationOnly",
20
+ "dev": "bun build src/index.ts --outdir dist --target browser --watch"
21
+ },
22
+ "keywords": [
23
+ "raindrop",
24
+ "ai",
25
+ "observability",
26
+ "browser",
27
+ "analytics"
28
+ ],
29
+ "author": "Raindrop",
30
+ "license": "MIT",
31
+ "devDependencies": {
32
+ "@types/bun": "latest",
33
+ "typescript": "^5.3.0"
34
+ }
35
+ }