@teever/ez-hook-effect 0.4.4 → 0.5.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 (54) hide show
  1. package/README.md +88 -10
  2. package/dist/errors/WebhookError.d.ts +142 -3
  3. package/dist/errors/WebhookError.js +322 -0
  4. package/dist/errors/WebhookError.js.map +1 -0
  5. package/dist/errors/index.js +2 -0
  6. package/dist/errors/index.js.map +1 -0
  7. package/dist/index.d.ts +7 -3
  8. package/dist/index.js +493 -264
  9. package/dist/index.js.map +16 -14
  10. package/dist/layers/Config.d.ts +3 -3
  11. package/dist/layers/Config.js +166 -0
  12. package/dist/layers/Config.js.map +1 -0
  13. package/dist/layers/Default.d.ts +6 -0
  14. package/dist/layers/Default.js +9 -0
  15. package/dist/layers/Default.js.map +1 -0
  16. package/dist/layers/HttpClient.d.ts +8 -4
  17. package/dist/layers/HttpClient.js +209 -0
  18. package/dist/layers/HttpClient.js.map +1 -0
  19. package/dist/layers/index.js +3 -0
  20. package/dist/layers/index.js.map +1 -0
  21. package/dist/pipes/Embed.d.ts +2 -2
  22. package/dist/pipes/Embed.js +198 -0
  23. package/dist/pipes/Embed.js.map +1 -0
  24. package/dist/pipes/Webhook.d.ts +3 -2
  25. package/dist/pipes/Webhook.js +46 -0
  26. package/dist/pipes/Webhook.js.map +1 -0
  27. package/dist/pipes/index.js +3 -0
  28. package/dist/pipes/index.js.map +1 -0
  29. package/dist/schemas/Common.d.ts +6 -6
  30. package/dist/schemas/Common.js +30 -0
  31. package/dist/schemas/Common.js.map +1 -0
  32. package/dist/schemas/Discord.d.ts +1 -1
  33. package/dist/schemas/Discord.js +19 -0
  34. package/dist/schemas/Discord.js.map +1 -0
  35. package/dist/schemas/Embed.d.ts +58 -229
  36. package/dist/schemas/Embed.js +139 -0
  37. package/dist/schemas/Embed.js.map +1 -0
  38. package/dist/schemas/Field.d.ts +6 -27
  39. package/dist/schemas/Field.js +25 -0
  40. package/dist/schemas/Field.js.map +1 -0
  41. package/dist/schemas/Webhook.d.ts +42 -160
  42. package/dist/schemas/Webhook.js +87 -0
  43. package/dist/schemas/Webhook.js.map +1 -0
  44. package/dist/schemas/index.js +6 -0
  45. package/dist/schemas/index.js.map +1 -0
  46. package/dist/services/WebhookService.d.ts +27 -5
  47. package/dist/services/WebhookService.js +116 -0
  48. package/dist/services/WebhookService.js.map +1 -0
  49. package/dist/services/index.js +2 -0
  50. package/dist/services/index.js.map +1 -0
  51. package/dist/utils/normalize.d.ts +1 -0
  52. package/dist/utils/normalize.js +17 -0
  53. package/dist/utils/normalize.js.map +1 -0
  54. package/package.json +56 -54
