yuzuha 0.2.0 → 0.3.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/CHANGELOG.md +29 -1
- package/README.md +22 -14
- package/VERSIONING.md +56 -7
- package/benchmarks/parser.mjs +1 -1
- package/benchmarks/run.mjs +3 -2
- package/dist/canvas/card.d.ts +10 -0
- package/dist/canvas/card.d.ts.map +1 -0
- package/dist/canvas/card.js +11 -0
- package/dist/canvas/card.js.map +1 -0
- package/dist/canvas.d.ts +30 -9
- package/dist/canvas.d.ts.map +1 -1
- package/dist/canvas.js +64 -9
- package/dist/canvas.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +2 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/lint.d.ts.map +1 -1
- package/dist/cli/lint.js +1 -2
- package/dist/cli/lint.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +8 -9
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/scaffold.js +1 -1
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/scenarios.d.ts.map +1 -1
- package/dist/cli/scenarios.js +2 -1
- package/dist/cli/scenarios.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +7 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/domain/resource-batches.d.ts +6 -0
- package/dist/domain/resource-batches.d.ts.map +1 -1
- package/dist/domain/resource-batches.js +31 -0
- package/dist/domain/resource-batches.js.map +1 -1
- package/dist/framework/bot.d.ts +9 -5
- package/dist/framework/bot.d.ts.map +1 -1
- package/dist/framework/bot.js +51 -27
- package/dist/framework/bot.js.map +1 -1
- package/dist/framework/command-registry.d.ts +8 -7
- package/dist/framework/command-registry.d.ts.map +1 -1
- package/dist/framework/command-registry.js +14 -11
- package/dist/framework/command-registry.js.map +1 -1
- package/dist/framework/options.d.ts +3 -3
- package/dist/framework/options.d.ts.map +1 -1
- package/dist/framework/options.js.map +1 -1
- package/dist/{scripting → functions}/builtins/arguments.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/arguments.js.map +1 -1
- package/dist/functions/builtins/canvas.d.ts +2 -0
- package/dist/functions/builtins/canvas.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/canvas.js +1 -1
- package/dist/{scripting → functions}/builtins/canvas.js.map +1 -1
- package/dist/functions/builtins/context.d.ts +2 -0
- package/dist/functions/builtins/context.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/context.js.map +1 -1
- package/dist/{scripting → functions}/builtins/definition.d.ts +1 -1
- package/dist/functions/builtins/definition.d.ts.map +1 -0
- package/dist/functions/builtins/definition.js.map +1 -0
- package/dist/functions/builtins/embeds.d.ts +3 -0
- package/dist/{scripting → functions}/builtins/embeds.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/embeds.js +1 -1
- package/dist/functions/builtins/embeds.js.map +1 -0
- package/dist/functions/builtins/events.d.ts +2 -0
- package/dist/functions/builtins/events.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/events.js.map +1 -1
- package/dist/functions/builtins/flow.d.ts +2 -0
- package/dist/functions/builtins/flow.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/flow.js +2 -2
- package/dist/functions/builtins/flow.js.map +1 -0
- package/dist/functions/builtins/guards.d.ts +2 -0
- package/dist/functions/builtins/guards.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/guards.js +1 -1
- package/dist/functions/builtins/guards.js.map +1 -0
- package/dist/functions/builtins/http.d.ts +2 -0
- package/dist/functions/builtins/http.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/http.js +2 -2
- package/dist/functions/builtins/http.js.map +1 -0
- package/dist/functions/builtins/index.d.ts +5 -0
- package/dist/functions/builtins/index.d.ts.map +1 -0
- package/dist/functions/builtins/index.js.map +1 -0
- package/dist/functions/builtins/language/array-callbacks.d.ts +2 -0
- package/dist/functions/builtins/language/array-callbacks.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/array-callbacks.js +1 -1
- package/dist/{scripting → functions}/builtins/language/array-callbacks.js.map +1 -1
- package/dist/functions/builtins/language/arrays.d.ts +2 -0
- package/dist/functions/builtins/language/arrays.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/arrays.js +1 -1
- package/dist/{scripting → functions}/builtins/language/arrays.js.map +1 -1
- package/dist/{scripting → functions}/builtins/language/common.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/language/common.js.map +1 -1
- package/dist/functions/builtins/language/decimals.d.ts +2 -0
- package/dist/functions/builtins/language/decimals.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/decimals.js.map +1 -1
- package/dist/functions/builtins/language/index.d.ts +3 -0
- package/dist/functions/builtins/language/index.d.ts.map +1 -0
- package/dist/functions/builtins/language/index.js.map +1 -0
- package/dist/functions/builtins/language/loops.d.ts +4 -0
- package/dist/{scripting → functions}/builtins/language/loops.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/language/loops.js +3 -3
- package/dist/{scripting → functions}/builtins/language/loops.js.map +1 -1
- package/dist/functions/builtins/language/numbers.d.ts +2 -0
- package/dist/functions/builtins/language/numbers.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/numbers.js.map +1 -1
- package/dist/{scripting → functions}/builtins/language/objects.d.ts +1 -1
- package/dist/{scripting → functions}/builtins/language/objects.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/language/objects.js.map +1 -1
- package/dist/functions/builtins/language/regex.d.ts +2 -0
- package/dist/functions/builtins/language/regex.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/regex.js +1 -1
- package/dist/{scripting → functions}/builtins/language/regex.js.map +1 -1
- package/dist/functions/builtins/language/sort.d.ts +2 -0
- package/dist/functions/builtins/language/sort.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/sort.js.map +1 -1
- package/dist/{scripting → functions}/builtins/language/state.d.ts +1 -1
- package/dist/{scripting → functions}/builtins/language/state.d.ts.map +1 -1
- package/dist/{scripting → functions}/builtins/language/state.js.map +1 -1
- package/dist/functions/builtins/language/texts.d.ts +2 -0
- package/dist/functions/builtins/language/texts.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/language/texts.js.map +1 -1
- package/dist/functions/builtins/messages.d.ts +2 -0
- package/dist/functions/builtins/messages.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/messages.js.map +1 -1
- package/dist/functions/builtins/moderation.d.ts +2 -0
- package/dist/functions/builtins/moderation.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/moderation.js.map +1 -1
- package/dist/functions/builtins/native-channels.d.ts +2 -0
- package/dist/functions/builtins/native-channels.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-channels.js.map +1 -1
- package/dist/functions/builtins/native-collectors.d.ts +2 -0
- package/dist/functions/builtins/native-collectors.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-collectors.js.map +1 -1
- package/dist/functions/builtins/native-expressions.d.ts +2 -0
- package/dist/functions/builtins/native-expressions.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-expressions.js.map +1 -1
- package/dist/functions/builtins/native-invites.d.ts +2 -0
- package/dist/functions/builtins/native-invites.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-invites.js.map +1 -1
- package/dist/functions/builtins/native-messages.d.ts +2 -0
- package/dist/functions/builtins/native-messages.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-messages.js.map +1 -1
- package/dist/functions/builtins/native-roles.d.ts +2 -0
- package/dist/functions/builtins/native-roles.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-roles.js.map +1 -1
- package/dist/functions/builtins/native-threads.d.ts +2 -0
- package/dist/functions/builtins/native-threads.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-threads.js.map +1 -1
- package/dist/functions/builtins/native-users.d.ts +2 -0
- package/dist/functions/builtins/native-users.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-users.js.map +1 -1
- package/dist/functions/builtins/native-webhooks.d.ts +2 -0
- package/dist/functions/builtins/native-webhooks.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/native-webhooks.js.map +1 -1
- package/dist/{scripting → functions}/builtins/payload.d.ts +2 -2
- package/dist/functions/builtins/payload.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/payload.js +1 -1
- package/dist/functions/builtins/payload.js.map +1 -0
- package/dist/functions/builtins/resource-extras.d.ts +2 -0
- package/dist/functions/builtins/resource-extras.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/resource-extras.js.map +1 -1
- package/dist/functions/builtins/schedule.d.ts +2 -0
- package/dist/functions/builtins/schedule.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/schedule.js.map +1 -1
- package/dist/functions/builtins/storage.d.ts +2 -0
- package/dist/functions/builtins/storage.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/storage.js.map +1 -1
- package/dist/functions/builtins/values.d.ts +2 -0
- package/dist/functions/builtins/values.d.ts.map +1 -0
- package/dist/{scripting → functions}/builtins/values.js +1 -1
- package/dist/functions/builtins/values.js.map +1 -0
- package/dist/functions/runtime/ast.d.ts.map +1 -0
- package/dist/functions/runtime/ast.js.map +1 -0
- package/dist/{scripting → functions/runtime}/canvas-execution.d.ts +1 -1
- package/dist/functions/runtime/canvas-execution.d.ts.map +1 -0
- package/dist/functions/runtime/canvas-execution.js.map +1 -0
- package/dist/functions/runtime/control-flow.d.ts.map +1 -0
- package/dist/functions/runtime/control-flow.js.map +1 -0
- package/dist/{scripting → functions/runtime}/evaluator.d.ts +1 -1
- package/dist/functions/runtime/evaluator.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/evaluator.js +1 -1
- package/dist/functions/runtime/evaluator.js.map +1 -0
- package/dist/functions/runtime/limits.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/limits.js +1 -1
- package/dist/functions/runtime/limits.js.map +1 -0
- package/dist/functions/runtime/parser.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/parser.js +1 -1
- package/dist/functions/runtime/parser.js.map +1 -0
- package/dist/functions/runtime/regex.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/regex.js +1 -1
- package/dist/functions/runtime/regex.js.map +1 -0
- package/dist/functions/runtime/registry.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/registry.js +1 -1
- package/dist/functions/runtime/registry.js.map +1 -0
- package/dist/{scripting → functions/runtime}/runtime.d.ts +3 -1
- package/dist/functions/runtime/runtime.d.ts.map +1 -0
- package/dist/{scripting → functions/runtime}/runtime.js +3 -0
- package/dist/functions/runtime/runtime.js.map +1 -0
- package/dist/{scripting → functions/runtime}/types.d.ts +1 -1
- package/dist/functions/runtime/types.d.ts.map +1 -0
- package/dist/functions/runtime/types.js.map +1 -0
- package/dist/functions/runtime/values.d.ts.map +1 -0
- package/dist/functions/runtime/values.js.map +1 -0
- package/dist/functions.d.ts +19 -8
- package/dist/functions.d.ts.map +1 -1
- package/dist/functions.js +18 -6
- package/dist/functions.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/canvas/napi.d.ts +4 -0
- package/dist/infrastructure/canvas/napi.d.ts.map +1 -0
- package/dist/infrastructure/canvas/napi.js +17 -0
- package/dist/infrastructure/canvas/napi.js.map +1 -0
- package/dist/infrastructure/fluxer/resources/cache.d.ts +4 -0
- package/dist/infrastructure/fluxer/resources/cache.d.ts.map +1 -0
- package/dist/infrastructure/fluxer/resources/cache.js +68 -0
- package/dist/infrastructure/fluxer/resources/cache.js.map +1 -0
- package/dist/infrastructure/fluxer/resources/channels.d.ts +3 -2
- package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/channels.js +54 -2
- package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/collectors.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/collectors.js +86 -4
- package/dist/infrastructure/fluxer/resources/collectors.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/expressions.js +8 -1
- package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/gateway.d.ts +4 -0
- package/dist/infrastructure/fluxer/resources/gateway.d.ts.map +1 -0
- package/dist/infrastructure/fluxer/resources/gateway.js +31 -0
- package/dist/infrastructure/fluxer/resources/gateway.js.map +1 -0
- package/dist/infrastructure/fluxer/resources/instance.d.ts +4 -0
- package/dist/infrastructure/fluxer/resources/instance.d.ts.map +1 -0
- package/dist/infrastructure/fluxer/resources/instance.js +96 -0
- package/dist/infrastructure/fluxer/resources/instance.js.map +1 -0
- package/dist/infrastructure/fluxer/resources/messages.d.ts +3 -1
- package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/messages.js +91 -36
- package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/roles.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/roles.js +8 -0
- package/dist/infrastructure/fluxer/resources/roles.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/self.d.ts +4 -0
- package/dist/infrastructure/fluxer/resources/self.d.ts.map +1 -0
- package/dist/infrastructure/fluxer/resources/self.js +36 -0
- package/dist/infrastructure/fluxer/resources/self.js.map +1 -0
- package/dist/infrastructure/fluxer/resources/threads.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/threads.js +15 -0
- package/dist/infrastructure/fluxer/resources/threads.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/users.d.ts +5 -2
- package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/users.js +36 -3
- package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
- package/dist/infrastructure/fluxer/resources/webhooks.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources/webhooks.js +9 -0
- package/dist/infrastructure/fluxer/resources/webhooks.js.map +1 -1
- package/dist/infrastructure/fluxer/resources.d.ts +4 -0
- package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
- package/dist/infrastructure/fluxer/resources.js +12 -0
- package/dist/infrastructure/fluxer/resources.js.map +1 -1
- package/dist/ports/resources/cache.d.ts +74 -0
- package/dist/ports/resources/cache.d.ts.map +1 -0
- package/dist/ports/resources/cache.js +2 -0
- package/dist/ports/resources/cache.js.map +1 -0
- package/dist/ports/resources/channels.d.ts +17 -0
- package/dist/ports/resources/channels.d.ts.map +1 -1
- package/dist/ports/resources/channels.js.map +1 -1
- package/dist/ports/resources/collectors.d.ts +18 -0
- package/dist/ports/resources/collectors.d.ts.map +1 -1
- package/dist/ports/resources/collectors.js.map +1 -1
- package/dist/ports/resources/common.d.ts +2 -0
- package/dist/ports/resources/common.d.ts.map +1 -1
- package/dist/ports/resources/common.js.map +1 -1
- package/dist/ports/resources/expressions.d.ts +8 -0
- package/dist/ports/resources/expressions.d.ts.map +1 -1
- package/dist/ports/resources/expressions.js.map +1 -1
- package/dist/ports/resources/gateway.d.ts +48 -0
- package/dist/ports/resources/gateway.d.ts.map +1 -0
- package/dist/ports/resources/gateway.js +2 -0
- package/dist/ports/resources/gateway.js.map +1 -0
- package/dist/ports/resources/instance.d.ts +101 -0
- package/dist/ports/resources/instance.d.ts.map +1 -0
- package/dist/ports/resources/instance.js +2 -0
- package/dist/ports/resources/instance.js.map +1 -0
- package/dist/ports/resources/messages.d.ts +27 -0
- package/dist/ports/resources/messages.d.ts.map +1 -1
- package/dist/ports/resources/messages.js.map +1 -1
- package/dist/ports/resources/roles.d.ts +6 -0
- package/dist/ports/resources/roles.d.ts.map +1 -1
- package/dist/ports/resources/roles.js.map +1 -1
- package/dist/ports/resources/self.d.ts +30 -0
- package/dist/ports/resources/self.d.ts.map +1 -0
- package/dist/ports/resources/self.js +2 -0
- package/dist/ports/resources/self.js.map +1 -0
- package/dist/ports/resources/threads.d.ts +16 -0
- package/dist/ports/resources/threads.d.ts.map +1 -1
- package/dist/ports/resources/threads.js.map +1 -1
- package/dist/ports/resources/users.d.ts +30 -0
- package/dist/ports/resources/users.d.ts.map +1 -1
- package/dist/ports/resources/users.js.map +1 -1
- package/dist/ports/resources/webhooks.d.ts +5 -0
- package/dist/ports/resources/webhooks.d.ts.map +1 -1
- package/dist/ports/resources/webhooks.js.map +1 -1
- package/dist/ports/resources.d.ts +8 -0
- package/dist/ports/resources.d.ts.map +1 -1
- package/dist/ports/resources.js.map +1 -1
- package/dist/ports/script-engine.d.ts +45 -0
- package/dist/ports/script-engine.d.ts.map +1 -0
- package/dist/ports/script-engine.js +2 -0
- package/dist/ports/script-engine.js.map +1 -0
- package/dist/sdk/builders.d.ts +2 -0
- package/dist/sdk/builders.d.ts.map +1 -0
- package/dist/sdk/builders.js +2 -0
- package/dist/sdk/builders.js.map +1 -0
- package/dist/sdk/client.d.ts +2 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +2 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/cluster.d.ts +2 -0
- package/dist/sdk/cluster.d.ts.map +1 -0
- package/dist/sdk/cluster.js +2 -0
- package/dist/sdk/cluster.js.map +1 -0
- package/dist/sdk/collection.d.ts +2 -0
- package/dist/sdk/collection.d.ts.map +1 -0
- package/dist/sdk/collection.js +2 -0
- package/dist/sdk/collection.js.map +1 -0
- package/dist/sdk/errors.d.ts +2 -0
- package/dist/sdk/errors.d.ts.map +1 -0
- package/dist/sdk/errors.js +2 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/internal.d.ts +2 -0
- package/dist/sdk/internal.d.ts.map +1 -0
- package/dist/sdk/internal.js +2 -0
- package/dist/sdk/internal.js.map +1 -0
- package/dist/sdk/message.d.ts +2 -0
- package/dist/sdk/message.d.ts.map +1 -0
- package/dist/sdk/message.js +2 -0
- package/dist/sdk/message.js.map +1 -0
- package/dist/sdk/rest/request-manager.d.ts +2 -0
- package/dist/sdk/rest/request-manager.d.ts.map +1 -0
- package/dist/sdk/rest/request-manager.js +2 -0
- package/dist/sdk/rest/request-manager.js.map +1 -0
- package/dist/sdk/rest.d.ts +2 -0
- package/dist/sdk/rest.d.ts.map +1 -0
- package/dist/sdk/rest.js +2 -0
- package/dist/sdk/rest.js.map +1 -0
- package/dist/sdk/sharding.d.ts +2 -0
- package/dist/sdk/sharding.d.ts.map +1 -0
- package/dist/sdk/sharding.js +2 -0
- package/dist/sdk/sharding.js.map +1 -0
- package/dist/sdk/types/routes.d.ts +2 -0
- package/dist/sdk/types/routes.d.ts.map +1 -0
- package/dist/sdk/types/routes.js +2 -0
- package/dist/sdk/types/routes.js.map +1 -0
- package/dist/sdk/types.d.ts +2 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +2 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/sdk/util.d.ts +2 -0
- package/dist/sdk/util.d.ts.map +1 -0
- package/dist/sdk/util.js +2 -0
- package/dist/sdk/util.js.map +1 -0
- package/dist/sdk/voice.d.ts +2 -0
- package/dist/sdk/voice.d.ts.map +1 -0
- package/dist/sdk/voice.js +2 -0
- package/dist/sdk/voice.js.map +1 -0
- package/dist/sdk/ws.d.ts +2 -0
- package/dist/sdk/ws.d.ts.map +1 -0
- package/dist/sdk/ws.js +2 -0
- package/dist/sdk/ws.js.map +1 -0
- package/dist/services/canvas-image.d.ts +12 -0
- package/dist/services/canvas-image.d.ts.map +1 -0
- package/dist/services/canvas-image.js +56 -0
- package/dist/services/canvas-image.js.map +1 -0
- package/dist/services/canvas.d.ts +12 -2
- package/dist/services/canvas.d.ts.map +1 -1
- package/dist/services/canvas.js +91 -5
- package/dist/services/canvas.js.map +1 -1
- package/dist/services/moderation.d.ts +1 -0
- package/dist/services/moderation.d.ts.map +1 -1
- package/dist/services/moderation.js +11 -0
- package/dist/services/moderation.js.map +1 -1
- package/dist/services/native-moderation.d.ts +6 -1
- package/dist/services/native-moderation.d.ts.map +1 -1
- package/dist/services/native-moderation.js +11 -1
- package/dist/services/native-moderation.js.map +1 -1
- package/dist/services/resource-authorization.d.ts.map +1 -1
- package/dist/services/resource-authorization.js +95 -3
- package/dist/services/resource-authorization.js.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +4 -0
- package/dist/testing.js.map +1 -1
- package/docs/API.md +8 -7
- package/docs/ARCHITECTURE.md +14 -9
- package/docs/BENCHMARKS.md +1 -1
- package/docs/CANVAS.md +70 -15
- package/docs/EDITOR.md +1 -1
- package/docs/FRAMEWORK.md +2 -3
- package/docs/HTTP.md +1 -1
- package/docs/IMAGES.md +2 -1
- package/docs/NATIVE.md +45 -14
- package/docs/PARITY-MATRIX.md +853 -843
- package/docs/PARITY.md +24 -12
- package/docs/PLAN.md +14 -3
- package/docs/QUICKSTART.md +5 -5
- package/docs/README.md +7 -7
- package/docs/REPOSITORY.md +1 -1
- package/docs/SCHEDULER.md +1 -1
- package/docs/TROUBLESHOOTING.md +1 -1
- package/docs/VALIDATION.md +5 -5
- package/docs/{FUNCTION-GAPS.md → functions/FUNCTION-GAPS.md} +18 -13
- package/docs/{LANGUAGE.md → functions/LANGUAGE.md} +7 -7
- package/docs/functions/README.md +33 -0
- package/docs/tutorials/DATA.md +2 -2
- package/docs/tutorials/FUNCTION-MODE.md +2 -2
- package/examples/canvas/napi-style.ts +24 -0
- package/examples/canvas/output/napi-style.png +0 -0
- package/examples/canvas/profile.d.mts +1 -1
- package/examples/canvas/profile.mjs +2 -2
- package/examples/canvas/profile.ts +3 -3
- package/examples/canvas/ranking.d.mts +1 -1
- package/examples/canvas/ranking.mjs +2 -2
- package/examples/canvas/ranking.ts +3 -3
- package/examples/canvas/render.ts +2 -1
- package/examples/canvas/welcome.d.mts +1 -1
- package/examples/canvas/welcome.mjs +2 -2
- package/examples/canvas/welcome.ts +3 -3
- package/examples/embeds/complete-embed-functions.ts +2 -2
- package/examples/function-mode.ts +3 -3
- package/examples/yuzuha.config.js +2 -0
- package/package.json +26 -1
- package/src/canvas/card.ts +20 -0
- package/src/canvas.ts +69 -17
- package/src/cli/config.ts +2 -1
- package/src/cli/lint.ts +1 -2
- package/src/cli/main.ts +8 -9
- package/src/cli/scaffold.ts +1 -1
- package/src/cli/scenarios.ts +2 -1
- package/src/commands/context.ts +9 -2
- package/src/domain/resource-batches.ts +31 -0
- package/src/framework/bot.ts +44 -27
- package/src/framework/command-registry.ts +15 -10
- package/src/framework/options.ts +3 -3
- package/src/{scripting → functions}/builtins/canvas.ts +2 -2
- package/src/{scripting → functions}/builtins/context.ts +1 -1
- package/src/{scripting → functions}/builtins/definition.ts +1 -1
- package/src/{scripting → functions}/builtins/embeds.ts +1 -1
- package/src/{scripting → functions}/builtins/flow.ts +2 -2
- package/src/{scripting → functions}/builtins/guards.ts +1 -1
- package/src/{scripting → functions}/builtins/http.ts +2 -2
- package/src/{scripting → functions}/builtins/index.ts +2 -2
- package/src/{scripting → functions}/builtins/language/array-callbacks.ts +2 -2
- package/src/{scripting → functions}/builtins/language/arrays.ts +1 -1
- package/src/{scripting → functions}/builtins/language/index.ts +1 -1
- package/src/{scripting → functions}/builtins/language/loops.ts +4 -4
- package/src/{scripting → functions}/builtins/language/regex.ts +1 -1
- package/src/{scripting → functions}/builtins/moderation.ts +1 -1
- package/src/{scripting → functions}/builtins/native-channels.ts +1 -1
- package/src/{scripting → functions}/builtins/native-roles.ts +1 -1
- package/src/{scripting → functions}/builtins/native-users.ts +1 -1
- package/src/{scripting → functions}/builtins/payload.ts +2 -2
- package/src/{scripting → functions}/builtins/resource-extras.ts +1 -1
- package/src/{scripting → functions}/builtins/values.ts +1 -1
- package/src/{scripting → functions/runtime}/canvas-execution.ts +1 -1
- package/src/{scripting → functions/runtime}/evaluator.ts +2 -2
- package/src/{scripting → functions/runtime}/limits.ts +1 -1
- package/src/{scripting → functions/runtime}/parser.ts +1 -1
- package/src/{scripting → functions/runtime}/regex.ts +1 -1
- package/src/{scripting → functions/runtime}/registry.ts +1 -1
- package/src/{scripting → functions/runtime}/runtime.ts +6 -1
- package/src/{scripting → functions/runtime}/types.ts +1 -1
- package/src/functions.ts +28 -8
- package/src/index.ts +9 -2
- package/src/infrastructure/canvas/napi.ts +17 -0
- package/src/infrastructure/fluxer/resources/cache.ts +69 -0
- package/src/infrastructure/fluxer/resources/channels.ts +51 -3
- package/src/infrastructure/fluxer/resources/collectors.ts +87 -4
- package/src/infrastructure/fluxer/resources/expressions.ts +7 -1
- package/src/infrastructure/fluxer/resources/gateway.ts +33 -0
- package/src/infrastructure/fluxer/resources/instance.ts +105 -0
- package/src/infrastructure/fluxer/resources/messages.ts +84 -36
- package/src/infrastructure/fluxer/resources/roles.ts +8 -0
- package/src/infrastructure/fluxer/resources/self.ts +39 -0
- package/src/infrastructure/fluxer/resources/threads.ts +14 -0
- package/src/infrastructure/fluxer/resources/users.ts +40 -4
- package/src/infrastructure/fluxer/resources/webhooks.ts +9 -0
- package/src/infrastructure/fluxer/resources.ts +12 -0
- package/src/ports/resources/cache.ts +81 -0
- package/src/ports/resources/channels.ts +12 -0
- package/src/ports/resources/collectors.ts +20 -0
- package/src/ports/resources/common.ts +2 -0
- package/src/ports/resources/expressions.ts +6 -0
- package/src/ports/resources/gateway.ts +49 -0
- package/src/ports/resources/instance.ts +109 -0
- package/src/ports/resources/messages.ts +30 -0
- package/src/ports/resources/roles.ts +3 -0
- package/src/ports/resources/self.ts +30 -0
- package/src/ports/resources/threads.ts +15 -0
- package/src/ports/resources/users.ts +33 -0
- package/src/ports/resources/webhooks.ts +6 -0
- package/src/ports/resources.ts +8 -0
- package/src/ports/script-engine.ts +42 -0
- package/src/sdk/builders.ts +1 -0
- package/src/sdk/client.ts +1 -0
- package/src/sdk/cluster.ts +1 -0
- package/src/sdk/collection.ts +1 -0
- package/src/sdk/errors.ts +1 -0
- package/src/sdk/internal.ts +1 -0
- package/src/sdk/message.ts +1 -0
- package/src/sdk/rest/request-manager.ts +1 -0
- package/src/sdk/rest.ts +1 -0
- package/src/sdk/sharding.ts +1 -0
- package/src/sdk/types/routes.ts +1 -0
- package/src/sdk/types.ts +1 -0
- package/src/sdk/util.ts +1 -0
- package/src/sdk/voice.ts +1 -0
- package/src/sdk/ws.ts +1 -0
- package/src/services/canvas-image.ts +54 -0
- package/src/services/canvas.ts +89 -6
- package/src/services/moderation.ts +4 -0
- package/src/services/native-moderation.ts +11 -1
- package/src/services/resource-authorization.ts +89 -3
- package/src/testing.ts +4 -0
- package/dist/parser.d.ts +0 -3
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -2
- package/dist/parser.js.map +0 -1
- package/dist/runtime.d.ts +0 -5
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -4
- package/dist/runtime.js.map +0 -1
- package/dist/scripting/ast.d.ts.map +0 -1
- package/dist/scripting/ast.js.map +0 -1
- package/dist/scripting/builtins/canvas.d.ts +0 -2
- package/dist/scripting/builtins/canvas.d.ts.map +0 -1
- package/dist/scripting/builtins/context.d.ts +0 -2
- package/dist/scripting/builtins/context.d.ts.map +0 -1
- package/dist/scripting/builtins/definition.d.ts.map +0 -1
- package/dist/scripting/builtins/definition.js.map +0 -1
- package/dist/scripting/builtins/embeds.d.ts +0 -3
- package/dist/scripting/builtins/embeds.js.map +0 -1
- package/dist/scripting/builtins/events.d.ts +0 -2
- package/dist/scripting/builtins/events.d.ts.map +0 -1
- package/dist/scripting/builtins/flow.d.ts +0 -2
- package/dist/scripting/builtins/flow.d.ts.map +0 -1
- package/dist/scripting/builtins/flow.js.map +0 -1
- package/dist/scripting/builtins/guards.d.ts +0 -2
- package/dist/scripting/builtins/guards.d.ts.map +0 -1
- package/dist/scripting/builtins/guards.js.map +0 -1
- package/dist/scripting/builtins/http.d.ts +0 -2
- package/dist/scripting/builtins/http.d.ts.map +0 -1
- package/dist/scripting/builtins/http.js.map +0 -1
- package/dist/scripting/builtins/index.d.ts +0 -5
- package/dist/scripting/builtins/index.d.ts.map +0 -1
- package/dist/scripting/builtins/index.js.map +0 -1
- package/dist/scripting/builtins/language/array-callbacks.d.ts +0 -2
- package/dist/scripting/builtins/language/array-callbacks.d.ts.map +0 -1
- package/dist/scripting/builtins/language/arrays.d.ts +0 -2
- package/dist/scripting/builtins/language/arrays.d.ts.map +0 -1
- package/dist/scripting/builtins/language/decimals.d.ts +0 -2
- package/dist/scripting/builtins/language/decimals.d.ts.map +0 -1
- package/dist/scripting/builtins/language/index.d.ts +0 -3
- package/dist/scripting/builtins/language/index.d.ts.map +0 -1
- package/dist/scripting/builtins/language/index.js.map +0 -1
- package/dist/scripting/builtins/language/loops.d.ts +0 -4
- package/dist/scripting/builtins/language/numbers.d.ts +0 -2
- package/dist/scripting/builtins/language/numbers.d.ts.map +0 -1
- package/dist/scripting/builtins/language/regex.d.ts +0 -2
- package/dist/scripting/builtins/language/regex.d.ts.map +0 -1
- package/dist/scripting/builtins/language/sort.d.ts +0 -2
- package/dist/scripting/builtins/language/sort.d.ts.map +0 -1
- package/dist/scripting/builtins/language/texts.d.ts +0 -2
- package/dist/scripting/builtins/language/texts.d.ts.map +0 -1
- package/dist/scripting/builtins/messages.d.ts +0 -2
- package/dist/scripting/builtins/messages.d.ts.map +0 -1
- package/dist/scripting/builtins/moderation.d.ts +0 -2
- package/dist/scripting/builtins/moderation.d.ts.map +0 -1
- package/dist/scripting/builtins/native-channels.d.ts +0 -2
- package/dist/scripting/builtins/native-channels.d.ts.map +0 -1
- package/dist/scripting/builtins/native-collectors.d.ts +0 -2
- package/dist/scripting/builtins/native-collectors.d.ts.map +0 -1
- package/dist/scripting/builtins/native-expressions.d.ts +0 -2
- package/dist/scripting/builtins/native-expressions.d.ts.map +0 -1
- package/dist/scripting/builtins/native-invites.d.ts +0 -2
- package/dist/scripting/builtins/native-invites.d.ts.map +0 -1
- package/dist/scripting/builtins/native-messages.d.ts +0 -2
- package/dist/scripting/builtins/native-messages.d.ts.map +0 -1
- package/dist/scripting/builtins/native-roles.d.ts +0 -2
- package/dist/scripting/builtins/native-roles.d.ts.map +0 -1
- package/dist/scripting/builtins/native-threads.d.ts +0 -2
- package/dist/scripting/builtins/native-threads.d.ts.map +0 -1
- package/dist/scripting/builtins/native-users.d.ts +0 -2
- package/dist/scripting/builtins/native-users.d.ts.map +0 -1
- package/dist/scripting/builtins/native-webhooks.d.ts +0 -2
- package/dist/scripting/builtins/native-webhooks.d.ts.map +0 -1
- package/dist/scripting/builtins/payload.d.ts.map +0 -1
- package/dist/scripting/builtins/payload.js.map +0 -1
- package/dist/scripting/builtins/resource-extras.d.ts +0 -2
- package/dist/scripting/builtins/resource-extras.d.ts.map +0 -1
- package/dist/scripting/builtins/schedule.d.ts +0 -2
- package/dist/scripting/builtins/schedule.d.ts.map +0 -1
- package/dist/scripting/builtins/storage.d.ts +0 -2
- package/dist/scripting/builtins/storage.d.ts.map +0 -1
- package/dist/scripting/builtins/values.d.ts +0 -2
- package/dist/scripting/builtins/values.d.ts.map +0 -1
- package/dist/scripting/builtins/values.js.map +0 -1
- package/dist/scripting/canvas-execution.d.ts.map +0 -1
- package/dist/scripting/canvas-execution.js.map +0 -1
- package/dist/scripting/control-flow.d.ts.map +0 -1
- package/dist/scripting/control-flow.js.map +0 -1
- package/dist/scripting/evaluator.d.ts.map +0 -1
- package/dist/scripting/evaluator.js.map +0 -1
- package/dist/scripting/limits.d.ts.map +0 -1
- package/dist/scripting/limits.js.map +0 -1
- package/dist/scripting/parser.d.ts.map +0 -1
- package/dist/scripting/parser.js.map +0 -1
- package/dist/scripting/regex.d.ts.map +0 -1
- package/dist/scripting/regex.js.map +0 -1
- package/dist/scripting/registry.d.ts.map +0 -1
- package/dist/scripting/registry.js.map +0 -1
- package/dist/scripting/runtime.d.ts.map +0 -1
- package/dist/scripting/runtime.js.map +0 -1
- package/dist/scripting/types.d.ts.map +0 -1
- package/dist/scripting/types.js.map +0 -1
- package/dist/scripting/values.d.ts.map +0 -1
- package/dist/scripting/values.js.map +0 -1
- package/src/parser.ts +0 -2
- package/src/runtime.ts +0 -4
- /package/dist/{scripting → functions}/builtins/arguments.d.ts +0 -0
- /package/dist/{scripting → functions}/builtins/arguments.js +0 -0
- /package/dist/{scripting → functions}/builtins/context.js +0 -0
- /package/dist/{scripting → functions}/builtins/definition.js +0 -0
- /package/dist/{scripting → functions}/builtins/events.js +0 -0
- /package/dist/{scripting → functions}/builtins/index.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/common.d.ts +0 -0
- /package/dist/{scripting → functions}/builtins/language/common.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/decimals.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/index.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/numbers.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/objects.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/sort.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/state.js +0 -0
- /package/dist/{scripting → functions}/builtins/language/texts.js +0 -0
- /package/dist/{scripting → functions}/builtins/messages.js +0 -0
- /package/dist/{scripting → functions}/builtins/moderation.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-channels.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-collectors.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-expressions.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-invites.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-messages.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-roles.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-threads.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-users.js +0 -0
- /package/dist/{scripting → functions}/builtins/native-webhooks.js +0 -0
- /package/dist/{scripting → functions}/builtins/resource-extras.js +0 -0
- /package/dist/{scripting → functions}/builtins/schedule.js +0 -0
- /package/dist/{scripting → functions}/builtins/storage.js +0 -0
- /package/dist/{scripting → functions/runtime}/ast.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/ast.js +0 -0
- /package/dist/{scripting → functions/runtime}/canvas-execution.js +0 -0
- /package/dist/{scripting → functions/runtime}/control-flow.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/control-flow.js +0 -0
- /package/dist/{scripting → functions/runtime}/limits.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/parser.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/regex-worker.mjs +0 -0
- /package/dist/{scripting → functions/runtime}/regex.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/registry.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/types.js +0 -0
- /package/dist/{scripting → functions/runtime}/values.d.ts +0 -0
- /package/dist/{scripting → functions/runtime}/values.js +0 -0
- /package/docs/{FUNCTIONS.md → functions/FUNCTIONS.md} +0 -0
- /package/docs/{LANGUAGE-EXTENSIONS.md → functions/LANGUAGE-EXTENSIONS.md} +0 -0
- /package/src/{scripting → functions}/builtins/arguments.ts +0 -0
- /package/src/{scripting → functions}/builtins/events.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/common.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/decimals.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/numbers.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/objects.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/sort.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/state.ts +0 -0
- /package/src/{scripting → functions}/builtins/language/texts.ts +0 -0
- /package/src/{scripting → functions}/builtins/messages.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-collectors.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-expressions.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-invites.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-messages.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-threads.ts +0 -0
- /package/src/{scripting → functions}/builtins/native-webhooks.ts +0 -0
- /package/src/{scripting → functions}/builtins/schedule.ts +0 -0
- /package/src/{scripting → functions}/builtins/storage.ts +0 -0
- /package/src/{scripting → functions/runtime}/ast.ts +0 -0
- /package/src/{scripting → functions/runtime}/control-flow.ts +0 -0
- /package/src/{scripting → functions/runtime}/regex-worker.mjs +0 -0
- /package/src/{scripting → functions/runtime}/values.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isAbove } from '../domain/moderation.js';
|
|
2
2
|
import { hasPermission, permission } from '../domain/permissions.js';
|
|
3
3
|
import { emojiBatch } from '../domain/resource-batches.js';
|
|
4
|
-
import { GuardError } from '../shared/errors.js';
|
|
4
|
+
import { GuardError, YuzuhaError } from '../shared/errors.js';
|
|
5
5
|
import { AuthorizationService, requireGuild } from './authorization.js';
|
|
6
6
|
export function bindAuthorizedResources(source, transport, scope) {
|
|
7
7
|
const authorization = new AuthorizationService(transport, scope);
|
|
@@ -58,6 +58,13 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
58
58
|
await allowed(flag, id);
|
|
59
59
|
return target;
|
|
60
60
|
};
|
|
61
|
+
const dm = async (id) => {
|
|
62
|
+
const target = await source.channels.get(id);
|
|
63
|
+
if (target.guildID !== null || !target.recipientIDs?.includes(scope.authorID)) {
|
|
64
|
+
throw new GuardError('Esta operação exige um canal de DM do qual o autor participe.');
|
|
65
|
+
}
|
|
66
|
+
return target;
|
|
67
|
+
};
|
|
61
68
|
const parent = async (id) => {
|
|
62
69
|
const target = await channel(id);
|
|
63
70
|
if (target.type !== 4)
|
|
@@ -73,8 +80,56 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
73
80
|
guild(guildID);
|
|
74
81
|
await allowed('ManageExpressions');
|
|
75
82
|
};
|
|
76
|
-
return { users: source.users,
|
|
77
|
-
|
|
83
|
+
return { users: Object.assign(Object.create(source.users), {
|
|
84
|
+
async transferOwnership(guildID, userID) {
|
|
85
|
+
requireGuild(guildID);
|
|
86
|
+
const [author] = await actors();
|
|
87
|
+
if (!author.owner)
|
|
88
|
+
throw new GuardError('Apenas o dono do servidor pode transferir a propriedade.');
|
|
89
|
+
const target = await source.users.member(guildID, userID);
|
|
90
|
+
if (target.bot)
|
|
91
|
+
throw new GuardError('A propriedade não pode ser transferida para um bot.');
|
|
92
|
+
return source.users.transferOwnership(guildID, userID);
|
|
93
|
+
},
|
|
94
|
+
}), messages: Object.assign(Object.create(source.messages), {
|
|
95
|
+
async deleteAttachment(channelID, messageID, attachmentID) {
|
|
96
|
+
const message = await source.messages.fetch(channelID, messageID);
|
|
97
|
+
if (message.authorID !== scope.authorID)
|
|
98
|
+
await authorization.requirePermission('ManageMessages', false, undefined, channelID);
|
|
99
|
+
if (message.authorID !== transport.botID)
|
|
100
|
+
await authorization.requirePermission('ManageMessages', true, undefined, channelID);
|
|
101
|
+
return source.messages.deleteAttachment(channelID, messageID, attachmentID);
|
|
102
|
+
},
|
|
103
|
+
async bulkDelete(channelID, messageIDs) {
|
|
104
|
+
await channel(channelID, 'ManageMessages');
|
|
105
|
+
const ids = [...new Set(messageIDs)];
|
|
106
|
+
if (!ids.length)
|
|
107
|
+
throw new GuardError('Informe ao menos uma mensagem para apagar.');
|
|
108
|
+
if (ids.length > 100)
|
|
109
|
+
throw new YuzuhaError('BULK_DELETE_LIMIT', 'Exclusão em massa aceita no máximo 100 mensagens por chamada.');
|
|
110
|
+
return source.messages.bulkDelete(channelID, ids);
|
|
111
|
+
},
|
|
112
|
+
async bulkDeleteOwn(channelID) { await channel(channelID, 'SendMessages'); return source.messages.bulkDeleteOwn(channelID); },
|
|
113
|
+
async acknowledgePins(channelID) { await channel(channelID, 'ReadMessageHistory'); return source.messages.acknowledgePins(channelID); },
|
|
114
|
+
async clearReadState(channelID) { await channel(channelID, 'ReadMessageHistory'); return source.messages.clearReadState(channelID); },
|
|
115
|
+
async purgeDM(channelID) {
|
|
116
|
+
const channel = await source.channels.get(channelID);
|
|
117
|
+
if (channel.type === 999) {
|
|
118
|
+
throw new GuardError('O canal de anotações pessoais só pode ser esvaziado por bot.resources.messages.purgeDM.');
|
|
119
|
+
}
|
|
120
|
+
await dm(channelID);
|
|
121
|
+
return source.messages.purgeDM(channelID);
|
|
122
|
+
},
|
|
123
|
+
}), collectors: source.collectors,
|
|
124
|
+
threads: Object.assign(Object.create(source.threads), {
|
|
125
|
+
async setLocked(threadID, locked, reason) {
|
|
126
|
+
await channel(threadID);
|
|
127
|
+
return source.threads.setLocked(threadID, locked, reason);
|
|
128
|
+
},
|
|
129
|
+
async editSelf(threadID, input) { await channel(threadID, 'ViewChannel'); return source.threads.editSelf(threadID, input); },
|
|
130
|
+
async editDefaults(parentID, input) { await channel(parentID); return source.threads.editDefaults(parentID, input); },
|
|
131
|
+
}), invites: source.invites, gateway: source.gateway,
|
|
132
|
+
instance: source.instance, self: source.self, cache: source.cache, expressions: {
|
|
78
133
|
emoji: source.expressions.emoji.bind(source.expressions), emojis: source.expressions.emojis.bind(source.expressions),
|
|
79
134
|
sticker: source.expressions.sticker.bind(source.expressions), stickers: source.expressions.stickers.bind(source.expressions),
|
|
80
135
|
async createEmoji(...args) {
|
|
@@ -93,6 +148,10 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
93
148
|
await expressions(args[0]);
|
|
94
149
|
return source.expressions.createSticker(...args);
|
|
95
150
|
},
|
|
151
|
+
async createStickersBulk(...args) {
|
|
152
|
+
await expressions(args[0]);
|
|
153
|
+
return source.expressions.createStickersBulk(...args);
|
|
154
|
+
},
|
|
96
155
|
async editSticker(...args) {
|
|
97
156
|
await expressions(args[0]);
|
|
98
157
|
return source.expressions.editSticker(...args);
|
|
@@ -143,6 +202,18 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
143
202
|
const target = await role(guildID, query);
|
|
144
203
|
return source.roles.delete(guildID, target.id, reason);
|
|
145
204
|
},
|
|
205
|
+
async setRoleHoistPositions(guildID, updates) {
|
|
206
|
+
guild(guildID);
|
|
207
|
+
await allowed('ManageRoles');
|
|
208
|
+
for (const update of updates)
|
|
209
|
+
await roleHierarchy(await role(guildID, update.id));
|
|
210
|
+
return source.roles.setRoleHoistPositions(guildID, updates);
|
|
211
|
+
},
|
|
212
|
+
async resetRoleHoistPositions(guildID) {
|
|
213
|
+
guild(guildID);
|
|
214
|
+
await allowed('ManageRoles');
|
|
215
|
+
return source.roles.resetRoleHoistPositions(guildID);
|
|
216
|
+
},
|
|
146
217
|
async move(guildID, query, position) {
|
|
147
218
|
const target = await role(guildID, query);
|
|
148
219
|
if (!Number.isSafeInteger(position) || position < 1)
|
|
@@ -168,8 +239,27 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
168
239
|
return source.channels.edit(id, input);
|
|
169
240
|
},
|
|
170
241
|
async delete(id, reason) { await channel(id); return source.channels.delete(id, reason); },
|
|
242
|
+
async addRecipient(id, userID) {
|
|
243
|
+
const target = await dm(id);
|
|
244
|
+
if (!target.ownerID || target.ownerID !== scope.authorID) {
|
|
245
|
+
throw new GuardError('Apenas o dono do grupo pode adicionar participantes.');
|
|
246
|
+
}
|
|
247
|
+
return source.channels.addRecipient(id, userID);
|
|
248
|
+
},
|
|
249
|
+
async removeRecipient(id, userID, options) {
|
|
250
|
+
const target = await dm(id);
|
|
251
|
+
if (userID !== scope.authorID && (!target.ownerID || target.ownerID !== scope.authorID)) {
|
|
252
|
+
throw new GuardError('Apenas o dono do grupo pode remover outros participantes.');
|
|
253
|
+
}
|
|
254
|
+
return source.channels.removeRecipient(id, userID, options);
|
|
255
|
+
},
|
|
171
256
|
async setSlowmode(id, seconds, reason) { await channel(id); return source.channels.setSlowmode(id, seconds, reason); },
|
|
257
|
+
slowmode: source.channels.slowmode.bind(source.channels),
|
|
258
|
+
async sendTyping(id) { await channel(id, 'SendMessages'); return source.channels.sendTyping(id); },
|
|
259
|
+
rtcRegions: source.channels.rtcRegions.bind(source.channels),
|
|
172
260
|
async move(id, position) { await channel(id); return source.channels.move(id, position); },
|
|
261
|
+
async editThreadDefaults(id, input) { await channel(id); return source.channels.editThreadDefaults(id, input); },
|
|
262
|
+
async setDefaultForumLayout(id, layout, reason) { await channel(id); return source.channels.setDefaultForumLayout(id, layout, reason); },
|
|
173
263
|
async setCategory(id, parentID, reason) {
|
|
174
264
|
await channel(id);
|
|
175
265
|
if (parentID)
|
|
@@ -202,6 +292,8 @@ export function bindAuthorizedResources(source, transport, scope) {
|
|
|
202
292
|
async create(id, name, reason) { await channel(id, 'ManageWebhooks'); return source.webhooks.create(id, name, reason); },
|
|
203
293
|
async list(id) { await channel(id, 'ManageWebhooks'); return source.webhooks.list(id); },
|
|
204
294
|
async send(id, token, input) { await webhook(id); return source.webhooks.send(id, token, input); },
|
|
295
|
+
async editMessage(id, token, messageID, input) { await webhook(id); return source.webhooks.editMessage(id, token, messageID, input); },
|
|
296
|
+
async deleteMessage(id, token, messageID) { await webhook(id); return source.webhooks.deleteMessage(id, token, messageID); },
|
|
205
297
|
async edit(id, token, name) { await webhook(id); return source.webhooks.edit(id, token, name); },
|
|
206
298
|
async delete(id, token) { await webhook(id); return source.webhooks.delete(id, token); },
|
|
207
299
|
} };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-authorization.js","sourceRoot":"","sources":["../../src/services/resource-authorization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModerationMember } from '../domain/moderation.js';\nimport { isAbove } from '../domain/moderation.js';\nimport { hasPermission, permission } from '../domain/permissions.js';\nimport { emojiBatch } from '../domain/resource-batches.js';\nimport type { Resources } from '../ports/resources.js';\nimport type { RoleInfo } from '../ports/resources/roles.js';\nimport type { Transport } from '../ports/transport.js';\nimport { GuardError } from '../shared/errors.js';\nimport { AuthorizationService, requireGuild } from './authorization.js';\nimport type { ActorScope } from './authorization.js';\n\nexport function bindAuthorizedResources(source: Resources, transport: Transport, scope: ActorScope): Resources {\n const authorization = new AuthorizationService(transport, scope);\n const guild = (id: string) => {\n if (id !== requireGuild(scope.guildID)) throw new GuardError('O recurso deve pertencer ao servidor atual.');\n return id;\n };\n const allowed = async (name: string, channelID?: string) => {\n await authorization.requirePermission(name, false, undefined, channelID);\n await authorization.requirePermission(name, true, undefined, channelID);\n };\n const actors = async (): Promise<[ModerationMember, ModerationMember]> => Promise.all([\n transport.member(requireGuild(scope.guildID), scope.authorID),\n transport.member(requireGuild(scope.guildID), transport.botID),\n ]);\n const permissions = async (names: string[] | undefined, channelID?: string) => {\n for (const name of names ?? []) {\n permission(name);\n await allowed(name, channelID);\n }\n };\n const roleHierarchy = async (role: RoleInfo, everyone = false) => {\n if (role.managed !== false || (!everyone && role.id === scope.guildID)) {\n throw new GuardError('Cargos gerenciados e @everyone não podem ser alterados por esta operação.');\n }\n if (everyone && role.id === scope.guildID) return;\n const [author, bot] = await actors();\n const target = { id: role.id, owner: false, rank: role.position, topRoleID: role.id, permissions: 0n };\n if ((!author.owner && !isAbove(author, target)) || !isAbove(bot, target)) {\n throw new GuardError('O cargo deve estar abaixo dos cargos do autor e do bot.');\n }\n };\n const memberHierarchy = async (id: string) => {\n const [author, bot] = await actors();\n const target = await transport.member(requireGuild(scope.guildID), id);\n if (target.owner || (id !== author.id && !author.owner && !isAbove(author, target))\n || (id !== bot.id && !isAbove(bot, target))) {\n throw new GuardError('O membro deve estar abaixo dos cargos do autor e do bot.');\n }\n };\n const role = async (guildID: string, query: string) => {\n guild(guildID);\n await allowed('ManageRoles');\n const target = await source.roles.resolve(guildID, query);\n await roleHierarchy(target);\n return target;\n };\n const channel = async (id: string, flag = 'ManageChannels') => {\n requireGuild(scope.guildID);\n const target = await source.channels.get(id);\n guild(target.guildID ?? '');\n await allowed(flag, id);\n return target;\n };\n const parent = async (id: string) => {\n const target = await channel(id);\n if (target.type !== 4) throw new GuardError('O canal pai deve ser uma categoria.');\n };\n const webhook = async (id: string) => {\n requireGuild(scope.guildID);\n const target = await source.webhooks.fetch(id);\n guild(target.guildID);\n await channel(target.channelID, 'ManageWebhooks');\n };\n const expressions = async (guildID: string) => {\n guild(guildID);\n await allowed('ManageExpressions');\n };\n return { users: source.users, messages: source.messages, collectors: source.collectors,\n threads: source.threads, invites: source.invites, expressions: {\n emoji: source.expressions.emoji.bind(source.expressions), emojis: source.expressions.emojis.bind(source.expressions),\n sticker: source.expressions.sticker.bind(source.expressions), stickers: source.expressions.stickers.bind(source.expressions),\n async createEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.createEmoji(...args);\n },\n async editEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.editEmoji(...args);\n },\n async deleteEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.deleteEmoji(...args);\n },\n async createSticker(...args) {\n await expressions(args[0]);\n return source.expressions.createSticker(...args);\n },\n async editSticker(...args) {\n await expressions(args[0]);\n return source.expressions.editSticker(...args);\n },\n async deleteSticker(...args) {\n await expressions(args[0]);\n return source.expressions.deleteSticker(...args);\n },\n async cloneEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.cloneEmoji(...args);\n },\n async cloneSticker(...args) {\n await expressions(args[0]);\n return source.expressions.cloneSticker(...args);\n },\n async createEmojisBulk(guildID, inputs) {\n const batch = emojiBatch(inputs);\n await expressions(guildID);\n return source.expressions.createEmojisBulk(guildID, batch);\n },\n }, roles: {\n resolve: source.roles.resolve.bind(source.roles), list: source.roles.list.bind(source.roles),\n has: source.roles.has.bind(source.roles),\n async add(guildID, userID, query) {\n const target = await role(guildID, query);\n await memberHierarchy(userID);\n await permissionsFromRole(target);\n return source.roles.add(guildID, userID, target.id);\n },\n async remove(guildID, userID, query) {\n const target = await role(guildID, query);\n await memberHierarchy(userID);\n return source.roles.remove(guildID, userID, target.id);\n },\n async create(guildID, input) {\n guild(guildID);\n await allowed('ManageRoles');\n await permissions(input.permissions);\n return source.roles.create(guildID, input);\n },\n async edit(guildID, query, input) {\n const target = await role(guildID, query);\n await permissions(input.permissions);\n return source.roles.edit(guildID, target.id, input);\n },\n async delete(guildID, query, reason) {\n const target = await role(guildID, query);\n return source.roles.delete(guildID, target.id, reason);\n },\n async move(guildID, query, position) {\n const target = await role(guildID, query);\n if (!Number.isSafeInteger(position) || position < 1) throw new GuardError('Posição de cargo deve ser um inteiro maior que zero.');\n await roleHierarchy({ ...target, position });\n return source.roles.move(guildID, target.id, position);\n },\n }, channels: {\n get: source.channels.get.bind(source.channels), list: source.channels.list.bind(source.channels),\n permissionsFor: source.channels.permissionsFor.bind(source.channels),\n async create(guildID, input) {\n guild(guildID);\n if (input.parentID) await parent(input.parentID);\n else await allowed('ManageChannels');\n return source.channels.create(guildID, input);\n },\n async edit(id, input) {\n await channel(id);\n if (input.parentID) await parent(input.parentID);\n return source.channels.edit(id, input);\n },\n async delete(id, reason) { await channel(id); return source.channels.delete(id, reason); },\n async setSlowmode(id, seconds, reason) { await channel(id); return source.channels.setSlowmode(id, seconds, reason); },\n async move(id, position) { await channel(id); return source.channels.move(id, position); },\n async setCategory(id, parentID, reason) {\n await channel(id);\n if (parentID) await parent(parentID);\n return source.channels.setCategory(id, parentID, reason);\n },\n async overwrite(id, targetID, input) {\n await channel(id, 'ManageRoles');\n const roles = await source.roles.list(requireGuild(scope.guildID));\n const targetRole = roles.find(candidate => candidate.id === targetID);\n if (input.type === 'role' || (input.type === undefined && targetRole)) {\n if (!targetRole) throw new GuardError('Cargo não encontrado no servidor atual.');\n await roleHierarchy(targetRole, true);\n } else await memberHierarchy(targetID);\n await permissions(input.allow, id);\n await permissions(input.deny, id);\n return source.channels.overwrite(id, targetID, { ...input, type: targetRole && input.type !== 'member' ? 'role' : 'member' });\n },\n }, webhooks: {\n async fetch(id) {\n requireGuild(scope.guildID);\n const target = await source.webhooks.fetch(id);\n guild(target.guildID);\n await channel(target.channelID, 'ManageWebhooks');\n return target;\n },\n async create(id, name, reason) { await channel(id, 'ManageWebhooks'); return source.webhooks.create(id, name, reason); },\n async list(id) { await channel(id, 'ManageWebhooks'); return source.webhooks.list(id); },\n async send(id, token, input) { await webhook(id); return source.webhooks.send(id, token, input); },\n async edit(id, token, name) { await webhook(id); return source.webhooks.edit(id, token, name); },\n async delete(id, token) { await webhook(id); return source.webhooks.delete(id, token); },\n } };\n\n async function permissionsFromRole(target: RoleInfo) {\n const [author, bot] = await actors();\n const bits = BigInt(target.permissions);\n for (const actor of [author, bot]) {\n if (!hasPermission(actor.permissions, 'Administrator', actor.owner) && (bits & actor.permissions) !== bits) {\n throw new GuardError('O cargo contém permissões que o autor ou o bot não possui.');\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resource-authorization.js","sourceRoot":"","sources":["../../src/services/resource-authorization.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModerationMember } from '../domain/moderation.js';\nimport { isAbove } from '../domain/moderation.js';\nimport { hasPermission, permission } from '../domain/permissions.js';\nimport { emojiBatch } from '../domain/resource-batches.js';\nimport type { Resources } from '../ports/resources.js';\nimport type { RoleInfo } from '../ports/resources/roles.js';\nimport type { ThreadDefaultsInput, ThreadSelfEditInput } from '../ports/resources/threads.js';\nimport type { Transport } from '../ports/transport.js';\nimport { GuardError, YuzuhaError } from '../shared/errors.js';\nimport { AuthorizationService, requireGuild } from './authorization.js';\nimport type { ActorScope } from './authorization.js';\n\nexport function bindAuthorizedResources(source: Resources, transport: Transport, scope: ActorScope): Resources {\n const authorization = new AuthorizationService(transport, scope);\n const guild = (id: string) => {\n if (id !== requireGuild(scope.guildID)) throw new GuardError('O recurso deve pertencer ao servidor atual.');\n return id;\n };\n const allowed = async (name: string, channelID?: string) => {\n await authorization.requirePermission(name, false, undefined, channelID);\n await authorization.requirePermission(name, true, undefined, channelID);\n };\n const actors = async (): Promise<[ModerationMember, ModerationMember]> => Promise.all([\n transport.member(requireGuild(scope.guildID), scope.authorID),\n transport.member(requireGuild(scope.guildID), transport.botID),\n ]);\n const permissions = async (names: string[] | undefined, channelID?: string) => {\n for (const name of names ?? []) {\n permission(name);\n await allowed(name, channelID);\n }\n };\n const roleHierarchy = async (role: RoleInfo, everyone = false) => {\n if (role.managed !== false || (!everyone && role.id === scope.guildID)) {\n throw new GuardError('Cargos gerenciados e @everyone não podem ser alterados por esta operação.');\n }\n if (everyone && role.id === scope.guildID) return;\n const [author, bot] = await actors();\n const target = { id: role.id, owner: false, rank: role.position, topRoleID: role.id, permissions: 0n };\n if ((!author.owner && !isAbove(author, target)) || !isAbove(bot, target)) {\n throw new GuardError('O cargo deve estar abaixo dos cargos do autor e do bot.');\n }\n };\n const memberHierarchy = async (id: string) => {\n const [author, bot] = await actors();\n const target = await transport.member(requireGuild(scope.guildID), id);\n if (target.owner || (id !== author.id && !author.owner && !isAbove(author, target))\n || (id !== bot.id && !isAbove(bot, target))) {\n throw new GuardError('O membro deve estar abaixo dos cargos do autor e do bot.');\n }\n };\n const role = async (guildID: string, query: string) => {\n guild(guildID);\n await allowed('ManageRoles');\n const target = await source.roles.resolve(guildID, query);\n await roleHierarchy(target);\n return target;\n };\n const channel = async (id: string, flag = 'ManageChannels') => {\n requireGuild(scope.guildID);\n const target = await source.channels.get(id);\n guild(target.guildID ?? '');\n await allowed(flag, id);\n return target;\n };\n const dm = async (id: string) => {\n const target = await source.channels.get(id);\n if (target.guildID !== null || !target.recipientIDs?.includes(scope.authorID)) {\n throw new GuardError('Esta operação exige um canal de DM do qual o autor participe.');\n }\n return target;\n };\n const parent = async (id: string) => {\n const target = await channel(id);\n if (target.type !== 4) throw new GuardError('O canal pai deve ser uma categoria.');\n };\n const webhook = async (id: string) => {\n requireGuild(scope.guildID);\n const target = await source.webhooks.fetch(id);\n guild(target.guildID);\n await channel(target.channelID, 'ManageWebhooks');\n };\n const expressions = async (guildID: string) => {\n guild(guildID);\n await allowed('ManageExpressions');\n };\n return { users: Object.assign(Object.create(source.users), {\n async transferOwnership(guildID: string, userID: string) {\n requireGuild(guildID);\n const [author] = await actors();\n if (!author.owner) throw new GuardError('Apenas o dono do servidor pode transferir a propriedade.');\n const target = await source.users.member(guildID, userID);\n if (target.bot) throw new GuardError('A propriedade não pode ser transferida para um bot.');\n return source.users.transferOwnership(guildID, userID);\n },\n }), messages: Object.assign(Object.create(source.messages), {\n async deleteAttachment(channelID: string, messageID: string, attachmentID: string) {\n const message = await source.messages.fetch(channelID, messageID);\n if (message.authorID !== scope.authorID) await authorization.requirePermission('ManageMessages', false, undefined, channelID);\n if (message.authorID !== transport.botID) await authorization.requirePermission('ManageMessages', true, undefined, channelID);\n return source.messages.deleteAttachment(channelID, messageID, attachmentID);\n },\n async bulkDelete(channelID: string, messageIDs: string[]) {\n await channel(channelID, 'ManageMessages');\n const ids = [...new Set(messageIDs)];\n if (!ids.length) throw new GuardError('Informe ao menos uma mensagem para apagar.');\n if (ids.length > 100) throw new YuzuhaError('BULK_DELETE_LIMIT', 'Exclusão em massa aceita no máximo 100 mensagens por chamada.');\n return source.messages.bulkDelete(channelID, ids);\n },\n async bulkDeleteOwn(channelID: string) { await channel(channelID, 'SendMessages'); return source.messages.bulkDeleteOwn(channelID); },\n async acknowledgePins(channelID: string) { await channel(channelID, 'ReadMessageHistory'); return source.messages.acknowledgePins(channelID); },\n async clearReadState(channelID: string) { await channel(channelID, 'ReadMessageHistory'); return source.messages.clearReadState(channelID); },\n async purgeDM(channelID: string) {\n const channel = await source.channels.get(channelID);\n if (channel.type === 999) {\n throw new GuardError('O canal de anotações pessoais só pode ser esvaziado por bot.resources.messages.purgeDM.');\n }\n await dm(channelID);\n return source.messages.purgeDM(channelID);\n },\n }), collectors: source.collectors,\n threads: Object.assign(Object.create(source.threads), {\n async setLocked(threadID: string, locked: boolean, reason?: string) {\n await channel(threadID);\n return source.threads.setLocked(threadID, locked, reason);\n },\n async editSelf(threadID: string, input: ThreadSelfEditInput) { await channel(threadID, 'ViewChannel'); return source.threads.editSelf(threadID, input); },\n async editDefaults(parentID: string, input: ThreadDefaultsInput) { await channel(parentID); return source.threads.editDefaults(parentID, input); },\n }), invites: source.invites, gateway: source.gateway,\n instance: source.instance, self: source.self, cache: source.cache, expressions: {\n emoji: source.expressions.emoji.bind(source.expressions), emojis: source.expressions.emojis.bind(source.expressions),\n sticker: source.expressions.sticker.bind(source.expressions), stickers: source.expressions.stickers.bind(source.expressions),\n async createEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.createEmoji(...args);\n },\n async editEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.editEmoji(...args);\n },\n async deleteEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.deleteEmoji(...args);\n },\n async createSticker(...args) {\n await expressions(args[0]);\n return source.expressions.createSticker(...args);\n },\n async createStickersBulk(...args) {\n await expressions(args[0]);\n return source.expressions.createStickersBulk(...args);\n },\n async editSticker(...args) {\n await expressions(args[0]);\n return source.expressions.editSticker(...args);\n },\n async deleteSticker(...args) {\n await expressions(args[0]);\n return source.expressions.deleteSticker(...args);\n },\n async cloneEmoji(...args) {\n await expressions(args[0]);\n return source.expressions.cloneEmoji(...args);\n },\n async cloneSticker(...args) {\n await expressions(args[0]);\n return source.expressions.cloneSticker(...args);\n },\n async createEmojisBulk(guildID, inputs) {\n const batch = emojiBatch(inputs);\n await expressions(guildID);\n return source.expressions.createEmojisBulk(guildID, batch);\n },\n }, roles: {\n resolve: source.roles.resolve.bind(source.roles), list: source.roles.list.bind(source.roles),\n has: source.roles.has.bind(source.roles),\n async add(guildID, userID, query) {\n const target = await role(guildID, query);\n await memberHierarchy(userID);\n await permissionsFromRole(target);\n return source.roles.add(guildID, userID, target.id);\n },\n async remove(guildID, userID, query) {\n const target = await role(guildID, query);\n await memberHierarchy(userID);\n return source.roles.remove(guildID, userID, target.id);\n },\n async create(guildID, input) {\n guild(guildID);\n await allowed('ManageRoles');\n await permissions(input.permissions);\n return source.roles.create(guildID, input);\n },\n async edit(guildID, query, input) {\n const target = await role(guildID, query);\n await permissions(input.permissions);\n return source.roles.edit(guildID, target.id, input);\n },\n async delete(guildID, query, reason) {\n const target = await role(guildID, query);\n return source.roles.delete(guildID, target.id, reason);\n },\n async setRoleHoistPositions(guildID: string, updates: { id: string; position: number | null }[]) {\n guild(guildID);\n await allowed('ManageRoles');\n for (const update of updates) await roleHierarchy(await role(guildID, update.id));\n return source.roles.setRoleHoistPositions(guildID, updates);\n },\n async resetRoleHoistPositions(guildID: string) {\n guild(guildID);\n await allowed('ManageRoles');\n return source.roles.resetRoleHoistPositions(guildID);\n },\n async move(guildID, query, position) {\n const target = await role(guildID, query);\n if (!Number.isSafeInteger(position) || position < 1) throw new GuardError('Posição de cargo deve ser um inteiro maior que zero.');\n await roleHierarchy({ ...target, position });\n return source.roles.move(guildID, target.id, position);\n },\n }, channels: {\n get: source.channels.get.bind(source.channels), list: source.channels.list.bind(source.channels),\n permissionsFor: source.channels.permissionsFor.bind(source.channels),\n async create(guildID, input) {\n guild(guildID);\n if (input.parentID) await parent(input.parentID);\n else await allowed('ManageChannels');\n return source.channels.create(guildID, input);\n },\n async edit(id, input) {\n await channel(id);\n if (input.parentID) await parent(input.parentID);\n return source.channels.edit(id, input);\n },\n async delete(id, reason) { await channel(id); return source.channels.delete(id, reason); },\n async addRecipient(id, userID) {\n const target = await dm(id);\n if (!target.ownerID || target.ownerID !== scope.authorID) {\n throw new GuardError('Apenas o dono do grupo pode adicionar participantes.');\n }\n return source.channels.addRecipient(id, userID);\n },\n async removeRecipient(id, userID, options) {\n const target = await dm(id);\n if (userID !== scope.authorID && (!target.ownerID || target.ownerID !== scope.authorID)) {\n throw new GuardError('Apenas o dono do grupo pode remover outros participantes.');\n }\n return source.channels.removeRecipient(id, userID, options);\n },\n async setSlowmode(id, seconds, reason) { await channel(id); return source.channels.setSlowmode(id, seconds, reason); },\n slowmode: source.channels.slowmode.bind(source.channels),\n async sendTyping(id) { await channel(id, 'SendMessages'); return source.channels.sendTyping(id); },\n rtcRegions: source.channels.rtcRegions.bind(source.channels),\n async move(id, position) { await channel(id); return source.channels.move(id, position); },\n async editThreadDefaults(id, input) { await channel(id); return source.channels.editThreadDefaults(id, input); },\n async setDefaultForumLayout(id, layout, reason) { await channel(id); return source.channels.setDefaultForumLayout(id, layout, reason); },\n async setCategory(id, parentID, reason) {\n await channel(id);\n if (parentID) await parent(parentID);\n return source.channels.setCategory(id, parentID, reason);\n },\n async overwrite(id, targetID, input) {\n await channel(id, 'ManageRoles');\n const roles = await source.roles.list(requireGuild(scope.guildID));\n const targetRole = roles.find(candidate => candidate.id === targetID);\n if (input.type === 'role' || (input.type === undefined && targetRole)) {\n if (!targetRole) throw new GuardError('Cargo não encontrado no servidor atual.');\n await roleHierarchy(targetRole, true);\n } else await memberHierarchy(targetID);\n await permissions(input.allow, id);\n await permissions(input.deny, id);\n return source.channels.overwrite(id, targetID, { ...input, type: targetRole && input.type !== 'member' ? 'role' : 'member' });\n },\n }, webhooks: {\n async fetch(id) {\n requireGuild(scope.guildID);\n const target = await source.webhooks.fetch(id);\n guild(target.guildID);\n await channel(target.channelID, 'ManageWebhooks');\n return target;\n },\n async create(id, name, reason) { await channel(id, 'ManageWebhooks'); return source.webhooks.create(id, name, reason); },\n async list(id) { await channel(id, 'ManageWebhooks'); return source.webhooks.list(id); },\n async send(id, token, input) { await webhook(id); return source.webhooks.send(id, token, input); },\n async editMessage(id, token, messageID, input) { await webhook(id); return source.webhooks.editMessage(id, token, messageID, input); },\n async deleteMessage(id, token, messageID) { await webhook(id); return source.webhooks.deleteMessage(id, token, messageID); },\n async edit(id, token, name) { await webhook(id); return source.webhooks.edit(id, token, name); },\n async delete(id, token) { await webhook(id); return source.webhooks.delete(id, token); },\n } };\n\n async function permissionsFromRole(target: RoleInfo) {\n const [author, bot] = await actors();\n const bits = BigInt(target.permissions);\n for (const actor of [author, bot]) {\n if (!hasPermission(actor.permissions, 'Administrator', actor.owner) && (bits & actor.permissions) !== bits) {\n throw new GuardError('O cargo contém permissões que o autor ou o bot não possui.');\n }\n }\n }\n}\n"]}
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC9G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;KAAG,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEvF,wBAAgB,aAAa,CAAC,SAAS,GAAE,qBAA0B,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
package/dist/testing.js
CHANGED
|
@@ -23,6 +23,10 @@ export function mockResources(overrides = {}) {
|
|
|
23
23
|
expressions: resource('expressions'),
|
|
24
24
|
threads: resource('threads'),
|
|
25
25
|
invites: resource('invites'),
|
|
26
|
+
gateway: resource('gateway'),
|
|
27
|
+
instance: resource('instance'),
|
|
28
|
+
self: resource('self'),
|
|
29
|
+
cache: resource('cache'),
|
|
26
30
|
};
|
|
27
31
|
}
|
|
28
32
|
export class MockTransport {
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingMessage, ModerationAction, ModerationMember, Payload, Transport } from './contracts.js';\nimport type { Resources } from './ports/resources.js';\nimport { PermissionFlags } from '@fluxerjs/core';\nimport { YuzuhaError } from './errors.js';\nimport type { VoiceModerationOptions } from './domain/moderation.js';\nimport { Yuzuha } from './framework/bot.js';\nimport type { DispatchResult, YuzuhaOptions } from './framework/options.js';\nimport { reportError } from './framework/reporting.js';\nimport type { Command } from './commands/definition.js';\nimport { MemoryStore } from './store.js';\nimport type { Store } from './ports/store.js';\n\n/**\n * Recursos nativos simulados para testes. Áreas não informadas falham ao ser usadas.\n */\nexport type MockResourceOverrides = { [K in keyof Resources]?: Partial<Resources[K]> };\n\nexport function mockResources(overrides: MockResourceOverrides = {}): Resources {\n const resource = <K extends keyof Resources>(area: K): Resources[K] => new Proxy(overrides[area] ?? {}, {\n get(target, property) {\n if (Reflect.has(target, property)) {\n const value = Reflect.get(target, property, target);\n return typeof value === 'function' ? value.bind(target) : value;\n }\n return () => { throw new YuzuhaError('NATIVE_UNAVAILABLE', `Recurso simulado ausente: ${area}.`); };\n },\n }) as Resources[K];\n return {\n users: resource('users'),\n roles: resource('roles'),\n channels: resource('channels'),\n messages: resource('messages'),\n collectors: resource('collectors'),\n webhooks: resource('webhooks'),\n expressions: resource('expressions'),\n threads: resource('threads'),\n invites: resource('invites'),\n };\n}\n\n\nexport class MockTransport implements Transport {\n private messageSequence = 0;\n botID = '999';\n ping = 12;\n readonly messages: { id: string; channelID: string; replyTo?: string; payload: Payload }[] = [];\n readonly actions: ({ guildID: string; action: ModerationAction; targetID: string; reason: string; duration?: number } & VoiceModerationOptions)[] = [];\n readonly members = new Map<string, ModerationMember>();\n readonly reactions: { channelID: string; messageID: string; emoji: string }[] = [];\n failAction = false;\n constructor() {\n this.setMember('100', { id: '1', owner: true, permissions: PermissionFlags.Administrator, rank: 100 });\n this.setMember('100', { id: this.botID, owner: false, permissions: PermissionFlags.Administrator, rank: 90 });\n this.setMember('100', { id: '2', owner: false, permissions: 0n, rank: 1 });\n }\n setMember(guildID: string, member: ModerationMember): void { this.members.set(JSON.stringify([guildID, member.id]), member); }\n async reply(message: IncomingMessage, payload: Payload): Promise<string> {\n const id = await this.send(message.channelID, payload); this.messages.find(item => item.id === id)!.replyTo = message.id; return id;\n }\n async send(channelID: string, payload: Payload): Promise<string> {\n const id = String(++this.messageSequence);\n this.messages.push({ id, channelID, payload: structuredClone(payload) }); return id;\n }\n async edit(channelID: string, messageID: string, payload: Payload): Promise<void> {\n const message = this.messages.find(m => m.id === messageID && m.channelID === channelID);\n if (!message) throw new YuzuhaError('NOT_FOUND', 'Mensagem não encontrada.');\n message.payload = structuredClone(payload);\n }\n async delete(channelID: string, messageID: string): Promise<void> {\n const i = this.messages.findIndex(m => m.id === messageID && m.channelID === channelID);\n if (i < 0) throw new YuzuhaError('NOT_FOUND', 'Mensagem não encontrada.');\n this.messages.splice(i, 1);\n }\n async react(channelID: string, messageID: string, emoji: string): Promise<void> { this.reactions.push({ channelID, messageID, emoji }); }\n async member(guildID: string, userID: string): Promise<ModerationMember> {\n const member = this.members.get(JSON.stringify([guildID, userID]));\n if (!member) throw new YuzuhaError('MEMBER_NOT_FOUND', 'Membro não encontrado.');\n return structuredClone(member);\n }\n async moderate(guildID: string, action: ModerationAction, targetID: string, reason: string, duration?: number, voice?: VoiceModerationOptions): Promise<void> {\n if (this.failAction) throw new YuzuhaError('API_ERROR', 'Falha simulada.');\n this.actions.push({ guildID, action, targetID, reason, duration, ...voice });\n }\n}\nlet sequence = 0;\nexport function mockMessage(content: string, overrides: Partial<IncomingMessage> = {}): IncomingMessage {\n return { id: String(++sequence), content, authorID: '1', authorName: 'Hory', authorBot: false,\n guildID: '100', channelID: '200', mentions: [...content.matchAll(/<@!?(\\d+)>/g)].map(m => m[1]!), ...overrides };\n}\n\nexport class TestClock {\n private time: number;\n\n constructor(now = Date.now()) {\n if (!Number.isSafeInteger(now) || now < 0) throw new YuzuhaError('TEST_CLOCK', 'O relógio exige um instante inteiro não negativo.');\n this.time = now;\n }\n\n readonly now = (): number => this.time;\n\n advance(milliseconds: number): number {\n if (!Number.isSafeInteger(milliseconds) || milliseconds < 0 || !Number.isSafeInteger(this.time + milliseconds)) {\n throw new YuzuhaError('TEST_CLOCK', 'O avanço exige milissegundos inteiros não negativos dentro do intervalo seguro.');\n }\n this.time += milliseconds;\n return this.time;\n }\n}\n\nexport interface TestBotOptions extends Omit<YuzuhaOptions, 'now' | 'transport' | 'resources'> {\n commands?: readonly Command[];\n transport?: MockTransport;\n resources?: MockResourceOverrides;\n message?: Partial<IncomingMessage>;\n now?: number;\n}\n\nexport interface TestBot {\n readonly bot: Yuzuha;\n readonly transport: MockTransport;\n readonly store: Store;\n readonly clock: TestClock;\n readonly messages: MockTransport['messages'];\n readonly errors: unknown[];\n readonly results: DispatchResult[];\n send(content: string, overrides?: Partial<IncomingMessage>): Promise<DispatchResult>;\n /** Advances the clock and awaits one scheduler pass, including scheduled handlers. */\n tick(milliseconds?: number): Promise<void>;\n destroy(): Promise<void>;\n close(): Promise<void>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n\n/** Creates an offline bot with isolated state, captured output and a manually advanced clock. */\nexport function createTestBot(options: TestBotOptions = {}): TestBot {\n const { commands = [], transport = new MockTransport(), resources, message, now,\n onError, ...botOptions } = options;\n const clock = new TestClock(now);\n const store = options.store ?? new MemoryStore();\n const errors: unknown[] = [], results: DispatchResult[] = [];\n const defaults = structuredClone(message ?? {});\n const bot = new Yuzuha({ ...botOptions, transport, resources: mockResources(resources), store,\n now: clock.now, http: options.http ?? false,\n onError: async (error, ctx) => { errors.push(error); await onError?.(error, ctx); },\n });\n try { for (const command of commands) bot.command(command); }\n catch (error) {\n void bot.destroy().catch(failure => reportError(bot.options, failure));\n throw error;\n }\n let messageID = 0;\n let closing = false;\n const destroy = (): Promise<void> => {\n closing = true;\n return bot.destroy();\n };\n return {\n bot, transport, store, clock, messages: transport.messages, errors, results,\n async send(content, overrides) {\n const outcome = await bot.handle(mockMessage(content, { ...defaults, id: String(++messageID), ...overrides }));\n results.push(outcome);\n return outcome;\n },\n async tick(milliseconds = 0) {\n if (closing || bot.signal.aborted) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n clock.advance(milliseconds);\n await bot.scheduler?.tick();\n },\n destroy, close: destroy, [Symbol.asyncDispose]: destroy,\n };\n}\nexport { MockMusicBackend, mockTrack } from './testing/music.js';\n"]}
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingMessage, ModerationAction, ModerationMember, Payload, Transport } from './contracts.js';\nimport type { Resources } from './ports/resources.js';\nimport { PermissionFlags } from '@fluxerjs/core';\nimport { YuzuhaError } from './errors.js';\nimport type { VoiceModerationOptions } from './domain/moderation.js';\nimport { Yuzuha } from './framework/bot.js';\nimport type { DispatchResult, YuzuhaOptions } from './framework/options.js';\nimport { reportError } from './framework/reporting.js';\nimport type { Command } from './commands/definition.js';\nimport { MemoryStore } from './store.js';\nimport type { Store } from './ports/store.js';\n\n/**\n * Recursos nativos simulados para testes. Áreas não informadas falham ao ser usadas.\n */\nexport type MockResourceOverrides = { [K in keyof Resources]?: Partial<Resources[K]> };\n\nexport function mockResources(overrides: MockResourceOverrides = {}): Resources {\n const resource = <K extends keyof Resources>(area: K): Resources[K] => new Proxy(overrides[area] ?? {}, {\n get(target, property) {\n if (Reflect.has(target, property)) {\n const value = Reflect.get(target, property, target);\n return typeof value === 'function' ? value.bind(target) : value;\n }\n return () => { throw new YuzuhaError('NATIVE_UNAVAILABLE', `Recurso simulado ausente: ${area}.`); };\n },\n }) as Resources[K];\n return {\n users: resource('users'),\n roles: resource('roles'),\n channels: resource('channels'),\n messages: resource('messages'),\n collectors: resource('collectors'),\n webhooks: resource('webhooks'),\n expressions: resource('expressions'),\n threads: resource('threads'),\n invites: resource('invites'),\n gateway: resource('gateway'),\n instance: resource('instance'),\n self: resource('self'),\n cache: resource('cache'),\n };\n}\n\n\nexport class MockTransport implements Transport {\n private messageSequence = 0;\n botID = '999';\n ping = 12;\n readonly messages: { id: string; channelID: string; replyTo?: string; payload: Payload }[] = [];\n readonly actions: ({ guildID: string; action: ModerationAction; targetID: string; reason: string; duration?: number } & VoiceModerationOptions)[] = [];\n readonly members = new Map<string, ModerationMember>();\n readonly reactions: { channelID: string; messageID: string; emoji: string }[] = [];\n failAction = false;\n constructor() {\n this.setMember('100', { id: '1', owner: true, permissions: PermissionFlags.Administrator, rank: 100 });\n this.setMember('100', { id: this.botID, owner: false, permissions: PermissionFlags.Administrator, rank: 90 });\n this.setMember('100', { id: '2', owner: false, permissions: 0n, rank: 1 });\n }\n setMember(guildID: string, member: ModerationMember): void { this.members.set(JSON.stringify([guildID, member.id]), member); }\n async reply(message: IncomingMessage, payload: Payload): Promise<string> {\n const id = await this.send(message.channelID, payload); this.messages.find(item => item.id === id)!.replyTo = message.id; return id;\n }\n async send(channelID: string, payload: Payload): Promise<string> {\n const id = String(++this.messageSequence);\n this.messages.push({ id, channelID, payload: structuredClone(payload) }); return id;\n }\n async edit(channelID: string, messageID: string, payload: Payload): Promise<void> {\n const message = this.messages.find(m => m.id === messageID && m.channelID === channelID);\n if (!message) throw new YuzuhaError('NOT_FOUND', 'Mensagem não encontrada.');\n message.payload = structuredClone(payload);\n }\n async delete(channelID: string, messageID: string): Promise<void> {\n const i = this.messages.findIndex(m => m.id === messageID && m.channelID === channelID);\n if (i < 0) throw new YuzuhaError('NOT_FOUND', 'Mensagem não encontrada.');\n this.messages.splice(i, 1);\n }\n async react(channelID: string, messageID: string, emoji: string): Promise<void> { this.reactions.push({ channelID, messageID, emoji }); }\n async member(guildID: string, userID: string): Promise<ModerationMember> {\n const member = this.members.get(JSON.stringify([guildID, userID]));\n if (!member) throw new YuzuhaError('MEMBER_NOT_FOUND', 'Membro não encontrado.');\n return structuredClone(member);\n }\n async moderate(guildID: string, action: ModerationAction, targetID: string, reason: string, duration?: number, voice?: VoiceModerationOptions): Promise<void> {\n if (this.failAction) throw new YuzuhaError('API_ERROR', 'Falha simulada.');\n this.actions.push({ guildID, action, targetID, reason, duration, ...voice });\n }\n}\nlet sequence = 0;\nexport function mockMessage(content: string, overrides: Partial<IncomingMessage> = {}): IncomingMessage {\n return { id: String(++sequence), content, authorID: '1', authorName: 'Hory', authorBot: false,\n guildID: '100', channelID: '200', mentions: [...content.matchAll(/<@!?(\\d+)>/g)].map(m => m[1]!), ...overrides };\n}\n\nexport class TestClock {\n private time: number;\n\n constructor(now = Date.now()) {\n if (!Number.isSafeInteger(now) || now < 0) throw new YuzuhaError('TEST_CLOCK', 'O relógio exige um instante inteiro não negativo.');\n this.time = now;\n }\n\n readonly now = (): number => this.time;\n\n advance(milliseconds: number): number {\n if (!Number.isSafeInteger(milliseconds) || milliseconds < 0 || !Number.isSafeInteger(this.time + milliseconds)) {\n throw new YuzuhaError('TEST_CLOCK', 'O avanço exige milissegundos inteiros não negativos dentro do intervalo seguro.');\n }\n this.time += milliseconds;\n return this.time;\n }\n}\n\nexport interface TestBotOptions extends Omit<YuzuhaOptions, 'now' | 'transport' | 'resources'> {\n commands?: readonly Command[];\n transport?: MockTransport;\n resources?: MockResourceOverrides;\n message?: Partial<IncomingMessage>;\n now?: number;\n}\n\nexport interface TestBot {\n readonly bot: Yuzuha;\n readonly transport: MockTransport;\n readonly store: Store;\n readonly clock: TestClock;\n readonly messages: MockTransport['messages'];\n readonly errors: unknown[];\n readonly results: DispatchResult[];\n send(content: string, overrides?: Partial<IncomingMessage>): Promise<DispatchResult>;\n /** Advances the clock and awaits one scheduler pass, including scheduled handlers. */\n tick(milliseconds?: number): Promise<void>;\n destroy(): Promise<void>;\n close(): Promise<void>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n\n/** Creates an offline bot with isolated state, captured output and a manually advanced clock. */\nexport function createTestBot(options: TestBotOptions = {}): TestBot {\n const { commands = [], transport = new MockTransport(), resources, message, now,\n onError, ...botOptions } = options;\n const clock = new TestClock(now);\n const store = options.store ?? new MemoryStore();\n const errors: unknown[] = [], results: DispatchResult[] = [];\n const defaults = structuredClone(message ?? {});\n const bot = new Yuzuha({ ...botOptions, transport, resources: mockResources(resources), store,\n now: clock.now, http: options.http ?? false,\n onError: async (error, ctx) => { errors.push(error); await onError?.(error, ctx); },\n });\n try { for (const command of commands) bot.command(command); }\n catch (error) {\n void bot.destroy().catch(failure => reportError(bot.options, failure));\n throw error;\n }\n let messageID = 0;\n let closing = false;\n const destroy = (): Promise<void> => {\n closing = true;\n return bot.destroy();\n };\n return {\n bot, transport, store, clock, messages: transport.messages, errors, results,\n async send(content, overrides) {\n const outcome = await bot.handle(mockMessage(content, { ...defaults, id: String(++messageID), ...overrides }));\n results.push(outcome);\n return outcome;\n },\n async tick(milliseconds = 0) {\n if (closing || bot.signal.aborted) throw new YuzuhaError('BOT_CLOSED', 'O bot está encerrado.');\n clock.advance(milliseconds);\n await bot.scheduler?.tick();\n },\n destroy, close: destroy, [Symbol.asyncDispose]: destroy,\n };\n}\nexport { MockMusicBackend, mockTrack } from './testing/music.js';\n"]}
|
package/docs/API.md
CHANGED
|
@@ -37,7 +37,8 @@ erro, o resultado continua sendo `success`.
|
|
|
37
37
|
| Método | Resultado e uso |
|
|
38
38
|
|---|---|
|
|
39
39
|
| `command(command)` | Registra um comando validado e retorna o bot |
|
|
40
|
-
| `
|
|
40
|
+
| `useEngine(engine)` | Instala o engine de function mode (`functions()` de `yuzuha/functions`) |
|
|
41
|
+
| `engine` | Engine de function mode instalado, quando presente |
|
|
41
42
|
| `use(middleware)` | Acrescenta middleware e retorna o bot |
|
|
42
43
|
| `plugin(plugin)` | Instala funções, comandos, eventos e middleware; retorna o bot |
|
|
43
44
|
| `on(event, listener)`, `once(event, listener)` | Registra callback tipado do SDK, com erros e encerramento rastreados |
|
|
@@ -185,7 +186,7 @@ async function exemplo(resources: Resources, guildID: string) {
|
|
|
185
186
|
|
|
186
187
|
Os retornos são objetos serializáveis, não classes do SDK. As áreas e assinaturas
|
|
187
188
|
estão em `src/ports/resources/` e nas declarações distribuídas; a referência de
|
|
188
|
-
uso por script fica em [FUNCTIONS.md](FUNCTIONS.md).
|
|
189
|
+
uso por script fica em [FUNCTIONS.md](functions/FUNCTIONS.md).
|
|
189
190
|
|
|
190
191
|
Implementações próprias de `MessagesResources` precisam fornecer `pinnedPage`
|
|
191
192
|
e `reactionUsersPage`; `ThreadsResources` inclui `member`. Os retornos mantêm
|
|
@@ -272,8 +273,8 @@ retornado por ele. `checkOutput(valor)` verifica saídas intermediárias e lanç
|
|
|
272
273
|
Plugins podem fornecer arrays `commands`, `events` (com `defineEvent`) e
|
|
273
274
|
`middleware`. Scripts no próprio plugin podem usar funções declaradas nele.
|
|
274
275
|
Nomes de plugins, funções e comandos não podem colidir em seus registros.
|
|
275
|
-
O registro valida o lote antes de aplicá-lo.
|
|
276
|
-
existem `bot.
|
|
276
|
+
O registro valida o lote antes de aplicá-lo. Sobre o engine,
|
|
277
|
+
existem `bot.engine.registerAll(functions)` e o port `ScriptEngine`.
|
|
277
278
|
|
|
278
279
|
`Runtime`, `registerBuiltins`, `parse` e `script` vêm de `yuzuha/functions`,
|
|
279
280
|
não da raiz. `Runtime` expõe `compile(source, file?)`, `execute(program, ctx)` e
|
|
@@ -321,7 +322,7 @@ operação nativa confiável; prefira o auxiliar autorizado do contexto.
|
|
|
321
322
|
`decimal(a, operador, b, casas?)`, `decimalCompare(a, b)` e
|
|
322
323
|
`decimalRound(valor, casas)`, exportados por `yuzuha`, operam sobre strings
|
|
323
324
|
decimais com até 1000 dígitos. Não aceitam expoente; retornam texto normalizado,
|
|
324
|
-
exceto a comparação, que retorna -1, 0 ou 1. Veja [operações de dados](LANGUAGE-EXTENSIONS.md).
|
|
325
|
+
exceto a comparação, que retorna -1, 0 ou 1. Veja [operações de dados](functions/LANGUAGE-EXTENSIONS.md).
|
|
325
326
|
|
|
326
327
|
## Erros
|
|
327
328
|
|
|
@@ -355,8 +356,8 @@ limitações de prazo em [STORAGE.md](STORAGE.md).
|
|
|
355
356
|
aceita um ReadableStream de bytes, limita sua leitura e acumula antes do upload.
|
|
356
357
|
O retorno é o ID da mensagem; não transmite multipart continuamente pela rede.
|
|
357
358
|
Veja [IMAGES.md](IMAGES.md) para os limites e o módulo opcional `yuzuha/images`.
|
|
358
|
-
Para compor cartões, consulte [CANVAS.md](CANVAS.md) e
|
|
359
|
-
`yuzuha/canvas
|
|
359
|
+
Para compor cartões, consulte [CANVAS.md](CANVAS.md) e os subpaths opcionais
|
|
360
|
+
`yuzuha/canvas` (API napi em processo) e `yuzuha/canvas/card` (builder isolado).
|
|
360
361
|
|
|
361
362
|
`yuzuha/images` exporta `transformImage`, `ImageTransform`, `ImageOptions` e
|
|
362
363
|
`ImageResult`. A raiz não importa Sharp. Não há funções de imagem registradas
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -16,17 +16,21 @@ src/
|
|
|
16
16
|
resources/ Contratos por área: usuários, cargos, canais, mensagens...
|
|
17
17
|
services/ Autorização, moderação, casos, variáveis, scheduler, HTTP e música
|
|
18
18
|
commands/ Definição, builders, argumentos tipados e contexto
|
|
19
|
-
|
|
19
|
+
functions/ Function mode: AST, parser, registro, avaliação e limites
|
|
20
|
+
runtime/ Evaluator, parser, registry, limites, valores e regex
|
|
20
21
|
builtins/ Funções por categoria
|
|
22
|
+
canvas/ Fachada do builder de cartões (yuzuha/canvas/card)
|
|
21
23
|
framework/ Bot, eventos, registro, carga, roteamento, limites e middleware
|
|
22
24
|
infrastructure/
|
|
23
25
|
fluxer/ Mensagens, payloads, transporte e recursos do SDK real
|
|
24
26
|
storage/ Estado, fila, caminhos, memória, JSON e SQLite
|
|
25
27
|
lavalink/ REST/WebSocket v4, limites, cache e validação de protocolo
|
|
28
|
+
canvas/ Renderer em processo filho e loader do peer @napi-rs/canvas
|
|
26
29
|
cli/ Argumentos, config, scaffold, execução e watcher
|
|
27
30
|
shared/ Classes de erro
|
|
28
31
|
index.ts API pública nativa (yuzuha)
|
|
29
32
|
functions.ts API pública do function mode (yuzuha/functions)
|
|
33
|
+
canvas.ts Fachada napi-compatível do peer (yuzuha/canvas)
|
|
30
34
|
sdk.ts Reexportação do SDK (yuzuha/sdk)
|
|
31
35
|
testing.ts Transporte, mensagens e recursos de teste (yuzuha/testing)
|
|
32
36
|
tooling.ts Auxiliares de editor, diagnósticos e catálogos (yuzuha/tooling)
|
|
@@ -34,10 +38,11 @@ src/
|
|
|
34
38
|
tooling/ Análise textual para editores, sem execução de funções
|
|
35
39
|
```
|
|
36
40
|
|
|
37
|
-
Os
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
Os consumidores importam pelos exports públicos do pacote; a raiz nativa não
|
|
42
|
+
exporta parser nem runtime. O framework depende da linguagem apenas pelo port
|
|
43
|
+
`ScriptEngine` (`src/ports/script-engine.ts`), satisfeito por `Runtime` e
|
|
44
|
+
instalado via `engine: functions()` ou `bot.useEngine(...)` — a inversão impede
|
|
45
|
+
que `src/index.ts` carregue o function mode ou o peer de canvas.
|
|
41
46
|
|
|
42
47
|
## Responsabilidades e dependências
|
|
43
48
|
|
|
@@ -47,7 +52,7 @@ parte da raiz nativa.
|
|
|
47
52
|
| `ports` | Interfaces exigidas pelos serviços | Implementações de SDK ou disco |
|
|
48
53
|
| `services` | Autorização, ação de moderação e persistência de casos | Parser, watcher ou detalhes de Fluxer.js |
|
|
49
54
|
| `commands` | Descrição, conversão de argumentos e fachada de contexto | Transações ou hierarquia implementadas novamente |
|
|
50
|
-
| `
|
|
55
|
+
| `functions` | Compilar e executar a linguagem | Instanciar client ou escolher store |
|
|
51
56
|
| `framework` | Compor runtime, registro, despacho e ciclo de vida | Implementar operações REST |
|
|
52
57
|
| `infrastructure` | Traduzir contratos para SDK e disco | Escolher comandos do produto |
|
|
53
58
|
| `cli` | Configuração, geração e processo de desenvolvimento | Duplicar regras de moderação |
|
|
@@ -115,7 +120,7 @@ objetos fornecidos pelas interfaces `Store` e `Transport`. Por isso, testes usam
|
|
|
115
120
|
|
|
116
121
|
`npm run check:architecture` acompanha imports e reexports locais, inclusive
|
|
117
122
|
caminhos que passam pelos arquivos de compatibilidade. Ele restringe domínio,
|
|
118
|
-
ports, serviços e
|
|
123
|
+
ports, serviços e functions às camadas permitidas, além de exigir que só `canvas.ts` carregue o loader do peer. Não verifica a correção do
|
|
119
124
|
comportamento nem o conteúdo de dependências externas; isso depende dos testes.
|
|
120
125
|
|
|
121
126
|
## Percurso de uma mensagem
|
|
@@ -155,7 +160,7 @@ As funções são agrupadas em `context`, `flow`, `guards`, `values`, `messages`
|
|
|
155
160
|
`embeds`, `moderation`, `storage`, `users`, `roles`, `channels`, `collectors`,
|
|
156
161
|
`webhooks`, `expressions`, `threads`, `invites`, `language`, `schedule` e
|
|
157
162
|
`network` e `events`. Metadados de uso, aridade e descrição alimentam
|
|
158
|
-
a CLI e a [referência gerada](FUNCTIONS.md), evitando assinaturas duplicadas.
|
|
163
|
+
a CLI e a [referência gerada](functions/FUNCTIONS.md), evitando assinaturas duplicadas.
|
|
159
164
|
|
|
160
165
|
## Registro e recarga
|
|
161
166
|
|
|
@@ -206,7 +211,7 @@ streaming, multipart e políticas por comando. O runtime não isola plugins JS/T
|
|
|
206
211
|
|
|
207
212
|
| Mudança | Ponto de partida |
|
|
208
213
|
|---|---|
|
|
209
|
-
| Nova função de script | `src/
|
|
214
|
+
| Nova função de script | `src/functions/builtins/` e referência gerada |
|
|
210
215
|
| Alterar semântica da linguagem | Parser/avaliador e testes de runtime |
|
|
211
216
|
| Regra de moderação ou autorização | `src/services/` e regras puras em `domain/` |
|
|
212
217
|
| Converter argumento | `src/commands/arguments.ts` |
|
package/docs/BENCHMARKS.md
CHANGED
|
@@ -136,7 +136,7 @@ preservar seus imports relativos e é removido ao encerrar o shell:
|
|
|
136
136
|
trap 'rm -f "$baseline_file"' EXIT
|
|
137
137
|
git show 98c7f4233fa84889f1e9325b53795533d000363d:src/scripting/parser.ts > "$baseline_file"
|
|
138
138
|
./node_modules/.bin/tsx benchmarks/parser.mjs \
|
|
139
|
-
--parser-module src/
|
|
139
|
+
--parser-module src/functions/runtime/parser.ts \
|
|
140
140
|
--baseline-module "$baseline_file" > parser-comparacao.json
|
|
141
141
|
)
|
|
142
142
|
```
|