integrate-sdk 0.8.36 → 0.8.37

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.
Files changed (39) hide show
  1. package/dist/adapters/auto-routes.js +371 -71
  2. package/dist/adapters/index.js +371 -71
  3. package/dist/adapters/nextjs.js +371 -71
  4. package/dist/adapters/node.js +371 -71
  5. package/dist/adapters/svelte-kit.js +371 -71
  6. package/dist/adapters/tanstack-start.js +371 -71
  7. package/dist/ai/anthropic.d.ts +3 -0
  8. package/dist/ai/anthropic.d.ts.map +1 -1
  9. package/dist/ai/anthropic.js +255 -2
  10. package/dist/ai/google.d.ts +3 -0
  11. package/dist/ai/google.d.ts.map +1 -1
  12. package/dist/ai/google.js +256 -2
  13. package/dist/ai/index.d.ts +1 -0
  14. package/dist/ai/index.d.ts.map +1 -1
  15. package/dist/ai/index.js +351 -7
  16. package/dist/ai/openai.d.ts +3 -0
  17. package/dist/ai/openai.d.ts.map +1 -1
  18. package/dist/ai/openai.js +257 -2
  19. package/dist/ai/trigger-tools.d.ts +206 -0
  20. package/dist/ai/trigger-tools.d.ts.map +1 -0
  21. package/dist/ai/trigger-tools.js +4198 -0
  22. package/dist/ai/vercel-ai.d.ts.map +1 -1
  23. package/dist/ai/vercel-ai.js +217 -0
  24. package/dist/index.js +359 -59
  25. package/dist/oauth.js +371 -71
  26. package/dist/server.js +372 -71
  27. package/dist/src/ai/anthropic.d.ts +3 -0
  28. package/dist/src/ai/anthropic.d.ts.map +1 -1
  29. package/dist/src/ai/google.d.ts +3 -0
  30. package/dist/src/ai/google.d.ts.map +1 -1
  31. package/dist/src/ai/index.d.ts +1 -0
  32. package/dist/src/ai/index.d.ts.map +1 -1
  33. package/dist/src/ai/openai.d.ts +3 -0
  34. package/dist/src/ai/openai.d.ts.map +1 -1
  35. package/dist/src/ai/trigger-tools.d.ts +206 -0
  36. package/dist/src/ai/trigger-tools.d.ts.map +1 -0
  37. package/dist/src/ai/vercel-ai.d.ts.map +1 -1
  38. package/dist/src/server.d.ts.map +1 -1
  39. package/package.json +1 -1
package/dist/server.js CHANGED
@@ -8194,6 +8194,230 @@ var init_utils = __esm(() => {
8194
8194
  init_zod();
8195
8195
  });
8196
8196
 
