@ts-cloud/core 0.2.3 → 0.2.5

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 (226) hide show
  1. package/dist/advanced-features.test.d.ts +1 -0
  2. package/dist/aws/cloudformation.d.ts +136 -0
  3. package/dist/aws/cloudfront.d.ts +45 -0
  4. package/dist/aws/credentials.d.ts +77 -0
  5. package/dist/aws/credentials.test.d.ts +4 -0
  6. package/dist/aws/index.d.ts +10 -0
  7. package/dist/aws/s3.d.ts +256 -0
  8. package/dist/aws/s3.test.d.ts +4 -0
  9. package/dist/aws/signature.d.ts +142 -0
  10. package/dist/aws/signature.test.d.ts +4 -0
  11. package/dist/backup/disaster-recovery.d.ts +140 -0
  12. package/dist/backup/disaster-recovery.test.d.ts +1 -0
  13. package/dist/backup/index.d.ts +8 -0
  14. package/dist/backup/manager.d.ts +172 -0
  15. package/dist/backup/manager.test.d.ts +1 -0
  16. package/dist/cicd/circleci.d.ts +50 -0
  17. package/dist/cicd/github-actions.d.ts +62 -0
  18. package/dist/cicd/gitlab-ci.d.ts +50 -0
  19. package/dist/cicd/index.d.ts +7 -0
  20. package/dist/cli/history.d.ts +137 -0
  21. package/dist/cli/index.d.ts +9 -0
  22. package/dist/cli/progress.d.ts +193 -0
  23. package/dist/cli/repl.d.ts +148 -0
  24. package/dist/cli/suggestions.d.ts +74 -0
  25. package/dist/cli/table.d.ts +73 -0
  26. package/dist/cli/table.test.d.ts +1 -0
  27. package/dist/cloudformation/builder.d.ts +93 -0
  28. package/dist/cloudformation/builder.test.d.ts +4 -0
  29. package/dist/cloudformation/builders/api-gateway.d.ts +30 -0
  30. package/dist/cloudformation/builders/cache.d.ts +35 -0
  31. package/dist/cloudformation/builders/cdn.d.ts +34 -0
  32. package/dist/cloudformation/builders/compute.d.ts +68 -0
  33. package/dist/cloudformation/builders/database.d.ts +61 -0
  34. package/dist/cloudformation/builders/functions.d.ts +32 -0
  35. package/dist/cloudformation/builders/messaging.d.ts +17 -0
  36. package/dist/cloudformation/builders/monitoring.d.ts +39 -0
  37. package/dist/cloudformation/builders/network.d.ts +14 -0
  38. package/dist/cloudformation/builders/queue.d.ts +16 -0
  39. package/dist/cloudformation/builders/security.d.ts +31 -0
  40. package/dist/cloudformation/builders/storage.d.ts +36 -0
  41. package/dist/cloudformation/index.d.ts +10 -0
  42. package/dist/cloudformation/types.d.ts +200 -0
  43. package/dist/compliance/aws-config.d.ts +175 -0
  44. package/dist/compliance/cloudtrail.d.ts +132 -0
  45. package/dist/compliance/compliance.test.d.ts +1 -0
  46. package/dist/compliance/guardduty.d.ts +176 -0
  47. package/dist/compliance/index.d.ts +12 -0
  48. package/dist/compliance/security-hub.d.ts +178 -0
  49. package/dist/containers/build-optimization.d.ts +155 -0
  50. package/dist/containers/containers.test.d.ts +1 -0
  51. package/dist/containers/image-scanning.d.ts +144 -0
  52. package/dist/containers/index.d.ts +8 -0
  53. package/dist/containers/registry.d.ts +129 -0
  54. package/dist/containers/service-mesh.d.ts +254 -0
  55. package/dist/database/database.test.d.ts +1 -0
  56. package/dist/database/index.d.ts +8 -0
  57. package/dist/database/migrations.d.ts +153 -0
  58. package/dist/database/performance.d.ts +219 -0
  59. package/dist/database/replicas.d.ts +218 -0
  60. package/dist/database/users.d.ts +165 -0
  61. package/dist/dependency-graph.d.ts +37 -0
  62. package/dist/deployment/ab-testing.d.ts +165 -0
  63. package/dist/deployment/blue-green.d.ts +140 -0
  64. package/dist/deployment/canary.d.ts +165 -0
  65. package/dist/deployment/deployment.test.d.ts +1 -0
  66. package/dist/deployment/index.d.ts +12 -0
  67. package/dist/deployment/progressive.d.ts +50 -0
  68. package/dist/dns/dns.test.d.ts +1 -0
  69. package/dist/dns/dnssec.d.ts +120 -0
  70. package/dist/dns/index.d.ts +7 -0
  71. package/dist/dns/resolver.d.ts +216 -0
  72. package/dist/dns/routing.d.ts +277 -0
  73. package/dist/email/advanced/analytics.d.ts +107 -0
  74. package/dist/email/advanced/index.d.ts +10 -0
  75. package/dist/email/advanced/rules.d.ts +131 -0
  76. package/dist/email/advanced/scheduling.d.ts +81 -0
  77. package/dist/email/advanced/search.d.ts +91 -0
  78. package/dist/email/advanced/shared-mailboxes.d.ts +109 -0
  79. package/dist/email/advanced/templates.d.ts +95 -0
  80. package/dist/email/advanced/threading.d.ts +65 -0
  81. package/dist/email/analytics.d.ts +189 -0
  82. package/dist/email/bounce-handling.d.ts +171 -0
  83. package/dist/email/email.test.d.ts +1 -0
  84. package/dist/email/handlers/__tests__/inbound.test.d.ts +1 -0
  85. package/dist/email/handlers/__tests__/outbound.test.d.ts +1 -0
  86. package/dist/email/handlers/converter.d.ts +11 -0
  87. package/dist/email/handlers/feedback.d.ts +11 -0
  88. package/dist/email/handlers/inbound.d.ts +13 -0
  89. package/dist/email/handlers/outbound.d.ts +13 -0
  90. package/dist/email/index.d.ts +10 -0
  91. package/dist/email/reputation.d.ts +133 -0
  92. package/dist/email/templates.d.ts +124 -0
  93. package/dist/errors/index.d.ts +177 -0
  94. package/dist/errors/index.test.d.ts +4 -0
  95. package/dist/health-checks/index.d.ts +35 -0
  96. package/dist/index.d.ts +15 -256
  97. package/dist/index.js +228 -80
  98. package/dist/intrinsic-functions.d.ts +77 -0
  99. package/dist/lambda/concurrency.d.ts +146 -0
  100. package/dist/lambda/destinations.d.ts +141 -0
  101. package/dist/lambda/dlq.d.ts +160 -0
  102. package/dist/lambda/index.d.ts +10 -0
  103. package/dist/lambda/lambda.test.d.ts +1 -0
  104. package/dist/lambda/layers.d.ts +117 -0
  105. package/dist/lambda/versions.d.ts +145 -0
  106. package/dist/lambda/vpc.d.ts +164 -0
  107. package/dist/local/config.d.ts +44 -0
  108. package/dist/local/index.d.ts +5 -0
  109. package/dist/local/mock-aws.d.ts +69 -0
  110. package/dist/modules/ai.d.ts +108 -0
  111. package/dist/modules/api.d.ts +157 -0
  112. package/dist/modules/auth.d.ts +262 -0
  113. package/dist/modules/cache.d.ts +108 -0
  114. package/dist/modules/cdn.d.ts +305 -0
  115. package/dist/modules/communication.d.ts +117 -0
  116. package/dist/modules/compute.d.ts +1376 -0
  117. package/dist/modules/database.d.ts +144 -0
  118. package/dist/modules/deployment.d.ts +372 -0
  119. package/dist/modules/dns.d.ts +143 -0
  120. package/dist/modules/email.d.ts +314 -0
  121. package/dist/modules/filesystem.d.ts +132 -0
  122. package/dist/modules/index.d.ts +31 -0
  123. package/dist/modules/messaging.d.ts +210 -0
  124. package/dist/modules/monitoring.d.ts +574 -0
  125. package/dist/modules/network.d.ts +148 -0
  126. package/dist/modules/parameter-store.d.ts +143 -0
  127. package/dist/modules/permissions.d.ts +245 -0
  128. package/dist/modules/phone.d.ts +125 -0
  129. package/dist/modules/queue.d.ts +411 -0
  130. package/dist/modules/redirects.d.ts +140 -0
  131. package/dist/modules/registry.d.ts +189 -0
  132. package/dist/modules/search.d.ts +135 -0
  133. package/dist/modules/secrets.d.ts +149 -0
  134. package/dist/modules/security.d.ts +219 -0
  135. package/dist/modules/sms.d.ts +130 -0
  136. package/dist/modules/storage.d.ts +344 -0
  137. package/dist/modules/workflow.d.ts +288 -0
  138. package/dist/multi-account/config.d.ts +166 -0
  139. package/dist/multi-account/index.d.ts +6 -0
  140. package/dist/multi-account/manager.d.ts +181 -0
  141. package/dist/multi-region/cross-region.d.ts +204 -0
  142. package/dist/multi-region/index.d.ts +7 -0
  143. package/dist/multi-region/manager.d.ts +136 -0
  144. package/dist/multi-region/regions.d.ts +98 -0
  145. package/dist/network-security/index.d.ts +55 -0
  146. package/dist/observability/index.d.ts +8 -0
  147. package/dist/observability/logs.d.ts +213 -0
  148. package/dist/observability/metrics.d.ts +187 -0
  149. package/dist/observability/observability.test.d.ts +1 -0
  150. package/dist/observability/synthetics.d.ts +189 -0
  151. package/dist/observability/xray.d.ts +193 -0
  152. package/dist/phone/advanced/analytics.d.ts +83 -0
  153. package/dist/phone/advanced/callbacks.d.ts +67 -0
  154. package/dist/phone/advanced/index.d.ts +7 -0
  155. package/dist/phone/advanced/ivr-builder.d.ts +130 -0
  156. package/dist/phone/advanced/recording.d.ts +62 -0
  157. package/dist/phone/handlers/__tests__/incoming-call.test.d.ts +1 -0
  158. package/dist/phone/handlers/incoming-call.d.ts +10 -0
  159. package/dist/phone/handlers/missed-call.d.ts +9 -0
  160. package/dist/phone/handlers/voicemail.d.ts +10 -0
  161. package/dist/phone/index.d.ts +5 -0
  162. package/dist/presets/api-backend.d.ts +11 -0
  163. package/dist/presets/data-pipeline.d.ts +11 -0
  164. package/dist/presets/extend.d.ts +194 -0
  165. package/dist/presets/extend.test.d.ts +4 -0
  166. package/dist/presets/fullstack-app.d.ts +12 -0
  167. package/dist/presets/index.d.ts +13 -0
  168. package/dist/presets/jamstack.d.ts +12 -0
  169. package/dist/presets/microservices.d.ts +18 -0
  170. package/dist/presets/ml-api.d.ts +13 -0
  171. package/dist/presets/nodejs-server.d.ts +14 -0
  172. package/dist/presets/nodejs-serverless.d.ts +14 -0
  173. package/dist/presets/realtime-app.d.ts +11 -0
  174. package/dist/presets/static-site.d.ts +12 -0
  175. package/dist/presets/traditional-web-app.d.ts +16 -0
  176. package/dist/presets/wordpress.d.ts +12 -0
  177. package/dist/preview/github.d.ts +32 -0
  178. package/dist/preview/github.test.d.ts +1 -0
  179. package/dist/preview/index.d.ts +10 -0
  180. package/dist/preview/manager.d.ts +101 -0
  181. package/dist/preview/manager.test.d.ts +1 -0
  182. package/dist/preview/notifications.d.ts +89 -0
  183. package/dist/preview/notifications.test.d.ts +1 -0
  184. package/dist/queue/batch-processing.d.ts +138 -0
  185. package/dist/queue/dlq-monitoring.d.ts +143 -0
  186. package/dist/queue/fifo.d.ts +131 -0
  187. package/dist/queue/index.d.ts +8 -0
  188. package/dist/queue/management.d.ts +162 -0
  189. package/dist/queue/queue.test.d.ts +1 -0
  190. package/dist/resource-mgmt/index.d.ts +44 -0
  191. package/dist/resource-naming.d.ts +26 -0
  192. package/dist/s3/index.d.ts +227 -0
  193. package/dist/schema/index.d.ts +12 -0
  194. package/dist/security/certificate-manager.d.ts +184 -0
  195. package/dist/security/index.d.ts +8 -0
  196. package/dist/security/scanning.d.ts +196 -0
  197. package/dist/security/secrets-manager.d.ts +204 -0
  198. package/dist/security/secrets-rotation.d.ts +167 -0
  199. package/dist/security/security.test.d.ts +1 -0
  200. package/dist/sms/advanced/ab-testing.d.ts +74 -0
  201. package/dist/sms/advanced/analytics.d.ts +75 -0
  202. package/dist/sms/advanced/campaigns.d.ts +96 -0
  203. package/dist/sms/advanced/chatbot.d.ts +67 -0
  204. package/dist/sms/advanced/index.d.ts +9 -0
  205. package/dist/sms/advanced/link-tracking.d.ts +60 -0
  206. package/dist/sms/advanced/mms.d.ts +60 -0
  207. package/dist/sms/handlers/__tests__/send.test.d.ts +1 -0
  208. package/dist/sms/handlers/delivery-status.d.ts +10 -0
  209. package/dist/sms/handlers/receive.d.ts +10 -0
  210. package/dist/sms/handlers/send.d.ts +10 -0
  211. package/dist/sms/index.d.ts +5 -0
  212. package/dist/stack-diff.d.ts +38 -0
  213. package/dist/static-site/index.d.ts +49 -0
  214. package/dist/template-builder.d.ts +42 -0
  215. package/dist/template-validator.d.ts +28 -0
  216. package/dist/types.d.ts +2514 -0
  217. package/dist/utils/cache.d.ts +117 -0
  218. package/dist/utils/diff.d.ts +52 -0
  219. package/dist/utils/hash.d.ts +73 -0
  220. package/dist/utils/index.d.ts +7 -0
  221. package/dist/utils/parallel.d.ts +78 -0
  222. package/dist/validators/credentials.d.ts +30 -0
  223. package/dist/validators/credentials.test.d.ts +4 -0
  224. package/dist/validators/quotas.d.ts +64 -0
  225. package/dist/validators/quotas.test.d.ts +4 -0
  226. package/package.json +2 -2
