@formmy.app/chat 0.0.1-alpha.1 → 0.0.1-alpha.3

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 CHANGED
@@ -22,7 +22,7 @@ Use the `Formmy` client to manage agents and conversations from your server.
22
22
  ```typescript
23
23
  import { Formmy } from '@formmy.app/chat';
24
24
 
25
- const formmy = new Formmy({ secretKey: 'sk_live_xxx' });
25
+ const formmy = new Formmy({ secretKey: 'formmy_sk_live_xxx' });
26
26
 
27
27
  // List all agents
28
28
  const agents = await formmy.agents.list();
@@ -50,7 +50,7 @@ import { FormmyProvider, ChatBubble } from '@formmy.app/chat/react';
50
50
 
51
51
  function App() {
52
52
  return (
53
- <FormmyProvider publishableKey="pk_live_xxx">
53
+ <FormmyProvider publishableKey="formmy_pk_live_xxx">
54
54
  <YourApp />
55
55
  <ChatBubble
56
56
  agentId="agent_xxx"
@@ -102,7 +102,7 @@ function CustomChat({ agentId }: { agentId: string }) {
102
102
  ### Formmy Client
103
103
 
104
104
  ```typescript
105
- const formmy = new Formmy({ secretKey: 'sk_live_xxx' });
105
+ const formmy = new Formmy({ secretKey: 'formmy_sk_live_xxx' });
106
106
 
107
107
  // Agents
108
108
  formmy.agents.list()
@@ -122,7 +122,7 @@ formmy.chat.history(sessionId, agentId)
122
122
 
123
123
  ```tsx
124
124
  <FormmyProvider
125
- publishableKey="pk_live_xxx"
125
+ publishableKey="formmy_pk_live_xxx"
126
126
  baseUrl="https://formmy.app" // optional
127
127
  >
128
128
  {children}
@@ -160,8 +160,8 @@ const {
160
160
 
161
161
  | Key Type | Prefix | Usage | Scope |
162
162
  |----------|--------|-------|-------|
163
- | Secret Key | `sk_live_` | Backend only | Full API access |
164
- | Publishable Key | `pk_live_` | Frontend safe | Chat only, domain-restricted |
163
+ | Secret Key | `formmy_sk_live_` | Backend only | Full API access |
164
+ | Publishable Key | `formmy_pk_live_` | Frontend safe | Chat only, domain-restricted |
165
165
 
166
166
  Get your keys at [formmy.app/dashboard/api-keys](https://formmy.app/dashboard/api-keys)
167
167
 
@@ -50,8 +50,29 @@ export declare class Formmy {
50
50
  };
51
51
  get chat(): {
52
52
  /**
53
- * Send a message and get a response (non-streaming)
54
- * For streaming, use the useFormmyChat hook on the frontend
53
+ * Stream a chat response - returns Response for proxying
54
+ * Use this when you need to forward the stream to your frontend
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * // Elysia/Express/Hono backend
59
+ * app.post("/chat", async ({ body }) => {
60
+ * const response = await formmy.chat.stream({
61
+ * agentId: body.agentId,
62
+ * message: body.message,
63
+ * });
64
+ * return response; // Proxy the stream directly
65
+ * });
66
+ * ```
67
+ */
68
+ stream: (options: {
69
+ agentId: string;
70
+ message: string;
71
+ conversationId?: string;
72
+ }) => Promise<Response>;
73
+ /**
74
+ * Send a message and get complete response (non-streaming)
75
+ * Use this for server-to-server communication where you don't need streaming
55
76
  */
