issue-sticker 0.12.0 → 0.13.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.
package/headless.d.ts CHANGED
@@ -110,6 +110,12 @@ export interface IssueStickerSummary {
110
110
  * 영상이 없으면 `null`.
111
111
  */
112
112
  video_status?: 'uploading' | 'ready' | 'failed' | null;
113
+ /**
114
+ * 영상 업로드를 끝내 포기한 이유. `video_status` 가 `'failed'` 이고 이유를 알 때만 있습니다.
115
+ * 업로드하는 동안 프로젝트 마스킹 정책이 화면 녹화를 막으면 `'masking_video_excluded'` 이고,
116
+ * 이슈는 영상 없이 남습니다.
117
+ */
118
+ video_failure_reason?: 'masking_video_excluded' | null;
113
119
  /**
114
120
  * 세션 리플레이 업로드 상태. 리플레이가 있는 이슈는 `submitDraft()`·`createIssue()` 직후
115
121
  * `'uploading'` 이고, 업로드가 끝나면 `snapshot.issues` 의 같은 이슈가 `'ready'` 로 바뀝니다.
@@ -177,7 +183,15 @@ export type HeadlessErrorCode =
177
183
  | 'NETWORK_ERROR'
178
184
  | 'CAPTURE_FAILED'
179
185
  | 'VALIDATION_ERROR'
180
- | 'PAYLOAD_TOO_LARGE';
186
+ | 'PAYLOAD_TOO_LARGE'
187
+ /** 워크스페이스 마스킹 정책을 불러오지 못해 이슈를 만들지 않았다. 네트워크를 확인한 뒤 다시 제출한다. */
188
+ | 'MASKING_POLICY_UNAVAILABLE'
189
+ /** 제출 중 프로젝트의 화면 마스킹 규칙이 바뀌었다. 스크린샷·세션 리플레이를 새로 만든 뒤 제출한다. */
190
+ | 'MASKING_POLICY_CHANGED'
191
+ /** 화면 마스킹 규칙의 선택자를 이 브라우저에서 적용할 수 없다. 다시 시도해도 같으므로 워크스페이스 관리자에게 문의한다. */
192
+ | 'MASKING_SELECTOR_UNSUPPORTED'
193
+ /** `createIssue()` 호출 한도(60초에 5건)를 넘었다. 한도 구간이 지난 뒤 다시 호출한다. */
194
+ | 'RATE_LIMITED';
181
195
 
182
196
  export type HeadlessAuthMode = 'public' | 'member';
183
197
  export type HeadlessCaptureMediaMode = 'screenshot' | 'video';
@@ -352,6 +366,11 @@ export interface CreateIssueInput extends SubmitDraftInput {
352
366
  readonly target?: HTMLElement;
353
367
  /** 기본 `'screenshot'`. `'none'`이면 캡처를 건너뛰고 즉시 전송합니다. */
354
368
  readonly media?: 'screenshot' | 'none';
369
+ /**
370
+ * 이슈를 생성하지 않고 `null`로 끝날 때 한 번 호출됩니다. `code`는 `submitDraft()`가 던지는
371
+ * 코드와 같습니다. 이 콜백에서 던진 예외는 `createIssue()` 밖으로 전달되지 않습니다.
372
+ */
373
+ readonly onError?: (error: IssueStickerHeadlessError) => void;
355
374
  }
356
375
 
357
376
  export interface HeadlessClient {
@@ -371,8 +390,14 @@ export interface HeadlessClient {
371
390
  /**
372
391
  * 이슈를 생성하고 바로 돌려줍니다. 녹화 영상·세션 리플레이·웹소켓 로그는 이슈가 생성된 뒤
373
392
  * 따로 업로드되며, 진행은 `snapshot.videoUploads`·`snapshot.attachmentUploads` 로 확인합니다.
393
+ *
394
+ * 프로젝트 마스킹 정책이 화면 녹화를 금지하면 영상 없이 이슈를 생성하고 `videoExcluded: true` 를
395
+ * 함께 돌려줍니다. 마스킹 정책을 적용하지 못해 스크린샷을 한 장이라도 첨부하지 않았으면
396
+ * `screenshotExcluded: true` 를 함께 돌려줍니다.
374
397
  */
375
- submitDraft(input: SubmitDraftInput): Promise<Issue>;
398
+ submitDraft(
399
+ input: SubmitDraftInput
400
+ ): Promise<Issue & { readonly videoExcluded?: boolean; readonly screenshotExcluded?: boolean }>;
376
401
  /** 이슈의 실패한 업로드(영상·세션 리플레이·웹소켓 로그)를 다시 올립니다. */
377
402
  retryVideoUpload(issueId: string): void;
378
403
  /**
@@ -381,11 +406,17 @@ export interface HeadlessClient {
381
406
  *
382
407
  * 실패해도 예외를 던지지 않고 `null`을 돌려줍니다. 이미 오류를 처리하는 자리에서
383
408
  * 부르는 메서드라, 이슈 생성만을 위한 try/catch 를 한 겹 더 쓰지 않아도 됩니다.
384
- * 실패 사유는 콘솔 경고로 남습니다.
409
+ * 실패 사유는 콘솔 경고로 남고, `input.onError`가 있으면 그 에러로 호출됩니다.
385
410
  *
386
411
  * 호출 조건이 잘못 잡히면 이슈가 무한히 쌓이므로 SDK가 60초 5건으로 제한합니다.
412
+ * 넘어선 호출은 `RATE_LIMITED`로 끝납니다.
413
+ *
414
+ * 마스킹 정책을 적용하지 못해 스크린샷을 한 장이라도 첨부하지 않았으면 `screenshotExcluded: true` 를
415
+ * 함께 돌려줍니다.
387
416
  */
388
- createIssue(input: CreateIssueInput): Promise<Issue | null>;
417
+ createIssue(
418
+ input: CreateIssueInput
419
+ ): Promise<(Issue & { readonly screenshotExcluded?: boolean }) | null>;
389
420
  loginAsMember(): Promise<void>;
390
421
  logoutMember(): Promise<void>;
391
422
  destroy(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "issue-sticker",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "IssueSticker SDK - Visual bug tracking widget for web applications",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",