@@ -0,0 +1,193 @@
1
+ /**
2
+ * AWS X-Ray Integration
3
+ * Distributed tracing for microservices and serverless applications
4
+ */
5
+ export interface XRayConfig {
6
+ id: string;
7
+ name: string;
8
+ serviceName: string;
9
+ samplingRate: number;
10
+ enableActiveTracing: boolean;
11
+ segmentDocuments?: SegmentDocument[];
12
+ }
13
+ export interface SegmentDocument {
14
+ id: string;
15
+ name: string;
16
+ startTime: number;
17
+ endTime?: number;
18
+ subsegments?: SubSegment[];
19
+ annotations?: Record<string, string | number | boolean>;
20
+ metadata?: Record<string, any>;
21
+ http?: HttpData;
22
+ aws?: AWSData;
23
+ error?: boolean;
24
+ fault?: boolean;
25
+ throttle?: boolean;
26
+ }
27
+ export interface SubSegment {
28
+ id: string;
29
+ name: string;
30
+ startTime: number;
31
+ endTime?: number;
32
+ namespace?: 'aws' | 'remote';
33
+ http?: HttpData;
34
+ sql?: SqlData;
35
+ annotations?: Record<string, string | number | boolean>;
36
+ metadata?: Record<string, any>;
37
+ }
38
+ export interface HttpData {
39
+ request?: {
40
+ method?: string;
41
+ url?: string;
42
+ userAgent?: string;
43
+ clientIp?: string;
44
+ };
45
+ response?: {
46
+ status?: number;
47
+ contentLength?: number;
48
+ };
49
+ }
50
+ export interface AWSData {
51
+ accountId?: string;
52
+ operation?: string;
53
+ region?: string;
54
+ requestId?: string;
55
+ queueUrl?: string;
56
+ tableName?: string;
57
+ }
58
+ export interface SqlData {
59
+ url?: string;
60
+ preparation?: 'statement' | 'call';
61
+ databaseType?: string;
62
+ databaseVersion?: string;
63
+ driverVersion?: string;
64
+ user?: string;
65
+ sanitizedQuery?: string;
66
+ }
67
+ export interface SamplingRule {
68
+ id: string;
69
+ ruleName: string;
70
+ priority: number;
71
+ fixedRate: number;
72
+ reservoirSize: number;
73
+ serviceName: string;
74
+ serviceType: string;
75
+ host: string;
76
+ httpMethod: string;
77
+ urlPath: string;
78
+ version: number;
79
+ }
80
+ /**
81
+ * X-Ray manager
82
+ */
83
+ export declare class XRayManager {
84
+ private configs;
85
+ private samplingRules;
86
+ private configCounter;
87
+ private ruleCounter;
88
+ /**
89
+ * Create X-Ray configuration
90
+ */
91
+ createConfig(config: Omit<XRayConfig, 'id'>): XRayConfig;
92
+ /**
93
+ * Create Lambda X-Ray configuration
94
+ */
95
+ createLambdaConfig(options: {
96
+ functionName: string;
97
+ samplingRate?: number;
98
+ }): XRayConfig;
99
+ /**
100
+ * Create ECS X-Ray configuration
101
+ */
102
+ createECSConfig(options: {
103
+ serviceName: string;
104
+ clusterName: string;
105
+ samplingRate?: number;
106
+ }): XRayConfig;
107
+ /**
108
+ * Create API Gateway X-Ray configuration
109
+ */
110
+ createAPIGatewayConfig(options: {
111
+ apiName: string;
112
+ stage: string;
113
+ samplingRate?: number;
114
+ }): XRayConfig;
115
+ /**
116
+ * Create sampling rule
117
+ */
118
+ createSamplingRule(rule: Omit<SamplingRule, 'id'>): SamplingRule;
119
+ /**
120
+ * Create high-priority sampling rule (always trace)
121
+ */
122
+ createHighPrioritySamplingRule(options: {
123
+ ruleName: string;
124
+ serviceName: string;
125
+ urlPath: string;
126
+ }): SamplingRule;
127
+ /**
128
+ * Create error sampling rule (trace all errors)
129
+ */
130
+ createErrorSamplingRule(serviceName: string): SamplingRule;
131
+ /**
132
+ * Create default sampling rule
133
+ */
134
+ createDefaultSamplingRule(serviceName: string, samplingRate?: number): SamplingRule;
135
+ /**
136
+ * Get config
137
+ */
138
+ getConfig(id: string): XRayConfig | undefined;
139
+ /**
140
+ * List configs
141
+ */
142
+ listConfigs(): XRayConfig[];
143
+ /**
144
+ * Get sampling rule
145
+ */
146
+ getSamplingRule(id: string): SamplingRule | undefined;
147
+ /**
148
+ * List sampling rules
149
+ */
150
+ listSamplingRules(): SamplingRule[];
151
+ /**
152
+ * Generate CloudFormation for Lambda X-Ray
153
+ */
154
+ generateLambdaXRayCF(config: XRayConfig): any;
155
+ /**
156
+ * Generate CloudFormation for API Gateway X-Ray
157
+ */
158
+ generateAPIGatewayXRayCF(config: XRayConfig): any;
159
+ /**
160
+ * Generate ECS task definition with X-Ray sidecar
161
+ */
162
+ generateECSXRaySidecarCF(): any;
163
+ /**
164
+ * Generate sampling rules CloudFormation
165
+ */
166
+ generateSamplingRuleCF(rule: SamplingRule): any;
167
+ /**
168
+ * Create a distributed trace
169
+ */
170
+ createTrace(traceId: string, spans: Array<{
171
+ spanId: string;
172
+ name: string;
173
+ duration: number;
174
+ tags: Record<string, any>;
175
+ }>): {
176
+ id: string;
177
+ traceId: string;
178
+ spans: Array<{
179
+ spanId: string;
180
+ name: string;
181
+ duration: number;
182
+ tags: Record<string, any>;
183
+ }>;
184
+ };
185
+ /**
186
+ * Clear all data
187
+ */
188
+ clear(): void;
189
+ }
190
+ /**
191
+ * Global X-Ray manager instance
192
+ */
193
+ export declare const xrayManager: XRayManager;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Call Analytics and Reporting
3
+ *
4
+ * Provides call metrics, reporting, and insights
5
+ */
6
+ export interface CallMetrics {
7
+ period: string;
8
+ totalCalls: number;
9
+ answeredCalls: number;
10
+ missedCalls: number;
11
+ abandonedCalls: number;
12
+ voicemails: number;
13
+ averageWaitTime: number;
14
+ averageHandleTime: number;
15
+ averageTalkTime: number;
16
+ serviceLevel: number;
17
+ abandonRate: number;
18
+ answerRate: number;
19
+ }
20
+ export interface AgentMetrics {
21
+ agentId: string;
22
+ agentName: string;
23
+ callsHandled: number;
24
+ averageHandleTime: number;
25
+ averageTalkTime: number;
26
+ averageHoldTime: number;
27
+ occupancy: number;
28
+ availability: number;
29
+ }
30
+ export interface QueueMetrics {
31
+ queueId: string;
32
+ queueName: string;
33
+ callsInQueue: number;
34
+ oldestCallWaitTime: number;
35
+ averageWaitTime: number;
36
+ agentsAvailable: number;
37
+ agentsOnCall: number;
38
+ }
39
+ export interface CallInsight {
40
+ callId: string;
41
+ sentiment: 'positive' | 'neutral' | 'negative';
42
+ topics: string[];
43
+ keywords: string[];
44
+ issues: string[];
45
+ resolution: boolean;
46
+ customerSatisfaction?: number;
47
+ }
48
+ /**
49
+ * Call Analytics Module
50
+ */
51
+ export declare class CallAnalytics {
52
+ /**
53
+ * Lambda code for aggregating call metrics
54
+ */
55
+ static MetricsAggregatorCode: string;
56
+ /**
57
+ * Lambda code for real-time queue metrics
58
+ */
59
+ static QueueMetricsCode: string;
60
+ /**
61
+ * Create metrics DynamoDB table
62
+ */
63
+ static createMetricsTable(config: {
64
+ slug: string;
65
+ }): Record<string, any>;
66
+ /**
67
+ * Create metrics aggregator Lambda
68
+ */
69
+ static createMetricsAggregatorLambda(config: {
70
+ slug: string;
71
+ roleArn: string;
72
+ callLogTable: string;
73
+ metricsTable: string;
74
+ }): Record<string, any>;
75
+ /**
76
+ * Create EventBridge rule for hourly metrics
77
+ */
78
+ static createMetricsSchedule(config: {
79
+ slug: string;
80
+ lambdaArn: string;
81
+ }): Record<string, any>;
82
+ }
83
+ export default CallAnalytics;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Callback Requests and Queue Management
3
+ *
4
+ * Provides callback scheduling and queue management
5
+ */
6
+ export interface CallbackRequest {
7
+ id: string;
8
+ phoneNumber: string;
9
+ customerName?: string;
10
+ reason?: string;
11
+ preferredTime?: string;
12
+ queueId?: string;
13
+ priority: number;
14
+ status: 'pending' | 'scheduled' | 'in-progress' | 'completed' | 'failed' | 'cancelled';
15
+ attempts: number;
16
+ maxAttempts: number;
17
+ createdAt: string;
18
+ scheduledFor?: string;
19
+ completedAt?: string;
20
+ notes?: string;
21
+ }
22
+ export interface QueuePosition {
23
+ position: number;
24
+ estimatedWaitTime: number;
25
+ callersAhead: number;
26
+ }
27
+ /**
28
+ * Callback Module
29
+ */
30
+ export declare class Callbacks {
31
+ /**
32
+ * Lambda code for callback request handling
33
+ */
34
+ static CallbackRequestCode: string;
35
+ /**
36
+ * Lambda code for processing callbacks
37
+ */
38
+ static CallbackProcessorCode: string;
39
+ /**
40
+ * Create callbacks DynamoDB table
41
+ */
42
+ static createCallbacksTable(config: {
43
+ slug: string;
44
+ }): Record<string, any>;
45
+ /**
46
+ * Create callback request Lambda
47
+ */
48
+ static createCallbackRequestLambda(config: {
49
+ slug: string;
50
+ roleArn: string;
51
+ callbacksTable: string;
52
+ notificationTopicArn?: string;
53
+ }): Record<string, any>;
54
+ /**
55
+ * Create callback processor Lambda
56
+ */
57
+ static createCallbackProcessorLambda(config: {
58
+ slug: string;
59
+ roleArn: string;
60
+ callbacksTable: string;
61
+ connectInstanceId: string;
62
+ contactFlowId: string;
63
+ sourcePhoneNumber: string;
64
+ queueId?: string;
65
+ }): Record<string, any>;
66
+ }
67
+ export default Callbacks;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Phone Advanced Features
3
+ */
4
+ export * from './recording';
5
+ export * from './ivr-builder';
6
+ export * from './analytics';
7
+ export * from './callbacks';
@@ -0,0 +1,130 @@
1
+ /**
2
+ * IVR Builder (Visual Contact Flow Editor)
3
+ *
4
+ * Provides a programmatic way to build Amazon Connect contact flows
5
+ */
6
+ export interface IVRFlow {
7
+ id: string;
8
+ name: string;
9
+ description?: string;
10
+ nodes: IVRNode[];
11
+ connections: IVRConnection[];
12
+ startNodeId: string;
13
+ version: number;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ }
17
+ export interface IVRNode {
18
+ id: string;
19
+ type: IVRNodeType;
20
+ position: {
21
+ x: number;
22
+ y: number;
23
+ };
24
+ config: Record<string, any>;
25
+ label?: string;
26
+ }
27
+ export type IVRNodeType = 'start' | 'play-prompt' | 'get-input' | 'menu' | 'transfer-queue' | 'transfer-agent' | 'transfer-phone' | 'invoke-lambda' | 'set-attribute' | 'check-attribute' | 'check-hours' | 'check-queue' | 'record-voicemail' | 'disconnect' | 'loop' | 'wait';
28
+ export interface IVRConnection {
29
+ id: string;
30
+ sourceNodeId: string;
31
+ targetNodeId: string;
32
+ sourcePort: string;
33
+ label?: string;
34
+ }
35
+ /**
36
+ * IVR Builder Module
37
+ */
38
+ export declare class IVRBuilder {
39
+ private nodes;
40
+ private connections;
41
+ private startNodeId;
42
+ /**
43
+ * Create a new IVR flow
44
+ */
45
+ static create(name: string): IVRBuilder;
46
+ /**
47
+ * Add a start node
48
+ */
49
+ start(): this;
50
+ /**
51
+ * Add a play prompt node
52
+ */
53
+ playPrompt(text: string, options?: {
54
+ ssml?: boolean;
55
+ voice?: string;
56
+ }): this;
57
+ /**
58
+ * Add a get input node (DTMF)
59
+ */
60
+ getInput(prompt: string, options?: {
61
+ maxDigits?: number;
62
+ timeout?: number;
63
+ errorPrompt?: string;
64
+ }): this;
65
+ /**
66
+ * Add a menu node
67
+ */
68
+ menu(prompt: string, options: Record<string, string>): this;
69
+ /**
70
+ * Add a transfer to queue node
71
+ */
72
+ transferToQueue(queueArn: string, options?: {
73
+ priority?: number;
74
+ }): this;
75
+ /**
76
+ * Add a transfer to phone number node
77
+ */
78
+ transferToPhone(phoneNumber: string): this;
79
+ /**
80
+ * Add a Lambda invocation node
81
+ */
82
+ invokeLambda(functionArn: string, options?: {
83
+ timeout?: number;
84
+ }): this;
85
+ /**
86
+ * Add a set attribute node
87
+ */
88
+ setAttribute(key: string, value: string): this;
89
+ /**
90
+ * Add a check hours node
91
+ */
92
+ checkHours(hoursOfOperationArn: string): this;
93
+ /**
94
+ * Add a record voicemail node
95
+ */
96
+ recordVoicemail(options?: {
97
+ maxDuration?: number;
98
+ greeting?: string;
99
+ beep?: boolean;
100
+ }): this;
101
+ /**
102
+ * Add a wait node
103
+ */
104
+ wait(seconds: number): this;
105
+ /**
106
+ * Add a disconnect node
107
+ */
108
+ disconnect(): this;
109
+ /**
110
+ * Build the IVR flow
111
+ */
112
+ build(): IVRFlow;
113
+ /**
114
+ * Convert to Amazon Connect contact flow format
115
+ */
116
+ toContactFlow(): string;
117
+ private nodeToAction;
118
+ private connectToLast;
119
+ private getNextNodeId;
120
+ private generateId;
121
+ /**
122
+ * Pre-built IVR templates
123
+ */
124
+ static readonly Templates: {
125
+ basicSupport: () => IVRBuilder;
126
+ afterHours: (greeting: string) => IVRBuilder;
127
+ callbackRequest: (lambdaArn: string) => IVRBuilder;
128
+ };
129
+ }
130
+ export default IVRBuilder;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Call Recording with Transcription
3
+ *
4
+ * Provides call recording storage and transcription
5
+ */
6
+ export interface CallRecording {
7
+ recordingId: string;
8
+ contactId: string;
9
+ startTime: string;
10
+ endTime: string;
11
+ duration: number;
12
+ participants: string[];
13
+ recordingUrl: string;
14
+ transcription?: CallTranscription;
15
+ status: 'recording' | 'processing' | 'completed' | 'failed';
16
+ createdAt: string;
17
+ }
18
+ export interface CallTranscription {
19
+ transcriptId: string;
20
+ text: string;
21
+ segments: TranscriptionSegment[];
22
+ language: string;
23
+ confidence: number;
24
+ status: 'pending' | 'processing' | 'completed' | 'failed';
25
+ }
26
+ export interface TranscriptionSegment {
27
+ speaker: string;
28
+ startTime: number;
29
+ endTime: number;
30
+ text: string;
31
+ confidence: number;
32
+ sentiment?: 'positive' | 'neutral' | 'negative';
33
+ }
34
+ /**
35
+ * Call Recording Module
36
+ */
37
+ export declare class CallRecording {
38
+ /**
39
+ * Lambda code for processing call recordings
40
+ */
41
+ static RecordingProcessorCode: string;
42
+ /**
43
+ * Lambda code for transcription completion
44
+ */
45
+ static TranscriptionCompleteCode: string;
46
+ /**
47
+ * Create recordings DynamoDB table
48
+ */
49
+ static createRecordingsTable(config: {
50
+ slug: string;
51
+ }): Record<string, any>;
52
+ /**
53
+ * Create recording processor Lambda
54
+ */
55
+ static createRecordingProcessorLambda(config: {
56
+ slug: string;
57
+ roleArn: string;
58
+ recordingBucket: string;
59
+ recordingsTable: string;
60
+ }): Record<string, any>;
61
+ }
62
+ export default CallRecording;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Incoming Call Lambda Handler
3
+ *
4
+ * Processes incoming calls from Amazon Connect:
5
+ * - Logs call details
6
+ * - Sends notifications (SNS, webhook)
7
+ * - Routes based on caller ID
8
+ */
9
+ export declare const handler = "\nconst { SNSClient, PublishCommand } = require('@aws-sdk/client-sns');\nconst { DynamoDBClient, PutItemCommand } = require('@aws-sdk/client-dynamodb');\n\nconst sns = new SNSClient({});\nconst dynamodb = new DynamoDBClient({});\n\nexports.handler = async (event) => {\n console.log('Incoming call event:', JSON.stringify(event, null, 2));\n\n const notificationTopicArn = process.env.NOTIFICATION_TOPIC_ARN;\n const callLogTable = process.env.CALL_LOG_TABLE;\n const webhookUrl = process.env.WEBHOOK_URL;\n\n try {\n // Extract call details from Connect event\n const contactData = event.Details?.ContactData || {};\n const parameters = event.Details?.Parameters || {};\n\n const callDetails = {\n contactId: contactData.ContactId,\n channel: contactData.Channel || 'VOICE',\n initiationMethod: contactData.InitiationMethod,\n customerEndpoint: contactData.CustomerEndpoint?.Address,\n systemEndpoint: contactData.SystemEndpoint?.Address,\n queue: contactData.Queue?.Name,\n attributes: contactData.Attributes || {},\n timestamp: new Date().toISOString(),\n };\n\n console.log('Call details:', callDetails);\n\n // Log call to DynamoDB\n if (callLogTable) {\n await dynamodb.send(new PutItemCommand({\n TableName: callLogTable,\n Item: {\n contactId: { S: callDetails.contactId },\n timestamp: { S: callDetails.timestamp },\n callerNumber: { S: callDetails.customerEndpoint || 'unknown' },\n calledNumber: { S: callDetails.systemEndpoint || 'unknown' },\n channel: { S: callDetails.channel },\n initiationMethod: { S: callDetails.initiationMethod || 'unknown' },\n status: { S: 'incoming' },\n ttl: { N: String(Math.floor(Date.now() / 1000) + 90 * 24 * 60 * 60) }, // 90 days\n },\n }));\n }\n\n // Send SNS notification\n if (notificationTopicArn) {\n await sns.send(new PublishCommand({\n TopicArn: notificationTopicArn,\n Subject: 'Incoming Call',\n Message: JSON.stringify({\n type: 'incoming_call',\n from: callDetails.customerEndpoint,\n to: callDetails.systemEndpoint,\n contactId: callDetails.contactId,\n timestamp: callDetails.timestamp,\n }, null, 2),\n MessageAttributes: {\n eventType: {\n DataType: 'String',\n StringValue: 'incoming_call',\n },\n },\n }));\n }\n\n // Send webhook notification\n if (webhookUrl) {\n try {\n await fetch(webhookUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n event: 'incoming_call',\n data: callDetails,\n }),\n });\n }\ncatch (err) {\n console.error('Webhook notification failed:', err.message);\n }\n }\n\n // Return routing decision\n // Can be customized based on caller ID, time of day, etc.\n return {\n statusCode: 200,\n route: parameters.defaultRoute || 'main_queue',\n callerInfo: {\n number: callDetails.customerEndpoint,\n isKnown: false, // Could lookup in CRM\n },\n };\n\n }\ncatch (error) {\n console.error('Error processing incoming call:', error);\n return {\n statusCode: 500,\n error: error.message,\n };\n }\n};\n";
10
+ export default handler;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Missed Call Lambda Handler
3
+ *
4
+ * Processes missed call events:
5
+ * - Logs missed call
6
+ * - Sends notification
7
+ */
8
+ export declare const handler = "\nconst { SNSClient, PublishCommand } = require('@aws-sdk/client-sns');\nconst { DynamoDBClient, UpdateItemCommand } = require('@aws-sdk/client-dynamodb');\n\nconst sns = new SNSClient({});\nconst dynamodb = new DynamoDBClient({});\n\nexports.handler = async (event) => {\n console.log('Missed call event:', JSON.stringify(event, null, 2));\n\n const notificationTopicArn = process.env.NOTIFICATION_TOPIC_ARN;\n const callLogTable = process.env.CALL_LOG_TABLE;\n const webhookUrl = process.env.WEBHOOK_URL;\n\n try {\n // Extract call details from Connect event\n const contactData = event.Details?.ContactData || {};\n\n const callDetails = {\n contactId: contactData.ContactId,\n customerEndpoint: contactData.CustomerEndpoint?.Address,\n systemEndpoint: contactData.SystemEndpoint?.Address,\n queue: contactData.Queue?.Name,\n waitTime: contactData.Queue?.EnqueueTimestamp\n ? Math.floor((Date.now() - new Date(contactData.Queue.EnqueueTimestamp).getTime()) / 1000)\n : 0,\n disconnectReason: event.Details?.Parameters?.disconnectReason || 'customer_abandoned',\n timestamp: new Date().toISOString(),\n };\n\n console.log('Missed call details:', callDetails);\n\n // Update call log\n if (callLogTable && callDetails.contactId) {\n await dynamodb.send(new UpdateItemCommand({\n TableName: callLogTable,\n Key: {\n contactId: { S: callDetails.contactId },\n },\n UpdateExpression: 'SET #status = :status, disconnectReason = :reason, waitTime = :wait, missedAt = :at',\n ExpressionAttributeNames: {\n '#status': 'status',\n },\n ExpressionAttributeValues: {\n ':status': { S: 'missed' },\n ':reason': { S: callDetails.disconnectReason },\n ':wait': { N: String(callDetails.waitTime) },\n ':at': { S: callDetails.timestamp },\n },\n }));\n }\n\n // Send SNS notification\n if (notificationTopicArn) {\n await sns.send(new PublishCommand({\n TopicArn: notificationTopicArn,\n Subject: 'Missed Call Alert',\n Message: JSON.stringify({\n type: 'missed_call',\n from: callDetails.customerEndpoint,\n to: callDetails.systemEndpoint,\n queue: callDetails.queue,\n waitTime: callDetails.waitTime,\n reason: callDetails.disconnectReason,\n contactId: callDetails.contactId,\n timestamp: callDetails.timestamp,\n }, null, 2),\n MessageAttributes: {\n eventType: {\n DataType: 'String',\n StringValue: 'missed_call',\n },\n },\n }));\n }\n\n // Send webhook notification\n if (webhookUrl) {\n try {\n await fetch(webhookUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n event: 'missed_call',\n data: callDetails,\n }),\n });\n }\ncatch (err) {\n console.error('Webhook notification failed:', err.message);\n }\n }\n\n return {\n statusCode: 200,\n message: 'Missed call logged',\n };\n\n }\ncatch (error) {\n console.error('Error processing missed call:', error);\n return {\n statusCode: 500,\n error: error.message,\n };\n }\n};\n";
9
+ export default handler;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Voicemail Lambda Handler
3
+ *
4
+ * Processes voicemail recordings:
5
+ * - Processes voicemail recordings from S3
6
+ * - Transcribes using Amazon Transcribe
7
+ * - Sends notification with transcription
8
+ */
9
+ export declare const handler = "\nconst { S3Client, GetObjectCommand, PutObjectCommand } = require('@aws-sdk/client-s3');\nconst { TranscribeClient, StartTranscriptionJobCommand, GetTranscriptionJobCommand } = require('@aws-sdk/client-transcribe');\nconst { SNSClient, PublishCommand } = require('@aws-sdk/client-sns');\nconst { DynamoDBClient, UpdateItemCommand } = require('@aws-sdk/client-dynamodb');\n\nconst s3 = new S3Client({});\nconst transcribe = new TranscribeClient({});\nconst sns = new SNSClient({});\nconst dynamodb = new DynamoDBClient({});\n\nexports.handler = async (event) => {\n console.log('Voicemail event:', JSON.stringify(event, null, 2));\n\n const notificationTopicArn = process.env.NOTIFICATION_TOPIC_ARN;\n const voicemailBucket = process.env.VOICEMAIL_BUCKET;\n const callLogTable = process.env.CALL_LOG_TABLE;\n const transcriptionEnabled = process.env.TRANSCRIPTION_ENABLED === 'true';\n\n for (const record of event.Records) {\n try {\n const s3Event = record.s3 || {};\n const bucket = s3Event.bucket?.name || voicemailBucket;\n const key = decodeURIComponent(s3Event.object?.key?.replace(/\\+/g, ' ') || '');\n\n if (!key.includes('voicemail') || !key.endsWith('.wav')) {\n continue;\n }\n\n console.log(`Processing voicemail: ${key}`);\n\n // Extract metadata from key (format: voicemails/{contactId}/{timestamp}.wav)\n const parts = key.split('/');\n const contactId = parts[1] || 'unknown';\n const filename = parts[parts.length - 1];\n const timestamp = filename.replace('.wav', '');\n\n // Get voicemail metadata if exists\n let metadata = {};\n try {\n const metaResult = await s3.send(new GetObjectCommand({\n Bucket: bucket,\n Key: key.replace('.wav', '.json'),\n }));\n metadata = JSON.parse(await metaResult.Body.transformToString());\n }\ncatch {\n // No metadata file\n }\n\n let transcription = null;\n\n // Start transcription if enabled\n if (transcriptionEnabled) {\n const jobName = `voicemail-${contactId}-${Date.now()}`;\n\n await transcribe.send(new StartTranscriptionJobCommand({\n TranscriptionJobName: jobName,\n LanguageCode: 'en-US',\n MediaFormat: 'wav',\n Media: {\n MediaFileUri: `s3://${bucket}/${key}`,\n },\n OutputBucketName: bucket,\n OutputKey: key.replace('.wav', '-transcript.json'),\n }));\n\n // Wait for transcription (with timeout)\n let attempts = 0;\n const maxAttempts = 30; // 5 minutes max\n\n while (attempts < maxAttempts) {\n await new Promise(resolve => setTimeout(resolve, 10000)); // 10 seconds\n\n const jobResult = await transcribe.send(new GetTranscriptionJobCommand({\n TranscriptionJobName: jobName,\n }));\n\n const status = jobResult.TranscriptionJob?.TranscriptionJobStatus;\n\n if (status === 'COMPLETED') {\n // Get transcription result\n try {\n const transcriptResult = await s3.send(new GetObjectCommand({\n Bucket: bucket,\n Key: key.replace('.wav', '-transcript.json'),\n }));\n const transcriptData = JSON.parse(await transcriptResult.Body.transformToString());\n transcription = transcriptData.results?.transcripts?.[0]?.transcript || '';\n }\ncatch (err) {\n console.error('Error getting transcription:', err.message);\n }\n break;\n }\nelse if (status === 'FAILED') {\n console.error('Transcription failed');\n break;\n }\n\n attempts++;\n }\n }\n\n // Update call log\n if (callLogTable && contactId !== 'unknown') {\n await dynamodb.send(new UpdateItemCommand({\n TableName: callLogTable,\n Key: {\n contactId: { S: contactId },\n },\n UpdateExpression: 'SET voicemailKey = :key, voicemailTranscript = :transcript, voicemailAt = :at',\n ExpressionAttributeValues: {\n ':key': { S: key },\n ':transcript': { S: transcription || '' },\n ':at': { S: new Date().toISOString() },\n },\n }));\n }\n\n // Save voicemail metadata\n await s3.send(new PutObjectCommand({\n Bucket: bucket,\n Key: key.replace('.wav', '-metadata.json'),\n Body: JSON.stringify({\n contactId,\n callerNumber: metadata.callerNumber || 'unknown',\n calledNumber: metadata.calledNumber || 'unknown',\n duration: metadata.duration || 0,\n recordedAt: timestamp,\n processedAt: new Date().toISOString(),\n transcription,\n audioKey: key,\n }, null, 2),\n ContentType: 'application/json',\n }));\n\n // Send notification\n if (notificationTopicArn) {\n await sns.send(new PublishCommand({\n TopicArn: notificationTopicArn,\n Subject: 'New Voicemail',\n Message: JSON.stringify({\n type: 'voicemail',\n contactId,\n from: metadata.callerNumber || 'unknown',\n to: metadata.calledNumber || 'unknown',\n duration: metadata.duration || 0,\n transcription: transcription || '(transcription not available)',\n audioUrl: `s3://${bucket}/${key}`,\n timestamp: new Date().toISOString(),\n }, null, 2),\n MessageAttributes: {\n eventType: {\n DataType: 'String',\n StringValue: 'voicemail',\n },\n },\n }));\n }\n\n console.log(`Processed voicemail: ${contactId}`);\n\n }\ncatch (error) {\n console.error('Error processing voicemail:', error);\n }\n }\n\n return { statusCode: 200, body: 'OK' };\n};\n";
10
+ export default handler;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Phone/Voice Advanced Features
3
+ */
4
+ export * as PhoneAdvanced from './advanced';
5
+ export * as PhoneHandlers from './handlers/incoming-call';
@@ -0,0 +1,11 @@
1
+ import type { CloudConfig } from '../types';
2
+ /**
3
+ * API-Only Backend Preset
4
+ * Perfect for: REST APIs, GraphQL APIs, mobile backends
5
+ * Includes: API Gateway + Lambda functions + DynamoDB
6
+ */
7
+ export declare function createApiBackendPreset(options: {
8
+ name: string;
9
+ slug: string;
10
+ domain?: string;
11
+ }): Partial<CloudConfig>;
@@ -0,0 +1,11 @@
1
+ import type { CloudConfig } from '../types';
2
+ /**
3
+ * Data Pipeline Preset
4
+ * Perfect for: ETL pipelines, data processing, analytics workflows
5
+ * Includes: Kinesis + Lambda + S3 + Athena + Glue
6
+ */
7
+ export declare function createDataPipelinePreset(options: {
8
+ name: string;
9
+ slug: string;
10
+ retentionDays?: number;
11
+ }): Partial<CloudConfig>;