@@ -0,0 +1,198 @@
1
+ import { Effect, pipe, Schema } from "effect";
2
+ import { ValidationError } from "../errors";
3
+ import { Author, ColorCode, Embed as EmbedSchema, Field, Footer, Image, maxLength, Provider, Thumbnail, UrlString, Video, } from "../schemas";
4
+ import { stripUndefined } from "../utils/normalize";
5
+ const createDraft = () => ({});
6
+ const setTitleImpl = (title) => (d) => pipe(Schema.decodeUnknownEffect(maxLength(256))(title), Effect.mapError(() => ValidationError.fromIssue("title", "Title must be 256 characters or less", {
7
+ constraint: "MaxLength",
8
+ expected: "256 characters or less",
9
+ actual: title.length,
10
+ })), Effect.as({ ...d, title }));
11
+ const setURLImpl = (url) => (d) => pipe(Schema.decodeUnknownEffect(UrlString)(url), Effect.mapError(() => ValidationError.fromIssue("url", "Invalid URL", {
12
+ constraint: "URL",
13
+ expected: "valid URL",
14
+ actual: url,
15
+ })), Effect.as({ ...d, url }));
16
+ const setDescriptionImpl = (description) => (d) => pipe(Schema.decodeUnknownEffect(maxLength(4096))(description), Effect.mapError(() => ValidationError.fromIssue("description", "Description must be 4096 characters or less", {
17
+ constraint: "MaxLength",
18
+ expected: "4096 characters or less",
19
+ actual: description.length,
20
+ })), Effect.as({ ...d, description }));
21
+ const setTimestampImpl = (date) => (d) => Effect.succeed({ ...d, timestamp: (date ?? new Date()).toISOString() });
22
+ const setColorImpl = (color) => (d) => {
23
+ const colorValue = typeof color === "string" ? parseInt(color.replace("#", ""), 16) : color;
24
+ return pipe(Schema.decodeUnknownEffect(ColorCode)(colorValue), Effect.mapError(() => ValidationError.fromIssue("color", "Invalid color code (must be 0-16777215)", {
25
+ constraint: "Range",
26
+ expected: "0-16777215",
27
+ actual: colorValue,
28
+ })), Effect.as({ ...d, color: colorValue }));
29
+ };
30
+ const setFooterImpl = (footerOrText, icon_url, proxy_icon_url) => (d) => {
31
+ const footer = typeof footerOrText === "string"
32
+ ? {
33
+ text: footerOrText,
34
+ ...(icon_url === undefined ? {} : { icon_url }),
35
+ ...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),
36
+ }
37
+ : (() => {
38
+ const { text, icon_url, proxy_icon_url } = footerOrText;
39
+ return {
40
+ text,
41
+ ...(icon_url === undefined ? {} : { icon_url }),
42
+ ...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),
43
+ };
44
+ })();
45
+ return pipe(Schema.decodeUnknownEffect(Footer)(footer), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "footer", value: footer })), Effect.as({ ...d, footer }));
46
+ };
47
+ const setImageImpl = (imageOrUrl, height, width) => (d) => {
48
+ const image = typeof imageOrUrl === "string"
49
+ ? {
50
+ url: imageOrUrl,
51
+ ...(height === undefined ? {} : { height }),
52
+ ...(width === undefined ? {} : { width }),
53
+ }
54
+ : (() => {
55
+ const { url, proxy_url, height, width } = imageOrUrl;
56
+ return {
57
+ url,
58
+ ...(proxy_url === undefined ? {} : { proxy_url }),
59
+ ...(height === undefined ? {} : { height }),
60
+ ...(width === undefined ? {} : { width }),
61
+ };
62
+ })();
63
+ return pipe(Schema.decodeUnknownEffect(Image)(image), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "image", value: image })), Effect.as({ ...d, image }));
64
+ };
65
+ const setThumbnailImpl = (thumbnailOrUrl, height, width) => (d) => {
66
+ const thumbnail = typeof thumbnailOrUrl === "string"
67
+ ? {
68
+ url: thumbnailOrUrl,
69
+ ...(height === undefined ? {} : { height }),
70
+ ...(width === undefined ? {} : { width }),
71
+ }
72
+ : (() => {
73
+ const { url, proxy_url, height, width } = thumbnailOrUrl;
74
+ return {
75
+ url,
76
+ ...(proxy_url === undefined ? {} : { proxy_url }),
77
+ ...(height === undefined ? {} : { height }),
78
+ ...(width === undefined ? {} : { width }),
79
+ };
80
+ })();
81
+ return pipe(Schema.decodeUnknownEffect(Thumbnail)(thumbnail), Effect.mapError((e) => ValidationError.fromParseError(e, {
82
+ field: "thumbnail",
83
+ value: thumbnail,
84
+ })), Effect.as({ ...d, thumbnail }));
85
+ };
86
+ const setVideoImpl = (videoOrUrl, height, width) => (d) => {
87
+ const video = typeof videoOrUrl === "string"
88
+ ? {
89
+ url: videoOrUrl,
90
+ ...(height === undefined ? {} : { height }),
91
+ ...(width === undefined ? {} : { width }),
92
+ }
93
+ : (() => {
94
+ const { url, proxy_url, height, width } = videoOrUrl;
95
+ return {
96
+ ...(url === undefined ? {} : { url }),
97
+ ...(proxy_url === undefined ? {} : { proxy_url }),
98
+ ...(height === undefined ? {} : { height }),
99
+ ...(width === undefined ? {} : { width }),
100
+ };
101
+ })();
102
+ return pipe(Schema.decodeUnknownEffect(Video)(video), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "video", value: video })), Effect.as({ ...d, video }));
103
+ };
104
+ const setProviderImpl = (providerOrName, url) => (d) => {
105
+ const provider = typeof providerOrName === "string"
106
+ ? {
107
+ name: providerOrName,
108
+ ...(url === undefined ? {} : { url }),
109
+ }
110
+ : (() => {
111
+ const { name, url } = providerOrName;
112
+ return {
113
+ ...(name === undefined ? {} : { name }),
114
+ ...(url === undefined ? {} : { url }),
115
+ };
116
+ })();
117
+ return pipe(Schema.decodeUnknownEffect(Provider)(provider), Effect.mapError((e) => ValidationError.fromParseError(e, {
118
+ field: "provider",
119
+ value: provider,
120
+ })), Effect.as({ ...d, provider }));
121
+ };
122
+ const setAuthorImpl = (authorOrName, url, icon_url) => (d) => {
123
+ const author = typeof authorOrName === "string"
124
+ ? {
125
+ name: authorOrName,
126
+ ...(url === undefined ? {} : { url }),
127
+ ...(icon_url === undefined ? {} : { icon_url }),
128
+ }
129
+ : (() => {
130
+ const { name, url, icon_url, proxy_icon_url } = authorOrName;
131
+ return {
132
+ ...(name === undefined ? {} : { name }),
133
+ ...(url === undefined ? {} : { url }),
134
+ ...(icon_url === undefined ? {} : { icon_url }),
135
+ ...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),
136
+ };
137
+ })();
138
+ return pipe(Schema.decodeUnknownEffect(Author)(author), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "author", value: author })), Effect.as({ ...d, author }));
139
+ };
140
+ export const addFieldImpl = (fieldOrName, value, inline = false) => (d) => {
141
+ const currentFields = d.fields || [];
142
+ if (currentFields.length >= 25) {
143
+ return Effect.fail(ValidationError.fromIssue("fields", "Cannot add more than 25 fields", {
144
+ constraint: "MaxItems",
145
+ expected: "25 fields or less",
146
+ actual: currentFields.length + 1,
147
+ }));
148
+ }
149
+ const field = typeof fieldOrName === "string"
150
+ ? { name: fieldOrName, value: value ?? "", inline }
151
+ : (() => {
152
+ const { name, value, inline } = fieldOrName;
153
+ return {
154
+ name,
155
+ value,
156
+ ...(inline === undefined ? {} : { inline }),
157
+ };
158
+ })();
159
+ return pipe(Schema.decodeUnknownEffect(Field)(field), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "fields", value: field })), Effect.map(() => ({ ...d, fields: [...currentFields, field] })));
160
+ };
161
+ const setFieldsImpl = (fields) => (d) => {
162
+ if (fields.length > 25) {
163
+ return Effect.fail(ValidationError.fromIssue("fields", "Cannot have more than 25 fields", {
164
+ constraint: "MaxItems",
165
+ expected: "25 fields or less",
166
+ actual: fields.length,
167
+ }));
168
+ }
169
+ const normalized = fields.map((field) => {
170
+ const { name, value, inline } = field;
171
+ return {
172
+ name,
173
+ value,
174
+ ...(inline === undefined ? {} : { inline }),
175
+ };
176
+ });
177
+ return pipe(Effect.forEach(normalized, (f) => Schema.decodeUnknownEffect(Field)(f)), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "fields", value: fields })), Effect.map((decoded) => ({ ...d, fields: decoded })));
178
+ };
179
+ const buildImpl = (d) => pipe(Schema.decodeUnknownEffect(EmbedSchema)(stripUndefined({ ...d, type: "rich" })), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "embed", value: d })));
180
+ export const buildDirect = buildImpl;
181
+ export const addFieldDirect = addFieldImpl;
182
+ export const make = Effect.succeed(createDraft());
183
+ const chain = (f) => (self) => pipe(self, Effect.flatMap(f));
184
+ export const setTitle = (title) => chain(setTitleImpl(title));
185
+ export const setURL = (url) => chain(setURLImpl(url));
186
+ export const setDescription = (description) => chain(setDescriptionImpl(description));
187
+ export const setTimestamp = (date) => chain(setTimestampImpl(date));
188
+ export const setColor = (color) => chain(setColorImpl(color));
189
+ export const setFooter = (footer, icon_url, proxy_icon_url) => chain(setFooterImpl(footer, icon_url, proxy_icon_url));
190
+ export const setImage = (image, height, width) => chain(setImageImpl(image, height, width));
191
+ export const setThumbnail = (thumbnail, height, width) => chain(setThumbnailImpl(thumbnail, height, width));
192
+ export const setVideo = (video, height, width) => chain(setVideoImpl(video, height, width));
193
+ export const setProvider = (provider, url) => chain(setProviderImpl(provider, url));
194
+ export const setAuthor = (author, url, icon_url) => chain(setAuthorImpl(author, url, icon_url));
195
+ export const addField = (field, value, inline = false) => chain(addFieldImpl(field, value, inline));
196
+ export const setFields = (fields) => chain(setFieldsImpl(fields));
197
+ export const build = (self) => pipe(self, Effect.flatMap(buildImpl));
198
+ //# sourceMappingURL=Embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Embed.js","sourceRoot":"","sources":["../../src/pipes/Embed.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { ValidationError } from "../errors";
3
3
  import { type Embed as EmbedSchema, type WebhookFile, WebhookParameter, Webhook as WebhookSchema } from "../schemas";
