@stacksjs/ts-cloud 0.1.2 → 0.1.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 (187) hide show
  1. package/README.md +98 -13
  2. package/dist/aws/acm.d.ts +129 -0
  3. package/dist/aws/application-autoscaling.d.ts +282 -0
  4. package/dist/aws/bedrock.d.ts +2292 -0
  5. package/dist/aws/client.d.ts +79 -0
  6. package/dist/aws/cloudformation.d.ts +105 -0
  7. package/dist/aws/cloudfront.d.ts +265 -0
  8. package/dist/aws/cloudwatch-logs.d.ts +48 -0
  9. package/dist/aws/comprehend.d.ts +505 -0
  10. package/dist/aws/connect.d.ts +377 -0
  11. package/dist/aws/deploy-imap.d.ts +14 -0
  12. package/dist/aws/dynamodb.d.ts +176 -0
  13. package/dist/aws/ec2.d.ts +272 -0
  14. package/dist/aws/ecr.d.ts +149 -0
  15. package/dist/aws/ecs.d.ts +162 -0
  16. package/dist/aws/elasticache.d.ts +71 -0
  17. package/dist/aws/elbv2.d.ts +248 -0
  18. package/dist/aws/email.d.ts +175 -0
  19. package/dist/aws/eventbridge.d.ts +142 -0
  20. package/dist/aws/iam.d.ts +638 -0
  21. package/dist/aws/imap-server.d.ts +119 -0
  22. package/{src/aws/index.ts → dist/aws/index.d.ts} +62 -83
  23. package/{src/aws/kendra.ts → dist/aws/kendra.d.ts} +71 -386
  24. package/dist/aws/lambda.d.ts +232 -0
  25. package/dist/aws/opensearch.d.ts +87 -0
  26. package/dist/aws/personalize.d.ts +516 -0
  27. package/dist/aws/polly.d.ts +214 -0
  28. package/dist/aws/rds.d.ts +240 -0
  29. package/dist/aws/rekognition.d.ts +543 -0
  30. package/dist/aws/route53-domains.d.ts +113 -0
  31. package/dist/aws/route53.d.ts +215 -0
  32. package/dist/aws/s3.d.ts +212 -0
  33. package/dist/aws/scheduler.d.ts +140 -0
  34. package/dist/aws/secrets-manager.d.ts +170 -0
  35. package/dist/aws/ses.d.ts +288 -0
  36. package/dist/aws/setup-phone.d.ts +0 -0
  37. package/dist/aws/setup-sms.d.ts +115 -0
  38. package/dist/aws/sms.d.ts +304 -0
  39. package/dist/aws/smtp-server.d.ts +61 -0
  40. package/dist/aws/sns.d.ts +117 -0
  41. package/dist/aws/sqs.d.ts +65 -0
  42. package/dist/aws/ssm.d.ts +179 -0
  43. package/dist/aws/sts.d.ts +15 -0
  44. package/dist/aws/support.d.ts +104 -0
  45. package/dist/aws/test-imap.d.ts +0 -0
  46. package/dist/aws/textract.d.ts +403 -0
  47. package/dist/aws/transcribe.d.ts +60 -0
  48. package/dist/aws/translate.d.ts +358 -0
  49. package/dist/aws/voice.d.ts +219 -0
  50. package/dist/bin/cli.js +1724 -0
  51. package/dist/config.d.ts +7 -0
  52. package/dist/deploy/index.d.ts +2 -0
  53. package/dist/deploy/static-site-external-dns.d.ts +51 -0
  54. package/dist/deploy/static-site.d.ts +71 -0
  55. package/dist/dns/cloudflare.d.ts +52 -0
  56. package/dist/dns/godaddy.d.ts +38 -0
  57. package/dist/dns/index.d.ts +45 -0
  58. package/dist/dns/porkbun.d.ts +18 -0
  59. package/dist/dns/route53-adapter.d.ts +38 -0
  60. package/{src/dns/types.ts → dist/dns/types.d.ts} +26 -63
  61. package/dist/dns/validator.d.ts +78 -0
  62. package/dist/generators/index.d.ts +1 -0
  63. package/dist/generators/infrastructure.d.ts +30 -0
  64. package/{src/index.ts → dist/index.d.ts} +70 -93
  65. package/dist/index.js +7881 -0
  66. package/dist/push/apns.d.ts +60 -0
  67. package/dist/push/fcm.d.ts +117 -0
  68. package/dist/push/index.d.ts +14 -0
  69. package/dist/security/pre-deploy-scanner.d.ts +69 -0
  70. package/dist/ssl/acme-client.d.ts +67 -0
  71. package/dist/ssl/index.d.ts +2 -0
  72. package/dist/ssl/letsencrypt.d.ts +48 -0
  73. package/dist/types.d.ts +1 -0
  74. package/dist/utils/cli.d.ts +123 -0
  75. package/dist/validation/index.d.ts +1 -0
  76. package/dist/validation/template.d.ts +23 -0
  77. package/package.json +8 -8
  78. package/bin/cli.ts +0 -133
  79. package/bin/commands/analytics.ts +0 -328
  80. package/bin/commands/api.ts +0 -379
  81. package/bin/commands/assets.ts +0 -221
  82. package/bin/commands/audit.ts +0 -501
  83. package/bin/commands/backup.ts +0 -682
  84. package/bin/commands/cache.ts +0 -294
  85. package/bin/commands/cdn.ts +0 -281
  86. package/bin/commands/config.ts +0 -202
  87. package/bin/commands/container.ts +0 -105
  88. package/bin/commands/cost.ts +0 -208
  89. package/bin/commands/database.ts +0 -401
  90. package/bin/commands/deploy.ts +0 -674
  91. package/bin/commands/domain.ts +0 -397
  92. package/bin/commands/email.ts +0 -423
  93. package/bin/commands/environment.ts +0 -285
  94. package/bin/commands/events.ts +0 -424
  95. package/bin/commands/firewall.ts +0 -145
  96. package/bin/commands/function.ts +0 -116
  97. package/bin/commands/generate.ts +0 -280
  98. package/bin/commands/git.ts +0 -139
  99. package/bin/commands/iam.ts +0 -464
  100. package/bin/commands/index.ts +0 -48
  101. package/bin/commands/init.ts +0 -120
  102. package/bin/commands/logs.ts +0 -148
  103. package/bin/commands/network.ts +0 -579
  104. package/bin/commands/notify.ts +0 -489
  105. package/bin/commands/queue.ts +0 -407
  106. package/bin/commands/scheduler.ts +0 -370
  107. package/bin/commands/secrets.ts +0 -54
  108. package/bin/commands/server.ts +0 -629
  109. package/bin/commands/shared.ts +0 -97
  110. package/bin/commands/ssl.ts +0 -138
  111. package/bin/commands/stack.ts +0 -325
  112. package/bin/commands/status.ts +0 -385
  113. package/bin/commands/storage.ts +0 -450
  114. package/bin/commands/team.ts +0 -96
  115. package/bin/commands/tunnel.ts +0 -489
  116. package/bin/commands/utils.ts +0 -202
  117. package/build.ts +0 -15
  118. package/cloud +0 -2
  119. package/src/aws/acm.ts +0 -768
  120. package/src/aws/application-autoscaling.ts +0 -845
  121. package/src/aws/bedrock.ts +0 -4074
  122. package/src/aws/client.ts +0 -878
  123. package/src/aws/cloudformation.ts +0 -896
  124. package/src/aws/cloudfront.ts +0 -1531
  125. package/src/aws/cloudwatch-logs.ts +0 -154
  126. package/src/aws/comprehend.ts +0 -839
  127. package/src/aws/connect.ts +0 -1056
  128. package/src/aws/deploy-imap.ts +0 -384
  129. package/src/aws/dynamodb.ts +0 -340
  130. package/src/aws/ec2.ts +0 -1385
  131. package/src/aws/ecr.ts +0 -621
  132. package/src/aws/ecs.ts +0 -615
  133. package/src/aws/elasticache.ts +0 -301
  134. package/src/aws/elbv2.ts +0 -942
  135. package/src/aws/email.ts +0 -928
  136. package/src/aws/eventbridge.ts +0 -248
  137. package/src/aws/iam.ts +0 -1689
  138. package/src/aws/imap-server.ts +0 -2100
  139. package/src/aws/lambda.ts +0 -786
  140. package/src/aws/opensearch.ts +0 -158
  141. package/src/aws/personalize.ts +0 -977
  142. package/src/aws/polly.ts +0 -559
  143. package/src/aws/rds.ts +0 -888
  144. package/src/aws/rekognition.ts +0 -846
  145. package/src/aws/route53-domains.ts +0 -359
  146. package/src/aws/route53.ts +0 -1046
  147. package/src/aws/s3.ts +0 -2318
  148. package/src/aws/scheduler.ts +0 -571
  149. package/src/aws/secrets-manager.ts +0 -769
  150. package/src/aws/ses.ts +0 -1081
  151. package/src/aws/setup-phone.ts +0 -104
  152. package/src/aws/setup-sms.ts +0 -580
  153. package/src/aws/sms.ts +0 -1735
  154. package/src/aws/smtp-server.ts +0 -531
  155. package/src/aws/sns.ts +0 -758
  156. package/src/aws/sqs.ts +0 -382
  157. package/src/aws/ssm.ts +0 -807
  158. package/src/aws/sts.ts +0 -92
  159. package/src/aws/support.ts +0 -391
  160. package/src/aws/test-imap.ts +0 -86
  161. package/src/aws/textract.ts +0 -780
  162. package/src/aws/transcribe.ts +0 -108
  163. package/src/aws/translate.ts +0 -641
  164. package/src/aws/voice.ts +0 -1379
  165. package/src/config.ts +0 -35
  166. package/src/deploy/index.ts +0 -7
  167. package/src/deploy/static-site-external-dns.ts +0 -906
  168. package/src/deploy/static-site.ts +0 -1125
  169. package/src/dns/godaddy.ts +0 -412
  170. package/src/dns/index.ts +0 -183
  171. package/src/dns/porkbun.ts +0 -362
  172. package/src/dns/route53-adapter.ts +0 -414
  173. package/src/dns/validator.ts +0 -369
  174. package/src/generators/index.ts +0 -5
  175. package/src/generators/infrastructure.ts +0 -1660
  176. package/src/push/apns.ts +0 -452
  177. package/src/push/fcm.ts +0 -506
  178. package/src/push/index.ts +0 -58
  179. package/src/ssl/acme-client.ts +0 -478
  180. package/src/ssl/index.ts +0 -7
  181. package/src/ssl/letsencrypt.ts +0 -747
  182. package/src/types.ts +0 -2
  183. package/src/utils/cli.ts +0 -398
  184. package/src/validation/index.ts +0 -5
  185. package/src/validation/template.ts +0 -405
  186. package/test/index.test.ts +0 -128
  187. package/tsconfig.json +0 -18
