@gravito/echo 3.0.1 → 3.1.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.
Files changed (173) hide show
  1. package/README.md +211 -0
  2. package/dist/atlas/src/DB.d.ts +301 -0
  3. package/dist/atlas/src/OrbitAtlas.d.ts +9 -0
  4. package/dist/atlas/src/config/defineConfig.d.ts +14 -0
  5. package/dist/atlas/src/config/index.d.ts +7 -0
  6. package/dist/atlas/src/config/loadConfig.d.ts +48 -0
  7. package/dist/atlas/src/connection/Connection.d.ts +108 -0
  8. package/dist/atlas/src/connection/ConnectionManager.d.ts +111 -0
  9. package/dist/atlas/src/drivers/BunSQLDriver.d.ts +32 -0
  10. package/dist/atlas/src/drivers/BunSQLPreparedStatement.d.ts +118 -0
  11. package/dist/atlas/src/drivers/MongoDBDriver.d.ts +36 -0
  12. package/dist/atlas/src/drivers/MySQLDriver.d.ts +66 -0
  13. package/dist/atlas/src/drivers/PostgresDriver.d.ts +83 -0
  14. package/dist/atlas/src/drivers/RedisDriver.d.ts +43 -0
  15. package/dist/atlas/src/drivers/SQLiteDriver.d.ts +45 -0
  16. package/dist/atlas/src/drivers/types.d.ts +260 -0
  17. package/dist/atlas/src/errors/index.d.ts +45 -0
  18. package/dist/atlas/src/grammar/Grammar.d.ts +342 -0
  19. package/dist/atlas/src/grammar/MongoGrammar.d.ts +47 -0
  20. package/dist/atlas/src/grammar/MySQLGrammar.d.ts +54 -0
  21. package/dist/atlas/src/grammar/NullGrammar.d.ts +35 -0
  22. package/dist/atlas/src/grammar/PostgresGrammar.d.ts +62 -0
  23. package/dist/atlas/src/grammar/SQLiteGrammar.d.ts +32 -0
  24. package/dist/atlas/src/index.d.ts +67 -0
  25. package/dist/atlas/src/migration/Migration.d.ts +64 -0
  26. package/dist/atlas/src/migration/MigrationRepository.d.ts +65 -0
  27. package/dist/atlas/src/migration/Migrator.d.ts +110 -0
  28. package/dist/atlas/src/migration/index.d.ts +6 -0
  29. package/dist/atlas/src/observability/AtlasMetrics.d.ts +11 -0
  30. package/dist/atlas/src/observability/AtlasObservability.d.ts +15 -0
  31. package/dist/atlas/src/observability/AtlasTracer.d.ts +12 -0
  32. package/dist/atlas/src/observability/index.d.ts +9 -0
  33. package/dist/atlas/src/orm/index.d.ts +5 -0
  34. package/dist/atlas/src/orm/model/DirtyTracker.d.ts +121 -0
  35. package/dist/atlas/src/orm/model/Model.d.ts +449 -0
  36. package/dist/atlas/src/orm/model/ModelRegistry.d.ts +20 -0
  37. package/dist/atlas/src/orm/model/concerns/HasAttributes.d.ts +136 -0
  38. package/dist/atlas/src/orm/model/concerns/HasEvents.d.ts +36 -0
  39. package/dist/atlas/src/orm/model/concerns/HasPersistence.d.ts +87 -0
  40. package/dist/atlas/src/orm/model/concerns/HasRelationships.d.ts +117 -0
  41. package/dist/atlas/src/orm/model/concerns/HasSerialization.d.ts +64 -0
  42. package/dist/atlas/src/orm/model/concerns/applyMixins.d.ts +15 -0
  43. package/dist/atlas/src/orm/model/concerns/index.d.ts +12 -0
  44. package/dist/atlas/src/orm/model/decorators.d.ts +109 -0
  45. package/dist/atlas/src/orm/model/errors.d.ts +52 -0
  46. package/dist/atlas/src/orm/model/index.d.ts +10 -0
  47. package/dist/atlas/src/orm/model/relationships.d.ts +207 -0
  48. package/dist/atlas/src/orm/model/types.d.ts +12 -0
  49. package/dist/atlas/src/orm/schema/SchemaRegistry.d.ts +123 -0
  50. package/dist/atlas/src/orm/schema/SchemaSniffer.d.ts +54 -0
  51. package/dist/atlas/src/orm/schema/index.d.ts +6 -0
  52. package/dist/atlas/src/orm/schema/types.d.ts +85 -0
  53. package/dist/atlas/src/query/Expression.d.ts +60 -0
  54. package/dist/atlas/src/query/NPlusOneDetector.d.ts +10 -0
  55. package/dist/atlas/src/query/QueryBuilder.d.ts +573 -0
  56. package/dist/atlas/src/query/clauses/GroupByClause.d.ts +51 -0
  57. package/dist/atlas/src/query/clauses/HavingClause.d.ts +70 -0
  58. package/dist/atlas/src/query/clauses/JoinClause.d.ts +87 -0
  59. package/dist/atlas/src/query/clauses/LimitClause.d.ts +82 -0
  60. package/dist/atlas/src/query/clauses/OrderByClause.d.ts +69 -0
  61. package/dist/atlas/src/query/clauses/SelectClause.d.ts +71 -0
  62. package/dist/atlas/src/query/clauses/WhereClause.d.ts +167 -0
  63. package/dist/atlas/src/query/clauses/index.d.ts +11 -0
  64. package/dist/atlas/src/schema/Blueprint.d.ts +276 -0
  65. package/dist/atlas/src/schema/ColumnDefinition.d.ts +154 -0
  66. package/dist/atlas/src/schema/ForeignKeyDefinition.d.ts +37 -0
  67. package/dist/atlas/src/schema/Schema.d.ts +131 -0
  68. package/dist/atlas/src/schema/grammars/MySQLSchemaGrammar.d.ts +23 -0
  69. package/dist/atlas/src/schema/grammars/PostgresSchemaGrammar.d.ts +26 -0
  70. package/dist/atlas/src/schema/grammars/SQLiteSchemaGrammar.d.ts +28 -0
  71. package/dist/atlas/src/schema/grammars/SchemaGrammar.d.ts +97 -0
  72. package/dist/atlas/src/schema/grammars/index.d.ts +7 -0
  73. package/dist/atlas/src/schema/index.d.ts +8 -0
  74. package/dist/atlas/src/seed/Factory.d.ts +90 -0
  75. package/dist/atlas/src/seed/Seeder.d.ts +28 -0
  76. package/dist/atlas/src/seed/SeederRunner.d.ts +74 -0
  77. package/dist/atlas/src/seed/index.d.ts +6 -0
  78. package/dist/atlas/src/types/index.d.ts +1100 -0
  79. package/dist/atlas/src/utils/levenshtein.d.ts +9 -0
  80. package/dist/core/src/Application.d.ts +43 -17
  81. package/dist/core/src/CommandKernel.d.ts +33 -0
  82. package/dist/core/src/Container.d.ts +78 -14
  83. package/dist/core/src/HookManager.d.ts +422 -8
  84. package/dist/core/src/PlanetCore.d.ts +52 -7
  85. package/dist/core/src/Router.d.ts +41 -7
  86. package/dist/core/src/ServiceProvider.d.ts +14 -8
  87. package/dist/core/src/adapters/GravitoEngineAdapter.d.ts +1 -0
  88. package/dist/core/src/adapters/PhotonAdapter.d.ts +1 -0
  89. package/dist/core/src/adapters/bun/BunNativeAdapter.d.ts +1 -0
  90. package/dist/core/src/adapters/types.d.ts +39 -0
  91. package/dist/core/src/engine/AOTRouter.d.ts +1 -11
  92. package/dist/core/src/engine/FastContext.d.ts +4 -2
  93. package/dist/core/src/engine/Gravito.d.ts +1 -1
  94. package/dist/core/src/engine/MinimalContext.d.ts +4 -2
  95. package/dist/core/src/engine/types.d.ts +6 -1
  96. package/dist/core/src/events/CircuitBreaker.d.ts +229 -0
  97. package/dist/core/src/events/DeadLetterQueue.d.ts +145 -0
  98. package/dist/core/src/events/EventBackend.d.ts +11 -0
  99. package/dist/core/src/events/EventOptions.d.ts +109 -0
  100. package/dist/core/src/events/EventPriorityQueue.d.ts +202 -0
  101. package/dist/core/src/events/IdempotencyCache.d.ts +60 -0
  102. package/dist/core/src/events/index.d.ts +14 -0
  103. package/dist/core/src/events/observability/EventMetrics.d.ts +132 -0
  104. package/dist/core/src/events/observability/EventTracer.d.ts +68 -0
  105. package/dist/core/src/events/observability/EventTracing.d.ts +161 -0
  106. package/dist/core/src/events/observability/OTelEventMetrics.d.ts +240 -0
  107. package/dist/core/src/events/observability/ObservableHookManager.d.ts +108 -0
  108. package/dist/core/src/events/observability/index.d.ts +20 -0
  109. package/dist/core/src/events/observability/metrics-types.d.ts +16 -0
  110. package/dist/core/src/events/types.d.ts +75 -0
  111. package/dist/core/src/exceptions/CircularDependencyException.d.ts +9 -0
  112. package/dist/core/src/exceptions/index.d.ts +1 -0
  113. package/dist/core/src/http/cookie.d.ts +29 -0
  114. package/dist/core/src/http/types.d.ts +21 -0
  115. package/dist/core/src/index.d.ts +13 -3
  116. package/dist/core/src/instrumentation/index.d.ts +35 -0
  117. package/dist/core/src/instrumentation/opentelemetry.d.ts +178 -0
  118. package/dist/core/src/instrumentation/types.d.ts +182 -0
  119. package/dist/core/src/reliability/DeadLetterQueueManager.d.ts +316 -0
  120. package/dist/core/src/reliability/RetryPolicy.d.ts +217 -0
  121. package/dist/core/src/reliability/index.d.ts +6 -0
  122. package/dist/core/src/router/ControllerDispatcher.d.ts +12 -0
  123. package/dist/core/src/router/RequestValidator.d.ts +20 -0
  124. package/dist/echo/src/OrbitEcho.d.ts +71 -16
  125. package/dist/echo/src/dlq/DeadLetterQueue.d.ts +94 -0
  126. package/dist/echo/src/dlq/MemoryDeadLetterQueue.d.ts +36 -0
  127. package/dist/echo/src/dlq/index.d.ts +2 -0
  128. package/dist/echo/src/index.d.ts +31 -15
  129. package/dist/echo/src/middleware/RequestBufferMiddleware.d.ts +62 -0
  130. package/dist/echo/src/middleware/index.d.ts +8 -0
  131. package/dist/echo/src/observability/index.d.ts +3 -0
  132. package/dist/echo/src/observability/logging/ConsoleEchoLogger.d.ts +37 -0
  133. package/dist/echo/src/observability/logging/EchoLogger.d.ts +38 -0
  134. package/dist/echo/src/observability/logging/index.d.ts +2 -0
  135. package/dist/echo/src/observability/metrics/MetricsProvider.d.ts +69 -0
  136. package/dist/echo/src/observability/metrics/NoopMetricsProvider.d.ts +17 -0
  137. package/dist/echo/src/observability/metrics/PrometheusMetricsProvider.d.ts +39 -0
  138. package/dist/echo/src/observability/metrics/index.d.ts +3 -0
  139. package/dist/echo/src/observability/tracing/NoopTracer.d.ts +33 -0
  140. package/dist/echo/src/observability/tracing/Tracer.d.ts +75 -0
  141. package/dist/echo/src/observability/tracing/index.d.ts +2 -0
  142. package/dist/echo/src/providers/GenericProvider.d.ts +37 -18
  143. package/dist/echo/src/providers/GitHubProvider.d.ts +21 -12
  144. package/dist/echo/src/providers/LinearProvider.d.ts +27 -0
  145. package/dist/echo/src/providers/PaddleProvider.d.ts +31 -0
  146. package/dist/echo/src/providers/ShopifyProvider.d.ts +27 -0
  147. package/dist/echo/src/providers/SlackProvider.d.ts +27 -0
  148. package/dist/echo/src/providers/StripeProvider.d.ts +20 -12
  149. package/dist/echo/src/providers/TwilioProvider.d.ts +31 -0
  150. package/dist/echo/src/providers/base/BaseProvider.d.ts +87 -0
  151. package/dist/echo/src/providers/base/HeaderUtils.d.ts +34 -0
  152. package/dist/echo/src/providers/index.d.ts +14 -3
  153. package/dist/echo/src/receive/SignatureValidator.d.ts +33 -0
  154. package/dist/echo/src/receive/WebhookReceiver.d.ts +139 -21
  155. package/dist/echo/src/replay/WebhookReplayService.d.ts +35 -0
  156. package/dist/echo/src/replay/index.d.ts +1 -0
  157. package/dist/echo/src/resilience/CircuitBreaker.d.ts +117 -0
  158. package/dist/echo/src/resilience/index.d.ts +10 -0
  159. package/dist/echo/src/rotation/KeyRotationManager.d.ts +127 -0
  160. package/dist/echo/src/rotation/index.d.ts +10 -0
  161. package/dist/echo/src/send/WebhookDispatcher.d.ts +159 -15
  162. package/dist/echo/src/storage/MemoryWebhookStore.d.ts +14 -0
  163. package/dist/echo/src/storage/WebhookStore.d.ts +236 -0
  164. package/dist/echo/src/storage/index.d.ts +2 -0
  165. package/dist/echo/src/types.d.ts +656 -64
  166. package/dist/index.js +1327 -189
  167. package/dist/index.js.map +28 -10
  168. package/dist/photon/src/index.d.ts +69 -5
  169. package/dist/photon/src/middleware/binary.d.ts +12 -15
  170. package/dist/photon/src/middleware/htmx.d.ts +39 -0
  171. package/dist/photon/src/middleware/ratelimit.d.ts +157 -0
  172. package/dist/photon/src/openapi.d.ts +19 -0
  173. package/package.json +7 -5
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @gravito/core - OpenTelemetry SDK 集成
3
+ *
4
+ * 提供 OpenTelemetry 的初始化、配置與管理功能。
5
+ * 支援動態導入以實現可選依賴的優雅降級。
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { setupOpenTelemetry } from '@gravito/core'
10
+ *
11
+ * const sdk = await setupOpenTelemetry({
12
+ * serviceName: 'my-service',
13
+ * serviceVersion: '1.0.0',
14
+ * tracing: {
15
+ * enabled: true,
16
+ * exporter: 'jaeger',
17
+ * samplingRate: 0.1
18
+ * },
19
+ * metrics: {
20
+ * enabled: true,
21
+ * exporter: 'prometheus',
22
+ * prometheusPort: 9090
23
+ * }
24
+ * })
25
+ * ```
26
+ *
27
+ * @packageDocumentation
28
+ */
29
+ import { type MetricsConfig, type OpenTelemetryConfig, type OpenTelemetrySDK, type TracingConfig } from './types';
30
+ export type { MetricsConfig, OpenTelemetryConfig, OpenTelemetrySDK, TracingConfig };
31
+ /**
32
+ * 初始化 OpenTelemetry SDK
33
+ *
34
+ * @param userConfig - 用戶配置
35
+ * @returns OpenTelemetry SDK 實例或 null(如果禁用或初始化失敗)
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * // 基本用法
40
+ * const sdk = await setupOpenTelemetry({
41
+ * serviceName: 'my-service'
42
+ * })
43
+ *
44
+ * // 完整配置
45
+ * const sdk = await setupOpenTelemetry({
46
+ * serviceName: 'my-service',
47
+ * serviceVersion: '2.0.0',
48
+ * environment: 'production',
49
+ * tracing: {
50
+ * enabled: true,
51
+ * exporter: 'jaeger',
52
+ * jaegerEndpoint: 'http://jaeger:14268/api/traces',
53
+ * samplingRate: 0.1
54
+ * },
55
+ * metrics: {
56
+ * enabled: true,
57
+ * exporter: 'prometheus',
58
+ * prometheusPort: 9090
59
+ * }
60
+ * })
61
+ * ```
62
+ *
63
+ * @public
64
+ */
65
+ export declare function setupOpenTelemetry(userConfig?: OpenTelemetryConfig): Promise<OpenTelemetrySDK | null>;
66
+ /**
67
+ * 獲取全局 OpenTelemetry SDK 實例
68
+ *
69
+ * @returns SDK 實例或 null
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const sdk = getOpenTelemetrySDK()
74
+ * if (sdk) {
75
+ * console.log('Service:', sdk.serviceName)
76
+ * }
77
+ * ```
78
+ *
79
+ * @public
80
+ */
81
+ export declare function getOpenTelemetrySDK(): OpenTelemetrySDK | null;
82
+ /**
83
+ * 檢查 OpenTelemetry 是否已初始化
84
+ *
85
+ * @returns 初始化狀態
86
+ *
87
+ * @public
88
+ */
89
+ export declare function isOpenTelemetryInitialized(): boolean;
90
+ /**
91
+ * 關閉 OpenTelemetry SDK
92
+ *
93
+ * 應在應用程序關閉時調用,確保所有 spans 和 metrics 都被導出。
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * // 在應用程序退出前
98
+ * process.on('SIGTERM', async () => {
99
+ * await shutdownOpenTelemetry()
100
+ * process.exit(0)
101
+ * })
102
+ * ```
103
+ *
104
+ * @public
105
+ */
106
+ export declare function shutdownOpenTelemetry(): Promise<void>;
107
+ /**
108
+ * 重置 OpenTelemetry SDK(主要用於測試)
109
+ *
110
+ * 關閉現有 SDK 並重置所有狀態,允許重新初始化。
111
+ *
112
+ * @internal
113
+ */
114
+ export declare function resetOpenTelemetry(): Promise<void>;
115
+ /**
116
+ * 獲取 Tracer 實例
117
+ *
118
+ * @param name - Tracer 名稱(預設:@gravito/core)
119
+ * @param version - Tracer 版本
120
+ * @returns Tracer 實例
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const tracer = getTracer('my-module')
125
+ * const span = tracer.startSpan('my-operation')
126
+ * // ... 執行操作
127
+ * span.end()
128
+ * ```
129
+ *
130
+ * @public
131
+ */
132
+ export declare function getTracer(name?: string, version?: string): Promise<import("@opentelemetry/api").Tracer | {
133
+ startSpan: () => {
134
+ end: () => void;
135
+ setAttribute: () => void;
136
+ setStatus: () => void;
137
+ recordException: () => void;
138
+ addEvent: () => void;
139
+ isRecording: () => boolean;
140
+ };
141
+ startActiveSpan: (_name: string, fn: (span: any) => any) => any;
142
+ }>;
143
+ /**
144
+ * 獲取 Meter 實例
145
+ *
146
+ * @param name - Meter 名稱(預設:@gravito/core)
147
+ * @param version - Meter 版本
148
+ * @returns Meter 實例
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const meter = getMeter('my-module')
153
+ * const counter = meter.createCounter('my_counter')
154
+ * counter.add(1, { key: 'value' })
155
+ * ```
156
+ *
157
+ * @public
158
+ */
159
+ export declare function getMeter(name?: string, version?: string): Promise<import("@opentelemetry/api").Meter | {
160
+ createCounter: () => {
161
+ add: () => void;
162
+ };
163
+ createHistogram: () => {
164
+ record: () => void;
165
+ };
166
+ createUpDownCounter: () => {
167
+ add: () => void;
168
+ };
169
+ createObservableCounter: () => {
170
+ addCallback: () => void;
171
+ };
172
+ createObservableGauge: () => {
173
+ addCallback: () => void;
174
+ };
175
+ createObservableUpDownCounter: () => {
176
+ addCallback: () => void;
177
+ };
178
+ }>;
@@ -0,0 +1,182 @@
1
+ /**
2
+ * @gravito/core - OpenTelemetry 類型定義
3
+ *
4
+ * 定義 OpenTelemetry SDK 集成所需的類型與介面。
5
+ */
6
+ /**
7
+ * Tracing(追蹤)導出器類型
8
+ */
9
+ export type TracingExporter = 'jaeger' | 'otlp' | 'console' | 'none';
10
+ /**
11
+ * Metrics(指標)導出器類型
12
+ */
13
+ export type MetricsExporter = 'prometheus' | 'otlp' | 'console' | 'none';
14
+ /**
15
+ * Tracing 配置選項
16
+ */
17
+ export interface TracingConfig {
18
+ /** 是否啟用追蹤(預設:true) */
19
+ enabled?: boolean;
20
+ /** 導出器類型(預設:otlp) */
21
+ exporter?: TracingExporter;
22
+ /** Jaeger HTTP 端點(使用 jaeger 導出器時) */
23
+ jaegerEndpoint?: string;
24
+ /** OTLP 端點(使用 otlp 導出器時) */
25
+ otlpEndpoint?: string;
26
+ /** 採樣率(0-1,預設:1.0 = 100%) */
27
+ samplingRate?: number;
28
+ /** 是否啟用自動儀器化(預設:false) */
29
+ autoInstrumentation?: boolean;
30
+ /** Batch Span Processor 配置 */
31
+ batchConfig?: {
32
+ /** 最大批次大小(預設:512) */
33
+ maxExportBatchSize?: number;
34
+ /** 導出間隔(毫秒,預設:5000) */
35
+ scheduledDelayMillis?: number;
36
+ /** 導出超時(毫秒,預設:30000) */
37
+ exportTimeoutMillis?: number;
38
+ /** 最大隊列大小(預設:2048) */
39
+ maxQueueSize?: number;
40
+ };
41
+ }
42
+ /**
43
+ * Metrics 配置選項
44
+ */
45
+ export interface MetricsConfig {
46
+ /** 是否啟用指標(預設:true) */
47
+ enabled?: boolean;
48
+ /** 導出器類型(預設:otlp) */
49
+ exporter?: MetricsExporter;
50
+ /** Prometheus 端口(使用 prometheus 導出器時,預設:9090) */
51
+ prometheusPort?: number;
52
+ /** Prometheus 端點路徑(預設:/metrics) */
53
+ prometheusEndpoint?: string;
54
+ /** OTLP 端點(使用 otlp 導出器時) */
55
+ otlpEndpoint?: string;
56
+ /** 導出間隔(毫秒,預設:60000) */
57
+ exportIntervalMillis?: number;
58
+ }
59
+ /**
60
+ * OpenTelemetry SDK 完整配置
61
+ */
62
+ export interface OpenTelemetryConfig {
63
+ /** 是否啟用 OpenTelemetry(預設:true) */
64
+ enabled?: boolean;
65
+ /** 服務名稱(預設:gravito-app) */
66
+ serviceName?: string;
67
+ /** 服務版本(預設:1.0.0) */
68
+ serviceVersion?: string;
69
+ /** 環境名稱(預設:development) */
70
+ environment?: 'development' | 'staging' | 'production' | string;
71
+ /** 自定義 Resource Attributes */
72
+ resourceAttributes?: Record<string, string | number | boolean>;
73
+ /** Tracing 配置 */
74
+ tracing?: TracingConfig;
75
+ /** Metrics 配置 */
76
+ metrics?: MetricsConfig;
77
+ /** 是否在控制台輸出初始化日誌(預設:true) */
78
+ logInitialization?: boolean;
79
+ }
80
+ /**
81
+ * OpenTelemetry SDK 實例包裝
82
+ *
83
+ * 封裝初始化後的 SDK 實例與相關資源。
84
+ */
85
+ export interface OpenTelemetrySDK {
86
+ /** SDK 是否已啟動 */
87
+ isStarted: boolean;
88
+ /** SDK 是否已關閉 */
89
+ isShutdown: boolean;
90
+ /** 服務名稱 */
91
+ serviceName: string;
92
+ /** 服務版本 */
93
+ serviceVersion: string;
94
+ /** Tracer Provider(如果啟用追蹤) */
95
+ tracerProvider: unknown | null;
96
+ /** Meter Provider(如果啟用指標) */
97
+ meterProvider: unknown | null;
98
+ /** 原始配置 */
99
+ config: OpenTelemetryConfig;
100
+ /** 關閉 SDK */
101
+ shutdown: () => Promise<void>;
102
+ }
103
+ /**
104
+ * 支援的 OpenTelemetry 環境變數
105
+ *
106
+ * 參考:https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
107
+ */
108
+ export declare const OTEL_ENV_VARS: {
109
+ /** 服務名稱 */
110
+ readonly SERVICE_NAME: "OTEL_SERVICE_NAME";
111
+ /** 服務版本 */
112
+ readonly SERVICE_VERSION: "OTEL_SERVICE_VERSION";
113
+ /** 環境名稱 */
114
+ readonly DEPLOYMENT_ENVIRONMENT: "OTEL_DEPLOYMENT_ENVIRONMENT";
115
+ /** Resource Attributes */
116
+ readonly RESOURCE_ATTRIBUTES: "OTEL_RESOURCE_ATTRIBUTES";
117
+ /** OTLP 端點(通用) */
118
+ readonly OTLP_ENDPOINT: "OTEL_EXPORTER_OTLP_ENDPOINT";
119
+ /** OTLP Traces 端點 */
120
+ readonly OTLP_TRACES_ENDPOINT: "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT";
121
+ /** OTLP Metrics 端點 */
122
+ readonly OTLP_METRICS_ENDPOINT: "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT";
123
+ /** 採樣器類型 */
124
+ readonly TRACES_SAMPLER: "OTEL_TRACES_SAMPLER";
125
+ /** 採樣率參數 */
126
+ readonly TRACES_SAMPLER_ARG: "OTEL_TRACES_SAMPLER_ARG";
127
+ /** 是否啟用 OpenTelemetry */
128
+ readonly GRAVITO_ENABLED: "GRAVITO_OTEL_ENABLED";
129
+ /** Jaeger 端點 */
130
+ readonly JAEGER_ENDPOINT: "JAEGER_ENDPOINT";
131
+ /** Prometheus 端口 */
132
+ readonly PROMETHEUS_PORT: "PROMETHEUS_PORT";
133
+ };
134
+ /**
135
+ * 完整的 BatchConfig 類型(所有屬性必填)
136
+ */
137
+ export interface BatchConfigRequired {
138
+ maxExportBatchSize: number;
139
+ scheduledDelayMillis: number;
140
+ exportTimeoutMillis: number;
141
+ maxQueueSize: number;
142
+ }
143
+ /**
144
+ * 完整的 TracingConfig 類型(所有屬性必填)
145
+ */
146
+ export interface TracingConfigRequired {
147
+ enabled: boolean;
148
+ exporter: TracingExporter;
149
+ jaegerEndpoint: string;
150
+ otlpEndpoint: string;
151
+ samplingRate: number;
152
+ autoInstrumentation: boolean;
153
+ batchConfig: BatchConfigRequired;
154
+ }
155
+ /**
156
+ * 完整的 MetricsConfig 類型(所有屬性必填)
157
+ */
158
+ export interface MetricsConfigRequired {
159
+ enabled: boolean;
160
+ exporter: MetricsExporter;
161
+ prometheusPort: number;
162
+ prometheusEndpoint: string;
163
+ otlpEndpoint: string;
164
+ exportIntervalMillis: number;
165
+ }
166
+ /**
167
+ * 完整的 OpenTelemetryConfig 類型(所有屬性必填)
168
+ */
169
+ export interface OpenTelemetryConfigRequired {
170
+ enabled: boolean;
171
+ serviceName: string;
172
+ serviceVersion: string;
173
+ environment: 'development' | 'staging' | 'production';
174
+ resourceAttributes: Record<string, string | number | boolean>;
175
+ tracing: TracingConfigRequired;
176
+ metrics: MetricsConfigRequired;
177
+ logInitialization: boolean;
178
+ }
179
+ /**
180
+ * 預設配置值
181
+ */
182
+ export declare const DEFAULT_CONFIG: OpenTelemetryConfigRequired;
@@ -0,0 +1,316 @@
1
+ /**
2
+ * @gravito/core - Dead Letter Queue Manager
3
+ *
4
+ * 管理失敗事件的持久化存儲
5
+ * 支持 CRUD、重新入隊、批量重試和統計功能
6
+ */
7
+ import type { ConnectionContract } from '@gravito/atlas';
8
+ import type { EventOptions } from '../events/EventOptions';
9
+ import type { RetryPolicy } from './RetryPolicy';
10
+ /**
11
+ * DLQ 事件的數據庫記錄
12
+ */
13
+ export interface DLQRecord {
14
+ id: number;
15
+ dlq_id: string;
16
+ event_name: string;
17
+ event_payload: unknown;
18
+ event_options: unknown;
19
+ attempt_count: number;
20
+ max_retries: number;
21
+ next_retry_at: string | null;
22
+ last_error: unknown;
23
+ status: 'pending' | 'requeued' | 'resolved' | 'abandoned';
24
+ resolution_notes: string | null;
25
+ failed_at: string;
26
+ created_at: string;
27
+ updated_at: string;
28
+ }
29
+ /**
30
+ * DLQ 事件查詢過濾選項(for DeadLetterQueueManager)
31
+ */
32
+ export interface DLQManagerFilter {
33
+ /** 按事件名稱篩選 */
34
+ eventName?: string;
35
+ /** 按狀態篩選 */
36
+ status?: 'pending' | 'requeued' | 'resolved' | 'abandoned';
37
+ /** 開始時間 */
38
+ from?: Date;
39
+ /** 結束時間 */
40
+ to?: Date;
41
+ /** 結果數量限制 */
42
+ limit?: number;
43
+ /** 分頁偏移 */
44
+ offset?: number;
45
+ }
46
+ /**
47
+ * DLQ 統計信息
48
+ */
49
+ export interface DLQStats {
50
+ /** 事件總數 */
51
+ total: number;
52
+ /** 按事件名稱的統計 */
53
+ byEvent: Record<string, number>;
54
+ /** 按狀態的統計 */
55
+ byStatus: Record<string, number>;
56
+ }
57
+ /**
58
+ * Dead Letter Queue 管理器
59
+ *
60
+ * 負責管理失敗事件的持久化存儲,支持:
61
+ * - 自動將失敗事件移至 DLQ
62
+ * - 查詢和篩選 DLQ 事件
63
+ * - 重新入隊單個或批量事件
64
+ * - 標記事件為已解決或已放棄
65
+ * - 查看統計信息
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const db = container.make('db') as ConnectionContract
70
+ * const dlqManager = new DeadLetterQueueManager(db)
71
+ *
72
+ * // 將失敗事件移至 DLQ
73
+ * const dlqId = await dlqManager.moveToDlq(
74
+ * 'order:created',
75
+ * { orderId: '123' },
76
+ * { retry: {...} },
77
+ * error,
78
+ * 3
79
+ * )
80
+ *
81
+ * // 查詢 DLQ 事件
82
+ * const events = await dlqManager.list({ event: 'order:created', status: 'pending' })
83
+ *
84
+ * // 重新入隊
85
+ * await dlqManager.requeue(dlqId)
86
+ *
87
+ * // 批量重試
88
+ * const result = await dlqManager.retryBatch({ eventName: 'order:created' })
89
+ *
90
+ * // 統計
91
+ * const stats = await dlqManager.getStats()
92
+ * ```
93
+ */
94
+ export declare class DeadLetterQueueManager {
95
+ private db;
96
+ private retryEngine;
97
+ constructor(db: ConnectionContract);
98
+ /**
99
+ * 將失敗事件移至死信隊列
100
+ *
101
+ * @param eventName - 事件名稱
102
+ * @param payload - 事件負載
103
+ * @param options - 事件選項
104
+ * @param error - 導致失敗的錯誤
105
+ * @param attemptCount - 當前嘗試次數
106
+ * @param retryPolicy - 重試策略配置
107
+ * @returns DLQ 記錄的 UUID
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const dlqId = await dlqManager.moveToDlq(
112
+ * 'order:created',
113
+ * { orderId: 'ORD-123' },
114
+ * { retry: { maxRetries: 3, backoff: 'exponential' } },
115
+ * new Error('Service unavailable'),
116
+ * 3,
117
+ * { maxRetries: 3, backoff: 'exponential', initialDelayMs: 1000, maxDelayMs: 30000 }
118
+ * )
119
+ * ```
120
+ */
121
+ moveToDlq(eventName: string, payload: unknown, options: EventOptions, error: Error, attemptCount: number, retryPolicy?: RetryPolicy): Promise<string>;
122
+ /**
123
+ * 按 DLQ ID 獲取單個事件
124
+ *
125
+ * @param dlqId - DLQ 事件的 UUID
126
+ * @returns DLQ 記錄,若不存在則返回 undefined
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const event = await dlqManager.getById('550e8400-e29b-41d4-a716-446655440000')
131
+ * if (event) {
132
+ * console.log(event.event_name, event.status)
133
+ * }
134
+ * ```
135
+ */
136
+ getById(dlqId: string): Promise<DLQRecord | undefined>;
137
+ /**
138
+ * 查詢 DLQ 事件
139
+ *
140
+ * @param filter - 查詢過濾條件
141
+ * @returns DLQ 記錄列表(按失敗時間倒序)
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * // 查詢特定事件的待處理事件
146
+ * const events = await dlqManager.list({
147
+ * eventName: 'order:created',
148
+ * status: 'pending',
149
+ * limit: 50
150
+ * })
151
+ *
152
+ * // 查詢時間範圍內的所有失敗事件
153
+ * const eventsInRange = await dlqManager.list({
154
+ * from: new Date('2026-02-01'),
155
+ * to: new Date('2026-02-03'),
156
+ * limit: 100
157
+ * })
158
+ * ```
159
+ */
160
+ list(filter?: DLQManagerFilter): Promise<DLQRecord[]>;
161
+ /**
162
+ * 重新入隊單個 DLQ 事件
163
+ *
164
+ * 重新入隊不會自動派發事件,而是標記狀態為 'requeued'
165
+ * 實際的事件派發應由調用者負責處理
166
+ *
167
+ * @param dlqId - DLQ 事件的 UUID
168
+ * @throws 如果事件不存在
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const event = await dlqManager.getById(dlqId)
173
+ * if (event) {
174
+ * // 由調用者決定如何派發事件
175
+ * await eventSystem.doActionAsync(
176
+ * event.event_name,
177
+ * event.event_payload,
178
+ * event.event_options
179
+ * )
180
+ *
181
+ * // 標記為已重新入隊
182
+ * await dlqManager.requeue(dlqId)
183
+ * }
184
+ * ```
185
+ */
186
+ requeue(dlqId: string): Promise<void>;
187
+ /**
188
+ * 批量重新入隊 DLQ 事件
189
+ *
190
+ * @param filter - 查詢過濾條件
191
+ * @returns 包含處理結果的統計對象
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * const result = await dlqManager.retryBatch({
196
+ * eventName: 'order:created',
197
+ * status: 'pending'
198
+ * })
199
+ *
200
+ * console.log(`Success: ${result.succeeded}, Failed: ${result.failed}`)
201
+ * ```
202
+ */
203
+ retryBatch(filter?: DLQManagerFilter): Promise<{
204
+ total: number;
205
+ succeeded: number;
206
+ failed: number;
207
+ }>;
208
+ /**
209
+ * 標記 DLQ 事件為已解決
210
+ *
211
+ * @param dlqId - DLQ 事件的 UUID
212
+ * @param notes - 解決說明
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * await dlqManager.resolve(dlqId, 'Manual fix applied: Database issue resolved')
217
+ * ```
218
+ */
219
+ resolve(dlqId: string, notes?: string): Promise<void>;
220
+ /**
221
+ * 放棄 DLQ 事件(不再重試)
222
+ *
223
+ * @param dlqId - DLQ 事件的 UUID
224
+ * @param reason - 放棄原因
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * await dlqManager.abandon(dlqId, 'Data corrupted, cannot recover')
229
+ * ```
230
+ */
231
+ abandon(dlqId: string, reason?: string): Promise<void>;
232
+ /**
233
+ * 更新 DLQ 事件狀態
234
+ *
235
+ * @param dlqId - DLQ 事件的 UUID
236
+ * @param status - 新狀態
237
+ * @param notes - 狀態變更說明
238
+ * @throws 如果事件不存在
239
+ *
240
+ * @internal
241
+ */
242
+ updateStatus(dlqId: string, status: 'pending' | 'requeued' | 'resolved' | 'abandoned', notes?: string): Promise<void>;
243
+ /**
244
+ * 刪除單個 DLQ 事件
245
+ *
246
+ * @param dlqId - DLQ 事件的 UUID
247
+ * @returns true 如果刪除成功,false 如果事件不存在
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * const deleted = await dlqManager.deleteEntry(dlqId)
252
+ * if (deleted) {
253
+ * console.log('Event deleted')
254
+ * }
255
+ * ```
256
+ */
257
+ deleteEntry(dlqId: string): Promise<boolean>;
258
+ /**
259
+ * 刪除多個 DLQ 事件
260
+ *
261
+ * @param dlqIds - DLQ 事件 UUID 列表
262
+ * @returns 刪除的事件數量
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * const deletedCount = await dlqManager.deleteEntries([id1, id2, id3])
267
+ * ```
268
+ */
269
+ deleteEntries(dlqIds: string[]): Promise<number>;
270
+ /**
271
+ * 獲取 DLQ 統計信息
272
+ *
273
+ * @returns 包含總數、按事件名稱和狀態的統計信息
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * const stats = await dlqManager.getStats()
278
+ *
279
+ * console.log(`Total events: ${stats.total}`)
280
+ * console.log('By event:', stats.byEvent)
281
+ * // Output: { 'order:created': 145, 'payment:succeeded': 23 }
282
+ *
283
+ * console.log('By status:', stats.byStatus)
284
+ * // Output: { pending: 120, requeued: 15, resolved: 8, abandoned: 2 }
285
+ * ```
286
+ */
287
+ getStats(): Promise<DLQStats>;
288
+ /**
289
+ * 獲取某個事件名稱的 DLQ 事件數
290
+ *
291
+ * @param eventName - 事件名稱
292
+ * @returns 事件數量
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const count = await dlqManager.getCountByEvent('order:created')
297
+ * ```
298
+ */
299
+ getCountByEvent(eventName: string): Promise<number>;
300
+ /**
301
+ * 清空所有 DLQ 事件(慎用!)
302
+ *
303
+ * @param includeResolved - 是否包含已解決的事件
304
+ * @returns 清空的事件數量
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * // 只清空待處理的事件
309
+ * const count = await dlqManager.clear(false)
310
+ *
311
+ * // 清空所有事件(包括已解決和已放棄)
312
+ * const countAll = await dlqManager.clear(true)
313
+ * ```
314
+ */
315
+ clear(includeResolved?: boolean): Promise<number>;
316
+ }