@vly-ai/integrations 0.5.2
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 +245 -0
- package/dist/index.d.mts +253 -0
- package/dist/index.d.ts +253 -0
- package/dist/index.js +535 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +529 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +53 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var openaiCompatible = require('@ai-sdk/openai-compatible');
|
|
4
|
+
var ai = require('ai');
|
|
5
|
+
|
|
6
|
+
// src/ai/index.ts
|
|
7
|
+
var VlyAI = class {
|
|
8
|
+
provider;
|
|
9
|
+
config;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.provider = openaiCompatible.createOpenAICompatible({
|
|
13
|
+
name: "vly-gateway",
|
|
14
|
+
baseURL: "https://ai-gateway.vly.ai/v1/llm",
|
|
15
|
+
headers: {
|
|
16
|
+
"Authorization": `Bearer ${config.deploymentToken}`
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
getModel(modelName) {
|
|
21
|
+
return this.provider(modelName || "gpt-5");
|
|
22
|
+
}
|
|
23
|
+
mapMessages(messages) {
|
|
24
|
+
return messages.map((msg) => ({
|
|
25
|
+
role: msg.role,
|
|
26
|
+
content: msg.content
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
async completion(request, _options) {
|
|
30
|
+
if (this.config.debug) {
|
|
31
|
+
console.log("[Vly] Creating AI completion", { model: request.model });
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const model = this.getModel(request.model);
|
|
35
|
+
const messages = this.mapMessages(request.messages);
|
|
36
|
+
const result = await ai.generateText({
|
|
37
|
+
model,
|
|
38
|
+
messages,
|
|
39
|
+
temperature: request.temperature,
|
|
40
|
+
maxOutputTokens: request.maxTokens
|
|
41
|
+
});
|
|
42
|
+
const responseData = {
|
|
43
|
+
id: `vly-${Date.now()}`,
|
|
44
|
+
choices: [{
|
|
45
|
+
message: {
|
|
46
|
+
role: "assistant",
|
|
47
|
+
content: result.text
|
|
48
|
+
},
|
|
49
|
+
finishReason: result.finishReason || "stop"
|
|
50
|
+
}],
|
|
51
|
+
usage: {
|
|
52
|
+
promptTokens: result.usage?.inputTokens || 0,
|
|
53
|
+
completionTokens: result.usage?.outputTokens || 0,
|
|
54
|
+
totalTokens: result.usage?.totalTokens || 0
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
if (this.config.debug) {
|
|
58
|
+
console.log("[Vly] AI completion successful", {
|
|
59
|
+
tokensUsed: responseData.usage.totalTokens
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
data: responseData
|
|
65
|
+
};
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (this.config.debug) {
|
|
68
|
+
console.error("[Vly] AI completion failed", { error: error.message });
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: error.message || "Request failed"
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async streamCompletion(request, onChunk, _options) {
|
|
77
|
+
if (this.config.debug) {
|
|
78
|
+
console.log("[Vly] Creating streaming AI completion", { model: request.model });
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const model = this.getModel(request.model);
|
|
82
|
+
const messages = this.mapMessages(request.messages);
|
|
83
|
+
const result = await ai.streamText({
|
|
84
|
+
model,
|
|
85
|
+
messages,
|
|
86
|
+
temperature: request.temperature,
|
|
87
|
+
maxOutputTokens: request.maxTokens
|
|
88
|
+
});
|
|
89
|
+
let fullResponse = "";
|
|
90
|
+
for await (const delta of result.textStream) {
|
|
91
|
+
fullResponse += delta;
|
|
92
|
+
onChunk(delta);
|
|
93
|
+
}
|
|
94
|
+
const usage = await result.usage;
|
|
95
|
+
const responseData = {
|
|
96
|
+
id: `vly-stream-${Date.now()}`,
|
|
97
|
+
choices: [{
|
|
98
|
+
message: {
|
|
99
|
+
role: "assistant",
|
|
100
|
+
content: fullResponse
|
|
101
|
+
},
|
|
102
|
+
finishReason: "stop"
|
|
103
|
+
}],
|
|
104
|
+
usage: {
|
|
105
|
+
promptTokens: usage?.inputTokens || 0,
|
|
106
|
+
completionTokens: usage?.outputTokens || 0,
|
|
107
|
+
totalTokens: usage?.totalTokens || 0
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
if (this.config.debug) {
|
|
111
|
+
console.log("[Vly] Streaming AI completion successful", {
|
|
112
|
+
tokensUsed: responseData.usage.totalTokens
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
success: true,
|
|
117
|
+
data: responseData
|
|
118
|
+
};
|
|
119
|
+
} catch (error) {
|
|
120
|
+
if (this.config.debug) {
|
|
121
|
+
console.error("[Vly] Streaming AI completion failed", { error: error.message });
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
error: error.message || "Streaming request failed"
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async embeddings(input, _options) {
|
|
130
|
+
if (this.config.debug) {
|
|
131
|
+
console.log("[Vly] Creating embeddings", { inputCount: Array.isArray(input) ? input.length : 1 });
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
error: "Embeddings not yet supported with AI SDK OpenAI-compatible provider"
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Helper method to get the provider for direct AI SDK usage
|
|
139
|
+
getProvider() {
|
|
140
|
+
return this.provider;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
// src/client.ts
|
|
145
|
+
var VlyClient = class {
|
|
146
|
+
config;
|
|
147
|
+
constructor(config) {
|
|
148
|
+
this.config = {
|
|
149
|
+
deploymentToken: config.deploymentToken,
|
|
150
|
+
debug: config.debug || false
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async request(endpoint, method, data, options) {
|
|
154
|
+
const url = `https://ai-gateway.vly.ai${endpoint}`;
|
|
155
|
+
const headers = {
|
|
156
|
+
"Authorization": `Bearer ${this.config.deploymentToken}`,
|
|
157
|
+
"Content-Type": "application/json",
|
|
158
|
+
"X-Vly-Version": "0.1.0"
|
|
159
|
+
};
|
|
160
|
+
const fetchOptions = {
|
|
161
|
+
method,
|
|
162
|
+
headers,
|
|
163
|
+
body: data ? JSON.stringify(data) : void 0
|
|
164
|
+
};
|
|
165
|
+
const controller = new AbortController();
|
|
166
|
+
const timeout = options?.timeout || 3e4;
|
|
167
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
168
|
+
fetchOptions.signal = controller.signal;
|
|
169
|
+
try {
|
|
170
|
+
const response = await fetch(url, fetchOptions);
|
|
171
|
+
clearTimeout(timeoutId);
|
|
172
|
+
const responseData = await response.json().catch(() => ({}));
|
|
173
|
+
if (response.ok) {
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
data: responseData,
|
|
177
|
+
usage: responseData?.usage
|
|
178
|
+
};
|
|
179
|
+
} else {
|
|
180
|
+
const error = responseData?.error || `Request failed with status ${response.status}`;
|
|
181
|
+
if (this.config.debug) {
|
|
182
|
+
console.error(`Vly API Error: ${error}`, {
|
|
183
|
+
endpoint,
|
|
184
|
+
status: response.status,
|
|
185
|
+
data: responseData
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
error
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
} catch (error) {
|
|
194
|
+
clearTimeout(timeoutId);
|
|
195
|
+
const errorMessage = error.name === "AbortError" ? "Request timeout" : error.message || "Unknown error occurred";
|
|
196
|
+
if (this.config.debug) {
|
|
197
|
+
console.error(`Vly API Request Failed: ${errorMessage}`, {
|
|
198
|
+
endpoint,
|
|
199
|
+
error
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
if (options?.retries && options.retries > 0) {
|
|
203
|
+
if (this.config.debug) {
|
|
204
|
+
console.log(`Retrying request... (${options.retries} retries left)`);
|
|
205
|
+
}
|
|
206
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
207
|
+
return this.request(endpoint, method, data, {
|
|
208
|
+
...options,
|
|
209
|
+
retries: options.retries - 1
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
success: false,
|
|
214
|
+
error: errorMessage
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
log(message, data) {
|
|
219
|
+
if (this.config.debug) {
|
|
220
|
+
console.log(`[Vly] ${message}`, data || "");
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
// src/email/index.ts
|
|
226
|
+
var VlyEmail = class extends VlyClient {
|
|
227
|
+
async send(email, options) {
|
|
228
|
+
this.log("Sending email", {
|
|
229
|
+
to: email.to,
|
|
230
|
+
subject: email.subject
|
|
231
|
+
});
|
|
232
|
+
const payload = {
|
|
233
|
+
to: Array.isArray(email.to) ? email.to : [email.to],
|
|
234
|
+
from: email.from || "noreply@vly.io",
|
|
235
|
+
subject: email.subject,
|
|
236
|
+
html: email.html,
|
|
237
|
+
text: email.text,
|
|
238
|
+
attachments: email.attachments,
|
|
239
|
+
replyTo: email.replyTo,
|
|
240
|
+
cc: email.cc ? Array.isArray(email.cc) ? email.cc : [email.cc] : void 0,
|
|
241
|
+
bcc: email.bcc ? Array.isArray(email.bcc) ? email.bcc : [email.bcc] : void 0
|
|
242
|
+
};
|
|
243
|
+
const response = await this.request(
|
|
244
|
+
"/v1/email/send",
|
|
245
|
+
"POST",
|
|
246
|
+
payload,
|
|
247
|
+
options
|
|
248
|
+
);
|
|
249
|
+
if (response.success) {
|
|
250
|
+
this.log("Email sent successfully", {
|
|
251
|
+
id: response.data?.id,
|
|
252
|
+
status: response.data?.status
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return response;
|
|
256
|
+
}
|
|
257
|
+
async sendBatch(emails, options) {
|
|
258
|
+
this.log("Sending batch emails", { count: emails.length });
|
|
259
|
+
const payload = {
|
|
260
|
+
emails: emails.map((email) => ({
|
|
261
|
+
to: Array.isArray(email.to) ? email.to : [email.to],
|
|
262
|
+
from: email.from || "noreply@vly.io",
|
|
263
|
+
subject: email.subject,
|
|
264
|
+
html: email.html,
|
|
265
|
+
text: email.text,
|
|
266
|
+
attachments: email.attachments,
|
|
267
|
+
replyTo: email.replyTo,
|
|
268
|
+
cc: email.cc ? Array.isArray(email.cc) ? email.cc : [email.cc] : void 0,
|
|
269
|
+
bcc: email.bcc ? Array.isArray(email.bcc) ? email.bcc : [email.bcc] : void 0
|
|
270
|
+
}))
|
|
271
|
+
};
|
|
272
|
+
return this.request(
|
|
273
|
+
"/v1/email/batch",
|
|
274
|
+
"POST",
|
|
275
|
+
payload,
|
|
276
|
+
options
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
async getStatus(emailId, options) {
|
|
280
|
+
this.log("Getting email status", { emailId });
|
|
281
|
+
return this.request(
|
|
282
|
+
`/v1/email/status/${emailId}`,
|
|
283
|
+
"GET",
|
|
284
|
+
void 0,
|
|
285
|
+
options
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
async verifyDomain(domain, options) {
|
|
289
|
+
this.log("Verifying domain", { domain });
|
|
290
|
+
return this.request(
|
|
291
|
+
"/v1/email/domains/verify",
|
|
292
|
+
"POST",
|
|
293
|
+
{ domain },
|
|
294
|
+
options
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
async listDomains(options) {
|
|
298
|
+
this.log("Listing email domains");
|
|
299
|
+
return this.request(
|
|
300
|
+
"/v1/email/domains",
|
|
301
|
+
"GET",
|
|
302
|
+
void 0,
|
|
303
|
+
options
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
// src/payments/index.ts
|
|
309
|
+
var VlyPayments = class extends VlyClient {
|
|
310
|
+
async createPaymentIntent(intent, options) {
|
|
311
|
+
this.log("Creating payment intent", {
|
|
312
|
+
amount: intent.amount,
|
|
313
|
+
currency: intent.currency
|
|
314
|
+
});
|
|
315
|
+
const payload = {
|
|
316
|
+
amount: intent.amount,
|
|
317
|
+
currency: intent.currency || "usd",
|
|
318
|
+
description: intent.description,
|
|
319
|
+
metadata: intent.metadata,
|
|
320
|
+
customer: intent.customer
|
|
321
|
+
};
|
|
322
|
+
const response = await this.request(
|
|
323
|
+
"/payments/intents",
|
|
324
|
+
"POST",
|
|
325
|
+
payload,
|
|
326
|
+
options
|
|
327
|
+
);
|
|
328
|
+
if (response.success) {
|
|
329
|
+
this.log("Payment intent created", {
|
|
330
|
+
id: response.data?.id,
|
|
331
|
+
status: response.data?.status
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
return response;
|
|
335
|
+
}
|
|
336
|
+
async confirmPaymentIntent(intentId, paymentMethodId, options) {
|
|
337
|
+
this.log("Confirming payment intent", { intentId });
|
|
338
|
+
return this.request(
|
|
339
|
+
`/payments/intents/${intentId}/confirm`,
|
|
340
|
+
"POST",
|
|
341
|
+
{ paymentMethodId },
|
|
342
|
+
options
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
async getPaymentIntent(intentId, options) {
|
|
346
|
+
this.log("Getting payment intent", { intentId });
|
|
347
|
+
return this.request(
|
|
348
|
+
`/payments/intents/${intentId}`,
|
|
349
|
+
"GET",
|
|
350
|
+
void 0,
|
|
351
|
+
options
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
async cancelPaymentIntent(intentId, options) {
|
|
355
|
+
this.log("Canceling payment intent", { intentId });
|
|
356
|
+
return this.request(
|
|
357
|
+
`/payments/intents/${intentId}/cancel`,
|
|
358
|
+
"POST",
|
|
359
|
+
void 0,
|
|
360
|
+
options
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
async createSubscription(subscription, options) {
|
|
364
|
+
this.log("Creating subscription", {
|
|
365
|
+
customerId: subscription.customerId,
|
|
366
|
+
priceId: subscription.priceId
|
|
367
|
+
});
|
|
368
|
+
const response = await this.request(
|
|
369
|
+
"/payments/subscriptions",
|
|
370
|
+
"POST",
|
|
371
|
+
subscription,
|
|
372
|
+
options
|
|
373
|
+
);
|
|
374
|
+
if (response.success) {
|
|
375
|
+
this.log("Subscription created", {
|
|
376
|
+
id: response.data?.id,
|
|
377
|
+
status: response.data?.status
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
return response;
|
|
381
|
+
}
|
|
382
|
+
async updateSubscription(subscriptionId, updates, options) {
|
|
383
|
+
this.log("Updating subscription", { subscriptionId });
|
|
384
|
+
return this.request(
|
|
385
|
+
`/payments/subscriptions/${subscriptionId}`,
|
|
386
|
+
"PUT",
|
|
387
|
+
updates,
|
|
388
|
+
options
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
async cancelSubscription(subscriptionId, immediately, options) {
|
|
392
|
+
this.log("Canceling subscription", {
|
|
393
|
+
subscriptionId,
|
|
394
|
+
immediately
|
|
395
|
+
});
|
|
396
|
+
return this.request(
|
|
397
|
+
`/payments/subscriptions/${subscriptionId}/cancel`,
|
|
398
|
+
"POST",
|
|
399
|
+
{ immediately },
|
|
400
|
+
options
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
async getSubscription(subscriptionId, options) {
|
|
404
|
+
this.log("Getting subscription", { subscriptionId });
|
|
405
|
+
return this.request(
|
|
406
|
+
`/payments/subscriptions/${subscriptionId}`,
|
|
407
|
+
"GET",
|
|
408
|
+
void 0,
|
|
409
|
+
options
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
async listSubscriptions(customerId, options) {
|
|
413
|
+
this.log("Listing subscriptions", { customerId });
|
|
414
|
+
const params = new URLSearchParams();
|
|
415
|
+
if (customerId) params.append("customerId", customerId);
|
|
416
|
+
if (options?.limit) params.append("limit", options.limit.toString());
|
|
417
|
+
if (options?.offset) params.append("offset", options.offset.toString());
|
|
418
|
+
const queryString = params.toString();
|
|
419
|
+
const endpoint = `/payments/subscriptions${queryString ? `?${queryString}` : ""}`;
|
|
420
|
+
return this.request(endpoint, "GET", void 0, options);
|
|
421
|
+
}
|
|
422
|
+
async createCustomerPortal(session, options) {
|
|
423
|
+
this.log("Creating customer portal session", {
|
|
424
|
+
customerId: session.customerId
|
|
425
|
+
});
|
|
426
|
+
const response = await this.request(
|
|
427
|
+
"/payments/portal",
|
|
428
|
+
"POST",
|
|
429
|
+
session,
|
|
430
|
+
options
|
|
431
|
+
);
|
|
432
|
+
if (response.success) {
|
|
433
|
+
this.log("Customer portal session created", {
|
|
434
|
+
id: response.data?.id,
|
|
435
|
+
url: response.data?.url
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
return response;
|
|
439
|
+
}
|
|
440
|
+
async createCheckoutSession(session, options) {
|
|
441
|
+
this.log("Creating checkout session", {
|
|
442
|
+
mode: session.mode,
|
|
443
|
+
lineItems: session.lineItems.length
|
|
444
|
+
});
|
|
445
|
+
return this.request(
|
|
446
|
+
"/payments/checkout",
|
|
447
|
+
"POST",
|
|
448
|
+
session,
|
|
449
|
+
options
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
async createCustomer(customer, options) {
|
|
453
|
+
this.log("Creating customer", { email: customer.email });
|
|
454
|
+
return this.request(
|
|
455
|
+
"/payments/customers",
|
|
456
|
+
"POST",
|
|
457
|
+
customer,
|
|
458
|
+
options
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
async getCustomer(customerId, options) {
|
|
462
|
+
this.log("Getting customer", { customerId });
|
|
463
|
+
return this.request(
|
|
464
|
+
`/payments/customers/${customerId}`,
|
|
465
|
+
"GET",
|
|
466
|
+
void 0,
|
|
467
|
+
options
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
async updateCustomer(customerId, updates, options) {
|
|
471
|
+
this.log("Updating customer", { customerId });
|
|
472
|
+
return this.request(
|
|
473
|
+
`/payments/customers/${customerId}`,
|
|
474
|
+
"PUT",
|
|
475
|
+
updates,
|
|
476
|
+
options
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
async listPaymentMethods(customerId, options) {
|
|
480
|
+
this.log("Listing payment methods", { customerId });
|
|
481
|
+
return this.request(
|
|
482
|
+
`/payments/customers/${customerId}/payment-methods`,
|
|
483
|
+
"GET",
|
|
484
|
+
void 0,
|
|
485
|
+
options
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
async attachPaymentMethod(paymentMethodId, customerId, options) {
|
|
489
|
+
this.log("Attaching payment method", {
|
|
490
|
+
paymentMethodId,
|
|
491
|
+
customerId
|
|
492
|
+
});
|
|
493
|
+
return this.request(
|
|
494
|
+
`/payments/payment-methods/${paymentMethodId}/attach`,
|
|
495
|
+
"POST",
|
|
496
|
+
{ customerId },
|
|
497
|
+
options
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
async detachPaymentMethod(paymentMethodId, options) {
|
|
501
|
+
this.log("Detaching payment method", { paymentMethodId });
|
|
502
|
+
return this.request(
|
|
503
|
+
`/payments/payment-methods/${paymentMethodId}/detach`,
|
|
504
|
+
"POST",
|
|
505
|
+
void 0,
|
|
506
|
+
options
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
// src/index.ts
|
|
512
|
+
var VlyIntegrations = class {
|
|
513
|
+
ai;
|
|
514
|
+
email;
|
|
515
|
+
payments;
|
|
516
|
+
constructor(config) {
|
|
517
|
+
if (!config.deploymentToken) {
|
|
518
|
+
throw new Error("Deployment token is required");
|
|
519
|
+
}
|
|
520
|
+
this.ai = new VlyAI(config);
|
|
521
|
+
this.email = new VlyEmail(config);
|
|
522
|
+
this.payments = new VlyPayments(config);
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
function createVlyIntegrations(config) {
|
|
526
|
+
return new VlyIntegrations(config);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
exports.VlyAI = VlyAI;
|
|
530
|
+
exports.VlyEmail = VlyEmail;
|
|
531
|
+
exports.VlyIntegrations = VlyIntegrations;
|
|
532
|
+
exports.VlyPayments = VlyPayments;
|
|
533
|
+
exports.createVlyIntegrations = createVlyIntegrations;
|
|
534
|
+
//# sourceMappingURL=index.js.map
|
|
535
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ai/index.ts","../src/client.ts","../src/email/index.ts","../src/payments/index.ts","../src/index.ts"],"names":["createOpenAICompatible","generateText","streamText"],"mappings":"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","file":"index.js","sourcesContent":["import { createOpenAICompatible } from '@ai-sdk/openai-compatible';\nimport { generateText, streamText, type CoreMessage } from 'ai';\nimport type { \n AICompletionRequest, \n AICompletionResponse,\n RequestOptions,\n ApiResponse,\n VlyConfig\n} from '../types';\n\nexport class VlyAI {\n private provider: ReturnType<typeof createOpenAICompatible>;\n private config: VlyConfig;\n\n constructor(config: VlyConfig) {\n this.config = config;\n this.provider = createOpenAICompatible({\n name: 'vly-gateway',\n baseURL: 'https://ai-gateway.vly.ai/v1/llm',\n headers: {\n 'Authorization': `Bearer ${config.deploymentToken}`,\n },\n });\n }\n\n private getModel(modelName?: string) {\n return this.provider(modelName || 'gpt-5');\n }\n\n private mapMessages(messages: AICompletionRequest['messages']): CoreMessage[] {\n return messages.map(msg => ({\n role: msg.role,\n content: msg.content,\n }));\n }\n\n async completion(\n request: AICompletionRequest, \n _options?: RequestOptions\n ): Promise<ApiResponse<AICompletionResponse>> {\n if (this.config.debug) {\n console.log('[Vly] Creating AI completion', { model: request.model });\n }\n\n try {\n const model = this.getModel(request.model);\n const messages = this.mapMessages(request.messages);\n\n const result = await generateText({\n model: model as any,\n messages,\n temperature: request.temperature,\n maxOutputTokens: request.maxTokens,\n });\n\n const responseData: AICompletionResponse = {\n id: `vly-${Date.now()}`,\n choices: [{\n message: {\n role: 'assistant',\n content: result.text\n },\n finishReason: result.finishReason || 'stop'\n }],\n usage: {\n promptTokens: result.usage?.inputTokens || 0,\n completionTokens: result.usage?.outputTokens || 0,\n totalTokens: result.usage?.totalTokens || 0\n }\n };\n\n if (this.config.debug) {\n console.log('[Vly] AI completion successful', { \n tokensUsed: responseData.usage.totalTokens \n });\n }\n\n return {\n success: true,\n data: responseData\n };\n } catch (error: any) {\n if (this.config.debug) {\n console.error('[Vly] AI completion failed', { error: error.message });\n }\n \n return {\n success: false,\n error: error.message || 'Request failed'\n };\n }\n }\n\n async streamCompletion(\n request: AICompletionRequest,\n onChunk: (chunk: string) => void,\n _options?: RequestOptions\n ): Promise<ApiResponse<AICompletionResponse>> {\n if (this.config.debug) {\n console.log('[Vly] Creating streaming AI completion', { model: request.model });\n }\n\n try {\n const model = this.getModel(request.model);\n const messages = this.mapMessages(request.messages);\n\n const result = await streamText({\n model: model as any,\n messages,\n temperature: request.temperature,\n maxOutputTokens: request.maxTokens,\n });\n\n let fullResponse = '';\n\n for await (const delta of result.textStream) {\n fullResponse += delta;\n onChunk(delta);\n }\n\n // Wait for the stream to complete and get usage info\n const usage = await result.usage;\n\n const responseData: AICompletionResponse = {\n id: `vly-stream-${Date.now()}`,\n choices: [{\n message: {\n role: 'assistant',\n content: fullResponse\n },\n finishReason: 'stop'\n }],\n usage: {\n promptTokens: usage?.inputTokens || 0,\n completionTokens: usage?.outputTokens || 0,\n totalTokens: usage?.totalTokens || 0\n }\n };\n\n if (this.config.debug) {\n console.log('[Vly] Streaming AI completion successful', { \n tokensUsed: responseData.usage.totalTokens \n });\n }\n\n return {\n success: true,\n data: responseData\n };\n } catch (error: any) {\n if (this.config.debug) {\n console.error('[Vly] Streaming AI completion failed', { error: error.message });\n }\n \n return {\n success: false,\n error: error.message || 'Streaming request failed'\n };\n }\n }\n\n async embeddings(\n input: string | string[],\n _options?: RequestOptions & { model?: string }\n ): Promise<ApiResponse<{ embeddings: number[][]; usage: any }>> {\n if (this.config.debug) {\n console.log('[Vly] Creating embeddings', { inputCount: Array.isArray(input) ? input.length : 1 });\n }\n \n // Note: AI SDK doesn't have embeddings support for OpenAI-compatible providers yet\n // This would need to be implemented separately or use a different approach\n return {\n success: false,\n error: 'Embeddings not yet supported with AI SDK OpenAI-compatible provider'\n };\n }\n\n // Helper method to get the provider for direct AI SDK usage\n getProvider() {\n return this.provider;\n }\n}","import type { VlyConfig, RequestOptions, ApiResponse } from './types';\n\nexport class VlyClient {\n protected config: Required<VlyConfig>;\n\n constructor(config: VlyConfig) {\n this.config = {\n deploymentToken: config.deploymentToken,\n debug: config.debug || false\n };\n }\n\n protected async request<T = any>(\n endpoint: string,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n data?: any,\n options?: RequestOptions\n ): Promise<ApiResponse<T>> {\n const url = `https://ai-gateway.vly.ai${endpoint}`;\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.config.deploymentToken}`,\n 'Content-Type': 'application/json',\n 'X-Vly-Version': '0.1.0'\n };\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n body: data ? JSON.stringify(data) : undefined,\n };\n\n // Add timeout using AbortController\n const controller = new AbortController();\n const timeout = options?.timeout || 30000;\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n fetchOptions.signal = controller.signal;\n\n try {\n const response = await fetch(url, fetchOptions);\n clearTimeout(timeoutId);\n \n const responseData = await response.json().catch(() => ({})) as any;\n\n if (response.ok) {\n return {\n success: true,\n data: responseData as T,\n usage: responseData?.usage\n };\n } else {\n const error = responseData?.error || `Request failed with status ${response.status}`;\n \n if (this.config.debug) {\n console.error(`Vly API Error: ${error}`, {\n endpoint,\n status: response.status,\n data: responseData\n });\n }\n\n return {\n success: false,\n error\n };\n }\n } catch (error: any) {\n clearTimeout(timeoutId);\n const errorMessage = error.name === 'AbortError' ? 'Request timeout' : error.message || 'Unknown error occurred';\n \n if (this.config.debug) {\n console.error(`Vly API Request Failed: ${errorMessage}`, {\n endpoint,\n error\n });\n }\n\n if (options?.retries && options.retries > 0) {\n if (this.config.debug) {\n console.log(`Retrying request... (${options.retries} retries left)`);\n }\n \n await new Promise(resolve => setTimeout(resolve, 1000));\n return this.request(endpoint, method, data, { \n ...options, \n retries: options.retries - 1 \n });\n }\n\n return {\n success: false,\n error: errorMessage\n };\n }\n }\n\n protected log(message: string, data?: any) {\n if (this.config.debug) {\n console.log(`[Vly] ${message}`, data || '');\n }\n }\n}","import { VlyClient } from '../client';\nimport type { \n EmailRequest, \n EmailResponse,\n RequestOptions,\n ApiResponse\n} from '../types';\n\nexport class VlyEmail extends VlyClient {\n async send(\n email: EmailRequest, \n options?: RequestOptions\n ): Promise<ApiResponse<EmailResponse>> {\n this.log('Sending email', { \n to: email.to, \n subject: email.subject \n });\n\n const payload = {\n to: Array.isArray(email.to) ? email.to : [email.to],\n from: email.from || 'noreply@vly.io',\n subject: email.subject,\n html: email.html,\n text: email.text,\n attachments: email.attachments,\n replyTo: email.replyTo,\n cc: email.cc ? (Array.isArray(email.cc) ? email.cc : [email.cc]) : undefined,\n bcc: email.bcc ? (Array.isArray(email.bcc) ? email.bcc : [email.bcc]) : undefined\n };\n\n const response = await this.request<EmailResponse>(\n '/v1/email/send',\n 'POST',\n payload,\n options\n );\n\n if (response.success) {\n this.log('Email sent successfully', { \n id: response.data?.id,\n status: response.data?.status \n });\n }\n\n return response;\n }\n\n async sendBatch(\n emails: EmailRequest[],\n options?: RequestOptions\n ): Promise<ApiResponse<EmailResponse[]>> {\n this.log('Sending batch emails', { count: emails.length });\n\n const payload = {\n emails: emails.map(email => ({\n to: Array.isArray(email.to) ? email.to : [email.to],\n from: email.from || 'noreply@vly.io',\n subject: email.subject,\n html: email.html,\n text: email.text,\n attachments: email.attachments,\n replyTo: email.replyTo,\n cc: email.cc ? (Array.isArray(email.cc) ? email.cc : [email.cc]) : undefined,\n bcc: email.bcc ? (Array.isArray(email.bcc) ? email.bcc : [email.bcc]) : undefined\n }))\n };\n\n return this.request<EmailResponse[]>(\n '/v1/email/batch',\n 'POST',\n payload,\n options\n );\n }\n\n async getStatus(\n emailId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<EmailResponse>> {\n this.log('Getting email status', { emailId });\n\n return this.request<EmailResponse>(\n `/v1/email/status/${emailId}`,\n 'GET',\n undefined,\n options\n );\n }\n\n async verifyDomain(\n domain: string,\n options?: RequestOptions\n ): Promise<ApiResponse<{\n domain: string;\n verified: boolean;\n dnsRecords: Array<{\n type: string;\n name: string;\n value: string;\n verified: boolean;\n }>;\n }>> {\n this.log('Verifying domain', { domain });\n\n return this.request(\n '/v1/email/domains/verify',\n 'POST',\n { domain },\n options\n );\n }\n\n async listDomains(\n options?: RequestOptions\n ): Promise<ApiResponse<Array<{\n domain: string;\n verified: boolean;\n createdAt: string;\n verifiedAt?: string;\n }>>> {\n this.log('Listing email domains');\n\n return this.request(\n '/v1/email/domains',\n 'GET',\n undefined,\n options\n );\n }\n}","import { VlyClient } from '../client';\nimport type { \n PaymentIntent,\n PaymentIntentResponse,\n Subscription,\n SubscriptionResponse,\n CustomerPortalSession,\n CustomerPortalResponse,\n RequestOptions,\n ApiResponse\n} from '../types';\n\nexport class VlyPayments extends VlyClient {\n async createPaymentIntent(\n intent: PaymentIntent,\n options?: RequestOptions\n ): Promise<ApiResponse<PaymentIntentResponse>> {\n this.log('Creating payment intent', { \n amount: intent.amount,\n currency: intent.currency \n });\n\n const payload = {\n amount: intent.amount,\n currency: intent.currency || 'usd',\n description: intent.description,\n metadata: intent.metadata,\n customer: intent.customer\n };\n\n const response = await this.request<PaymentIntentResponse>(\n '/payments/intents',\n 'POST',\n payload,\n options\n );\n\n if (response.success) {\n this.log('Payment intent created', { \n id: response.data?.id,\n status: response.data?.status \n });\n }\n\n return response;\n }\n\n async confirmPaymentIntent(\n intentId: string,\n paymentMethodId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<PaymentIntentResponse>> {\n this.log('Confirming payment intent', { intentId });\n\n return this.request<PaymentIntentResponse>(\n `/payments/intents/${intentId}/confirm`,\n 'POST',\n { paymentMethodId },\n options\n );\n }\n\n async getPaymentIntent(\n intentId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<PaymentIntentResponse>> {\n this.log('Getting payment intent', { intentId });\n\n return this.request<PaymentIntentResponse>(\n `/payments/intents/${intentId}`,\n 'GET',\n undefined,\n options\n );\n }\n\n async cancelPaymentIntent(\n intentId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<PaymentIntentResponse>> {\n this.log('Canceling payment intent', { intentId });\n\n return this.request<PaymentIntentResponse>(\n `/payments/intents/${intentId}/cancel`,\n 'POST',\n undefined,\n options\n );\n }\n\n async createSubscription(\n subscription: Subscription,\n options?: RequestOptions\n ): Promise<ApiResponse<SubscriptionResponse>> {\n this.log('Creating subscription', { \n customerId: subscription.customerId,\n priceId: subscription.priceId \n });\n\n const response = await this.request<SubscriptionResponse>(\n '/payments/subscriptions',\n 'POST',\n subscription,\n options\n );\n\n if (response.success) {\n this.log('Subscription created', { \n id: response.data?.id,\n status: response.data?.status \n });\n }\n\n return response;\n }\n\n async updateSubscription(\n subscriptionId: string,\n updates: Partial<Subscription>,\n options?: RequestOptions\n ): Promise<ApiResponse<SubscriptionResponse>> {\n this.log('Updating subscription', { subscriptionId });\n\n return this.request<SubscriptionResponse>(\n `/payments/subscriptions/${subscriptionId}`,\n 'PUT',\n updates,\n options\n );\n }\n\n async cancelSubscription(\n subscriptionId: string,\n immediately?: boolean,\n options?: RequestOptions\n ): Promise<ApiResponse<SubscriptionResponse>> {\n this.log('Canceling subscription', { \n subscriptionId,\n immediately \n });\n\n return this.request<SubscriptionResponse>(\n `/payments/subscriptions/${subscriptionId}/cancel`,\n 'POST',\n { immediately },\n options\n );\n }\n\n async getSubscription(\n subscriptionId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<SubscriptionResponse>> {\n this.log('Getting subscription', { subscriptionId });\n\n return this.request<SubscriptionResponse>(\n `/payments/subscriptions/${subscriptionId}`,\n 'GET',\n undefined,\n options\n );\n }\n\n async listSubscriptions(\n customerId?: string,\n options?: RequestOptions & { limit?: number; offset?: number }\n ): Promise<ApiResponse<{\n subscriptions: SubscriptionResponse[];\n hasMore: boolean;\n total: number;\n }>> {\n this.log('Listing subscriptions', { customerId });\n\n const params = new URLSearchParams();\n if (customerId) params.append('customerId', customerId);\n if (options?.limit) params.append('limit', options.limit.toString());\n if (options?.offset) params.append('offset', options.offset.toString());\n\n const queryString = params.toString();\n const endpoint = `/payments/subscriptions${queryString ? `?${queryString}` : ''}`;\n\n return this.request(endpoint, 'GET', undefined, options);\n }\n\n async createCustomerPortal(\n session: CustomerPortalSession,\n options?: RequestOptions\n ): Promise<ApiResponse<CustomerPortalResponse>> {\n this.log('Creating customer portal session', { \n customerId: session.customerId \n });\n\n const response = await this.request<CustomerPortalResponse>(\n '/payments/portal',\n 'POST',\n session,\n options\n );\n\n if (response.success) {\n this.log('Customer portal session created', { \n id: response.data?.id,\n url: response.data?.url \n });\n }\n\n return response;\n }\n\n async createCheckoutSession(\n session: {\n customerId?: string;\n customerEmail?: string;\n lineItems: Array<{\n priceId: string;\n quantity: number;\n }>;\n mode: 'payment' | 'subscription';\n successUrl: string;\n cancelUrl: string;\n metadata?: Record<string, any>;\n },\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n url: string;\n }>> {\n this.log('Creating checkout session', { \n mode: session.mode,\n lineItems: session.lineItems.length \n });\n\n return this.request(\n '/payments/checkout',\n 'POST',\n session,\n options\n );\n }\n\n async createCustomer(\n customer: {\n email: string;\n name?: string;\n metadata?: Record<string, any>;\n },\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n email: string;\n name?: string;\n created: number;\n }>> {\n this.log('Creating customer', { email: customer.email });\n\n return this.request(\n '/payments/customers',\n 'POST',\n customer,\n options\n );\n }\n\n async getCustomer(\n customerId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n email: string;\n name?: string;\n created: number;\n metadata?: Record<string, any>;\n }>> {\n this.log('Getting customer', { customerId });\n\n return this.request(\n `/payments/customers/${customerId}`,\n 'GET',\n undefined,\n options\n );\n }\n\n async updateCustomer(\n customerId: string,\n updates: {\n email?: string;\n name?: string;\n metadata?: Record<string, any>;\n },\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n email: string;\n name?: string;\n created: number;\n metadata?: Record<string, any>;\n }>> {\n this.log('Updating customer', { customerId });\n\n return this.request(\n `/payments/customers/${customerId}`,\n 'PUT',\n updates,\n options\n );\n }\n\n async listPaymentMethods(\n customerId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<Array<{\n id: string;\n type: string;\n card?: {\n brand: string;\n last4: string;\n expMonth: number;\n expYear: number;\n };\n created: number;\n }>>> {\n this.log('Listing payment methods', { customerId });\n\n return this.request(\n `/payments/customers/${customerId}/payment-methods`,\n 'GET',\n undefined,\n options\n );\n }\n\n async attachPaymentMethod(\n paymentMethodId: string,\n customerId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n customerId: string;\n attached: boolean;\n }>> {\n this.log('Attaching payment method', { \n paymentMethodId,\n customerId \n });\n\n return this.request(\n `/payments/payment-methods/${paymentMethodId}/attach`,\n 'POST',\n { customerId },\n options\n );\n }\n\n async detachPaymentMethod(\n paymentMethodId: string,\n options?: RequestOptions\n ): Promise<ApiResponse<{\n id: string;\n detached: boolean;\n }>> {\n this.log('Detaching payment method', { paymentMethodId });\n\n return this.request(\n `/payments/payment-methods/${paymentMethodId}/detach`,\n 'POST',\n undefined,\n options\n );\n }\n}","import type { VlyConfig } from './types';\nimport { VlyAI } from './ai';\nimport { VlyEmail } from './email';\nimport { VlyPayments } from './payments';\n\nexport * from './types';\nexport type { AIModel } from './types';\n\n// Re-export AI SDK types for convenience\nexport type { CoreMessage } from 'ai';\n\nexport class VlyIntegrations {\n public ai: VlyAI;\n public email: VlyEmail;\n public payments: VlyPayments;\n\n constructor(config: VlyConfig) {\n if (!config.deploymentToken) {\n throw new Error('Deployment token is required');\n }\n\n this.ai = new VlyAI(config);\n this.email = new VlyEmail(config);\n this.payments = new VlyPayments(config);\n }\n}\n\nexport function createVlyIntegrations(config: VlyConfig): VlyIntegrations {\n return new VlyIntegrations(config);\n}\n\nexport { VlyAI, VlyEmail, VlyPayments };"]}
|