lua-cli 3.13.0 → 3.14.1
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/README.md +14 -13
- package/dist/api/agent.api.service.d.ts +20 -20
- package/dist/api/agent.api.service.d.ts.map +1 -1
- package/dist/api/agent.api.service.js +1 -1
- package/dist/api/agent.api.service.js.map +1 -1
- package/dist/api/agents.api.service.d.ts +3 -3
- package/dist/api/agents.api.service.d.ts.map +1 -1
- package/dist/api/agents.api.service.js +11 -9
- package/dist/api/agents.api.service.js.map +1 -1
- package/dist/api/ai.api.service.d.ts +4 -4
- package/dist/api/ai.api.service.d.ts.map +1 -1
- package/dist/api/ai.api.service.js +10 -8
- package/dist/api/ai.api.service.js.map +1 -1
- package/dist/api/auth.api.service.d.ts +3 -3
- package/dist/api/auth.api.service.d.ts.map +1 -1
- package/dist/api/auth.api.service.js +1 -1
- package/dist/api/auth.api.service.js.map +1 -1
- package/dist/api/backup.api.service.d.ts.map +1 -1
- package/dist/api/backup.api.service.js +21 -7
- package/dist/api/backup.api.service.js.map +1 -1
- package/dist/api/basket.api.service.d.ts +5 -5
- package/dist/api/basket.api.service.d.ts.map +1 -1
- package/dist/api/basket.api.service.js +4 -4
- package/dist/api/basket.api.service.js.map +1 -1
- package/dist/api/cdn.api.service.d.ts +1 -1
- package/dist/api/cdn.api.service.js +3 -3
- package/dist/api/cdn.api.service.js.map +1 -1
- package/dist/api/chat.api.service.d.ts +4 -4
- package/dist/api/chat.api.service.js +3 -3
- package/dist/api/chat.api.service.js.map +1 -1
- package/dist/api/credentials.js +3 -3
- package/dist/api/custom.data.api.service.d.ts +4 -4
- package/dist/api/custom.data.api.service.d.ts.map +1 -1
- package/dist/api/custom.data.api.service.js +2 -2
- package/dist/api/custom.data.api.service.js.map +1 -1
- package/dist/api/developer.api.service.d.ts +3 -3
- package/dist/api/developer.api.service.d.ts.map +1 -1
- package/dist/api/developer.api.service.js +7 -3
- package/dist/api/developer.api.service.js.map +1 -1
- package/dist/api/device-trigger.api.service.d.ts +3 -3
- package/dist/api/device-trigger.api.service.d.ts.map +1 -1
- package/dist/api/device-trigger.api.service.js +1 -1
- package/dist/api/device-trigger.api.service.js.map +1 -1
- package/dist/api/device.api.service.d.ts +3 -3
- package/dist/api/device.api.service.d.ts.map +1 -1
- package/dist/api/device.api.service.js +1 -1
- package/dist/api/device.api.service.js.map +1 -1
- package/dist/api/http.client.d.ts +1 -1
- package/dist/api/http.client.d.ts.map +1 -1
- package/dist/api/http.client.js +6 -6
- package/dist/api/http.client.js.map +1 -1
- package/dist/api/job.api.service.d.ts +13 -14
- package/dist/api/job.api.service.d.ts.map +1 -1
- package/dist/api/job.api.service.js +12 -20
- package/dist/api/job.api.service.js.map +1 -1
- package/dist/api/lazy-instances.d.ts +12 -12
- package/dist/api/lazy-instances.js +14 -14
- package/dist/api/logs.api.service.d.ts +5 -5
- package/dist/api/logs.api.service.d.ts.map +1 -1
- package/dist/api/logs.api.service.js +9 -9
- package/dist/api/logs.api.service.js.map +1 -1
- package/dist/api/marketplace.api.service.d.ts +1 -1
- package/dist/api/marketplace.api.service.d.ts.map +1 -1
- package/dist/api/marketplace.api.service.js +18 -18
- package/dist/api/marketplace.api.service.js.map +1 -1
- package/dist/api/order.api.service.d.ts +4 -4
- package/dist/api/order.api.service.d.ts.map +1 -1
- package/dist/api/order.api.service.js +2 -2
- package/dist/api/order.api.service.js.map +1 -1
- package/dist/api/persona.api.service.d.ts +3 -3
- package/dist/api/persona.api.service.d.ts.map +1 -1
- package/dist/api/persona.api.service.js +2 -2
- package/dist/api/persona.api.service.js.map +1 -1
- package/dist/api/postprocessor.api.service.d.ts +8 -9
- package/dist/api/postprocessor.api.service.d.ts.map +1 -1
- package/dist/api/postprocessor.api.service.js +1 -2
- package/dist/api/postprocessor.api.service.js.map +1 -1
- package/dist/api/preprocessor.api.service.d.ts +8 -9
- package/dist/api/preprocessor.api.service.d.ts.map +1 -1
- package/dist/api/preprocessor.api.service.js +1 -2
- package/dist/api/preprocessor.api.service.js.map +1 -1
- package/dist/api/products.api.service.d.ts +9 -9
- package/dist/api/products.api.service.d.ts.map +1 -1
- package/dist/api/products.api.service.js +10 -10
- package/dist/api/products.api.service.js.map +1 -1
- package/dist/api/resource.api.service.d.ts +2 -2
- package/dist/api/resource.api.service.js +1 -1
- package/dist/api/skills.api.service.d.ts +4 -4
- package/dist/api/skills.api.service.d.ts.map +1 -1
- package/dist/api/skills.api.service.js +1 -1
- package/dist/api/skills.api.service.js.map +1 -1
- package/dist/api/tool.api.service.d.ts +2 -2
- package/dist/api/tool.api.service.js +1 -1
- package/dist/api/unifiedto.api.service.d.ts +3 -3
- package/dist/api/unifiedto.api.service.d.ts.map +1 -1
- package/dist/api/unifiedto.api.service.js +28 -10
- package/dist/api/unifiedto.api.service.js.map +1 -1
- package/dist/api/user.data.api.service.d.ts +6 -6
- package/dist/api/user.data.api.service.d.ts.map +1 -1
- package/dist/api/user.data.api.service.js +5 -5
- package/dist/api/user.data.api.service.js.map +1 -1
- package/dist/api/webhook.api.service.d.ts +3 -3
- package/dist/api/webhook.api.service.d.ts.map +1 -1
- package/dist/api/webhook.api.service.js +1 -1
- package/dist/api/webhook.api.service.js.map +1 -1
- package/dist/api/whatsapp-templates.api.service.d.ts +3 -3
- package/dist/api/whatsapp-templates.api.service.js +1 -1
- package/dist/api-exports.d.ts +25 -25
- package/dist/api-exports.d.ts.map +1 -1
- package/dist/api-exports.js +26 -26
- package/dist/api-exports.js.map +1 -1
- package/dist/cli/command-definitions.d.ts +1 -1
- package/dist/cli/command-definitions.d.ts.map +1 -1
- package/dist/cli/command-definitions.js +190 -199
- package/dist/cli/command-definitions.js.map +1 -1
- package/dist/commands/agents.js +2 -2
- package/dist/commands/apiKey.js +12 -12
- package/dist/commands/channels.js +163 -163
- package/dist/commands/channels.js.map +1 -1
- package/dist/commands/chat-log-probe.d.ts.map +1 -1
- package/dist/commands/chat-log-probe.js +2 -6
- package/dist/commands/chat-log-probe.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +33 -33
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/chatClear.d.ts.map +1 -1
- package/dist/commands/chatClear.js +10 -6
- package/dist/commands/chatClear.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +18 -11
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/configure.js +5 -5
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +27 -15
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +27 -17
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/devices.js +1 -3
- package/dist/commands/devices.js.map +1 -1
- package/dist/commands/env.js +58 -60
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/features.js +69 -70
- package/dist/commands/features.js.map +1 -1
- package/dist/commands/governance.d.ts.map +1 -1
- package/dist/commands/governance.js +13 -7
- package/dist/commands/governance.js.map +1 -1
- package/dist/commands/index.d.ts +37 -37
- package/dist/commands/index.js +37 -37
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +69 -69
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrations.d.ts.map +1 -1
- package/dist/commands/integrations.js +369 -339
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +56 -62
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/log-tip.d.ts.map +1 -1
- package/dist/commands/log-tip.js +2 -10
- package/dist/commands/log-tip.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +80 -73
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/marketplace.d.ts.map +1 -1
- package/dist/commands/marketplace.js +368 -403
- package/dist/commands/marketplace.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +38 -38
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -2
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/persona.js +96 -96
- package/dist/commands/persona.js.map +1 -1
- package/dist/commands/postprocessors.js +44 -44
- package/dist/commands/postprocessors.js.map +1 -1
- package/dist/commands/preprocessors.js +44 -44
- package/dist/commands/preprocessors.js.map +1 -1
- package/dist/commands/production.js +99 -101
- package/dist/commands/production.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +130 -81
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/pushBackup.d.ts.map +1 -1
- package/dist/commands/pushBackup.js +4 -6
- package/dist/commands/pushBackup.js.map +1 -1
- package/dist/commands/resources.js +45 -48
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +68 -55
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +11 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +34 -29
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/test-output.helpers.js +1 -1
- package/dist/commands/test-output.helpers.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +81 -71
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +15 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +60 -66
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/compiler/agent-traverser.d.ts.map +1 -1
- package/dist/compiler/agent-traverser.js +2 -4
- package/dist/compiler/agent-traverser.js.map +1 -1
- package/dist/compiler/bundler.d.ts.map +1 -1
- package/dist/compiler/bundler.js +5 -5
- package/dist/compiler/bundler.js.map +1 -1
- package/dist/compiler/compiler.d.ts.map +1 -1
- package/dist/compiler/compiler.js +12 -11
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/index.d.ts +2 -2
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +2 -2
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/plugins/agent.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/agent.plugin.js +2 -4
- package/dist/compiler/plugins/agent.plugin.js.map +1 -1
- package/dist/compiler/plugins/base.d.ts.map +1 -1
- package/dist/compiler/plugins/base.js +3 -3
- package/dist/compiler/plugins/base.js.map +1 -1
- package/dist/compiler/plugins/device-trigger.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/device-trigger.plugin.js +8 -4
- package/dist/compiler/plugins/device-trigger.plugin.js.map +1 -1
- package/dist/compiler/plugins/device.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/device.plugin.js +4 -4
- package/dist/compiler/plugins/device.plugin.js.map +1 -1
- package/dist/compiler/plugins/job.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/job.plugin.js +15 -11
- package/dist/compiler/plugins/job.plugin.js.map +1 -1
- package/dist/compiler/plugins/mcp-server.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/mcp-server.plugin.js +10 -4
- package/dist/compiler/plugins/mcp-server.plugin.js.map +1 -1
- package/dist/compiler/plugins/registry.js +2 -2
- package/dist/compiler/plugins/registry.js.map +1 -1
- package/dist/compiler/plugins/skill.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/skill.plugin.js +8 -13
- package/dist/compiler/plugins/skill.plugin.js.map +1 -1
- package/dist/compiler/plugins/tool.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/tool.plugin.js +13 -9
- package/dist/compiler/plugins/tool.plugin.js.map +1 -1
- package/dist/compiler/plugins/webhook.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/webhook.plugin.js +7 -5
- package/dist/compiler/plugins/webhook.plugin.js.map +1 -1
- package/dist/compiler/source-writer.d.ts.map +1 -1
- package/dist/compiler/source-writer.js +2 -4
- package/dist/compiler/source-writer.js.map +1 -1
- package/dist/compiler/utils/ast-helpers.d.ts.map +1 -1
- package/dist/compiler/utils/ast-helpers.js +12 -7
- package/dist/compiler/utils/ast-helpers.js.map +1 -1
- package/dist/compiler/utils/common.d.ts.map +1 -1
- package/dist/compiler/utils/common.js +1 -11
- package/dist/compiler/utils/common.js.map +1 -1
- package/dist/compiler/utils/file-discovery.d.ts.map +1 -1
- package/dist/compiler/utils/file-discovery.js +2 -10
- package/dist/compiler/utils/file-discovery.js.map +1 -1
- package/dist/compiler/utils/path-resolver.d.ts.map +1 -1
- package/dist/compiler/utils/path-resolver.js.map +1 -1
- package/dist/compiler/utils/reference-resolver.d.ts.map +1 -1
- package/dist/compiler/utils/reference-resolver.js +4 -8
- package/dist/compiler/utils/reference-resolver.js.map +1 -1
- package/dist/compiler/utils/schema-converter.d.ts.map +1 -1
- package/dist/compiler/utils/schema-converter.js +1 -4
- package/dist/compiler/utils/schema-converter.js.map +1 -1
- package/dist/config/compile.constants.d.ts.map +1 -1
- package/dist/config/compile.constants.js +3 -1
- package/dist/config/compile.constants.js.map +1 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +1 -5
- package/dist/config/constants.js.map +1 -1
- package/dist/errors/auth.error.d.ts.map +1 -1
- package/dist/errors/auth.error.js +3 -5
- package/dist/errors/auth.error.js.map +1 -1
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/instances/basket.instance.d.ts +3 -3
- package/dist/instances/basket.instance.d.ts.map +1 -1
- package/dist/instances/basket.instance.js +26 -8
- package/dist/instances/basket.instance.js.map +1 -1
- package/dist/instances/data.entry.instance.d.ts +2 -2
- package/dist/instances/data.entry.instance.d.ts.map +1 -1
- package/dist/instances/data.entry.instance.js +5 -5
- package/dist/instances/data.entry.instance.js.map +1 -1
- package/dist/instances/order.instance.d.ts +2 -2
- package/dist/instances/order.instance.d.ts.map +1 -1
- package/dist/instances/order.instance.js +20 -9
- package/dist/instances/order.instance.js.map +1 -1
- package/dist/instances/product.instance.d.ts +1 -1
- package/dist/instances/product.instance.d.ts.map +1 -1
- package/dist/instances/product.instance.js +3 -3
- package/dist/instances/product.instance.js.map +1 -1
- package/dist/instances/product.pagination.instance.d.ts +2 -2
- package/dist/instances/product.pagination.instance.d.ts.map +1 -1
- package/dist/instances/product.pagination.instance.js +6 -7
- package/dist/instances/product.pagination.instance.js.map +1 -1
- package/dist/instances/product.search.instance.d.ts +3 -3
- package/dist/instances/product.search.instance.d.ts.map +1 -1
- package/dist/instances/product.search.instance.js +3 -4
- package/dist/instances/product.search.instance.js.map +1 -1
- package/dist/instances/user.instance.d.ts +3 -3
- package/dist/instances/user.instance.d.ts.map +1 -1
- package/dist/instances/user.instance.js +19 -36
- package/dist/instances/user.instance.js.map +1 -1
- package/dist/interfaces/agent.d.ts +8 -8
- package/dist/interfaces/agent.d.ts.map +1 -1
- package/dist/interfaces/device-triggers.d.ts +0 -2
- package/dist/interfaces/device-triggers.d.ts.map +1 -1
- package/dist/interfaces/devices.d.ts +0 -1
- package/dist/interfaces/devices.d.ts.map +1 -1
- package/dist/interfaces/index.d.ts +8 -8
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/jobs.d.ts +2 -3
- package/dist/interfaces/jobs.d.ts.map +1 -1
- package/dist/interfaces/message.d.ts +3 -3
- package/dist/interfaces/message.d.ts.map +1 -1
- package/dist/interfaces/orders.d.ts +1 -1
- package/dist/interfaces/skills.d.ts +18 -0
- package/dist/interfaces/skills.d.ts.map +1 -1
- package/dist/interfaces/webhooks.d.ts +2 -2
- package/dist/interfaces/webhooks.d.ts.map +1 -1
- package/dist/primitives/agent.handler.d.ts.map +1 -1
- package/dist/primitives/agent.handler.js +1 -1
- package/dist/primitives/agent.handler.js.map +1 -1
- package/dist/primitives/base.handler.d.ts +2 -2
- package/dist/primitives/base.handler.d.ts.map +1 -1
- package/dist/primitives/base.handler.js +38 -36
- package/dist/primitives/base.handler.js.map +1 -1
- package/dist/primitives/device-trigger.handler.d.ts +1 -1
- package/dist/primitives/device-trigger.handler.d.ts.map +1 -1
- package/dist/primitives/device-trigger.handler.js +2 -3
- package/dist/primitives/device-trigger.handler.js.map +1 -1
- package/dist/primitives/device.handler.d.ts +1 -1
- package/dist/primitives/device.handler.d.ts.map +1 -1
- package/dist/primitives/device.handler.js +2 -3
- package/dist/primitives/device.handler.js.map +1 -1
- package/dist/primitives/index.d.ts +1 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +2 -3
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/job.handler.d.ts +1 -1
- package/dist/primitives/job.handler.d.ts.map +1 -1
- package/dist/primitives/job.handler.js +3 -6
- package/dist/primitives/job.handler.js.map +1 -1
- package/dist/primitives/mcp-server.handler.d.ts.map +1 -1
- package/dist/primitives/mcp-server.handler.js +2 -2
- package/dist/primitives/mcp-server.handler.js.map +1 -1
- package/dist/primitives/postprocessor.handler.d.ts.map +1 -1
- package/dist/primitives/postprocessor.handler.js.map +1 -1
- package/dist/primitives/preprocessor.handler.d.ts +1 -1
- package/dist/primitives/preprocessor.handler.d.ts.map +1 -1
- package/dist/primitives/preprocessor.handler.js +2 -3
- package/dist/primitives/preprocessor.handler.js.map +1 -1
- package/dist/primitives/skill.handler.d.ts +1 -1
- package/dist/primitives/skill.handler.d.ts.map +1 -1
- package/dist/primitives/skill.handler.js +72 -22
- package/dist/primitives/skill.handler.js.map +1 -1
- package/dist/primitives/types.d.ts +1 -1
- package/dist/primitives/types.d.ts.map +1 -1
- package/dist/primitives/types.js.map +1 -1
- package/dist/primitives/webhook.handler.d.ts +1 -1
- package/dist/primitives/webhook.handler.d.ts.map +1 -1
- package/dist/primitives/webhook.handler.js +2 -3
- package/dist/primitives/webhook.handler.js.map +1 -1
- package/dist/services/analytics.d.ts.map +1 -1
- package/dist/services/analytics.js +4 -5
- package/dist/services/analytics.js.map +1 -1
- package/dist/services/auth.d.ts +1 -1
- package/dist/services/auth.js +7 -7
- package/dist/services/auth.js.map +1 -1
- package/dist/services/sandbox.service.d.ts.map +1 -1
- package/dist/services/sandbox.service.js +126 -78
- package/dist/services/sandbox.service.js.map +1 -1
- package/dist/types/api-contracts.d.ts +4 -4
- package/dist/types/api-contracts.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/skill.d.ts +7 -7
- package/dist/types/skill.d.ts.map +1 -1
- package/dist/types/skill.js +2 -2
- package/dist/types/skill.js.map +1 -1
- package/dist/types/tool-validation.js.map +1 -1
- package/dist/types/yaml.types.js +0 -1
- package/dist/types/yaml.types.js.map +1 -1
- package/dist/utils/aliases.d.ts.map +1 -1
- package/dist/utils/aliases.js +38 -3
- package/dist/utils/aliases.js.map +1 -1
- package/dist/utils/artifact-loader.d.ts +47 -0
- package/dist/utils/artifact-loader.d.ts.map +1 -1
- package/dist/utils/artifact-loader.js +98 -6
- package/dist/utils/artifact-loader.js.map +1 -1
- package/dist/utils/auth-flows.d.ts.map +1 -1
- package/dist/utils/auth-flows.js +54 -54
- package/dist/utils/auth-flows.js.map +1 -1
- package/dist/utils/backup-helpers.d.ts.map +1 -1
- package/dist/utils/backup-helpers.js +10 -16
- package/dist/utils/backup-helpers.js.map +1 -1
- package/dist/utils/bundle-upload.d.ts +42 -0
- package/dist/utils/bundle-upload.d.ts.map +1 -0
- package/dist/utils/bundle-upload.js +90 -0
- package/dist/utils/bundle-upload.js.map +1 -0
- package/dist/utils/chat-attachments.js +1 -1
- package/dist/utils/chat-attachments.js.map +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +3 -5
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +4 -4
- package/dist/utils/command-utils.js.map +1 -1
- package/dist/utils/deploy-helpers.d.ts.map +1 -1
- package/dist/utils/deploy-helpers.js +13 -13
- package/dist/utils/deploy-helpers.js.map +1 -1
- package/dist/utils/env-loader.utils.d.ts +1 -1
- package/dist/utils/env-loader.utils.d.ts.map +1 -1
- package/dist/utils/env-loader.utils.js +15 -22
- package/dist/utils/env-loader.utils.js.map +1 -1
- package/dist/utils/files.d.ts.map +1 -1
- package/dist/utils/files.js +23 -13
- package/dist/utils/files.js.map +1 -1
- package/dist/utils/hints.d.ts.map +1 -1
- package/dist/utils/hints.js +3 -5
- package/dist/utils/hints.js.map +1 -1
- package/dist/utils/init-agent.d.ts.map +1 -1
- package/dist/utils/init-agent.js +18 -20
- package/dist/utils/init-agent.js.map +1 -1
- package/dist/utils/init-helpers.d.ts.map +1 -1
- package/dist/utils/init-helpers.js +11 -11
- package/dist/utils/init-helpers.js.map +1 -1
- package/dist/utils/init-prompts.d.ts.map +1 -1
- package/dist/utils/init-prompts.js +34 -36
- package/dist/utils/init-prompts.js.map +1 -1
- package/dist/utils/prompt-handler.js +1 -1
- package/dist/utils/prompt-handler.js.map +1 -1
- package/dist/utils/sandbox-storage.d.ts.map +1 -1
- package/dist/utils/sandbox-storage.js.map +1 -1
- package/dist/utils/sandbox.d.ts +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/sandbox.js +107 -106
- package/dist/utils/sandbox.js.map +1 -1
- package/dist/utils/semver.js +1 -1
- package/dist/utils/semver.js.map +1 -1
- package/dist/utils/suggest.d.ts.map +1 -1
- package/dist/utils/suggest.js +1 -3
- package/dist/utils/suggest.js.map +1 -1
- package/dist/utils/sync-display.d.ts.map +1 -1
- package/dist/utils/sync-display.js +15 -13
- package/dist/utils/sync-display.js.map +1 -1
- package/dist/utils/sync-fetch.d.ts.map +1 -1
- package/dist/utils/sync-fetch.js +33 -24
- package/dist/utils/sync-fetch.js.map +1 -1
- package/dist/utils/version-check.js +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/README.md +1 -1
- package/node_modules/@lua/shared-types/dist/index.d.mts +13 -1
- package/node_modules/@lua/shared-types/dist/index.d.ts +13 -1
- package/node_modules/@lua/shared-types/src/ai-generate.types.ts +1 -6
- package/node_modules/@lua/shared-types/src/ai-generate.utils.ts +1 -4
- package/node_modules/@lua/shared-types/src/chat-stream.types.ts +11 -0
- package/node_modules/@lua/shared-types/src/device.types.ts +6 -6
- package/node_modules/@lua/shared-types/src/index.ts +1 -0
- package/node_modules/@lua/shared-types/src/sandbox-contract.ts +26 -5
- package/node_modules/@lua/shared-types/src/vm-execution-log.types.ts +11 -11
- package/package.json +1 -1
- package/template/QUICKSTART.md +33 -33
- package/template/README.md +35 -34
- package/template/examples/README.md +44 -38
- package/template/examples/jobs/AbandonedBasketProcessorJob.ts +30 -31
- package/template/examples/jobs/DailyCleanupJob.ts +17 -18
- package/template/examples/jobs/DataMigrationJob.ts +18 -23
- package/template/examples/jobs/HealthCheckJob.ts +13 -14
- package/template/examples/postprocessors/modifyResponse.ts +14 -15
- package/template/examples/preprocessors/messageMatching.ts +28 -29
- package/template/examples/services/ApiService.ts +68 -64
- package/template/examples/services/GetWeather.ts +39 -33
- package/template/examples/skills/basket.skill.ts +27 -7
- package/template/examples/skills/product.skill.ts +21 -8
- package/template/examples/skills/tools/BasketTool.ts +97 -98
- package/template/examples/skills/tools/CreateInlineJob.ts +38 -36
- package/template/examples/skills/tools/CreatePostTool.ts +27 -28
- package/template/examples/skills/tools/CustomDataTool.ts +72 -63
- package/template/examples/skills/tools/GameScoreTrackerTool.ts +72 -78
- package/template/examples/skills/tools/GetWeatherTool.ts +43 -45
- package/template/examples/skills/tools/OrderTool.ts +58 -58
- package/template/examples/skills/tools/PaymentTool.ts +43 -43
- package/template/examples/skills/tools/PremiumFeatureTool.ts +79 -77
- package/template/examples/skills/tools/ProductsTool.ts +68 -69
- package/template/examples/skills/tools/SmartBasketTool.ts +43 -44
- package/template/examples/skills/tools/UserDataTool.ts +97 -98
- package/template/examples/skills/user.skill.ts +7 -8
- package/template/examples/webhooks/FileUploadWebhook.ts +38 -31
- package/template/examples/webhooks/PaymentWebhook.ts +23 -22
- package/template/examples/webhooks/UserEventWebhook.ts +16 -19
- package/template/lua.skill.yaml +2 -2
- package/template/package.json +1 -1
- package/template/src/index.ts +28 -28
|
@@ -5,74 +5,80 @@ This folder contains example implementations of all Lua AI Agent features. Use t
|
|
|
5
5
|
## 📁 What's Inside
|
|
6
6
|
|
|
7
7
|
### skills/
|
|
8
|
+
|
|
8
9
|
Example skills and tools demonstrating platform APIs:
|
|
9
10
|
|
|
10
|
-
| File
|
|
11
|
-
|
|
12
|
-
| `tools/GetWeatherTool.ts`
|
|
13
|
-
| `tools/UserDataTool.ts`
|
|
14
|
-
| `tools/ProductsTool.ts`
|
|
15
|
-
| `tools/BasketTool.ts`
|
|
16
|
-
| `tools/OrderTool.ts`
|
|
17
|
-
| `tools/CustomDataTool.ts`
|
|
18
|
-
| `tools/PaymentTool.ts`
|
|
19
|
-
| `tools/SmartBasketTool.ts`
|
|
20
|
-
| `tools/GameScoreTrackerTool.ts` | Jobs API - interval jobs, deactivation, getAll
|
|
11
|
+
| File | What it shows |
|
|
12
|
+
| ------------------------------- | ------------------------------------------------------------ |
|
|
13
|
+
| `tools/GetWeatherTool.ts` | External API integration |
|
|
14
|
+
| `tools/UserDataTool.ts` | User API - get/update user data, chat history, AI generation |
|
|
15
|
+
| `tools/ProductsTool.ts` | Products API - CRUD operations |
|
|
16
|
+
| `tools/BasketTool.ts` | Baskets API - shopping cart |
|
|
17
|
+
| `tools/OrderTool.ts` | Orders API - order management, status & data updates |
|
|
18
|
+
| `tools/CustomDataTool.ts` | Data API - custom collections with semantic search |
|
|
19
|
+
| `tools/PaymentTool.ts` | Stripe integration, environment variables |
|
|
20
|
+
| `tools/SmartBasketTool.ts` | Dynamic job creation from tools |
|
|
21
|
+
| `tools/GameScoreTrackerTool.ts` | Jobs API - interval jobs, deactivation, getAll |
|
|
21
22
|
|
|
22
23
|
### webhooks/
|
|
24
|
+
|
|
23
25
|
HTTP endpoints for external integrations:
|
|
24
26
|
|
|
25
|
-
| File
|
|
26
|
-
|
|
27
|
-
| `PaymentWebhook.ts`
|
|
28
|
-
| `UserEventWebhook.ts`
|
|
29
|
-
| `FileUploadWebhook.ts` | **CDN API** - file uploads, Data API
|
|
27
|
+
| File | What it shows |
|
|
28
|
+
| ---------------------- | --------------------------------------------- |
|
|
29
|
+
| `PaymentWebhook.ts` | Stripe payment notifications, Orders API |
|
|
30
|
+
| `UserEventWebhook.ts` | External events, **Templates API** (WhatsApp) |
|
|
31
|
+
| `FileUploadWebhook.ts` | **CDN API** - file uploads, Data API |
|
|
30
32
|
|
|
31
33
|
### jobs/
|
|
34
|
+
|
|
32
35
|
Scheduled background tasks:
|
|
33
36
|
|
|
34
|
-
| File
|
|
35
|
-
|
|
36
|
-
| `HealthCheckJob.ts`
|
|
37
|
-
| `DailyCleanupJob.ts`
|
|
38
|
-
| `DataMigrationJob.ts`
|
|
37
|
+
| File | What it shows |
|
|
38
|
+
| -------------------------------- | --------------------------------------------- |
|
|
39
|
+
| `HealthCheckJob.ts` | Interval schedule, health monitoring |
|
|
40
|
+
| `DailyCleanupJob.ts` | Cron schedule, data cleanup |
|
|
41
|
+
| `DataMigrationJob.ts` | One-time schedule, batch processing |
|
|
39
42
|
| `AbandonedBasketProcessorJob.ts` | **Templates API** (WhatsApp), batch reminders |
|
|
40
43
|
|
|
41
44
|
### preprocessors/
|
|
45
|
+
|
|
42
46
|
Message filtering before the agent:
|
|
43
47
|
|
|
44
|
-
| File
|
|
45
|
-
|
|
48
|
+
| File | What it shows |
|
|
49
|
+
| -------------------- | -------------------------------------- |
|
|
46
50
|
| `messageMatching.ts` | Modify/block messages based on content |
|
|
47
51
|
|
|
48
52
|
### postprocessors/
|
|
53
|
+
|
|
49
54
|
Response transformation after the agent:
|
|
50
55
|
|
|
51
|
-
| File
|
|
52
|
-
|
|
56
|
+
| File | What it shows |
|
|
57
|
+
| ------------------- | ------------------------- |
|
|
53
58
|
| `modifyResponse.ts` | Transform agent responses |
|
|
54
59
|
|
|
55
60
|
### services/
|
|
61
|
+
|
|
56
62
|
Helper utilities:
|
|
57
63
|
|
|
58
|
-
| File
|
|
59
|
-
|
|
60
|
-
| `ApiService.ts` | HTTP client wrapper
|
|
64
|
+
| File | What it shows |
|
|
65
|
+
| --------------- | ------------------------ |
|
|
66
|
+
| `ApiService.ts` | HTTP client wrapper |
|
|
61
67
|
| `GetWeather.ts` | Mock service for testing |
|
|
62
68
|
|
|
63
69
|
## 🎯 API Coverage
|
|
64
70
|
|
|
65
|
-
| API
|
|
66
|
-
|
|
67
|
-
| **User**
|
|
68
|
-
| **Products**
|
|
69
|
-
| **Baskets**
|
|
70
|
-
| **Orders**
|
|
71
|
-
| **Data**
|
|
72
|
-
| **Jobs**
|
|
73
|
-
| **AI**
|
|
71
|
+
| API | Where it's demonstrated |
|
|
72
|
+
| ------------- | ------------------------------------------------------- |
|
|
73
|
+
| **User** | `UserDataTool.ts` |
|
|
74
|
+
| **Products** | `ProductsTool.ts` |
|
|
75
|
+
| **Baskets** | `BasketTool.ts`, `SmartBasketTool.ts` |
|
|
76
|
+
| **Orders** | `OrderTool.ts`, `PaymentWebhook.ts` |
|
|
77
|
+
| **Data** | `CustomDataTool.ts`, `FileUploadWebhook.ts` |
|
|
78
|
+
| **Jobs** | `SmartBasketTool.ts`, `GameScoreTrackerTool.ts` |
|
|
79
|
+
| **AI** | `UserDataTool.ts` |
|
|
74
80
|
| **Templates** | `UserEventWebhook.ts`, `AbandonedBasketProcessorJob.ts` |
|
|
75
|
-
| **CDN**
|
|
81
|
+
| **CDN** | `FileUploadWebhook.ts` |
|
|
76
82
|
|
|
77
83
|
## 🚀 How to Use
|
|
78
84
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Abandoned Basket Processor Job
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Processes abandoned cart reminders and sends WhatsApp notifications.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
6
|
* Flow:
|
|
7
7
|
* 1. User creates basket → Tool schedules reminder in custom data
|
|
8
8
|
* 2. This job runs every 15 minutes
|
|
9
9
|
* 3. Checks which reminders are due
|
|
10
10
|
* 4. Checks if baskets were checked out
|
|
11
11
|
* 5. Sends WhatsApp template message for abandoned baskets
|
|
12
|
-
*
|
|
12
|
+
*
|
|
13
13
|
* Demonstrates:
|
|
14
14
|
* - Interval job scheduling
|
|
15
15
|
* - Batch processing pattern
|
|
@@ -17,19 +17,19 @@
|
|
|
17
17
|
* - Data API for tracking state
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import { LuaJob, Data, Baskets, Templates, env } from
|
|
20
|
+
import { LuaJob, Data, Baskets, Templates, env } from 'lua-cli';
|
|
21
21
|
|
|
22
22
|
const abandonedBasketProcessorJob = new LuaJob({
|
|
23
|
-
name:
|
|
24
|
-
description:
|
|
23
|
+
name: 'process-basket-reminders',
|
|
24
|
+
description: 'Processes abandoned basket reminders and sends WhatsApp notifications',
|
|
25
25
|
|
|
26
26
|
// Run every 15 minutes
|
|
27
27
|
schedule: {
|
|
28
28
|
type: 'interval',
|
|
29
|
-
seconds: 900
|
|
29
|
+
seconds: 900, // 15 minutes = 900 seconds
|
|
30
30
|
},
|
|
31
31
|
|
|
32
|
-
timeout: 120,
|
|
32
|
+
timeout: 120, // 2 minutes
|
|
33
33
|
|
|
34
34
|
execute: async () => {
|
|
35
35
|
// Configuration - set these in your environment variables
|
|
@@ -70,9 +70,10 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
70
70
|
abandonedCount++;
|
|
71
71
|
|
|
72
72
|
// Calculate basket value
|
|
73
|
-
const totalValue =
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
const totalValue =
|
|
74
|
+
basket.items?.reduce((sum: number, item: any) => {
|
|
75
|
+
return sum + item.price * item.quantity;
|
|
76
|
+
}, 0) || 0;
|
|
76
77
|
|
|
77
78
|
// Log abandoned basket
|
|
78
79
|
await Data.create('abandoned-baskets', {
|
|
@@ -82,7 +83,7 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
82
83
|
totalValue,
|
|
83
84
|
items: basket.items,
|
|
84
85
|
abandonedAt: new Date().toISOString(),
|
|
85
|
-
reminderSent: false
|
|
86
|
+
reminderSent: false,
|
|
86
87
|
});
|
|
87
88
|
|
|
88
89
|
// Send WhatsApp reminder if we have a phone number
|
|
@@ -90,12 +91,10 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
90
91
|
try {
|
|
91
92
|
// Find the abandoned cart template
|
|
92
93
|
const templatesResponse = await Templates.whatsapp.list(WHATSAPP_CHANNEL_ID, {
|
|
93
|
-
search: ABANDONED_CART_TEMPLATE_NAME
|
|
94
|
+
search: ABANDONED_CART_TEMPLATE_NAME,
|
|
94
95
|
});
|
|
95
|
-
|
|
96
|
-
const template = templatesResponse.templates.find(
|
|
97
|
-
t => t.status === 'APPROVED'
|
|
98
|
-
);
|
|
96
|
+
|
|
97
|
+
const template = templatesResponse.templates.find((t) => t.status === 'APPROVED');
|
|
99
98
|
|
|
100
99
|
if (template) {
|
|
101
100
|
// Send the template message
|
|
@@ -104,15 +103,15 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
104
103
|
values: {
|
|
105
104
|
body: {
|
|
106
105
|
item_count: String(basket.items?.length || 0),
|
|
107
|
-
total_value: `${basket.currency} ${totalValue.toFixed(2)}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
106
|
+
total_value: `${basket.currency} ${totalValue.toFixed(2)}`,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
110
109
|
});
|
|
111
110
|
|
|
112
111
|
if (result.totalErrors === 0) {
|
|
113
112
|
console.log(`📱 WhatsApp reminder sent to ${reminder.data.phoneNumber}`);
|
|
114
113
|
messagesSent++;
|
|
115
|
-
|
|
114
|
+
|
|
116
115
|
// Update the abandoned basket record
|
|
117
116
|
const abandonedRecords = await Data.get('abandoned-baskets', {}, 1, 100);
|
|
118
117
|
const record = abandonedRecords.data?.find((r: any) => r.data.basketId === basket.id);
|
|
@@ -120,7 +119,7 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
120
119
|
await Data.update('abandoned-baskets', record.id, {
|
|
121
120
|
...record.data,
|
|
122
121
|
reminderSent: true,
|
|
123
|
-
reminderSentAt: new Date().toISOString()
|
|
122
|
+
reminderSentAt: new Date().toISOString(),
|
|
124
123
|
});
|
|
125
124
|
}
|
|
126
125
|
} else {
|
|
@@ -139,9 +138,8 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
139
138
|
...reminder.data,
|
|
140
139
|
status: 'completed',
|
|
141
140
|
result: 'abandoned',
|
|
142
|
-
processedAt: new Date().toISOString()
|
|
141
|
+
processedAt: new Date().toISOString(),
|
|
143
142
|
});
|
|
144
|
-
|
|
145
143
|
} else {
|
|
146
144
|
// Basket was checked out
|
|
147
145
|
console.log(`✅ Basket ${basket.id} was checked out (${basket.status})`);
|
|
@@ -152,22 +150,21 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
152
150
|
...reminder.data,
|
|
153
151
|
status: 'completed',
|
|
154
152
|
result: 'checked-out',
|
|
155
|
-
processedAt: new Date().toISOString()
|
|
153
|
+
processedAt: new Date().toISOString(),
|
|
156
154
|
});
|
|
157
155
|
}
|
|
158
156
|
|
|
159
157
|
processedCount++;
|
|
160
|
-
|
|
161
158
|
} catch (error) {
|
|
162
159
|
console.error(`❌ Error processing basket ${reminder.data.basketId}:`, error);
|
|
163
|
-
|
|
160
|
+
|
|
164
161
|
// Mark as error
|
|
165
162
|
try {
|
|
166
163
|
await Data.update('basket-reminders', reminder.id, {
|
|
167
164
|
...reminder.data,
|
|
168
165
|
status: 'error',
|
|
169
166
|
error: String(error),
|
|
170
|
-
processedAt: new Date().toISOString()
|
|
167
|
+
processedAt: new Date().toISOString(),
|
|
171
168
|
});
|
|
172
169
|
} catch (updateError) {
|
|
173
170
|
console.error('Failed to update reminder status:', updateError);
|
|
@@ -176,7 +173,9 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
176
173
|
}
|
|
177
174
|
|
|
178
175
|
console.log('✅ Reminder processing complete');
|
|
179
|
-
console.log(
|
|
176
|
+
console.log(
|
|
177
|
+
`📊 Processed: ${processedCount}, Abandoned: ${abandonedCount}, Checked out: ${checkedOutCount}, Messages sent: ${messagesSent}`
|
|
178
|
+
);
|
|
180
179
|
|
|
181
180
|
return {
|
|
182
181
|
success: true,
|
|
@@ -184,9 +183,9 @@ const abandonedBasketProcessorJob = new LuaJob({
|
|
|
184
183
|
abandonedCount,
|
|
185
184
|
checkedOutCount,
|
|
186
185
|
messagesSent,
|
|
187
|
-
timestamp: new Date().toISOString()
|
|
186
|
+
timestamp: new Date().toISOString(),
|
|
188
187
|
};
|
|
189
|
-
}
|
|
188
|
+
},
|
|
190
189
|
});
|
|
191
190
|
|
|
192
191
|
export default abandonedBasketProcessorJob;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Daily Cleanup Job Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This job runs daily at 2 AM to clean up old data and maintain database performance.
|
|
5
5
|
* Demonstrates: Cron scheduling, data cleanup, and error handling.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { LuaJob, Data } from
|
|
8
|
+
import { LuaJob, Data } from 'lua-cli';
|
|
9
9
|
|
|
10
10
|
const dailyCleanupJob = new LuaJob({
|
|
11
|
-
name:
|
|
12
|
-
description:
|
|
11
|
+
name: 'daily-cleanup',
|
|
12
|
+
description: 'Daily database cleanup and maintenance',
|
|
13
13
|
|
|
14
14
|
// Cron schedule: Every day at 2 AM EST
|
|
15
15
|
schedule: {
|
|
16
16
|
type: 'cron',
|
|
17
|
-
expression: '0 2 * * *',
|
|
18
|
-
timezone: 'America/New_York'
|
|
17
|
+
expression: '0 2 * * *', // minute hour day month day-of-week
|
|
18
|
+
timezone: 'America/New_York',
|
|
19
19
|
},
|
|
20
20
|
|
|
21
21
|
// Give it 10 minutes to complete
|
|
@@ -24,7 +24,7 @@ const dailyCleanupJob = new LuaJob({
|
|
|
24
24
|
// Retry up to 3 times if it fails
|
|
25
25
|
retry: {
|
|
26
26
|
maxAttempts: 3,
|
|
27
|
-
backoffSeconds: 60
|
|
27
|
+
backoffSeconds: 60, // Wait 60s between retries
|
|
28
28
|
},
|
|
29
29
|
|
|
30
30
|
execute: async () => {
|
|
@@ -35,11 +35,11 @@ const dailyCleanupJob = new LuaJob({
|
|
|
35
35
|
|
|
36
36
|
// 1. Clean up old user events (older than 90 days)
|
|
37
37
|
const ninetyDaysAgo = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000);
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
try {
|
|
40
40
|
const oldEventsResponse = await Data.get('user-events', {}, 1, 1000);
|
|
41
41
|
const oldEvents = oldEventsResponse.data || [];
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
for (const event of oldEvents) {
|
|
44
44
|
const eventDate = new Date(event.data.receivedAt);
|
|
45
45
|
if (eventDate < ninetyDaysAgo) {
|
|
@@ -47,7 +47,7 @@ const dailyCleanupJob = new LuaJob({
|
|
|
47
47
|
totalRecordsDeleted++;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
console.log(`✅ Deleted ${totalRecordsDeleted} old user events`);
|
|
52
52
|
} catch (error) {
|
|
53
53
|
console.error('❌ Error cleaning user events:', error);
|
|
@@ -55,12 +55,12 @@ const dailyCleanupJob = new LuaJob({
|
|
|
55
55
|
|
|
56
56
|
// 2. Clean up old payment logs (older than 180 days)
|
|
57
57
|
const oneEightyDaysAgo = new Date(Date.now() - 180 * 24 * 60 * 60 * 1000);
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
try {
|
|
60
60
|
const oldLogsResponse = await Data.get('payment-logs', {}, 1, 1000);
|
|
61
61
|
const oldLogs = oldLogsResponse.data || [];
|
|
62
62
|
let logsDeleted = 0;
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
for (const log of oldLogs) {
|
|
65
65
|
const logDate = new Date(log.data.receivedAt);
|
|
66
66
|
if (logDate < oneEightyDaysAgo) {
|
|
@@ -69,7 +69,7 @@ const dailyCleanupJob = new LuaJob({
|
|
|
69
69
|
totalRecordsDeleted++;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
console.log(`✅ Deleted ${logsDeleted} old payment logs`);
|
|
74
74
|
} catch (error) {
|
|
75
75
|
console.error('❌ Error cleaning payment logs:', error);
|
|
@@ -78,9 +78,9 @@ const dailyCleanupJob = new LuaJob({
|
|
|
78
78
|
// 3. Clean up abandoned baskets (older than 7 days)
|
|
79
79
|
// Note: This would require basket API support for deletion
|
|
80
80
|
// For now, we'll just log the count
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
const duration = Date.now() - startTime;
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
console.log(`✅ Cleanup complete in ${duration}ms`);
|
|
85
85
|
|
|
86
86
|
return {
|
|
@@ -88,10 +88,9 @@ const dailyCleanupJob = new LuaJob({
|
|
|
88
88
|
recordsDeleted: totalRecordsDeleted,
|
|
89
89
|
duration: `${duration}ms`,
|
|
90
90
|
completedAt: new Date().toISOString(),
|
|
91
|
-
collections: ['user-events', 'payment-logs']
|
|
91
|
+
collections: ['user-events', 'payment-logs'],
|
|
92
92
|
};
|
|
93
|
-
}
|
|
93
|
+
},
|
|
94
94
|
});
|
|
95
95
|
|
|
96
96
|
export default dailyCleanupJob;
|
|
97
|
-
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Data Migration Job Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This is a one-time job that runs at a specific date/time to migrate data.
|
|
5
5
|
* Demonstrates: One-time scheduling, data migration, and batch processing.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { LuaJob, Data } from
|
|
8
|
+
import { LuaJob, Data } from 'lua-cli';
|
|
9
9
|
|
|
10
10
|
const dataMigrationJob = new LuaJob({
|
|
11
|
-
name:
|
|
12
|
-
description:
|
|
11
|
+
name: 'migrate-user-schema',
|
|
12
|
+
description: 'One-time migration to new user event schema',
|
|
13
13
|
|
|
14
14
|
// One-time schedule: Run at specific date/time
|
|
15
15
|
schedule: {
|
|
16
16
|
type: 'once',
|
|
17
|
-
executeAt: new Date('2025-12-31T02:00:00Z')
|
|
17
|
+
executeAt: new Date('2025-12-31T02:00:00Z'), // December 31, 2025 at 2 AM UTC
|
|
18
18
|
},
|
|
19
19
|
|
|
20
20
|
// Give it 30 minutes for large migration
|
|
@@ -23,7 +23,7 @@ const dataMigrationJob = new LuaJob({
|
|
|
23
23
|
// Retry important migrations
|
|
24
24
|
retry: {
|
|
25
25
|
maxAttempts: 3,
|
|
26
|
-
backoffSeconds: 300
|
|
26
|
+
backoffSeconds: 300, // 5 minutes between retries
|
|
27
27
|
},
|
|
28
28
|
|
|
29
29
|
execute: async () => {
|
|
@@ -37,7 +37,7 @@ const dataMigrationJob = new LuaJob({
|
|
|
37
37
|
// Get all user events with old schema
|
|
38
38
|
const oldEventsResponse = await Data.get('user-events', {}, 1, 1000);
|
|
39
39
|
const oldEvents = oldEventsResponse.data || [];
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
console.log(`📊 Found ${oldEvents.length} events to migrate`);
|
|
42
42
|
|
|
43
43
|
// Migrate each event
|
|
@@ -48,26 +48,24 @@ const dataMigrationJob = new LuaJob({
|
|
|
48
48
|
// New fields
|
|
49
49
|
eventId: event.id,
|
|
50
50
|
eventType: event.data.type || 'unknown',
|
|
51
|
-
userId: event.data.userId || event.data.user_id,
|
|
51
|
+
userId: event.data.userId || event.data.user_id, // Handle both formats
|
|
52
52
|
email: event.data.email,
|
|
53
53
|
name: event.data.name,
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
// Preserve metadata
|
|
56
56
|
metadata: {
|
|
57
57
|
...event.data.metadata,
|
|
58
58
|
migratedFrom: 'old-schema',
|
|
59
|
-
migratedAt: new Date().toISOString()
|
|
59
|
+
migratedAt: new Date().toISOString(),
|
|
60
60
|
},
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
// Copy timestamps
|
|
63
63
|
originalTimestamp: event.data.timestamp,
|
|
64
|
-
receivedAt: event.data.receivedAt
|
|
64
|
+
receivedAt: event.data.receivedAt,
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
// Create in new collection
|
|
68
|
-
await Data.create('user-events-v2', migratedEvent,
|
|
69
|
-
`${migratedEvent.eventType} ${migratedEvent.email}`
|
|
70
|
-
);
|
|
68
|
+
await Data.create('user-events-v2', migratedEvent, `${migratedEvent.eventType} ${migratedEvent.email}`);
|
|
71
69
|
|
|
72
70
|
totalMigrated++;
|
|
73
71
|
|
|
@@ -75,7 +73,6 @@ const dataMigrationJob = new LuaJob({
|
|
|
75
73
|
if (totalMigrated % 100 === 0) {
|
|
76
74
|
console.log(`✅ Migrated ${totalMigrated} records...`);
|
|
77
75
|
}
|
|
78
|
-
|
|
79
76
|
} catch (error) {
|
|
80
77
|
console.error(`❌ Failed to migrate event ${event.id}:`, error);
|
|
81
78
|
totalErrors++;
|
|
@@ -101,7 +98,7 @@ const dataMigrationJob = new LuaJob({
|
|
|
101
98
|
errors: totalErrors,
|
|
102
99
|
successRate: parseFloat(successRate),
|
|
103
100
|
duration,
|
|
104
|
-
completedAt: new Date().toISOString()
|
|
101
|
+
completedAt: new Date().toISOString(),
|
|
105
102
|
});
|
|
106
103
|
|
|
107
104
|
return {
|
|
@@ -110,21 +107,19 @@ const dataMigrationJob = new LuaJob({
|
|
|
110
107
|
migrated: totalMigrated,
|
|
111
108
|
errors: totalErrors,
|
|
112
109
|
successRate: `${successRate}%`,
|
|
113
|
-
duration: `${duration}ms
|
|
110
|
+
duration: `${duration}ms`,
|
|
114
111
|
};
|
|
115
|
-
|
|
116
112
|
} catch (error) {
|
|
117
113
|
console.error('💥 Migration failed:', error);
|
|
118
|
-
|
|
114
|
+
|
|
119
115
|
return {
|
|
120
116
|
success: false,
|
|
121
117
|
error: String(error),
|
|
122
118
|
totalMigrated,
|
|
123
|
-
totalErrors
|
|
119
|
+
totalErrors,
|
|
124
120
|
};
|
|
125
121
|
}
|
|
126
|
-
}
|
|
122
|
+
},
|
|
127
123
|
});
|
|
128
124
|
|
|
129
125
|
export default dataMigrationJob;
|
|
130
|
-
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Health Check Job Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This job runs every 5 minutes to check system health and alert on issues.
|
|
5
5
|
* Demonstrates: Interval scheduling, monitoring, and alerting.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { LuaJob, Data, Products } from
|
|
8
|
+
import { LuaJob, Data, Products } from 'lua-cli';
|
|
9
9
|
|
|
10
10
|
const healthCheckJob = new LuaJob({
|
|
11
|
-
name:
|
|
12
|
-
description:
|
|
11
|
+
name: 'health-check',
|
|
12
|
+
description: 'System health monitoring',
|
|
13
13
|
|
|
14
14
|
// Interval schedule: Every 5 minutes
|
|
15
15
|
schedule: {
|
|
16
16
|
type: 'interval',
|
|
17
|
-
seconds: 300
|
|
17
|
+
seconds: 300, // 5 minutes = 300 seconds
|
|
18
18
|
},
|
|
19
19
|
|
|
20
20
|
// Quick timeout for health checks
|
|
@@ -29,12 +29,12 @@ const healthCheckJob = new LuaJob({
|
|
|
29
29
|
const testQuery = await Data.get('health-checks', {}, 1, 1);
|
|
30
30
|
checks.database = {
|
|
31
31
|
status: 'healthy',
|
|
32
|
-
responseTime: Date.now()
|
|
32
|
+
responseTime: Date.now(),
|
|
33
33
|
};
|
|
34
34
|
} catch (error) {
|
|
35
35
|
checks.database = {
|
|
36
36
|
status: 'unhealthy',
|
|
37
|
-
error: String(error)
|
|
37
|
+
error: String(error),
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -43,15 +43,15 @@ const healthCheckJob = new LuaJob({
|
|
|
43
43
|
const startTime = Date.now();
|
|
44
44
|
await Products.get(1, 1);
|
|
45
45
|
const responseTime = Date.now() - startTime;
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
checks.productsApi = {
|
|
48
48
|
status: 'healthy',
|
|
49
|
-
responseTime: `${responseTime}ms
|
|
49
|
+
responseTime: `${responseTime}ms`,
|
|
50
50
|
};
|
|
51
51
|
} catch (error) {
|
|
52
52
|
checks.productsApi = {
|
|
53
53
|
status: 'unhealthy',
|
|
54
|
-
error: String(error)
|
|
54
|
+
error: String(error),
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -63,7 +63,7 @@ const healthCheckJob = new LuaJob({
|
|
|
63
63
|
await Data.create('health-checks', {
|
|
64
64
|
status: overallStatus,
|
|
65
65
|
checks,
|
|
66
|
-
timestamp: new Date().toISOString()
|
|
66
|
+
timestamp: new Date().toISOString(),
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
// Alert if unhealthy (in production, send to monitoring service)
|
|
@@ -75,10 +75,9 @@ const healthCheckJob = new LuaJob({
|
|
|
75
75
|
return {
|
|
76
76
|
status: overallStatus,
|
|
77
77
|
checks,
|
|
78
|
-
timestamp: new Date().toISOString()
|
|
78
|
+
timestamp: new Date().toISOString(),
|
|
79
79
|
};
|
|
80
|
-
}
|
|
80
|
+
},
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
export default healthCheckJob;
|
|
84
|
-
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { PostProcessor, UserDataInstance } from
|
|
2
|
-
|
|
1
|
+
import { PostProcessor, UserDataInstance } from 'lua-cli';
|
|
3
2
|
|
|
4
3
|
const modifyResponsePostProcessor = new PostProcessor({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
return { modifiedResponse: response };
|
|
4
|
+
name: 'modify-response',
|
|
5
|
+
description: 'Modifies the response to the user',
|
|
6
|
+
execute: async (user: UserDataInstance, message: string, response: string, channel: string) => {
|
|
7
|
+
console.log('Modify response post processor', user, message, response, channel);
|
|
8
|
+
console.log('User data', await user.data);
|
|
9
|
+
console.log('Message', message);
|
|
10
|
+
console.log('Response', response);
|
|
11
|
+
console.log('Channel', channel);
|
|
12
|
+
if (response.includes('test')) {
|
|
13
|
+
return { modifiedResponse: message.toUpperCase() };
|
|
17
14
|
}
|
|
15
|
+
return { modifiedResponse: response };
|
|
16
|
+
},
|
|
18
17
|
});
|
|
19
18
|
|
|
20
|
-
export default modifyResponsePostProcessor;
|
|
19
|
+
export default modifyResponsePostProcessor;
|