yuzuha 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/VERSIONING.md +18 -5
  4. package/dist/commands/arguments.d.ts.map +1 -1
  5. package/dist/commands/arguments.js +40 -13
  6. package/dist/commands/arguments.js.map +1 -1
  7. package/dist/commands/builders.d.ts +1 -0
  8. package/dist/commands/builders.d.ts.map +1 -1
  9. package/dist/commands/builders.js +5 -0
  10. package/dist/commands/builders.js.map +1 -1
  11. package/dist/commands/context-like.d.ts +4 -0
  12. package/dist/commands/context-like.d.ts.map +1 -0
  13. package/dist/commands/context-like.js +2 -0
  14. package/dist/commands/context-like.js.map +1 -0
  15. package/dist/commands/context.d.ts +16 -2
  16. package/dist/commands/context.d.ts.map +1 -1
  17. package/dist/commands/context.js +53 -11
  18. package/dist/commands/context.js.map +1 -1
  19. package/dist/commands/definition.d.ts +1 -0
  20. package/dist/commands/definition.d.ts.map +1 -1
  21. package/dist/commands/definition.js.map +1 -1
  22. package/dist/commands/typed-arguments.js +2 -2
  23. package/dist/commands/typed-arguments.js.map +1 -1
  24. package/dist/domain/cdn.d.ts +23 -0
  25. package/dist/domain/cdn.d.ts.map +1 -0
  26. package/dist/domain/cdn.js +38 -0
  27. package/dist/domain/cdn.js.map +1 -0
  28. package/dist/domain/resolvers.d.ts +60 -0
  29. package/dist/domain/resolvers.d.ts.map +1 -0
  30. package/dist/domain/resolvers.js +31 -0
  31. package/dist/domain/resolvers.js.map +1 -0
  32. package/dist/domain/values.d.ts +2 -0
  33. package/dist/domain/values.d.ts.map +1 -1
  34. package/dist/domain/values.js +26 -1
  35. package/dist/domain/values.js.map +1 -1
  36. package/dist/framework/bot.d.ts +5 -0
  37. package/dist/framework/bot.d.ts.map +1 -1
  38. package/dist/framework/bot.js +44 -9
  39. package/dist/framework/bot.js.map +1 -1
  40. package/dist/framework/logging.d.ts +4 -1
  41. package/dist/framework/logging.d.ts.map +1 -1
  42. package/dist/framework/logging.js.map +1 -1
  43. package/dist/framework/options.d.ts +12 -0
  44. package/dist/framework/options.d.ts.map +1 -1
  45. package/dist/framework/options.js.map +1 -1
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +7 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/infrastructure/fluxer/resources/channels.d.ts.map +1 -1
  51. package/dist/infrastructure/fluxer/resources/channels.js +62 -8
  52. package/dist/infrastructure/fluxer/resources/channels.js.map +1 -1
  53. package/dist/infrastructure/fluxer/resources/expressions.d.ts.map +1 -1
  54. package/dist/infrastructure/fluxer/resources/expressions.js +2 -1
  55. package/dist/infrastructure/fluxer/resources/expressions.js.map +1 -1
  56. package/dist/infrastructure/fluxer/resources/messages.d.ts +2 -1
  57. package/dist/infrastructure/fluxer/resources/messages.d.ts.map +1 -1
  58. package/dist/infrastructure/fluxer/resources/messages.js +16 -7
  59. package/dist/infrastructure/fluxer/resources/messages.js.map +1 -1
  60. package/dist/infrastructure/fluxer/resources/users.d.ts +1 -1
  61. package/dist/infrastructure/fluxer/resources/users.d.ts.map +1 -1
  62. package/dist/infrastructure/fluxer/resources/users.js +41 -9
  63. package/dist/infrastructure/fluxer/resources/users.js.map +1 -1
  64. package/dist/infrastructure/fluxer/resources.d.ts +3 -1
  65. package/dist/infrastructure/fluxer/resources.d.ts.map +1 -1
  66. package/dist/infrastructure/fluxer/resources.js +8 -3
  67. package/dist/infrastructure/fluxer/resources.js.map +1 -1
  68. package/dist/infrastructure/fluxer/transport.d.ts +4 -1
  69. package/dist/infrastructure/fluxer/transport.d.ts.map +1 -1
  70. package/dist/infrastructure/fluxer/transport.js +41 -14
  71. package/dist/infrastructure/fluxer/transport.js.map +1 -1
  72. package/dist/ports/resources/channels.d.ts +20 -1
  73. package/dist/ports/resources/channels.d.ts.map +1 -1
  74. package/dist/ports/resources/channels.js.map +1 -1
  75. package/dist/ports/resources/users.d.ts +5 -0
  76. package/dist/ports/resources/users.d.ts.map +1 -1
  77. package/dist/ports/resources/users.js.map +1 -1
  78. package/dist/services/authorization.js +9 -9
  79. package/dist/services/authorization.js.map +1 -1
  80. package/dist/services/members.d.ts +5 -0
  81. package/dist/services/members.d.ts.map +1 -1
  82. package/dist/services/members.js +75 -5
  83. package/dist/services/members.js.map +1 -1
  84. package/dist/services/moderation.js +9 -9
  85. package/dist/services/moderation.js.map +1 -1
  86. package/dist/services/resource-authorization.d.ts.map +1 -1
  87. package/dist/services/resource-authorization.js +31 -17
  88. package/dist/services/resource-authorization.js.map +1 -1
  89. package/dist/services/retry.d.ts +17 -0
  90. package/dist/services/retry.d.ts.map +1 -0
  91. package/dist/services/retry.js +67 -0
  92. package/dist/services/retry.js.map +1 -0
  93. package/dist/shared/errors.d.ts +4 -1
  94. package/dist/shared/errors.d.ts.map +1 -1
  95. package/dist/shared/errors.js +8 -1
  96. package/dist/shared/errors.js.map +1 -1
  97. package/dist/testing.d.ts +8 -0
  98. package/dist/testing.d.ts.map +1 -1
  99. package/dist/testing.js +24 -4
  100. package/dist/testing.js.map +1 -1
  101. package/docs/API.md +11 -0
  102. package/docs/CANVAS.md +1 -1
  103. package/docs/FRAMEWORK.md +13 -0
  104. package/docs/IMAGES.md +9 -0
  105. package/docs/NATIVE.md +49 -1
  106. package/docs/PARITY-MATRIX.md +31 -32
  107. package/docs/QUICKSTART.md +2 -2
  108. package/docs/README.md +1 -1
  109. package/docs/TESTING.md +16 -0
  110. package/package.json +1 -1
  111. package/src/commands/arguments.ts +35 -13
  112. package/src/commands/builders.ts +4 -0
  113. package/src/commands/context-like.ts +7 -0
  114. package/src/commands/context.ts +56 -11
  115. package/src/commands/definition.ts +1 -0
  116. package/src/commands/typed-arguments.ts +2 -2
  117. package/src/domain/cdn.ts +55 -0
  118. package/src/domain/resolvers.ts +42 -0
  119. package/src/domain/values.ts +28 -1
  120. package/src/framework/bot.ts +41 -10
  121. package/src/framework/logging.ts +5 -1
  122. package/src/framework/options.ts +4 -0
  123. package/src/index.ts +13 -0
  124. package/src/infrastructure/fluxer/resources/channels.ts +53 -8
  125. package/src/infrastructure/fluxer/resources/expressions.ts +2 -1
  126. package/src/infrastructure/fluxer/resources/messages.ts +17 -6
  127. package/src/infrastructure/fluxer/resources/users.ts +38 -9
  128. package/src/infrastructure/fluxer/resources.ts +4 -3
  129. package/src/infrastructure/fluxer/transport.ts +42 -13
  130. package/src/ports/resources/channels.ts +11 -1
  131. package/src/ports/resources/users.ts +3 -0
  132. package/src/services/authorization.ts +9 -9
  133. package/src/services/members.ts +70 -5
  134. package/src/services/moderation.ts +9 -9
  135. package/src/services/resource-authorization.ts +31 -17
  136. package/src/services/retry.ts +74 -0
  137. package/src/shared/errors.ts +10 -1
  138. package/src/testing.ts +28 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { Yuzuha, Bot } from './bot.js';
2
2
  export { CommandContext, defineCommand, parseDuration } from './context.js';
3
3
  export { commandUsage, commandHelp } from './commands/help.js';
4
+ export { formatDuration, MAX_TIMEOUT_MS } from './domain/values.js';
4
5
  export { arg, ArgumentBuilder } from './commands/builders.js';
5
6
  export { ArgumentBag } from './commands/typed-arguments.js';
6
7
  export { defineEvent } from './framework/events.js';
@@ -22,4 +23,10 @@ export * from './errors.js';
22
23
  export * as SDK from '@fluxerjs/core';
23
24
  export { decimal, decimalCompare, decimalRound } from './domain/decimal.js';
24
25
  export { embed } from './domain/embeds.js';
