@gravito/echo 1.0.0-alpha.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @fileoverview OrbitEcho Module
3
+ *
4
+ * Gravito integration for webhook handling.
5
+ *
6
+ * @module @gravito/echo
7
+ */
8
+ import { WebhookReceiver } from './receive/WebhookReceiver';
9
+ import { WebhookDispatcher } from './send/WebhookDispatcher';
10
+ import type { EchoConfig } from './types';
11
+ /**
12
+ * Simple module interface for PlanetCore integration
13
+ */
14
+ interface ModuleConfig {
15
+ singleton?: boolean;
16
+ }
17
+ /**
18
+ * Minimal PlanetCore interface
19
+ */
20
+ interface PlanetCore {
21
+ container: {
22
+ instance<T>(key: string, value: T): void;
23
+ };
24
+ hooks: {
25
+ addAction(hook: string, callback: () => void | Promise<void>): void;
26
+ };
27
+ adapter: {
28
+ use(middleware: unknown): void;
29
+ };
30
+ router: {
31
+ post(path: string, handler: unknown): void;
32
+ };
33
+ }
34
+ /**
35
+ * OrbitEcho - Gravito Webhook Module
36
+ *
37
+ * Provides secure webhook receiving and reliable webhook sending.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const core = new PlanetCore()
42
+ *
43
+ * core.install(new OrbitEcho({
44
+ * providers: {
45
+ * stripe: { name: 'stripe', secret: process.env.STRIPE_WEBHOOK_SECRET! },
46
+ * github: { name: 'github', secret: process.env.GITHUB_WEBHOOK_SECRET! }
47
+ * },
48
+ * dispatcher: {
49
+ * secret: process.env.OUTGOING_WEBHOOK_SECRET!
50
+ * }
51
+ * }))
52
+ *
53
+ * // Get receiver to add handlers
54
+ * const receiver = core.container.make<WebhookReceiver>('echo.receiver')
55
+ * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {
56
+ * console.log('Payment received:', event.payload)
57
+ * })
58
+ * ```
59
+ */
60
+ export declare class OrbitEcho {
61
+ static config: ModuleConfig;
62
+ private receiver;
63
+ private dispatcher?;
64
+ private echoConfig;
65
+ /**
66
+ * Create a new OrbitEcho instance.
67
+ *
68
+ * @param config - The configuration object for providers and dispatcher.
69
+ */
70
+ constructor(config?: EchoConfig);
71
+ /**
72
+ * Install into PlanetCore
73
+ *
74
+ * Registers the OrbitEcho instance and its components into the service container.
75
+ *
76
+ * @param core - The PlanetCore instance.
77
+ */
78
+ install(core: PlanetCore): void;
79
+ /**
80
+ * Get webhook receiver
81
+ *
82
+ * @returns The WebhookReceiver instance.
83
+ */
84
+ getReceiver(): WebhookReceiver;
85
+ /**
86
+ * Get webhook dispatcher
87
+ *
88
+ * @returns The WebhookDispatcher instance, or undefined if not configured.
89
+ */
90
+ getDispatcher(): WebhookDispatcher | undefined;
91
+ /**
92
+ * Get configuration
93
+ *
94
+ * @returns The EchoConfig object.
95
+ */
96
+ getConfig(): EchoConfig;
97
+ }
98
+ export {};
99
+ //# sourceMappingURL=OrbitEcho.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrbitEcho.d.ts","sourceRoot":"","sources":["../src/OrbitEcho.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC;;GAEG;AACH,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAUD;;GAEG;AACH,UAAU,UAAU;IAClB,SAAS,EAAE;QACT,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;KACzC,CAAA;IACD,KAAK,EAAE;QACL,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;KACpE,CAAA;IACD,OAAO,EAAE;QACP,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;KAC/B,CAAA;IACD,MAAM,EAAE;QACN,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAC3C,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,SAAS;IACpB,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB;IAEjD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAY;IAE9B;;;;OAIG;gBACS,MAAM,GAAE,UAAe;IAoBnC;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAS/B;;;;OAIG;IACH,WAAW,IAAI,eAAe;IAI9B;;;;OAIG;IACH,aAAa,IAAI,iBAAiB,GAAG,SAAS;IAI9C;;;;OAIG;IACH,SAAS,IAAI,UAAU;CAGxB"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  "use strict";
2
- module.exports = require("./index.mjs");
2
+ module.exports = require("./index.js");
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview @gravito/echo - Enterprise Webhook Module
3
+ *
4
+ * Secure webhook receiving and reliable webhook sending for Gravito.
5
+ *
6
+ * @example Receiving webhooks
7
+ * ```typescript
8
+ * import { OrbitEcho, WebhookReceiver } from '@gravito/echo'
9
+ *
10
+ * const core = new PlanetCore()
11
+ *
12
+ * core.install(new OrbitEcho({
13
+ * providers: {
14
+ * stripe: { name: 'stripe', secret: process.env.STRIPE_WEBHOOK_SECRET! }
15
+ * }
16
+ * }))
17
+ *
18
+ * const receiver = core.container.make<WebhookReceiver>('echo.receiver')
19
+ * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {
20
+ * console.log('Payment:', event.payload)
21
+ * })
22
+ * ```
23
+ *
24
+ * @example Sending webhooks
25
+ * ```typescript
26
+ * import { WebhookDispatcher } from '@gravito/echo'
27
+ *
28
+ * const dispatcher = new WebhookDispatcher({
29
+ * secret: 'my-secret'
30
+ * })
31
+ *
32
+ * await dispatcher.dispatch({
33
+ * url: 'https://example.com/webhook',
34
+ * event: 'order.created',
35
+ * data: { orderId: 123 }
36
+ * })
37
+ * ```
38
+ *
39
+ * @module @gravito/echo
40
+ */
41
+ export { OrbitEcho } from './OrbitEcho';
42
+ export { GenericProvider } from './providers/GenericProvider';
43
+ export { GitHubProvider } from './providers/GitHubProvider';
44
+ export { StripeProvider } from './providers/StripeProvider';
45
+ export { computeHmacSha1, computeHmacSha256, parseStripeSignature, timingSafeEqual, validateTimestamp, } from './receive/SignatureValidator';
46
+ export { WebhookReceiver } from './receive/WebhookReceiver';
47
+ export { WebhookDispatcher } from './send/WebhookDispatcher';
48
+ export type { EchoConfig, RetryConfig, WebhookDeliveryResult, WebhookDispatcherConfig, WebhookEvent, WebhookHandler, WebhookPayload, WebhookProvider, WebhookProviderConfig, WebhookVerificationResult, } from './types';
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAG5D,YAAY,EAEV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,cAAc,EAEd,cAAc,EAEd,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -454,10 +454,10 @@ class OrbitEcho {
454
454
  }
