CtrlK
BlogDocsLog inGet started
Tessl Logo

adobe/commerce-app-management

Skills for Adobe Commerce App Management — scaffold and configure Commerce apps using the aio-commerce-sdk.

74

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

webhooks-config.tsskills/commerce-app-webhooks/assets/

import { defineConfig } from "@adobe/aio-commerce-lib-app/config";

export default defineConfig({
  metadata: {
    description: "A Commerce app built with aio-commerce-sdk.", // max 255 chars
    displayName: "My Commerce App", // shown in App Management UI, max 50 chars
    id: "my-commerce-app", // alphanumeric + hyphens only, max 100 chars
    version: "1.0.0", // Major.Minor.Patch only, no pre-release identifiers
  },
  webhooks: [
    // Entry type 1: handler is a runtime action in this app
    {
      category: "validation", // optional: "validation" | "append" | "modification"
      description: "Validates product data before saving.", // required, non-empty
      label: "Validate Product Save", // required, non-empty
      // env: ["paas"],                  // optional: scope to Commerce environments ("paas" | "saas"); omitted = all
      runtimeAction: "my-package/validate-product", // <package>/<action>; mutually exclusive with webhook.url
      webhook: {
        batch_name: "my_app", // [a-zA-Z0-9_]+ only — no hyphens or dots
        hook_name: "validate_product_save", // [a-zA-Z0-9_]+ only — no hyphens or dots
        method: "POST", // "POST", "PUT", "DELETE", or "GET"
        webhook_method: "plugin.magento.catalog_product.save", // Commerce operation to intercept
        webhook_type: "before", // "before" or "after"
        // timeout: 5000,                  // optional: max ms to wait (positive integer)
        // soft_timeout: 3000,             // optional: soft limit before warning
        // required: true,                 // optional: if true, Commerce aborts if hook fails
        // priority: 100,                  // optional: execution order within batch
        // fields: [{ name: "sku" }, { name: "price" }], // optional: restrict payload fields
        // rules: [{ field: "type_id", operator: "equal", value: "simple" }], // optional: conditional trigger
        // headers: [{ name: "X-Api-Key", value: "secret" }], // optional: custom headers
      },
    },
    // Entry type 2: handler is an external URL
    {
      category: "append", // optional: "validation" | "append" | "modification"
      description: "Appends tax calculation from external service.", // required, non-empty
      label: "Append Tax Data", // required, non-empty
      webhook: {
        batch_name: "my_app",
        hook_name: "append_tax",
        method: "POST",
        url: "https://tax-service.example.com/webhook", // must be absolute URL; mutually exclusive with runtimeAction
        webhook_method: "plugin.magento.sales_order.place",
        webhook_type: "before",
      },
    },
  ],
});

skills

commerce-app-webhooks

README.md

tile.json