8197
+ // node_modules/nanoid/url-alphabet/index.js
8198
+ var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
8199
+ var init_url_alphabet = () => {};
8200
+
8201
+ // node_modules/nanoid/index.js
8202
+ import crypto2 from "crypto";
8203
+ var POOL_SIZE_MULTIPLIER = 128, pool, poolOffset, fillPool = (bytes) => {
8204
+ if (!pool || pool.length < bytes) {
8205
+ pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
8206
+ crypto2.randomFillSync(pool);
8207
+ poolOffset = 0;
8208
+ } else if (poolOffset + bytes > pool.length) {
8209
+ crypto2.randomFillSync(pool);
8210
+ poolOffset = 0;
8211
+ }
8212
+ poolOffset += bytes;
8213
+ }, nanoid = (size = 21) => {
8214
+ fillPool(size |= 0);
8215
+ let id = "";
8216
+ for (let i = poolOffset - size;i < poolOffset; i++) {
8217
+ id += urlAlphabet[pool[i] & 63];
8218
+ }
8219
+ return id;
8220
+ };
8221
+ var init_nanoid = __esm(() => {
8222
+ init_url_alphabet();
8223
+ });
8224
+
8225
+ // src/triggers/utils.ts
8226
+ var exports_utils = {};
8227
+ __export(exports_utils, {
8228
+ validateStatusTransition: () => validateStatusTransition,
8229
+ generateTriggerId: () => generateTriggerId,
8230
+ extractProviderFromToolName: () => extractProviderFromToolName,
8231
+ calculateHasMore: () => calculateHasMore
8232
+ });
8233
+ function generateTriggerId() {
8234
+ return `trig_${nanoid(12)}`;
8235
+ }
8236
+ function extractProviderFromToolName(toolName) {
8237
+ const parts = toolName.split("_");
8238
+ return parts[0] || toolName;
8239
+ }
8240
+ function validateStatusTransition(currentStatus, targetStatus) {
8241
+ if (targetStatus === "paused" && currentStatus !== "active") {
8242
+ return {
8243
+ valid: false,
8244
+ error: `Cannot pause trigger with status '${currentStatus}'. Only 'active' triggers can be paused.`
8245
+ };
8246
+ }
8247
+ if (targetStatus === "active" && currentStatus !== "paused") {
8248
+ return {
8249
+ valid: false,
8250
+ error: `Cannot resume trigger with status '${currentStatus}'. Only 'paused' triggers can be resumed.`
8251
+ };
8252
+ }
8253
+ return { valid: true };
8254
+ }
8255
+ function calculateHasMore(offset, returnedCount, total) {
8256
+ return offset + returnedCount < total;
8257
+ }
8258
+ var init_utils2 = __esm(() => {
8259
+ init_nanoid();
8260
+ });
8261
+
8262
+ // src/ai/trigger-tools.ts
8263
+ function createTriggerTools(config, context) {
8264
+ const { callbacks } = config;
8265
+ return {
8266
+ create_trigger: {
8267
+ description: "Schedule a tool to run at a specific time or on a recurring schedule. Use this when the user wants to do something later.",
8268
+ inputSchema: exports_external.object({
8269
+ name: exports_external.string().optional().describe("Human-readable trigger name"),
8270
+ description: exports_external.string().optional().describe("Trigger description"),
8271
+ toolName: exports_external.string().describe("MCP tool name to execute (e.g., gmail_send_email, github_create_issue)"),
8272
+ toolArguments: exports_external.record(exports_external.unknown()).describe("Arguments to pass to the tool when it executes"),
8273
+ schedule: exports_external.union([
8274
+ exports_external.object({
8275
+ type: exports_external.literal("once"),
8276
+ runAt: exports_external.string().describe("ISO datetime string (e.g., 2024-12-13T22:00:00Z)")
8277
+ }),
8278
+ exports_external.object({
8279
+ type: exports_external.literal("cron"),
8280
+ expression: exports_external.string().describe("Cron expression (e.g., '0 9 * * *' for daily at 9 AM)")
8281
+ })
8282
+ ]).describe("When to execute the tool")
8283
+ }),
8284
+ execute: async (args) => {
8285
+ const triggerId = generateTriggerId();
8286
+ const provider = extractProviderFromToolName(args.toolName);
8287
+ const now = new Date().toISOString();
8288
+ const trigger = {
8289
+ id: triggerId,
8290
+ ...args,
8291
+ provider,
8292
+ status: "active",
8293
+ createdAt: now,
8294
+ updatedAt: now,
8295
+ runCount: 0
8296
+ };
8297
+ return callbacks.create(trigger, context);
8298
+ }
8299
+ },
8300
+ list_triggers: {
8301
+ description: "List all scheduled triggers with optional filtering by status or tool name",
8302
+ inputSchema: exports_external.object({
8303
+ status: exports_external.enum(["active", "paused", "completed", "failed"]).optional().describe("Filter by trigger status"),
8304
+ toolName: exports_external.string().optional().describe("Filter by tool name"),
8305
+ limit: exports_external.number().optional().describe("Maximum number of results (default: 20)"),
8306
+ offset: exports_external.number().optional().describe("Number of results to skip for pagination (default: 0)")
8307
+ }),
8308
+ execute: async (args) => {
8309
+ const params = {
8310
+ status: args.status,
8311
+ toolName: args.toolName,
8312
+ limit: args.limit || 20,
8313
+ offset: args.offset || 0
8314
+ };
8315
+ const result = await callbacks.list(params, context);
8316
+ const hasMore = calculateHasMore(params.offset, result.triggers.length, result.total);
8317
+ return {
8318
+ triggers: result.triggers,
8319
+ total: result.total,
8320
+ hasMore
8321
+ };
8322
+ }
8323
+ },
8324
+ get_trigger: {
8325
+ description: "Get details of a specific trigger by its ID",
8326
+ inputSchema: exports_external.object({
8327
+ triggerId: exports_external.string().describe("The trigger ID to retrieve")
8328
+ }),
8329
+ execute: async (args) => {
8330
+ const trigger = await callbacks.get(args.triggerId, context);
8331
+ if (!trigger) {
8332
+ throw new Error(`Trigger ${args.triggerId} not found`);
8333
+ }
8334
+ return trigger;
8335
+ }
8336
+ },
8337
+ update_trigger: {
8338
+ description: "Update a trigger's properties like name, description, arguments, or schedule",
8339
+ inputSchema: exports_external.object({
8340
+ triggerId: exports_external.string().describe("The trigger ID to update"),
8341
+ name: exports_external.string().optional().describe("New trigger name"),
8342
+ description: exports_external.string().optional().describe("New trigger description"),
8343
+ toolArguments: exports_external.record(exports_external.unknown()).optional().describe("New tool arguments"),
8344
+ schedule: exports_external.union([
8345
+ exports_external.object({
8346
+ type: exports_external.literal("once"),
8347
+ runAt: exports_external.string().describe("ISO datetime string")
8348
+ }),
8349
+ exports_external.object({
8350
+ type: exports_external.literal("cron"),
8351
+ expression: exports_external.string().describe("Cron expression")
8352
+ })
8353
+ ]).optional().describe("New schedule")
8354
+ }),
8355
+ execute: async (args) => {
8356
+ const { triggerId, ...updates } = args;
8357
+ const updatesWithTimestamp = {
8358
+ ...updates,
8359
+ updatedAt: new Date().toISOString()
8360
+ };
8361
+ return callbacks.update(triggerId, updatesWithTimestamp, context);
8362
+ }
8363
+ },
8364
+ delete_trigger: {
8365
+ description: "Delete a trigger permanently. This cannot be undone.",
8366
+ inputSchema: exports_external.object({
8367
+ triggerId: exports_external.string().describe("The trigger ID to delete")
8368
+ }),
8369
+ execute: async (args) => {
8370
+ await callbacks.delete(args.triggerId, context);
8371
+ return { success: true, message: `Trigger ${args.triggerId} deleted` };
8372
+ }
8373
+ },
8374
+ pause_trigger: {
8375
+ description: "Pause a trigger to temporarily stop it from executing. Can be resumed later.",
8376
+ inputSchema: exports_external.object({
8377
+ triggerId: exports_external.string().describe("The trigger ID to pause")
8378
+ }),
8379
+ execute: async (args) => {
8380
+ const trigger = await callbacks.get(args.triggerId, context);
8381
+ if (!trigger) {
8382
+ throw new Error(`Trigger ${args.triggerId} not found`);
8383
+ }
8384
+ const validation = validateStatusTransition(trigger.status, "paused");
8385
+ if (!validation.valid) {
8386
+ throw new Error(validation.error);
8387
+ }
8388
+ return callbacks.update(args.triggerId, {
8389
+ status: "paused",
8390
+ updatedAt: new Date().toISOString()
8391
+ }, context);
8392
+ }
8393
+ },
8394
+ resume_trigger: {
8395
+ description: "Resume a paused trigger to start executing it again on schedule",
8396
+ inputSchema: exports_external.object({
8397
+ triggerId: exports_external.string().describe("The trigger ID to resume")
8398
+ }),
8399
+ execute: async (args) => {
8400
+ const trigger = await callbacks.get(args.triggerId, context);
8401
+ if (!trigger) {
8402
+ throw new Error(`Trigger ${args.triggerId} not found`);
8403
+ }
8404
+ const validation = validateStatusTransition(trigger.status, "active");
8405
+ if (!validation.valid) {
8406
+ throw new Error(validation.error);
8407
+ }
8408
+ return callbacks.update(args.triggerId, {
8409
+ status: "active",
8410
+ updatedAt: new Date().toISOString()
8411
+ }, context);
8412
+ }
8413
+ }
8414
+ };
8415
+ }
8416
+ var init_trigger_tools = __esm(() => {
8417
+ init_zod();
8418
+ init_utils2();
8419
+ });
8420
+
8197
8421
  // src/ai/vercel-ai.ts