4
4
  type WebhookDraft = Partial<Schema.Schema.Type<typeof WebhookSchema>>;
5
5
  export declare const addEmbedImpl: (embed: Schema.Schema.Type<typeof EmbedSchema>) => (d: WebhookDraft) => Effect.Effect<{
6
- embeds: EmbedSchema[];
6
+ embeds: readonly EmbedSchema[];
7
7
  username?: string;
8
8
  avatar_url?: string;
9
9
  tts?: boolean;
@@ -15,7 +15,7 @@ export declare const addEmbedImpl: (embed: Schema.Schema.Type<typeof EmbedSchema
15
15
  }, ValidationError, never>;
16
16
  export declare const buildDirect: (d: WebhookDraft) => Effect.Effect<WebhookSchema, ValidationError, never>;
17
17
  export declare const addEmbedDirect: (embed: Schema.Schema.Type<typeof EmbedSchema>) => (d: WebhookDraft) => Effect.Effect<{
18
- embeds: EmbedSchema[];
18
+ embeds: readonly EmbedSchema[];
19
19
  username?: string;
20
20
  avatar_url?: string;
21
21
  tts?: boolean;
@@ -25,6 +25,7 @@ export declare const addEmbedDirect: (embed: Schema.Schema.Type<typeof EmbedSche
25
25
  readonly data: string | Uint8Array<ArrayBuffer>;
26
26
  };
27
27
  }, ValidationError, never>;
28
+ export declare const validate: (input: unknown) => Effect.Effect<WebhookSchema, ValidationError, never>;
28
29
  export declare const modifyParams: (p: Schema.Schema.Type<typeof WebhookParameter>) => Effect.Effect<WebhookParameter, ValidationError, never>;
29
30
  export declare const make: Effect.Effect<WebhookDraft, never>;
30
31
  export declare const setUsername: (username: string) => (self: Effect.Effect<WebhookDraft, ValidationError>) => Effect.Effect<Partial<WebhookSchema>, ValidationError, never>;
@@ -0,0 +1,46 @@
1
+ import { Effect, pipe, Schema } from "effect";
2
+ import { ValidationError } from "../errors";
3
+ import { EmbedArray, maxLength, UrlString, WebhookParameter, Webhook as WebhookSchema, } from "../schemas";
4
+ import { stripUndefined } from "../utils/normalize";
5
+ const createDraft = () => ({});
6
+ const setUsernameImpl = (username) => (d) => pipe(Schema.decodeUnknownEffect(maxLength(80))(username), Effect.mapError(() => ValidationError.fromIssue("username", "Username must be 80 characters or less", {
7
+ constraint: "MaxLength",
8
+ expected: "80 characters or less",
9
+ actual: username.length,
10
+ })), Effect.as({ ...d, username }));
11
+ const setAvatarUrlImpl = (avatar_url) => (d) => pipe(Schema.decodeUnknownEffect(UrlString)(avatar_url), Effect.mapError(() => ValidationError.fromIssue("avatar_url", "Invalid avatar URL", {
12
+ constraint: "URL",
13
+ expected: "valid URL",
14
+ actual: avatar_url,
15
+ })), Effect.as({ ...d, avatar_url }));
16
+ const setContentImpl = (content) => (d) => pipe(Schema.decodeUnknownEffect(maxLength(2000))(content), Effect.mapError(() => ValidationError.fromIssue("content", "Content must be 2000 characters or less", {
17
+ constraint: "MaxLength",
18
+ expected: "2000 characters or less",
19
+ actual: content.length,
20
+ })), Effect.as({ ...d, content }));
21
+ const setTTSImpl = (tts) => (d) => Effect.succeed({ ...d, tts });
22
+ export const addEmbedImpl = (embed) => (d) => {
23
+ const current = d.embeds || [];
24
+ const next = [...current, embed];
25
+ return pipe(Schema.decodeUnknownEffect(EmbedArray)(stripUndefined(next)), Effect.mapError(() => ValidationError.fromIssue("embeds", "Cannot have more than 10 embeds", {
26
+ constraint: "MaxItems",
27
+ expected: "10 embeds or less",
28
+ actual: next.length,
29
+ })), Effect.map((decoded) => ({ ...d, embeds: decoded })));
30
+ };
31
+ const setFileImpl = (file) => (d) => Effect.succeed({ ...d, file });
32
+ const buildImpl = (d) => pipe(Schema.decodeUnknownEffect(WebhookSchema)(stripUndefined(d)), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "webhook", value: d })));
33
+ export const buildDirect = buildImpl;
34
+ export const addEmbedDirect = addEmbedImpl;
35
+ export const validate = (input) => pipe(Schema.decodeUnknownEffect(WebhookSchema)(stripUndefined(input)), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "webhook", value: input })));
36
+ export const modifyParams = (p) => pipe(Schema.decodeUnknownEffect(WebhookParameter)(stripUndefined(p)), Effect.mapError((e) => ValidationError.fromParseError(e, { field: "params", value: p })));
37
+ export const make = Effect.succeed(createDraft());
38
+ const chain = (f) => (self) => pipe(self, Effect.flatMap(f));
39
+ export const setUsername = (username) => chain(setUsernameImpl(username));
40
+ export const setAvatarUrl = (url) => chain(setAvatarUrlImpl(url));
41
+ export const setContent = (content) => chain(setContentImpl(content));
42
+ export const setTTS = (tts) => chain(setTTSImpl(tts));
43
+ export const addEmbed = (embed) => chain(addEmbedImpl(embed));
44
+ export const setFile = (file) => chain(setFileImpl(file));
45
+ export const build = (self) => pipe(self, Effect.flatMap(buildImpl));
46
+ //# sourceMappingURL=Webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Webhook.js","sourceRoot":"","sources":["../../src/pipes/Webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * as Embed from "./Embed";
2
+ export * as Webhook from "./Webhook";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -2,9 +2,9 @@ import { Schema } from "effect";
2
2
  /**
3
3
  * Common schema definitions and constraints
4
4
  */
