polyv-live-cli 1.1.13 → 1.2.7

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 (140) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/account.commands.js +12 -12
  3. package/dist/commands/account.commands.js.map +1 -1
  4. package/dist/commands/channel.commands.js +31 -31
  5. package/dist/commands/coupon.commands.d.ts +8 -0
  6. package/dist/commands/coupon.commands.d.ts.map +1 -0
  7. package/dist/commands/coupon.commands.js +258 -0
  8. package/dist/commands/coupon.commands.js.map +1 -0
  9. package/dist/commands/index.d.ts +1 -0
  10. package/dist/commands/index.d.ts.map +1 -1
  11. package/dist/commands/index.js +3 -1
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/commands/product.commands.d.ts +10 -0
  14. package/dist/commands/product.commands.d.ts.map +1 -0
  15. package/dist/commands/product.commands.js +398 -0
  16. package/dist/commands/product.commands.js.map +1 -0
  17. package/dist/commands/setup.commands.d.ts +4 -0
  18. package/dist/commands/setup.commands.d.ts.map +1 -0
  19. package/dist/commands/setup.commands.js +132 -0
  20. package/dist/commands/setup.commands.js.map +1 -0
  21. package/dist/commands/stream.commands.d.ts.map +1 -1
  22. package/dist/commands/stream.commands.js +31 -39
  23. package/dist/commands/stream.commands.js.map +1 -1
  24. package/dist/commands/use.commands.js +7 -7
  25. package/dist/commands/use.commands.js.map +1 -1
  26. package/dist/config/account-config.js +1 -1
  27. package/dist/config/account-config.js.map +1 -1
  28. package/dist/config/account-encryption.js +2 -2
  29. package/dist/config/account-encryption.js.map +1 -1
  30. package/dist/config/auth-source-manager.js +2 -2
  31. package/dist/config/auth-source-manager.js.map +1 -1
  32. package/dist/config/config-io.js +4 -4
  33. package/dist/config/config-io.js.map +1 -1
  34. package/dist/config/config-manager.js +1 -1
  35. package/dist/config/config-manager.js.map +1 -1
  36. package/dist/config/config-recovery-manager.js +4 -4
  37. package/dist/config/config-recovery-manager.js.map +1 -1
  38. package/dist/config/config-version-manager.js +1 -1
  39. package/dist/config/config-version-manager.js.map +1 -1
  40. package/dist/config/file-permission-manager.js +2 -2
  41. package/dist/config/file-permission-manager.js.map +1 -1
  42. package/dist/config/layout-manager.js +1 -1
  43. package/dist/config/layout-manager.js.map +1 -1
  44. package/dist/config/secure-account-manager.js +1 -1
  45. package/dist/config/secure-account-manager.js.map +1 -1
  46. package/dist/config/session-state.js +5 -5
  47. package/dist/config/session-state.js.map +1 -1
  48. package/dist/config/theme-manager.js +1 -1
  49. package/dist/config/theme-manager.js.map +1 -1
  50. package/dist/config/validator.js +1 -1
  51. package/dist/config/validator.js.map +1 -1
  52. package/dist/handlers/channel.handler.d.ts.map +1 -1
  53. package/dist/handlers/channel.handler.js +2 -2
  54. package/dist/handlers/channel.handler.js.map +1 -1
  55. package/dist/handlers/coupon.handler.d.ts +54 -0
  56. package/dist/handlers/coupon.handler.d.ts.map +1 -0
  57. package/dist/handlers/coupon.handler.js +258 -0
  58. package/dist/handlers/coupon.handler.js.map +1 -0
  59. package/dist/handlers/product.handler.d.ts +28 -0
  60. package/dist/handlers/product.handler.d.ts.map +1 -0
  61. package/dist/handlers/product.handler.js +182 -0
  62. package/dist/handlers/product.handler.js.map +1 -0
  63. package/dist/handlers/setup.handler.d.ts +30 -0
  64. package/dist/handlers/setup.handler.d.ts.map +1 -0
  65. package/dist/handlers/setup.handler.js +160 -0
  66. package/dist/handlers/setup.handler.js.map +1 -0
  67. package/dist/handlers/stream.handler.d.ts +3 -2
  68. package/dist/handlers/stream.handler.d.ts.map +1 -1
  69. package/dist/handlers/stream.handler.js +3 -2
  70. package/dist/handlers/stream.handler.js.map +1 -1
  71. package/dist/handlers/use.handler.js +2 -2
  72. package/dist/handlers/use.handler.js.map +1 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +17 -4
  75. package/dist/index.js.map +1 -1
  76. package/dist/sdk/client.d.ts +8 -0
  77. package/dist/sdk/client.d.ts.map +1 -0
  78. package/dist/sdk/client.js +37 -0
  79. package/dist/sdk/client.js.map +1 -0
  80. package/dist/sdk/index.d.ts +3 -0
  81. package/dist/sdk/index.d.ts.map +1 -0
  82. package/dist/sdk/index.js +12 -0
  83. package/dist/sdk/index.js.map +1 -0
  84. package/dist/services/{channel.service.d.ts → channel.service.sdk.d.ts} +6 -8
  85. package/dist/services/channel.service.sdk.d.ts.map +1 -0
  86. package/dist/services/channel.service.sdk.js +265 -0
  87. package/dist/services/channel.service.sdk.js.map +1 -0
  88. package/dist/services/index.d.ts +4 -3
  89. package/dist/services/index.d.ts.map +1 -1
  90. package/dist/services/index.js +7 -5
  91. package/dist/services/index.js.map +1 -1
  92. package/dist/services/product.service.sdk.d.ts +22 -0
  93. package/dist/services/product.service.sdk.d.ts.map +1 -0
  94. package/dist/services/product.service.sdk.js +242 -0
  95. package/dist/services/product.service.sdk.js.map +1 -0
  96. package/dist/services/{stream.service.d.ts → stream.service.sdk.d.ts} +4 -12
  97. package/dist/services/stream.service.sdk.d.ts.map +1 -0
  98. package/dist/services/stream.service.sdk.js +265 -0
  99. package/dist/services/stream.service.sdk.js.map +1 -0
  100. package/dist/setup/output-renderer.d.ts +39 -0
  101. package/dist/setup/output-renderer.d.ts.map +1 -0
  102. package/dist/setup/output-renderer.js +151 -0
  103. package/dist/setup/output-renderer.js.map +1 -0
  104. package/dist/setup/resource-handlers.d.ts +13 -0
  105. package/dist/setup/resource-handlers.d.ts.map +1 -0
  106. package/dist/setup/resource-handlers.js +136 -0
  107. package/dist/setup/resource-handlers.js.map +1 -0
  108. package/dist/setup/scene-config-loader.d.ts +52 -0
  109. package/dist/setup/scene-config-loader.d.ts.map +1 -0
  110. package/dist/setup/scene-config-loader.js +275 -0
  111. package/dist/setup/scene-config-loader.js.map +1 -0
  112. package/dist/setup/scene-executor.d.ts +44 -0
  113. package/dist/setup/scene-executor.d.ts.map +1 -0
  114. package/dist/setup/scene-executor.js +162 -0
  115. package/dist/setup/scene-executor.js.map +1 -0
  116. package/dist/setup/variable-resolver.d.ts +16 -0
  117. package/dist/setup/variable-resolver.d.ts.map +1 -0
  118. package/dist/setup/variable-resolver.js +176 -0
  119. package/dist/setup/variable-resolver.js.map +1 -0
  120. package/dist/setup-scenes/e-commerce.yaml +123 -0
  121. package/dist/types/index.d.ts +1 -0
  122. package/dist/types/index.d.ts.map +1 -1
  123. package/dist/types/index.js +1 -0
  124. package/dist/types/index.js.map +1 -1
  125. package/dist/types/product.d.ts +135 -0
  126. package/dist/types/product.d.ts.map +1 -0
  127. package/dist/types/product.js +3 -0
  128. package/dist/types/product.js.map +1 -0
  129. package/dist/utils/auth-diagnostics.js +2 -2
  130. package/dist/utils/auth-diagnostics.js.map +1 -1
  131. package/dist/utils/data-manager.d.ts +3 -3
  132. package/dist/utils/data-manager.d.ts.map +1 -1
  133. package/dist/utils/data-manager.js.map +1 -1
  134. package/package.json +33 -32
  135. package/dist/services/channel.service.d.ts.map +0 -1
  136. package/dist/services/channel.service.js +0 -672
  137. package/dist/services/channel.service.js.map +0 -1
  138. package/dist/services/stream.service.d.ts.map +0 -1
  139. package/dist/services/stream.service.js +0 -489
  140. package/dist/services/stream.service.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ import { ProductListRequest, ProductListItem, ProductAddOptions, ProductAddResult, ProductUpdateOptions, ProductDeleteOptions } from '../types/product';