26
+ export { GuardError, isGuardReason } from './shared/errors.js';
27
+ export { isTransientError } from './services/retry.js';
28
+ export { cleanReason } from './domain/resolvers.js';
29
+ export { createCdn, fixAnimatedAssetUrl } from './domain/cdn.js';
30
+ import { createCdn as _createCdn } from './domain/cdn.js';
31
+ export const cdn = _createCdn();
25
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA8B3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["export { Yuzuha, Bot } from './bot.js';\nexport type { YuzuhaOptions, YuzuhaPlugin, Middleware, DispatchResult } from './bot.js';\nexport { CommandContext, defineCommand, parseDuration } from './context.js';\nexport type { Command, ArgumentDefinition } from './context.js';\nexport { commandUsage, commandHelp } from './commands/help.js';\nexport type { ContextOptions } from './context.js';\nexport { arg, ArgumentBuilder } from './commands/builders.js';\nexport type { ArgumentSchema, InferArgument } from './commands/builders.js';\nexport { ArgumentBag } from './commands/typed-arguments.js';\nexport type { TypedArguments } from './commands/typed-arguments.js';\nexport type { NativeCommandContext, NativeCommandDefinition, CommandCheck, CommandMiddleware } from './commands/definition.js';\nexport { defineEvent } from './framework/events.js';\nexport type { ContextEventDefinition, EventDefinition, NativeEvent, NativeListener } from './framework/events.js';\nexport type { LogRecord } from './framework/logging.js';\nexport { EventContext } from './commands/event-context.js';\nexport type { EventContextOptions } from './commands/event-context.js';\nexport type { ScriptEventDefinition } from './framework/script-events.js';\nexport type { ScriptEventData, ScriptEventName } from './domain/events.js';\nexport type { NativeAccess } from './ports/native.js';\nexport type { ScriptEngine, ScriptFunctionDefinition, ScriptLimits } from './ports/script-engine.js';\nexport type { NativeVoice, FluxerVoiceConnection, FluxerVoiceDriver } from './ports/voice.js';\nexport type { Resources } from './ports/resources.js';\nexport type {\n UserInfo, MemberInfo, GuildInfo, BanInfo, AuditLogInfo, UsersResources, GuildEditInput, MemberSearchPage,\n ProfileInfo, UserProfileInfo, LiveCountsInput, GuildCountsInfo, ChannelCountsInfo,\n} from './ports/resources/users.js';\nexport type { RoleInfo, RoleCreateInput, RoleEditInput, RolesResources } from './ports/resources/roles.js';\nexport type {\n ChannelInfo, ChannelCreateInput, ChannelEditInput, ChannelOverwriteInput, ChannelsResources,\n} from './ports/resources/channels.js';\nexport type { AttachmentInfo, MessageInfo, MessagesResources, MessageCursor, MessageSearchInput, MessageSearchPage,\n PinnedMessagesInput, PinnedMessagesPage, ReactionUsersPage,\n BulkFetchRequest, BulkFetchInput, BulkFetchRawChannel } from './ports/resources/messages.js';\nexport type { AwaitMessageInput, CollectedMessageInfo, CollectMessagesInput, CollectReactionsInput, CollectorsResources, ReactionVote } from './ports/resources/collectors.js';\nexport type { WebhookInfo, WebhookSendInput, WebhooksResources } from './ports/resources/webhooks.js';\nexport type { EmojiInfo, EmojiCreateInput, EmojiBulkResult, StickerInfo, StickerCreateInput, StickerEditInput, ExpressionsResources } from './ports/resources/expressions.js';\nexport type { ThreadInfo, ThreadMemberInfo, ThreadMemberDetails, ThreadCreateInput, ForumPostInput, ThreadsResources, ThreadEditInput, ThreadSearchInput, ThreadSearchPage, ArchivedThreadsInput, ThreadListPage } from './ports/resources/threads.js';\nexport type { InviteInfo, InviteCreateInput, InvitesResources } from './ports/resources/invites.js';\nexport type { GatewayMembersRequest, ChannelCountsRequest, ForumUnreadsRequest, ThreadSubscriptionInput, GatewayResources } from './ports/resources/gateway.js';\nexport type { InstanceEndpointsInfo, InstanceFeaturesInfo, InstanceServicesInfo, InstanceInfo, GatewayInfo, ApplicationInfo,\n EmojiMetadataInfo, StickerMetadataInfo, EmojiReference, InstanceResources } from './ports/resources/instance.js';\nexport type { SudoVerification, SelfGuildInfo, SelfResources } from './ports/resources/self.js';\nexport type { CacheLimitsInfo, CacheStatsInfo, MessageSweepInput, MemberSweepInput, CacheResources } from './ports/resources/cache.js';\nexport type { AttachmentSpec, BinaryAttachmentSpec, PresenceStatus, ActivityType, ActivityInfo } from './ports/resources/common.js';\nexport { NativeModeration } from './services/native-moderation.js';\nexport type { NativeModerationOptions, NativeBanOptions, NativeTimeoutOptions, NativeMoveOptions, NativeVoiceOptions, ModerationTarget } from './services/native-moderation.js';\nexport { ScopedData } from './services/native-data.js';\nexport type { NativeData } from './services/native-data.js';\nexport type { DataTransaction, TransactionScope, VariableOptions, VariableOperation } from './services/variables.js';\nexport { MemberService } from './services/members.js';\nexport { Scheduler, ScheduleExecutionError } from './services/scheduler.js';\nexport type { ScheduleInput, CronScheduleInput, SchedulePatch, ScheduleAccess, RetryPolicy, SchedulerOptions, SchedulerEvent } from './services/scheduler.js';\nexport { parseCron, nextCron, assertTimezone } from './domain/cron.js';\nexport type { CronExpression, MissedRunPolicy } from './domain/cron.js';\nexport { HttpService } from './services/http.js';\nexport type { HttpOptions, HttpRequest, HttpResponse, HttpPolicy, HttpMultipartPart, HttpStreamResponse } from './services/http.js';\nexport { StateMaintenance } from './services/state-maintenance.js';\nexport type { StoreStatistics, CleanupOptions, CleanupResult, StateBackup, RestoreOptions, RestoreReport } from './services/state-maintenance.js';\nexport type { ScheduleRecord, ScheduleExecutionRecord } from './domain/state.js';\nexport { defineConfig } from './config.js';\nexport type { YuzuhaConfig } from './config.js';\nexport type * from './contracts.js';\nexport { FluxerTransport, incoming } from './adapter.js';\nexport { FluxerResources } from './infrastructure/fluxer/resources.js';\nexport { JsonStore, MemoryStore, defaultDataPath } from './store.js';\nexport { SQLiteStore } from './sqlite.js';\nexport { loadCommands, commandFiles } from './loader.js';\nexport * from './errors.js';\nexport * as SDK from '@fluxerjs/core';\nexport { decimal, decimalCompare, decimalRound } from './domain/decimal.js';\nexport { embed } from './domain/embeds.js';\nexport type { VariableQueryOptions, VariableQuery, VariableEntry, VariablePage } from './domain/variable-query.js';\nexport type { StreamAttachmentOptions } from './services/attachments.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA8B3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC","sourcesContent":["export { Yuzuha, Bot } from './bot.js';\nexport type { YuzuhaOptions, YuzuhaPlugin, Middleware, DispatchResult } from './bot.js';\nexport { CommandContext, defineCommand, parseDuration } from './context.js';\nexport type { Command, ArgumentDefinition } from './context.js';\nexport { commandUsage, commandHelp } from './commands/help.js';\nexport { formatDuration, MAX_TIMEOUT_MS } from './domain/values.js';\nexport type { ContextOptions } from './context.js';\nexport { arg, ArgumentBuilder } from './commands/builders.js';\nexport type { ArgumentSchema, InferArgument } from './commands/builders.js';\nexport { ArgumentBag } from './commands/typed-arguments.js';\nexport type { TypedArguments } from './commands/typed-arguments.js';\nexport type { NativeCommandContext, NativeCommandDefinition, CommandCheck, CommandMiddleware } from './commands/definition.js';\nexport { defineEvent } from './framework/events.js';\nexport type { ContextEventDefinition, EventDefinition, NativeEvent, NativeListener } from './framework/events.js';\nexport type { LogRecord } from './framework/logging.js';\nexport { EventContext } from './commands/event-context.js';\nexport type { EventContextOptions } from './commands/event-context.js';\nexport type { ScriptEventDefinition } from './framework/script-events.js';\nexport type { ScriptEventData, ScriptEventName } from './domain/events.js';\nexport type { NativeAccess } from './ports/native.js';\nexport type { ScriptEngine, ScriptFunctionDefinition, ScriptLimits } from './ports/script-engine.js';\nexport type { NativeVoice, FluxerVoiceConnection, FluxerVoiceDriver } from './ports/voice.js';\nexport type { Resources } from './ports/resources.js';\nexport type {\n UserInfo, MemberInfo, GuildInfo, BanInfo, AuditLogInfo, UsersResources, GuildEditInput, MemberSearchPage,\n ProfileInfo, UserProfileInfo, LiveCountsInput, GuildCountsInfo, ChannelCountsInfo,\n} from './ports/resources/users.js';\nexport type { RoleInfo, RoleCreateInput, RoleEditInput, RolesResources } from './ports/resources/roles.js';\nexport type {\n ChannelInfo, ChannelCreateInput, ChannelEditInput, ChannelOverwriteInput, ChannelsResources,\n} from './ports/resources/channels.js';\nexport type { AttachmentInfo, MessageInfo, MessagesResources, MessageCursor, MessageSearchInput, MessageSearchPage,\n PinnedMessagesInput, PinnedMessagesPage, ReactionUsersPage,\n BulkFetchRequest, BulkFetchInput, BulkFetchRawChannel } from './ports/resources/messages.js';\nexport type { AwaitMessageInput, CollectedMessageInfo, CollectMessagesInput, CollectReactionsInput, CollectorsResources, ReactionVote } from './ports/resources/collectors.js';\nexport type { WebhookInfo, WebhookSendInput, WebhooksResources } from './ports/resources/webhooks.js';\nexport type { EmojiInfo, EmojiCreateInput, EmojiBulkResult, StickerInfo, StickerCreateInput, StickerEditInput, ExpressionsResources } from './ports/resources/expressions.js';\nexport type { ThreadInfo, ThreadMemberInfo, ThreadMemberDetails, ThreadCreateInput, ForumPostInput, ThreadsResources, ThreadEditInput, ThreadSearchInput, ThreadSearchPage, ArchivedThreadsInput, ThreadListPage } from './ports/resources/threads.js';\nexport type { InviteInfo, InviteCreateInput, InvitesResources } from './ports/resources/invites.js';\nexport type { GatewayMembersRequest, ChannelCountsRequest, ForumUnreadsRequest, ThreadSubscriptionInput, GatewayResources } from './ports/resources/gateway.js';\nexport type { InstanceEndpointsInfo, InstanceFeaturesInfo, InstanceServicesInfo, InstanceInfo, GatewayInfo, ApplicationInfo,\n EmojiMetadataInfo, StickerMetadataInfo, EmojiReference, InstanceResources } from './ports/resources/instance.js';\nexport type { SudoVerification, SelfGuildInfo, SelfResources } from './ports/resources/self.js';\nexport type { CacheLimitsInfo, CacheStatsInfo, MessageSweepInput, MemberSweepInput, CacheResources } from './ports/resources/cache.js';\nexport type { AttachmentSpec, BinaryAttachmentSpec, PresenceStatus, ActivityType, ActivityInfo } from './ports/resources/common.js';\nexport { NativeModeration } from './services/native-moderation.js';\nexport type { NativeModerationOptions, NativeBanOptions, NativeTimeoutOptions, NativeMoveOptions, NativeVoiceOptions, ModerationTarget } from './services/native-moderation.js';\nexport { ScopedData } from './services/native-data.js';\nexport type { NativeData } from './services/native-data.js';\nexport type { DataTransaction, TransactionScope, VariableOptions, VariableOperation } from './services/variables.js';\nexport { MemberService } from './services/members.js';\nexport { Scheduler, ScheduleExecutionError } from './services/scheduler.js';\nexport type { ScheduleInput, CronScheduleInput, SchedulePatch, ScheduleAccess, RetryPolicy, SchedulerOptions, SchedulerEvent } from './services/scheduler.js';\nexport { parseCron, nextCron, assertTimezone } from './domain/cron.js';\nexport type { CronExpression, MissedRunPolicy } from './domain/cron.js';\nexport { HttpService } from './services/http.js';\nexport type { HttpOptions, HttpRequest, HttpResponse, HttpPolicy, HttpMultipartPart, HttpStreamResponse } from './services/http.js';\nexport { StateMaintenance } from './services/state-maintenance.js';\nexport type { StoreStatistics, CleanupOptions, CleanupResult, StateBackup, RestoreOptions, RestoreReport } from './services/state-maintenance.js';\nexport type { ScheduleRecord, ScheduleExecutionRecord } from './domain/state.js';\nexport { defineConfig } from './config.js';\nexport type { YuzuhaConfig } from './config.js';\nexport type * from './contracts.js';\nexport { FluxerTransport, incoming } from './adapter.js';\nexport { FluxerResources } from './infrastructure/fluxer/resources.js';\nexport { JsonStore, MemoryStore, defaultDataPath } from './store.js';\nexport { SQLiteStore } from './sqlite.js';\nexport { loadCommands, commandFiles } from './loader.js';\nexport * from './errors.js';\nexport * as SDK from '@fluxerjs/core';\nexport { decimal, decimalCompare, decimalRound } from './domain/decimal.js';\nexport { embed } from './domain/embeds.js';\nexport type { VariableQueryOptions, VariableQuery, VariableEntry, VariablePage } from './domain/variable-query.js';\nexport type { StreamAttachmentOptions } from './services/attachments.js';\n\nexport { GuardError, isGuardReason } from './shared/errors.js';\nexport type { GuardReason } from './shared/errors.js';\nexport { isTransientError } from './services/retry.js';\nexport type { SendOptions } from './commands/context.js';\nexport { cleanReason } from './domain/resolvers.js';\nexport type { ResolvedMember, ResolvedBan, ResolvedUser, ResolvedLabel } from './domain/resolvers.js';\nexport { createCdn, fixAnimatedAssetUrl } from './domain/cdn.js';\nexport type { Cdn } from './domain/cdn.js';\nimport { createCdn as _createCdn } from './domain/cdn.js';\nexport const cdn = _createCdn();\nexport type { CommandContextLike } from './commands/context-like.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/channels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,MAAM,EAAa,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAC7H,OAAO,KAAK,EAAwC,WAAW,EAAyB,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAYxJ,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAgBhE;AAgDD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgIzE"}
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/channels.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmC,MAAM,EAAa,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAC7H,OAAO,KAAK,EAAwC,WAAW,EAAyB,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAYxJ,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAgBhE;AAgDD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAkKzE"}
@@ -1,5 +1,6 @@
1
- import { OverwriteType, ForumLayout } from '@fluxerjs/core';
2
- import { YuzuhaError } from '../../../errors.js';
1
+ import { OverwriteType, ForumLayout, PermissionFlags, PermissionOverwrite } from '@fluxerjs/core';
2
+ import { Routes } from '@fluxerjs/types';
3
+ import { GuardError, YuzuhaError } from '../../../errors.js';
3
4
  export function toChannelInfo(channel) {
4
5
  const extras = channel;
5
6
  return {
@@ -157,13 +158,51 @@ export function createChannelsResources(client) {
157
158
  const channel = await guildChannel(client, channelID);
158
159
  return (await channel.fetchRtcRegions()).map(region => ({ id: region.id, name: region.name, emoji: region.emoji }));
159
160
  },
160
- async overwrite(channelID, targetID, input) {
161
+ async overwrite(channelID, targetID, input, options) {
161
162
  const channel = await guildChannel(client, channelID);
162
- await channel.permissionOverwrites.edit(targetID, {
163
- type: await overwriteKind(client, channel, targetID, input.type),
164
- ...(input.allow !== undefined ? { allow: input.allow } : {}),
165
- ...(input.deny !== undefined ? { deny: input.deny } : {}),
166
- });
163
+ if (!options?.merge) {
164
+ if (input.neutral !== undefined)
165
+ throw new YuzuhaError('CHANNEL_OVERWRITE', 'neutral só é aceito com merge: true.');
166
+ await channel.permissionOverwrites.edit(targetID, {
167
+ type: await overwriteKind(client, channel, targetID, input.type),
168
+ ...(input.allow !== undefined ? { allow: input.allow } : {}),
169
+ ...(input.deny !== undefined ? { deny: input.deny } : {}),
170
+ });
171
+ return;
172
+ }
173
+ for (const name of [...(input.allow ?? []), ...(input.deny ?? []), ...(input.neutral ?? [])])
174
+ validatePermission(name);
175
+ const existing = channel.permissionOverwrites.cache.get(targetID);
176
+ const bits = (names) => names.reduce((acc, name) => acc | PermissionFlags[name], 0n);
177
+ const allowBits = bits(input.allow ?? []);
178
+ const denyBits = bits(input.deny ?? []);
179
+ const neutralBits = bits(input.neutral ?? []);
180
+ const allow = ((existing?.allow.bitfield ?? 0n) | allowBits) & ~denyBits & ~neutralBits;
181
+ const deny = ((existing?.deny.bitfield ?? 0n) | denyBits) & ~allowBits & ~neutralBits;
182
+ const type = await overwriteKind(client, channel, targetID, input.type);
183
+ if (input.reason !== undefined) {
184
+ await client.rest.put(Routes.channelPermission(channel.id, targetID), {
185
+ body: { type, allow: String(allow), deny: String(deny) }, auth: true, headers: { 'X-Audit-Log-Reason': input.reason }
186
+ });
187
+ channel.permissionOverwrites.cache.set(targetID, new PermissionOverwrite({ id: targetID, type, allow: String(allow), deny: String(deny) }));
188
+ }
189
+ else {
190
+ await channel.permissionOverwrites.edit(targetID, { type, allow, deny });
191
+ }
192
+ },
193
+ async lock(channelID, options = {}) {
194
+ const channel = await guildChannel(client, channelID);
195
+ const permission = lockPermission(channel, options.permission);
196
+ const targetID = options.targetID ?? channel.guildId;
197
+ await this.overwrite(channelID, targetID, { deny: [permission], reason: options.reason }, { merge: true });
198
+ return { channelID, targetID, permission, locked: true };
199
+ },
200
+ async unlock(channelID, options = {}) {
201
+ const channel = await guildChannel(client, channelID);
202
+ const permission = lockPermission(channel, options.permission);
203
+ const targetID = options.targetID ?? channel.guildId;
204
+ await this.overwrite(channelID, targetID, { neutral: [permission], reason: options.reason }, { merge: true });
205
+ return { channelID, targetID, permission, locked: false };
167
206
  },
168
207
  async permissionsFor(guildID, channelID, userID) {
169
208
  const guild = await client.guilds.resolve(guildID);
@@ -210,4 +249,19 @@ export function createChannelsResources(client) {
210
249
  },
211
250
  };
212
251
  }
252
+ function validatePermission(name) {
253
+ if (!(name in PermissionFlags))
254
+ throw new GuardError(`Permissão desconhecida: ${name}.`, 'INVALID_ARGUMENT');
255
+ }
256
+ function lockPermission(channel, permission) {
257
+ if (permission !== undefined) {
258
+ validatePermission(permission);
259
+ return permission;
260
+ }
261
+ if (channel.isVoice())
262
+ return 'Connect';
263
+ if (channel.isText())
264
+ return 'SendMessages';
265
+ throw new GuardError('Este tipo de canal não suporta bloqueio.', 'INVALID_ARGUMENT');
266
+ }
213
267
  //# sourceMappingURL=channels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/channels.ts"],"names":[],"mappings":"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","sourcesContent":["import { OverwriteType, ForumLayout } from '@fluxerjs/core';\nimport type { ChannelEditOptions, ChannelType, Client, DMChannel, GuildChannel, PermissionResolvable } from '@fluxerjs/core';\nimport type { ChannelCreateInput, ChannelEditInput, ChannelInfo, ChannelOverwriteInput, ChannelsResources } from '../../../ports/resources/channels.js';\nimport { YuzuhaError } from '../../../errors.js';\n\ntype ChannelExtras = {\n topic?: string | null;\n rateLimitPerUser?: number | null;\n nsfw?: boolean | null;\n url?: string | null;\n contentWarningLevel?: number | null;\n contentWarningText?: string | null;\n};\n\nexport function toChannelInfo(channel: GuildChannel): ChannelInfo {\n const extras = channel as GuildChannel & ChannelExtras;\n return {\n id: channel.id,\n name: channel.name ?? '',\n type: Number(channel.type),\n guildID: channel.guildId ?? null,\n parentID: channel.parentId ?? null,\n position: channel.position ?? 0,\n topic: extras.topic ?? null,\n slowmode: extras.rateLimitPerUser ?? 0,\n nsfw: extras.nsfw ?? false,\n url: extras.url ?? null,\n contentWarningLevel: extras.contentWarningLevel ?? null,\n contentWarningText: extras.contentWarningText ?? null,\n };\n}\n\nasync function guildChannel(client: Client, channelID: string): Promise<GuildChannel> {\n const channel = await client.channels.fetch(channelID);\n if (!channel.isGuild()) throw new YuzuhaError('CHANNEL', 'Canal não pertence a um servidor.');\n return channel;\n}\n\nasync function dmChannel(client: Client, channelID: string): Promise<DMChannel> {\n const channel = await client.channels.fetch(channelID);\n if (!channel.isDM()) throw new YuzuhaError('CHANNEL_DM', 'Esta operação exige um canal de DM.');\n return channel;\n}\n\nfunction validateExtras(input: ChannelEditInput): void {\n if (input.url !== undefined && input.url !== null) {\n let url: URL;\n try { url = new URL(input.url); } catch { throw new YuzuhaError('CHANNEL_URL', 'URL de canal deve ser HTTP(S).'); }\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password) {\n throw new YuzuhaError('CHANNEL_URL', 'URL de canal deve ser HTTP(S) sem credenciais.');\n }\n }\n if (input.contentWarningLevel !== undefined && input.contentWarningLevel !== null\n && input.contentWarningLevel !== 0 && input.contentWarningLevel !== 1) {\n throw new YuzuhaError('CONTENT_WARNING', 'Aviso de conteúdo aceita 0, 1 ou null.');\n }\n if (input.contentWarningText !== undefined && input.contentWarningText !== null\n && (typeof input.contentWarningText !== 'string' || input.contentWarningText.length > 1000)) {\n throw new YuzuhaError('CONTENT_WARNING', 'Texto do aviso deve ter até 1000 caracteres.');\n }\n}\n\nasync function overwriteKind(client: Client, channel: GuildChannel, targetID: string, hint?: 'role' | 'member'): Promise<OverwriteType> {\n if (hint === 'member') return OverwriteType.Member;\n if (hint === 'role') return OverwriteType.Role;\n if (channel.guildId) {\n const guild = await client.guilds.resolve(channel.guildId);\n if (guild.roles.get(targetID) !== undefined) return OverwriteType.Role;\n try {\n await guild.fetchRole(targetID);\n return OverwriteType.Role;\n } catch {\n return OverwriteType.Member;\n }\n }\n return OverwriteType.Role;\n}\n\nexport function createChannelsResources(client: Client): ChannelsResources {\n return {\n async get(channelID): Promise<ChannelInfo> {\n const channel = await client.channels.fetch(channelID);\n if (channel.isDM()) {\n return { id: channel.id, name: channel.name ?? '', type: Number(channel.type), guildID: null,\n parentID: null, position: 0, topic: null, slowmode: 0, nsfw: false,\n recipientIDs: channel.recipients.map(user => user.id), ownerID: channel.ownerId };\n }\n return toChannelInfo(await guildChannel(client, channelID));\n },\n async addRecipient(channelID, userID): Promise<void> {\n const channel = await dmChannel(client, channelID);\n await channel.addRecipient(userID);\n },\n async removeRecipient(channelID, userID, options): Promise<void> {\n const channel = await dmChannel(client, channelID);\n await channel.removeRecipient(userID, options?.silent === undefined ? undefined : { silent: options.silent });\n },\n async list(guildID, limit?): Promise<ChannelInfo[]> {\n const guild = await client.guilds.resolve(guildID);\n const channels = [...await guild.fetchChannels()]\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n return (limit === undefined ? channels : channels.slice(0, limit)).map(toChannelInfo);\n },\n async create(guildID, input: ChannelCreateInput): Promise<ChannelInfo> {\n validateExtras(input);\n if (input.type === 998 && !input.url) throw new YuzuhaError('CHANNEL_URL', 'Canal de link exige uma URL HTTP(S).');\n const guild = await client.guilds.resolve(guildID);\n const created = await guild.createChannel({\n name: input.name,\n type: (input.type ?? 0) as ChannelType,\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.contentWarningLevel !== undefined ? { contentWarningLevel: input.contentWarningLevel } : {}),\n ...(input.contentWarningText !== undefined ? { contentWarningText: input.contentWarningText } : {}),\n ...(input.parentID !== undefined ? { parentId: input.parentID } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n ...(input.slowmode !== undefined ? { rateLimitPerUser: input.slowmode } : {}),\n ...(input.nsfw !== undefined ? { nsfw: input.nsfw } : {}),\n });\n return toChannelInfo(created);\n },\n async edit(channelID, input: ChannelEditInput): Promise<ChannelInfo> {\n validateExtras(input);\n const channel = await guildChannel(client, channelID);\n const options: ChannelEditOptions = {\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.contentWarningLevel !== undefined ? { contentWarningLevel: input.contentWarningLevel } : {}),\n ...(input.contentWarningText !== undefined ? { contentWarningText: input.contentWarningText } : {}),\n ...(input.name !== undefined ? { name: input.name } : {}),\n ...(input.parentID !== undefined ? { parentId: input.parentID } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n ...(input.slowmode !== undefined ? { rateLimitPerUser: input.slowmode } : {}),\n ...(input.nsfw !== undefined ? { nsfw: input.nsfw } : {}),\n ...(input.reason !== undefined ? { reason: input.reason } : {}),\n };\n return toChannelInfo(await channel.edit(options));\n },\n async delete(channelID, reason?): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (reason === undefined) await channel.delete();\n else await channel.delete({ reason });\n },\n async setSlowmode(channelID, seconds, reason?): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (reason === undefined) await channel.edit({ rateLimitPerUser: seconds });\n else await channel.edit({ rateLimitPerUser: seconds, reason });\n },\n async slowmode(channelID): Promise<number> {\n const channel = await guildChannel(client, channelID);\n return (await channel.fetchSlowmode()).rateLimitPerUser ?? 0;\n },\n async sendTyping(channelID): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.sendTyping();\n },\n async rtcRegions(channelID) {\n const channel = await guildChannel(client, channelID);\n return (await channel.fetchRtcRegions()).map(region => ({ id: region.id, name: region.name, emoji: region.emoji }));\n },\n async overwrite(channelID, targetID, input: ChannelOverwriteInput): Promise<void> {\n const channel = await guildChannel(client, channelID);\n await channel.permissionOverwrites.edit(targetID, {\n type: await overwriteKind(client, channel, targetID, input.type),\n ...(input.allow !== undefined ? { allow: input.allow as PermissionResolvable } : {}),\n ...(input.deny !== undefined ? { deny: input.deny as PermissionResolvable } : {}),\n });\n },\n async permissionsFor(guildID, channelID, userID): Promise<string> {\n const guild = await client.guilds.resolve(guildID);\n const channel = await guildChannel(client, channelID);\n const member = await guild.fetchMember(userID);\n return member.permissionsIn(channel).toJSON();\n },\n async editThreadDefaults(channelID, input): Promise<void> {\n const channel = await guildChannel(client, channelID);\n const edit = (channel as { editThreadDefaults?: unknown }).editThreadDefaults;\n if (typeof edit !== 'function') throw new YuzuhaError('CHANNEL_THREAD', 'O canal não suporta padrões de thread.');\n const { slowmode, autoArchiveDuration, reason } = input;\n await (edit as (options: Record<string, unknown>) => Promise<unknown>).call(channel, {\n autoArchiveDuration: autoArchiveDuration === null ? null : autoArchiveDuration,\n rateLimitPerUser: slowmode, reason });\n },\n async setDefaultForumLayout(channelID, layout, reason): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (!channel.isForum()) throw new YuzuhaError('CHANNEL_FORUM', 'Layout padrão exige um canal de fórum.');\n const value = layout === null ? null : { default: ForumLayout.Default, list: ForumLayout.List, grid: ForumLayout.Grid }[layout];\n await channel.setDefaultForumLayout(value, reason);\n },\n async move(channelID, position): Promise<void> {\n if (!Number.isSafeInteger(position) || position < 0) throw new YuzuhaError('POSITION', 'Posição deve ser um inteiro a partir de 0.');\n const channel = await guildChannel(client, channelID);\n if (!channel.guildId) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const guild = await client.guilds.resolve(channel.guildId);\n await guild.setChannelPositions([{ id: channel.id, position }]);\n },\n async setCategory(channelID, parentID, reason): Promise<ChannelInfo> {\n const channel = await guildChannel(client, channelID);\n if (parentID !== null) {\n const parent = await guildChannel(client, parentID);\n if (!parent.isCategory() || parent.guildId !== channel.guildId) {\n throw new YuzuhaError('CHANNEL_CATEGORY', 'Categoria deve pertencer ao mesmo servidor do canal.');\n }\n }\n return toChannelInfo(await channel.edit({ parentId: parentID, reason }));\n },\n };\n}\n"]}
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/channels.ts"],"names":[],"mappings":"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","sourcesContent":["import { OverwriteType, ForumLayout, PermissionFlags, PermissionOverwrite } from '@fluxerjs/core';\nimport { Routes } from '@fluxerjs/types';\nimport type { ChannelEditOptions, ChannelType, Client, DMChannel, GuildChannel, PermissionResolvable } from '@fluxerjs/core';\nimport type { ChannelCreateInput, ChannelEditInput, ChannelInfo, ChannelOverwriteInput, ChannelsResources } from '../../../ports/resources/channels.js';\nimport { GuardError, YuzuhaError } from '../../../errors.js';\n\ntype ChannelExtras = {\n topic?: string | null;\n rateLimitPerUser?: number | null;\n nsfw?: boolean | null;\n url?: string | null;\n contentWarningLevel?: number | null;\n contentWarningText?: string | null;\n};\n\nexport function toChannelInfo(channel: GuildChannel): ChannelInfo {\n const extras = channel as GuildChannel & ChannelExtras;\n return {\n id: channel.id,\n name: channel.name ?? '',\n type: Number(channel.type),\n guildID: channel.guildId ?? null,\n parentID: channel.parentId ?? null,\n position: channel.position ?? 0,\n topic: extras.topic ?? null,\n slowmode: extras.rateLimitPerUser ?? 0,\n nsfw: extras.nsfw ?? false,\n url: extras.url ?? null,\n contentWarningLevel: extras.contentWarningLevel ?? null,\n contentWarningText: extras.contentWarningText ?? null,\n };\n}\n\nasync function guildChannel(client: Client, channelID: string): Promise<GuildChannel> {\n const channel = await client.channels.fetch(channelID);\n if (!channel.isGuild()) throw new YuzuhaError('CHANNEL', 'Canal não pertence a um servidor.');\n return channel;\n}\n\nasync function dmChannel(client: Client, channelID: string): Promise<DMChannel> {\n const channel = await client.channels.fetch(channelID);\n if (!channel.isDM()) throw new YuzuhaError('CHANNEL_DM', 'Esta operação exige um canal de DM.');\n return channel;\n}\n\nfunction validateExtras(input: ChannelEditInput): void {\n if (input.url !== undefined && input.url !== null) {\n let url: URL;\n try { url = new URL(input.url); } catch { throw new YuzuhaError('CHANNEL_URL', 'URL de canal deve ser HTTP(S).'); }\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password) {\n throw new YuzuhaError('CHANNEL_URL', 'URL de canal deve ser HTTP(S) sem credenciais.');\n }\n }\n if (input.contentWarningLevel !== undefined && input.contentWarningLevel !== null\n && input.contentWarningLevel !== 0 && input.contentWarningLevel !== 1) {\n throw new YuzuhaError('CONTENT_WARNING', 'Aviso de conteúdo aceita 0, 1 ou null.');\n }\n if (input.contentWarningText !== undefined && input.contentWarningText !== null\n && (typeof input.contentWarningText !== 'string' || input.contentWarningText.length > 1000)) {\n throw new YuzuhaError('CONTENT_WARNING', 'Texto do aviso deve ter até 1000 caracteres.');\n }\n}\n\nasync function overwriteKind(client: Client, channel: GuildChannel, targetID: string, hint?: 'role' | 'member'): Promise<OverwriteType> {\n if (hint === 'member') return OverwriteType.Member;\n if (hint === 'role') return OverwriteType.Role;\n if (channel.guildId) {\n const guild = await client.guilds.resolve(channel.guildId);\n if (guild.roles.get(targetID) !== undefined) return OverwriteType.Role;\n try {\n await guild.fetchRole(targetID);\n return OverwriteType.Role;\n } catch {\n return OverwriteType.Member;\n }\n }\n return OverwriteType.Role;\n}\n\nexport function createChannelsResources(client: Client): ChannelsResources {\n return {\n async get(channelID): Promise<ChannelInfo> {\n const channel = await client.channels.fetch(channelID);\n if (channel.isDM()) {\n return { id: channel.id, name: channel.name ?? '', type: Number(channel.type), guildID: null,\n parentID: null, position: 0, topic: null, slowmode: 0, nsfw: false,\n recipientIDs: channel.recipients.map(user => user.id), ownerID: channel.ownerId };\n }\n return toChannelInfo(await guildChannel(client, channelID));\n },\n async addRecipient(channelID, userID): Promise<void> {\n const channel = await dmChannel(client, channelID);\n await channel.addRecipient(userID);\n },\n async removeRecipient(channelID, userID, options): Promise<void> {\n const channel = await dmChannel(client, channelID);\n await channel.removeRecipient(userID, options?.silent === undefined ? undefined : { silent: options.silent });\n },\n async list(guildID, limit?): Promise<ChannelInfo[]> {\n const guild = await client.guilds.resolve(guildID);\n const channels = [...await guild.fetchChannels()]\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n return (limit === undefined ? channels : channels.slice(0, limit)).map(toChannelInfo);\n },\n async create(guildID, input: ChannelCreateInput): Promise<ChannelInfo> {\n validateExtras(input);\n if (input.type === 998 && !input.url) throw new YuzuhaError('CHANNEL_URL', 'Canal de link exige uma URL HTTP(S).');\n const guild = await client.guilds.resolve(guildID);\n const created = await guild.createChannel({\n name: input.name,\n type: (input.type ?? 0) as ChannelType,\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.contentWarningLevel !== undefined ? { contentWarningLevel: input.contentWarningLevel } : {}),\n ...(input.contentWarningText !== undefined ? { contentWarningText: input.contentWarningText } : {}),\n ...(input.parentID !== undefined ? { parentId: input.parentID } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n ...(input.slowmode !== undefined ? { rateLimitPerUser: input.slowmode } : {}),\n ...(input.nsfw !== undefined ? { nsfw: input.nsfw } : {}),\n });\n return toChannelInfo(created);\n },\n async edit(channelID, input: ChannelEditInput): Promise<ChannelInfo> {\n validateExtras(input);\n const channel = await guildChannel(client, channelID);\n const options: ChannelEditOptions = {\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.contentWarningLevel !== undefined ? { contentWarningLevel: input.contentWarningLevel } : {}),\n ...(input.contentWarningText !== undefined ? { contentWarningText: input.contentWarningText } : {}),\n ...(input.name !== undefined ? { name: input.name } : {}),\n ...(input.parentID !== undefined ? { parentId: input.parentID } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n ...(input.slowmode !== undefined ? { rateLimitPerUser: input.slowmode } : {}),\n ...(input.nsfw !== undefined ? { nsfw: input.nsfw } : {}),\n ...(input.reason !== undefined ? { reason: input.reason } : {}),\n };\n return toChannelInfo(await channel.edit(options));\n },\n async delete(channelID, reason?): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (reason === undefined) await channel.delete();\n else await channel.delete({ reason });\n },\n async setSlowmode(channelID, seconds, reason?): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (reason === undefined) await channel.edit({ rateLimitPerUser: seconds });\n else await channel.edit({ rateLimitPerUser: seconds, reason });\n },\n async slowmode(channelID): Promise<number> {\n const channel = await guildChannel(client, channelID);\n return (await channel.fetchSlowmode()).rateLimitPerUser ?? 0;\n },\n async sendTyping(channelID): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.sendTyping();\n },\n async rtcRegions(channelID) {\n const channel = await guildChannel(client, channelID);\n return (await channel.fetchRtcRegions()).map(region => ({ id: region.id, name: region.name, emoji: region.emoji }));\n },\n async overwrite(channelID, targetID, input: ChannelOverwriteInput, options?: { merge?: boolean }): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (!options?.merge) {\n if (input.neutral !== undefined) throw new YuzuhaError('CHANNEL_OVERWRITE', 'neutral só é aceito com merge: true.');\n await channel.permissionOverwrites.edit(targetID, {\n type: await overwriteKind(client, channel, targetID, input.type),\n ...(input.allow !== undefined ? { allow: input.allow as PermissionResolvable } : {}),\n ...(input.deny !== undefined ? { deny: input.deny as PermissionResolvable } : {}),\n });\n return;\n }\n for (const name of [...(input.allow ?? []), ...(input.deny ?? []), ...(input.neutral ?? [])]) validatePermission(name);\n const existing = channel.permissionOverwrites.cache.get(targetID);\n const bits = (names: string[]) => names.reduce((acc, name) => acc | PermissionFlags[name as keyof typeof PermissionFlags], 0n);\n const allowBits = bits(input.allow ?? []);\n const denyBits = bits(input.deny ?? []);\n const neutralBits = bits(input.neutral ?? []);\n const allow = ((existing?.allow.bitfield ?? 0n) | allowBits) & ~denyBits & ~neutralBits;\n const deny = ((existing?.deny.bitfield ?? 0n) | denyBits) & ~allowBits & ~neutralBits;\n const type = await overwriteKind(client, channel, targetID, input.type);\n if (input.reason !== undefined) {\n await client.rest.put(Routes.channelPermission(channel.id, targetID), {\n body: { type, allow: String(allow), deny: String(deny) }, auth: true, headers: { 'X-Audit-Log-Reason': input.reason } });\n channel.permissionOverwrites.cache.set(targetID, new PermissionOverwrite({ id: targetID, type, allow: String(allow), deny: String(deny) } as never));\n } else {\n await channel.permissionOverwrites.edit(targetID, { type, allow, deny });\n }\n },\n async lock(channelID, options = {}) {\n const channel = await guildChannel(client, channelID);\n const permission = lockPermission(channel, options.permission);\n const targetID = options.targetID ?? channel.guildId!;\n await this.overwrite(channelID, targetID, { deny: [permission], reason: options.reason }, { merge: true });\n return { channelID, targetID, permission, locked: true };\n },\n async unlock(channelID, options = {}) {\n const channel = await guildChannel(client, channelID);\n const permission = lockPermission(channel, options.permission);\n const targetID = options.targetID ?? channel.guildId!;\n await this.overwrite(channelID, targetID, { neutral: [permission], reason: options.reason }, { merge: true });\n return { channelID, targetID, permission, locked: false };\n },\n async permissionsFor(guildID, channelID, userID): Promise<string> {\n const guild = await client.guilds.resolve(guildID);\n const channel = await guildChannel(client, channelID);\n const member = await guild.fetchMember(userID);\n return member.permissionsIn(channel).toJSON();\n },\n async editThreadDefaults(channelID, input): Promise<void> {\n const channel = await guildChannel(client, channelID);\n const edit = (channel as { editThreadDefaults?: unknown }).editThreadDefaults;\n if (typeof edit !== 'function') throw new YuzuhaError('CHANNEL_THREAD', 'O canal não suporta padrões de thread.');\n const { slowmode, autoArchiveDuration, reason } = input;\n await (edit as (options: Record<string, unknown>) => Promise<unknown>).call(channel, {\n autoArchiveDuration: autoArchiveDuration === null ? null : autoArchiveDuration,\n rateLimitPerUser: slowmode, reason });\n },\n async setDefaultForumLayout(channelID, layout, reason): Promise<void> {\n const channel = await guildChannel(client, channelID);\n if (!channel.isForum()) throw new YuzuhaError('CHANNEL_FORUM', 'Layout padrão exige um canal de fórum.');\n const value = layout === null ? null : { default: ForumLayout.Default, list: ForumLayout.List, grid: ForumLayout.Grid }[layout];\n await channel.setDefaultForumLayout(value, reason);\n },\n async move(channelID, position): Promise<void> {\n if (!Number.isSafeInteger(position) || position < 0) throw new YuzuhaError('POSITION', 'Posição deve ser um inteiro a partir de 0.');\n const channel = await guildChannel(client, channelID);\n if (!channel.guildId) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const guild = await client.guilds.resolve(channel.guildId);\n await guild.setChannelPositions([{ id: channel.id, position }]);\n },\n async setCategory(channelID, parentID, reason): Promise<ChannelInfo> {\n const channel = await guildChannel(client, channelID);\n if (parentID !== null) {\n const parent = await guildChannel(client, parentID);\n if (!parent.isCategory() || parent.guildId !== channel.guildId) {\n throw new YuzuhaError('CHANNEL_CATEGORY', 'Categoria deve pertencer ao mesmo servidor do canal.');\n }\n }\n return toChannelInfo(await channel.edit({ parentId: parentID, reason }));\n },\n };\n}\n\nfunction validatePermission(name: string): void {\n if (!(name in PermissionFlags)) throw new GuardError(`Permissão desconhecida: ${name}.`, 'INVALID_ARGUMENT');\n}\nfunction lockPermission(channel: GuildChannel, permission?: string): string {\n if (permission !== undefined) { validatePermission(permission); return permission; }\n if (channel.isVoice()) return 'Connect';\n if (channel.isText()) return 'SendMessages';\n throw new GuardError('Este tipo de canal não suporta bloqueio.', 'INVALID_ARGUMENT');\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAA4B,MAAM,gBAAgB,CAAC;AAGvE,OAAO,KAAK,EAAa,oBAAoB,EAAe,MAAM,yCAAyC,CAAC;AAmB5G,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA8D/E"}
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/expressions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA4B,MAAM,gBAAgB,CAAC;AAGvE,OAAO,KAAK,EAAa,oBAAoB,EAAe,MAAM,yCAAyC,CAAC;AAmB5G,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA8D/E"}
@@ -1,7 +1,8 @@
1
+ import { fixAnimatedAssetUrl } from '../../../domain/cdn.js';
1
2
  import { YuzuhaError } from '../../../errors.js';
2
3
  import { emojiBatch, stickerBatch } from '../../../domain/resource-batches.js';
3
4
  function toEmojiInfo(emoji) {
4
- return { id: emoji.id, name: emoji.name, animated: emoji.animated, url: emoji.url ?? null };
5
+ return { id: emoji.id, name: emoji.name, animated: emoji.animated, url: fixAnimatedAssetUrl(emoji.url) };
5
6
  }
6
7
  function toStickerInfo(sticker) {
7
8
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/expressions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Client, GuildEmoji, GuildSticker } from '@fluxerjs/core';\nimport { YuzuhaError } from '../../../errors.js';\nimport { emojiBatch, stickerBatch } from '../../../domain/resource-batches.js';\nimport type { EmojiInfo, ExpressionsResources, StickerInfo } from '../../../ports/resources/expressions.js';\n\nfunction toEmojiInfo(emoji: GuildEmoji): EmojiInfo {\n return { id: emoji.id, name: emoji.name, animated: emoji.animated, url: emoji.url ?? null };\n}\n\nfunction toStickerInfo(sticker: GuildSticker): StickerInfo {\n return {\n id: sticker.id,\n name: sticker.name,\n description: sticker.description || null,\n tags: sticker.tags.length ? sticker.tags.join(', ') : null,\n };\n}\n\nfunction mentionEmojiID(value: string): string | null {\n return value.match(/^<a?:[^:>]+:(\\d+)>$/)?.[1] ?? null;\n}\n\nexport function createExpressionsResources(client: Client): ExpressionsResources {\n const guild = (guildID: string) => client.guilds.resolve(guildID);\n\n const resolveEmoji = async (guildID: string, nameOrID: string): Promise<GuildEmoji> => {\n const server = await guild(guildID);\n const mentionID = mentionEmojiID(nameOrID.trim());\n const id = mentionID ?? (/^\\d+$/.test(nameOrID.trim()) ? nameOrID.trim() : null);\n if (id) return server.fetchEmoji(id);\n const wanted = nameOrID.trim().toLowerCase();\n const all = await server.fetchEmojis();\n const found = all.find(emoji => emoji.name.toLowerCase() === wanted || emoji.id === nameOrID.trim());\n if (!found) throw new YuzuhaError('EMOJI_NOT_FOUND', `Emoji \"${nameOrID}\" não encontrado.`);\n return found;\n };\n\n const resolveSticker = async (guildID: string, nameOrID: string): Promise<GuildSticker> => {\n const server = await guild(guildID);\n const wanted = nameOrID.trim();\n if (/^\\d+$/.test(wanted)) {\n return server.fetchSticker(wanted);\n }\n const all = await server.fetchStickers();\n const lower = wanted.toLowerCase();\n const found = all.find(sticker => sticker.id === wanted || sticker.name.toLowerCase() === lower);\n if (!found) throw new YuzuhaError('STICKER_NOT_FOUND', `Sticker \"${nameOrID}\" não encontrado.`);\n return found;\n };\n\n return {\n createEmojisBulk: async (guildID, inputs) => {\n const batch = emojiBatch(inputs);\n if (!guildID) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const result = await (await guild(guildID)).createEmojisBulk(batch);\n return { success: result.success.map(toEmojiInfo), failed: result.failed.map(item => ({ name: item.name, error: item.error })) };\n },\n emoji: async (guildID, nameOrID) => toEmojiInfo(await resolveEmoji(guildID, nameOrID)),\n emojis: async guildID => (await (await guild(guildID)).fetchEmojis()).map(toEmojiInfo),\n createEmoji: async (guildID, name, image, reason) =>\n toEmojiInfo(await (await guild(guildID)).createEmoji({ name, image, reason })),\n deleteEmoji: async (guildID, nameOrID, reason) => {\n await (await resolveEmoji(guildID, nameOrID)).delete(reason);\n },\n sticker: async (guildID, nameOrID) => toStickerInfo(await resolveSticker(guildID, nameOrID)),\n stickers: async guildID => (await (await guild(guildID)).fetchStickers()).map(toStickerInfo),\n editEmoji: async (guildID, nameOrID, name, reason) =>\n toEmojiInfo(await (await resolveEmoji(guildID, nameOrID)).edit({ name, reason })),\n createSticker: async (guildID, input) =>\n toStickerInfo(await (await guild(guildID)).createSticker(input)),\n createStickersBulk: async (guildID, inputs) => {\n const batch = stickerBatch(inputs);\n if (!guildID) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const result = await (await guild(guildID)).createStickersBulk(batch);\n return { success: result.success.map(toStickerInfo), failed: result.failed.map(item => ({ name: item.name, error: item.error })) };\n },\n editSticker: async (guildID, nameOrID, input) =>\n toStickerInfo(await (await resolveSticker(guildID, nameOrID)).edit(input)),\n deleteSticker: async (guildID, nameOrID, reason) => {\n await (await resolveSticker(guildID, nameOrID)).delete(reason);\n },\n cloneEmoji: async (guildID, sourceID) => toEmojiInfo(await (await guild(guildID)).cloneEmoji(sourceID)),\n cloneSticker: async (guildID, sourceID) => toStickerInfo(await (await guild(guildID)).cloneSticker(sourceID)),\n };\n}\n"]}
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/expressions.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixAnimatedAssetUrl } from '../../../domain/cdn.js';\nimport type { Client, GuildEmoji, GuildSticker } from '@fluxerjs/core';\nimport { YuzuhaError } from '../../../errors.js';\nimport { emojiBatch, stickerBatch } from '../../../domain/resource-batches.js';\nimport type { EmojiInfo, ExpressionsResources, StickerInfo } from '../../../ports/resources/expressions.js';\n\nfunction toEmojiInfo(emoji: GuildEmoji): EmojiInfo {\n return { id: emoji.id, name: emoji.name, animated: emoji.animated, url: fixAnimatedAssetUrl(emoji.url) };\n}\n\nfunction toStickerInfo(sticker: GuildSticker): StickerInfo {\n return {\n id: sticker.id,\n name: sticker.name,\n description: sticker.description || null,\n tags: sticker.tags.length ? sticker.tags.join(', ') : null,\n };\n}\n\nfunction mentionEmojiID(value: string): string | null {\n return value.match(/^<a?:[^:>]+:(\\d+)>$/)?.[1] ?? null;\n}\n\nexport function createExpressionsResources(client: Client): ExpressionsResources {\n const guild = (guildID: string) => client.guilds.resolve(guildID);\n\n const resolveEmoji = async (guildID: string, nameOrID: string): Promise<GuildEmoji> => {\n const server = await guild(guildID);\n const mentionID = mentionEmojiID(nameOrID.trim());\n const id = mentionID ?? (/^\\d+$/.test(nameOrID.trim()) ? nameOrID.trim() : null);\n if (id) return server.fetchEmoji(id);\n const wanted = nameOrID.trim().toLowerCase();\n const all = await server.fetchEmojis();\n const found = all.find(emoji => emoji.name.toLowerCase() === wanted || emoji.id === nameOrID.trim());\n if (!found) throw new YuzuhaError('EMOJI_NOT_FOUND', `Emoji \"${nameOrID}\" não encontrado.`);\n return found;\n };\n\n const resolveSticker = async (guildID: string, nameOrID: string): Promise<GuildSticker> => {\n const server = await guild(guildID);\n const wanted = nameOrID.trim();\n if (/^\\d+$/.test(wanted)) {\n return server.fetchSticker(wanted);\n }\n const all = await server.fetchStickers();\n const lower = wanted.toLowerCase();\n const found = all.find(sticker => sticker.id === wanted || sticker.name.toLowerCase() === lower);\n if (!found) throw new YuzuhaError('STICKER_NOT_FOUND', `Sticker \"${nameOrID}\" não encontrado.`);\n return found;\n };\n\n return {\n createEmojisBulk: async (guildID, inputs) => {\n const batch = emojiBatch(inputs);\n if (!guildID) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const result = await (await guild(guildID)).createEmojisBulk(batch);\n return { success: result.success.map(toEmojiInfo), failed: result.failed.map(item => ({ name: item.name, error: item.error })) };\n },\n emoji: async (guildID, nameOrID) => toEmojiInfo(await resolveEmoji(guildID, nameOrID)),\n emojis: async guildID => (await (await guild(guildID)).fetchEmojis()).map(toEmojiInfo),\n createEmoji: async (guildID, name, image, reason) =>\n toEmojiInfo(await (await guild(guildID)).createEmoji({ name, image, reason })),\n deleteEmoji: async (guildID, nameOrID, reason) => {\n await (await resolveEmoji(guildID, nameOrID)).delete(reason);\n },\n sticker: async (guildID, nameOrID) => toStickerInfo(await resolveSticker(guildID, nameOrID)),\n stickers: async guildID => (await (await guild(guildID)).fetchStickers()).map(toStickerInfo),\n editEmoji: async (guildID, nameOrID, name, reason) =>\n toEmojiInfo(await (await resolveEmoji(guildID, nameOrID)).edit({ name, reason })),\n createSticker: async (guildID, input) =>\n toStickerInfo(await (await guild(guildID)).createSticker(input)),\n createStickersBulk: async (guildID, inputs) => {\n const batch = stickerBatch(inputs);\n if (!guildID) throw new YuzuhaError('GUILD_REQUIRED', 'Esta operação exige um servidor.');\n const result = await (await guild(guildID)).createStickersBulk(batch);\n return { success: result.success.map(toStickerInfo), failed: result.failed.map(item => ({ name: item.name, error: item.error })) };\n },\n editSticker: async (guildID, nameOrID, input) =>\n toStickerInfo(await (await resolveSticker(guildID, nameOrID)).edit(input)),\n deleteSticker: async (guildID, nameOrID, reason) => {\n await (await resolveSticker(guildID, nameOrID)).delete(reason);\n },\n cloneEmoji: async (guildID, sourceID) => toEmojiInfo(await (await guild(guildID)).cloneEmoji(sourceID)),\n cloneSticker: async (guildID, sourceID) => toStickerInfo(await (await guild(guildID)).cloneSticker(sourceID)),\n };\n}\n"]}
@@ -2,5 +2,6 @@ import { Message } from '@fluxerjs/core';
2
2
  import type { Client } from '@fluxerjs/core';
