@wix/vibe-bookings-plugin 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -4234,55 +4234,117 @@ var JsonParserService = class {
4234
4234
  }
4235
4235
  };
4236
4236
 
4237
+ // src/services/logger.service.ts
4238
+ var Logger = class {
4239
+ prefix;
4240
+ baseLogger;
4241
+ constructor(env, context) {
4242
+ this.baseLogger = env.logger;
4243
+ this.prefix = context ? `[${VERTICAL_NAME}-plugin-${context}]` : `[${VERTICAL_NAME}-plugin]`;
4244
+ }
4245
+ /**
4246
+ * Formats a message with the prefix
4247
+ */
4248
+ formatMessage(message) {
4249
+ return `${this.prefix} ${message}`;
4250
+ }
4251
+ /**
4252
+ * Logs an info message
4253
+ */
4254
+ info(message, data) {
4255
+ this.baseLogger.info(this.formatMessage(message), data);
4256
+ }
4257
+ /**
4258
+ * Logs a debug message
4259
+ */
4260
+ debug(message, data) {
4261
+ this.baseLogger.debug(this.formatMessage(message), data);
4262
+ }
4263
+ /**
4264
+ * Logs an error with better handling
4265
+ * Creates an Error object from the message and includes data in the context
4266
+ */
4267
+ error(message, data) {
4268
+ const errorObject = new Error(this.formatMessage(message));
4269
+ this.baseLogger.error(errorObject, data);
4270
+ }
4271
+ /**
4272
+ * Logs a warning message
4273
+ */
4274
+ warn(message, data) {
4275
+ this.baseLogger.warn(this.formatMessage(message), data);
4276
+ }
4277
+ };
4278
+
4237
4279
  // src/services/llm.service.ts
