@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 +6 -6
- package/dist/core/client.d.ts +23 -2
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +59 -10
- package/dist/core/client.js.map +1 -1
- package/dist/ui/provider.d.ts +1 -1
- package/dist/ui/provider.d.ts.map +1 -1
- package/dist/ui/provider.js +7 -1
- package/dist/ui/provider.js.map +1 -1
- package/package.json +1 -1
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: '
|
|
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="
|
|
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: '
|
|
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="
|
|
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 | `
|
|
164
|
-
| Publishable Key | `
|
|
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
|
|
package/dist/core/client.d.ts
CHANGED
|
@@ -50,8 +50,29 @@ export declare class Formmy {
|
|
|
50
50
|
};
|
|
51
51
|
get chat(): {
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
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;
|
|
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"}
|
package/dist/core/client.js
CHANGED
|
@@ -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 (
|
|
33
|
+
throw new Error("Formmy client requires a secretKey (formmy_sk_live_xxx)");
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
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 =
|
|
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
|
-
*
|
|
85
|
-
*
|
|
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
|
-
|
|
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
|
-
//
|
|
125
|
-
console.warn("[Formmy SDK] Malformed SSE chunk:", line.slice(0, 100));
|
|
174
|
+
// Skip malformed chunks
|
|
126
175
|
}
|
|
127
176
|
}
|
|
128
177
|
}
|
package/dist/core/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,MAAc;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QAGrB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,MAAM;IACT,SAAS,CAAS;IAClB,OAAO,CAAS;IAExB,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/provider.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/ui/provider.js
CHANGED
|
@@ -10,7 +10,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
10
10
|
*
|
|
11
11
|
* function App() {
|
|
12
12
|
* return (
|
|
13
|
-
* <FormmyProvider publishableKey="
|
|
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,
|
package/dist/ui/provider.js.map
CHANGED
|
@@ -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;
|
|
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"}
|