Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
85b96b3
feat(structures): add barrel exports for new structs
AsadHumayun Jan 31, 2026
e939029
feat(structures): rename
AsadHumayun Jan 31, 2026
2694d11
feat(structures): update barrel exports
AsadHumayun Jan 31, 2026
dd5d136
feat(structures): remove redundant exports
AsadHumayun Jan 31, 2026
475c1a5
feat(structures): rename structures
AsadHumayun Jan 31, 2026
6c8fedc
feat(structures): add GatewayPresenceActivityTimestamps substructure
AsadHumayun Feb 1, 2026
3d99b0f
feat(structures): add GatewayPresenceActivitySecrets
AsadHumayun Feb 1, 2026
67f33c1
feat(structures): add GatewayPresenceActivityParty
AsadHumayun Feb 1, 2026
d56f675
feat(structures): add GatewayPresenceActivityEmoji
AsadHumayun Feb 1, 2026
153bd1b
chore: fix style and imports
AsadHumayun Feb 1, 2026
2e34745
feat(structures): add GatewayPresenceActivityButton
AsadHumayun Feb 1, 2026
54ebdf5
chore: fix barrel exports
AsadHumayun Feb 1, 2026
84576b1
feat(structures): add GatewayPresenceActivityAssets
AsadHumayun Feb 1, 2026
1bc2006
chore: fix barrel exports
AsadHumayun Feb 1, 2026
5003482
feat(structures): add ActivityFlagBitFields
AsadHumayun Feb 1, 2026
991f022
feat(structures): add GatewayPresenceActivity structure
AsadHumayun Feb 1, 2026
f4f0c28
docs(structures): update class remark on GatewayPresenceActivityButton
AsadHumayun Feb 1, 2026
5d0c9ef
feat(structures): add GatewayPresenceClientStatus
AsadHumayun Feb 1, 2026
821be32
feat(structures): add GatewayPresenceUpdate
AsadHumayun Feb 1, 2026
c4a9f83
chore: actually export structures on the lib exports
AsadHumayun Feb 1, 2026
5e72b87
docs(structures): update `GatewayPresenceActivity#flags` for clarity
AsadHumayun Feb 1, 2026
b62f61e
fix(structures): return correct value for getter on ActivitySecrets
AsadHumayun Feb 4, 2026
89eb8f4
test(structures): add tests for GatewayPresence[..] structs
AsadHumayun Feb 4, 2026
ead0d68
fix: test that does not assert anything
AsadHumayun Feb 4, 2026
054ebdb
fix: correct type case on ActivityTimestamps
AsadHumayun Feb 4, 2026
ddda56c
docs: remove todo comment
AsadHumayun Feb 4, 2026
58dfb68
docs: remove todo
AsadHumayun Feb 4, 2026
6d77662
fix: correct incorrect implementation of party#id
AsadHumayun Feb 4, 2026
77c3a35
chore: rename structures
AsadHumayun Feb 6, 2026
c53fcf8
test: update tests
AsadHumayun Feb 6, 2026
6d0120b
docs: update comments
AsadHumayun Feb 6, 2026
fc546be
chore: type safety via `isFieldSet`
AsadHumayun Feb 6, 2026
9bf68ad
chore: add `xTimestamp` to `end`, `start` getters
AsadHumayun Feb 6, 2026
9897a2b
test: update tests for new field values
AsadHumayun Feb 6, 2026
1a22bab
chore: rename tests file to match new name
AsadHumayun Feb 8, 2026
fc9cfc7
fix(structures): use correct type on Presence
AsadHumayun Feb 9, 2026
dd6726d
feat: split `size` into 2 different getters
AsadHumayun Feb 9, 2026
c695cf7
test: update tests for new getters
AsadHumayun Feb 9, 2026
3530120
refactor(structures)!: use xDate convention in favour of xAt
AsadHumayun Feb 9, 2026
f56f925
fix(structures): add `inviteCoverImage` getter + update tests
AsadHumayun Feb 20, 2026
9362031
test(structures): apply review feedback
AsadHumayun Feb 21, 2026
2731961
chore: rename folder
AsadHumayun Feb 21, 2026
059abf6
docs: rm redundant link
AsadHumayun Feb 21, 2026
2ae8aff
chore: use `dateToDiscordISOTimestamp` and cleanup tests
AsadHumayun Feb 21, 2026
992076f
feat: isArrayFieldSet typeguard
AsadHumayun Feb 21, 2026
ec47b0b
chore: tidy
AsadHumayun Feb 21, 2026
96bf888
test(structures): cleanup tests
AsadHumayun Feb 21, 2026
cd87021
feat(structures): add URL getters and update tests
AsadHumayun Feb 21, 2026
2e4ac32
feat(structures): apply typeguards
AsadHumayun Feb 21, 2026
4b6b12d
Merge remote-tracking branch 'upstream/main' into feat/add-presence-s…
AsadHumayun Mar 3, 2026
f8a5c71
Merge remote-tracking branch 'upstream/main' into feat/add-presence-s…
AsadHumayun Mar 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions packages/structures/__tests__/channels.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {
ThreadMetadata,
VoiceChannel,
} from '../src/channels/index.js';
import { dateToDiscordISOTimestamp } from '../src/index.js';
import { kData } from '../src/utils/symbols.js';