4238
4280
  var LLMService = class {
4239
- constructor(env) {
4281
+ constructor(env, logger) {
4240
4282
  this.env = env;
4283
+ this.logger = logger;
4284
+ this.logger = logger || new Logger(this.env, "llm");
4241
4285
  this.jsonParserService = new JsonParserService(this.env);
4242
4286
  }
4243
4287
  jsonParserService;
4244
4288
  async generateTextByProject(projectId, params) {
4245
- return await this.env.generateTextByProject({
4289
+ this.logger.debug("generating text by project", { projectId, params });
4290
+ const response = await this.env.generateTextByProject({
4246
4291
  projectId,
4247
4292
  params
4248
4293
  });
4294
+ this.logger.debug("generated text by project", { response });
4295
+ return response;
4249
4296
  }
4250
4297
  async generateTextByPrompt(promptId, params) {
4251
- return await this.env.generateTextByPrompt({
4298
+ this.logger.debug("generating text by prompt", { promptId, params });
4299
+ const response = await this.env.generateTextByPrompt({
4252
4300
  promptId,
4253
4301
  params
4254
4302
  });
4303
+ this.logger.debug("generated text by prompt", { response });
4304
+ return response;
4255
4305
  }
4256
4306
  async generateObjectByProject(projectId, params) {
4307
+ this.logger.debug("generating object by project", { projectId, params });
4257
4308
  const response = await this.env.generateTextByProject({
4258
4309
  projectId,
4259
4310
  params
4260
4311
  });
4312
+ this.logger.debug("generated object by project", { response });
4261
4313
  if (!response) {
4262
- this.env.logger.error(
4263
- new Error("Failed to generate object by project"),
4264
- { projectId, params }
4265
- );
4314
+ this.logger.error("Failed to generate object by project", {
4315
+ projectId,
4316
+ params
4317
+ });
4266
4318
  return null;
4267
4319
  }
4320
+ this.logger.debug("generated object by project", { response });
4268
4321
  return this.jsonParserService.parseJson(response);
4269
4322
  }
4270
4323
  async generateObjectByPrompt(promptId, params) {
4324
+ this.logger.debug("generating object by prompt", { promptId, params });
4271
4325
  const response = await this.env.generateTextByPrompt({
4272
4326
  promptId,
4273
4327
  params
4274
4328
  });
4275
4329
  if (!response) {
4276
- this.env.logger.error(
4277
- new Error("Failed to generate object by prompt"),
4278
- { promptId, params }
4279
- );
4330
+ this.logger.error("Failed to generate object by prompt", {
4331
+ promptId,
4332
+ params
4333
+ });
4280
4334
  return null;
4281
4335
  }
4336
+ this.logger.debug("generated object by prompt", { response });
4282
4337
  return this.jsonParserService.parseJson(response);
4283
4338
  }
4284
4339
  async generateImage(basePrompt, options) {
4285
- return await this.env.generateImage(basePrompt, options);
4340
+ this.logger.debug("generating image", { basePrompt, options });
4341
+ const imageUrl = await this.env.generateImage(basePrompt, options);
4342
+ this.logger.debug("generated image", { imageUrl });
4343
+ const imageId = imageUrl.split("https://static.wixstatic.com/media/")[1].split("?")[0];
4344
+ return {
4345
+ imageId,
4346
+ imageUrl
4347
+ };
4286
4348
  }
4287
4349
  };
4288
4350
 
@@ -12235,8 +12297,10 @@ var bookingServicesDetailsExample = {
12235
12297
  ]
12236
12298
  };
12237
12299
  var ContentInjectionService = class {
12238
- constructor(env) {
12300
+ constructor(env, logger) {
12239
12301
  this.env = env;
12302
+ this.logger = logger;
12303
+ this.logger = logger || new Logger(this.env, "contentInjection");
12240
12304
  this.llmService = new LLMService(this.env);
12241
12305
  this.bookingsServicesAPIClient = new BookingsServicesAPIClient(this.env);
12242
12306
  this.staffMembersAPIClient = new StaffMembersAPIClient(this.env);
@@ -12245,9 +12309,14 @@ var ContentInjectionService = class {
12245
12309
  bookingsServicesAPIClient;
12246
12310
  staffMembersAPIClient;
12247
12311
  async generateServices() {
12312
+ this.logger.info("generating services");
12248
12313
  const businessDescription = this.env.userRequest;
12249
12314
  const lng = "English";
12250
- const responseExample = JSON.stringify(bookingServicesDetailsExample, null, 2);
12315
+ const responseExample = JSON.stringify(
12316
+ bookingServicesDetailsExample,
12317
+ null,
12318
+ 2
12319
+ );
12251
12320
  const response = await this.llmService.generateObjectByProject(
12252
12321
  prompts.serviceGenerationProjectId,
12253
12322
  {
@@ -12264,28 +12333,43 @@ var ContentInjectionService = class {
12264
12333
  });
12265
12334
  return;
12266
12335
  }
12336
+ this.logger.info("generated services", { response });
12337
+ this.logger.info("getting staff members");
12267
12338
  const staffMembers2 = await this.staffMembersAPIClient.queryStaffMembers(1);
12268
12339
  const firstStaffMember = staffMembers2?.items?.[0];
12269
12340
  if (!firstStaffMember) {
12270
- this.env.logger.error(new Error("Failed to get first/default staff member"), {
12271
- projectId: prompts.serviceGenerationProjectId,
12272
- businessDescription,
12273
- lng
12274
- });
12341
+ this.env.logger.error(
12342
+ new Error("Failed to get first/default staff member"),
12343
+ {
12344
+ projectId: prompts.serviceGenerationProjectId,
12345
+ businessDescription,
12346
+ lng
12347
+ }
12348
+ );
12275
12349
  return;
12276
12350
  }
12351
+ this.logger.info("first staff member", { firstStaffMember });
12352
+ this.logger.info("generating service images");
12277
12353
  const itemsWithImages = await this.generateServiceImages(response.items);
12278
- const bookingServices = itemsWithImages.map((service) => mapBookingServiceDetailsToServerService(service, firstStaffMember));
12354
+ this.logger.info("mapping booking services");
12355
+ const bookingServices = itemsWithImages.map(
12356
+ (service) => mapBookingServiceDetailsToServerService(service, firstStaffMember)
12357
+ );
12358
+ this.logger.info("creating services");
12279
12359
  const createServicesResponse = await this.bookingsServicesAPIClient.createServices(bookingServices);
12280
12360
  return createServicesResponse;
12281
12361
  }
12282
12362
  async generateServiceImages(services) {
12283
- const servicesWithImages = services.map(async (service) => {
12284
- const imageUrl = await this.generateServiceImage(service);
12285
- service.imageUrl = imageUrl;
12286
- return service;
12287
- });
12288
- return await Promise.all(servicesWithImages);
12363
+ const servicesWithImages = await Promise.all(
12364
+ services.map(async (service) => {
12365
+ const imageUrl = await this.generateServiceImage(service);
12366
+ return {
12367
+ ...service,
12368
+ imageUrl
12369
+ };
12370
+ })
12371
+ );
12372
+ return servicesWithImages;
12289
12373
  }
12290
12374
  async generateServiceImage(service) {
12291
12375
  const photoThemePromptSection = this.env.PHOTO_THEME ? dedent_default`The Photo Theme is:
@@ -12306,24 +12390,26 @@ var ContentInjectionService = class {
12306
12390
  ---
12307
12391
  Generate a service image for the service that is part of an inquiry services service
12308
12392
  `;
12309
- return await this.llmService.generateImage(imagePrompt, {
12393
+ const { imageId } = await this.llmService.generateImage(imagePrompt, {
12310
12394
  width: 1024,
12311
12395
  height: 768
12312
12396
  });
12397
+ return imageId;
12313
12398
  }
12314
12399
  };
12315
12400
 
12316
12401
  // src/index.ts
12317
12402
  var install = async (env) => {
12318
- env.logger.info(`[${VERTICAL_NAME}-plugin-install] starting installation`);
12319
- env.logger.info(`[${VERTICAL_NAME}-plugin-install] unzipping and merging plugin files...`);
12320
- env.logger.info(`[${VERTICAL_NAME}-plugin-install] downloading from: ${PLUGIN_FILES_ZIP_URL}`);
12403
+ const logger = new Logger(env, "install");
12404
+ logger.info("starting installation");
12405
+ logger.info("unzipping and merging plugin files...");
12406
+ logger.info(`downloading from: ${PLUGIN_FILES_ZIP_URL}`);
12321
12407
  await (0, import_vibe_plugin_utils2.unzipAndMergePluginFiles)(env, PLUGIN_FILES_ZIP_URL, VERTICAL_NAME);
12322
- env.logger.info(`
12323
- \x1B[34m ==== Bookings installation completed ==== \x1B[0m
12324
- `);
12408
+ logger.info(`\u2705 bookings installation completed`);
12325
12409
  };
12326
12410
  var generateData = async (env) => {
12411
+ const logger = new Logger(env, "generateData");
12412
+ logger.info("starting data generation");
12327
12413
  const contentInjectionService = new ContentInjectionService(env);
12328
12414
  const services = await contentInjectionService.generateServices();
12329
12415
  return {