8198
8422
  function convertMCPToolToVercelAI(mcpTool, client, options) {
8199
8423
  return {
@@ -8221,10 +8445,16 @@ async function getVercelAITools(client, options) {
8221
8445
  for (const mcpTool of mcpTools) {
8222
8446
  vercelTools[mcpTool.name] = convertMCPToolToVercelAI(mcpTool, client, finalOptions);
8223
8447
  }
8448
+ const triggerConfig = client.__triggerConfig;
8449
+ if (triggerConfig) {
8450
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8451
+ Object.assign(vercelTools, triggerTools);
8452
+ }
8224
8453
  return vercelTools;
8225
8454
  }
8226
8455
  var init_vercel_ai = __esm(() => {
8227
8456
  init_utils();
8457
+ init_trigger_tools();
8228
8458
  });
8229
8459
 
8230
8460
  // src/ai/openai.ts
@@ -8248,10 +8478,48 @@ async function getOpenAITools(client, options) {
8248
8478
  }
8249
8479
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8250
8480
  const mcpTools = client.getEnabledTools();
8251
- return mcpTools.map((mcpTool) => convertMCPToolToOpenAI(mcpTool, client, finalOptions));
8481
+ const openaiTools = mcpTools.map((mcpTool) => convertMCPToolToOpenAI(mcpTool, client, finalOptions));
8482
+ const triggerConfig = client.__triggerConfig;
8483
+ if (triggerConfig) {
8484
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8485
+ for (const [name, tool] of Object.entries(triggerTools)) {
8486
+ const zodSchema = tool.inputSchema;
8487
+ const jsonSchema = zodToJsonSchema(zodSchema);
8488
+ openaiTools.push({
8489
+ type: "function",
8490
+ name,
8491
+ parameters: jsonSchema,
8492
+ strict: options?.strict ?? null,
8493
+ description: tool.description || null
8494
+ });
8495
+ }
8496
+ }
8497
+ return openaiTools;
8498
+ }
8499
+ function zodToJsonSchema(schema) {
8500
+ if (schema._def?.typeName === "ZodObject") {
8501
+ const shape = schema._def.shape();
8502
+ const properties = {};
8503
+ const required = [];
8504
+ for (const [key, value] of Object.entries(shape)) {
8505
+ const fieldSchema = value;
8506
+ properties[key] = { type: "string" };
8507
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8508
+ required.push(key);
8509
+ }
8510
+ }
8511
+ return {
8512
+ type: "object",
8513
+ properties,
8514
+ ...required.length > 0 ? { required } : {}
8515
+ };
8516
+ }
8517
+ return { type: "object" };
8252
8518
  }
