@cstar.help/js 0.16.1 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,588 +1,6 @@
1
- /** Attachment metadata for community posts and comments (images only, max 5MB each). */
2
- interface CommunityAttachment {
3
- filename: string;
4
- content_type: string;
5
- size_bytes: number;
6
- storage_path: string;
7
- }
8
- /** Configuration for the CommunityClient. */
9
- interface CommunityConfig {
10
- /** Team slug (e.g., 'acme'). Identifies the community to query. */
11
- teamSlug: string;
12
- /**
13
- * Optional publishable key (`pk_test_*` or `pk_live_*`). When provided,
14
- * the client switches data scope to match the key's mode (test vs live).
15
- * Without a key, defaults to live — backwards-compatible with existing
16
- * widget integrations. See `LibraryConfig.publishableKey` for the full
17
- * test/live story.
18
- */
19
- publishableKey?: string;
20
- /** Override the base URL (defaults to https://www.cstar.help). */
21
- baseUrl?: string;
22
- }
23
- /** Parameters for creating a post as an identified customer. */
24
- interface CommunityCreatePostParams {
25
- /** Post title. */
26
- title: string;
27
- /** Post body/content (optional). */
28
- body?: string;
29
- /** Topic UUID to post in. */
30
- topicId: string;
31
- /** Custom field values keyed by field definition ID. */
32
- customFields?: Record<string, string>;
33
- /** Image attachments (max 10, images only, 5MB each). */
34
- attachments?: CommunityAttachment[];
35
- }
36
- /** Parameters for updating a post as the original author. */
37
- interface CommunityUpdatePostParams {
38
- /** Updated post title. */
39
- title?: string;
40
- /** Updated post body/content. */
41
- body?: string;
42
- /** Updated custom field values keyed by field definition ID. */
43
- customFields?: Record<string, string>;
44
- }
45
- /** Parameters for updating a comment as the original author. */
46
- interface CommunityUpdateCommentParams {
47
- /** Updated comment body text. */
48
- body: string;
49
- }
50
- /** Parameters for creating a comment as an identified customer. */
51
- interface CommunityCreateCommentParams {
52
- /** Comment body text. */
53
- body: string;
54
- /** Parent comment ID for replies (optional, 1-level nesting). */
55
- parentCommentId?: string | null;
56
- /** Image attachments (max 5, images only, 5MB each). */
57
- attachments?: CommunityAttachment[];
58
- }
59
- /** Response from creating a post. */
60
- interface CommunityCreatedPost {
61
- id: string;
62
- title: string;
63
- slug: string;
64
- body: string;
65
- status: string;
66
- visibility: string;
67
- voteCount: number;
68
- commentCount: number;
69
- customFields: Record<string, string>;
70
- topicName: string;
71
- topicSlug: string;
72
- authorName: string;
73
- authorAvatar: string;
74
- isTeamMember: boolean;
75
- createdAt: string;
76
- }
77
- /** Response from creating a comment. */
78
- interface CommunityCreatedComment {
79
- id: string;
80
- body: string;
81
- isOfficial: boolean;
82
- voteScore: number;
83
- parentCommentId: string | null;
84
- authorName: string;
85
- authorAvatar: string;
86
- isTeamMember: boolean;
87
- createdAt: string;
88
- }
89
- /** Response from toggling a vote. */
90
- interface CommunityVoteResult {
91
- voted: boolean;
92
- voteCount: number;
93
- }
94
- /** Response from toggling a follow. */
95
- interface CommunityFollowResult {
96
- following: boolean;
97
- }
98
- /** Resolved custom field definition for a topic. */
99
- interface TopicCustomField {
100
- id: string;
101
- label: string;
102
- type: 'text' | 'number' | 'date' | 'select' | 'checkbox' | 'url';
103
- required: boolean;
104
- options?: Array<{
105
- value: string;
106
- label: string;
107
- }>;
108
- defaultValue?: string;
109
- }
110
- /** A discussion topic/category in the community. */
111
- interface CommunityTopic {
112
- id: string;
113
- name: string;
114
- slug: string;
115
- description: string | null;
116
- icon: string;
117
- visibility: 'public' | 'members_only';
118
- sort_order: number;
119
- postCount: number;
120
- customFields: TopicCustomField[];
121
- }
122
- /** A public community post. */
123
- interface CommunityPost {
124
- id: string;
125
- title: string;
126
- slug: string;
127
- body: string;
128
- status: 'open' | 'answered' | 'officially_answered' | 'planned' | 'not_planned' | 'completed' | 'under_review';
129
- visibility: 'public' | 'members_only';
130
- voteCount: number;
131
- commentCount: number;
132
- isPinned: boolean;
133
- isFeatured: boolean;
134
- isLocked: boolean;
135
- commentsEnabled: boolean;
136
- customFields: Record<string, string>;
137
- topicName: string;
138
- topicSlug: string;
139
- authorName: string;
140
- authorAvatar: string;
141
- authorBio: string;
142
- authorPostCount: number;
143
- authorCommentCount: number;
144
- attachments: CommunityAttachment[];
145
- isTeamMember: boolean;
146
- lastActivityAt: string;
147
- createdAt: string;
148
- }
149
- /** A comment on a community post. */
150
- interface CommunityComment {
151
- id: string;
152
- body: string;
153
- isOfficial: boolean;
154
- voteScore: number;
155
- parentCommentId: string | null;
156
- attachments: CommunityAttachment[];
157
- authorName: string;
158
- authorAvatar: string;
159
- authorBio: string;
160
- authorPostCount: number;
161
- authorCommentCount: number;
162
- isTeamMember: boolean;
163
- createdAt: string;
164
- }
165
- /** Parameters for listing posts. */
166
- interface CommunityPostListParams {
167
- /** Filter by topic slug. */
168
- topicSlug?: string;
169
- /** Filter by status. */
170
- status?: string;
171
- /** Sort order (default: 'recent'). */
172
- sort?: 'recent' | 'votes' | 'comments';
173
- /** Max results per page. */
174
- limit?: number;
175
- /** Pagination offset. */
176
- offset?: number;
177
- }
178
- /** Search results. */
179
- interface CommunitySearchResult {
180
- data: CommunityPost[];
181
- count: number;
182
- query: string;
183
- }
184
- /** A single post with its comments. */
185
- interface CommunityPostDetail {
186
- post: CommunityPost;
187
- comments: CommunityComment[];
188
- }
189
-
190
- /**
191
- * Error classes for the cStar SDK.
192
- *
193
- * NEW-v3-01 — Cross-subpath instanceof identity.
194
- *
195
- * Each public subpath (`/library`, `/auth`, `/community`, `/quickhelp`, ...)
196
- * is bundled as a separate tsup entry with `splitting: false`, so each one
197
- * carries its own copy of this module. Without deduplication, errors thrown
198
- * by `LibraryClient` carry the LibraryClient-bundled `CStarError` class —
199
- * not the one a consumer imports from `@cstar.help/js`. That makes
200
- * `instanceof CStarError` checks fail silently, invalidating every "did the
201
- * SDK throw a typed cStar error?" branch in user code.
202
- *
203
- * Fix: register each class on a `Symbol.for(...)` slot of `globalThis`. The
204
- * symbol is realm-shared, so every bundled copy of this module resolves to
205
- * the SAME class identity at runtime — the first copy to load wins, and all
206
- * subsequent copies surface the canonical class via the same slot. The
207
- * inline `Impl` definitions are only used as the seed for the very first
208
- * copy to register. Internal `parseError` / `parsePublicError` reference the
209
- * EXPORTED canonical names so instances they construct also land on the
210
- * canonical class.
211
- */
212
- /** Error type constants matching the cStar API. */
213
- declare const ErrorType: {
214
- readonly AUTHENTICATION_ERROR: "authentication_error";
215
- readonly PERMISSION_ERROR: "permission_error";
216
- readonly INVALID_REQUEST_ERROR: "invalid_request_error";
217
- readonly NOT_FOUND_ERROR: "not_found_error";
218
- readonly CONFLICT_ERROR: "conflict_error";
219
- readonly RATE_LIMIT_ERROR: "rate_limit_error";
220
- readonly FEATURE_NOT_CONFIGURED: "feature_not_configured";
221
- readonly API_ERROR: "api_error";
222
- readonly SERVER_ERROR: "server_error";
223
- };
224
- /** Shape of the error object returned by the cStar API. */
225
- interface ApiErrorBody {
226
- type: string;
227
- code: string;
228
- message: string;
229
- param?: string;
230
- doc_url: string;
231
- request_id?: string;
232
- feature?: string;
233
- enable_url?: string;
234
- }
235
- /** Base error class for all cStar API errors. */
236
- declare const CStarErrorImpl: {
237
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
238
- readonly type: string;
239
- readonly code: string;
240
- readonly param?: string;
241
- readonly docUrl: string;
242
- readonly requestId?: string;
243
- readonly statusCode: number;
244
- name: string;
245
- message: string;
246
- stack?: string;
247
- };
248
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
249
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
250
- stackTraceLimit: number;
251
- };
252
- declare const CStarAuthenticationErrorImpl: {
253
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
254
- readonly type: string;
255
- readonly code: string;
256
- readonly param?: string;
257
- readonly docUrl: string;
258
- readonly requestId?: string;
259
- readonly statusCode: number;
260
- name: string;
261
- message: string;
262
- stack?: string;
263
- };
264
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
265
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
266
- stackTraceLimit: number;
267
- };
268
- declare const CStarRateLimitErrorImpl: {
269
- new (messageOrStatus: string | number, body?: ApiErrorBody, retryAfter?: number): {
270
- readonly retryAfter: number;
271
- readonly type: string;
272
- readonly code: string;
273
- readonly param?: string;
274
- readonly docUrl: string;
275
- readonly requestId?: string;
276
- readonly statusCode: number;
277
- name: string;
278
- message: string;
279
- stack?: string;
280
- };
281
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
282
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
283
- stackTraceLimit: number;
284
- };
285
- declare const CStarNotFoundErrorImpl: {
286
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
287
- readonly type: string;
288
- readonly code: string;
289
- readonly param?: string;
290
- readonly docUrl: string;
291
- readonly requestId?: string;
292
- readonly statusCode: number;
293
- name: string;
294
- message: string;
295
- stack?: string;
296
- };
297
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
298
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
299
- stackTraceLimit: number;
300
- };
301
- declare const CStarValidationErrorImpl: {
302
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
303
- readonly type: string;
304
- readonly code: string;
305
- readonly param?: string;
306
- readonly docUrl: string;
307
- readonly requestId?: string;
308
- readonly statusCode: number;
309
- name: string;
310
- message: string;
311
- stack?: string;
312
- };
313
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
314
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
315
- stackTraceLimit: number;
316
- };
317
- declare const CStarPermissionErrorImpl: {
318
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
319
- readonly type: string;
320
- readonly code: string;
321
- readonly param?: string;
322
- readonly docUrl: string;
323
- readonly requestId?: string;
324
- readonly statusCode: number;
325
- name: string;
326
- message: string;
327
- stack?: string;
328
- };
329
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
330
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
331
- stackTraceLimit: number;
332
- };
333
- declare const CStarConflictErrorImpl: {
334
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
335
- readonly type: string;
336
- readonly code: string;
337
- readonly param?: string;
338
- readonly docUrl: string;
339
- readonly requestId?: string;
340
- readonly statusCode: number;
341
- name: string;
342
- message: string;
343
- stack?: string;
344
- };
345
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
346
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
347
- stackTraceLimit: number;
348
- };
349
- declare const CStarServerErrorImpl: {
350
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
351
- readonly type: string;
352
- readonly code: string;
353
- readonly param?: string;
354
- readonly docUrl: string;
355
- readonly requestId?: string;
356
- readonly statusCode: number;
357
- name: string;
358
- message: string;
359
- stack?: string;
360
- };
361
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
362
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
363
- stackTraceLimit: number;
364
- };
365
- declare const CStarFeatureDisabledErrorImpl: {
366
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
367
- readonly feature: string;
368
- readonly enableUrl: string;
369
- readonly type: string;
370
- readonly code: string;
371
- readonly param?: string;
372
- readonly docUrl: string;
373
- readonly requestId?: string;
374
- readonly statusCode: number;
375
- name: string;
376
- message: string;
377
- stack?: string;
378
- };
379
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
380
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
381
- stackTraceLimit: number;
382
- };
383
- declare const CStarRealtimeUnavailableErrorImpl: {
384
- new (message?: string): {
385
- readonly type: string;
386
- readonly code: string;
387
- readonly param?: string;
388
- readonly docUrl: string;
389
- readonly requestId?: string;
390
- readonly statusCode: number;
391
- name: string;
392
- message: string;
393
- stack?: string;
394
- };
395
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
396
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
397
- stackTraceLimit: number;
398
- };
399
- declare const CStarError: {
400
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
401
- readonly type: string;
402
- readonly code: string;
403
- readonly param?: string;
404
- readonly docUrl: string;
405
- readonly requestId?: string;
406
- readonly statusCode: number;
407
- name: string;
408
- message: string;
409
- stack?: string;
410
- };
411
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
412
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
413
- stackTraceLimit: number;
414
- };
415
- type CStarError = InstanceType<typeof CStarErrorImpl>;
416
- declare const CStarAuthenticationError: {
417
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
418
- readonly type: string;
419
- readonly code: string;
420
- readonly param?: string;
421
- readonly docUrl: string;
422
- readonly requestId?: string;
423
- readonly statusCode: number;
424
- name: string;
425
- message: string;
426
- stack?: string;
427
- };
428
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
429
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
430
- stackTraceLimit: number;
431
- };
432
- type CStarAuthenticationError = InstanceType<typeof CStarAuthenticationErrorImpl>;
433
- declare const CStarRateLimitError: {
434
- new (messageOrStatus: string | number, body?: ApiErrorBody, retryAfter?: number): {
435
- readonly retryAfter: number;
436
- readonly type: string;
437
- readonly code: string;
438
- readonly param?: string;
439
- readonly docUrl: string;
440
- readonly requestId?: string;
441
- readonly statusCode: number;
442
- name: string;
443
- message: string;
444
- stack?: string;
445
- };
446
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
447
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
448
- stackTraceLimit: number;
449
- };
450
- type CStarRateLimitError = InstanceType<typeof CStarRateLimitErrorImpl>;
451
- declare const CStarNotFoundError: {
452
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
453
- readonly type: string;
454
- readonly code: string;
455
- readonly param?: string;
456
- readonly docUrl: string;
457
- readonly requestId?: string;
458
- readonly statusCode: number;
459
- name: string;
460
- message: string;
461
- stack?: string;
462
- };
463
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
464
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
465
- stackTraceLimit: number;
466
- };
467
- type CStarNotFoundError = InstanceType<typeof CStarNotFoundErrorImpl>;
468
- declare const CStarValidationError: {
469
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
470
- readonly type: string;
471
- readonly code: string;
472
- readonly param?: string;
473
- readonly docUrl: string;
474
- readonly requestId?: string;
475
- readonly statusCode: number;
476
- name: string;
477
- message: string;
478
- stack?: string;
479
- };
480
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
481
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
482
- stackTraceLimit: number;
483
- };
484
- type CStarValidationError = InstanceType<typeof CStarValidationErrorImpl>;
485
- declare const CStarPermissionError: {
486
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
487
- readonly type: string;
488
- readonly code: string;
489
- readonly param?: string;
490
- readonly docUrl: string;
491
- readonly requestId?: string;
492
- readonly statusCode: number;
493
- name: string;
494
- message: string;
495
- stack?: string;
496
- };
497
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
498
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
499
- stackTraceLimit: number;
500
- };
501
- type CStarPermissionError = InstanceType<typeof CStarPermissionErrorImpl>;
502
- declare const CStarConflictError: {
503
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
504
- readonly type: string;
505
- readonly code: string;
506
- readonly param?: string;
507
- readonly docUrl: string;
508
- readonly requestId?: string;
509
- readonly statusCode: number;
510
- name: string;
511
- message: string;
512
- stack?: string;
513
- };
514
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
515
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
516
- stackTraceLimit: number;
517
- };
518
- type CStarConflictError = InstanceType<typeof CStarConflictErrorImpl>;
519
- declare const CStarServerError: {
520
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
521
- readonly type: string;
522
- readonly code: string;
523
- readonly param?: string;
524
- readonly docUrl: string;
525
- readonly requestId?: string;
526
- readonly statusCode: number;
527
- name: string;
528
- message: string;
529
- stack?: string;
530
- };
531
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
532
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
533
- stackTraceLimit: number;
534
- };
535
- type CStarServerError = InstanceType<typeof CStarServerErrorImpl>;
536
- declare const CStarFeatureDisabledError: {
537
- new (messageOrStatus: string | number, body?: ApiErrorBody): {
538
- readonly feature: string;
539
- readonly enableUrl: string;
540
- readonly type: string;
541
- readonly code: string;
542
- readonly param?: string;
543
- readonly docUrl: string;
544
- readonly requestId?: string;
545
- readonly statusCode: number;
546
- name: string;
547
- message: string;
548
- stack?: string;
549
- };
550
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
551
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
552
- stackTraceLimit: number;
553
- };
554
- type CStarFeatureDisabledError = InstanceType<typeof CStarFeatureDisabledErrorImpl>;
555
- declare const CStarRealtimeUnavailableError: {
556
- new (message?: string): {
557
- readonly type: string;
558
- readonly code: string;
559
- readonly param?: string;
560
- readonly docUrl: string;
561
- readonly requestId?: string;
562
- readonly statusCode: number;
563
- name: string;
564
- message: string;
565
- stack?: string;
566
- };
567
- captureStackTrace(targetObject: object, constructorOpt?: Function): void;
568
- prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
569
- stackTraceLimit: number;
570
- };
571
- type CStarRealtimeUnavailableError = InstanceType<typeof CStarRealtimeUnavailableErrorImpl>;
572
- /**
573
- * Parse a public-route response (anonymous LibraryClient, CommunityClient,
574
- * QuickHelpClient, AuthClient) into a typed `CStarError`.
575
- *
576
- * Public routes don't always emit the structured `{error: {type, code,
577
- * doc_url, ...}}` envelope — many emit `{error: 'message string'}` or
578
- * `{message: '...'}`. This helper normalizes both shapes and dispatches
579
- * on HTTP status (closes F-026 and F-034 — Library/Auth used to throw
580
- * plain `Error`).
581
- */
582
- declare function parsePublicError(status: number, body: unknown, fallbackMessage: string): CStarError;
583
- declare function parseError(statusCode: number, body: {
584
- error?: ApiErrorBody;
585
- } | null, retryAfter?: number): CStarError;
1
+ import { h as CommunityConfig, i as CommunityTopic, j as CommunityPostListParams, k as CommunityPost, l as CommunityPostDetail, m as CommunitySearchResult, C as CommunityCreatePostParams, a as CommunityCreatedPost, b as CommunityUpdatePostParams, c as CommunityUpdateCommentParams, d as CommunityCreatedComment, e as CommunityVoteResult, f as CommunityCreateCommentParams, g as CommunityFollowResult } from '../types-DF7GprCV.cjs';
2
+ export { n as CommunityComment } from '../types-DF7GprCV.cjs';
3
+ export { A as ApiErrorBody, C as CStarAuthenticationError, a as CStarConflictError, b as CStarError, c as CStarFeatureDisabledError, d as CStarNotFoundError, e as CStarPermissionError, f as CStarRateLimitError, g as CStarRealtimeUnavailableError, h as CStarServerError, i as CStarValidationError, E as ErrorType, p as parseError, j as parsePublicError } from '../errors-b5A4wfAg.cjs';
586
4
 