3
3
  import type { MessageInfo, MessagesResources } from '../../../ports/resources/messages.js';
4
4
  export declare function toMessageInfo(message: Message): MessageInfo;
5
- export declare function createMessagesResources(client: Client): MessagesResources;
5
+ import type { Reliability } from '../../../services/retry.js';
6
+ export declare function createMessagesResources(client: Client, reliability?: Reliability): MessagesResources;
6
7
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAmC,MAAM,gBAAgB,CAAC;AAK9E,OAAO,KAAK,EAAuB,WAAW,EAAyC,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAuBvJ,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAW3D;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAyKzE"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAmC,MAAM,gBAAgB,CAAC;AAK9E,OAAO,KAAK,EAAuB,WAAW,EAAyC,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAuBvJ,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAW3D;AAOD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,WAAgB,GAAG,iBAAiB,CAiLxG"}
@@ -35,7 +35,8 @@ export function toMessageInfo(message) {
35
35
  function order(messages) {
36
36
  return [...messages].sort((a, b) => b.createdTimestamp - a.createdTimestamp);
37
37
  }
38
- export function createMessagesResources(client) {
38
+ import { isNotFound, isTransientError, isUndeliveredSend, withRetry } from '../../../services/retry.js';
39
+ export function createMessagesResources(client, reliability = {}) {
39
40
  const send = async (channelID, files, content) => {
40
41
  if (files.length < 1 || files.length > 10 || files.reduce((size, file) => size + ('data' in file ? file.data.byteLength : 0), 0) > 10_000_000) {
41
42
  throw new YuzuhaError('ATTACHMENTS', 'Envie de 1 a 10 anexos, com até 10 MB de bytes no total.');
@@ -181,16 +182,24 @@ export function createMessagesResources(client) {
181
182
  return { users: page.users.map(user => user.id), hasMore: page.hasMore, nextAfter: page.nextAfter };
182
183
  },
183
184
  async deleteAttachment(channelID, messageID, attachmentID) {
184
- await (await client.channels.fetchMessage(channelID, messageID)).deleteAttachment(attachmentID);
185
+ await withRetry(async (attempt) => {
186
+ await (await client.channels.fetchMessage(channelID, messageID)).deleteAttachment(attachmentID).catch(error => {
187
+ if (attempt > 0 && isNotFound(error))
188
+ return;
189
+ throw error;
190
+ });
191
+ }, reliability);
185
192
  },
186
193
  async sendTo(channelID, content) {
187
- return (await client.channels.send(channelID, { content, allowedMentions: { parse: [], repliedUser: false } })).id;
194
+ return withRetry(() => client.channels.send(channelID, { content, allowedMentions: { parse: [], repliedUser: false } }).then(m => m.id), reliability, isUndeliveredSend);
188
195
  },
189
196
  async bulkDelete(channelID, messageIDs) {
190
- const channel = await client.channels.fetch(channelID, { force: true });
191
- if (!channel.isTextBased())
192
- throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');
193
- return channel.bulkDelete(messageIDs);
197
+ return withRetry(async () => {
198
+ const channel = await client.channels.fetch(channelID, { force: true });
199
+ if (!channel.isTextBased())
200
+ throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');
201
+ return channel.bulkDelete(messageIDs);
202
+ }, reliability);
194
203
  },
195
204
  async bulkDeleteOwn(channelID) {
196
205
  const channel = await client.channels.fetch(channelID, { force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { AttachmentBuilder, Message } from '@fluxerjs/core';\nimport type { Client, MessageEmbed, MessageEmbedMedia } from '@fluxerjs/core';\nimport type { ReceivedEmbed, ReceivedEmbedMedia } from '../../../domain/messages.js';\nimport { limitOf } from '../../../ports/resources/common.js';\nimport type { AttachmentSpec, BinaryAttachmentSpec } from '../../../ports/resources/common.js';\nimport { YuzuhaError } from '../../../errors.js';\nimport type { BulkFetchRawChannel, MessageInfo, MessageSearchInput, MessageSearchPage, MessagesResources } from '../../../ports/resources/messages.js';\nimport { preloadChannels } from '../../../domain/resource-batches.js';\nimport { messageSearchInput, pinnedMessagesInput, reactionUsersInput } from '../../../domain/message-query.js';\n\nfunction receivedMedia(media: MessageEmbedMedia | null): ReceivedEmbedMedia | null {\n return media && { url: media.url, proxyURL: media.proxyUrl, contentType: media.contentType,\n width: media.width, height: media.height, description: media.description };\n}\n\nfunction receivedEmbed(embed: MessageEmbed): ReceivedEmbed {\n return {\n type: embed.type, url: embed.url, title: embed.title, color: embed.color,\n timestamp: embed.timestamp ? embed.timestamp.toISOString() : null, description: embed.description,\n author: embed.author && { name: embed.author.name, url: embed.author.url, iconURL: embed.author.iconUrl },\n image: receivedMedia(embed.image), thumbnail: receivedMedia(embed.thumbnail),\n footer: embed.footer && { text: embed.footer.text, iconURL: embed.footer.iconUrl },\n fields: embed.fields.map(field => ({ name: field.name, value: field.value, inline: field.inline })),\n provider: embed.provider && { name: embed.provider.name, url: embed.provider.url, iconURL: embed.provider.iconUrl },\n video: receivedMedia(embed.video), audio: receivedMedia(embed.audio), nsfw: embed.nsfw,\n children: embed.children.map(receivedEmbed), html: embed.html, htmlWidth: embed.htmlWidth, htmlHeight: embed.htmlHeight,\n };\n}\n\nexport function toMessageInfo(message: Message): MessageInfo {\n return {\n id: message.id, channelID: message.channelId, authorID: message.author.id,\n authorName: message.author.username, content: message.content,\n createdTimestamp: message.createdAt.getTime(), pinned: message.pinned,\n attachments: [...message.attachments.values()].map(attachment => ({\n id: attachment.id, name: attachment.filename, url: attachment.url ?? '',\n size: attachment.size, contentType: attachment.contentType,\n })),\n embeds: message.embeds.map(receivedEmbed),\n };\n}\n\nfunction order(messages: MessageInfo[]): MessageInfo[] {\n return [...messages].sort((a, b) => b.createdTimestamp - a.createdTimestamp);\n}\n\nexport function createMessagesResources(client: Client): MessagesResources {\n const send = async (channelID: string, files: (AttachmentSpec | BinaryAttachmentSpec)[], content?: string): Promise<string> => {\n if (files.length < 1 || files.length > 10 || files.reduce((size, file) => size + ('data' in file ? file.data.byteLength : 0), 0) > 10_000_000) {\n throw new YuzuhaError('ATTACHMENTS', 'Envie de 1 a 10 anexos, com até 10 MB de bytes no total.');\n }\n const builders = files.map(file => {\n if (!file.name.trim() || file.name.length > 255) throw new YuzuhaError('ATTACHMENT_NAME', 'Nome de anexo deve ter de 1 a 255 caracteres.');\n const builder = new AttachmentBuilder('data' in file ? Buffer.from(file.data) : file.url,\n { name: file.name, description: file.description });\n if (file.spoiler) builder.setSpoiler();\n return builder;\n });\n return (await client.channels.send(channelID, { content, files: builders,\n attachments: builders.map((builder, id) => builder.toJSON(id)),\n allowedMentions: { parse: [], repliedUser: false },\n })).id;\n };\n const search = async (rawInput: MessageSearchInput): Promise<MessageSearchPage> => {\n const input = messageSearchInput(rawInput);\n const result = await client.searchMessages({ content: input.content,\n contextGuildId: input.guildID, contextChannelId: input.channelID,\n channelIds: input.channelIDs ?? (input.channelID ? [input.channelID] : undefined),\n authorIds: input.authorIDs ?? (input.authorID ? [input.authorID] : undefined),\n hitsPerPage: limitOf(input.limit, 25, 100), cursor: input.cursor,\n ...(input.contents === undefined ? {} : { contents: input.contents }),\n ...(input.exactPhrases === undefined ? {} : { exactPhrases: input.exactPhrases }),\n ...(input.excludeChannelIDs === undefined ? {} : { excludeChannelIds: input.excludeChannelIDs }),\n ...(input.excludeAuthorIDs === undefined ? {} : { excludeAuthorIds: input.excludeAuthorIDs }),\n ...(input.authorType === undefined ? {} : { authorType: input.authorType }),\n ...(input.excludeAuthorType === undefined ? {} : { excludeAuthorType: input.excludeAuthorType }),\n ...(input.mentions === undefined ? {} : { mentions: input.mentions }),\n ...(input.excludeMentions === undefined ? {} : { excludeMentions: input.excludeMentions }),\n ...(input.mentionEveryone === undefined ? {} : { mentionEveryone: input.mentionEveryone }),\n ...(input.pinned === undefined ? {} : { pinned: input.pinned }),\n ...(input.includeNsfw === undefined ? {} : { includeNsfw: input.includeNsfw }),\n ...(input.has === undefined ? {} : { has: input.has }),\n ...(input.excludeHas === undefined ? {} : { excludeHas: input.excludeHas }),\n ...(input.minID === undefined ? {} : { minId: input.minID }),\n ...(input.maxID === undefined ? {} : { maxId: input.maxID }),\n ...(input.sortBy === undefined ? {} : { sortBy: input.sortBy }),\n ...(input.sortOrder === undefined ? {} : { sortOrder: input.sortOrder }),\n ...(input.page === undefined ? {} : { page: input.page }) });\n if ('indexing' in result) return { indexing: true, messages: [], total: 0, cursor: null };\n return { indexing: false, messages: result.messages.map(data => toMessageInfo(new Message(client, data))),\n total: result.total, cursor: result.cursor ?? null };\n };\n return {\n async preload(channelIDs) {\n const ids = preloadChannels(channelIDs);\n const result = await client.preloadMessages(ids);\n return Object.fromEntries(ids.map(id => [id, result[id] ? toMessageInfo(new Message(client, result[id])) : null]));\n },\n async fetch(channelID: string, messageID: string): Promise<MessageInfo> {\n return toMessageInfo(await client.channels.fetchMessage(channelID, messageID));\n },\n async list(channelID, limit, cursor = {}): Promise<MessageInfo[]> {\n if (Object.values(cursor).filter(value => value !== undefined).length > 1) {\n throw new YuzuhaError('MESSAGE_CURSOR', 'Use apenas um cursor: before, after ou around.');\n }\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const messages = await channel.messages.fetch({ limit: limitOf(limit, 20, 100), ...cursor });\n return order([...messages.values()].map(toMessageInfo));\n },\n async pin(channelID: string, messageID: string): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).pin();\n },\n async unpin(channelID: string, messageID: string): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).unpin();\n },\n async pinned(channelID: string, limit?: number): Promise<MessageInfo[]> {\n if (limit !== undefined) limit = pinnedMessagesInput({ limit }).limit;\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const messages = limit === undefined\n ? await channel.fetchPinnedMessages()\n : await channel.fetchPinnedMessagesPage({ limit }).then(page => page.messages);\n return order(messages.map(toMessageInfo));\n },\n async pinnedPage(channelID, input) {\n const options = pinnedMessagesInput(input);\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const page = await channel.fetchPinnedMessagesPage(options);\n return { messages: page.messages.map(toMessageInfo), pinnedAt: [...page.pinnedAt], hasMore: page.hasMore,\n nextBefore: page.hasMore ? page.pinnedAt.at(-1) ?? null : null };\n },\n sendFiles: send,\n async dm(userID, content): Promise<string> {\n const user = await client.users.fetch(userID);\n return (await user.send({ content, allowedMentions: { parse: [], repliedUser: false } })).id;\n },\n async forward(channelID, sourceChannelID, messageID): Promise<string> {\n return (await client.channels.send(channelID, {\n forward: { channelId: sourceChannelID, messageId: messageID },\n allowedMentions: { parse: [], repliedUser: false },\n })).id;\n },\n search,\n searchAll: search,\n async bulkFetch(requests, input): Promise<MessageInfo[] | BulkFetchRawChannel[]> {\n const options = requests.map(request => ({ channelId: request.channelID, limit: request.limit,\n ...(request.before === undefined ? {} : { before: request.before }),\n ...(request.after === undefined ? {} : { after: request.after }),\n ...(request.around === undefined ? {} : { around: request.around }) }));\n if (input?.hydrate === false) {\n const raw = await client.bulkFetchMessages(options, { hydrate: false });\n return raw.channels.map(channel => ({ channelID: channel.channel_id, messages: channel.messages }));\n }\n const result = await client.bulkFetchMessages(options);\n return result.channels.flatMap(channel => [...channel.messages.values()].map(toMessageInfo));\n },\n sendBytes: send,\n sendAttachments: send,\n async removeReaction(channelID, messageID, emoji, userID): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).removeReaction(emoji, userID);\n },\n async clearReactions(channelID, messageID, emoji): Promise<void> {\n const message = await client.channels.fetchMessage(channelID, messageID);\n if (emoji === undefined) await message.removeAllReactions();\n else await message.removeReactionEmoji(emoji);\n },\n async reactionUsers(channelID, messageID, emoji, limit = 100, after): Promise<string[]> {\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100) {\n throw new YuzuhaError('MESSAGE_LIMIT', 'Limite deve ser um inteiro entre 1 e 100.');\n }\n const message = await client.channels.fetchMessage(channelID, messageID);\n return (await message.fetchReactionUsers(emoji, { limit, after })).map(user => user.id);\n },\n async reactionUsersPage(channelID, messageID, emoji, limit, after) {\n const input = reactionUsersInput({ limit, after });\n if (!emoji.trim()) throw new YuzuhaError('MESSAGE_ARGUMENT', 'Emoji é obrigatório.');\n const message = await client.channels.fetchMessage(channelID, messageID);\n const page = await message.fetchReactionUsersPage(emoji, input);\n return { users: page.users.map(user => user.id), hasMore: page.hasMore, nextAfter: page.nextAfter };\n },\n async deleteAttachment(channelID, messageID, attachmentID): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).deleteAttachment(attachmentID);\n },\n async sendTo(channelID, content): Promise<string> {\n return (await client.channels.send(channelID, { content, allowedMentions: { parse: [], repliedUser: false } })).id;\n },\n async bulkDelete(channelID, messageIDs): Promise<string[]> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n return channel.bulkDelete(messageIDs);\n },\n async bulkDeleteOwn(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.bulkDeleteMyMessages();\n },\n async acknowledgePins(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.acknowledgePins();\n },\n async clearReadState(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.clearReadState();\n },\n async purgeDM(channelID): Promise<number> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isDM()) throw new YuzuhaError('CHANNEL_DM', 'Esta operação exige um canal de DM.');\n if (Number(channel.type) !== 999) throw new YuzuhaError('CHANNEL_NOTES', 'purgeDM só funciona no canal de anotações pessoais.');\n return channel.purgeMessages();\n },\n };\n}\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { AttachmentBuilder, Message } from '@fluxerjs/core';\nimport type { Client, MessageEmbed, MessageEmbedMedia } from '@fluxerjs/core';\nimport type { ReceivedEmbed, ReceivedEmbedMedia } from '../../../domain/messages.js';\nimport { limitOf } from '../../../ports/resources/common.js';\nimport type { AttachmentSpec, BinaryAttachmentSpec } from '../../../ports/resources/common.js';\nimport { YuzuhaError } from '../../../errors.js';\nimport type { BulkFetchRawChannel, MessageInfo, MessageSearchInput, MessageSearchPage, MessagesResources } from '../../../ports/resources/messages.js';\nimport { preloadChannels } from '../../../domain/resource-batches.js';\nimport { messageSearchInput, pinnedMessagesInput, reactionUsersInput } from '../../../domain/message-query.js';\n\nfunction receivedMedia(media: MessageEmbedMedia | null): ReceivedEmbedMedia | null {\n return media && { url: media.url, proxyURL: media.proxyUrl, contentType: media.contentType,\n width: media.width, height: media.height, description: media.description };\n}\n\nfunction receivedEmbed(embed: MessageEmbed): ReceivedEmbed {\n return {\n type: embed.type, url: embed.url, title: embed.title, color: embed.color,\n timestamp: embed.timestamp ? embed.timestamp.toISOString() : null, description: embed.description,\n author: embed.author && { name: embed.author.name, url: embed.author.url, iconURL: embed.author.iconUrl },\n image: receivedMedia(embed.image), thumbnail: receivedMedia(embed.thumbnail),\n footer: embed.footer && { text: embed.footer.text, iconURL: embed.footer.iconUrl },\n fields: embed.fields.map(field => ({ name: field.name, value: field.value, inline: field.inline })),\n provider: embed.provider && { name: embed.provider.name, url: embed.provider.url, iconURL: embed.provider.iconUrl },\n video: receivedMedia(embed.video), audio: receivedMedia(embed.audio), nsfw: embed.nsfw,\n children: embed.children.map(receivedEmbed), html: embed.html, htmlWidth: embed.htmlWidth, htmlHeight: embed.htmlHeight,\n };\n}\n\nexport function toMessageInfo(message: Message): MessageInfo {\n return {\n id: message.id, channelID: message.channelId, authorID: message.author.id,\n authorName: message.author.username, content: message.content,\n createdTimestamp: message.createdAt.getTime(), pinned: message.pinned,\n attachments: [...message.attachments.values()].map(attachment => ({\n id: attachment.id, name: attachment.filename, url: attachment.url ?? '',\n size: attachment.size, contentType: attachment.contentType,\n })),\n embeds: message.embeds.map(receivedEmbed),\n };\n}\n\nfunction order(messages: MessageInfo[]): MessageInfo[] {\n return [...messages].sort((a, b) => b.createdTimestamp - a.createdTimestamp);\n}\n\nimport { isNotFound, isTransientError, isUndeliveredSend, withRetry } from '../../../services/retry.js';\nimport type { Reliability } from '../../../services/retry.js';\n\nexport function createMessagesResources(client: Client, reliability: Reliability = {}): MessagesResources {\n const send = async (channelID: string, files: (AttachmentSpec | BinaryAttachmentSpec)[], content?: string): Promise<string> => {\n if (files.length < 1 || files.length > 10 || files.reduce((size, file) => size + ('data' in file ? file.data.byteLength : 0), 0) > 10_000_000) {\n throw new YuzuhaError('ATTACHMENTS', 'Envie de 1 a 10 anexos, com até 10 MB de bytes no total.');\n }\n const builders = files.map(file => {\n if (!file.name.trim() || file.name.length > 255) throw new YuzuhaError('ATTACHMENT_NAME', 'Nome de anexo deve ter de 1 a 255 caracteres.');\n const builder = new AttachmentBuilder('data' in file ? Buffer.from(file.data) : file.url,\n { name: file.name, description: file.description });\n if (file.spoiler) builder.setSpoiler();\n return builder;\n });\n return (await client.channels.send(channelID, { content, files: builders,\n attachments: builders.map((builder, id) => builder.toJSON(id)),\n allowedMentions: { parse: [], repliedUser: false },\n })).id;\n };\n const search = async (rawInput: MessageSearchInput): Promise<MessageSearchPage> => {\n const input = messageSearchInput(rawInput);\n const result = await client.searchMessages({ content: input.content,\n contextGuildId: input.guildID, contextChannelId: input.channelID,\n channelIds: input.channelIDs ?? (input.channelID ? [input.channelID] : undefined),\n authorIds: input.authorIDs ?? (input.authorID ? [input.authorID] : undefined),\n hitsPerPage: limitOf(input.limit, 25, 100), cursor: input.cursor,\n ...(input.contents === undefined ? {} : { contents: input.contents }),\n ...(input.exactPhrases === undefined ? {} : { exactPhrases: input.exactPhrases }),\n ...(input.excludeChannelIDs === undefined ? {} : { excludeChannelIds: input.excludeChannelIDs }),\n ...(input.excludeAuthorIDs === undefined ? {} : { excludeAuthorIds: input.excludeAuthorIDs }),\n ...(input.authorType === undefined ? {} : { authorType: input.authorType }),\n ...(input.excludeAuthorType === undefined ? {} : { excludeAuthorType: input.excludeAuthorType }),\n ...(input.mentions === undefined ? {} : { mentions: input.mentions }),\n ...(input.excludeMentions === undefined ? {} : { excludeMentions: input.excludeMentions }),\n ...(input.mentionEveryone === undefined ? {} : { mentionEveryone: input.mentionEveryone }),\n ...(input.pinned === undefined ? {} : { pinned: input.pinned }),\n ...(input.includeNsfw === undefined ? {} : { includeNsfw: input.includeNsfw }),\n ...(input.has === undefined ? {} : { has: input.has }),\n ...(input.excludeHas === undefined ? {} : { excludeHas: input.excludeHas }),\n ...(input.minID === undefined ? {} : { minId: input.minID }),\n ...(input.maxID === undefined ? {} : { maxId: input.maxID }),\n ...(input.sortBy === undefined ? {} : { sortBy: input.sortBy }),\n ...(input.sortOrder === undefined ? {} : { sortOrder: input.sortOrder }),\n ...(input.page === undefined ? {} : { page: input.page }) });\n if ('indexing' in result) return { indexing: true, messages: [], total: 0, cursor: null };\n return { indexing: false, messages: result.messages.map(data => toMessageInfo(new Message(client, data))),\n total: result.total, cursor: result.cursor ?? null };\n };\n return {\n async preload(channelIDs) {\n const ids = preloadChannels(channelIDs);\n const result = await client.preloadMessages(ids);\n return Object.fromEntries(ids.map(id => [id, result[id] ? toMessageInfo(new Message(client, result[id])) : null]));\n },\n async fetch(channelID: string, messageID: string): Promise<MessageInfo> {\n return toMessageInfo(await client.channels.fetchMessage(channelID, messageID));\n },\n async list(channelID, limit, cursor = {}): Promise<MessageInfo[]> {\n if (Object.values(cursor).filter(value => value !== undefined).length > 1) {\n throw new YuzuhaError('MESSAGE_CURSOR', 'Use apenas um cursor: before, after ou around.');\n }\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const messages = await channel.messages.fetch({ limit: limitOf(limit, 20, 100), ...cursor });\n return order([...messages.values()].map(toMessageInfo));\n },\n async pin(channelID: string, messageID: string): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).pin();\n },\n async unpin(channelID: string, messageID: string): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).unpin();\n },\n async pinned(channelID: string, limit?: number): Promise<MessageInfo[]> {\n if (limit !== undefined) limit = pinnedMessagesInput({ limit }).limit;\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const messages = limit === undefined\n ? await channel.fetchPinnedMessages()\n : await channel.fetchPinnedMessagesPage({ limit }).then(page => page.messages);\n return order(messages.map(toMessageInfo));\n },\n async pinnedPage(channelID, input) {\n const options = pinnedMessagesInput(input);\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n const page = await channel.fetchPinnedMessagesPage(options);\n return { messages: page.messages.map(toMessageInfo), pinnedAt: [...page.pinnedAt], hasMore: page.hasMore,\n nextBefore: page.hasMore ? page.pinnedAt.at(-1) ?? null : null };\n },\n sendFiles: send,\n async dm(userID, content): Promise<string> {\n const user = await client.users.fetch(userID);\n return (await user.send({ content, allowedMentions: { parse: [], repliedUser: false } })).id;\n },\n async forward(channelID, sourceChannelID, messageID): Promise<string> {\n return (await client.channels.send(channelID, {\n forward: { channelId: sourceChannelID, messageId: messageID },\n allowedMentions: { parse: [], repliedUser: false },\n })).id;\n },\n search,\n searchAll: search,\n async bulkFetch(requests, input): Promise<MessageInfo[] | BulkFetchRawChannel[]> {\n const options = requests.map(request => ({ channelId: request.channelID, limit: request.limit,\n ...(request.before === undefined ? {} : { before: request.before }),\n ...(request.after === undefined ? {} : { after: request.after }),\n ...(request.around === undefined ? {} : { around: request.around }) }));\n if (input?.hydrate === false) {\n const raw = await client.bulkFetchMessages(options, { hydrate: false });\n return raw.channels.map(channel => ({ channelID: channel.channel_id, messages: channel.messages }));\n }\n const result = await client.bulkFetchMessages(options);\n return result.channels.flatMap(channel => [...channel.messages.values()].map(toMessageInfo));\n },\n sendBytes: send,\n sendAttachments: send,\n async removeReaction(channelID, messageID, emoji, userID): Promise<void> {\n await (await client.channels.fetchMessage(channelID, messageID)).removeReaction(emoji, userID);\n },\n async clearReactions(channelID, messageID, emoji): Promise<void> {\n const message = await client.channels.fetchMessage(channelID, messageID);\n if (emoji === undefined) await message.removeAllReactions();\n else await message.removeReactionEmoji(emoji);\n },\n async reactionUsers(channelID, messageID, emoji, limit = 100, after): Promise<string[]> {\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 100) {\n throw new YuzuhaError('MESSAGE_LIMIT', 'Limite deve ser um inteiro entre 1 e 100.');\n }\n const message = await client.channels.fetchMessage(channelID, messageID);\n return (await message.fetchReactionUsers(emoji, { limit, after })).map(user => user.id);\n },\n async reactionUsersPage(channelID, messageID, emoji, limit, after) {\n const input = reactionUsersInput({ limit, after });\n if (!emoji.trim()) throw new YuzuhaError('MESSAGE_ARGUMENT', 'Emoji é obrigatório.');\n const message = await client.channels.fetchMessage(channelID, messageID);\n const page = await message.fetchReactionUsersPage(emoji, input);\n return { users: page.users.map(user => user.id), hasMore: page.hasMore, nextAfter: page.nextAfter };\n },\n async deleteAttachment(channelID, messageID, attachmentID): Promise<void> {\n await withRetry(async attempt => {\n await (await client.channels.fetchMessage(channelID, messageID)).deleteAttachment(attachmentID).catch(error => {\n if (attempt > 0 && isNotFound(error)) return;\n throw error;\n });\n }, reliability);\n },\n async sendTo(channelID, content): Promise<string> {\n return withRetry(() => client.channels.send(channelID, { content, allowedMentions: { parse: [], repliedUser: false } }).then(m => m.id),\n reliability, isUndeliveredSend);\n },\n async bulkDelete(channelID, messageIDs): Promise<string[]> {\n return withRetry(async () => {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n return channel.bulkDelete(messageIDs);\n }, reliability);\n },\n async bulkDeleteOwn(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.bulkDeleteMyMessages();\n },\n async acknowledgePins(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.acknowledgePins();\n },\n async clearReadState(channelID): Promise<void> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isTextBased()) throw new YuzuhaError('CHANNEL_TEXT', 'Canal sem suporte a mensagens.');\n await channel.clearReadState();\n },\n async purgeDM(channelID): Promise<number> {\n const channel = await client.channels.fetch(channelID, { force: true });\n if (!channel.isDM()) throw new YuzuhaError('CHANNEL_DM', 'Esta operação exige um canal de DM.');\n if (Number(channel.type) !== 999) throw new YuzuhaError('CHANNEL_NOTES', 'purgeDM só funciona no canal de anotações pessoais.');\n return channel.purgeMessages();\n },\n };\n}\n"]}