@@ -1,977 +0,0 @@
1
- /**
2
- * AWS Personalize Client
3
- * Recommendation engine service
4
- * No external SDK dependencies - implements AWS Signature V4 directly
5
- */
6
-
7
- import { AWSClient } from './client'
8
-
9
- // ============================================================================
10
- // Types
11
- // ============================================================================
12
-
13
- export interface CreateDatasetGroupCommandInput {
14
- name: string
15
- roleArn?: string
16
- kmsKeyArn?: string
17
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
18
- tags?: Array<{ tagKey: string; tagValue: string }>
19
- }
20
-
21
- export interface CreateDatasetGroupCommandOutput {
22
- datasetGroupArn?: string
23
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
24
- }
25
-
26
- export interface DescribeDatasetGroupCommandInput {
27
- datasetGroupArn: string
28
- }
29
-
30
- export interface DatasetGroup {
31
- name?: string
32
- datasetGroupArn?: string
33
- status?: string
34
- roleArn?: string
35
- kmsKeyArn?: string
36
- creationDateTime?: string
37
- lastUpdatedDateTime?: string
38
- failureReason?: string
39
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
40
- }
41
-
42
- export interface DescribeDatasetGroupCommandOutput {
43
- datasetGroup?: DatasetGroup
44
- }
45
-
46
- export interface ListDatasetGroupsCommandInput {
47
- nextToken?: string
48
- maxResults?: number
49
- }
50
-
51
- export interface DatasetGroupSummary {
52
- name?: string
53
- datasetGroupArn?: string
54
- status?: string
55
- creationDateTime?: string
56
- lastUpdatedDateTime?: string
57
- failureReason?: string
58
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
59
- }
60
-
61
- export interface ListDatasetGroupsCommandOutput {
62
- datasetGroups?: DatasetGroupSummary[]
63
- nextToken?: string
64
- }
65
-
66
- export interface CreateSchemaCommandInput {
67
- name: string
68
- schema: string
69
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
70
- }
71
-
72
- export interface CreateSchemaCommandOutput {
73
- schemaArn?: string
74
- }
75
-
76
- export interface CreateDatasetCommandInput {
77
- name: string
78
- schemaArn: string
79
- datasetGroupArn: string
80
- datasetType: 'Interactions' | 'Items' | 'Users' | 'Actions' | 'Action_Interactions'
81
- tags?: Array<{ tagKey: string; tagValue: string }>
82
- }
83
-
84
- export interface CreateDatasetCommandOutput {
85
- datasetArn?: string
86
- }
87
-
88
- export interface CreateDatasetImportJobCommandInput {
89
- jobName: string
90
- datasetArn: string
91
- dataSource: {
92
- dataLocation: string
93
- }
94
- roleArn: string
95
- importMode?: 'FULL' | 'INCREMENTAL'
96
- publishAttributionMetricsToS3?: boolean
97
- tags?: Array<{ tagKey: string; tagValue: string }>
98
- }
99
-
100
- export interface CreateDatasetImportJobCommandOutput {
101
- datasetImportJobArn?: string
102
- }
103
-
104
- export interface DescribeDatasetImportJobCommandInput {
105
- datasetImportJobArn: string
106
- }
107
-
108
- export interface DatasetImportJob {
109
- jobName?: string
110
- datasetImportJobArn?: string
111
- datasetArn?: string
112
- dataSource?: {
113
- dataLocation?: string
114
- }
115
- roleArn?: string
116
- status?: string
117
- creationDateTime?: string
118
- lastUpdatedDateTime?: string
119
- failureReason?: string
120
- importMode?: 'FULL' | 'INCREMENTAL'
121
- publishAttributionMetricsToS3?: boolean
122
- }
123
-
124
- export interface DescribeDatasetImportJobCommandOutput {
125
- datasetImportJob?: DatasetImportJob
126
- }
127
-
128
- export interface CreateSolutionCommandInput {
129
- name: string
130
- datasetGroupArn: string
131
- recipeArn?: string
132
- eventType?: string
133
- solutionConfig?: {
134
- eventValueThreshold?: string
135
- hpoConfig?: {
136
- hpoObjective?: {
137
- type?: string
138
- metricName?: string
139
- metricRegex?: string
140
- }
141
- hpoResourceConfig?: {
142
- maxNumberOfTrainingJobs?: string
143
- maxParallelTrainingJobs?: string
144
- }
145
- algorithmHyperParameterRanges?: {
146
- integerHyperParameterRanges?: Array<{
147
- name?: string
148
- minValue?: number
149
- maxValue?: number
150
- }>
151
- continuousHyperParameterRanges?: Array<{
152
- name?: string
153
- minValue?: number
154
- maxValue?: number
155
- }>
156
- categoricalHyperParameterRanges?: Array<{
157
- name?: string
158
- values?: string[]
159
- }>
160
- }
161
- }
162
- algorithmHyperParameters?: Record<string, string>
163
- featureTransformationParameters?: Record<string, string>
164
- autoMLConfig?: {
165
- metricName?: string
166
- recipeList?: string[]
167
- }
168
- optimizationObjective?: {
169
- itemAttribute?: string
170
- objectiveSensitivity?: 'LOW' | 'MEDIUM' | 'HIGH' | 'OFF'
171
- }
172
- trainingDataConfig?: {
173
- excludedDatasetColumns?: Record<string, string[]>
174
- }
175
- }
176
- performHPO?: boolean
177
- performAutoML?: boolean
178
- tags?: Array<{ tagKey: string; tagValue: string }>
179
- }
180
-
181
- export interface CreateSolutionCommandOutput {
182
- solutionArn?: string
183
- }
184
-
185
- export interface CreateSolutionVersionCommandInput {
186
- name?: string
187
- solutionArn: string
188
- trainingMode?: 'FULL' | 'UPDATE' | 'AUTOTRAIN'
189
- tags?: Array<{ tagKey: string; tagValue: string }>
190
- }
191
-
192
- export interface CreateSolutionVersionCommandOutput {
193
- solutionVersionArn?: string
194
- }
195
-
196
- export interface DescribeSolutionVersionCommandInput {
197
- solutionVersionArn: string
198
- }
199
-
200
- export interface SolutionVersion {
201
- name?: string
202
- solutionVersionArn?: string
203
- solutionArn?: string
204
- performHPO?: boolean
205
- performAutoML?: boolean
206
- recipeArn?: string
207
- eventType?: string
208
- datasetGroupArn?: string
209
- solutionConfig?: {
210
- eventValueThreshold?: string
211
- hpoConfig?: Record<string, unknown>
212
- algorithmHyperParameters?: Record<string, string>
213
- featureTransformationParameters?: Record<string, string>
214
- autoMLConfig?: Record<string, unknown>
215
- }
216
- trainingHours?: number
217
- trainingMode?: 'FULL' | 'UPDATE' | 'AUTOTRAIN'
218
- tunedHPOParams?: {
219
- algorithmHyperParameters?: Record<string, string>
220
- }
221
- status?: string
222
- failureReason?: string
223
- creationDateTime?: string
224
- lastUpdatedDateTime?: string
225
- trainingType?: 'AUTOMATIC' | 'MANUAL'
226
- }
227
-
228
- export interface DescribeSolutionVersionCommandOutput {
229
- solutionVersion?: SolutionVersion
230
- }
231
-
232
- export interface CreateCampaignCommandInput {
233
- name: string
234
- solutionVersionArn: string
235
- minProvisionedTPS?: number
236
- campaignConfig?: {
237
- itemExplorationConfig?: Record<string, string>
238
- enableMetadataWithRecommendations?: boolean
239
- syncWithLatestSolutionVersion?: boolean
240
- }
241
- tags?: Array<{ tagKey: string; tagValue: string }>
242
- }
243
-
244
- export interface CreateCampaignCommandOutput {
245
- campaignArn?: string
246
- }
247
-
248
- export interface DescribeCampaignCommandInput {
249
- campaignArn: string
250
- }
251
-
252
- export interface Campaign {
253
- name?: string
254
- campaignArn?: string
255
- solutionVersionArn?: string
256
- minProvisionedTPS?: number
257
- campaignConfig?: {
258
- itemExplorationConfig?: Record<string, string>
259
- enableMetadataWithRecommendations?: boolean
260
- syncWithLatestSolutionVersion?: boolean
261
- }
262
- status?: string
263
- failureReason?: string
264
- creationDateTime?: string
265
- lastUpdatedDateTime?: string
266
- latestCampaignUpdate?: {
267
- solutionVersionArn?: string
268
- minProvisionedTPS?: number
269
- campaignConfig?: Record<string, unknown>
270
- status?: string
271
- failureReason?: string
272
- creationDateTime?: string
273
- lastUpdatedDateTime?: string
274
- }
275
- }
276
-
277
- export interface DescribeCampaignCommandOutput {
278
- campaign?: Campaign
279
- }
280
-
281
- export interface GetRecommendationsCommandInput {
282
- campaignArn?: string
283
- recommenderArn?: string
284
- itemId?: string
285
- userId?: string
286
- numResults?: number
287
- context?: Record<string, string>
288
- filterArn?: string
289
- filterValues?: Record<string, string>
290
- promotions?: Array<{
291
- name?: string
292
- percentPromotedItems?: number
293
- filterArn?: string
294
- filterValues?: Record<string, string>
295
- }>
296
- metadataColumns?: Record<string, string[]>
297
- }
298
-
299
- export interface PredictedItem {
300
- itemId?: string
301
- score?: number
302
- promotionName?: string
303
- metadata?: Record<string, string>
304
- reason?: string[]
305
- }
306
-
307
- export interface GetRecommendationsCommandOutput {
308
- itemList?: PredictedItem[]
309
- recommendationId?: string
310
- }
311
-
312
- export interface GetPersonalizedRankingCommandInput {
313
- campaignArn: string
314
- inputList: string[]
315
- userId: string
316
- context?: Record<string, string>
317
- filterArn?: string
318
- filterValues?: Record<string, string>
319
- metadataColumns?: Record<string, string[]>
320
- }
321
-
322
- export interface GetPersonalizedRankingCommandOutput {
323
- personalizedRanking?: PredictedItem[]
324
- recommendationId?: string
325
- }
326
-
327
- export interface CreateRecommenderCommandInput {
328
- name: string
329
- datasetGroupArn: string
330
- recipeArn: string
331
- recommenderConfig?: {
332
- itemExplorationConfig?: Record<string, string>
333
- minRecommendationRequestsPerSecond?: number
334
- trainingDataConfig?: {
335
- excludedDatasetColumns?: Record<string, string[]>
336
- }
337
- enableMetadataWithRecommendations?: boolean
338
- }
339
- tags?: Array<{ tagKey: string; tagValue: string }>
340
- }
341
-
342
- export interface CreateRecommenderCommandOutput {
343
- recommenderArn?: string
344
- }
345
-
346
- export interface DescribeRecommenderCommandInput {
347
- recommenderArn: string
348
- }
349
-
350
- export interface Recommender {
351
- recommenderArn?: string
352
- datasetGroupArn?: string
353
- name?: string
354
- recipeArn?: string
355
- recommenderConfig?: {
356
- itemExplorationConfig?: Record<string, string>
357
- minRecommendationRequestsPerSecond?: number
358
- trainingDataConfig?: {
359
- excludedDatasetColumns?: Record<string, string[]>
360
- }
361
- enableMetadataWithRecommendations?: boolean
362
- }
363
- creationDateTime?: string
364
- lastUpdatedDateTime?: string
365
- status?: string
366
- failureReason?: string
367
- latestRecommenderUpdate?: {
368
- recommenderConfig?: Record<string, unknown>
369
- creationDateTime?: string
370
- lastUpdatedDateTime?: string
371
- status?: string
372
- failureReason?: string
373
- }
374
- modelMetrics?: Record<string, number>
375
- }
376
-
377
- export interface DescribeRecommenderCommandOutput {
378
- recommender?: Recommender
379
- }
380
-
381
- export interface ListRecommendersCommandInput {
382
- datasetGroupArn?: string
383
- nextToken?: string
384
- maxResults?: number
385
- }
386
-
387
- export interface RecommenderSummary {
388
- name?: string
389
- recommenderArn?: string
390
- datasetGroupArn?: string
391
- recipeArn?: string
392
- recommenderConfig?: Record<string, unknown>
393
- status?: string
394
- creationDateTime?: string
395
- lastUpdatedDateTime?: string
396
- }
397
-
398
- export interface ListRecommendersCommandOutput {
399
- recommenders?: RecommenderSummary[]
400
- nextToken?: string
401
- }
402
-
403
- export interface PutEventsCommandInput {
404
- trackingId: string
405
- userId?: string
406
- sessionId: string
407
- eventList: Array<{
408
- eventId?: string
409
- eventType: string
410
- eventValue?: number
411
- itemId?: string
412
- properties?: string
413
- sentAt: Date | string
414
- recommendationId?: string
415
- impression?: string[]
416
- metricAttribution?: {
417
- eventAttributionSource?: string
418
- }
419
- }>
420
- }
421
-
422
- export interface PutEventsCommandOutput {
423
- // Empty
424
- }
425
-
426
- export interface PutItemsCommandInput {
427
- datasetArn: string
428
- items: Array<{
429
- itemId: string
430
- properties?: string
431
- }>
432
- }
433
-
434
- export interface PutItemsCommandOutput {
435
- // Empty
436
- }
437
-
438
- export interface PutUsersCommandInput {
439
- datasetArn: string
440
- users: Array<{
441
- userId: string
442
- properties?: string
443
- }>
444
- }
445
-
446
- export interface PutUsersCommandOutput {
447
- // Empty
448
- }
449
-
450
- export interface CreateEventTrackerCommandInput {
451
- name: string
452
- datasetGroupArn: string
453
- tags?: Array<{ tagKey: string; tagValue: string }>
454
- }
455
-
456
- export interface CreateEventTrackerCommandOutput {
457
- eventTrackerArn?: string
458
- trackingId?: string
459
- }
460
-
461
- export interface DescribeEventTrackerCommandInput {
462
- eventTrackerArn: string
463
- }
464
-
465
- export interface EventTracker {
466
- name?: string
467
- eventTrackerArn?: string
468
- accountId?: string
469
- trackingId?: string
470
- datasetGroupArn?: string
471
- status?: string
472
- creationDateTime?: string
473
- lastUpdatedDateTime?: string
474
- }
475
-
476
- export interface DescribeEventTrackerCommandOutput {
477
- eventTracker?: EventTracker
478
- }
479
-
480
- export interface CreateFilterCommandInput {
481
- name: string
482
- datasetGroupArn: string
483
- filterExpression: string
484
- tags?: Array<{ tagKey: string; tagValue: string }>
485
- }
486
-
487
- export interface CreateFilterCommandOutput {
488
- filterArn?: string
489
- }
490
-
491
- export interface ListRecipesCommandInput {
492
- recipeProvider?: 'SERVICE'
493
- nextToken?: string
494
- maxResults?: number
495
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
496
- }
497
-
498
- export interface RecipeSummary {
499
- name?: string
500
- recipeArn?: string
501
- status?: string
502
- creationDateTime?: string
503
- lastUpdatedDateTime?: string
504
- domain?: 'ECOMMERCE' | 'VIDEO_ON_DEMAND'
505
- }
506
-
507
- export interface ListRecipesCommandOutput {
508
- recipes?: RecipeSummary[]
509
- nextToken?: string
510
- }
511
-
512
- // ============================================================================
513
- // Personalize Client
514
- // ============================================================================
515
-
516
- export class PersonalizeClient {
517
- private client: AWSClient
518
- private region: string
519
-
520
- constructor(region: string = 'us-east-1') {
521
- this.region = region
522
- this.client = new AWSClient()
523
- }
524
-
525
- private async request<T>(action: string, params: Record<string, unknown>): Promise<T> {
526
- return this.client.request({
527
- service: 'personalize',
528
- region: this.region,
529
- method: 'POST',
530
- path: '/',
531
- headers: {
532
- 'Content-Type': 'application/x-amz-json-1.1',
533
- 'X-Amz-Target': `AmazonPersonalize.${action}`,
534
- },
535
- body: JSON.stringify(params),
536
- })
537
- }
538
-
539
- // -------------------------------------------------------------------------
540
- // Dataset Groups
541
- // -------------------------------------------------------------------------
542
-
543
- async createDatasetGroup(params: CreateDatasetGroupCommandInput): Promise<CreateDatasetGroupCommandOutput> {
544
- return this.request('CreateDatasetGroup', params as unknown as Record<string, unknown>)
545
- }
546
-
547
- async describeDatasetGroup(params: DescribeDatasetGroupCommandInput): Promise<DescribeDatasetGroupCommandOutput> {
548
- return this.request('DescribeDatasetGroup', params as unknown as Record<string, unknown>)
549
- }
550
-
551
- async listDatasetGroups(params?: ListDatasetGroupsCommandInput): Promise<ListDatasetGroupsCommandOutput> {
552
- return this.request('ListDatasetGroups', (params || {}) as unknown as Record<string, unknown>)
553
- }
554
-
555
- // -------------------------------------------------------------------------
556
- // Schemas
557
- // -------------------------------------------------------------------------
558
-
559
- async createSchema(params: CreateSchemaCommandInput): Promise<CreateSchemaCommandOutput> {
560
- return this.request('CreateSchema', params as unknown as Record<string, unknown>)
561
- }
562
-
563
- // -------------------------------------------------------------------------
564
- // Datasets
565
- // -------------------------------------------------------------------------
566
-
567
- async createDataset(params: CreateDatasetCommandInput): Promise<CreateDatasetCommandOutput> {
568
- return this.request('CreateDataset', params as unknown as Record<string, unknown>)
569
- }
570
-
571
- async createDatasetImportJob(params: CreateDatasetImportJobCommandInput): Promise<CreateDatasetImportJobCommandOutput> {
572
- return this.request('CreateDatasetImportJob', params as unknown as Record<string, unknown>)
573
- }
574
-
575
- async describeDatasetImportJob(params: DescribeDatasetImportJobCommandInput): Promise<DescribeDatasetImportJobCommandOutput> {
576
- return this.request('DescribeDatasetImportJob', params as unknown as Record<string, unknown>)
577
- }
578
-
579
- // -------------------------------------------------------------------------
580
- // Solutions
581
- // -------------------------------------------------------------------------
582
-
583
- async createSolution(params: CreateSolutionCommandInput): Promise<CreateSolutionCommandOutput> {
584
- return this.request('CreateSolution', params as unknown as Record<string, unknown>)
585
- }
586
-
587
- async createSolutionVersion(params: CreateSolutionVersionCommandInput): Promise<CreateSolutionVersionCommandOutput> {
588
- return this.request('CreateSolutionVersion', params as unknown as Record<string, unknown>)
589
- }
590
-
591
- async describeSolutionVersion(params: DescribeSolutionVersionCommandInput): Promise<DescribeSolutionVersionCommandOutput> {
592
- return this.request('DescribeSolutionVersion', params as unknown as Record<string, unknown>)
593
- }
594
-
595
- // -------------------------------------------------------------------------
596
- // Campaigns
597
- // -------------------------------------------------------------------------
598
-
599
- async createCampaign(params: CreateCampaignCommandInput): Promise<CreateCampaignCommandOutput> {
600
- return this.request('CreateCampaign', params as unknown as Record<string, unknown>)
601
- }
602
-
603
- async describeCampaign(params: DescribeCampaignCommandInput): Promise<DescribeCampaignCommandOutput> {
604
- return this.request('DescribeCampaign', params as unknown as Record<string, unknown>)
605
- }
606
-
607
- // -------------------------------------------------------------------------
608
- // Recommenders (Domain Datasets)
609
- // -------------------------------------------------------------------------
610
-
611
- async createRecommender(params: CreateRecommenderCommandInput): Promise<CreateRecommenderCommandOutput> {
612
- return this.request('CreateRecommender', params as unknown as Record<string, unknown>)
613
- }
614
-
615
- async describeRecommender(params: DescribeRecommenderCommandInput): Promise<DescribeRecommenderCommandOutput> {
616
- return this.request('DescribeRecommender', params as unknown as Record<string, unknown>)
617
- }
618
-
619
- async listRecommenders(params?: ListRecommendersCommandInput): Promise<ListRecommendersCommandOutput> {
620
- return this.request('ListRecommenders', (params || {}) as unknown as Record<string, unknown>)
621
- }
622
-
623
- // -------------------------------------------------------------------------
624
- // Events & Real-time Data
625
- // -------------------------------------------------------------------------
626
-
627
- async createEventTracker(params: CreateEventTrackerCommandInput): Promise<CreateEventTrackerCommandOutput> {
628
- return this.request('CreateEventTracker', params as unknown as Record<string, unknown>)
629
- }
630
-
631
- async describeEventTracker(params: DescribeEventTrackerCommandInput): Promise<DescribeEventTrackerCommandOutput> {
632
- return this.request('DescribeEventTracker', params as unknown as Record<string, unknown>)
633
- }
634
-
635
- // -------------------------------------------------------------------------
636
- // Filters
637
- // -------------------------------------------------------------------------
638
-
639
- async createFilter(params: CreateFilterCommandInput): Promise<CreateFilterCommandOutput> {
640
- return this.request('CreateFilter', params as unknown as Record<string, unknown>)
641
- }
642
-
643
- // -------------------------------------------------------------------------
644
- // Recipes
645
- // -------------------------------------------------------------------------
646
-
647
- async listRecipes(params?: ListRecipesCommandInput): Promise<ListRecipesCommandOutput> {
648
- return this.request('ListRecipes', (params || {}) as unknown as Record<string, unknown>)
649
- }
650
-
651
- // -------------------------------------------------------------------------
652
- // Convenience Methods
653
- // -------------------------------------------------------------------------
654
-
655
- /**
656
- * Wait for a solution version to be ready
657
- */
658
- async waitForSolutionVersion(
659
- solutionVersionArn: string,
660
- options?: { maxWaitMs?: number; pollIntervalMs?: number },
661
- ): Promise<SolutionVersion> {
662
- const maxWaitMs = options?.maxWaitMs ?? 7200000 // 2 hours
663
- const pollIntervalMs = options?.pollIntervalMs ?? 60000 // 1 minute
664
- const startTime = Date.now()
665
-
666
- while (Date.now() - startTime < maxWaitMs) {
667
- const result = await this.describeSolutionVersion({ solutionVersionArn })
668
- const sv = result.solutionVersion
669
-
670
- if (sv?.status === 'ACTIVE') {
671
- return sv
672
- }
673
- if (sv?.status === 'CREATE FAILED') {
674
- throw new Error(`Solution version failed: ${sv.failureReason}`)
675
- }
676
-
677
- await new Promise(resolve => setTimeout(resolve, pollIntervalMs))
678
- }
679
-
680
- throw new Error(`Timeout waiting for solution version ${solutionVersionArn}`)
681
- }
682
-
683
- /**
684
- * Wait for a campaign to be active
685
- */
686
- async waitForCampaign(
687
- campaignArn: string,
688
- options?: { maxWaitMs?: number; pollIntervalMs?: number },
689
- ): Promise<Campaign> {
690
- const maxWaitMs = options?.maxWaitMs ?? 1800000 // 30 minutes
691
- const pollIntervalMs = options?.pollIntervalMs ?? 30000
692
- const startTime = Date.now()
693
-
694
- while (Date.now() - startTime < maxWaitMs) {
695
- const result = await this.describeCampaign({ campaignArn })
696
- const campaign = result.campaign
697
-
698
- if (campaign?.status === 'ACTIVE') {
699
- return campaign
700
- }
701
- if (campaign?.status === 'CREATE FAILED') {
702
- throw new Error(`Campaign failed: ${campaign.failureReason}`)
703
- }
704
-
705
- await new Promise(resolve => setTimeout(resolve, pollIntervalMs))
706
- }
707
-
708
- throw new Error(`Timeout waiting for campaign ${campaignArn}`)
709
- }
710
-
711
- /**
712
- * Wait for a dataset import job to complete
713
- */
714
- async waitForDatasetImportJob(
715
- jobArn: string,
716
- options?: { maxWaitMs?: number; pollIntervalMs?: number },
717
- ): Promise<DatasetImportJob> {
718
- const maxWaitMs = options?.maxWaitMs ?? 3600000 // 1 hour
719
- const pollIntervalMs = options?.pollIntervalMs ?? 30000
720
- const startTime = Date.now()
721
-
722
- while (Date.now() - startTime < maxWaitMs) {
723
- const result = await this.describeDatasetImportJob({ datasetImportJobArn: jobArn })
724
- const job = result.datasetImportJob
725
-
726
- if (job?.status === 'ACTIVE') {
727
- return job
728
- }
729
- if (job?.status === 'CREATE FAILED') {
730
- throw new Error(`Dataset import job failed: ${job.failureReason}`)
731
- }
732
-
733
- await new Promise(resolve => setTimeout(resolve, pollIntervalMs))
734
- }
735
-
736
- throw new Error(`Timeout waiting for dataset import job ${jobArn}`)
737
- }
738
- }
739
-
740
- // ============================================================================
741
- // Personalize Runtime Client (for getting recommendations)
742
- // ============================================================================
743
-
744
- export class PersonalizeRuntimeClient {
745
- private client: AWSClient
746
- private region: string
747
-
748
- constructor(region: string = 'us-east-1') {
749
- this.region = region
750
- this.client = new AWSClient()
751
- }
752
-
753
- private async request<T>(action: string, params: Record<string, unknown>): Promise<T> {
754
- return this.client.request({
755
- service: 'personalize-runtime',
756
- region: this.region,
757
- method: 'POST',
758
- path: '/',
759
- headers: {
760
- 'Content-Type': 'application/x-amz-json-1.1',
761
- 'X-Amz-Target': `AmazonPersonalizeRuntime.${action}`,
762
- },
763
- body: JSON.stringify(params),
764
- })
765
- }
766
-
767
- /**
768
- * Get recommendations for a user
769
- */
770
- async getRecommendations(params: GetRecommendationsCommandInput): Promise<GetRecommendationsCommandOutput> {
771
- return this.request('GetRecommendations', params as unknown as Record<string, unknown>)
772
- }
773
-
774
- /**
775
- * Get personalized ranking of items for a user
776
- */
777
- async getPersonalizedRanking(params: GetPersonalizedRankingCommandInput): Promise<GetPersonalizedRankingCommandOutput> {
778
- return this.request('GetPersonalizedRanking', params as unknown as Record<string, unknown>)
779
- }
780
-
781
- // -------------------------------------------------------------------------
782
- // Convenience Methods
783
- // -------------------------------------------------------------------------
784
-
785
- /**
786
- * Simple recommendations for a user
787
- */
788
- async recommendForUser(
789
- campaignArn: string,
790
- userId: string,
791
- numResults: number = 10,
792
- ): Promise<string[]> {
793
- const result = await this.getRecommendations({
794
- campaignArn,
795
- userId,
796
- numResults,
797
- })
798
- return result.itemList?.map(i => i.itemId || '').filter(Boolean) || []
799
- }
800
-
801
- /**
802
- * Get similar items
803
- */
804
- async getSimilarItems(
805
- campaignArn: string,
806
- itemId: string,
807
- numResults: number = 10,
808
- ): Promise<string[]> {
809
- const result = await this.getRecommendations({
810
- campaignArn,
811
- itemId,
812
- numResults,
813
- })
814
- return result.itemList?.map(i => i.itemId || '').filter(Boolean) || []
815
- }
816
-
817
- /**
818
- * Rank items for a user
819
- */
820
- async rankItems(
821
- campaignArn: string,
822
- userId: string,
823
- itemIds: string[],
824
- ): Promise<string[]> {
825
- const result = await this.getPersonalizedRanking({
826
- campaignArn,
827
- userId,
828
- inputList: itemIds,
829
- })
830
- return result.personalizedRanking?.map(i => i.itemId || '').filter(Boolean) || []
831
- }
832
- }
833
-
834
- // ============================================================================
835
- // Personalize Events Client
836
- // ============================================================================
837
-
838
- export class PersonalizeEventsClient {
839
- private client: AWSClient
840
- private region: string
841
-
842
- constructor(region: string = 'us-east-1') {
843
- this.region = region
844
- this.client = new AWSClient()
845
- }
846
-
847
- private async request<T>(action: string, params: Record<string, unknown>): Promise<T> {
848
- return this.client.request({
849
- service: 'personalize-events',
850
- region: this.region,
851
- method: 'POST',
852
- path: '/',
853
- headers: {
854
- 'Content-Type': 'application/x-amz-json-1.1',
855
- 'X-Amz-Target': `AmazonPersonalizeEvents.${action}`,
856
- },
857
- body: JSON.stringify(params),
858
- })
859
- }
860
-
861
- /**
862
- * Record user events
863
- */
864
- async putEvents(params: PutEventsCommandInput): Promise<PutEventsCommandOutput> {
865
- return this.request('PutEvents', params as unknown as Record<string, unknown>)
866
- }
867
-
868
- /**
869
- * Add or update items
870
- */
871
- async putItems(params: PutItemsCommandInput): Promise<PutItemsCommandOutput> {
872
- return this.request('PutItems', params as unknown as Record<string, unknown>)
873
- }
874
-
875
- /**
876
- * Add or update users
877
- */
878
- async putUsers(params: PutUsersCommandInput): Promise<PutUsersCommandOutput> {
879
- return this.request('PutUsers', params as unknown as Record<string, unknown>)
880
- }
881
-
882
- // -------------------------------------------------------------------------
883
- // Convenience Methods
884
- // -------------------------------------------------------------------------
885
-
886
- /**
887
- * Track a simple click/view event
888
- */
889
- async trackEvent(
890
- trackingId: string,
891
- sessionId: string,
892
- userId: string,
893
- itemId: string,
894
- eventType: string = 'click',
895
- ): Promise<void> {
896
- await this.putEvents({
897
- trackingId,
898
- sessionId,
899
- userId,
900
- eventList: [
901
- {
902
- eventType,
903
- itemId,
904
- sentAt: new Date().toISOString(),
905
- },
906
- ],
907
- })
908
- }
909
-
910
- /**
911
- * Track a purchase event with value
912
- */
913
- async trackPurchase(
914
- trackingId: string,
915
- sessionId: string,
916
- userId: string,
917
- itemId: string,
918
- value: number,
919
- ): Promise<void> {
920
- await this.putEvents({
921
- trackingId,
922
- sessionId,
923
- userId,
924
- eventList: [
925
- {
926
- eventType: 'purchase',
927
- eventValue: value,
928
- itemId,
929
- sentAt: new Date().toISOString(),
930
- },
931
- ],
932
- })
933
- }
934
- }
935
-
936
- // ============================================================================
937
- // Helper Functions
938
- // ============================================================================
939
-
940
- /**
941
- * Get recommendations for a user
942
- */
943
- export async function getRecommendations(
944
- campaignArn: string,
945
- userId: string,
946
- options?: { numResults?: number; region?: string },
947
- ): Promise<string[]> {
948
- const client = new PersonalizeRuntimeClient(options?.region || 'us-east-1')
949
- return client.recommendForUser(campaignArn, userId, options?.numResults)
950
- }
951
-
952
- /**
953
- * Get similar items
954
- */
955
- export async function getSimilarItems(
956
- campaignArn: string,
957
- itemId: string,
958
- options?: { numResults?: number; region?: string },
959
- ): Promise<string[]> {
960
- const client = new PersonalizeRuntimeClient(options?.region || 'us-east-1')
961
- return client.getSimilarItems(campaignArn, itemId, options?.numResults)
962
- }
963
-
964
- /**
965
- * Track user event
966
- */
967
- export async function trackEvent(
968
- trackingId: string,
969
- sessionId: string,
970
- userId: string,
971
- itemId: string,
972
- eventType: string = 'click',
973
- region?: string,
974
- ): Promise<void> {
975
- const client = new PersonalizeEventsClient(region || 'us-east-1')
976
- await client.trackEvent(trackingId, sessionId, userId, itemId, eventType)
977
- }