455
455
  }
456
456
  install(core) {
457
- core.container.bindSingleton("echo", this);
458
- core.container.bindSingleton("echo.receiver", this.receiver);
457
+ core.container.instance("echo", this);
458
+ core.container.instance("echo.receiver", this.receiver);
459
459
  if (this.dispatcher) {
460
- core.container.bindSingleton("echo.dispatcher", this.dispatcher);
460
+ core.container.instance("echo.dispatcher", this.dispatcher);
461
461
  }
462
462
  }
463
463
  getReceiver() {
@@ -484,4 +484,4 @@ export {
484
484
  GenericProvider
485
485
  };
486
486
 
487
- //# debugId=212CE8A49B8DAD8D64756E2164756E21
487
+ //# debugId=B1111F963DAFCE1264756E2164756E21
package/dist/index.js.map CHANGED
@@ -8,9 +8,9 @@
8
8
  "/**\n * @fileoverview Stripe webhook provider\n *\n * Implements Stripe's webhook signature verification.\n * @see https://stripe.com/docs/webhooks/signatures\n *\n * @module @gravito/echo/providers\n */\n\nimport {\n computeHmacSha256,\n parseStripeSignature,\n timingSafeEqual,\n validateTimestamp,\n} from '../receive/SignatureValidator'\nimport type { WebhookProvider, WebhookVerificationResult } from '../types'\n\n/**\n * Stripe webhook provider\n *\n * Verifies Stripe webhook signatures using their standard format.\n *\n * @example\n * ```typescript\n * const provider = new StripeProvider()\n * const result = await provider.verify(body, headers, process.env.STRIPE_WEBHOOK_SECRET)\n * ```\n */\nexport class StripeProvider implements WebhookProvider {\n readonly name = 'stripe'\n\n private tolerance: number\n\n constructor(options: { tolerance?: number } = {}) {\n this.tolerance = options.tolerance ?? 300\n }\n\n async verify(\n payload: string | Buffer,\n headers: Record<string, string | string[] | undefined>,\n secret: string\n ): Promise<WebhookVerificationResult> {\n // Get signature header\n const signatureHeader = this.getHeader(headers, 'stripe-signature')\n if (!signatureHeader) {\n return {\n valid: false,\n error: 'Missing Stripe-Signature header',\n }\n }\n\n // Parse signature header\n const parsed = parseStripeSignature(signatureHeader)\n if (!parsed) {\n return {\n valid: false,\n error: 'Invalid Stripe-Signature header format',\n }\n }\n\n const { timestamp, signatures } = parsed\n\n // Validate timestamp\n if (!validateTimestamp(timestamp, this.tolerance)) {\n return {\n valid: false,\n error: `Timestamp outside tolerance window (${this.tolerance}s)`,\n }\n }\n\n // Compute expected signature\n const payloadStr = typeof payload === 'string' ? payload : payload.toString('utf-8')\n const signedPayload = `${timestamp}.${payloadStr}`\n const expectedSignature = await computeHmacSha256(signedPayload, secret)\n\n // Check if any signature matches\n const signatureValid = signatures.some((sig) =>\n timingSafeEqual(sig.toLowerCase(), expectedSignature.toLowerCase())\n )\n\n if (!signatureValid) {\n return {\n valid: false,\n error: 'Signature verification failed',\n }\n }\n\n // Parse payload\n try {\n const event = JSON.parse(payloadStr)\n return {\n valid: true,\n payload: event,\n eventType: event.type,\n webhookId: event.id,\n }\n } catch {\n return {\n valid: false,\n error: 'Failed to parse webhook payload',\n }\n }\n }\n\n parseEventType(payload: unknown): string | undefined {\n if (typeof payload === 'object' && payload !== null && 'type' in payload) {\n return (payload as { type: string }).type\n }\n return undefined\n }\n\n private getHeader(\n headers: Record<string, string | string[] | undefined>,\n name: string\n ): string | undefined {\n const value = headers[name] ?? headers[name.toLowerCase()]\n return Array.isArray(value) ? value[0] : value\n }\n}\n",
9
9
  "/**\n * @fileoverview Webhook Receiver\n *\n * Handles incoming webhooks with signature verification.\n *\n * @module @gravito/echo/receive\n */\n\nimport { GenericProvider } from '../providers/GenericProvider'\nimport { GitHubProvider } from '../providers/GitHubProvider'\nimport { StripeProvider } from '../providers/StripeProvider'\nimport type {\n WebhookEvent,\n WebhookHandler,\n WebhookProvider,\n WebhookVerificationResult,\n} from '../types'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ProviderClass = new (options?: any) => WebhookProvider\n\n/**\n * Webhook Receiver\n *\n * Manages webhook providers and routes incoming webhooks to handlers.\n *\n * @example\n * ```typescript\n * const receiver = new WebhookReceiver()\n *\n * // Register provider\n * receiver.registerProvider('stripe', process.env.STRIPE_WEBHOOK_SECRET!)\n *\n * // Register handler\n * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {\n * console.log('Payment received:', event.payload)\n * })\n *\n * // Handle incoming webhook\n * const result = await receiver.handle('stripe', body, headers)\n * ```\n */\nexport class WebhookReceiver {\n private providers = new Map<string, { provider: WebhookProvider; secret: string }>()\n private handlers = new Map<string, Map<string, WebhookHandler[]>>()\n private globalHandlers = new Map<string, WebhookHandler[]>()\n\n constructor() {\n // Register built-in providers\n this.registerProviderType('generic', GenericProvider as ProviderClass)\n this.registerProviderType('stripe', StripeProvider as ProviderClass)\n this.registerProviderType('github', GitHubProvider as ProviderClass)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private providerTypes = new Map<string, ProviderClass>()\n\n /**\n * Register a custom provider type\n */\n registerProviderType(name: string, ProviderCls: ProviderClass): this {\n this.providerTypes.set(name, ProviderCls)\n return this\n }\n\n /**\n * Register a provider with its secret\n */\n registerProvider(\n name: string,\n secret: string,\n options?: { type?: string; tolerance?: number }\n ): this {\n const type = options?.type ?? name\n const ProviderClass = this.providerTypes.get(type)\n\n if (!ProviderClass) {\n throw new Error(`Unknown provider type: ${type}`)\n }\n\n const provider = new ProviderClass({ tolerance: options?.tolerance })\n this.providers.set(name, { provider, secret })\n return this\n }\n\n /**\n * Register an event handler\n */\n on<T = unknown>(providerName: string, eventType: string, handler: WebhookHandler<T>): this {\n if (!this.handlers.has(providerName)) {\n this.handlers.set(providerName, new Map())\n }\n\n const providerHandlers = this.handlers.get(providerName)!\n if (!providerHandlers.has(eventType)) {\n providerHandlers.set(eventType, [])\n }\n\n providerHandlers.get(eventType)?.push(handler as WebhookHandler)\n return this\n }\n\n /**\n * Register a handler for all events from a provider\n */\n onAll<T = unknown>(providerName: string, handler: WebhookHandler<T>): this {\n if (!this.globalHandlers.has(providerName)) {\n this.globalHandlers.set(providerName, [])\n }\n\n this.globalHandlers.get(providerName)?.push(handler as WebhookHandler)\n return this\n }\n\n /**\n * Handle an incoming webhook\n */\n async handle(\n providerName: string,\n body: string | Buffer,\n headers: Record<string, string | string[] | undefined>\n ): Promise<WebhookVerificationResult & { handled: boolean }> {\n const config = this.providers.get(providerName)\n if (!config) {\n return {\n valid: false,\n error: `Provider not registered: ${providerName}`,\n handled: false,\n }\n }\n\n const { provider, secret } = config\n\n // Verify webhook\n const result = await provider.verify(body, headers, secret)\n if (!result.valid) {\n return { ...result, handled: false }\n }\n\n // Create event object\n const event: WebhookEvent = {\n provider: providerName,\n type: result.eventType ?? 'unknown',\n payload: result.payload,\n headers,\n rawBody: typeof body === 'string' ? body : body.toString('utf-8'),\n receivedAt: new Date(),\n id: result.webhookId,\n }\n\n // Call handlers\n let handled = false\n\n // Call event-specific handlers\n const providerHandlers = this.handlers.get(providerName)\n if (providerHandlers) {\n const eventHandlers = providerHandlers.get(event.type)\n if (eventHandlers) {\n for (const handler of eventHandlers) {\n await handler(event)\n handled = true\n }\n }\n }\n\n // Call global handlers\n const globalHandlers = this.globalHandlers.get(providerName)\n if (globalHandlers) {\n for (const handler of globalHandlers) {\n await handler(event)\n handled = true\n }\n }\n\n return { ...result, handled }\n }\n\n /**\n * Verify a webhook without handling\n */\n async verify(\n providerName: string,\n body: string | Buffer,\n headers: Record<string, string | string[] | undefined>\n ): Promise<WebhookVerificationResult> {\n const config = this.providers.get(providerName)\n if (!config) {\n return {\n valid: false,\n error: `Provider not registered: ${providerName}`,\n }\n }\n\n return config.provider.verify(body, headers, config.secret)\n }\n}\n",
10
10
  "/**\n * @fileoverview Webhook Dispatcher\n *\n * Reliably sends webhooks to external services with retry support.\n *\n * @module @gravito/echo/send\n */\n\nimport { computeHmacSha256 } from '../receive/SignatureValidator'\nimport type {\n RetryConfig,\n WebhookDeliveryResult,\n WebhookDispatcherConfig,\n WebhookPayload,\n} from '../types'\n\n/**\n * Default retry configuration\n */\nconst DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {\n maxAttempts: 3,\n initialDelay: 1000,\n backoffMultiplier: 2,\n maxDelay: 300000, // 5 minutes\n retryableStatuses: [408, 429, 500, 502, 503, 504],\n}\n\n/**\n * Webhook Dispatcher\n *\n * Sends webhooks with signature and retry support.\n *\n * @example\n * ```typescript\n * const dispatcher = new WebhookDispatcher({\n * secret: 'my-webhook-secret',\n * retry: { maxAttempts: 5 }\n * })\n *\n * const result = await dispatcher.dispatch({\n * url: 'https://example.com/webhook',\n * event: 'order.created',\n * data: { orderId: 123 }\n * })\n * ```\n */\nexport class WebhookDispatcher {\n private secret: string\n private retryConfig: Required<RetryConfig>\n private timeout: number\n private userAgent: string\n\n constructor(config: WebhookDispatcherConfig) {\n this.secret = config.secret\n this.retryConfig = { ...DEFAULT_RETRY_CONFIG, ...config.retry }\n this.timeout = config.timeout ?? 30000\n this.userAgent = config.userAgent ?? 'Gravito-Echo/1.0'\n }\n\n /**\n * Dispatch a webhook with retries\n */\n async dispatch<T = unknown>(payload: WebhookPayload<T>): Promise<WebhookDeliveryResult> {\n let lastResult: WebhookDeliveryResult | null = null\n\n for (let attempt = 1; attempt <= this.retryConfig.maxAttempts; attempt++) {\n const result = await this.attemptDelivery(payload, attempt)\n lastResult = result\n\n if (result.success) {\n return result\n }\n\n // Check if we should retry\n if (attempt < this.retryConfig.maxAttempts) {\n const shouldRetry = this.shouldRetry(result)\n if (shouldRetry) {\n const delay = this.calculateDelay(attempt)\n await this.sleep(delay)\n continue\n }\n }\n\n // Don't retry if status is not retryable\n return result\n }\n\n return lastResult!\n }\n\n /**\n * Attempt a single delivery\n */\n private async attemptDelivery<T = unknown>(\n payload: WebhookPayload<T>,\n attempt: number\n ): Promise<WebhookDeliveryResult> {\n const startTime = Date.now()\n const timestamp = Math.floor(Date.now() / 1000)\n const webhookId = payload.id ?? crypto.randomUUID()\n\n try {\n // Build request body\n const body = JSON.stringify({\n id: webhookId,\n type: payload.event,\n timestamp,\n data: payload.data,\n })\n\n // Compute signature\n const signedPayload = `${timestamp}.${body}`\n const signature = await computeHmacSha256(signedPayload, this.secret)\n\n // Create abort controller for timeout\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch(payload.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': this.userAgent,\n 'X-Webhook-ID': webhookId,\n 'X-Webhook-Timestamp': String(timestamp),\n 'X-Webhook-Signature': `t=${timestamp},v1=${signature}`,\n },\n body,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const duration = Date.now() - startTime\n const responseBody = await response.text()\n\n return {\n success: response.ok,\n statusCode: response.status,\n body: responseBody,\n attempt,\n duration,\n deliveredAt: new Date(),\n error: response.ok ? undefined : `HTTP ${response.status}`,\n }\n } finally {\n clearTimeout(timeoutId)\n }\n } catch (error) {\n const duration = Date.now() - startTime\n\n return {\n success: false,\n attempt,\n duration,\n deliveredAt: new Date(),\n error: error instanceof Error ? error.message : 'Unknown error',\n }\n }\n }\n\n /**\n * Check if we should retry based on result\n */\n private shouldRetry(result: WebhookDeliveryResult): boolean {\n if (!result.statusCode) {\n // Network error, retry\n return true\n }\n\n return this.retryConfig.retryableStatuses.includes(result.statusCode)\n }\n\n /**\n * Calculate delay for exponential backoff\n */\n private calculateDelay(attempt: number): number {\n const delay =\n this.retryConfig.initialDelay * this.retryConfig.backoffMultiplier ** (attempt - 1)\n\n return Math.min(delay, this.retryConfig.maxDelay)\n }\n\n /**\n * Sleep helper\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n",
11
- "/**\n * @fileoverview OrbitEcho Module\n *\n * Gravito integration for webhook handling.\n *\n * @module @gravito/echo\n */\n\nimport { WebhookReceiver } from './receive/WebhookReceiver'\nimport { WebhookDispatcher } from './send/WebhookDispatcher'\nimport type { EchoConfig } from './types'\n\n/**\n * Simple module interface for PlanetCore integration\n */\ninterface ModuleConfig {\n singleton?: boolean\n}\n\n/**\n * Minimal ServiceProvider interface\n */\ninterface ServiceProvider {\n register?(): void | Promise<void>\n boot?(): void | Promise<void>\n}\n\n/**\n * Minimal PlanetCore interface\n */\ninterface PlanetCore {\n container: {\n bindSingleton<T>(key: string, value: T): void\n }\n hooks: {\n addAction(hook: string, callback: () => void | Promise<void>): void\n }\n adapter: {\n use(middleware: unknown): void\n }\n router: {\n post(path: string, handler: unknown): void\n }\n}\n\n/**\n * OrbitEcho - Gravito Webhook Module\n *\n * Provides secure webhook receiving and reliable webhook sending.\n *\n * @example\n * ```typescript\n * const core = new PlanetCore()\n *\n * core.install(new OrbitEcho({\n * providers: {\n * stripe: { name: 'stripe', secret: process.env.STRIPE_WEBHOOK_SECRET! },\n * github: { name: 'github', secret: process.env.GITHUB_WEBHOOK_SECRET! }\n * },\n * dispatcher: {\n * secret: process.env.OUTGOING_WEBHOOK_SECRET!\n * }\n * }))\n *\n * // Get receiver to add handlers\n * const receiver = core.container.make<WebhookReceiver>('echo.receiver')\n * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {\n * console.log('Payment received:', event.payload)\n * })\n * ```\n */\nexport class OrbitEcho {\n static config: ModuleConfig = { singleton: true }\n\n private receiver: WebhookReceiver\n private dispatcher?: WebhookDispatcher\n private echoConfig: EchoConfig\n\n /**\n * Create a new OrbitEcho instance.\n *\n * @param config - The configuration object for providers and dispatcher.\n */\n constructor(config: EchoConfig = {}) {\n this.echoConfig = config\n this.receiver = new WebhookReceiver()\n\n // Register providers\n if (config.providers) {\n for (const [name, providerConfig] of Object.entries(config.providers)) {\n this.receiver.registerProvider(name, providerConfig.secret, {\n type: providerConfig.name,\n tolerance: providerConfig.tolerance,\n })\n }\n }\n\n // Create dispatcher\n if (config.dispatcher) {\n this.dispatcher = new WebhookDispatcher(config.dispatcher)\n }\n }\n\n /**\n * Install into PlanetCore\n *\n * Registers the OrbitEcho instance and its components into the service container.\n *\n * @param core - The PlanetCore instance.\n */\n install(core: PlanetCore): void {\n // Bind instances\n core.container.bindSingleton('echo', this)\n core.container.bindSingleton('echo.receiver', this.receiver)\n if (this.dispatcher) {\n core.container.bindSingleton('echo.dispatcher', this.dispatcher)\n }\n }\n\n /**\n * Get webhook receiver\n *\n * @returns The WebhookReceiver instance.\n */\n getReceiver(): WebhookReceiver {\n return this.receiver\n }\n\n /**\n * Get webhook dispatcher\n *\n * @returns The WebhookDispatcher instance, or undefined if not configured.\n */\n getDispatcher(): WebhookDispatcher | undefined {\n return this.dispatcher\n }\n\n /**\n * Get configuration\n *\n * @returns The EchoConfig object.\n */\n getConfig(): EchoConfig {\n return this.echoConfig\n }\n}\n"
11
+ "/**\n * @fileoverview OrbitEcho Module\n *\n * Gravito integration for webhook handling.\n *\n * @module @gravito/echo\n */\n\nimport { WebhookReceiver } from './receive/WebhookReceiver'\nimport { WebhookDispatcher } from './send/WebhookDispatcher'\nimport type { EchoConfig } from './types'\n\n/**\n * Simple module interface for PlanetCore integration\n */\ninterface ModuleConfig {\n singleton?: boolean\n}\n\n/**\n * Minimal ServiceProvider interface\n */\ninterface ServiceProvider {\n register?(): void | Promise<void>\n boot?(): void | Promise<void>\n}\n\n/**\n * Minimal PlanetCore interface\n */\ninterface PlanetCore {\n container: {\n instance<T>(key: string, value: T): void\n }\n hooks: {\n addAction(hook: string, callback: () => void | Promise<void>): void\n }\n adapter: {\n use(middleware: unknown): void\n }\n router: {\n post(path: string, handler: unknown): void\n }\n}\n\n/**\n * OrbitEcho - Gravito Webhook Module\n *\n * Provides secure webhook receiving and reliable webhook sending.\n *\n * @example\n * ```typescript\n * const core = new PlanetCore()\n *\n * core.install(new OrbitEcho({\n * providers: {\n * stripe: { name: 'stripe', secret: process.env.STRIPE_WEBHOOK_SECRET! },\n * github: { name: 'github', secret: process.env.GITHUB_WEBHOOK_SECRET! }\n * },\n * dispatcher: {\n * secret: process.env.OUTGOING_WEBHOOK_SECRET!\n * }\n * }))\n *\n * // Get receiver to add handlers\n * const receiver = core.container.make<WebhookReceiver>('echo.receiver')\n * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {\n * console.log('Payment received:', event.payload)\n * })\n * ```\n */\nexport class OrbitEcho {\n static config: ModuleConfig = { singleton: true }\n\n private receiver: WebhookReceiver\n private dispatcher?: WebhookDispatcher\n private echoConfig: EchoConfig\n\n /**\n * Create a new OrbitEcho instance.\n *\n * @param config - The configuration object for providers and dispatcher.\n */\n constructor(config: EchoConfig = {}) {\n this.echoConfig = config\n this.receiver = new WebhookReceiver()\n\n // Register providers\n if (config.providers) {\n for (const [name, providerConfig] of Object.entries(config.providers)) {\n this.receiver.registerProvider(name, providerConfig.secret, {\n type: providerConfig.name,\n tolerance: providerConfig.tolerance,\n })\n }\n }\n\n // Create dispatcher\n if (config.dispatcher) {\n this.dispatcher = new WebhookDispatcher(config.dispatcher)\n }\n }\n\n /**\n * Install into PlanetCore\n *\n * Registers the OrbitEcho instance and its components into the service container.\n *\n * @param core - The PlanetCore instance.\n */\n install(core: PlanetCore): void {\n // Bind instances\n core.container.instance('echo', this)\n core.container.instance('echo.receiver', this.receiver)\n if (this.dispatcher) {\n core.container.instance('echo.dispatcher', this.dispatcher)\n }\n }\n\n /**\n * Get webhook receiver\n *\n * @returns The WebhookReceiver instance.\n */\n getReceiver(): WebhookReceiver {\n return this.receiver\n }\n\n /**\n * Get webhook dispatcher\n *\n * @returns The WebhookDispatcher instance, or undefined if not configured.\n */\n getDispatcher(): WebhookDispatcher | undefined {\n return this.dispatcher\n }\n\n /**\n * Get configuration\n *\n * @returns The EchoConfig object.\n */\n getConfig(): EchoConfig {\n return this.echoConfig\n }\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "212CE8A49B8DAD8D64756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "B1111F963DAFCE1264756E2164756E21",
15
15
  "names": []
16
16
  }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Generic webhook provider