5
- export declare const maxLength: (max: number) => Schema.filter<typeof Schema.String>;
6
- export declare const positiveInt: Schema.filter<Schema.filter<typeof Schema.Number>>;
7
- export declare const UrlString: Schema.refine<string, typeof Schema.String>;
8
- export declare const ISO8601Timestamp: Schema.refine<string, typeof Schema.String>;
9
- export declare const ColorCode: Schema.filter<Schema.filter<Schema.filter<typeof Schema.Number>>>;
10
- export declare const Uint8ArraySchema: Schema.instanceOf<Uint8Array<ArrayBuffer>>;
5
+ export declare const maxLength: (max: number) => Schema.String;
6
+ export declare const positiveInt: Schema.Number;
7
+ export declare const UrlString: Schema.String;
8
+ export declare const ISO8601Timestamp: Schema.String;
9
+ export declare const ColorCode: Schema.Number;
10
+ export declare const Uint8ArraySchema: Schema.instanceOf<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
@@ -0,0 +1,30 @@
1
+ import { Schema } from "effect";
2
+ /**
3
+ * Common schema definitions and constraints
4
+ */
5
+ // String with max length constraint (use native annotation so Arbitrary can honor it)
6
+ export const maxLength = (max) => Schema.String.check(Schema.isMaxLength(max));
7
+ // Positive integer constraint
8
+ export const positiveInt = Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0));
9
+ // URL string validation
10
+ export const UrlString = Schema.String.pipe(Schema.check(Schema.makeFilter((value) => {
11
+ try {
12
+ new URL(value);
13
+ return true;
14
+ }
15
+ catch {
16
+ return "Invalid URL format";
17
+ }
18
+ })));
19
+ // ISO8601 timestamp validation
20
+ export const ISO8601Timestamp = Schema.String.pipe(Schema.check(Schema.makeFilter((value) => {
21
+ const iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/;
22
+ return iso8601Regex.test(value)
23
+ ? true
24
+ : "Invalid ISO8601 timestamp format";
25
+ })));
26
+ // Discord color code (0-16777215)
27
+ export const ColorCode = Schema.Number.check(Schema.isInt(), Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(16777215));
28
+ // Uint8Array schema (used in Webhook file data)
29
+ export const Uint8ArraySchema = Schema.instanceOf(Uint8Array);
30
+ //# sourceMappingURL=Common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/schemas/Common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC7C,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CACvB,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAC1C,MAAM,CAAC,KAAK,CACX,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,IAAI,CAAC;QACJ,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,oBAAoB,CAAC;IAC7B,CAAC;AACF,CAAC,CAAC,CACF,CACD,CAAC;AAEF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACjD,MAAM,CAAC,KAAK,CACX,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,MAAM,YAAY,GAAG,mDAAmD,CAAC;IACzE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,kCAAkC,CAAC;AACvC,CAAC,CAAC,CACF,CACD,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAC3C,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAChC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CACpC,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC"}
@@ -13,4 +13,4 @@ export declare const DISCORD_WEBHOOK_REGEX: RegExp;
13
13
  /**
14
14
  * Effect Schema for validating Discord webhook URLs.
15
15
  */