8253
8519
  async function handleOpenAIToolCalls(client, toolCalls, options) {
8254
8520
  const toolOutputs = [];
8521
+ const triggerConfig = client.__triggerConfig;
8522
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
8255
8523
  for (const output of toolCalls) {
8256
8524
  if (output.type === "function_call") {
8257
8525
  const toolCall = {
@@ -8261,7 +8529,12 @@ async function handleOpenAIToolCalls(client, toolCalls, options) {
8261
8529
  };
8262
8530
  try {
8263
8531
  const args = JSON.parse(toolCall.arguments);
8264
- const result = await executeToolWithToken(client, toolCall.name, args, options);
8532
+ let result;
8533
+ if (triggerTools && triggerTools[toolCall.name]) {
8534
+ result = await triggerTools[toolCall.name].execute(args);
8535
+ } else {
8536
+ result = await executeToolWithToken(client, toolCall.name, args, options);
8537
+ }
8265
8538
  const resultString = JSON.stringify(result);
8266
8539
  toolOutputs.push({
8267
8540
  call_id: output.call_id ?? output.id ?? "",
@@ -8297,6 +8570,7 @@ async function handleOpenAIResponse(client, response, options) {
8297
8570
  }
8298
8571
  var init_openai = __esm(() => {
8299
8572
  init_utils();
8573
+ init_trigger_tools();
8300
8574
  });
8301
8575
 
8302
8576
  // src/ai/anthropic.ts
@@ -8313,10 +8587,17 @@ function convertMCPToolToAnthropic(mcpTool, _client, _options) {
8313
8587
  }
8314
8588
  async function handleAnthropicToolCalls(client, messageContent, options) {
8315
8589
  const toolResults = [];
8590
+ const triggerConfig = client.__triggerConfig;
8591
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
8316
8592
  const toolUseBlocks = messageContent.filter((block) => block.type === "tool_use" && ("id" in block) && ("name" in block) && ("input" in block));
8317
8593
  for (const toolUse of toolUseBlocks) {
8318
8594
  try {
8319
- const result = await executeToolWithToken(client, toolUse.name, toolUse.input, options);
8595
+ let result;
8596
+ if (triggerTools && triggerTools[toolUse.name]) {
8597
+ result = await triggerTools[toolUse.name].execute(toolUse.input);
8598
+ } else {
8599
+ result = await executeToolWithToken(client, toolUse.name, toolUse.input, options);
8600
+ }
8320
8601
  const resultString = JSON.stringify(result);
8321
8602
  toolResults.push({
8322
8603
  type: "tool_result",
@@ -8345,7 +8626,41 @@ async function getAnthropicTools(client, options) {
8345
8626
  }
8346
8627
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8347
8628
  const mcpTools = client.getEnabledTools();
8348
- return mcpTools.map((mcpTool) => convertMCPToolToAnthropic(mcpTool, client, finalOptions));
8629
+ const anthropicTools = mcpTools.map((mcpTool) => convertMCPToolToAnthropic(mcpTool, client, finalOptions));
8630
+ const triggerConfig = client.__triggerConfig;
8631
+ if (triggerConfig) {
8632
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8633
+ for (const [name, tool] of Object.entries(triggerTools)) {
8634
+ const zodSchema = tool.inputSchema;
8635
+ const jsonSchema = zodToAnthropicSchema(zodSchema);
8636
+ anthropicTools.push({
8637
+ name,
8638
+ description: tool.description || `Execute ${name}`,
8639
+ input_schema: jsonSchema
8640
+ });
8641
+ }
8642
+ }
8643
+ return anthropicTools;
8644
+ }
8645
+ function zodToAnthropicSchema(schema) {
8646
+ if (schema._def?.typeName === "ZodObject") {
8647
+ const shape = schema._def.shape();
8648
+ const properties = {};
8649
+ const required = [];
8650
+ for (const [key, value] of Object.entries(shape)) {
8651
+ const fieldSchema = value;
8652
+ properties[key] = { type: "string" };
8653
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8654
+ required.push(key);
8655
+ }
8656
+ }
8657
+ return {
8658
+ type: "object",
8659
+ properties,
8660
+ ...required.length > 0 ? { required } : {}
8661
+ };
8662
+ }
8663
+ return { type: "object", properties: {}, required: [] };
8349
8664
  }
8350
8665
  async function handleAnthropicMessage(client, message, options) {
8351
8666
  let providerTokens = options?.providerTokens;
@@ -8372,6 +8687,7 @@ async function handleAnthropicMessage(client, message, options) {
8372
8687
  }
8373
8688
  var init_anthropic = __esm(() => {
8374
8689
  init_utils();
8690
+ init_trigger_tools();
8375
8691
  });
8376
8692
 
8377
8693
  // src/ai/google.ts
@@ -8454,12 +8770,19 @@ async function executeGoogleFunctionCalls(client, functionCalls, options) {
8454
8770
  } catch {}
8455
8771
  }
8456
8772
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8773
+ const triggerConfig = client.__triggerConfig;
8774
+ const triggerTools = triggerConfig ? createTriggerTools(triggerConfig, options?.context) : null;
8457
8775
  const results = await Promise.all(functionCalls.map(async (call) => {
8458
8776
  if (!call?.name) {
8459
8777
  throw new Error("Function call must have a name");
8460
8778
  }
8461
8779
  const args = call.args || {};
8462
- const result = await executeToolWithToken(client, call.name, args, finalOptions);
8780
+ let result;
8781
+ if (triggerTools && triggerTools[call.name]) {
8782
+ result = await triggerTools[call.name].execute(args);
8783
+ } else {
8784
+ result = await executeToolWithToken(client, call.name, args, finalOptions);
8785
+ }
8463
8786
  return JSON.stringify(result);
8464
8787
  }));
8465
8788
  return results;
@@ -8474,10 +8797,46 @@ async function getGoogleTools(client, options) {
8474
8797
  }
8475
8798
  const finalOptions = providerTokens ? { ...options, providerTokens } : options;
8476
8799
  const mcpTools = client.getEnabledTools();
8477
- return await Promise.all(mcpTools.map((mcpTool) => convertMCPToolToGoogle(mcpTool, client, finalOptions)));
8800
+ const googleTools = await Promise.all(mcpTools.map((mcpTool) => convertMCPToolToGoogle(mcpTool, client, finalOptions)));
8801
+ const triggerConfig = client.__triggerConfig;
8802
+ if (triggerConfig) {
8803
+ const triggerTools = createTriggerTools(triggerConfig, options?.context);
8804
+ const TypeEnum = await getGoogleType();
8805
+ for (const [name, tool] of Object.entries(triggerTools)) {
8806
+ const zodSchema = tool.inputSchema;
8807
+ const jsonSchema = zodToGoogleSchema(zodSchema, TypeEnum);
8808
+ googleTools.push({
8809
+ name,
8810
+ description: tool.description || `Execute ${name}`,
8811
+ parameters: jsonSchema
8812
+ });
8813
+ }
8814
+ }
8815
+ return googleTools;
8816
+ }
8817
+ function zodToGoogleSchema(schema, TypeEnum) {
8818
+ if (schema._def?.typeName === "ZodObject") {
8819
+ const shape = schema._def.shape();
8820
+ const properties = {};
8821
+ const required = [];
8822
+ for (const [key, value] of Object.entries(shape)) {
8823
+ const fieldSchema = value;
8824
+ properties[key] = { type: TypeEnum.STRING };
8825
+ if (fieldSchema._def?.typeName !== "ZodOptional") {
8826
+ required.push(key);
8827
+ }
8828
+ }
8829
+ return {
8830
+ type: TypeEnum.OBJECT,
8831
+ properties,
8832
+ ...required.length > 0 ? { required } : {}
8833
+ };
8834
+ }
8835
+ return { type: TypeEnum.OBJECT, properties: {} };
8478
8836
  }
8479
8837
  var init_google = __esm(() => {
8480
8838
  init_utils();
8839
+ init_trigger_tools();
8481
8840
  });
8482
8841
 
8483
8842
  // src/ai/index.ts
@@ -8486,71 +8845,7 @@ var init_ai = __esm(() => {
8486
8845
  init_openai();
8487
8846
  init_anthropic();
8488
8847
  init_google();
8489
- });
8490
-
8491
- // node_modules/nanoid/url-alphabet/index.js
8492
- var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
8493
- var init_url_alphabet = () => {};
8494
-
8495
- // node_modules/nanoid/index.js
8496
- import crypto2 from "crypto";
8497
- var POOL_SIZE_MULTIPLIER = 128, pool, poolOffset, fillPool = (bytes) => {
8498
- if (!pool || pool.length < bytes) {
8499
- pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
8500
- crypto2.randomFillSync(pool);
8501
- poolOffset = 0;
8502
- } else if (poolOffset + bytes > pool.length) {
8503
- crypto2.randomFillSync(pool);
8504
- poolOffset = 0;
8505
- }
8506
- poolOffset += bytes;
8507
- }, nanoid = (size = 21) => {
8508
- fillPool(size |= 0);
8509
- let id = "";
8510
- for (let i = poolOffset - size;i < poolOffset; i++) {
8511
- id += urlAlphabet[pool[i] & 63];
8512
- }
8513
- return id;
8514
- };
8515
- var init_nanoid = __esm(() => {
8516
- init_url_alphabet();
8517
- });
8518
-
8519
- // src/triggers/utils.ts
8520
- var exports_utils = {};
8521
- __export(exports_utils, {
8522
- validateStatusTransition: () => validateStatusTransition,
8523
- generateTriggerId: () => generateTriggerId,
8524
- extractProviderFromToolName: () => extractProviderFromToolName,
8525
- calculateHasMore: () => calculateHasMore
8526
- });
8527
- function generateTriggerId() {
8528
- return `trig_${nanoid(12)}`;
8529
- }
8530
- function extractProviderFromToolName(toolName) {
8531
- const parts = toolName.split("_");
8532
- return parts[0] || toolName;
8533
- }
8534
- function validateStatusTransition(currentStatus, targetStatus) {
8535
- if (targetStatus === "paused" && currentStatus !== "active") {
8536
- return {
8537
- valid: false,
8538
- error: `Cannot pause trigger with status '${currentStatus}'. Only 'active' triggers can be paused.`
8539
- };
8540
- }
8541
- if (targetStatus === "active" && currentStatus !== "paused") {
8542
- return {
8543
- valid: false,
8544
- error: `Cannot resume trigger with status '${currentStatus}'. Only 'paused' triggers can be resumed.`
8545
- };
8546
- }
8547
- return { valid: true };
8548
- }
8549
- function calculateHasMore(offset, returnedCount, total) {
8550
- return offset + returnedCount < total;
8551
- }
8552
- var init_utils2 = __esm(() => {
8553
- init_nanoid();
8848
+ init_trigger_tools();
8554
8849
  });
8555
8850
 
8556
8851
  // src/server.ts
@@ -8590,6 +8885,7 @@ __export(exports_server, {
8590
8885
  figmaIntegration: () => figmaIntegration,
8591
8886
  executeGoogleFunctionCalls: () => executeGoogleFunctionCalls,
8592
8887
  cursorIntegration: () => cursorIntegration,
8888
+ createTriggerTools: () => createTriggerTools,
8593
8889
  createSimpleIntegration: () => createSimpleIntegration,
8594
8890
  createMCPServer: () => createMCPServer,
8595
8891
  calcomIntegration: () => calcomIntegration,
@@ -8687,6 +8983,10 @@ function createMCPServer(config) {
8687
8983
  setProviderToken: config.setProviderToken,
8688
8984
  removeProviderToken: config.removeProviderToken
8689
8985
  };
8986
+ client.__triggerConfig = config.triggers ? {
8987
+ callbacks: config.triggers,
8988
+ getSessionContext: config.getSessionContext
8989
+ } : undefined;
8690
8990
  const { POST, GET } = createOAuthRouteHandlers({
8691
8991
  providers,
8692
8992
  serverUrl: config.serverUrl,
@@ -9512,6 +9812,7 @@ export {
9512
9812
  figmaIntegration,
9513
9813
  executeGoogleFunctionCalls,
9514
9814
  cursorIntegration,
9815
+ createTriggerTools,
9515
9816
  createTanStackOAuthHandler,
9516
9817
  createSimpleIntegration,
9517
9818
  createNextOAuthHandler,
@@ -4,6 +4,7 @@
4
4
  * Helper functions to convert MCP tools to Anthropic Claude API format
5
5
  */
6
6
  import type { MCPClient } from "../client.js";
7
+ import type { MCPContext } from "../config/types.js";
7
8
  import { type AIToolsOptions } from "./utils.js";
8
9
  import type Anthropic from "@anthropic-ai/sdk";
9
10
  /**
@@ -24,6 +25,8 @@ export interface AnthropicTool {
24
25
  * Options for converting MCP tools to Anthropic format
25
26
  */
26
27
  export interface AnthropicToolsOptions extends AIToolsOptions {
28
+ /** User context for multi-tenant token storage */
29
+ context?: MCPContext;
27
30
  }
28
31
  /**
29
32
  * Anthropic tool use block from message content
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;CAAI;AAEjE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAgHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAgB1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpG,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAkC5I"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpG,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAkC5I"}
@@ -4,6 +4,7 @@
4
4
  * Helper functions to convert MCP tools to Google GenAI format
5
5
  */
6
6
  import type { MCPClient } from "../client.js";
7
+ import type { MCPContext } from "../config/types.js";
7
8
  import { type AIToolsOptions } from "./utils.js";
8
9
  import type { Schema, FunctionDeclaration, FunctionCall, Type } from "@google/genai";
9
10
  export type GoogleTool = FunctionDeclaration;
@@ -13,6 +14,8 @@ export type { Schema, Type };
13
14
  * Options for converting MCP tools to Google GenAI format
14
15
  */
15
16
  export interface GoogleToolsOptions extends AIToolsOptions {
17
+ /** User context for multi-tenant token storage */
18
+ context?: MCPContext;
16
19
  }
17
20
  /**
18
21
  * Execute multiple function calls from Google GenAI response
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/ai/google.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjH,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACL,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAC9C,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAuB7B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;CAAI;AAsG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,aAAa,EAAE,kBAAkB,EAAE,GAAG,SAAS,GAAG,IAAI,EACtD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAqCnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAkBvB"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/ai/google.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjH,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACL,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAC9C,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAuB7B;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAsGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,aAAa,EAAE,kBAAkB,EAAE,GAAG,SAAS,GAAG,IAAI,EACtD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CA2CnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAwCvB"}
@@ -7,5 +7,6 @@ export { getVercelAITools, type VercelAITool, type VercelAIToolsOptions } from "
7
7
  export { getOpenAITools, handleOpenAIResponse, type OpenAITool, type OpenAIToolsOptions } from "./openai.js";
8
8
  export { getAnthropicTools, handleAnthropicMessage, type AnthropicTool, type AnthropicToolsOptions, type AnthropicToolUseBlock, type AnthropicToolResultBlock } from "./anthropic.js";
9
9
  export { getGoogleTools, executeGoogleFunctionCalls, type GoogleTool, type GoogleFunctionCall, type GoogleToolsOptions } from "./google.js";
10
+ export { createTriggerTools, type TriggerToolsConfig } from "./trigger-tools.js";
10
11
  export type { AIToolsOptions } from "./utils.js";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -4,6 +4,7 @@
4
4
  * Helper functions to convert MCP tools to OpenAI Responses API format
5
5
  */
6
6
  import type { MCPClient } from "../client.js";
7
+ import type { MCPContext } from "../config/types.js";
7
8
  import { type AIToolsOptions } from "./utils.js";
8
9
  import type { OpenAI } from "openai";
9
10
  /**
@@ -28,6 +29,8 @@ export interface OpenAIToolsOptions extends AIToolsOptions {
28
29
  * @default false
29
30
  */
30
31
  strict?: boolean;
32
+ /** User context for multi-tenant token storage */
33
+ context?: MCPContext;
31
34
  }
32
35
  /**
33
36
  * Get tools in a format compatible with OpenAI Responses API
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB;AA4ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAkE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAuCvB;AAsHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyB3H"}