@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 +119 -33
- package/dist/index.cjs.map +1 -1
- package/package.json +3 -3
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
|
-
|
|
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
|
-
|
|
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.
|
|
4263
|
-
|
|
4264
|
-
|
|
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.
|
|
4277
|
-
|
|
4278
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
12271
|
-
|
|
12272
|
-
|
|
12273
|
-
|
|
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
|
-
|
|
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 =
|
|
12284
|
-
|
|
12285
|
-
|
|
12286
|
-
|
|
12287
|
-
|
|
12288
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12319
|
-
|
|
12320
|
-
|
|
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
|
-
|
|
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 {
|