describe('text channel', () => {
Expand All @@ -49,7 +50,7 @@ describe('text channel', () => {
position: 0,
guild_id: '2',
last_message_id: '3',
last_pin_timestamp: '2020-10-10T13:50:17.209Z',
last_pin_timestamp: '2020-10-10T13:50:17.209000+00:00',
nsfw: true,
parent_id: '4',
permission_overwrites: [
Expand Down Expand Up @@ -77,7 +78,7 @@ describe('text channel', () => {
expect(instance.guildId).toBe(data.guild_id);
expect(instance.lastMessageId).toBe(data.last_message_id);
expect(instance.lastPinTimestamp).toBe(Date.parse(data.last_pin_timestamp!));
expect(instance.lastPinAt?.toISOString()).toBe(data.last_pin_timestamp);
expect(dateToDiscordISOTimestamp(instance.lastPinDate!)).toBe(data.last_pin_timestamp);
expect(instance.nsfw).toBe(data.nsfw);
expect(instance.parentId).toBe(data.parent_id);
expect(instance[kData].permission_overwrites).toEqual(data.permission_overwrites);
Expand Down Expand Up @@ -137,8 +138,8 @@ describe('announcement channel', () => {
expect(instance.flags?.toJSON()).toBe(data.flags);
expect(instance.guildId).toBe(data.guild_id);
expect(instance.lastMessageId).toBe(data.last_message_id);
expect(instance.lastPinTimestamp).toBe(null);
expect(instance.lastPinAt).toBe(data.last_pin_timestamp);
expect(instance.lastPinTimestamp).toBeNull();
expect(instance.lastPinDate).toBeNull();
expect(instance.nsfw).toBe(data.nsfw);
expect(instance.parentId).toBe(data.parent_id);
expect(instance[kData].permission_overwrites).toEqual(data.permission_overwrites);
Expand Down Expand Up @@ -210,7 +211,7 @@ describe('DM channel', () => {
id: '1',
type: ChannelType.DM,
last_message_id: '3',
last_pin_timestamp: '2020-10-10T13:50:17.209Z',
last_pin_timestamp: '2020-10-10T13:50:17.209000+00:00',
name: null,
};

Expand All @@ -234,7 +235,7 @@ describe('DM channel', () => {
expect(instance.flags?.toJSON()).toBe(data.flags);
expect(instance.lastMessageId).toBe(data.last_message_id);
expect(instance.lastPinTimestamp).toBe(Date.parse(data.last_pin_timestamp!));
expect(instance.lastPinAt?.toISOString()).toBe(data.last_pin_timestamp);
expect(dateToDiscordISOTimestamp(instance.lastPinDate!)).toBe(data.last_pin_timestamp);
expect(instance[kData].recipients).toEqual(data.recipients);
expect(instance.type).toBe(ChannelType.DM);
expect(instance.url).toBe('https://discord.com/channels/@me/1');
Expand Down Expand Up @@ -614,7 +615,7 @@ describe('thread channels', () => {
const dataAnnounce: APIAnnouncementThreadChannel = {
...dataPublic,
thread_metadata: {
archive_timestamp: '2024-09-08T12:01:02.345Z',
archive_timestamp: '2024-09-08T12:01:02.345000+00:00',
archived: false,
auto_archive_duration: ThreadAutoArchiveDuration.ThreeDays,
locked: true,
Expand All @@ -627,7 +628,7 @@ describe('thread channels', () => {
...dataPublic,
thread_metadata: {
...dataAnnounce.thread_metadata!,
create_timestamp: '2023-01-02T15:13:11.987Z',
create_timestamp: '2023-01-02T15:13:11.987000+00:00',
invitable: true,
},
type: ChannelType.PrivateThread,
Expand Down Expand Up @@ -730,9 +731,9 @@ describe('thread channels', () => {
const instance = new ThreadMetadata(dataPrivate.thread_metadata!);
expect(instance.toJSON()).toEqual(dataPrivate.thread_metadata);
expect(instance.archived).toBe(dataPrivate.thread_metadata?.archived);
expect(instance.archivedAt?.toISOString()).toBe(dataPrivate.thread_metadata?.archive_timestamp);
expect(dateToDiscordISOTimestamp(instance.archivedDate!)).toBe(dataPrivate.thread_metadata?.archive_timestamp);
expect(instance.archivedTimestamp).toBe(Date.parse(dataPrivate.thread_metadata!.archive_timestamp));
expect(instance.createdAt?.toISOString()).toBe(dataPrivate.thread_metadata?.create_timestamp);
expect(dateToDiscordISOTimestamp(instance.createdDate!)).toBe(dataPrivate.thread_metadata?.create_timestamp);
expect(instance.createdTimestamp).toBe(Date.parse(dataPrivate.thread_metadata!.create_timestamp!));
expect(instance.autoArchiveDuration).toBe(dataPrivate.thread_metadata?.auto_archive_duration);
expect(instance.invitable).toBe(dataPrivate.thread_metadata?.invitable);
Expand Down
25 changes: 15 additions & 10 deletions packages/structures/__tests__/invite.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@ describe('Invite', () => {
const instance = new Invite(data);
expect(instance.type).toBe(data.type);
expect(instance.code).toBe(data.code);
expect(instance.createdAt).toBe(null);
expect(instance.createdTimestamp).toBe(null);
expect(instance.maxAge).toBe(undefined);
expect(instance.maxUses).toBe(undefined);
expect(instance.createdDate).toBeNull();
expect(instance.createdTimestamp).toBeNull();
expect(instance.maxAge).toBeUndefined();
expect(instance.maxUses).toBeUndefined();
expect(instance.approximateMemberCount).toBe(data.approximate_member_count);
expect(instance.approximatePresenceCount).toBe(data.approximate_presence_count);
expect(instance.targetType).toBe(data.target_type);
expect(instance.temporary).toBe(undefined);
expect(instance.uses).toBe(undefined);
expect(instance.expiresTimestamp).toBe(null);
expect(instance.expiresAt).toBe(null);
expect(instance.temporary).toBeUndefined();
expect(instance.uses).toBeUndefined();
expect(instance.expiresTimestamp).toBeNull();
expect(instance.expiresDate).toBeNull();
expect(instance.url).toBe('https://discord.gg/123');
expect(instance.toJSON()).toEqual(data);
expect(`${instance}`).toBe('https://discord.gg/123');
Expand All @@ -53,9 +53,10 @@ describe('Invite', () => {

test('extended Invite has all properties', () => {
const instance = new Invite(dataExtended);

expect(instance.type).toBe(data.type);
expect(instance.code).toBe(dataExtended.code);
expect(dateToDiscordISOTimestamp(instance.createdAt!)).toBe(dataExtended.created_at);
expect(dateToDiscordISOTimestamp(instance.createdDate!)).toBe(dataExtended.created_at);
expect(instance.createdTimestamp).toBe(Date.parse(dataExtended.created_at));
expect(instance.maxAge).toBe(dataExtended.max_age);
expect(instance.maxUses).toBe(dataExtended.max_uses);
Expand All @@ -64,10 +65,14 @@ describe('Invite', () => {
expect(instance.targetType).toBe(dataExtended.target_type);
expect(instance.temporary).toBe(dataExtended.temporary);
expect(instance.uses).toBe(dataExtended.uses);
expect(instance.createdTimestamp).toBe(Date.parse(dataExtended.created_at));
expect(dateToDiscordISOTimestamp(instance.createdDate!)).toEqual(dataExtended.created_at);
expect(instance.expiresTimestamp).toStrictEqual(Date.parse('2020-10-10T13:50:29.209000+00:00'));
expect(instance.expiresAt).toStrictEqual(new Date('2020-10-10T13:50:29.209000+00:00'));
expect(instance.expiresDate).toStrictEqual(new Date('2020-10-10T13:50:29.209000+00:00'));
expect(instance.url).toBe('https://discord.gg/123');
expect(instance.toJSON()).toEqual({ ...dataExtended, expires_at: '2020-10-10T13:50:29.209000+00:00' });
expect(instance.toString()).toEqual('https://discord.gg/123');
expect(instance.valueOf()).toEqual('123');
});

test('Invite with omitted properties', () => {
Expand Down
8 changes: 4 additions & 4 deletions packages/structures/__tests__/message.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ describe('message with embeds and attachments', () => {
expect(instance.position).toBe(data.position);
expect(instance.content).toBe(data.content);
expect(instance.createdTimestamp).toBe(Date.parse(data.timestamp));
expect(dateToDiscordISOTimestamp(instance.createdAt!)).toBe(data.timestamp);
expect(dateToDiscordISOTimestamp(instance.createdDate!)).toBe(data.timestamp);
expect(instance.flags?.toJSON()).toBe(data.flags);
expect(instance.editedTimestamp).toBe(Date.parse(data.edited_timestamp!));
expect(dateToDiscordISOTimestamp(instance.editedAt!)).toBe(data.edited_timestamp);
expect(dateToDiscordISOTimestamp(instance.editedDate!)).toBe(data.edited_timestamp);
expect(instance.nonce).toBe(data.nonce);
expect(instance.pinned).toBe(data.pinned);
expect(instance.tts).toBe(data.tts);
Expand Down Expand Up @@ -445,10 +445,10 @@ describe('message with components', () => {
expect(instance.position).toBe(data.position);
expect(instance.content).toBe(data.content);
expect(instance.createdTimestamp).toBe(Date.parse(data.timestamp));
expect(dateToDiscordISOTimestamp(instance.createdAt!)).toBe(data.timestamp);
expect(dateToDiscordISOTimestamp(instance.createdDate!)).toBe(data.timestamp);
expect(instance.flags?.toJSON()).toBe(data.flags);
expect(instance.editedTimestamp).toBe(Date.parse(data.edited_timestamp!));
expect(dateToDiscordISOTimestamp(instance.editedAt!)).toBe(data.edited_timestamp);
expect(dateToDiscordISOTimestamp(instance.editedDate!)).toBe(data.edited_timestamp);
expect(instance.nonce).toBe(data.nonce);
expect(instance.pinned).toBe(data.pinned);
expect(instance.tts).toBe(data.tts);
Expand Down
Loading