3
+ *
4
+ * Simple HMAC-SHA256 signature verification.
5
+ *
6
+ * @module @gravito/echo/providers
7
+ */
8
+ import type { WebhookProvider, WebhookVerificationResult } from '../types';
9
+ /**
10
+ * Generic webhook provider using HMAC-SHA256
11
+ *
12
+ * Expected headers:
13
+ * - X-Webhook-Signature: HMAC-SHA256 hex signature
14
+ * - X-Webhook-Timestamp: Unix timestamp (optional)
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const provider = new GenericProvider()
19
+ * const result = await provider.verify(body, headers, secret)
20
+ * ```
21
+ */
22
+ export declare class GenericProvider implements WebhookProvider {
23
+ readonly name = "generic";
24
+ private signatureHeader;
25
+ private timestampHeader;
26
+ private tolerance;
27
+ constructor(options?: {
28
+ signatureHeader?: string;
29
+ timestampHeader?: string;
30
+ tolerance?: number;
31
+ });
32
+ verify(payload: string | Buffer, headers: Record<string, string | string[] | undefined>, secret: string): Promise<WebhookVerificationResult>;
33
+ private getHeader;
34
+ }
35
+ //# sourceMappingURL=GenericProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GenericProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAE1E;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,IAAI,aAAY;IAEzB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAAQ;gBAGvB,OAAO,GAAE;QACP,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,SAAS,CAAC,EAAE,MAAM,CAAA;KACd;IAOF,MAAM,CACV,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IAmDrC,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview GitHub webhook provider
3
+ *
4
+ * Implements GitHub's webhook signature verification.
5
+ * @see https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries
6
+ *
7
+ * @module @gravito/echo/providers
8
+ */
9
+ import type { WebhookProvider, WebhookVerificationResult } from '../types';
10
+ /**
11
+ * GitHub webhook provider
12
+ *
13
+ * Verifies GitHub webhook signatures using the X-Hub-Signature-256 header.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const provider = new GitHubProvider()
18
+ * const result = await provider.verify(body, headers, process.env.GITHUB_WEBHOOK_SECRET)
19
+ * ```
20
+ */
21
+ export declare class GitHubProvider implements WebhookProvider {
22
+ readonly name = "github";
23
+ verify(payload: string | Buffer, headers: Record<string, string | string[] | undefined>, secret: string): Promise<WebhookVerificationResult>;
24
+ parseEventType(payload: unknown): string | undefined;
25
+ private getHeader;
26
+ }
27
+ //# sourceMappingURL=GitHubProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubProvider.d.ts","sourceRoot":"","sources":["../../src/providers/GitHubProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAE1E;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,YAAW;IAElB,MAAM,CACV,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IAoDrC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Stripe webhook provider
3
+ *
4
+ * Implements Stripe's webhook signature verification.
5
+ * @see https://stripe.com/docs/webhooks/signatures
6
+ *
7
+ * @module @gravito/echo/providers
8
+ */
9
+ import type { WebhookProvider, WebhookVerificationResult } from '../types';
10
+ /**
11
+ * Stripe webhook provider
12
+ *
13
+ * Verifies Stripe webhook signatures using their standard format.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const provider = new StripeProvider()
18
+ * const result = await provider.verify(body, headers, process.env.STRIPE_WEBHOOK_SECRET)
19
+ * ```
20
+ */
21
+ export declare class StripeProvider implements WebhookProvider {
22
+ readonly name = "stripe";
23
+ private tolerance;
24
+ constructor(options?: {
25
+ tolerance?: number;
26
+ });
27
+ verify(payload: string | Buffer, headers: Record<string, string | string[] | undefined>, secret: string): Promise<WebhookVerificationResult>;
28
+ parseEventType(payload: unknown): string | undefined;
29
+ private getHeader;
30
+ }
31
+ //# sourceMappingURL=StripeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StripeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/StripeProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAE1E;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,YAAW;IAExB,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAI1C,MAAM,CACV,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IA+DrC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,4 @@
1
+ export * from './GenericProvider';
2
+ export * from './GitHubProvider';
3
+ export * from './StripeProvider';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @fileoverview Signature validation utilities
3
+ *
4
+ * Provides HMAC-based signature verification for webhook payloads.
5
+ *
6
+ * @module @gravito/echo/receive
7
+ */
8
+ /**
9
+ * Compute HMAC-SHA256 signature
10
+ */
11
+ export declare function computeHmacSha256(payload: string | Buffer, secret: string): Promise<string>;
12
+ /**
13
+ * Compute HMAC-SHA1 signature (for legacy providers)
14
+ */
15
+ export declare function computeHmacSha1(payload: string | Buffer, secret: string): Promise<string>;
16
+ /**
17
+ * Timing-safe string comparison to prevent timing attacks
18
+ */
19
+ export declare function timingSafeEqual(a: string, b: string): boolean;
20
+ /**
21
+ * Validate timestamp is within tolerance
22
+ *
23
+ * @param timestamp - Unix timestamp in seconds
24
+ * @param tolerance - Tolerance in seconds (default: 300 = 5 minutes)
25
+ */
26
+ export declare function validateTimestamp(timestamp: number, tolerance?: number): boolean;
27
+ /**
28
+ * Parse Stripe-style signature header
29
+ * Format: t=timestamp,v1=signature,v1=signature2
30
+ */
31
+ export declare function parseStripeSignature(header: string): {
32
+ timestamp: number;
33
+ signatures: string[];
34
+ } | null;
35
+ //# sourceMappingURL=SignatureValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureValidator.d.ts","sourceRoot":"","sources":["../../src/receive/SignatureValidator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBjG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB/F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAc7D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,OAAO,CAG7E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,GACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAmBpD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @fileoverview Webhook Receiver
3
+ *
4
+ * Handles incoming webhooks with signature verification.
5
+ *
6
+ * @module @gravito/echo/receive
7
+ */
8
+ import type { WebhookHandler, WebhookProvider, WebhookVerificationResult } from '../types';
9
+ type ProviderClass = new (options?: any) => WebhookProvider;
10
+ /**
11
+ * Webhook Receiver
12
+ *
13
+ * Manages webhook providers and routes incoming webhooks to handlers.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const receiver = new WebhookReceiver()
18
+ *
19
+ * // Register provider
20
+ * receiver.registerProvider('stripe', process.env.STRIPE_WEBHOOK_SECRET!)
21
+ *
22
+ * // Register handler
23
+ * receiver.on('stripe', 'payment_intent.succeeded', async (event) => {
24
+ * console.log('Payment received:', event.payload)
25
+ * })
26
+ *
27
+ * // Handle incoming webhook
28
+ * const result = await receiver.handle('stripe', body, headers)
29
+ * ```
30
+ */
31
+ export declare class WebhookReceiver {
32
+ private providers;
33
+ private handlers;
34
+ private globalHandlers;
35
+ constructor();
36
+ private providerTypes;
37
+ /**
38
+ * Register a custom provider type
39
+ */
40
+ registerProviderType(name: string, ProviderCls: ProviderClass): this;
41
+ /**
42
+ * Register a provider with its secret
43
+ */
44
+ registerProvider(name: string, secret: string, options?: {
45
+ type?: string;
46
+ tolerance?: number;
47
+ }): this;
48
+ /**
49
+ * Register an event handler
50
+ */
51
+ on<T = unknown>(providerName: string, eventType: string, handler: WebhookHandler<T>): this;
52
+ /**
53
+ * Register a handler for all events from a provider
54
+ */
55
+ onAll<T = unknown>(providerName: string, handler: WebhookHandler<T>): this;
56
+ /**
57
+ * Handle an incoming webhook
58
+ */
59
+ handle(providerName: string, body: string | Buffer, headers: Record<string, string | string[] | undefined>): Promise<WebhookVerificationResult & {
60
+ handled: boolean;
61
+ }>;
62
+ /**
63
+ * Verify a webhook without handling
64
+ */
65
+ verify(providerName: string, body: string | Buffer, headers: Record<string, string | string[] | undefined>): Promise<WebhookVerificationResult>;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=WebhookReceiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookReceiver.d.ts","sourceRoot":"","sources":["../../src/receive/WebhookReceiver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAEV,cAAc,EACd,eAAe,EACf,yBAAyB,EAC1B,MAAM,UAAU,CAAA;AAGjB,KAAK,aAAa,GAAG,KAAK,OAAO,CAAC,EAAE,GAAG,KAAK,eAAe,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAmE;IACpF,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,cAAc,CAAsC;;IAU5D,OAAO,CAAC,aAAa,CAAmC;IAExD;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI;IAKpE;;OAEG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9C,IAAI;IAaP;;OAEG;IACH,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAc1F;;OAEG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAS1E;;OAEG;IACG,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,yBAAyB,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAwD5D;;OAEG;IACG,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,yBAAyB,CAAC;CAWtC"}
@@ -0,0 +1,3 @@
1
+ export * from './SignatureValidator';
2
+ export * from './WebhookReceiver';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/receive/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @fileoverview Webhook Dispatcher
3
+ *
4
+ * Reliably sends webhooks to external services with retry support.
5
+ *
6
+ * @module @gravito/echo/send
7
+ */
8
+ import type { WebhookDeliveryResult, WebhookDispatcherConfig, WebhookPayload } from '../types';
9
+ /**
10
+ * Webhook Dispatcher
11
+ *
12
+ * Sends webhooks with signature and retry support.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const dispatcher = new WebhookDispatcher({
17
+ * secret: 'my-webhook-secret',
18
+ * retry: { maxAttempts: 5 }
19
+ * })
20
+ *
21
+ * const result = await dispatcher.dispatch({
22
+ * url: 'https://example.com/webhook',
23
+ * event: 'order.created',
24
+ * data: { orderId: 123 }
25
+ * })
26
+ * ```
27
+ */
28
+ export declare class WebhookDispatcher {
29
+ private secret;
30
+ private retryConfig;
31
+ private timeout;
32
+ private userAgent;
33
+ constructor(config: WebhookDispatcherConfig);
34
+ /**
35
+ * Dispatch a webhook with retries
36
+ */
37
+ dispatch<T = unknown>(payload: WebhookPayload<T>): Promise<WebhookDeliveryResult>;
38
+ /**
39
+ * Attempt a single delivery
40
+ */
41
+ private attemptDelivery;
42
+ /**
43
+ * Check if we should retry based on result
44
+ */
45
+ private shouldRetry;
46
+ /**
47
+ * Calculate delay for exponential backoff
48
+ */
49
+ private calculateDelay;
50
+ /**
51
+ * Sleep helper
52
+ */
53
+ private sleep;
54
+ }
55
+ //# sourceMappingURL=WebhookDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookDispatcher.d.ts","sourceRoot":"","sources":["../../src/send/WebhookDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAEV,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACf,MAAM,UAAU,CAAA;AAajB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;gBAEb,MAAM,EAAE,uBAAuB;IAO3C;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4BvF;;OAEG;YACW,eAAe;IAqE7B;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,2 @@
1
+ export * from './WebhookDispatcher';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/send/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * @fileoverview Core types for @gravito/echo webhook module
3
+ * @module @gravito/echo
4
+ */
5
+ /**
6
+ * Webhook provider configuration
7
+ */
8
+ export interface WebhookProviderConfig {
9
+ /** Provider name (e.g., 'stripe', 'github', 'generic') */
10
+ name: string;
11
+ /** Secret for signature verification */
12
+ secret: string;
13
+ /** Signature header name */
14
+ signatureHeader?: string;
15
+ /** Timestamp validation tolerance in seconds (default: 300) */
16
+ tolerance?: number;
17
+ }
18
+ /**
19
+ * Result of webhook verification
20
+ */
21
+ export interface WebhookVerificationResult {
22
+ /** Whether the webhook is valid */
23
+ valid: boolean;
24
+ /** Error message if invalid */
25
+ error?: string;
26
+ /** Parsed payload */
27
+ payload?: unknown;
28
+ /** Event type (if available) */
29
+ eventType?: string;
30
+ /** Webhook ID (if available) */
31
+ webhookId?: string;
32
+ }
33
+ /**
34
+ * Webhook provider interface
35
+ */
36
+ export interface WebhookProvider {
37
+ /** Provider name */
38
+ readonly name: string;
39
+ /**
40
+ * Verify webhook signature
41
+ */
42
+ verify(payload: string | Buffer, headers: Record<string, string | string[] | undefined>, secret: string): Promise<WebhookVerificationResult>;
43
+ /**
44
+ * Parse the event type from payload
45
+ */
46
+ parseEventType?(payload: unknown): string | undefined;
47
+ }
48
+ /**
49
+ * Webhook event handler
50
+ */
51
+ export type WebhookHandler<T = unknown> = (event: WebhookEvent<T>) => void | Promise<void>;
52
+ /**
53
+ * Webhook event
54
+ */
55
+ export interface WebhookEvent<T = unknown> {
56
+ /** Provider name */
57
+ provider: string;
58
+ /** Event type */
59
+ type: string;
60
+ /** Event payload */
61
+ payload: T;
62
+ /** Raw request headers */
63
+ headers: Record<string, string | string[] | undefined>;
64
+ /** Raw body */
65
+ rawBody: string;
66
+ /** Timestamp when received */
67
+ receivedAt: Date;
68
+ /** Webhook ID (if available) */
69
+ id?: string;
70
+ }
71
+ /**
72
+ * Outgoing webhook payload
73
+ */
74
+ export interface WebhookPayload<T = unknown> {
75
+ /** Target URL */
76
+ url: string;
77
+ /** Event type */
78
+ event: string;
79
+ /** Payload data */
80
+ data: T;
81
+ /** Optional webhook ID */
82
+ id?: string;
83
+ /** Optional timestamp */
84
+ timestamp?: Date;
85
+ }
86
+ /**
87
+ * Webhook delivery result
88
+ */
89
+ export interface WebhookDeliveryResult {
90
+ /** Whether delivery was successful */
91
+ success: boolean;
92
+ /** HTTP status code */
93
+ statusCode?: number;
94
+ /** Response body */
95
+ body?: string;
96
+ /** Error message if failed */
97
+ error?: string;
98
+ /** Attempt number */
99
+ attempt: number;
100
+ /** Time taken in ms */
101
+ duration: number;
102
+ /** Timestamp */
103
+ deliveredAt: Date;
104
+ }
105
+ /**
106
+ * Retry strategy configuration
107
+ */
108
+ export interface RetryConfig {
109
+ /** Maximum retry attempts (default: 3) */
110
+ maxAttempts?: number;
111
+ /** Initial delay in ms (default: 1000) */
112
+ initialDelay?: number;
113
+ /** Backoff multiplier (default: 2) */
114
+ backoffMultiplier?: number;
115
+ /** Maximum delay in ms (default: 300000 = 5 minutes) */
116
+ maxDelay?: number;
117
+ /** HTTP status codes to retry (default: [408, 429, 500, 502, 503, 504]) */
118
+ retryableStatuses?: number[];
119
+ }
120
+ /**
121
+ * Webhook dispatcher configuration
122
+ */
123
+ export interface WebhookDispatcherConfig {
124
+ /** Secret for signing outgoing webhooks */
125
+ secret: string;
126
+ /** Retry configuration */
127
+ retry?: RetryConfig;
128
+ /** Request timeout in ms (default: 30000) */
129
+ timeout?: number;
130
+ /** User agent string */
131
+ userAgent?: string;
132
+ }
133
+ /**
134
+ * OrbitEcho module configuration
135
+ */
136
+ export interface EchoConfig {
137
+ /** Registered webhook providers */
138
+ providers?: Record<string, WebhookProviderConfig>;
139
+ /** Dispatcher configuration for outgoing webhooks */
140
+ dispatcher?: WebhookDispatcherConfig;
141
+ /** Base path for webhook endpoints (default: '/webhooks') */
142
+ basePath?: string;
143
+ }
144
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@gravito/echo",
3
- "version": "1.0.0-alpha.6",
3
+ "version": "1.0.0",
4
4
  "description": "Enterprise-grade webhook handling for Gravito. Secure receiving and reliable sending.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
- "module": "./dist/index.mjs",
7
+ "module": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
12
+ "import": "./dist/index.js",
13
13
  "require": "./dist/index.cjs"
14
14
  }
15
15
  },
@@ -20,7 +20,9 @@
20
20
  "scripts": {
21
21
  "build": "bun run build.ts",
22
22
  "test": "bun test",
23
- "typecheck": "tsc --noEmit"
23
+ "typecheck": "bun tsc -p tsconfig.json --noEmit --skipLibCheck",
24
+ "test:coverage": "bun test --coverage --coverage-threshold=80",
25
+ "test:ci": "bun test --coverage --coverage-threshold=80"
24
26
  },
25
27
  "keywords": [
26
28
  "gravito",
@@ -39,7 +41,7 @@
39
41
  },
40
42
  "homepage": "https://github.com/gravito-framework/gravito#readme",
41
43
  "peerDependencies": {
42
- "gravito-core": "1.0.0-beta.5"
44
+ "@gravito/core": "workspace:*"
43
45
  },
44
46
  "devDependencies": {
45
47
  "bun-types": "latest",
@@ -48,4 +50,4 @@
48
50
  "publishConfig": {
49
51
  "access": "public"
50
52
  }
51
- }
53
+ }