# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

# Example: Basic Hello World action with API
packages:
  hello_world_package:
    version: 1.0
    license: Apache-2.0
    actions:
      hello_basic:
        function: src/hello.js
      hello_goodday:
        function: src/hello_goodday.js
    sequences:
      hello_world:
        actions: hello_basic, hello_goodday
        web: true
    apis:
      hello-world:
        hello:
          world:
            hello_world: GET