587
5
  /**
588
6
  * Public community client. No authentication required.
@@ -688,4 +106,4 @@ declare class CommunityClient {
688
106
  private fetch;
689
107
  }
690
108
 
691
- export { type ApiErrorBody, CStarAuthenticationError, CStarConflictError, CStarError, CStarFeatureDisabledError, CStarNotFoundError, CStarPermissionError, CStarRateLimitError, CStarRealtimeUnavailableError, CStarServerError, CStarValidationError, CommunityClient, type CommunityComment, type CommunityConfig, type CommunityCreateCommentParams, type CommunityCreatePostParams, type CommunityCreatedComment, type CommunityCreatedPost, type CommunityFollowResult, type CommunityPost, type CommunityPostDetail, type CommunityPostListParams, type CommunitySearchResult, type CommunityTopic, type CommunityUpdateCommentParams, type CommunityUpdatePostParams, type CommunityVoteResult, ErrorType, parseError, parsePublicError };
109
+ export { CommunityClient, CommunityConfig, CommunityCreateCommentParams, CommunityCreatePostParams, CommunityCreatedComment, CommunityCreatedPost, CommunityFollowResult, CommunityPost, CommunityPostDetail, CommunityPostListParams, CommunitySearchResult, CommunityTopic, CommunityUpdateCommentParams, CommunityUpdatePostParams, CommunityVoteResult };