56
77
  send: (options: {
57
78
  agentId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAC;AAIjB,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAKxB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,YAAY;IAiBhC,IAAI,MAAM;QAEN;;WAEG;oBACa,OAAO,CAAC,kBAAkB,CAAC;QAI3C;;WAEG;uBACkB,MAAM,KAAG,OAAO,CAAC,aAAa,CAAC;QAOpD;;WAEG;uBACkB,gBAAgB,KAAG,OAAO,CAAC,aAAa,CAAC;QAI9D;;WAEG;0BAEQ,MAAM,QACT,gBAAgB,KACrB,OAAO,CAAC,aAAa,CAAC;QAQzB;;WAEG;0BACqB,MAAM,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;MAOjE;IAMD,IAAI,IAAI;QAEJ;;;WAGG;wBACmB;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;MA4D3D;YAMa,OAAO;CA4BtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAC;AAIjB,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAKxB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,YAAY;IAqBhC,IAAI,MAAM;QAEN;;WAEG;oBACa,OAAO,CAAC,kBAAkB,CAAC;QAI3C;;WAEG;uBACkB,MAAM,KAAG,OAAO,CAAC,aAAa,CAAC;QAOpD;;WAEG;uBACkB,gBAAgB,KAAG,OAAO,CAAC,aAAa,CAAC;QAI9D;;WAEG;0BAEQ,MAAM,QACT,gBAAgB,KACrB,OAAO,CAAC,aAAa,CAAC;QAQzB;;WAEG;0BACqB,MAAM,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;MAOjE;IAMD,IAAI,IAAI;QAEJ;;;;;;;;;;;;;;;WAeG;0BACqB;YACtB,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,KAAG,OAAO,CAAC,QAAQ,CAAC;QA2CrB;;;WAGG;wBACmB;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,KAAG,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;MA0D3D;YAMa,OAAO;CA4BtB"}
@@ -30,12 +30,15 @@ export class Formmy {
30
30
  baseUrl;
31
31
  constructor(config) {
32
32
  if (!config.secretKey) {
33
- throw new Error("Formmy client requires a secretKey (sk_live_xxx)");
33
+ throw new Error("Formmy client requires a secretKey (formmy_sk_live_xxx)");
34
34
  }
35
- if (!config.secretKey.startsWith("sk_live_")) {
36
- throw new Error("Invalid secretKey format. Must start with sk_live_");
35
+ const secretKey = config.secretKey;
36
+ // Support both old (sk_live_) and new (formmy_sk_live_) prefixes
37
+ const validSecretPrefixes = ["formmy_sk_live_", "sk_live_"];
38
+ if (!validSecretPrefixes.some(prefix => secretKey.startsWith(prefix))) {
39
+ throw new Error("Invalid secretKey format. Must start with formmy_sk_live_");
37
40
  }
38
- this.secretKey = config.secretKey;
41
+ this.secretKey = secretKey;
39
42
  this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;
40
43
  }
41
44
  // ═══════════════════════════════════════════════════════════════════════════
@@ -81,12 +84,59 @@ export class Formmy {
81
84
  get chat() {
82
85
  return {
83
86
  /**
84
- * Send a message and get a response (non-streaming)
85
- * For streaming, use the useFormmyChat hook on the frontend
87
+ * Stream a chat response - returns Response for proxying
88
+ * Use this when you need to forward the stream to your frontend
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // Elysia/Express/Hono backend
93
+ * app.post("/chat", async ({ body }) => {
94
+ * const response = await formmy.chat.stream({
95
+ * agentId: body.agentId,
96
+ * message: body.message,
97
+ * });
98
+ * return response; // Proxy the stream directly
99
+ * });
100
+ * ```
101
+ */
102
+ stream: async (options) => {
103
+ const sessionId = options.conversationId || `sdk_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
104
+ const response = await fetch(`${this.baseUrl}/api/v2/sdk?intent=chat&agentId=${options.agentId}`, {
105
+ method: "POST",
106
+ headers: {
107
+ "Content-Type": "application/json",
108
+ Authorization: `Bearer ${this.secretKey}`,
109
+ },
110
+ body: JSON.stringify({
111
+ message: {
112
+ id: `msg_${Date.now()}`,
113
+ role: "user",
114
+ parts: [{ type: "text", text: options.message }],
115
+ },
116
+ id: sessionId,
117
+ }),
118
+ });
119
+ if (!response.ok) {
120
+ const error = await response.json().catch(() => ({}));
121
+ throw new FormmyError(error.error || "Request failed", error.code || "REQUEST_FAILED", response.status);
122
+ }
123
+ // Return the response directly for streaming proxy
124
+ // The response body is a ReadableStream in Vercel AI SDK UIMessage format
125
+ return new Response(response.body, {
126
+ headers: {
127
+ "Content-Type": "text/event-stream",
128
+ "Cache-Control": "no-cache",
129
+ "Connection": "keep-alive",
130
+ "X-Formmy-Conversation-Id": sessionId,
131
+ },
132
+ });
133
+ },
134
+ /**
135
+ * Send a message and get complete response (non-streaming)
136
+ * Use this for server-to-server communication where you don't need streaming
86
137
  */
87
138
  send: async (options) => {
88
- // For server-side, we make a regular POST and read the full response
89
- const sessionId = options.conversationId || `sdk_${Date.now()}`;
139
+ const sessionId = options.conversationId || `sdk_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
90
140
  const response = await fetch(`${this.baseUrl}/api/v2/sdk?intent=chat&agentId=${options.agentId}`, {
91
141
  method: "POST",
92
142
  headers: {
@@ -121,8 +171,7 @@ export class Formmy {
121
171
  }
122
172
  }
123
173
  catch {
124
- // Log malformed chunks but don't lose the rest
125
- console.warn("[Formmy SDK] Malformed SSE chunk:", line.slice(0, 100));
174
+ // Skip malformed chunks
126
175
  }
127
176
  }
128
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * function App() {
11
11
  * return (
12
- * <FormmyProvider publishableKey="pk_live_xxx">
12
+ * <FormmyProvider publishableKey="formmy_pk_live_xxx">
13
13
  * <YourApp />
14
14
  * </FormmyProvider>
15
15
  * );
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ui/provider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAIvE,UAAU,kBAAmB,SAAQ,YAAY;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,SAAS,EACT,OAA0B,EAC1B,QAAQ,GACT,EAAE,mBAAmB,2CAarB;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,GAAG,IAAI,CAE7D"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ui/provider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOvE,UAAU,kBAAmB,SAAQ,YAAY;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,SAAS,EACT,OAA0B,EAC1B,QAAQ,GACT,EAAE,mBAAmB,2CAoBrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,GAAG,IAAI,CAE7D"}
@@ -10,7 +10,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
10
10
  *
11
11
  * function App() {
12
12
  * return (
13
- * <FormmyProvider publishableKey="pk_live_xxx">
13
+ * <FormmyProvider publishableKey="formmy_pk_live_xxx">
14
14
  * <YourApp />
15
15
  * </FormmyProvider>
16
16
  * );
@@ -19,8 +19,14 @@ import { jsx as _jsx } from "react/jsx-runtime";
19
19
  */
20
20
  import { createContext, useContext, useMemo } from "react";
21
21
  const DEFAULT_BASE_URL = "https://formmy.app";
22
+ // Valid publishable key prefixes (supports old and new format)
23
+ const VALID_PK_PREFIXES = ["formmy_pk_live_", "pk_live_"];
22
24
  const FormmyContext = createContext(null);
23
25
  export function FormmyProvider({ publishableKey, secretKey, baseUrl = DEFAULT_BASE_URL, children, }) {
26
+ // Validate publishable key format (dev-time check)
27
+ if (publishableKey && !VALID_PK_PREFIXES.some(p => publishableKey.startsWith(p))) {
28
+ console.warn("[FormmyProvider] Invalid publishableKey format. Expected formmy_pk_live_xxx");
29
+ }
24
30
  const value = useMemo(() => ({
25
31
  publishableKey,
26
32
  secretKey,
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ui/provider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAM9C,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAErE,MAAM,UAAU,cAAc,CAAC,EAC7B,cAAc,EACd,SAAS,EACT,OAAO,GAAG,gBAAgB,EAC1B,QAAQ,GACY;IACpB,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,cAAc;QACd,SAAS;QACT,OAAO;KACR,CAAC,EACF,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA0B,CAC1E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ui/provider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,+DAA+D;AAC/D,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAM1D,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAErE,MAAM,UAAU,cAAc,CAAC,EAC7B,cAAc,EACd,SAAS,EACT,OAAO,GAAG,gBAAgB,EAC1B,QAAQ,GACY;IACpB,mDAAmD;IACnD,IAAI,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,OAAO,CAAC,IAAI,CACV,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,cAAc;QACd,SAAS;QACT,OAAO;KACR,CAAC,EACF,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA0B,CAC1E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formmy.app/chat",
3
- "version": "0.0.1-alpha.1",
3
+ "version": "0.0.1-alpha.3",
4
4
  "description": "Official React SDK for Formmy Chat - AI chatbot widgets and headless hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",