2
+ import { AuthConfig } from '../types/auth';
3
+ export interface ProductServiceConfig {
4
+ baseUrl: string;
5
+ timeout: number;
6
+ debug: boolean;
7
+ }
8
+ export declare class ProductServiceSdk {
9
+ private readonly config;
10
+ private readonly authConfig;
11
+ constructor(authConfig: AuthConfig, serviceConfig: ProductServiceConfig);
12
+ listProducts(request?: ProductListRequest): Promise<ProductListItem[]>;
13
+ addProduct(options: ProductAddOptions): Promise<ProductAddResult>;
14
+ updateProduct(options: ProductUpdateOptions): Promise<boolean>;
15
+ deleteProduct(options: ProductDeleteOptions): Promise<boolean>;
16
+ private validateListRequest;
17
+ private validateAddOptions;
18
+ private validateUpdateOptions;
19
+ private validateDeleteOptions;
20
+ private handleError;
21
+ }
22
+ //# sourceMappingURL=product.service.sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.service.sdk.d.ts","sourceRoot":"","sources":["../../src/services/product.service.sdk.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAW3C,MAAM,WAAW,oBAAoB;IAEnC,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,OAAO,CAAC;CAChB;AAKD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAO5B,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB;IAUjE,YAAY,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA+C1E,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0DjE,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiD9D,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpE,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,WAAW;CAsCpB"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProductServiceSdk = void 0;
4
+ const errors_1 = require("../utils/errors");
5
+ const sdk_1 = require("../sdk");
6
+ class ProductServiceSdk {
7
+ constructor(authConfig, serviceConfig) {
8
+ this.authConfig = authConfig;
9
+ this.config = serviceConfig;
10
+ }
11
+ async listProducts(request = {}) {
12
+ try {
13
+ this.validateListRequest(request);
14
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
15
+ const pageNumber = request.page ?? 1;
16
+ const pageSize = request.size ?? 20;
17
+ const result = await client.v4User.listProducts({
18
+ pageNumber,
19
+ pageSize,
20
+ });
21
+ if (!result?.contents || result.contents.length === 0) {
22
+ return [];
23
+ }
24
+ let products = result.contents;
25
+ if (request.channelId) {
26
+ products = products.filter((p) => String(p.channelId) === request.channelId);
27
+ }
28
+ return products.map((product) => ({
29
+ productId: String(product.productId),
30
+ channelId: String(product.channelId || ''),
31
+ name: product.name,
32
+ productType: product.productType,
33
+ status: product.status,
34
+ ...(product.price && { price: product.price }),
35
+ ...(product.realPrice && { realPrice: product.realPrice }),
36
+ createdAt: product.createdTime ? new Date(product.createdTime) : new Date(0),
37
+ updatedAt: product.updatedTime ? new Date(product.updatedTime) : new Date(0)
38
+ }));
39
+ }
40
+ catch (error) {
41
+ throw this.handleError(error, 'listProducts');
42
+ }
43
+ }
44
+ async addProduct(options) {
45
+ try {
46
+ this.validateAddOptions(options);
47
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
48
+ const params = {
49
+ channelId: options.channelId,
50
+ name: options.name,
51
+ status: options.status,
52
+ linkType: options.linkType,
53
+ ...(options.productType && { productType: options.productType }),
54
+ ...(options.cover && { cover: options.cover }),
55
+ ...(options.link && { link: options.link }),
56
+ ...(options.pcLink && { pcLink: options.pcLink }),
57
+ ...(options.mobileLink && { mobileLink: options.mobileLink }),
58
+ ...(options.wxMiniprogramLink && { wxMiniprogramLink: options.wxMiniprogramLink }),
59
+ ...(options.wxMiniprogramOriginalId && { wxMiniprogramOriginalId: options.wxMiniprogramOriginalId }),
60
+ ...(options.mobileAppLink && { mobileAppLink: options.mobileAppLink }),
61
+ ...(options.androidLink && { androidLink: options.androidLink }),
62
+ ...(options.iosLink && { iosLink: options.iosLink }),
63
+ ...(options.params && { params: options.params }),
64
+ ...(options.productDesc && { productDesc: options.productDesc }),
65
+ ...(options.features && { features: options.features }),
66
+ ...(options.btnShow && { btnShow: options.btnShow }),
67
+ ...(options.yield && { yield: options.yield }),
68
+ ...(options.originId && { originId: options.originId }),
69
+ ...(options.strategy && { strategy: options.strategy }),
70
+ ...(options.productDetail && { productDetail: options.productDetail }),
71
+ ...(options.ext && { ext: options.ext }),
72
+ ...(options.tagIds && { tagIds: options.tagIds }),
73
+ ...(options.priceType && { priceType: options.priceType }),
74
+ ...(options.realPrice !== undefined && { realPrice: options.realPrice }),
75
+ ...(options.customPrice && { customPrice: options.customPrice }),
76
+ ...(options.originalPriceType && { originalPriceType: options.originalPriceType }),
77
+ ...(options.price !== undefined && { price: options.price }),
78
+ ...(options.customOrignalPrice && { customOrignalPrice: options.customOrignalPrice }),
79
+ };
80
+ const result = await client.channel.addChannelProduct(params);
81
+ return {
82
+ productId: result.productId,
83
+ name: result.name,
84
+ channelId: result.channelId,
85
+ createdTime: result.createdTime
86
+ };
87
+ }
88
+ catch (error) {
89
+ throw this.handleError(error, 'addProduct');
90
+ }
91
+ }
92
+ async updateProduct(options) {
93
+ try {
94
+ this.validateUpdateOptions(options);
95
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
96
+ const params = {
97
+ channelId: options.channelId,
98
+ productId: options.productId,
99
+ name: options.name,
100
+ status: options.status,
101
+ linkType: options.linkType,
102
+ ...(options.cover && { cover: options.cover }),
103
+ ...(options.link && { link: options.link }),
104
+ ...(options.pcLink && { pcLink: options.pcLink }),
105
+ ...(options.mobileLink && { mobileLink: options.mobileLink }),
106
+ ...(options.wxMiniprogramLink && { wxMiniprogramLink: options.wxMiniprogramLink }),
107
+ ...(options.wxMiniprogramOriginalId && { wxMiniprogramOriginalId: options.wxMiniprogramOriginalId }),
108
+ ...(options.mobileAppLink && { mobileAppLink: options.mobileAppLink }),
109
+ ...(options.androidLink && { androidLink: options.androidLink }),
110
+ ...(options.iosLink && { iosLink: options.iosLink }),
111
+ ...(options.params && { params: options.params }),
112
+ ...(options.productDesc && { productDesc: options.productDesc }),
113
+ ...(options.features && { features: options.features }),
114
+ ...(options.btnShow && { btnShow: options.btnShow }),
115
+ ...(options.yield && { yield: options.yield }),
116
+ ...(options.productDetail && { productDetail: options.productDetail }),
117
+ ...(options.ext && { ext: options.ext }),
118
+ ...(options.tagIds && { tagIds: options.tagIds }),
119
+ ...(options.priceType && { priceType: options.priceType }),
120
+ ...(options.realPrice !== undefined && { realPrice: options.realPrice }),
121
+ ...(options.customPrice && { customPrice: options.customPrice }),
122
+ ...(options.originalPriceType && { originalPriceType: options.originalPriceType }),
123
+ ...(options.price !== undefined && { price: options.price }),
124
+ ...(options.customOrignalPrice && { customOrignalPrice: options.customOrignalPrice }),
125
+ };
126
+ return await client.channel.updateChannelProduct(params);
127
+ }
128
+ catch (error) {
129
+ throw this.handleError(error, 'updateProduct');
130
+ }
131
+ }
132
+ async deleteProduct(options) {
133
+ try {
134
+ this.validateDeleteOptions(options);
135
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
136
+ return await client.channel.deleteChannelProduct({
137
+ channelId: options.channelId,
138
+ productId: options.productId
139
+ });
140
+ }
141
+ catch (error) {
142
+ throw this.handleError(error, 'deleteProduct');
143
+ }
144
+ }
145
+ validateListRequest(request) {
146
+ const errors = [];
147
+ if (request.page !== undefined) {
148
+ if (typeof request.page !== 'number' || !Number.isInteger(request.page) || request.page < 1) {
149
+ errors.push('page must be a positive integer (minimum 1)');
150
+ }
151
+ }
152
+ if (request.size !== undefined) {
153
+ if (typeof request.size !== 'number' || !Number.isInteger(request.size) || request.size < 1 || request.size > 100) {
154
+ errors.push('size must be an integer between 1 and 100');
155
+ }
156
+ }
157
+ if (request.channelId !== undefined && (typeof request.channelId !== 'string' || request.channelId.trim().length === 0)) {
158
+ errors.push('channelId must be a non-empty string');
159
+ }
160
+ if (errors.length > 0) {
161
+ throw new errors_1.PolyVValidationError(`Product list request validation failed: ${errors.join(', ')}`, 'request', request, 'validation_failed');
162
+ }
163
+ }
164
+ validateAddOptions(options) {
165
+ const errors = [];
166
+ if (!options.channelId || options.channelId.trim() === '') {
167
+ errors.push('channelId is required');
168
+ }
169
+ if (!options.name || options.name.trim() === '') {
170
+ errors.push('name is required');
171
+ }
172
+ if (options.status === undefined) {
173
+ errors.push('status is required (1 for on-shelf, 2 for off-shelf)');
174
+ }
175
+ else if (![1, 2].includes(options.status)) {
176
+ errors.push('status must be 1 (on-shelf) or 2 (off-shelf)');
177
+ }
178
+ if (options.linkType === undefined) {
179
+ errors.push('linkType is required (10 for universal, 11 for multi-platform)');
180
+ }
181
+ else if (![10, 11].includes(options.linkType)) {
182
+ errors.push('linkType must be 10 (universal) or 11 (multi-platform)');
183
+ }
184
+ if (options.linkType === 10 && (!options.link || options.link.trim() === '')) {
185
+ errors.push('link is required when linkType is 10');
186
+ }
187
+ if (errors.length > 0) {
188
+ throw new errors_1.PolyVValidationError(`Product add options validation failed: ${errors.join(', ')}`, 'options', options, 'validation_failed');
189
+ }
190
+ }
191
+ validateUpdateOptions(options) {
192
+ const errors = [];
193
+ if (!options.channelId || options.channelId.trim() === '') {
194
+ errors.push('channelId is required');
195
+ }
196
+ if (options.productId === undefined) {
197
+ errors.push('productId is required');
198
+ }
199
+ if (options.status !== undefined && ![1, 2].includes(options.status)) {
200
+ errors.push('status must be 1 or 2');
201
+ }
202
+ if (options.linkType !== undefined && ![10, 11].includes(options.linkType)) {
203
+ errors.push('linkType must be 10 or 11');
204
+ }
205
+ if (errors.length > 0) {
206
+ throw new errors_1.PolyVValidationError(`Product update options validation failed: ${errors.join(', ')}`, 'options', options, 'validation_failed');
207
+ }
208
+ }
209
+ validateDeleteOptions(options) {
210
+ const errors = [];
211
+ if (!options.channelId || options.channelId.trim() === '') {
212
+ errors.push('channelId is required');
213
+ }
214
+ if (options.productId === undefined) {
215
+ errors.push('productId is required');
216
+ }
217
+ if (errors.length > 0) {
218
+ throw new errors_1.PolyVValidationError(`Product delete options validation failed: ${errors.join(', ')}`, 'options', options, 'validation_failed');
219
+ }
220
+ }
221
+ handleError(error, operation) {
222
+ if (this.config.debug) {
223
+ console.error(`[ProductServiceSdk] Error in ${operation}:`, error);
224
+ }
225
+ if (error instanceof errors_1.PolyVError || error instanceof errors_1.PolyVAPIError || error instanceof errors_1.PolyVValidationError) {
226
+ return error;
227
+ }
228
+ if (error instanceof Error) {
229
+ const anyError = error;
230
+ if (anyError.polyvCode || anyError.code) {
231
+ return new errors_1.PolyVAPIError(error.message, anyError.code || 'API_ERROR', anyError.status || 500, {
232
+ polyvCode: anyError.polyvCode,
233
+ polyvMessage: anyError.polyvMessage || error.message,
234
+ });
235
+ }
236
+ return new errors_1.PolyVError(`Failed to ${operation}: ${error.message}`, 'PRODUCT_SERVICE_ERROR', 500, { originalError: error.message });
237
+ }
238
+ return new errors_1.PolyVError(`Failed to ${operation}: Unknown error`, 'UNKNOWN_ERROR', 500, { originalError: String(error) });
239
+ }
240
+ }
241
+ exports.ProductServiceSdk = ProductServiceSdk;
242
+ //# sourceMappingURL=product.service.sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.service.sdk.js","sourceRoot":"","sources":["../../src/services/product.service.sdk.ts"],"names":[],"mappings":"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"}
@@ -5,25 +5,17 @@ export interface StreamServiceConfig {
5
5
  timeout: number;
6
6
  debug: boolean;
7
7
  }
