@gravito/echo 1.0.0-beta.1 → 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.
- package/dist/OrbitEcho.d.ts +99 -0
- package/dist/OrbitEcho.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +3 -3
- package/dist/providers/GenericProvider.d.ts +35 -0
- package/dist/providers/GenericProvider.d.ts.map +1 -0
- package/dist/providers/GitHubProvider.d.ts +27 -0
- package/dist/providers/GitHubProvider.d.ts.map +1 -0
- package/dist/providers/StripeProvider.d.ts +31 -0
- package/dist/providers/StripeProvider.d.ts.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/receive/SignatureValidator.d.ts +35 -0
- package/dist/receive/SignatureValidator.d.ts.map +1 -0
- package/dist/receive/WebhookReceiver.d.ts +68 -0
- package/dist/receive/WebhookReceiver.d.ts.map +1 -0
- package/dist/receive/index.d.ts +3 -0
- package/dist/receive/index.d.ts.map +1 -0
- package/dist/send/WebhookDispatcher.d.ts +55 -0
- package/dist/send/WebhookDispatcher.d.ts.map +1 -0
- package/dist/send/index.d.ts +2 -0
- package/dist/send/index.d.ts.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +8 -6
|
@@ -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.
|
|
2
|
+
module.exports = require("./index.js");
|
package/dist/index.d.ts
ADDED
|
@@ -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.
|
|
458
|
-
core.container.
|
|
457
|
+
core.container.instance("echo", this);
|
|
458
|
+
core.container.instance("echo.receiver", this.receiver);
|
|
459
459
|
if (this.dispatcher) {
|
|
460
|
-
core.container.
|
|
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=
|
|
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
|
|
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": "
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/send/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
+
}
|