@@ -3,5 +3,5 @@ import type { GuildInfo, MemberInfo, UserInfo, UsersResources } from '../../../p
3
3
  export declare function toUserInfo(user: User): UserInfo;
4
4
  export declare function toMemberInfo(member: GuildMember): MemberInfo;
5
5
  export declare function toGuildInfo(guild: Guild): GuildInfo;
6
- export declare function createUsersResources(client: Client): UsersResources;
6
+ export declare function createUsersResources(client: Client, cdn?: import('../../../domain/cdn.js').Cdn): UsersResources;
7
7
  //# sourceMappingURL=users.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAA+B,KAAK,EAAE,WAAW,EAAyB,IAAI,EAAkB,MAAM,gBAAgB,CAAC;AAG3I,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,cAAc,EAGf,MAAM,mCAAmC,CAAC;AAyD3C,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAU/C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAgB5D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAWnD;AASD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA4HnE"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/fluxer/resources/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA+B,KAAK,EAAE,WAAW,EAAyB,IAAI,EAAkB,MAAM,gBAAgB,CAAC;AAG3I,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,cAAc,EAGf,MAAM,mCAAmC,CAAC;AA0D3C,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAU/C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAgB5D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAWnD;AASD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,OAAO,wBAAwB,EAAE,GAAiB,GAAG,cAAc,CAuJ5H"}