@teever/ez-hook-effect 0.5.1 → 0.5.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors/WebhookError.d.ts +7 -7
- package/dist/index.js +17 -965
- package/dist/index.js.map +5 -13
- package/dist/layers/Config.d.ts +2 -2
- package/dist/layers/Config.js +2 -2
- package/dist/layers/Config.js.map +1 -1
- package/dist/layers/HttpClient.d.ts +3 -3
- package/dist/layers/HttpClient.js +2 -2
- package/dist/layers/HttpClient.js.map +1 -1
- package/dist/schemas/Embed.d.ts +8 -8
- package/dist/schemas/Field.d.ts +1 -1
- package/dist/schemas/Webhook.d.ts +3 -3
- package/dist/services/WebhookService.d.ts +2 -2
- package/dist/services/WebhookService.js +2 -2
- package/dist/services/WebhookService.js.map +1 -1
- package/package.json +56 -56
package/dist/index.js.map
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/
|
|
3
|
+
"sources": ["../src/schemas/Common.ts", "../src/schemas/Discord.ts", "../src/schemas/Embed.ts", "../src/schemas/Field.ts", "../src/schemas/Webhook.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/* c8 ignore start */\nimport { Data, type Schema } from \"effect\";\n\n/**\n * Base error class for all webhook-related errors\n */\n/* c8 ignore stop */\nexport class WebhookError extends Data.TaggedError(\"WebhookError\")<{\n\tmessage: string;\n\tcause?: unknown;\n}> {}\n\n/**\n * Structured validation issue with path and constraint details\n */\nexport interface ValidationIssue {\n\t/** JSONPath-style path to the invalid field, e.g. \"$.embeds[0].fields[2].name\" */\n\treadonly path: string;\n\t/** Human-readable error message */\n\treadonly message: string;\n\t/** Constraint name, e.g. \"MaxLength\", \"MinItems\", \"Required\" */\n\treadonly constraint?: string;\n\t/** Expected value or constraint description */\n\treadonly expected?: string;\n\t/** Actual value (truncated for large values) */\n\treadonly actual?: unknown;\n}\n\n/**\n * Extract constraint name from Effect Schema error message\n */\nconst extractConstraint = (message: string): string | undefined => {\n\tif (message.includes(\"at most\") || message.includes(\"maximum\"))\n\t\treturn \"MaxLength\";\n\tif (message.includes(\"at least\") || message.includes(\"minimum\"))\n\t\treturn \"MinLength\";\n\tif (message.includes(\"required\") || message.includes(\"missing\"))\n\t\treturn \"Required\";\n\tif (message.includes(\"expected\") && message.includes(\"to be\")) return \"Type\";\n\tif (message.includes(\"URL\") || message.includes(\"url\")) return \"URL\";\n\tif (message.includes(\"integer\") || message.includes(\"number\"))\n\t\treturn \"Number\";\n\treturn undefined;\n};\n\n/**\n * Truncate large values for error display\n */\nconst truncateValue = (value: unknown, maxLength = 100): unknown => {\n\tif (typeof value === \"string\" && value.length > maxLength) {\n\t\treturn `${value.slice(0, maxLength)}... (${value.length} chars)`;\n\t}\n\tif (Array.isArray(value) && value.length > 5) {\n\t\treturn `[Array with ${value.length} items]`;\n\t}\n\tif (typeof value === \"object\" && value !== null) {\n\t\tconst keys = Object.keys(value);\n\t\tif (keys.length > 5) {\n\t\t\treturn `{Object with ${keys.length} keys}`;\n\t\t}\n\t}\n\treturn value;\n};\n\n/**\n * Convert Effect Schema ParseIssue path to JSONPath string\n */\nconst pathToString = (path: ReadonlyArray<PropertyKey>): string => {\n\tif (path.length === 0) return \"$\";\n\treturn path.reduce<string>((acc, segment) => {\n\t\tif (typeof segment === \"number\") {\n\t\t\treturn `${acc}[${segment}]`;\n\t\t}\n\t\treturn `${acc}.${String(segment)}`;\n\t}, \"$\");\n};\n\nconst toArray = <T>(value: T | ReadonlyArray<T>): ReadonlyArray<T> =>\n\tArray.isArray(value) ? (value as ReadonlyArray<T>) : [value as T];\n\ntype ParseIssue = Schema.SchemaError extends Error & { issue: infer I }\n\t? I\n\t: never;\n\n// Helper to safely access issue properties via unknown\nconst getIssueProp = <T>(issue: ParseIssue, key: string): T | undefined =>\n\t(issue as unknown as Record<string, unknown>)[key] as T | undefined;\n\nconst extractIssuesFromParseIssue = (\n\tissue: ParseIssue,\n\tcurrentPath: ReadonlyArray<PropertyKey> = [],\n): ValidationIssue[] => {\n\tconst issues: ValidationIssue[] = [];\n\n\tswitch (issue._tag) {\n\t\tcase \"InvalidType\": {\n\t\t\tconst ast = getIssueProp<{ _tag?: string }>(issue, \"ast\");\n\t\t\tconst message =\n\t\t\t\tgetIssueProp<string>(issue, \"message\") ?? `Expected ${ast?._tag}`;\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage,\n\t\t\t\tconstraint: extractConstraint(message) ?? \"Type\",\n\t\t\t\tactual: truncateValue(getIssueProp(issue, \"actual\")),\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Forbidden\": {\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage: getIssueProp<string>(issue, \"message\") ?? \"Value is forbidden\",\n\t\t\t\tconstraint: \"Forbidden\",\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"MissingKey\": {\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage: \"Required field is missing\",\n\t\t\t\tconstraint: \"Required\",\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"UnexpectedKey\": {\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage: getIssueProp<string>(issue, \"message\") ?? \"Unexpected field\",\n\t\t\t\tconstraint: \"Unexpected\",\n\t\t\t\tactual: truncateValue(getIssueProp(issue, \"actual\")),\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Pointer\": {\n\t\t\tconst pathSegments =\n\t\t\t\tgetIssueProp<ReadonlyArray<PropertyKey>>(issue, \"path\") ?? [];\n\t\t\tconst newPath = [...currentPath, ...pathSegments];\n\t\t\tconst nested = getIssueProp<ParseIssue>(issue, \"issue\");\n\t\t\tif (nested) issues.push(...extractIssuesFromParseIssue(nested, newPath));\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Composite\": {\n\t\t\tconst rawIssues = getIssueProp<ParseIssue | ReadonlyArray<ParseIssue>>(\n\t\t\t\tissue,\n\t\t\t\t\"issues\",\n\t\t\t);\n\t\t\tconst subIssues = rawIssues ? toArray(rawIssues) : [];\n\t\t\tfor (const subIssue of subIssues) {\n\t\t\t\tissues.push(...extractIssuesFromParseIssue(subIssue, currentPath));\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Filter\":\n\t\tcase \"Encoding\": {\n\t\t\tconst nested = getIssueProp<ParseIssue>(issue, \"issue\");\n\t\t\tif (nested)\n\t\t\t\tissues.push(...extractIssuesFromParseIssue(nested, currentPath));\n\t\t\tbreak;\n\t\t}\n\t\tcase \"InvalidValue\":\n\t\tcase \"OneOf\":\n\t\tcase \"AnyOf\": {\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage: getIssueProp<string>(issue, \"message\") ?? \"Invalid value\",\n\t\t\t\tconstraint: \"Value\",\n\t\t\t\tactual: truncateValue(getIssueProp(issue, \"actual\")),\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tconst message = getIssueProp<string>(issue, \"message\") ?? \"Invalid value\";\n\t\t\tconst constraint = extractConstraint(message);\n\t\t\tissues.push({\n\t\t\t\tpath: pathToString(currentPath),\n\t\t\t\tmessage,\n\t\t\t\t...(constraint !== undefined && { constraint }),\n\t\t\t\t...(getIssueProp(issue, \"actual\") !== undefined && {\n\t\t\t\t\tactual: truncateValue(getIssueProp(issue, \"actual\")),\n\t\t\t\t}),\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn issues;\n};\n\n/**\n * Convert Effect Schema ParseError to ValidationIssue array\n */\nexport const parseErrorToIssues = (\n\terror: Schema.SchemaError,\n): ValidationIssue[] => {\n\treturn extractIssuesFromParseIssue(error.issue as ParseIssue);\n};\n\n/**\n * Create a single ValidationIssue from simple field validation\n */\nexport const makeIssue = (\n\tfield: string,\n\tmessage: string,\n\toptions?: {\n\t\tconstraint?: string;\n\t\texpected?: string;\n\t\tactual?: unknown;\n\t},\n): ValidationIssue => {\n\tconst constraint = options?.constraint ?? extractConstraint(message);\n\treturn {\n\t\tpath: field.startsWith(\"$\") ? field : `$.${field}`,\n\t\tmessage,\n\t\t...(constraint !== undefined && { constraint }),\n\t\t...(options?.expected !== undefined && { expected: options.expected }),\n\t\t...(options?.actual !== undefined && {\n\t\t\tactual: truncateValue(options.actual),\n\t\t}),\n\t};\n};\n\n/**\n * Validation errors for webhook data with structured issues\n */\nexport class ValidationError extends Data.TaggedError(\"ValidationError\")<{\n\t/** Human-readable summary message */\n\tmessage: string;\n\t/** Structured validation issues */\n\tissues: ReadonlyArray<ValidationIssue>;\n\t/** Legacy: primary field that failed (for backward compatibility) */\n\tfield?: string;\n\t/** Legacy: value that failed validation (for backward compatibility) */\n\tvalue?: unknown;\n}> {\n\t/**\n\t * Format issues as a human-readable string\n\t */\n\tformat(options?: { maxIssues?: number }): string {\n\t\tconst maxIssues = options?.maxIssues ?? 10;\n\t\tconst displayIssues = this.issues.slice(0, maxIssues);\n\t\tconst lines = displayIssues.map((issue) => {\n\t\t\tlet line = ` - ${issue.path}: ${issue.message}`;\n\t\t\tif (issue.constraint) {\n\t\t\t\tline += ` [${issue.constraint}]`;\n\t\t\t}\n\t\t\treturn line;\n\t\t});\n\n\t\tif (this.issues.length > maxIssues) {\n\t\t\tlines.push(` ... and ${this.issues.length - maxIssues} more issues`);\n\t\t}\n\n\t\treturn `${this.message}\\n${lines.join(\"\\n\")}`;\n\t}\n\n\t/**\n\t * Create ValidationError from Effect Schema ParseError\n\t */\n\tstatic fromParseError(\n\t\tparseError: Schema.SchemaError,\n\t\tcontext?: { field?: string; value?: unknown },\n\t) {\n\t\tconst issues = parseErrorToIssues(parseError);\n\t\tconst firstIssue = issues[0];\n\t\tconst message =\n\t\t\tissues.length === 1 && firstIssue\n\t\t\t\t? firstIssue.message\n\t\t\t\t: `Validation failed (${issues.length} issues)`;\n\n\t\treturn new ValidationError({\n\t\t\tmessage,\n\t\t\tissues,\n\t\t\t...(context?.field !== undefined && { field: context.field }),\n\t\t\t...(context?.value !== undefined && { value: context.value }),\n\t\t});\n\t}\n\n\t/**\n\t * Create ValidationError from a single issue\n\t */\n\tstatic fromIssue(\n\t\tfield: string,\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\tconstraint?: string;\n\t\t\texpected?: string;\n\t\t\tactual?: unknown;\n\t\t},\n\t): ValidationError {\n\t\tconst issue = makeIssue(field, message, options);\n\t\treturn new ValidationError({\n\t\t\tmessage,\n\t\t\tissues: [issue],\n\t\t\tfield,\n\t\t\tvalue: options?.actual,\n\t\t});\n\t}\n}\n\n/**\n * Network-related errors\n */\nexport class NetworkError extends Data.TaggedError(\"NetworkError\")<{\n\tmessage: string;\n\tstatusCode?: number;\n\tresponse?: unknown;\n}> {}\n\n/**\n * Rate limit errors\n */\nexport class RateLimitError extends Data.TaggedError(\"RateLimitError\")<{\n\tmessage: string;\n\tretryAfter: number;\n\tlimit?: number;\n\tremaining?: number;\n\treset?: Date;\n}> {}\n\n/**\n * Configuration errors\n */\nexport class ConfigError extends Data.TaggedError(\"ConfigError\")<{\n\tmessage: string;\n\tparameter: string;\n}> {}\n\n/**\n * File-related errors\n */\nexport class FileError extends Data.TaggedError(\"FileError\")<{\n\tmessage: string;\n\tfilename?: string;\n\tsize?: number;\n\tmaxSize?: number;\n}> {}\n\n/**\n * HTTP response error details\n */\nexport interface HttpErrorResponse {\n\tstatus: number;\n\tstatusText: string;\n\theaders: Record<string, string>;\n\tbody?: unknown;\n}\n\n/**\n * HTTP errors with detailed response information\n */\nexport class HttpError extends Data.TaggedError(\"HttpError\")<{\n\tmessage: string;\n\trequest: {\n\t\tmethod: string;\n\t\turl: string;\n\t};\n\tresponse?: HttpErrorResponse;\n}> {}\n\n/**\n * All possible webhook errors\n */\nexport type WebhookErrors =\n\t| WebhookError\n\t| ValidationError\n\t| NetworkError\n\t| RateLimitError\n\t| ConfigError\n\t| FileError\n\t| HttpError;\n\n/**\n * Create a readable message for any webhook error.\n */\nexport const formatWebhookError = (\n\terror: WebhookErrors,\n\toptions?: { maxIssues?: number },\n): string => {\n\tswitch (error._tag) {\n\t\tcase \"ValidationError\":\n\t\t\treturn error.format(options);\n\t\tcase \"RateLimitError\":\n\t\t\treturn `${error.message} (retryAfter=${error.retryAfter}ms)`;\n\t\tcase \"HttpError\": {\n\t\t\tconst status = error.response?.status;\n\t\t\treturn status ? `${error.message} (status=${status})` : error.message;\n\t\t}\n\t\tdefault:\n\t\t\treturn error.message;\n\t}\n};\n\n/**\n * Produce a structured log object for any webhook error.\n */\nexport const webhookErrorToLogObject = (error: WebhookErrors) => {\n\tswitch (error._tag) {\n\t\tcase \"ValidationError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tissues: error.issues,\n\t\t\t\tfield: error.field,\n\t\t\t\tvalue: error.value,\n\t\t\t};\n\t\tcase \"RateLimitError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tretryAfter: error.retryAfter,\n\t\t\t\tlimit: error.limit,\n\t\t\t\tremaining: error.remaining,\n\t\t\t\treset: error.reset,\n\t\t\t};\n\t\tcase \"HttpError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\trequest: error.request,\n\t\t\t\tresponse: error.response,\n\t\t\t};\n\t\tcase \"NetworkError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tstatusCode: error.statusCode,\n\t\t\t\tresponse: error.response,\n\t\t\t};\n\t\tcase \"ConfigError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tparameter: error.parameter,\n\t\t\t};\n\t\tcase \"FileError\":\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tfilename: error.filename,\n\t\t\t\tsize: error.size,\n\t\t\t\tmaxSize: error.maxSize,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttag: error._tag,\n\t\t\t\tmessage: error.message,\n\t\t\t\tcause: error.cause,\n\t\t\t};\n\t}\n};\n",
|
|
6
|
-
"import { Effect, Layer, ServiceMap } from \"effect\";\nimport { ConfigError } from \"../errors\";\nimport { DISCORD_WEBHOOK_REGEX } from \"../schemas/Discord\";\n\n/**\n * Webhook configuration\n */\nexport interface WebhookConfig {\n\treadonly webhookUrl: string;\n\treadonly maxRetries?: number;\n\treadonly baseDelayMs?: number;\n\treadonly maxDelayMs?: number;\n\treadonly enableJitter?: boolean;\n}\n\n/**\n * Config service tag\n */\nexport class Config extends ServiceMap.Service<\n\tConfig,\n\t{\n\t\treadonly webhook: WebhookConfig;\n\t}\n>()(\"Config\") {}\n\n/**\n * Validate webhook URL format with detailed error messages\n */\nconst validateWebhookUrl = (\n\turl: string,\n): Effect.Effect<string, ConfigError> => {\n\tif (!url || url.trim() === \"\") {\n\t\treturn Effect.fail(\n\t\t\tnew ConfigError({\n\t\t\t\tmessage:\n\t\t\t\t\t\"Webhook URL is empty. Please provide a valid Discord webhook URL.\\n\" +\n\t\t\t\t\t\"Format: https://discord.com/api/webhooks/{webhook_id}/{webhook_token}\\n\" +\n\t\t\t\t\t\"You can create a webhook in Discord: Server Settings > Integrations > Webhooks\",\n\t\t\t\tparameter: \"webhookUrl\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (!url.startsWith(\"https://\")) {\n\t\treturn Effect.fail(\n\t\t\tnew ConfigError({\n\t\t\t\tmessage:\n\t\t\t\t\t\"Webhook URL must use HTTPS protocol.\\n\" +\n\t\t\t\t\t`Received: ${url.substring(0, 50)}${url.length > 50 ? \"...\" : \"\"}\\n` +\n\t\t\t\t\t\"Expected format: https://discord.com/api/webhooks/{webhook_id}/{webhook_token}\",\n\t\t\t\tparameter: \"webhookUrl\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (!DISCORD_WEBHOOK_REGEX.test(url)) {\n\t\tconst isDiscordDomain =\n\t\t\turl.includes(\"discord.com\") || url.includes(\"discordapp.com\");\n\t\tconst hasWebhooksPath = url.includes(\"/webhooks/\");\n\n\t\tlet hint = \"\";\n\t\tif (!isDiscordDomain) {\n\t\t\thint = \"URL must be from discord.com or discordapp.com domain.\";\n\t\t} else if (!hasWebhooksPath) {\n\t\t\thint = \"URL must include /api/webhooks/ path.\";\n\t\t} else {\n\t\t\thint =\n\t\t\t\t\"URL must include both webhook ID (numeric) and token after /webhooks/.\";\n\t\t}\n\n\t\treturn Effect.fail(\n\t\t\tnew ConfigError({\n\t\t\t\tmessage:\n\t\t\t\t\t`Invalid Discord webhook URL format.\\n` +\n\t\t\t\t\t`${hint}\\n` +\n\t\t\t\t\t`Received: ${url.substring(0, 80)}${url.length > 80 ? \"...\" : \"\"}\\n` +\n\t\t\t\t\t`Expected format: https://discord.com/api/webhooks/{webhook_id}/{webhook_token}`,\n\t\t\t\tparameter: \"webhookUrl\",\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn Effect.succeed(url);\n};\n\n/**\n * Validate retry configuration options\n */\nconst validateRetryOptions = (options?: Partial<WebhookConfig>) => {\n\tconst errors: string[] = [];\n\n\tif (options?.maxRetries !== undefined) {\n\t\tif (!Number.isInteger(options.maxRetries) || options.maxRetries < 0) {\n\t\t\terrors.push(\n\t\t\t\t`maxRetries must be a non-negative integer (received: ${options.maxRetries})`,\n\t\t\t);\n\t\t}\n\t\tif (options.maxRetries > 10) {\n\t\t\terrors.push(\n\t\t\t\t`maxRetries should not exceed 10 to avoid excessive retries (received: ${options.maxRetries})`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (options?.baseDelayMs !== undefined) {\n\t\tif (!Number.isInteger(options.baseDelayMs) || options.baseDelayMs < 0) {\n\t\t\terrors.push(\n\t\t\t\t`baseDelayMs must be a non-negative integer (received: ${options.baseDelayMs})`,\n\t\t\t);\n\t\t}\n\t\tif (options.baseDelayMs > 60000) {\n\t\t\terrors.push(\n\t\t\t\t`baseDelayMs should not exceed 60000ms (received: ${options.baseDelayMs})`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (options?.maxDelayMs !== undefined) {\n\t\tif (!Number.isInteger(options.maxDelayMs) || options.maxDelayMs < 0) {\n\t\t\terrors.push(\n\t\t\t\t`maxDelayMs must be a non-negative integer (received: ${options.maxDelayMs})`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\toptions.baseDelayMs !== undefined &&\n\t\t\toptions.maxDelayMs < options.baseDelayMs\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\t`maxDelayMs (${options.maxDelayMs}) must be >= baseDelayMs (${options.baseDelayMs})`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (errors.length > 0) {\n\t\treturn Effect.fail(\n\t\t\tnew ConfigError({\n\t\t\t\tmessage: `Invalid retry configuration:\\n${errors.map((e) => ` - ${e}`).join(\"\\n\")}`,\n\t\t\t\tparameter: \"retryConfig\",\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn Effect.succeed(options);\n};\n\n/**\n * Create configuration from webhook URL\n */\nexport const makeConfig = (\n\twebhookUrl: string,\n\toptions?: Partial<WebhookConfig>,\n) =>\n\tEffect.gen(function* () {\n\t\tconst validatedUrl = yield* validateWebhookUrl(webhookUrl);\n\t\tyield* validateRetryOptions(options);\n\n\t\treturn {\n\t\t\twebhook: {\n\t\t\t\twebhookUrl: validatedUrl,\n\t\t\t\tmaxRetries: options?.maxRetries ?? 3,\n\t\t\t\tbaseDelayMs: options?.baseDelayMs ?? 1000,\n\t\t\t\tmaxDelayMs: options?.maxDelayMs ?? 60000,\n\t\t\t\tenableJitter: options?.enableJitter ?? true,\n\t\t\t},\n\t\t};\n\t});\n\n/**\n * Configuration layer from webhook URL\n */\nexport const makeConfigLayer = (\n\twebhookUrl: string,\n\toptions?: Partial<WebhookConfig>,\n) => Layer.effect(Config, makeConfig(webhookUrl, options));\n\n/**\n * Configuration layer from environment variables\n */\nexport const ConfigFromEnv = Layer.effect(\n\tConfig,\n\tEffect.gen(function* () {\n\t\tconst rawWebhookUrl = yield* Effect.sync(\n\t\t\t() => process.env.DISCORD_WEBHOOK_URL ?? \"\",\n\t\t);\n\n\t\tif (!rawWebhookUrl) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tnew ConfigError({\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"DISCORD_WEBHOOK_URL environment variable not set.\\n\" +\n\t\t\t\t\t\t\"Please set DISCORD_WEBHOOK_URL in your environment or .env file.\\n\" +\n\t\t\t\t\t\t\"See .env.example for all available configuration options.\",\n\t\t\t\t\tparameter: \"DISCORD_WEBHOOK_URL\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst webhookUrl = yield* validateWebhookUrl(rawWebhookUrl);\n\n\t\tconst maxRetries: number = yield* Effect.sync(() => {\n\t\t\tconst v = process.env.WEBHOOK_MAX_RETRIES;\n\t\t\treturn v ? Number.parseInt(v, 10) : 3;\n\t\t});\n\n\t\tconst baseDelayMs: number = yield* Effect.sync(() => {\n\t\t\tconst v = process.env.WEBHOOK_BASE_DELAY_MS;\n\t\t\treturn v ? Number.parseInt(v, 10) : 1000;\n\t\t});\n\n\t\tconst maxDelayMs: number = yield* Effect.sync(() => {\n\t\t\tconst v = process.env.WEBHOOK_MAX_DELAY_MS;\n\t\t\treturn v ? Number.parseInt(v, 10) : 60000;\n\t\t});\n\n\t\tconst enableJitter: boolean = yield* Effect.sync(() => {\n\t\t\tconst v = process.env.WEBHOOK_ENABLE_JITTER;\n\t\t\treturn v ? v === \"true\" : true;\n\t\t});\n\n\t\tyield* validateRetryOptions({ maxRetries, baseDelayMs, maxDelayMs });\n\n\t\treturn {\n\t\t\twebhook: {\n\t\t\t\twebhookUrl,\n\t\t\t\tmaxRetries,\n\t\t\t\tbaseDelayMs,\n\t\t\t\tmaxDelayMs,\n\t\t\t\tenableJitter,\n\t\t\t},\n\t\t};\n\t}),\n);\n\n/**\n * Extract webhook ID and token from URL\n */\nexport const parseWebhookUrl = (\n\turl: string,\n): Effect.Effect<{ id: string; token: string }, ConfigError> =>\n\tEffect.gen(function* () {\n\t\tconst match = url.match(DISCORD_WEBHOOK_REGEX);\n\n\t\tif (!match?.groups?.id || !match.groups.token) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tnew ConfigError({\n\t\t\t\t\tmessage: \"Invalid webhook URL format\",\n\t\t\t\t\tparameter: \"webhookUrl\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst { id, token } = match.groups;\n\n\t\treturn { id, token };\n\t});\n",
|
|
7
|
-
"import { Schema } from \"effect\";\n\n/**\n * Discord webhook URL regex\n * Matches:\n * - https://discord.com/api/webhooks/ID/TOKEN\n * - Optional canary/ptb subdomains\n * - Optional /v{number} API version segment\n * - Optional trailing slash\n * - Supports legacy discordapp.com domain\n * Exposes named capture groups `id` and `token` for callers that need them.\n */\nexport const DISCORD_WEBHOOK_REGEX =\n\t/^https:\\/\\/(?:(?:canary|ptb)\\.)?discord(?:app)?\\.com\\/api(?:\\/v\\d+)?\\/webhooks\\/(?<id>\\d+)\\/(?<token>[\\w-]+)\\/?$/;\n\n/**\n * Effect Schema for validating Discord webhook URLs.\n */\nexport const DiscordWebhookUrl = Schema.String.check(\n\tSchema.isPattern(DISCORD_WEBHOOK_REGEX, {\n\t\tmessage: \"Invalid Discord webhook URL\",\n\t}),\n);\n",
|
|
8
|
-
"import { Duration, Effect, Layer, Schedule, ServiceMap } from \"effect\";\nimport { HttpError, NetworkError, RateLimitError } from \"../errors\";\n\n/**\n * HTTP request configuration\n */\nexport interface HttpRequest {\n\tmethod: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\turl: string;\n\theaders?: Record<string, string>;\n\tbody?: unknown;\n\ttimeout?: Duration.Duration;\n}\n\n/**\n * HTTP response\n */\nexport interface HttpResponse {\n\tstatus: number;\n\tstatusText: string;\n\theaders: Record<string, string>;\n\tbody: unknown;\n\ttext: string;\n}\n\n/**\n * Retry configuration for HTTP requests\n */\nexport interface RetryConfig {\n\tmaxRetries: number;\n\tbaseDelay: Duration.Duration;\n\tmaxDelay: Duration.Duration;\n\tjitter: boolean;\n}\n\n/**\n * HTTP Client service tag\n */\nexport class HttpClient extends ServiceMap.Service<\n\tHttpClient,\n\t{\n\t\treadonly request: (\n\t\t\trequest: HttpRequest,\n\t\t) => Effect.Effect<HttpResponse, HttpError | NetworkError | RateLimitError>;\n\t\treadonly retryConfig: RetryConfig;\n\t}\n>()(\"HttpClient\") {}\n\n/**\n * Parse rate limit headers from Discord API response\n */\nexport interface RateLimitInfo {\n\t/** Retry after in milliseconds */\n\tretryAfter: number;\n\t/** Total rate limit for this endpoint */\n\tlimit?: number;\n\t/** Remaining requests before rate limit */\n\tremaining?: number;\n\t/** When the rate limit resets */\n\treset?: Date;\n\t/** Whether this is a global rate limit */\n\tglobal?: boolean;\n}\n\n/**\n * Parse rate limit information from response headers\n */\nexport const parseRateLimitHeaders = (\n\theaders: Record<string, string>,\n): RateLimitInfo | null => {\n\tconst retryAfterHeader = headers[\"retry-after\"];\n\tconst rateLimitRemaining = headers[\"x-ratelimit-remaining\"];\n\n\t// Check if we have rate limit info\n\tif (!retryAfterHeader && rateLimitRemaining !== \"0\") {\n\t\treturn null;\n\t}\n\n\t// Parse retry-after (Discord sends this in seconds)\n\tlet retryAfter = 0;\n\tif (retryAfterHeader) {\n\t\tconst parsed = Number.parseFloat(retryAfterHeader);\n\t\tif (!Number.isNaN(parsed)) {\n\t\t\t// Discord sends seconds, convert to milliseconds\n\t\t\tretryAfter = Math.ceil(parsed * 1000);\n\t\t}\n\t}\n\n\t// Parse other rate limit headers\n\tconst limit = headers[\"x-ratelimit-limit\"];\n\tconst remaining = headers[\"x-ratelimit-remaining\"];\n\tconst resetHeader = headers[\"x-ratelimit-reset\"];\n\tconst resetAfterHeader = headers[\"x-ratelimit-reset-after\"];\n\tconst globalHeader = headers[\"x-ratelimit-global\"];\n\n\tlet reset: Date | undefined;\n\tif (resetHeader) {\n\t\tconst resetTimestamp = Number.parseFloat(resetHeader);\n\t\tif (!Number.isNaN(resetTimestamp)) {\n\t\t\treset = new Date(resetTimestamp * 1000);\n\t\t}\n\t} else if (resetAfterHeader) {\n\t\tconst resetAfter = Number.parseFloat(resetAfterHeader);\n\t\tif (!Number.isNaN(resetAfter)) {\n\t\t\treset = new Date(Date.now() + resetAfter * 1000);\n\t\t}\n\t}\n\n\t// If we still don't have retryAfter, calculate from reset\n\tif (retryAfter === 0 && reset) {\n\t\tretryAfter = Math.max(0, reset.getTime() - Date.now());\n\t}\n\n\t// Default to 1 second if we have no timing info\n\tif (retryAfter === 0) {\n\t\tretryAfter = 1000;\n\t}\n\n\treturn {\n\t\tretryAfter,\n\t\t...(limit && { limit: Number.parseInt(limit, 10) }),\n\t\t...(remaining && { remaining: Number.parseInt(remaining, 10) }),\n\t\t...(reset && { reset }),\n\t\tglobal: globalHeader === \"true\",\n\t};\n};\n\n/**\n * Default retry configuration\n */\nexport const defaultRetryConfig: RetryConfig = {\n\tmaxRetries: 3,\n\tbaseDelay: Duration.seconds(1),\n\tmaxDelay: Duration.seconds(60),\n\tjitter: true,\n};\n\n/**\n * Create retry schedule based on configuration\n */\nexport const createRetrySchedule = (config: RetryConfig) => {\n\tconst capDelay = (delay: Duration.Duration) =>\n\t\tDuration.isLessThanOrEqualTo(delay, config.maxDelay)\n\t\t\t? delay\n\t\t\t: config.maxDelay;\n\n\t// Exponential backoff with optional jitter\n\tlet policy = Schedule.exponential(config.baseDelay, 2);\n\n\tif (config.jitter) {\n\t\tpolicy = policy.pipe(\n\t\t\tSchedule.modifyDelay((_, delay) =>\n\t\t\t\tEffect.sync(() => {\n\t\t\t\t\tconst millis = Duration.toMillis(delay);\n\t\t\t\t\treturn Duration.millis(millis + Math.random() * millis);\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\n\t// Cap delay to maxDelay\n\tpolicy = policy.pipe(\n\t\tSchedule.modifyDelay((_, delay) => Effect.succeed(capDelay(delay))),\n\t);\n\n\t// Apply a max retry cap while keeping output as Duration\n\tconst capped = Schedule.both(policy, Schedule.recurs(config.maxRetries));\n\treturn capped.pipe(Schedule.map(([delay]) => Effect.succeed(delay)));\n};\n\n// (Note) Rate limit parsing is now handled via parseRateLimitHeaders\n// and returns RateLimitError for 429 responses.\n\n/**\n * Fetch-based HTTP client implementation\n */\nexport const FetchHttpClient = (\n\tretryConfig: RetryConfig = defaultRetryConfig,\n): ServiceMap.Service.Shape<typeof HttpClient> => ({\n\tretryConfig,\n\trequest: (request) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = request.timeout\n\t\t\t\t? setTimeout(\n\t\t\t\t\t\t() => controller.abort(),\n\t\t\t\t\t\tDuration.toMillis(request.timeout),\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\n\t\t\t// Build headers as a real `Headers` instance so downstream\n\t\t\t// code can reliably use `get()` in tests and callers.\n\t\t\tconst requestHeaders = new Headers({\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t});\n\t\t\tfor (const [key, value] of Object.entries(request.headers ?? {})) {\n\t\t\t\trequestHeaders.set(key, value);\n\t\t\t}\n\n\t\t\tconst response = yield* Effect.tryPromise({\n\t\t\t\ttry: () =>\n\t\t\t\t\tfetch(request.url, {\n\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\theaders: requestHeaders,\n\t\t\t\t\t\tbody: request.body ? JSON.stringify(request.body) : undefined,\n\t\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\t}),\n\t\t\t\tcatch: (error) =>\n\t\t\t\t\tnew NetworkError({\n\t\t\t\t\t\tmessage: `Network request failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\tstatusCode: 0,\n\t\t\t\t\t}),\n\t\t\t});\n\n\t\t\tif (timeout) clearTimeout(timeout);\n\n\t\t\t// Read response body as text; handle odd mocks that return a function\n\t\t\t// by invoking it to retrieve the actual string.\n\t\t\tconst rawTextOrFn = yield* Effect.tryPromise({\n\t\t\t\ttry: () => response.text(),\n\t\t\t\tcatch: () =>\n\t\t\t\t\tnew NetworkError({ message: \"Failed to read response body\" }),\n\t\t\t});\n\n\t\t\tconst text =\n\t\t\t\ttypeof rawTextOrFn === \"function\"\n\t\t\t\t\t? yield* Effect.tryPromise({\n\t\t\t\t\t\t\ttry: () => (rawTextOrFn as unknown as () => Promise<string>)(),\n\t\t\t\t\t\t\tcatch: () =>\n\t\t\t\t\t\t\t\tnew NetworkError({ message: \"Failed to read response body\" }),\n\t\t\t\t\t\t})\n\t\t\t\t\t: String(rawTextOrFn ?? \"\");\n\n\t\t\tconst headers: Record<string, string> = {};\n\t\t\tresponse.headers.forEach((value, key) => {\n\t\t\t\theaders[key.toLowerCase()] = value;\n\t\t\t});\n\n\t\t\tlet body: unknown = text;\n\t\t\tif (headers[\"content-type\"]?.includes(\"application/json\") && text) {\n\t\t\t\ttry {\n\t\t\t\t\tbody = JSON.parse(text);\n\t\t\t\t} catch {\n\t\t\t\t\t// Keep as text if JSON parsing fails\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst httpResponse: HttpResponse = {\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t\ttext,\n\t\t\t};\n\n\t\t\t// Handle HTTP errors\n\t\t\tif (!response.ok) {\n\t\t\t\t// Handle rate limiting (429) with specific RateLimitError\n\t\t\t\tif (response.status === 429) {\n\t\t\t\t\tconst rateLimitInfo = parseRateLimitHeaders(headers);\n\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\tnew RateLimitError({\n\t\t\t\t\t\t\tmessage: `Rate limited: retry after ${rateLimitInfo?.retryAfter ?? 1000}ms`,\n\t\t\t\t\t\t\tretryAfter: rateLimitInfo?.retryAfter ?? 1000,\n\t\t\t\t\t\t\t...(rateLimitInfo?.limit !== undefined && {\n\t\t\t\t\t\t\t\tlimit: rateLimitInfo.limit,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...(rateLimitInfo?.remaining !== undefined && {\n\t\t\t\t\t\t\t\tremaining: rateLimitInfo.remaining,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...(rateLimitInfo?.reset !== undefined && {\n\t\t\t\t\t\t\t\treset: rateLimitInfo.reset,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew HttpError({\n\t\t\t\t\t\tmessage: `HTTP ${response.status}: ${response.statusText}`,\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\turl: request.url,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn httpResponse;\n\t\t}),\n});\n\n/**\n * Live HTTP client layer with default configuration\n */\nexport const HttpClientLive = Layer.succeed(HttpClient, FetchHttpClient());\n\n/**\n * HTTP client layer with custom retry configuration\n */\nexport const makeHttpClientLayer = (retryConfig: Partial<RetryConfig>) =>\n\tLayer.succeed(\n\t\tHttpClient,\n\t\tFetchHttpClient({ ...defaultRetryConfig, ...retryConfig }),\n\t);\n\n/**\n * Test HTTP client layer for deterministic unit tests.\n */\nexport const makeTestHttpClient = (\n\tresolver: (request: HttpRequest) => Effect.Effect<HttpResponse, NetworkError | HttpError | RateLimitError>,\n\tretryConfig: RetryConfig = defaultRetryConfig,\n) =>\n\tLayer.succeed(HttpClient, {\n\t\trequest: resolver,\n\t\tretryConfig,\n\t});\n",
|
|
9
|
-
"import { Layer } from \"effect\";\nimport { WebhookServiceLive } from \"../services/WebhookService\";\nimport { makeConfigLayer, type WebhookConfig } from \"./Config\";\nimport { HttpClientLive } from \"./HttpClient\";\n\n/**\n * Convenience layer that wires Config + HttpClient + WebhookService.\n */\nexport const makeDefaultLayer = (\n\turl: string,\n\toptions?: Partial<WebhookConfig>,\n) =>\n\tWebhookServiceLive.pipe(\n\t\tLayer.provide(makeConfigLayer(url, options)),\n\t\tLayer.provide(HttpClientLive),\n\t);\n\n",
|
|
10
|
-
"import {\n\tDuration,\n\tEffect,\n\tLayer,\n\tpipe,\n\tSchedule,\n\tSchema,\n\tServiceMap,\n} from \"effect\";\nimport {\n\tHttpError,\n\tNetworkError,\n\tRateLimitError,\n\tValidationError,\n\tWebhookError,\n} from \"../errors\";\nimport { Config } from \"../layers/Config\";\nimport { createRetrySchedule, HttpClient } from \"../layers/HttpClient\";\nimport { Webhook, WebhookParameter, WebhookResponse } from \"../schemas\";\nimport { stripUndefined } from \"../utils/normalize\";\n\n/**\n * Webhook service tag\n */\nexport class WebhookService extends ServiceMap.Service<\n\tWebhookService,\n\t{\n\t\t/**\n\t\t * Send a webhook message\n\t\t */\n\t\treadonly sendWebhook: (\n\t\t\twebhook: Webhook,\n\t\t) => Effect.Effect<\n\t\t\tvoid,\n\t\t\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError\n\t\t>;\n\n\t\t/**\n\t\t * Send a webhook message and return the raw response.\n\t\t */\n\t\treadonly sendWebhookRaw: (\n\t\t\twebhook: Webhook,\n\t\t) => Effect.Effect<\n\t\t\tSendWebhookRawResult,\n\t\t\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError\n\t\t>;\n\n\t\t/**\n\t\t * Modify webhook settings\n\t\t */\n\t\treadonly modifyWebhook: (\n\t\t\tparams: WebhookParameter,\n\t\t) => Effect.Effect<\n\t\t\tWebhookResponse,\n\t\t\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError\n\t\t>;\n\n\t\t/**\n\t\t * Get webhook information\n\t\t */\n\t\treadonly getWebhook: () => Effect.Effect<\n\t\t\tWebhookResponse,\n\t\t\tWebhookError | NetworkError | HttpError | RateLimitError\n\t\t>;\n\n\t\t/**\n\t\t * Delete the webhook\n\t\t */\n\t\treadonly deleteWebhook: () => Effect.Effect<\n\t\t\tboolean,\n\t\t\tWebhookError | NetworkError | HttpError | RateLimitError\n\t\t>;\n\n\t\t/**\n\t\t * Validate webhook by checking if it exists and is accessible\n\t\t */\n\t\treadonly validateWebhook: () => Effect.Effect<boolean, never>;\n\t}\n>()(\"WebhookService\") {}\n\nexport type SendWebhookRawResult = {\n\tstatus: number;\n\tok: boolean;\n\theaders: Record<string, string>;\n\tbody: unknown;\n\ttext: string;\n};\n\n/**\n * Create webhook service implementation\n */\nexport const makeWebhookService = Effect.gen(function* () {\n\t// body unchanged\n\tconst config = yield* Config;\n\tconst httpClient = yield* HttpClient;\n\n\tconst webhookUrl = config.webhook.webhookUrl;\n\n\t// Create retry schedule based on config\n\tconst retrySchedule = createRetrySchedule({\n\t\tmaxRetries: config.webhook.maxRetries ?? httpClient.retryConfig.maxRetries,\n\t\tbaseDelay: Duration.millis(\n\t\t\tconfig.webhook.baseDelayMs ??\n\t\t\t\tDuration.toMillis(httpClient.retryConfig.baseDelay),\n\t\t),\n\t\tmaxDelay: Duration.millis(\n\t\t\tconfig.webhook.maxDelayMs ??\n\t\t\t\tDuration.toMillis(httpClient.retryConfig.maxDelay),\n\t\t),\n\t\tjitter: config.webhook.enableJitter ?? httpClient.retryConfig.jitter,\n\t});\n\n\tconst sendWebhookRaw = (webhook: Webhook) =>\n\t\tpipe(\n\t\t\tSchema.decodeUnknownEffect(Webhook)(stripUndefined(webhook)),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"webhook\", value: webhook }),\n\t\t\t),\n\t\t\tEffect.flatMap((validatedWebhook) =>\n\t\t\t\thttpClient\n\t\t\t\t\t.request({\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\turl: webhookUrl,\n\t\t\t\t\t\tbody: validatedWebhook,\n\t\t\t\t\t})\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.retry(\n\t\t\t\t\t\t\tSchedule.while(retrySchedule, (meta) =>\n\t\t\t\t\t\t\t\tEffect.succeed(\n\t\t\t\t\t\t\t\t\tmeta.input instanceof NetworkError ||\n\t\t\t\t\t\t\t\t\t\tmeta.input instanceof RateLimitError ||\n\t\t\t\t\t\t\t\t\t\t(meta.input instanceof HttpError &&\n\t\t\t\t\t\t\t\t\t\t\t(meta.input.response?.status ?? 0) >= 500),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t),\n\t\t\tEffect.map((response) => ({\n\t\t\t\tstatus: response.status,\n\t\t\t\tok: response.status >= 200 && response.status < 300,\n\t\t\t\theaders: response.headers,\n\t\t\t\tbody: response.body,\n\t\t\t\ttext: response.text,\n\t\t\t})),\n\t\t);\n\n\tconst sendWebhook = (webhook: Webhook) =>\n\t\tpipe(\n\t\t\tsendWebhookRaw(webhook),\n\t\t\tEffect.flatMap((response) =>\n\t\t\t\tresponse.status === 204 && response.text === \"\"\n\t\t\t\t\t? Effect.void\n\t\t\t\t\t: Effect.fail(\n\t\t\t\t\t\t\tnew WebhookError({\n\t\t\t\t\t\t\t\tmessage: `Unexpected webhook response: ${response.status}`,\n\t\t\t\t\t\t\t\tcause: response,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\tconst modifyWebhook = (params: WebhookParameter) =>\n\t\tpipe(\n\t\t\tSchema.decodeUnknownEffect(WebhookParameter)(stripUndefined(params)),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"params\", value: params }),\n\t\t\t),\n\t\t\tEffect.flatMap((validatedParams) =>\n\t\t\t\thttpClient.request({\n\t\t\t\t\tmethod: \"PATCH\",\n\t\t\t\t\turl: webhookUrl,\n\t\t\t\t\tbody: validatedParams,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tEffect.flatMap((response) =>\n\t\t\t\tSchema.decodeUnknownEffect(WebhookResponse)(response.body).pipe(\n\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tnew WebhookError({\n\t\t\t\t\t\t\t\tmessage: \"Invalid webhook response\",\n\t\t\t\t\t\t\t\tcause: response.body,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\tconst getWebhook = () =>\n\t\tpipe(\n\t\t\thttpClient.request({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\turl: webhookUrl,\n\t\t\t}),\n\t\t\tEffect.flatMap((response) =>\n\t\t\t\tSchema.decodeUnknownEffect(WebhookResponse)(response.body).pipe(\n\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tnew WebhookError({\n\t\t\t\t\t\t\t\tmessage: \"Invalid webhook response\",\n\t\t\t\t\t\t\t\tcause: response.body,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\tconst validateWebhook = () =>\n\t\tpipe(\n\t\t\thttpClient.request({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\turl: webhookUrl,\n\t\t\t}),\n\t\t\tEffect.as(true),\n\t\t\tEffect.catch(() => Effect.succeed(false)),\n\t\t);\n\n\tconst deleteWebhook = () =>\n\t\tpipe(\n\t\t\thttpClient.request({\n\t\t\t\tmethod: \"DELETE\",\n\t\t\t\turl: webhookUrl,\n\t\t\t}),\n\t\t\tEffect.map((response) => response.status === 204),\n\t\t);\n\n\treturn {\n\t\tsendWebhook,\n\t\tsendWebhookRaw,\n\t\tmodifyWebhook,\n\t\tgetWebhook,\n\t\tdeleteWebhook,\n\t\tvalidateWebhook,\n\t} satisfies ServiceMap.Service.Shape<typeof WebhookService>;\n});\n\n/**\n * Live webhook service layer\n */\nexport const WebhookServiceLive = Layer.effect(\n\tWebhookService,\n\tmakeWebhookService,\n);\n\n/**\n * Send a webhook message\n * Module-level accessor that reads from context\n */\nexport const sendWebhook = (\n\twebhook: Webhook,\n): Effect.Effect<\n\tvoid,\n\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError,\n\tWebhookService\n> => WebhookService.use((service) => service.sendWebhook(webhook));\n\n/**\n * Send a webhook message and return the raw response.\n */\nexport const sendWebhookRaw = (\n\twebhook: Webhook,\n): Effect.Effect<\n\tSendWebhookRawResult,\n\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError,\n\tWebhookService\n> => WebhookService.use((service) => service.sendWebhookRaw(webhook));\n\n/**\n * Modify webhook settings\n * Module-level accessor that reads from context\n */\nexport const modifyWebhook = (\n\tparams: WebhookParameter,\n): Effect.Effect<\n\tWebhookResponse,\n\tWebhookError | ValidationError | NetworkError | HttpError | RateLimitError,\n\tWebhookService\n> => WebhookService.use((service) => service.modifyWebhook(params));\n\n/**\n * Get webhook information\n * Module-level accessor that reads from context\n */\nexport const getWebhook = (): Effect.Effect<\n\tWebhookResponse,\n\tWebhookError | NetworkError | HttpError | RateLimitError,\n\tWebhookService\n> => WebhookService.use((service) => service.getWebhook());\n\n/**\n * Delete the webhook\n * Module-level accessor that reads from context\n */\nexport const deleteWebhook = (): Effect.Effect<\n\tboolean,\n\tWebhookError | NetworkError | HttpError | RateLimitError,\n\tWebhookService\n> => WebhookService.use((service) => service.deleteWebhook());\n\n/**\n * Validate webhook by checking if it exists and is accessible\n * Module-level accessor that reads from context\n */\nexport const validateWebhook = (): Effect.Effect<\n\tboolean,\n\tnever,\n\tWebhookService\n> => WebhookService.use((service) => service.validateWebhook());\n",
|
|
11
5
|
"import { Schema } from \"effect\";\n\n/**\n * Common schema definitions and constraints\n */\n\n// String with max length constraint (use native annotation so Arbitrary can honor it)\nexport const maxLength = (max: number) =>\n\tSchema.String.check(Schema.isMaxLength(max));\n\n// Positive integer constraint\nexport const positiveInt = Schema.Number.check(\n\tSchema.isInt(),\n\tSchema.isGreaterThan(0),\n);\n\n// URL string validation\nexport const UrlString = Schema.String.pipe(\n\tSchema.check(\n\t\tSchema.makeFilter((value) => {\n\t\t\ttry {\n\t\t\t\tnew URL(value);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn \"Invalid URL format\";\n\t\t\t}\n\t\t}),\n\t),\n);\n\n// ISO8601 timestamp validation\nexport const ISO8601Timestamp = Schema.String.pipe(\n\tSchema.check(\n\t\tSchema.makeFilter((value) => {\n\t\t\tconst iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/;\n\t\t\treturn iso8601Regex.test(value)\n\t\t\t\t? true\n\t\t\t\t: \"Invalid ISO8601 timestamp format\";\n\t\t}),\n\t),\n);\n\n// Discord color code (0-16777215)\nexport const ColorCode = Schema.Number.check(\n\tSchema.isInt(),\n\tSchema.isGreaterThanOrEqualTo(0),\n\tSchema.isLessThanOrEqualTo(16777215),\n);\n\n// Uint8Array schema (used in Webhook file data)\nexport const Uint8ArraySchema = Schema.instanceOf(Uint8Array);\n",
|
|
6
|
+
"import { Schema } from \"effect\";\n\n/**\n * Discord webhook URL regex\n * Matches:\n * - https://discord.com/api/webhooks/ID/TOKEN\n * - Optional canary/ptb subdomains\n * - Optional /v{number} API version segment\n * - Optional trailing slash\n * - Supports legacy discordapp.com domain\n * Exposes named capture groups `id` and `token` for callers that need them.\n */\nexport const DISCORD_WEBHOOK_REGEX =\n\t/^https:\\/\\/(?:(?:canary|ptb)\\.)?discord(?:app)?\\.com\\/api(?:\\/v\\d+)?\\/webhooks\\/(?<id>\\d+)\\/(?<token>[\\w-]+)\\/?$/;\n\n/**\n * Effect Schema for validating Discord webhook URLs.\n */\nexport const DiscordWebhookUrl = Schema.String.check(\n\tSchema.isPattern(DISCORD_WEBHOOK_REGEX, {\n\t\tmessage: \"Invalid Discord webhook URL\",\n\t}),\n);\n",
|
|
12
7
|
"import { Schema } from \"effect\";\nimport {\n\tColorCode,\n\tISO8601Timestamp,\n\tmaxLength,\n\tpositiveInt,\n\tUrlString,\n} from \"./Common\";\nimport { FieldArray } from \"./Field\";\n\n/**\n * Attachment schema - represents file attachments or URLs\n */\nexport class Attachment extends Schema.Class<Attachment>(\"Attachment\")({\n\turl: Schema.String,\n\tproxyUrl: Schema.optionalKey(Schema.String),\n\tfilename: Schema.optionalKey(Schema.String),\n\tsize: Schema.optionalKey(positiveInt),\n\theight: Schema.optionalKey(positiveInt),\n\twidth: Schema.optionalKey(positiveInt),\n}) {}\n\n// Union type for URL or Attachment\nexport const UrlOrAttachment = Schema.Union([UrlString, Attachment]);\n\n/**\n * Author information schema\n */\nexport class Author extends Schema.Class<Author>(\"Author\")({\n\tname: Schema.optionalKey(maxLength(256)),\n\turl: Schema.optionalKey(UrlString),\n\ticon_url: Schema.optionalKey(UrlOrAttachment),\n\tproxy_icon_url: Schema.optionalKey(Schema.String),\n}) {}\n\n/**\n * Footer information schema\n */\nexport class Footer extends Schema.Class<Footer>(\"Footer\")({\n\ttext: maxLength(2048),\n\ticon_url: Schema.optionalKey(UrlOrAttachment),\n\tproxy_icon_url: Schema.optionalKey(Schema.String),\n}) {}\n\n/**\n * Image information schema\n */\nexport class Image extends Schema.Class<Image>(\"Image\")({\n\turl: UrlOrAttachment,\n\tproxy_url: Schema.optionalKey(Schema.String),\n\theight: Schema.optionalKey(positiveInt),\n\twidth: Schema.optionalKey(positiveInt),\n}) {}\n\n/**\n * Thumbnail information schema\n */\nexport class Thumbnail extends Schema.Class<Thumbnail>(\"Thumbnail\")({\n\turl: UrlOrAttachment,\n\tproxy_url: Schema.optionalKey(Schema.String),\n\theight: Schema.optionalKey(positiveInt),\n\twidth: Schema.optionalKey(positiveInt),\n}) {}\n\n/**\n * Video information schema\n */\nexport class Video extends Schema.Class<Video>(\"Video\")({\n\turl: Schema.optionalKey(UrlString),\n\tproxy_url: Schema.optionalKey(Schema.String),\n\theight: Schema.optionalKey(positiveInt),\n\twidth: Schema.optionalKey(positiveInt),\n}) {}\n\n/**\n * Provider information schema\n */\nexport class Provider extends Schema.Class<Provider>(\"Provider\")({\n\tname: Schema.optionalKey(Schema.String),\n\turl: Schema.optionalKey(UrlString),\n}) {}\n\n/**\n * Main Embed schema\n */\nexport class Embed extends Schema.Class<Embed>(\"Embed\")({\n\t/**\n\t * Title of the embed.\n\t * Up to 256 characters.\n\t */\n\ttitle: Schema.optionalKey(maxLength(256)),\n\n\t/**\n\t * Embed type.\n\t * (Always \"rich\" for webhook embeds)\n\t */\n\ttype: Schema.optionalKey(Schema.Literal(\"rich\")),\n\n\t/**\n\t * URL of embed.\n\t */\n\turl: Schema.optionalKey(UrlString),\n\n\t/**\n\t * Description of the embed.\n\t * Up to 4096 characters.\n\t */\n\tdescription: Schema.optionalKey(maxLength(4096)),\n\n\t/**\n\t * ISO8601 timestamp of the embed content.\n\t */\n\ttimestamp: Schema.optionalKey(ISO8601Timestamp),\n\n\t/**\n\t * Color code of the embed.\n\t */\n\tcolor: Schema.optionalKey(ColorCode),\n\n\t/**\n\t * Footer information.\n\t */\n\tfooter: Schema.optionalKey(Footer),\n\n\t/**\n\t * Image information.\n\t */\n\timage: Schema.optionalKey(Image),\n\n\t/**\n\t * Thumbnail information.\n\t */\n\tthumbnail: Schema.optionalKey(Thumbnail),\n\n\t/**\n\t * Video information.\n\t */\n\tvideo: Schema.optionalKey(Video),\n\n\t/**\n\t * Provider information.\n\t */\n\tprovider: Schema.optionalKey(Provider),\n\n\t/**\n\t * Author information.\n\t */\n\tauthor: Schema.optionalKey(Author),\n\n\t/**\n\t * Fields information.\n\t * Up to 25 fields.\n\t */\n\tfields: Schema.optionalKey(FieldArray),\n}) {}\n\n// Array of embeds with max 10 constraint\nexport const EmbedArray = Schema.Array(Embed).pipe(\n\tSchema.check(Schema.isMaxLength(10)),\n);\n",
|
|
13
8
|
"import { Schema } from \"effect\";\nimport { maxLength } from \"./Common\";\n\n/**\n * Discord embed field schema\n */\nexport class Field extends Schema.Class<Field>(\"Field\")({\n\t/**\n\t * Name of the field.\n\t * Up to 256 characters.\n\t */\n\tname: maxLength(256),\n\n\t/**\n\t * Value of the field.\n\t * Up to 1024 characters.\n\t */\n\tvalue: maxLength(1024),\n\n\t/**\n\t * Whether or not this field should be displayed inline.\n\t */\n\tinline: Schema.optionalKey(Schema.Boolean),\n}) {}\n\n// Array of fields with max 25 constraint\nexport const FieldArray = Schema.Array(Field).pipe(\n\tSchema.check(Schema.isMaxLength(25)),\n);\n",
|
|
14
|
-
"import { Schema } from \"effect\";\nimport { maxLength, Uint8ArraySchema, UrlString } from \"./Common\";\nimport { Attachment, EmbedArray } from \"./Embed\";\n\n/**\n * File attachment for webhooks\n */\nexport const WebhookFile = Schema.Union([\n\tSchema.String,\n\tAttachment,\n\tSchema.Struct({\n\t\tname: Schema.String,\n\t\tdata: Schema.Union([Schema.String, Uint8ArraySchema]),\n\t}),\n]);\n\n/**\n * Main Webhook schema\n */\nexport class Webhook extends Schema.Class<Webhook>(\"Webhook\")({\n\t/**\n\t * Webhook username override.\n\t */\n\tusername: Schema.optionalKey(maxLength(80)),\n\n\t/**\n\t * Webhook avatar URL override.\n\t */\n\tavatar_url: Schema.optionalKey(UrlString),\n\n\t/**\n\t * Whether or not this notification should be read as text to speech.\n\t */\n\ttts: Schema.optionalKey(Schema.Boolean),\n\n\t/**\n\t * Message contents.\n\t * Max 2000 characters\n\t */\n\tcontent: Schema.optionalKey(maxLength(2000)),\n\n\t/**\n\t * Contents of a file being sent.\n\t */\n\tfile: Schema.optionalKey(WebhookFile),\n\n\t/**\n\t * Embedded \"rich\" content.\n\t * Max 10 embeds\n\t */\n\tembeds: Schema.optionalKey(EmbedArray),\n}) {}\n\n/**\n * Webhook parameter schema (for modify operations)\n */\nexport class WebhookParameter extends Schema.Class<WebhookParameter>(\n\t\"WebhookParameter\",\n)({\n\tname: Schema.optionalKey(maxLength(80)),\n\tavatar: Schema.optionalKey(UrlString),\n\tchannel_id: Schema.optionalKey(Schema.String),\n}) {}\n\n/**\n * Webhook response schema\n */\nexport class WebhookResponse extends Schema.Class<WebhookResponse>(\n\t\"WebhookResponse\",\n)({\n\tid: Schema.String,\n\ttype: Schema.Number,\n\tguild_id: Schema.optionalKey(Schema.String),\n\tchannel_id: Schema.String,\n\tuser: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tusername: Schema.String,\n\t\t\tavatar: Schema.optionalKey(Schema.String),\n\t\t\tdiscriminator: Schema.String,\n\t\t\tpublic_flags: Schema.optionalKey(Schema.Number),\n\t\t}),\n\t),\n\tname: Schema.optionalKey(Schema.String),\n\tavatar: Schema.optionalKey(Schema.String),\n\ttoken: Schema.optionalKey(Schema.String),\n\tapplication_id: Schema.optionalKey(Schema.String),\n\tsource_guild: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tname: Schema.String,\n\t\t\ticon: Schema.optionalKey(Schema.String),\n\t\t}),\n\t),\n\tsource_channel: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tname: Schema.String,\n\t\t}),\n\t),\n\turl: Schema.optionalKey(UrlString),\n}) {}\n"
|
|
15
|
-
"export const stripUndefined = (input: unknown): unknown => {\n\tif (Array.isArray(input)) {\n\t\treturn input.map(stripUndefined);\n\t}\n\n\tif (input && typeof input === \"object\") {\n\t\tconst proto = Object.getPrototypeOf(input);\n\t\tif (proto !== Object.prototype && proto !== null) {\n\t\t\treturn input;\n\t\t}\n\n\t\tconst entries = Object.entries(input as Record<string, unknown>)\n\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t.map(([key, value]) => [key, stripUndefined(value)] as const);\n\t\treturn Object.fromEntries(entries);\n\t}\n\n\treturn input;\n};\n",
|
|
16
|
-
"import { Effect, pipe, Schema } from \"effect\";\nimport { ValidationError } from \"../errors\";\nimport {\n\tAuthor,\n\tColorCode,\n\tEmbed as EmbedSchema,\n\tField,\n\tFooter,\n\tImage,\n\tmaxLength,\n\tProvider,\n\tThumbnail,\n\tUrlString,\n\tVideo,\n} from \"../schemas\";\nimport { stripUndefined } from \"../utils/normalize\";\n\ntype EmbedDraft = Partial<Schema.Schema.Type<typeof EmbedSchema>>;\n\nconst createDraft = (): EmbedDraft => ({});\n\nconst setTitleImpl = (title: string) => (d: EmbedDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(maxLength(256))(title),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\n\t\t\t\t\"title\",\n\t\t\t\t\"Title must be 256 characters or less\",\n\t\t\t\t{\n\t\t\t\t\tconstraint: \"MaxLength\",\n\t\t\t\t\texpected: \"256 characters or less\",\n\t\t\t\t\tactual: title.length,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tEffect.as({ ...d, title }),\n\t);\n\nconst setURLImpl = (url: string) => (d: EmbedDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(UrlString)(url),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\"url\", \"Invalid URL\", {\n\t\t\t\tconstraint: \"URL\",\n\t\t\t\texpected: \"valid URL\",\n\t\t\t\tactual: url,\n\t\t\t}),\n\t\t),\n\t\tEffect.as({ ...d, url }),\n\t);\n\nconst setDescriptionImpl = (description: string) => (d: EmbedDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(maxLength(4096))(description),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\n\t\t\t\t\"description\",\n\t\t\t\t\"Description must be 4096 characters or less\",\n\t\t\t\t{\n\t\t\t\t\tconstraint: \"MaxLength\",\n\t\t\t\t\texpected: \"4096 characters or less\",\n\t\t\t\t\tactual: description.length,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tEffect.as({ ...d, description }),\n\t);\n\nconst setTimestampImpl = (date?: Date) => (d: EmbedDraft) =>\n\tEffect.succeed({ ...d, timestamp: (date ?? new Date()).toISOString() });\n\nconst setColorImpl = (color: number | string) => (d: EmbedDraft) => {\n\tconst colorValue =\n\t\ttypeof color === \"string\" ? parseInt(color.replace(\"#\", \"\"), 16) : color;\n\treturn pipe(\n\t\tSchema.decodeUnknownEffect(ColorCode)(colorValue),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\n\t\t\t\t\"color\",\n\t\t\t\t\"Invalid color code (must be 0-16777215)\",\n\t\t\t\t{\n\t\t\t\t\tconstraint: \"Range\",\n\t\t\t\t\texpected: \"0-16777215\",\n\t\t\t\t\tactual: colorValue,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tEffect.as({ ...d, color: colorValue }),\n\t);\n};\n\nconst setFooterImpl =\n\t(footerOrText: Footer | string, icon_url?: string, proxy_icon_url?: string) =>\n\t(d: EmbedDraft) => {\n\t\tconst footer: Schema.Schema.Type<typeof Footer> =\n\t\t\ttypeof footerOrText === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\ttext: footerOrText,\n\t\t\t\t\t\t...(icon_url === undefined ? {} : { icon_url }),\n\t\t\t\t\t\t...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { text, icon_url, proxy_icon_url } = footerOrText;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t...(icon_url === undefined ? {} : { icon_url }),\n\t\t\t\t\t\t\t...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Footer)(footer),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"footer\", value: footer }),\n\t\t\t),\n\t\t\tEffect.as({ ...d, footer }),\n\t\t);\n\t};\n\nconst setImageImpl =\n\t(imageOrUrl: Image | string, height?: number, width?: number) =>\n\t(d: EmbedDraft) => {\n\t\tconst image: Schema.Schema.Type<typeof Image> =\n\t\t\ttypeof imageOrUrl === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\turl: imageOrUrl,\n\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { url, proxy_url, height, width } = imageOrUrl;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t...(proxy_url === undefined ? {} : { proxy_url }),\n\t\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Image)(image),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"image\", value: image }),\n\t\t\t),\n\t\t\tEffect.as({ ...d, image }),\n\t\t);\n\t};\n\nconst setThumbnailImpl =\n\t(thumbnailOrUrl: Thumbnail | string, height?: number, width?: number) =>\n\t(d: EmbedDraft) => {\n\t\tconst thumbnail: Schema.Schema.Type<typeof Thumbnail> =\n\t\t\ttypeof thumbnailOrUrl === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\turl: thumbnailOrUrl,\n\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { url, proxy_url, height, width } = thumbnailOrUrl;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t...(proxy_url === undefined ? {} : { proxy_url }),\n\t\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Thumbnail)(thumbnail),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, {\n\t\t\t\t\tfield: \"thumbnail\",\n\t\t\t\t\tvalue: thumbnail,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tEffect.as({ ...d, thumbnail }),\n\t\t);\n\t};\n\nconst setVideoImpl =\n\t(videoOrUrl: Video | string, height?: number, width?: number) =>\n\t(d: EmbedDraft) => {\n\t\tconst video: Schema.Schema.Type<typeof Video> =\n\t\t\ttypeof videoOrUrl === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\turl: videoOrUrl,\n\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { url, proxy_url, height, width } = videoOrUrl;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(url === undefined ? {} : { url }),\n\t\t\t\t\t\t\t...(proxy_url === undefined ? {} : { proxy_url }),\n\t\t\t\t\t\t\t...(height === undefined ? {} : { height }),\n\t\t\t\t\t\t\t...(width === undefined ? {} : { width }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Video)(video),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"video\", value: video }),\n\t\t\t),\n\t\t\tEffect.as({ ...d, video }),\n\t\t);\n\t};\n\nconst setProviderImpl =\n\t(providerOrName: Provider | string, url?: string) => (d: EmbedDraft) => {\n\t\tconst provider: Schema.Schema.Type<typeof Provider> =\n\t\t\ttypeof providerOrName === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\tname: providerOrName,\n\t\t\t\t\t\t...(url === undefined ? {} : { url }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { name, url } = providerOrName;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(name === undefined ? {} : { name }),\n\t\t\t\t\t\t\t...(url === undefined ? {} : { url }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Provider)(provider),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, {\n\t\t\t\t\tfield: \"provider\",\n\t\t\t\t\tvalue: provider,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tEffect.as({ ...d, provider }),\n\t\t);\n\t};\n\nconst setAuthorImpl =\n\t(authorOrName: Author | string, url?: string, icon_url?: string) =>\n\t(d: EmbedDraft) => {\n\t\tconst author: Schema.Schema.Type<typeof Author> =\n\t\t\ttypeof authorOrName === \"string\"\n\t\t\t\t? {\n\t\t\t\t\t\tname: authorOrName,\n\t\t\t\t\t\t...(url === undefined ? {} : { url }),\n\t\t\t\t\t\t...(icon_url === undefined ? {} : { icon_url }),\n\t\t\t\t }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { name, url, icon_url, proxy_icon_url } = authorOrName;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(name === undefined ? {} : { name }),\n\t\t\t\t\t\t\t...(url === undefined ? {} : { url }),\n\t\t\t\t\t\t\t...(icon_url === undefined ? {} : { icon_url }),\n\t\t\t\t\t\t\t...(proxy_icon_url === undefined ? {} : { proxy_icon_url }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Author)(author),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"author\", value: author }),\n\t\t\t),\n\t\t\tEffect.as({ ...d, author }),\n\t\t);\n\t};\n\nexport const addFieldImpl =\n\t(fieldOrName: Field | string, value?: string, inline = false) =>\n\t(d: EmbedDraft) => {\n\t\tconst currentFields = d.fields || [];\n\t\tif (currentFields.length >= 25) {\n\t\t\treturn Effect.fail(\n\t\t\t\tValidationError.fromIssue(\"fields\", \"Cannot add more than 25 fields\", {\n\t\t\t\t\tconstraint: \"MaxItems\",\n\t\t\t\t\texpected: \"25 fields or less\",\n\t\t\t\t\tactual: currentFields.length + 1,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tconst field: Schema.Schema.Type<typeof Field> =\n\t\t\ttypeof fieldOrName === \"string\"\n\t\t\t\t? { name: fieldOrName, value: value ?? \"\", inline }\n\t\t\t\t: (() => {\n\t\t\t\t\t\tconst { name, value, inline } = fieldOrName;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t...(inline === undefined ? {} : { inline }),\n\t\t\t\t\t\t};\n\t\t\t\t })();\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(Field)(field),\n\t\t\tEffect.mapError((e) =>\n\t\t\t\tValidationError.fromParseError(e, { field: \"fields\", value: field }),\n\t\t\t),\n\t\t\tEffect.map(() => ({ ...d, fields: [...currentFields, field] })),\n\t\t);\n\t};\n\nconst setFieldsImpl = (fields: ReadonlyArray<Field>) => (d: EmbedDraft) => {\n\tif (fields.length > 25) {\n\t\treturn Effect.fail(\n\t\t\tValidationError.fromIssue(\"fields\", \"Cannot have more than 25 fields\", {\n\t\t\t\tconstraint: \"MaxItems\",\n\t\t\t\texpected: \"25 fields or less\",\n\t\t\t\tactual: fields.length,\n\t\t\t}),\n\t\t);\n\t}\n\tconst normalized: ReadonlyArray<Schema.Schema.Type<typeof Field>> = fields.map(\n\t\t(field) => {\n\t\t\tconst { name, value, inline } = field;\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tvalue,\n\t\t\t\t...(inline === undefined ? {} : { inline }),\n\t\t\t};\n\t\t},\n\t);\n\treturn pipe(\n\t\tEffect.forEach(normalized, (f) => Schema.decodeUnknownEffect(Field)(f)),\n\t\tEffect.mapError((e) =>\n\t\t\tValidationError.fromParseError(e, { field: \"fields\", value: fields }),\n\t\t),\n\t\tEffect.map((decoded) => ({ ...d, fields: decoded })),\n\t);\n};\n\nconst buildImpl = (d: EmbedDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(EmbedSchema)(\n\t\t\tstripUndefined({ ...d, type: \"rich\" as const }),\n\t\t),\n\t\tEffect.mapError((e) =>\n\t\t\tValidationError.fromParseError(e, { field: \"embed\", value: d }),\n\t\t),\n\t);\n\nexport const buildDirect = buildImpl;\n\nexport const addFieldDirect = addFieldImpl;\n\nexport const make: Effect.Effect<EmbedDraft, never> = Effect.succeed(\n\tcreateDraft(),\n);\n\nconst chain =\n\t(f: (d: EmbedDraft) => Effect.Effect<EmbedDraft, ValidationError>) =>\n\t(self: Effect.Effect<EmbedDraft, ValidationError>) =>\n\t\tpipe(self, Effect.flatMap(f));\n\nexport const setTitle = (title: string) => chain(setTitleImpl(title));\nexport const setURL = (url: string) => chain(setURLImpl(url));\nexport const setDescription = (description: string) =>\n\tchain(setDescriptionImpl(description));\nexport const setTimestamp = (date?: Date) => chain(setTimestampImpl(date));\nexport const setColor = (color: number | string) => chain(setColorImpl(color));\nexport const setFooter = (\n\tfooter: Footer | string,\n\ticon_url?: string,\n\tproxy_icon_url?: string,\n) => chain(setFooterImpl(footer, icon_url, proxy_icon_url));\nexport const setImage = (\n\timage: Image | string,\n\theight?: number,\n\twidth?: number,\n) => chain(setImageImpl(image, height, width));\nexport const setThumbnail = (\n\tthumbnail: Thumbnail | string,\n\theight?: number,\n\twidth?: number,\n) => chain(setThumbnailImpl(thumbnail, height, width));\nexport const setVideo = (\n\tvideo: Video | string,\n\theight?: number,\n\twidth?: number,\n) => chain(setVideoImpl(video, height, width));\nexport const setProvider = (provider: Provider | string, url?: string) =>\n\tchain(setProviderImpl(provider, url));\nexport const setAuthor = (\n\tauthor: Author | string,\n\turl?: string,\n\ticon_url?: string,\n) => chain(setAuthorImpl(author, url, icon_url));\nexport const addField = (\n\tfield: Field | string,\n\tvalue?: string,\n\tinline = false,\n) => chain(addFieldImpl(field, value, inline));\nexport const setFields = (fields: ReadonlyArray<Field>) =>\n\tchain(setFieldsImpl(fields));\nexport const build = (self: Effect.Effect<EmbedDraft, ValidationError>) =>\n\tpipe(self, Effect.flatMap(buildImpl));\n",
|
|
17
|
-
"import { Effect, pipe, Schema } from \"effect\";\nimport { ValidationError } from \"../errors\";\nimport {\n\tEmbedArray,\n\ttype Embed as EmbedSchema,\n\tmaxLength,\n\tUrlString,\n\ttype WebhookFile,\n\tWebhookParameter,\n\tWebhook as WebhookSchema,\n} from \"../schemas\";\nimport { stripUndefined } from \"../utils/normalize\";\n\ntype WebhookDraft = Partial<Schema.Schema.Type<typeof WebhookSchema>>;\n\nconst createDraft = (): WebhookDraft => ({});\n\nconst setUsernameImpl = (username: string) => (d: WebhookDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(maxLength(80))(username),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\n\t\t\t\t\"username\",\n\t\t\t\t\"Username must be 80 characters or less\",\n\t\t\t\t{\n\t\t\t\t\tconstraint: \"MaxLength\",\n\t\t\t\t\texpected: \"80 characters or less\",\n\t\t\t\t\tactual: username.length,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tEffect.as({ ...d, username }),\n\t);\n\nconst setAvatarUrlImpl = (avatar_url: string) => (d: WebhookDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(UrlString)(avatar_url),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\"avatar_url\", \"Invalid avatar URL\", {\n\t\t\t\tconstraint: \"URL\",\n\t\t\t\texpected: \"valid URL\",\n\t\t\t\tactual: avatar_url,\n\t\t\t}),\n\t\t),\n\t\tEffect.as({ ...d, avatar_url }),\n\t);\n\nconst setContentImpl = (content: string) => (d: WebhookDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(maxLength(2000))(content),\n\t\tEffect.mapError(() =>\n\t\t\tValidationError.fromIssue(\n\t\t\t\t\"content\",\n\t\t\t\t\"Content must be 2000 characters or less\",\n\t\t\t\t{\n\t\t\t\t\tconstraint: \"MaxLength\",\n\t\t\t\t\texpected: \"2000 characters or less\",\n\t\t\t\t\tactual: content.length,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tEffect.as({ ...d, content }),\n\t);\n\nconst setTTSImpl = (tts: boolean) => (d: WebhookDraft) =>\n\tEffect.succeed({ ...d, tts });\n\nexport const addEmbedImpl =\n\t(embed: Schema.Schema.Type<typeof EmbedSchema>) => (d: WebhookDraft) => {\n\t\tconst current = d.embeds || [];\n\t\tconst next = [...current, embed];\n\t\treturn pipe(\n\t\t\tSchema.decodeUnknownEffect(EmbedArray)(stripUndefined(next)),\n\t\t\tEffect.mapError(() =>\n\t\t\t\tValidationError.fromIssue(\"embeds\", \"Cannot have more than 10 embeds\", {\n\t\t\t\t\tconstraint: \"MaxItems\",\n\t\t\t\t\texpected: \"10 embeds or less\",\n\t\t\t\t\tactual: next.length,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tEffect.map((decoded) => ({ ...d, embeds: decoded })),\n\t\t);\n\t};\n\nconst setFileImpl =\n\t(file: Schema.Schema.Type<typeof WebhookFile>) => (d: WebhookDraft) =>\n\t\tEffect.succeed({ ...d, file });\n\nconst buildImpl = (d: WebhookDraft) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(WebhookSchema)(stripUndefined(d)),\n\t\tEffect.mapError((e) =>\n\t\t\tValidationError.fromParseError(e, { field: \"webhook\", value: d }),\n\t\t),\n\t);\n\nexport const buildDirect = buildImpl;\n\nexport const addEmbedDirect = addEmbedImpl;\n\nexport const validate = (input: unknown) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(WebhookSchema)(stripUndefined(input)),\n\t\tEffect.mapError((e) =>\n\t\t\tValidationError.fromParseError(e, { field: \"webhook\", value: input }),\n\t\t),\n\t);\n\nexport const modifyParams = (p: Schema.Schema.Type<typeof WebhookParameter>) =>\n\tpipe(\n\t\tSchema.decodeUnknownEffect(WebhookParameter)(stripUndefined(p)),\n\t\tEffect.mapError((e) =>\n\t\t\tValidationError.fromParseError(e, { field: \"params\", value: p }),\n\t\t),\n\t);\n\nexport const make: Effect.Effect<WebhookDraft, never> = Effect.succeed(\n\tcreateDraft(),\n);\n\nconst chain =\n\t(f: (d: WebhookDraft) => Effect.Effect<WebhookDraft, ValidationError>) =>\n\t(self: Effect.Effect<WebhookDraft, ValidationError>) =>\n\t\tpipe(self, Effect.flatMap(f));\n\nexport const setUsername = (username: string) =>\n\tchain(setUsernameImpl(username));\nexport const setAvatarUrl = (url: string) => chain(setAvatarUrlImpl(url));\nexport const setContent = (content: string) => chain(setContentImpl(content));\nexport const setTTS = (tts: boolean) => chain(setTTSImpl(tts));\nexport const addEmbed = (embed: Schema.Schema.Type<typeof EmbedSchema>) =>\n\tchain(addEmbedImpl(embed));\nexport const setFile = (file: Schema.Schema.Type<typeof WebhookFile>) =>\n\tchain(setFileImpl(file));\nexport const build = (self: Effect.Effect<WebhookDraft, ValidationError>) =>\n\tpipe(self, Effect.flatMap(buildImpl));\n"
|
|
9
|
+
"import { Schema } from \"effect\";\nimport { maxLength, Uint8ArraySchema, UrlString } from \"./Common\";\nimport { Attachment, EmbedArray } from \"./Embed\";\n\n/**\n * File attachment for webhooks\n */\nexport const WebhookFile = Schema.Union([\n\tSchema.String,\n\tAttachment,\n\tSchema.Struct({\n\t\tname: Schema.String,\n\t\tdata: Schema.Union([Schema.String, Uint8ArraySchema]),\n\t}),\n]);\n\n/**\n * Main Webhook schema\n */\nexport class Webhook extends Schema.Class<Webhook>(\"Webhook\")({\n\t/**\n\t * Webhook username override.\n\t */\n\tusername: Schema.optionalKey(maxLength(80)),\n\n\t/**\n\t * Webhook avatar URL override.\n\t */\n\tavatar_url: Schema.optionalKey(UrlString),\n\n\t/**\n\t * Whether or not this notification should be read as text to speech.\n\t */\n\ttts: Schema.optionalKey(Schema.Boolean),\n\n\t/**\n\t * Message contents.\n\t * Max 2000 characters\n\t */\n\tcontent: Schema.optionalKey(maxLength(2000)),\n\n\t/**\n\t * Contents of a file being sent.\n\t */\n\tfile: Schema.optionalKey(WebhookFile),\n\n\t/**\n\t * Embedded \"rich\" content.\n\t * Max 10 embeds\n\t */\n\tembeds: Schema.optionalKey(EmbedArray),\n}) {}\n\n/**\n * Webhook parameter schema (for modify operations)\n */\nexport class WebhookParameter extends Schema.Class<WebhookParameter>(\n\t\"WebhookParameter\",\n)({\n\tname: Schema.optionalKey(maxLength(80)),\n\tavatar: Schema.optionalKey(UrlString),\n\tchannel_id: Schema.optionalKey(Schema.String),\n}) {}\n\n/**\n * Webhook response schema\n */\nexport class WebhookResponse extends Schema.Class<WebhookResponse>(\n\t\"WebhookResponse\",\n)({\n\tid: Schema.String,\n\ttype: Schema.Number,\n\tguild_id: Schema.optionalKey(Schema.String),\n\tchannel_id: Schema.String,\n\tuser: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tusername: Schema.String,\n\t\t\tavatar: Schema.optionalKey(Schema.String),\n\t\t\tdiscriminator: Schema.String,\n\t\t\tpublic_flags: Schema.optionalKey(Schema.Number),\n\t\t}),\n\t),\n\tname: Schema.optionalKey(Schema.String),\n\tavatar: Schema.optionalKey(Schema.String),\n\ttoken: Schema.optionalKey(Schema.String),\n\tapplication_id: Schema.optionalKey(Schema.String),\n\tsource_guild: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tname: Schema.String,\n\t\t\ticon: Schema.optionalKey(Schema.String),\n\t\t}),\n\t),\n\tsource_channel: Schema.optionalKey(\n\t\tSchema.Struct({\n\t\t\tid: Schema.String,\n\t\t\tname: Schema.String,\n\t\t}),\n\t),\n\turl: Schema.optionalKey(UrlString),\n}) {}\n"
|
|
18
10
|
],
|
|
19
|
-
"mappings": "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",
|
|
20
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "77B5F8F8A236B81364756E2164756E21",
|
|
21
13
|
"names": []
|
|
22
14
|
}
|
package/dist/layers/Config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Layer
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { ConfigError } from "../errors";
|
|
3
3
|
/**
|
|
4
4
|
* Webhook configuration
|
|
@@ -10,7 +10,7 @@ export interface WebhookConfig {
|
|
|
10
10
|
readonly maxDelayMs?: number;
|
|
11
11
|
readonly enableJitter?: boolean;
|
|
12
12
|
}
|
|
13
|
-
declare const Config_base:
|
|
13
|
+
declare const Config_base: Context.ServiceClass<Config, "Config", {
|
|
14
14
|
readonly webhook: WebhookConfig;
|
|
15
15
|
}>;
|
|
16
16
|
/**
|
package/dist/layers/Config.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Effect, Layer
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { ConfigError } from "../errors";
|
|
3
3
|
import { DISCORD_WEBHOOK_REGEX } from "../schemas/Discord";
|
|
4
4
|
/**
|
|
5
5
|
* Config service tag
|
|
6
6
|
*/
|
|
7
|
-
export class Config extends
|
|
7
|
+
export class Config extends Context.Service()("Config") {
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Validate webhook URL format with detailed error messages
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/layers/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/layers/Config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Duration, Effect, Layer, Schedule
|
|
1
|
+
import { Context, Duration, Effect, Layer, Schedule } from "effect";
|
|
2
2
|
import { HttpError, NetworkError, RateLimitError } from "../errors";
|
|
3
3
|
/**
|
|
4
4
|
* HTTP request configuration
|
|
@@ -29,7 +29,7 @@ export interface RetryConfig {
|
|
|
29
29
|
maxDelay: Duration.Duration;
|
|
30
30
|
jitter: boolean;
|
|
31
31
|
}
|
|
32
|
-
declare const HttpClient_base:
|
|
32
|
+
declare const HttpClient_base: Context.ServiceClass<HttpClient, "HttpClient", {
|
|
33
33
|
readonly request: (request: HttpRequest) => Effect.Effect<HttpResponse, HttpError | NetworkError | RateLimitError>;
|
|
34
34
|
readonly retryConfig: RetryConfig;
|
|
35
35
|
}>;
|
|
@@ -68,7 +68,7 @@ export declare const createRetrySchedule: (config: RetryConfig) => Schedule.Sche
|
|
|
68
68
|
/**
|
|
69
69
|
* Fetch-based HTTP client implementation
|
|
70
70
|
*/
|
|
71
|
-
export declare const FetchHttpClient: (retryConfig?: RetryConfig) =>
|
|
71
|
+
export declare const FetchHttpClient: (retryConfig?: RetryConfig) => Context.Service.Shape<typeof HttpClient>;
|
|
72
72
|
/**
|
|
73
73
|
* Live HTTP client layer with default configuration
|
|
74
74
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Duration, Effect, Layer, Schedule
|
|
1
|
+
import { Context, Duration, Effect, Layer, Schedule } from "effect";
|
|
2
2
|
import { HttpError, NetworkError, RateLimitError } from "../errors";
|
|
3
3
|
/**
|
|
4
4
|
* HTTP Client service tag
|
|
5
5
|
*/
|
|
6
|
-
export class HttpClient extends
|
|
6
|
+
export class HttpClient extends Context.Service()("HttpClient") {
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* Parse rate limit information from response headers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/layers/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/layers/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkCpE;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,OAAO,EAQ5C,CAAC,YAAY,CAAC;CAAG;AAkBpB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,OAA+B,EACR,EAAE;IACzB,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAE5D,mCAAmC;IACnC,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,KAAK,GAAG,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,gBAAgB,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,iDAAiD;YACjD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,iCAAiC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnD,IAAI,KAAuB,CAAC;IAC5B,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;SAAM,IAAI,gBAAgB,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IAED,0DAA0D;IAC1D,IAAI,UAAU,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,gDAAgD;IAChD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACtB,UAAU,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACN,UAAU;QACV,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;QACvB,MAAM,EAAE,YAAY,KAAK,MAAM;KAC/B,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC9C,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI;CACZ,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAmB,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,CAAC,KAAwB,EAAE,EAAE,CAC7C,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;QACnD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAEpB,2CAA2C;IAC3C,IAAI,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,MAAM,CAAC,IAAI,CACnB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACjC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,CACF,CACD,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,GAAG,MAAM,CAAC,IAAI,CACnB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CACnE,CAAC;IAEF,yDAAyD;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,qEAAqE;AACrE,gDAAgD;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,cAA2B,kBAAkB,EACF,EAAE,CAAC,CAAC;IAC/C,WAAW;IACX,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;YAC9B,CAAC,CAAC,UAAU,CACV,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAClC;YACF,CAAC,CAAC,SAAS,CAAC;QAEb,2DAA2D;QAC3D,sDAAsD;QACtD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC;YAClC,cAAc,EAAE,kBAAkB;SAClC,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAClE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACzC,GAAG,EAAE,GAAG,EAAE,CACT,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,cAAc;gBACvB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7D,MAAM,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC;YACH,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,IAAI,YAAY,CAAC;gBAChB,OAAO,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC5F,UAAU,EAAE,CAAC;aACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAEnC,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YAC5C,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC1B,KAAK,EAAE,GAAG,EAAE,CACX,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;SAC9D,CAAC,CAAC;QAEH,MAAM,IAAI,GACT,OAAO,WAAW,KAAK,UAAU;YAChC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBACzB,GAAG,EAAE,GAAG,EAAE,CAAE,WAAgD,EAAE;gBAC9D,KAAK,EAAE,GAAG,EAAE,CACX,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;aAC9D,CAAC;YACH,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACR,qCAAqC;YACtC,CAAC;QACF,CAAC;QAED,MAAM,YAAY,GAAiB;YAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO;YACP,IAAI;YACJ,IAAI;SACJ,CAAC;QAEF,qBAAqB;QACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,0DAA0D;YAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7B,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACxB,IAAI,cAAc,CAAC;oBAClB,OAAO,EAAE,6BAA6B,aAAa,EAAE,UAAU,IAAI,IAAI,IAAI;oBAC3E,UAAU,EAAE,aAAa,EAAE,UAAU,IAAI,IAAI;oBAC7C,GAAG,CAAC,aAAa,EAAE,KAAK,KAAK,SAAS,IAAI;wBACzC,KAAK,EAAE,aAAa,CAAC,KAAK;qBAC1B,CAAC;oBACF,GAAG,CAAC,aAAa,EAAE,SAAS,KAAK,SAAS,IAAI;wBAC7C,SAAS,EAAE,aAAa,CAAC,SAAS;qBAClC,CAAC;oBACF,GAAG,CAAC,aAAa,EAAE,KAAK,KAAK,SAAS,IAAI;wBACzC,KAAK,EAAE,aAAa,CAAC,KAAK;qBAC1B,CAAC;iBACF,CAAC,CACF,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACxB,IAAI,SAAS,CAAC;gBACb,OAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE;gBAC1D,OAAO,EAAE;oBACR,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;iBAChB;gBACD,QAAQ,EAAE;oBACT,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO;oBACP,IAAI;iBACJ;aACD,CAAC,CACF,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAiC,EAAE,EAAE,CACxE,KAAK,CAAC,OAAO,CACZ,UAAU,EACV,eAAe,CAAC,EAAE,GAAG,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC,CAC1D,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,QAA0G,EAC1G,cAA2B,kBAAkB,EAC5C,EAAE,CACH,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE;IACzB,OAAO,EAAE,QAAQ;IACjB,WAAW;CACX,CAAC,CAAC"}
|
package/dist/schemas/Embed.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
declare const Attachment_base: Schema.
|
|
2
|
+
declare const Attachment_base: Schema.Class<Attachment, Schema.Struct<{
|
|
3
3
|
readonly url: Schema.String;
|
|
4
4
|
readonly proxyUrl: Schema.optionalKey<Schema.String>;
|
|
5
5
|
readonly filename: Schema.optionalKey<Schema.String>;
|
|
@@ -13,7 +13,7 @@ declare const Attachment_base: Schema.ExtendableClass<Attachment, Schema.Struct<
|
|
|
13
13
|
export declare class Attachment extends Attachment_base {
|
|
14
14
|
}
|
|
15
15
|
export declare const UrlOrAttachment: Schema.Union<readonly [Schema.String, typeof Attachment]>;
|
|
16
|
-
declare const Author_base: Schema.
|
|
16
|
+
declare const Author_base: Schema.Class<Author, Schema.Struct<{
|
|
17
17
|
readonly name: Schema.optionalKey<Schema.String>;
|
|
18
18
|
readonly url: Schema.optionalKey<Schema.String>;
|
|
19
19
|
readonly icon_url: Schema.optionalKey<Schema.Union<readonly [Schema.String, typeof Attachment]>>;
|
|
@@ -24,7 +24,7 @@ declare const Author_base: Schema.ExtendableClass<Author, Schema.Struct<{
|
|
|
24
24
|
*/
|
|
25
25
|
export declare class Author extends Author_base {
|
|
26
26
|
}
|
|
27
|
-
declare const Footer_base: Schema.
|
|
27
|
+
declare const Footer_base: Schema.Class<Footer, Schema.Struct<{
|
|
28
28
|
readonly text: Schema.String;
|
|
29
29
|
readonly icon_url: Schema.optionalKey<Schema.Union<readonly [Schema.String, typeof Attachment]>>;
|
|
30
30
|
readonly proxy_icon_url: Schema.optionalKey<Schema.String>;
|
|
@@ -34,7 +34,7 @@ declare const Footer_base: Schema.ExtendableClass<Footer, Schema.Struct<{
|
|
|
34
34
|
*/
|
|
35
35
|
export declare class Footer extends Footer_base {
|
|
36
36
|
}
|
|
37
|
-
declare const Image_base: Schema.
|
|
37
|
+
declare const Image_base: Schema.Class<Image, Schema.Struct<{
|
|
38
38
|
readonly url: Schema.Union<readonly [Schema.String, typeof Attachment]>;
|
|
39
39
|
readonly proxy_url: Schema.optionalKey<Schema.String>;
|
|
40
40
|
readonly height: Schema.optionalKey<Schema.Number>;
|
|
@@ -45,7 +45,7 @@ declare const Image_base: Schema.ExtendableClass<Image, Schema.Struct<{
|
|
|
45
45
|
*/
|
|
46
46
|
export declare class Image extends Image_base {
|
|
47
47
|
}
|
|
48
|
-
declare const Thumbnail_base: Schema.
|
|
48
|
+
declare const Thumbnail_base: Schema.Class<Thumbnail, Schema.Struct<{
|
|
49
49
|
readonly url: Schema.Union<readonly [Schema.String, typeof Attachment]>;
|
|
50
50
|
readonly proxy_url: Schema.optionalKey<Schema.String>;
|
|
51
51
|
readonly height: Schema.optionalKey<Schema.Number>;
|
|
@@ -56,7 +56,7 @@ declare const Thumbnail_base: Schema.ExtendableClass<Thumbnail, Schema.Struct<{
|
|
|
56
56
|
*/
|
|
57
57
|
export declare class Thumbnail extends Thumbnail_base {
|
|
58
58
|
}
|
|
59
|
-
declare const Video_base: Schema.
|
|
59
|
+
declare const Video_base: Schema.Class<Video, Schema.Struct<{
|
|
60
60
|
readonly url: Schema.optionalKey<Schema.String>;
|
|
61
61
|
readonly proxy_url: Schema.optionalKey<Schema.String>;
|
|
62
62
|
readonly height: Schema.optionalKey<Schema.Number>;
|
|
@@ -67,7 +67,7 @@ declare const Video_base: Schema.ExtendableClass<Video, Schema.Struct<{
|
|
|
67
67
|
*/
|
|
68
68
|
export declare class Video extends Video_base {
|
|
69
69
|
}
|
|
70
|
-
declare const Provider_base: Schema.
|
|
70
|
+
declare const Provider_base: Schema.Class<Provider, Schema.Struct<{
|
|
71
71
|
readonly name: Schema.optionalKey<Schema.String>;
|
|
72
72
|
readonly url: Schema.optionalKey<Schema.String>;
|
|
73
73
|
}>, {}>;
|
|
@@ -76,7 +76,7 @@ declare const Provider_base: Schema.ExtendableClass<Provider, Schema.Struct<{
|
|
|
76
76
|
*/
|
|
77
77
|
export declare class Provider extends Provider_base {
|
|
78
78
|
}
|
|
79
|
-
declare const Embed_base: Schema.
|
|
79
|
+
declare const Embed_base: Schema.Class<Embed, Schema.Struct<{
|
|
80
80
|
/**
|
|
81
81
|
* Title of the embed.
|
|
82
82
|
* Up to 256 characters.
|
package/dist/schemas/Field.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const WebhookFile: Schema.Union<readonly [Schema.String, typeof A
|
|
|
7
7
|
readonly name: Schema.String;
|
|
8
8
|
readonly data: Schema.Union<readonly [Schema.String, Schema.instanceOf<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>]>;
|
|
9
9
|
}>]>;
|
|
10
|
-
declare const Webhook_base: Schema.
|
|
10
|
+
declare const Webhook_base: Schema.Class<Webhook, Schema.Struct<{
|
|
11
11
|
/**
|
|
12
12
|
* Webhook username override.
|
|
13
13
|
*/
|
|
@@ -43,7 +43,7 @@ declare const Webhook_base: Schema.ExtendableClass<Webhook, Schema.Struct<{
|
|
|
43
43
|
*/
|
|
44
44
|
export declare class Webhook extends Webhook_base {
|
|
45
45
|
}
|
|
46
|
-
declare const WebhookParameter_base: Schema.
|
|
46
|
+
declare const WebhookParameter_base: Schema.Class<WebhookParameter, Schema.Struct<{
|
|
47
47
|
readonly name: Schema.optionalKey<Schema.String>;
|
|
48
48
|
readonly avatar: Schema.optionalKey<Schema.String>;
|
|
49
49
|
readonly channel_id: Schema.optionalKey<Schema.String>;
|
|
@@ -53,7 +53,7 @@ declare const WebhookParameter_base: Schema.ExtendableClass<WebhookParameter, Sc
|
|
|
53
53
|
*/
|
|
54
54
|
export declare class WebhookParameter extends WebhookParameter_base {
|
|
55
55
|
}
|
|
56
|
-
declare const WebhookResponse_base: Schema.
|
|
56
|
+
declare const WebhookResponse_base: Schema.Class<WebhookResponse, Schema.Struct<{
|
|
57
57
|
readonly id: Schema.String;
|
|
58
58
|
readonly type: Schema.Number;
|
|
59
59
|
readonly guild_id: Schema.optionalKey<Schema.String>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Effect, Layer
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { HttpError, NetworkError, RateLimitError, ValidationError, WebhookError } from "../errors";
|
|
3
3
|
import { Config } from "../layers/Config";
|
|
4
4
|
import { HttpClient } from "../layers/HttpClient";
|
|
5
5
|
import { Webhook, WebhookParameter, WebhookResponse } from "../schemas";
|
|
6
|
-
declare const WebhookService_base:
|
|
6
|
+
declare const WebhookService_base: Context.ServiceClass<WebhookService, "WebhookService", {
|
|
7
7
|
/**
|
|
8
8
|
* Send a webhook message
|
|
9
9
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Duration, Effect, Layer, pipe, Schedule, Schema,
|
|
1
|
+
import { Context, Duration, Effect, Layer, pipe, Schedule, Schema, } from "effect";
|
|
2
2
|
import { HttpError, NetworkError, RateLimitError, ValidationError, WebhookError, } from "../errors";
|
|
3
3
|
import { Config } from "../layers/Config";
|
|
4
4
|
import { createRetrySchedule, HttpClient } from "../layers/HttpClient";
|
|
@@ -7,7 +7,7 @@ import { stripUndefined } from "../utils/normalize";
|
|
|
7
7
|
/**
|
|
8
8
|
* Webhook service tag
|
|
9
9
|
*/
|
|
10
|
-
export class WebhookService extends
|
|
10
|
+
export class WebhookService extends Context.Service()("WebhookService") {
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Create webhook service implementation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookService.js","sourceRoot":"","sources":["../../src/services/WebhookService.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,
|
|
1
|
+
{"version":3,"file":"WebhookService.js","sourceRoot":"","sources":["../../src/services/WebhookService.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,EACP,QAAQ,EACR,MAAM,EACN,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,GACN,MAAM,QAAQ,CAAC;AAChB,OAAO,EACN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAsDhD,CAAC,gBAAgB,CAAC;CAAG;AAUxB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrD,iBAAiB;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAErC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAE7C,wCAAwC;IACxC,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACzC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,UAAU;QAC1E,SAAS,EAAE,QAAQ,CAAC,MAAM,CACzB,MAAM,CAAC,OAAO,CAAC,WAAW;YACzB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CACpD;QACD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CACxB,MAAM,CAAC,OAAO,CAAC,UAAU;YACxB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CACnD;QACD,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM;KACpE,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC3C,IAAI,CACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CACvE,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE,CACnC,UAAU;SACR,OAAO,CAAC;QACR,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,gBAAgB;KACtB,CAAC;SACD,IAAI,CACJ,MAAM,CAAC,KAAK,CACX,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CACtC,MAAM,CAAC,OAAO,CACb,IAAI,CAAC,KAAK,YAAY,YAAY;QACjC,IAAI,CAAC,KAAK,YAAY,cAAc;QACpC,CAAC,IAAI,CAAC,KAAK,YAAY,SAAS;YAC/B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAC5C,CACD,CACD,CACD,CACF,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;QACnD,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACnB,CAAC,CAAC,CACH,CAAC;IAEH,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,EAAE,CACxC,IAAI,CACH,cAAc,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3B,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE;QAC9C,CAAC,CAAC,MAAM,CAAC,IAAI;QACb,CAAC,CAAC,MAAM,CAAC,IAAI,CACX,IAAI,YAAY,CAAC;YAChB,OAAO,EAAE,gCAAgC,QAAQ,CAAC,MAAM,EAAE;YAC1D,KAAK,EAAE,QAAQ;SACf,CAAC,CACF,CACH,CACD,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,MAAwB,EAAE,EAAE,CAClD,IAAI,CACH,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACrE,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE,CAClC,UAAU,CAAC,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO;QACf,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,eAAe;KACrB,CAAC,CACF,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3B,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9D,MAAM,CAAC,QAAQ,CACd,GAAG,EAAE,CACJ,IAAI,YAAY,CAAC;QAChB,OAAO,EAAE,0BAA0B;QACnC,KAAK,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC,CACH,CACD,CACD,CACD,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CACvB,IAAI,CACH,UAAU,CAAC,OAAO,CAAC;QAClB,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,UAAU;KACf,CAAC,EACF,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3B,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAC9D,MAAM,CAAC,QAAQ,CACd,GAAG,EAAE,CACJ,IAAI,YAAY,CAAC;QAChB,OAAO,EAAE,0BAA0B;QACnC,KAAK,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC,CACH,CACD,CACD,CACD,CAAC;IAEH,MAAM,eAAe,GAAG,GAAG,EAAE,CAC5B,IAAI,CACH,UAAU,CAAC,OAAO,CAAC;QAClB,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,UAAU;KACf,CAAC,EACF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EACf,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IAEH,MAAM,aAAa,GAAG,GAAG,EAAE,CAC1B,IAAI,CACH,UAAU,CAAC,OAAO,CAAC;QAClB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,UAAU;KACf,CAAC,EACF,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CACjD,CAAC;IAEH,OAAO;QACN,WAAW;QACX,cAAc;QACd,aAAa;QACb,UAAU;QACV,aAAa;QACb,eAAe;KACwC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAC7C,cAAc,EACd,kBAAkB,CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,OAAgB,EAKf,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,OAAgB,EAKf,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtE;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,MAAwB,EAKvB,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpE;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAIxB,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAI3B,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAI7B,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC"}
|