@vly-ai/integrations 0.5.2 → 0.6.1-beta.1

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/dist/index.mjs CHANGED
@@ -9,7 +9,7 @@ var VlyAI = class {
9
9
  this.config = config;
10
10
  this.provider = createOpenAICompatible({
11
11
  name: "vly-gateway",
12
- baseURL: "https://ai-gateway.vly.ai/v1/llm",
12
+ baseURL: "https://integrations.vly.ai/v1/llm",
13
13
  headers: {
14
14
  "Authorization": `Bearer ${config.deploymentToken}`
15
15
  }
@@ -144,12 +144,12 @@ var VlyClient = class {
144
144
  config;
145
145
  constructor(config) {
146
146
  this.config = {
147
- deploymentToken: config.deploymentToken,
148
- debug: config.debug || false
147
+ deploymentToken: config.deploymentToken || "vlytomoonF2024",
148
+ debug: config.debug ?? false
149
149
  };
150
150
  }
151
151
  async request(endpoint, method, data, options) {
152
- const url = `https://ai-gateway.vly.ai${endpoint}`;
152
+ const url = `https://integrations.vly.ai${endpoint}`;
153
153
  const headers = {
154
154
  "Authorization": `Bearer ${this.config.deploymentToken}`,
155
155
  "Content-Type": "application/json",
@@ -303,227 +303,115 @@ var VlyEmail = class extends VlyClient {
303
303
  }
304
304
  };
305
305
 
306
- // src/payments/index.ts
307
- var VlyPayments = class extends VlyClient {
308
- async createPaymentIntent(intent, options) {
309
- this.log("Creating payment intent", {
310
- amount: intent.amount,
311
- currency: intent.currency
312
- });
313
- const payload = {
314
- amount: intent.amount,
315
- currency: intent.currency || "usd",
316
- description: intent.description,
317
- metadata: intent.metadata,
318
- customer: intent.customer
306
+ // src/project-thumbnail/screenshot.ts
307
+ function initScreenshotListener() {
308
+ console.log("[VLY Runtime] Screenshot listener initialized");
309
+ if (typeof window.html2canvas === "undefined") {
310
+ const script = document.createElement("script");
311
+ script.src = "https://cdn.jsdelivr.net/npm/html2canvas-pro@1.5.8/dist/html2canvas-pro.min.js";
312
+ script.async = true;
313
+ script.onload = () => {
314
+ console.log("[VLY Runtime] html2canvas-pro loaded");
319
315
  };
320
- const response = await this.request(
321
- "/payments/intents",
322
- "POST",
323
- payload,
324
- options
325
- );
326
- if (response.success) {
327
- this.log("Payment intent created", {
328
- id: response.data?.id,
329
- status: response.data?.status
330
- });
331
- }
332
- return response;
333
- }
334
- async confirmPaymentIntent(intentId, paymentMethodId, options) {
335
- this.log("Confirming payment intent", { intentId });
336
- return this.request(
337
- `/payments/intents/${intentId}/confirm`,
338
- "POST",
339
- { paymentMethodId },
340
- options
341
- );
342
- }
343
- async getPaymentIntent(intentId, options) {
344
- this.log("Getting payment intent", { intentId });
345
- return this.request(
346
- `/payments/intents/${intentId}`,
347
- "GET",
348
- void 0,
349
- options
350
- );
351
- }
352
- async cancelPaymentIntent(intentId, options) {
353
- this.log("Canceling payment intent", { intentId });
354
- return this.request(
355
- `/payments/intents/${intentId}/cancel`,
356
- "POST",
357
- void 0,
358
- options
359
- );
360
- }
361
- async createSubscription(subscription, options) {
362
- this.log("Creating subscription", {
363
- customerId: subscription.customerId,
364
- priceId: subscription.priceId
365
- });
366
- const response = await this.request(
367
- "/payments/subscriptions",
368
- "POST",
369
- subscription,
370
- options
371
- );
372
- if (response.success) {
373
- this.log("Subscription created", {
374
- id: response.data?.id,
375
- status: response.data?.status
376
- });
377
- }
378
- return response;
379
- }
380
- async updateSubscription(subscriptionId, updates, options) {
381
- this.log("Updating subscription", { subscriptionId });
382
- return this.request(
383
- `/payments/subscriptions/${subscriptionId}`,
384
- "PUT",
385
- updates,
386
- options
387
- );
388
- }
389
- async cancelSubscription(subscriptionId, immediately, options) {
390
- this.log("Canceling subscription", {
391
- subscriptionId,
392
- immediately
393
- });
394
- return this.request(
395
- `/payments/subscriptions/${subscriptionId}/cancel`,
396
- "POST",
397
- { immediately },
398
- options
399
- );
400
- }
401
- async getSubscription(subscriptionId, options) {
402
- this.log("Getting subscription", { subscriptionId });
403
- return this.request(
404
- `/payments/subscriptions/${subscriptionId}`,
405
- "GET",
406
- void 0,
407
- options
408
- );
409
- }
410
- async listSubscriptions(customerId, options) {
411
- this.log("Listing subscriptions", { customerId });
412
- const params = new URLSearchParams();
413
- if (customerId) params.append("customerId", customerId);
414
- if (options?.limit) params.append("limit", options.limit.toString());
415
- if (options?.offset) params.append("offset", options.offset.toString());
416
- const queryString = params.toString();
417
- const endpoint = `/payments/subscriptions${queryString ? `?${queryString}` : ""}`;
418
- return this.request(endpoint, "GET", void 0, options);
316
+ script.onerror = () => {
317
+ console.error("[VLY Runtime] Failed to load html2canvas-pro");
318
+ };
319
+ document.head.appendChild(script);
419
320
  }
420
- async createCustomerPortal(session, options) {
421
- this.log("Creating customer portal session", {
422
- customerId: session.customerId
423
- });
424
- const response = await this.request(
425
- "/payments/portal",
426
- "POST",
427
- session,
428
- options
429
- );
430
- if (response.success) {
431
- this.log("Customer portal session created", {
432
- id: response.data?.id,
433
- url: response.data?.url
321
+ window.addEventListener("message", async (event) => {
322
+ const message = event.data;
323
+ if (message.type !== "vly-screenshot-request") return;
324
+ console.log("[VLY Runtime] Screenshot request received:", message.requestId);
325
+ try {
326
+ if (typeof window.html2canvas === "undefined") {
327
+ throw new Error("html2canvas not loaded yet");
328
+ }
329
+ const html2canvas = window.html2canvas;
330
+ const canvas = await html2canvas(document.body, {
331
+ useCORS: true,
332
+ allowTaint: false,
333
+ backgroundColor: "#ffffff",
334
+ logging: false,
335
+ scale: 1
434
336
  });
337
+ console.log("[VLY Runtime] Canvas created:", `${canvas.width}x${canvas.height}`);
338
+ const format = message.format || "jpeg";
339
+ const quality = message.quality || 0.85;
340
+ const mimeType = `image/${format}`;
341
+ canvas.toBlob((blob) => {
342
+ if (!blob) {
343
+ throw new Error("Failed to convert canvas to blob");
344
+ }
345
+ console.log("[VLY Runtime] Blob created:", `${(blob.size / 1024).toFixed(2)} KB`);
346
+ const reader = new FileReader();
347
+ reader.onload = () => {
348
+ window.parent.postMessage({
349
+ type: "vly-screenshot-response",
350
+ requestId: message.requestId,
351
+ dataUrl: reader.result
352
+ }, "*");
353
+ console.log("[VLY Runtime] Screenshot sent to parent");
354
+ };
355
+ reader.onerror = () => {
356
+ throw new Error("FileReader error");
357
+ };
358
+ reader.readAsDataURL(blob);
359
+ }, mimeType, quality);
360
+ } catch (error) {
361
+ console.error("[VLY Runtime] Screenshot failed:", error);
362
+ window.parent.postMessage({
363
+ type: "vly-screenshot-error",
364
+ requestId: message.requestId,
365
+ error: error instanceof Error ? error.message : "Unknown error"
366
+ }, "*");
435
367
  }
436
- return response;
437
- }
438
- async createCheckoutSession(session, options) {
439
- this.log("Creating checkout session", {
440
- mode: session.mode,
441
- lineItems: session.lineItems.length
442
- });
443
- return this.request(
444
- "/payments/checkout",
445
- "POST",
446
- session,
447
- options
448
- );
449
- }
450
- async createCustomer(customer, options) {
451
- this.log("Creating customer", { email: customer.email });
452
- return this.request(
453
- "/payments/customers",
454
- "POST",
455
- customer,
456
- options
457
- );
458
- }
459
- async getCustomer(customerId, options) {
460
- this.log("Getting customer", { customerId });
461
- return this.request(
462
- `/payments/customers/${customerId}`,
463
- "GET",
464
- void 0,
465
- options
466
- );
467
- }
468
- async updateCustomer(customerId, updates, options) {
469
- this.log("Updating customer", { customerId });
470
- return this.request(
471
- `/payments/customers/${customerId}`,
472
- "PUT",
473
- updates,
474
- options
475
- );
476
- }
477
- async listPaymentMethods(customerId, options) {
478
- this.log("Listing payment methods", { customerId });
479
- return this.request(
480
- `/payments/customers/${customerId}/payment-methods`,
481
- "GET",
482
- void 0,
483
- options
484
- );
485
- }
486
- async attachPaymentMethod(paymentMethodId, customerId, options) {
487
- this.log("Attaching payment method", {
488
- paymentMethodId,
489
- customerId
490
- });
491
- return this.request(
492
- `/payments/payment-methods/${paymentMethodId}/attach`,
493
- "POST",
494
- { customerId },
495
- options
496
- );
497
- }
498
- async detachPaymentMethod(paymentMethodId, options) {
499
- this.log("Detaching payment method", { paymentMethodId });
500
- return this.request(
501
- `/payments/payment-methods/${paymentMethodId}/detach`,
502
- "POST",
503
- void 0,
504
- options
505
- );
368
+ });
369
+ }
370
+
371
+ // src/project-thumbnail/index.ts
372
+ function isVlyPlatform() {
373
+ if (typeof window === "undefined") return false;
374
+ const hostname = window.location.hostname;
375
+ return hostname.endsWith(".vly.ai") || hostname.endsWith(".vly.sh") || hostname.includes("localhost") || // For dev
376
+ hostname.includes("127.0.0.1");
377
+ }
378
+ function initVly() {
379
+ if (!isVlyPlatform()) {
380
+ console.log("[VLY Runtime] Not on VLY platform, skipping initialization");
381
+ return;
382
+ }
383
+ console.log("[VLY Runtime] Initializing...");
384
+ initScreenshotListener();
385
+ console.log("[VLY Runtime] Ready");
386
+ }
387
+ if (typeof window !== "undefined") {
388
+ if (document.readyState === "loading") {
389
+ document.addEventListener("DOMContentLoaded", initVly);
390
+ } else {
391
+ initVly();
506
392
  }
507
- };
393
+ }
508
394
 
509
395
  // src/index.ts
396
+ var DEFAULT_DEPLOYMENT_TOKEN = "vlytomoonF2024";
510
397
  var VlyIntegrations = class {
511
398
  ai;
512
399
  email;
513
- payments;
400
+ config;
514
401
  constructor(config) {
515
- if (!config.deploymentToken) {
516
- throw new Error("Deployment token is required");
517
- }
518
- this.ai = new VlyAI(config);
519
- this.email = new VlyEmail(config);
520
- this.payments = new VlyPayments(config);
402
+ const normalizedToken = config.deploymentToken && config.deploymentToken.trim().length > 0 ? config.deploymentToken : DEFAULT_DEPLOYMENT_TOKEN;
403
+ this.config = {
404
+ deploymentToken: normalizedToken,
405
+ debug: config.debug ?? false
406
+ };
407
+ this.ai = new VlyAI(this.config);
408
+ this.email = new VlyEmail(this.config);
521
409
  }
522
410
  };
523
411
  function createVlyIntegrations(config) {
524
412
  return new VlyIntegrations(config);
525
413
  }
526
414
 
527
- export { VlyAI, VlyEmail, VlyIntegrations, VlyPayments, createVlyIntegrations };
415
+ export { VlyAI, VlyEmail, VlyIntegrations, createVlyIntegrations, initScreenshotListener, initVly };
528
416
  //# sourceMappingURL=index.mjs.map
529
417
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ai/index.ts","../src/client.ts","../src/email/index.ts","../src/payments/index.ts","../src/index.ts"],"names":[],"mappings":";;;;AAUO,IAAM,QAAN,MAAY;AAAA,EACT,QAAA;AAAA,EACA,MAAA;AAAA,EAER,YAAY,MAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,WAAW,sBAAA,CAAuB;AAAA,MACrC,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,kCAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,CAAA,OAAA,EAAU,MAAA,CAAO,eAAe,CAAA;AAAA;AACnD,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,SAAS,SAAA,EAAoB;AACnC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,SAAA,IAAa,OAAO,CAAA;AAAA,EAC3C;AAAA,EAEQ,YAAY,QAAA,EAA0D;AAC5E,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,GAAA,MAAQ;AAAA,MAC1B,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI;AAAA,KACf,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,EACA,QAAA,EAC4C;AAC5C,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,IAAI,8BAAA,EAAgC,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,QAAQ,CAAA;AAElD,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa;AAAA,QAChC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,iBAAiB,OAAA,CAAQ;AAAA,OAC1B,CAAA;AAED,MAAA,MAAM,YAAA,GAAqC;AAAA,QACzC,EAAA,EAAI,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,QACrB,SAAS,CAAC;AAAA,UACR,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,WAAA;AAAA,YACN,SAAS,MAAA,CAAO;AAAA,WAClB;AAAA,UACA,YAAA,EAAc,OAAO,YAAA,IAAgB;AAAA,SACtC,CAAA;AAAA,QACD,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,MAAA,CAAO,KAAA,EAAO,WAAA,IAAe,CAAA;AAAA,UAC3C,gBAAA,EAAkB,MAAA,CAAO,KAAA,EAAO,YAAA,IAAgB,CAAA;AAAA,UAChD,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,WAAA,IAAe;AAAA;AAC5C,OACF;AAEA,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,IAAI,gCAAA,EAAkC;AAAA,UAC5C,UAAA,EAAY,aAAa,KAAA,CAAM;AAAA,SAChC,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,MAAM,4BAAA,EAA8B,EAAE,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MACtE;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,MAAM,OAAA,IAAW;AAAA,OAC1B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CACJ,OAAA,EACA,OAAA,EACA,QAAA,EAC4C;AAC5C,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,IAAI,wCAAA,EAA0C,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AAAA,IAChF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,QAAQ,CAAA;AAElD,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW;AAAA,QAC9B,KAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,iBAAiB,OAAA,CAAQ;AAAA,OAC1B,CAAA;AAED,MAAA,IAAI,YAAA,GAAe,EAAA;AAEnB,MAAA,WAAA,MAAiB,KAAA,IAAS,OAAO,UAAA,EAAY;AAC3C,QAAA,YAAA,IAAgB,KAAA;AAChB,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA;AAE3B,MAAA,MAAM,YAAA,GAAqC;AAAA,QACzC,EAAA,EAAI,CAAA,WAAA,EAAc,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,QAC5B,SAAS,CAAC;AAAA,UACR,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,WAAA;AAAA,YACN,OAAA,EAAS;AAAA,WACX;AAAA,UACA,YAAA,EAAc;AAAA,SACf,CAAA;AAAA,QACD,KAAA,EAAO;AAAA,UACL,YAAA,EAAc,OAAO,WAAA,IAAe,CAAA;AAAA,UACpC,gBAAA,EAAkB,OAAO,YAAA,IAAgB,CAAA;AAAA,UACzC,WAAA,EAAa,OAAO,WAAA,IAAe;AAAA;AACrC,OACF;AAEA,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,IAAI,0CAAA,EAA4C;AAAA,UACtD,UAAA,EAAY,aAAa,KAAA,CAAM;AAAA,SAChC,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,OACR;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,MAAM,sCAAA,EAAwC,EAAE,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MAChF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,MAAM,OAAA,IAAW;AAAA,OAC1B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CACJ,KAAA,EACA,QAAA,EAC8D;AAC9D,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,2BAAA,EAA6B,EAAE,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA;AAAA,IAClG;AAIA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA;AAAA,EAGA,WAAA,GAAc;AACZ,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AACF;;;ACnLO,IAAM,YAAN,MAAgB;AAAA,EACX,MAAA;AAAA,EAEV,YAAY,MAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,iBAAiB,MAAA,CAAO,eAAA;AAAA,MACxB,KAAA,EAAO,OAAO,KAAA,IAAS;AAAA,KACzB;AAAA,EACF;AAAA,EAEA,MAAgB,OAAA,CACd,QAAA,EACA,MAAA,EACA,MACA,OAAA,EACyB;AACzB,IAAA,MAAM,GAAA,GAAM,4BAA4B,QAAQ,CAAA,CAAA;AAChD,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,eAAe,CAAA,CAAA;AAAA,MACtD,cAAA,EAAgB,kBAAA;AAAA,MAChB,eAAA,EAAiB;AAAA,KACnB;AAEA,IAAA,MAAM,YAAA,GAA4B;AAAA,MAChC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACtC;AAGA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,OAAA,GAAU,SAAS,OAAA,IAAW,GAAA;AACpC,IAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,OAAO,CAAA;AAC9D,IAAA,YAAA,CAAa,SAAS,UAAA,CAAW,MAAA;AAEjC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK,YAAY,CAAA;AAC9C,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAE3D,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,IAAA,EAAM,YAAA;AAAA,UACN,OAAO,YAAA,EAAc;AAAA,SACvB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,YAAA,EAAc,KAAA,IAAS,CAAA,2BAAA,EAA8B,SAAS,MAAM,CAAA,CAAA;AAElF,QAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,EAAI;AAAA,YACvC,QAAA;AAAA,YACA,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AAEA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,MAAM,eAAe,KAAA,CAAM,IAAA,KAAS,YAAA,GAAe,iBAAA,GAAoB,MAAM,OAAA,IAAW,wBAAA;AAExF,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,wBAAA,EAA2B,YAAY,CAAA,CAAA,EAAI;AAAA,UACvD,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,OAAA,CAAQ,OAAA,GAAU,CAAA,EAAG;AAC3C,QAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,OAAA,CAAQ,OAAO,CAAA,cAAA,CAAgB,CAAA;AAAA,QACrE;AAEA,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,GAAI,CAAC,CAAA;AACtD,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAM;AAAA,UAC1C,GAAG,OAAA;AAAA,UACH,OAAA,EAAS,QAAQ,OAAA,GAAU;AAAA,SAC5B,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAAA,EAEU,GAAA,CAAI,SAAiB,IAAA,EAAY;AACzC,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,IAC5C;AAAA,EACF;AACF,CAAA;;;AC5FO,IAAM,QAAA,GAAN,cAAuB,SAAA,CAAU;AAAA,EACtC,MAAM,IAAA,CACJ,KAAA,EACA,OAAA,EACqC;AACrC,IAAA,IAAA,CAAK,IAAI,eAAA,EAAiB;AAAA,MACxB,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,SAAS,KAAA,CAAM;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,IAAI,KAAA,CAAM,EAAA,GAAK,CAAC,KAAA,CAAM,EAAE,CAAA;AAAA,MAClD,IAAA,EAAM,MAAM,IAAA,IAAQ,gBAAA;AAAA,MACpB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,EAAA,EAAI,KAAA,CAAM,EAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA,CAAM,EAAA,GAAK,CAAC,KAAA,CAAM,EAAE,CAAA,GAAK,MAAA;AAAA,MACnE,GAAA,EAAK,KAAA,CAAM,GAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,GAAA,GAAM,CAAC,KAAA,CAAM,GAAG,CAAA,GAAK;AAAA,KAC1E;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAA,CAAK,IAAI,yBAAA,EAA2B;AAAA,QAClC,EAAA,EAAI,SAAS,IAAA,EAAM,EAAA;AAAA,QACnB,MAAA,EAAQ,SAAS,IAAA,EAAM;AAAA,OACxB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAA,CACJ,MAAA,EACA,OAAA,EACuC;AACvC,IAAA,IAAA,CAAK,IAAI,sBAAA,EAAwB,EAAE,KAAA,EAAO,MAAA,CAAO,QAAQ,CAAA;AAEzD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,QAC3B,EAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,IAAI,KAAA,CAAM,EAAA,GAAK,CAAC,KAAA,CAAM,EAAE,CAAA;AAAA,QAClD,IAAA,EAAM,MAAM,IAAA,IAAQ,gBAAA;AAAA,QACpB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,EAAA,EAAI,KAAA,CAAM,EAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA,CAAM,EAAA,GAAK,CAAC,KAAA,CAAM,EAAE,CAAA,GAAK,MAAA;AAAA,QACnE,GAAA,EAAK,KAAA,CAAM,GAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,GAAA,GAAM,CAAC,KAAA,CAAM,GAAG,CAAA,GAAK;AAAA,OAC1E,CAAE;AAAA,KACJ;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CACJ,OAAA,EACA,OAAA,EACqC;AACrC,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,EAAE,OAAA,EAAS,CAAA;AAE5C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,oBAAoB,OAAO,CAAA,CAAA;AAAA,MAC3B,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CACJ,MAAA,EACA,OAAA,EAUE;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,EAAE,MAAA,EAAQ,CAAA;AAEvC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,0BAAA;AAAA,MACA,MAAA;AAAA,MACA,EAAE,MAAA,EAAO;AAAA,MACT;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,OAAA,EAMG;AACH,IAAA,IAAA,CAAK,IAAI,uBAAuB,CAAA;AAEhC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,mBAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;;;ACrHO,IAAM,WAAA,GAAN,cAA0B,SAAA,CAAU;AAAA,EACzC,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EAC6C;AAC7C,IAAA,IAAA,CAAK,IAAI,yBAAA,EAA2B;AAAA,MAClC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,QAAA,EAAU,OAAO,QAAA,IAAY,KAAA;AAAA,MAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,UAAU,MAAA,CAAO;AAAA,KACnB;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAA,CAAK,IAAI,wBAAA,EAA0B;AAAA,QACjC,EAAA,EAAI,SAAS,IAAA,EAAM,EAAA;AAAA,QACnB,MAAA,EAAQ,SAAS,IAAA,EAAM;AAAA,OACxB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,oBAAA,CACJ,QAAA,EACA,eAAA,EACA,OAAA,EAC6C;AAC7C,IAAA,IAAA,CAAK,GAAA,CAAI,2BAAA,EAA6B,EAAE,QAAA,EAAU,CAAA;AAElD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,qBAAqB,QAAQ,CAAA,QAAA,CAAA;AAAA,MAC7B,MAAA;AAAA,MACA,EAAE,eAAA,EAAgB;AAAA,MAClB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CACJ,QAAA,EACA,OAAA,EAC6C;AAC7C,IAAA,IAAA,CAAK,GAAA,CAAI,wBAAA,EAA0B,EAAE,QAAA,EAAU,CAAA;AAE/C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,qBAAqB,QAAQ,CAAA,CAAA;AAAA,MAC7B,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CACJ,QAAA,EACA,OAAA,EAC6C;AAC7C,IAAA,IAAA,CAAK,GAAA,CAAI,0BAAA,EAA4B,EAAE,QAAA,EAAU,CAAA;AAEjD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,qBAAqB,QAAQ,CAAA,OAAA,CAAA;AAAA,MAC7B,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAA,CACJ,YAAA,EACA,OAAA,EAC4C;AAC5C,IAAA,IAAA,CAAK,IAAI,uBAAA,EAAyB;AAAA,MAChC,YAAY,YAAA,CAAa,UAAA;AAAA,MACzB,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,yBAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAA,CAAK,IAAI,sBAAA,EAAwB;AAAA,QAC/B,EAAA,EAAI,SAAS,IAAA,EAAM,EAAA;AAAA,QACnB,MAAA,EAAQ,SAAS,IAAA,EAAM;AAAA,OACxB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,kBAAA,CACJ,cAAA,EACA,OAAA,EACA,OAAA,EAC4C;AAC5C,IAAA,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,EAAE,cAAA,EAAgB,CAAA;AAEpD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,2BAA2B,cAAc,CAAA,CAAA;AAAA,MACzC,KAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAA,CACJ,cAAA,EACA,WAAA,EACA,OAAA,EAC4C;AAC5C,IAAA,IAAA,CAAK,IAAI,wBAAA,EAA0B;AAAA,MACjC,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,2BAA2B,cAAc,CAAA,OAAA,CAAA;AAAA,MACzC,MAAA;AAAA,MACA,EAAE,WAAA,EAAY;AAAA,MACd;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CACJ,cAAA,EACA,OAAA,EAC4C;AAC5C,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,EAAE,cAAA,EAAgB,CAAA;AAEnD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,2BAA2B,cAAc,CAAA,CAAA;AAAA,MACzC,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAA,CACJ,UAAA,EACA,OAAA,EAKE;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,EAAE,UAAA,EAAY,CAAA;AAEhD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,IAAI,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc,UAAU,CAAA;AACtD,IAAA,IAAI,OAAA,EAAS,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AACnE,IAAA,IAAI,OAAA,EAAS,QAAQ,MAAA,CAAO,MAAA,CAAO,UAAU,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA;AAEtE,IAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,IAAA,MAAM,WAAW,CAAA,uBAAA,EAA0B,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,KAAK,EAAE,CAAA,CAAA;AAE/E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,KAAA,EAAO,QAAW,OAAO,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,oBAAA,CACJ,OAAA,EACA,OAAA,EAC8C;AAC9C,IAAA,IAAA,CAAK,IAAI,kCAAA,EAAoC;AAAA,MAC3C,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA;AAAA,MAC1B,kBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAA,CAAK,IAAI,iCAAA,EAAmC;AAAA,QAC1C,EAAA,EAAI,SAAS,IAAA,EAAM,EAAA;AAAA,QACnB,GAAA,EAAK,SAAS,IAAA,EAAM;AAAA,OACrB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,qBAAA,CACJ,OAAA,EAYA,OAAA,EAIE;AACF,IAAA,IAAA,CAAK,IAAI,2BAAA,EAA6B;AAAA,MACpC,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,SAAA,EAAW,QAAQ,SAAA,CAAU;AAAA,KAC9B,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,oBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,QAAA,EAKA,OAAA,EAME;AACF,IAAA,IAAA,CAAK,IAAI,mBAAA,EAAqB,EAAE,KAAA,EAAO,QAAA,CAAS,OAAO,CAAA;AAEvD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,qBAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CACJ,UAAA,EACA,OAAA,EAOE;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,EAAE,UAAA,EAAY,CAAA;AAE3C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,uBAAuB,UAAU,CAAA,CAAA;AAAA,MACjC,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,UAAA,EACA,OAAA,EAKA,OAAA,EAOE;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,mBAAA,EAAqB,EAAE,UAAA,EAAY,CAAA;AAE5C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,uBAAuB,UAAU,CAAA,CAAA;AAAA,MACjC,KAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAA,CACJ,UAAA,EACA,OAAA,EAWG;AACH,IAAA,IAAA,CAAK,GAAA,CAAI,yBAAA,EAA2B,EAAE,UAAA,EAAY,CAAA;AAElD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,uBAAuB,UAAU,CAAA,gBAAA,CAAA;AAAA,MACjC,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CACJ,eAAA,EACA,UAAA,EACA,OAAA,EAKE;AACF,IAAA,IAAA,CAAK,IAAI,0BAAA,EAA4B;AAAA,MACnC,eAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,6BAA6B,eAAe,CAAA,OAAA,CAAA;AAAA,MAC5C,MAAA;AAAA,MACA,EAAE,UAAA,EAAW;AAAA,MACb;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CACJ,eAAA,EACA,OAAA,EAIE;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,0BAAA,EAA4B,EAAE,eAAA,EAAiB,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,6BAA6B,eAAe,CAAA,OAAA,CAAA;AAAA,MAC5C,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;;;ACvWO,IAAM,kBAAN,MAAsB;AAAA,EACpB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EAEP,YAAY,MAAA,EAAmB;AAC7B,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAEA,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,KAAA,CAAM,MAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,QAAA,CAAS,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,WAAA,CAAY,MAAM,CAAA;AAAA,EACxC;AACF;AAEO,SAAS,sBAAsB,MAAA,EAAoC;AACxE,EAAA,OAAO,IAAI,gBAAgB,MAAM,CAAA;AACnC","file":"index.mjs","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 };"]}
1
+ {"version":3,"sources":["../src/ai/index.ts","../src/client.ts","../src/email/index.ts","../src/project-thumbnail/screenshot.ts","../src/project-thumbnail/index.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","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://integrations.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 || 'vlytomoonF2024',\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://integrations.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}","export interface ScreenshotMessage {\n type: 'vly-screenshot-request' | 'vly-screenshot-response' | 'vly-screenshot-error';\n requestId?: string;\n dataUrl?: string;\n error?: string;\n format?: 'png' | 'jpeg' | 'webp';\n quality?: number;\n}\n\nexport function initScreenshotListener() {\n console.log('[VLY Runtime] Screenshot listener initialized');\n\n // Load html2canvas-pro from CDN (supports modern CSS like oklch)\n if (typeof (window as any).html2canvas === 'undefined') {\n const script = document.createElement('script');\n script.src = 'https://cdn.jsdelivr.net/npm/html2canvas-pro@1.5.8/dist/html2canvas-pro.min.js';\n script.async = true;\n script.onload = () => {\n console.log('[VLY Runtime] html2canvas-pro loaded');\n };\n script.onerror = () => {\n console.error('[VLY Runtime] Failed to load html2canvas-pro');\n };\n document.head.appendChild(script);\n }\n\n // Listen for screenshot requests from parent\n window.addEventListener('message', async (event) => {\n const message = event.data as ScreenshotMessage;\n\n if (message.type !== 'vly-screenshot-request') return;\n\n console.log('[VLY Runtime] Screenshot request received:', message.requestId);\n\n try {\n // Wait for html2canvas to load\n if (typeof (window as any).html2canvas === 'undefined') {\n throw new Error('html2canvas not loaded yet');\n }\n\n const html2canvas = (window as any).html2canvas;\n\n // Capture screenshot\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n allowTaint: false,\n backgroundColor: '#ffffff',\n logging: false,\n scale: 1,\n });\n\n console.log('[VLY Runtime] Canvas created:', `${canvas.width}x${canvas.height}`);\n\n // Convert to blob and data URL\n const format = message.format || 'jpeg';\n const quality = message.quality || 0.85;\n const mimeType = `image/${format}`;\n\n canvas.toBlob((blob: Blob | null) => {\n if (!blob) {\n throw new Error('Failed to convert canvas to blob');\n }\n\n console.log('[VLY Runtime] Blob created:', `${(blob.size / 1024).toFixed(2)} KB`);\n\n const reader = new FileReader();\n reader.onload = () => {\n window.parent.postMessage({\n type: 'vly-screenshot-response',\n requestId: message.requestId,\n dataUrl: reader.result as string,\n } as ScreenshotMessage, '*');\n\n console.log('[VLY Runtime] Screenshot sent to parent');\n };\n reader.onerror = () => {\n throw new Error('FileReader error');\n };\n reader.readAsDataURL(blob);\n }, mimeType, quality);\n\n } catch (error) {\n console.error('[VLY Runtime] Screenshot failed:', error);\n\n window.parent.postMessage({\n type: 'vly-screenshot-error',\n requestId: message.requestId,\n error: error instanceof Error ? error.message : 'Unknown error',\n } as ScreenshotMessage, '*');\n }\n });\n}\n","import { initScreenshotListener } from './screenshot';\n\nfunction isVlyPlatform(): boolean {\n if (typeof window === 'undefined') return false;\n\n const hostname = window.location.hostname;\n return (\n hostname.endsWith('.vly.ai') ||\n hostname.endsWith('.vly.sh') ||\n hostname.includes('localhost') || // For dev\n hostname.includes('127.0.0.1')\n );\n}\n\nexport function initVly() {\n if (!isVlyPlatform()) {\n console.log('[VLY Runtime] Not on VLY platform, skipping initialization');\n return;\n }\n\n console.log('[VLY Runtime] Initializing...');\n initScreenshotListener();\n console.log('[VLY Runtime] Ready');\n}\n\n// Auto-initialize on import\nif (typeof window !== 'undefined') {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initVly);\n } else {\n initVly();\n }\n}\n\nexport { initScreenshotListener } from './screenshot';\nexport type { ScreenshotMessage } from './screenshot';\n","import type { VlyConfig } from './types';\nimport { VlyAI } from './ai';\nimport { VlyEmail } from './email';\n\nexport * from './types';\nexport type { AIModel } from './types';\n\n// Re-export AI SDK types for convenience\nexport type { CoreMessage } from 'ai';\n\n// Re-export project thumbnail types\nexport type { ScreenshotMessage } from './project-thumbnail';\nexport { initScreenshotListener, initVly } from './project-thumbnail';\n\nconst DEFAULT_DEPLOYMENT_TOKEN = 'vlytomoonF2024';\n\nexport class VlyIntegrations {\n public readonly ai: VlyAI;\n public readonly email: VlyEmail;\n public readonly config: Required<VlyConfig>;\n\n constructor(config: VlyConfig) {\n const normalizedToken =\n config.deploymentToken && config.deploymentToken.trim().length > 0\n ? config.deploymentToken\n : DEFAULT_DEPLOYMENT_TOKEN;\n\n this.config = {\n deploymentToken: normalizedToken,\n debug: config.debug ?? false,\n };\n\n this.ai = new VlyAI(this.config);\n this.email = new VlyEmail(this.config);\n }\n}\n\nexport function createVlyIntegrations(config: VlyConfig): VlyIntegrations {\n return new VlyIntegrations(config);\n}\n\nexport { VlyAI, VlyEmail };"]}
@@ -0,0 +1,13 @@
1
+ interface ScreenshotMessage {
2
+ type: 'vly-screenshot-request' | 'vly-screenshot-response' | 'vly-screenshot-error';
3
+ requestId?: string;
4
+ dataUrl?: string;
5
+ error?: string;
6
+ format?: 'png' | 'jpeg' | 'webp';
7
+ quality?: number;
8
+ }
9
+ declare function initScreenshotListener(): void;
10
+
11
+ declare function initVly(): void;
12
+
13
+ export { type ScreenshotMessage, initScreenshotListener, initVly };
@@ -0,0 +1,13 @@
1
+ interface ScreenshotMessage {
2
+ type: 'vly-screenshot-request' | 'vly-screenshot-response' | 'vly-screenshot-error';
3
+ requestId?: string;
4
+ dataUrl?: string;
5
+ error?: string;
6
+ format?: 'png' | 'jpeg' | 'webp';
7
+ quality?: number;
8
+ }
9
+ declare function initScreenshotListener(): void;
10
+
11
+ declare function initVly(): void;
12
+
13
+ export { type ScreenshotMessage, initScreenshotListener, initVly };
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ // src/project-thumbnail/screenshot.ts
4
+ function initScreenshotListener() {
5
+ console.log("[VLY Runtime] Screenshot listener initialized");
6
+ if (typeof window.html2canvas === "undefined") {
7
+ const script = document.createElement("script");
8
+ script.src = "https://cdn.jsdelivr.net/npm/html2canvas-pro@1.5.8/dist/html2canvas-pro.min.js";
9
+ script.async = true;
10
+ script.onload = () => {
11
+ console.log("[VLY Runtime] html2canvas-pro loaded");
12
+ };
13
+ script.onerror = () => {
14
+ console.error("[VLY Runtime] Failed to load html2canvas-pro");
15
+ };
16
+ document.head.appendChild(script);
17
+ }
18
+ window.addEventListener("message", async (event) => {
19
+ const message = event.data;
20
+ if (message.type !== "vly-screenshot-request") return;
21
+ console.log("[VLY Runtime] Screenshot request received:", message.requestId);
22
+ try {
23
+ if (typeof window.html2canvas === "undefined") {
24
+ throw new Error("html2canvas not loaded yet");
25
+ }
26
+ const html2canvas = window.html2canvas;
27
+ const canvas = await html2canvas(document.body, {
28
+ useCORS: true,
29
+ allowTaint: false,
30
+ backgroundColor: "#ffffff",
31
+ logging: false,
32
+ scale: 1
33
+ });
34
+ console.log("[VLY Runtime] Canvas created:", `${canvas.width}x${canvas.height}`);
35
+ const format = message.format || "jpeg";
36
+ const quality = message.quality || 0.85;
37
+ const mimeType = `image/${format}`;
38
+ canvas.toBlob((blob) => {
39
+ if (!blob) {
40
+ throw new Error("Failed to convert canvas to blob");
41
+ }
42
+ console.log("[VLY Runtime] Blob created:", `${(blob.size / 1024).toFixed(2)} KB`);
43
+ const reader = new FileReader();
44
+ reader.onload = () => {
45
+ window.parent.postMessage({
46
+ type: "vly-screenshot-response",
47
+ requestId: message.requestId,
48
+ dataUrl: reader.result
49
+ }, "*");
50
+ console.log("[VLY Runtime] Screenshot sent to parent");
51
+ };
52
+ reader.onerror = () => {
53
+ throw new Error("FileReader error");
54
+ };
55
+ reader.readAsDataURL(blob);
56
+ }, mimeType, quality);
57
+ } catch (error) {
58
+ console.error("[VLY Runtime] Screenshot failed:", error);
59
+ window.parent.postMessage({
60
+ type: "vly-screenshot-error",
61
+ requestId: message.requestId,
62
+ error: error instanceof Error ? error.message : "Unknown error"
63
+ }, "*");
64
+ }
65
+ });
66
+ }
67
+
68
+ // src/project-thumbnail/index.ts
69
+ function isVlyPlatform() {
70
+ if (typeof window === "undefined") return false;
71
+ const hostname = window.location.hostname;
72
+ return hostname.endsWith(".vly.ai") || hostname.endsWith(".vly.sh") || hostname.includes("localhost") || // For dev
73
+ hostname.includes("127.0.0.1");
74
+ }
75
+ function initVly() {
76
+ if (!isVlyPlatform()) {
77
+ console.log("[VLY Runtime] Not on VLY platform, skipping initialization");
78
+ return;
79
+ }
80
+ console.log("[VLY Runtime] Initializing...");
81
+ initScreenshotListener();
82
+ console.log("[VLY Runtime] Ready");
83
+ }
84
+ if (typeof window !== "undefined") {
85
+ if (document.readyState === "loading") {
86
+ document.addEventListener("DOMContentLoaded", initVly);
87
+ } else {
88
+ initVly();
89
+ }
90
+ }
91
+
92
+ exports.initScreenshotListener = initScreenshotListener;
93
+ exports.initVly = initVly;
94
+ //# sourceMappingURL=index.js.map
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/project-thumbnail/screenshot.ts","../../src/project-thumbnail/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export interface ScreenshotMessage {\n type: 'vly-screenshot-request' | 'vly-screenshot-response' | 'vly-screenshot-error';\n requestId?: string;\n dataUrl?: string;\n error?: string;\n format?: 'png' | 'jpeg' | 'webp';\n quality?: number;\n}\n\nexport function initScreenshotListener() {\n console.log('[VLY Runtime] Screenshot listener initialized');\n\n // Load html2canvas-pro from CDN (supports modern CSS like oklch)\n if (typeof (window as any).html2canvas === 'undefined') {\n const script = document.createElement('script');\n script.src = 'https://cdn.jsdelivr.net/npm/html2canvas-pro@1.5.8/dist/html2canvas-pro.min.js';\n script.async = true;\n script.onload = () => {\n console.log('[VLY Runtime] html2canvas-pro loaded');\n };\n script.onerror = () => {\n console.error('[VLY Runtime] Failed to load html2canvas-pro');\n };\n document.head.appendChild(script);\n }\n\n // Listen for screenshot requests from parent\n window.addEventListener('message', async (event) => {\n const message = event.data as ScreenshotMessage;\n\n if (message.type !== 'vly-screenshot-request') return;\n\n console.log('[VLY Runtime] Screenshot request received:', message.requestId);\n\n try {\n // Wait for html2canvas to load\n if (typeof (window as any).html2canvas === 'undefined') {\n throw new Error('html2canvas not loaded yet');\n }\n\n const html2canvas = (window as any).html2canvas;\n\n // Capture screenshot\n const canvas = await html2canvas(document.body, {\n useCORS: true,\n allowTaint: false,\n backgroundColor: '#ffffff',\n logging: false,\n scale: 1,\n });\n\n console.log('[VLY Runtime] Canvas created:', `${canvas.width}x${canvas.height}`);\n\n // Convert to blob and data URL\n const format = message.format || 'jpeg';\n const quality = message.quality || 0.85;\n const mimeType = `image/${format}`;\n\n canvas.toBlob((blob: Blob | null) => {\n if (!blob) {\n throw new Error('Failed to convert canvas to blob');\n }\n\n console.log('[VLY Runtime] Blob created:', `${(blob.size / 1024).toFixed(2)} KB`);\n\n const reader = new FileReader();\n reader.onload = () => {\n window.parent.postMessage({\n type: 'vly-screenshot-response',\n requestId: message.requestId,\n dataUrl: reader.result as string,\n } as ScreenshotMessage, '*');\n\n console.log('[VLY Runtime] Screenshot sent to parent');\n };\n reader.onerror = () => {\n throw new Error('FileReader error');\n };\n reader.readAsDataURL(blob);\n }, mimeType, quality);\n\n } catch (error) {\n console.error('[VLY Runtime] Screenshot failed:', error);\n\n window.parent.postMessage({\n type: 'vly-screenshot-error',\n requestId: message.requestId,\n error: error instanceof Error ? error.message : 'Unknown error',\n } as ScreenshotMessage, '*');\n }\n });\n}\n","import { initScreenshotListener } from './screenshot';\n\nfunction isVlyPlatform(): boolean {\n if (typeof window === 'undefined') return false;\n\n const hostname = window.location.hostname;\n return (\n hostname.endsWith('.vly.ai') ||\n hostname.endsWith('.vly.sh') ||\n hostname.includes('localhost') || // For dev\n hostname.includes('127.0.0.1')\n );\n}\n\nexport function initVly() {\n if (!isVlyPlatform()) {\n console.log('[VLY Runtime] Not on VLY platform, skipping initialization');\n return;\n }\n\n console.log('[VLY Runtime] Initializing...');\n initScreenshotListener();\n console.log('[VLY Runtime] Ready');\n}\n\n// Auto-initialize on import\nif (typeof window !== 'undefined') {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initVly);\n } else {\n initVly();\n }\n}\n\nexport { initScreenshotListener } from './screenshot';\nexport type { ScreenshotMessage } from './screenshot';\n"]}