8
- export declare class StreamService {
9
- private readonly httpClient;
8
+ export declare class StreamServiceSdk {
10
9
  private readonly config;
11
10
  private readonly authConfig;
12
11
  constructor(authConfig: AuthConfig, serviceConfig: StreamServiceConfig);
13
12
  getStreamKey(request: StreamGetKeyRequest): Promise<StreamCredentials>;
14
- private validateGetStreamKeyRequest;
15
- private createHttpClient;
16
- private transformChannelDataToStreamCredentials;
17
- private transformAxiosError;
18
13
  startStream(request: StreamStartRequest): Promise<StreamStartResponse>;
19
- private validateStartStreamRequest;
20
14
  stopStream(request: StreamStopRequest): Promise<StreamStopResponse>;
21
- private validateStopStreamRequest;
22
15
  getStreamStatus(request: StreamStatusRequest): Promise<StreamStatusInfo>;
23
- private getStreamInfo;
24
- private getChannelBasicInfo;
25
- private validateStreamStatusRequest;
16
+ private validateChannelId;
26
17
  private formatDuration;
27
18
  private formatBandwidth;
19
+ private handleError;
28
20
  }
29
- //# sourceMappingURL=stream.service.d.ts.map
21
+ //# sourceMappingURL=stream.service.sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.service.sdk.d.ts","sourceRoot":"","sources":["../../src/services/stream.service.sdk.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,MAAM,WAAW,mBAAmB;IAElC,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,EAAE,OAAO,CAAC;CAChB;AAKD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAO5B,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB;IAUhE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgDtE,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsCtE,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsCnE,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgJ9E,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,WAAW;CAsCpB"}
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StreamServiceSdk = void 0;
4
+ const errors_1 = require("../utils/errors");
5
+ const sdk_1 = require("../sdk");
6
+ class StreamServiceSdk {
7
+ constructor(authConfig, serviceConfig) {
8
+ this.authConfig = authConfig;
9
+ this.config = serviceConfig;
10
+ }
11
+ async getStreamKey(request) {
12
+ try {
13
+ this.validateChannelId(request.channelId);
14
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
15
+ const channelInfo = await client.v4Channel.getChannel({
16
+ channelId: request.channelId,
17
+ });
18
+ if (!channelInfo.pushUrl || !channelInfo.pushSecret) {
19
+ throw new errors_1.PolyVAPIError('Push URL and secret not available. This may not be a pure video channel or streaming is not configured.', 'STREAM_CREDENTIALS_NOT_AVAILABLE', 400, {
20
+ channelId: request.channelId,
21
+ streamType: channelInfo.streamType,
22
+ template: channelInfo.template
23
+ });
24
+ }
25
+ return {
26
+ channelId: request.channelId,
27
+ rtmpUrl: channelInfo.pushUrl || '',
28
+ streamKey: channelInfo.pushSecret || '',
29
+ deployAddress: '',
30
+ inAddress: '',
31
+ metrics: {
32
+ fps: 0,
33
+ lfr: 0,
34
+ bandwidth: 0
35
+ }
36
+ };
37
+ }
38
+ catch (error) {
39
+ throw this.handleError(error, 'getStreamKey');
40
+ }
41
+ }
42
+ async startStream(request) {
43
+ try {
44
+ this.validateChannelId(request.channelId);
45
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
46
+ const userId = this.authConfig.userId || '';
47
+ if (!userId) {
48
+ throw new errors_1.PolyVValidationError('userId is required to start stream', 'userId', '', 'required');
49
+ }
50
+ await client.channel.setStatusStart({
51
+ channelId: request.channelId,
52
+ userId: userId,
53
+ });
54
+ return {
55
+ code: 200,
56
+ status: 'success',
57
+ message: 'Stream started successfully',
58
+ data: 'success'
59
+ };
60
+ }
61
+ catch (error) {
62
+ throw this.handleError(error, 'startStream');
63
+ }
64
+ }
65
+ async stopStream(request) {
66
+ try {
67
+ this.validateChannelId(request.channelId);
68
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
69
+ const userId = this.authConfig.userId || '';
70
+ if (!userId) {
71
+ throw new errors_1.PolyVValidationError('userId is required to stop stream', 'userId', '', 'required');
72
+ }
73
+ await client.channel.setStatusEnd({
74
+ channelId: request.channelId,
75
+ userId: userId,
76
+ });
77
+ return {
78
+ code: 200,
79
+ status: 'success',
80
+ message: 'Stream stopped successfully',
81
+ data: 'success'
82
+ };
83
+ }
84
+ catch (error) {
85
+ throw this.handleError(error, 'stopStream');
86
+ }
87
+ }
88
+ async getStreamStatus(request) {
89
+ try {
90
+ this.validateChannelId(request.channelId);
91
+ const client = (0, sdk_1.createSdkClient)(this.authConfig, this.config.baseUrl);
92
+ let streamMonitorData = null;
93
+ let streamInfoError;
94
+ try {
95
+ const streamInfo = await client.channel.getStreamInfo({
96
+ channelId: request.channelId,
97
+ });
98
+ streamMonitorData = {
99
+ deployAddress: streamInfo.deployAddress || '',
100
+ inAddress: streamInfo.inAddress || '',
101
+ streamName: streamInfo.streamName || '',
102
+ fps: streamInfo.fps || '0',
103
+ lfr: streamInfo.lfr,
104
+ inBandWidth: streamInfo.inBandWidth || '0',
105
+ retrievedAt: new Date(),
106
+ channelId: request.channelId
107
+ };
108
+ }
109
+ catch (error) {
110
+ if (error instanceof errors_1.PolyVAPIError) {
111
+ streamInfoError = {
112
+ code: error.code || 'STREAM_INFO_ERROR',
113
+ message: error.message
114
+ };
115
+ }
116
+ }
117
+ let channelStatus = 'unknown';
118
+ let statusText = 'Unknown';
119
+ let isLive = false;
120
+ let channelError;
121
+ try {
122
+ const channelInfo = await client.v4Channel.getChannel({
123
+ channelId: request.channelId,
124
+ });
125
+ if (channelInfo && channelInfo.watchStatus) {
126
+ const watchStatus = channelInfo.watchStatus;
127
+ switch (watchStatus) {
128
+ case 'live':
129
+ channelStatus = 'live';
130
+ statusText = 'Live';
131
+ isLive = true;
132
+ break;
133
+ case 'waiting':
134
+ case 'unStart':
135
+ channelStatus = 'waiting';
136
+ statusText = 'Waiting';
137
+ break;
138
+ case 'end':
139
+ case 'playback':
140
+ channelStatus = 'stopped';
141
+ statusText = 'Stopped';
142
+ break;
143
+ case 'banpush':
144
+ channelStatus = 'error';
145
+ statusText = 'Push Banned';
146
+ break;
147
+ default:
148
+ channelStatus = 'unknown';
149
+ statusText = watchStatus || 'Unknown';
150
+ }
151
+ }
152
+ }
153
+ catch (error) {
154
+ channelStatus = 'error';
155
+ statusText = 'Channel Error';
156
+ if (error instanceof errors_1.PolyVAPIError) {
157
+ channelError = {
158
+ code: error.code || 'CHANNEL_ERROR',
159
+ message: error.message
160
+ };
161
+ }
162
+ }
163
+ let duration;
164
+ let durationText;
165
+ if (isLive && streamMonitorData && streamMonitorData.retrievedAt) {
166
+ duration = Date.now() - streamMonitorData.retrievedAt.getTime();
167
+ durationText = this.formatDuration(duration);
168
+ }
169
+ let metrics;
170
+ if (streamMonitorData) {
171
+ const fpsValue = parseFloat(streamMonitorData.fps) || 0;
172
+ const lfrValue = parseFloat(streamMonitorData.lfr || '0') || 0;
173
+ const bandwidthValue = parseFloat(streamMonitorData.inBandWidth) || 0;
174
+ metrics = {
175
+ fps: fpsValue,
176
+ lfr: lfrValue,
177
+ bandwidth: bandwidthValue,
178
+ bandwidthText: this.formatBandwidth(bandwidthValue)
179
+ };
180
+ }
181
+ let network;
182
+ if (streamMonitorData) {
183
+ network = {
184
+ ...(streamMonitorData.deployAddress && { deployAddress: streamMonitorData.deployAddress }),
185
+ ...(streamMonitorData.inAddress && { inAddress: streamMonitorData.inAddress }),
186
+ ...(streamMonitorData.streamName && { streamName: streamMonitorData.streamName })
187
+ };
188
+ }
189
+ let finalError;
190
+ if (channelStatus === 'waiting' && streamInfoError) {
191
+ finalError = streamInfoError;
192
+ }
193
+ else if (channelStatus === 'error') {
194
+ finalError = channelError || streamInfoError;
195
+ }
196
+ return {
197
+ channelId: request.channelId,
198
+ status: channelStatus,
199
+ statusText,
200
+ isLive,
201
+ ...(duration !== undefined && { duration }),
202
+ ...(durationText !== undefined && { durationText }),
203
+ ...(metrics !== undefined && { metrics }),
204
+ ...(network !== undefined && { network }),
205
+ lastUpdated: new Date(),
206
+ ...(finalError !== undefined && { error: finalError })
207
+ };
208
+ }
209
+ catch (error) {
210
+ throw this.handleError(error, 'getStreamStatus');
211
+ }
212
+ }
213
+ validateChannelId(channelId) {
214
+ if (!channelId || typeof channelId !== 'string' || channelId.trim() === '') {
215
+ throw new errors_1.PolyVValidationError('Channel ID cannot be empty', 'channelId', channelId, 'required');
216
+ }
217
+ }
218
+ formatDuration(duration) {
219
+ const seconds = Math.floor(duration / 1000);
220
+ const minutes = Math.floor(seconds / 60);
221
+ const hours = Math.floor(minutes / 60);
222
+ if (hours > 0) {
223
+ return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
224
+ }
225
+ else if (minutes > 0) {
226
+ return `${minutes}m ${seconds % 60}s`;
227
+ }
228
+ else {
229
+ return `${seconds}s`;
230
+ }
231
+ }
232
+ formatBandwidth(bandwidth) {
233
+ if (bandwidth === 0)
234
+ return '0 bps';
235
+ const units = ['bps', 'Kbps', 'Mbps', 'Gbps'];
236
+ let unitIndex = 0;
237
+ let value = bandwidth;
238
+ while (value >= 1024 && unitIndex < units.length - 1) {
239
+ value /= 1024;
240
+ unitIndex++;
241
+ }
242
+ return `${value.toFixed(2)} ${units[unitIndex]}`;
243
+ }
244
+ handleError(error, operation) {
245
+ if (this.config.debug) {
246
+ console.error(`[StreamServiceSdk] Error in ${operation}:`, error);
247
+ }
248
+ if (error instanceof errors_1.PolyVError || error instanceof errors_1.PolyVAPIError || error instanceof errors_1.PolyVValidationError) {
249
+ return error;
250
+ }
251
+ if (error instanceof Error) {
252
+ const anyError = error;
253
+ if (anyError.polyvCode || anyError.code) {
254
+ return new errors_1.PolyVAPIError(error.message, anyError.code || 'API_ERROR', anyError.status || 500, {
255
+ polyvCode: anyError.polyvCode,
256
+ polyvMessage: anyError.polyvMessage || error.message,
257
+ });
258
+ }
259
+ return new errors_1.PolyVError(`Failed to ${operation}: ${error.message}`, 'STREAM_SERVICE_ERROR', 500, { originalError: error.message });
260
+ }
261
+ return new errors_1.PolyVError(`Failed to ${operation}: Unknown error`, 'UNKNOWN_ERROR', 500, { originalError: String(error) });
262
+ }
263
+ }
264
+ exports.StreamServiceSdk = StreamServiceSdk;
265
+ //# sourceMappingURL=stream.service.sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.service.sdk.js","sourceRoot":"","sources":["../../src/services/stream.service.sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { SceneConfig } from './scene-config-loader';
2
+ import { ResourceResult } from './scene-executor';
3
+ import { ResourceOutputs } from './variable-resolver';
4
+ export type OutputFormat = 'table' | 'json';
5
+ export interface RenderOptions {
6
+ format?: OutputFormat | undefined;
7
+ duration?: number | undefined;
8
+ }
9
+ export interface ErrorContext {
10
+ rolledBack?: string[];
11
+ failedAt?: string;
12
+ suggestion?: string;
13
+ }
14
+ export declare class OutputRenderer {
15
+ private readonly resolver;
16
+ private readonly spinnerFrames;
17
+ private spinnerIndex;
18
+ constructor();
19
+ renderSummary(config: SceneConfig, resources: ResourceResult[], options?: RenderOptions): string;
20
+ renderNextSteps(nextSteps: Array<{
21
+ command: string;
22
+ description: string;
23
+ }>, outputs: ResourceOutputs): string;
24
+ renderProgress(event: {
25
+ phase: 'creating' | 'created' | 'rolling_back' | 'rolled_back';
26
+ resourceId: string;
27
+ resourceType: string;
28
+ showSpinner?: boolean;
29
+ current?: number;
30
+ total?: number;
31
+ }): string;
32
+ renderError(error: Error, context?: ErrorContext, options?: RenderOptions): string;
33
+ renderTemplate(template: string, outputs: ResourceOutputs): string;
34
+ renderDryRunOutput(config: SceneConfig, resources: ResourceResult[]): string;
35
+ private renderSummaryTable;
36
+ private renderSummaryJson;
37
+ private getNextSpinnerFrame;
38
+ }
39
+ //# sourceMappingURL=output-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-renderer.d.ts","sourceRoot":"","sources":["../../src/setup/output-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAoB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKxE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAK5C,MAAM,WAAW,aAAa;IAE5B,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAElC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAKD,MAAM,WAAW,YAAY;IAE3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAG5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,YAAY,CAAK;;IAazB,aAAa,CACX,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,cAAc,EAAE,EAC3B,OAAO,GAAE,aAAkB,GAC1B,MAAM;IAcT,eAAe,CACb,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,EAC1D,OAAO,EAAE,eAAe,GACvB,MAAM;IA6BT,cAAc,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;QAC/D,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,MAAM;IAwCV,WAAW,CACT,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,YAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,MAAM;IAsCT,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAUlE,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM;IAuB5E,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,mBAAmB;CAK5B"}