16
- export declare const DiscordWebhookUrl: Schema.filter<typeof Schema.String>;
16
+ export declare const DiscordWebhookUrl: Schema.String;
@@ -0,0 +1,19 @@
1
+ import { Schema } from "effect";
2
+ /**
3
+ * Discord webhook URL regex
4
+ * Matches:
5
+ * - https://discord.com/api/webhooks/ID/TOKEN
6
+ * - Optional canary/ptb subdomains
7
+ * - Optional /v{number} API version segment
8
+ * - Optional trailing slash
9
+ * - Supports legacy discordapp.com domain
10
+ * Exposes named capture groups `id` and `token` for callers that need them.
11
+ */
12
+ export const DISCORD_WEBHOOK_REGEX = /^https:\/\/(?:(?:canary|ptb)\.)?discord(?:app)?\.com\/api(?:\/v\d+)?\/webhooks\/(?<id>\d+)\/(?<token>[\w-]+)\/?$/;
13
+ /**
14
+ * Effect Schema for validating Discord webhook URLs.
15
+ */
16
+ export const DiscordWebhookUrl = Schema.String.check(Schema.isPattern(DISCORD_WEBHOOK_REGEX, {
17
+ message: "Invalid Discord webhook URL",
18
+ }));
19
+ //# sourceMappingURL=Discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Discord.js","sourceRoot":"","sources":["../../src/schemas/Discord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GACjC,kHAAkH,CAAC;AAEpH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACnD,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE;IACvC,OAAO,EAAE,6BAA6B;CACtC,CAAC,CACF,CAAC"}