issue-sticker 0.3.0 → 0.4.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/CHANGELOG.md +39 -0
- package/README.md +111 -131
- package/dist/{createLucideIcon-CmSNiW63.js → createLucideIcon-C0Ldhp96.js} +90 -87
- package/dist/{externalUserPayload-hJjuUx6q.js → externalUserPayload-BVNl_35M.js} +2659 -1315
- package/dist/issue-sticker-headless-react.js +129 -72
- package/dist/issue-sticker-headless.js +97 -78
- package/dist/issue-sticker-react.js +2534 -2071
- package/dist/{tooltip-DciWyUWs.js → tooltip-CEc_RGfI.js} +1 -1
- package/headless.d.ts +142 -11
- package/package.json +1 -4
- package/react.d.ts +9 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { h as Presence, n as Portal$1, w as Arrow, D as DismissableLayer, C as Content, y as Root, j as useComposedRefs, t as createPopperScope, i as createContextScope, z as createSlottable, f as useId, e as useControllableState, v as Root2, A as Anchor, P as Primitive, g as composeEventHandlers, b as usePortalContainer, a as cn,
|
|
3
|
+
import { h as Presence, n as Portal$1, w as Arrow, D as DismissableLayer, C as Content, y as Root, j as useComposedRefs, t as createPopperScope, i as createContextScope, z as createSlottable, f as useId, e as useControllableState, v as Root2, A as Anchor, P as Primitive, g as composeEventHandlers, b as usePortalContainer, a as cn, O as OVERLAY_LAYER, s as stopEscapePropagation } from "./createLucideIcon-C0Ldhp96.js";
|
|
4
4
|
var [createTooltipContext] = createContextScope("Tooltip", [
|
|
5
5
|
createPopperScope
|
|
6
6
|
]);
|
package/headless.d.ts
CHANGED
|
@@ -1,11 +1,118 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
// 공개 타입은 이 파일 안에서 닫는다. 내부 패키지(@issue-sticker/shared)를 참조하면 배포
|
|
2
|
+
// tarball 에 없는 모듈을 가리켜 소비자 tsc 가 깨지고, 딸려오는 백엔드 계약 전체가 함께
|
|
3
|
+
// 노출된다. 구현과의 정합은 src/headless/publicTypes.conformance.ts 가 컴파일 타임에 지킨다.
|
|
4
|
+
|
|
5
|
+
export interface IssuePosition {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
selector: string;
|
|
9
|
+
xpath: string;
|
|
10
|
+
viewport?: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
scrollX?: number;
|
|
14
|
+
scrollY?: number;
|
|
15
|
+
};
|
|
16
|
+
elementRect?: {
|
|
17
|
+
left: number;
|
|
18
|
+
top: number;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface NetworkLog {
|
|
25
|
+
url: string;
|
|
26
|
+
method: string;
|
|
27
|
+
statusCode: number;
|
|
28
|
+
timestamp: number;
|
|
29
|
+
type: string;
|
|
30
|
+
duration?: number | null;
|
|
31
|
+
requestHeaders?: Record<string, string> | null;
|
|
32
|
+
responseHeaders?: Record<string, string> | null;
|
|
33
|
+
requestBody?: string | null;
|
|
34
|
+
requestBodySizeBytes?: number | null;
|
|
35
|
+
requestBodyOmittedReason?: string | null;
|
|
36
|
+
responseBody?: string | null;
|
|
37
|
+
responseBodyEncoding?: string | null;
|
|
38
|
+
responseBodySizeBytes?: number | null;
|
|
39
|
+
responseBodyOmittedReason?: string | null;
|
|
40
|
+
responseMimeType?: string | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface ConsoleLog {
|
|
44
|
+
type: 'log' | 'warning' | 'error' | 'info' | 'debug';
|
|
45
|
+
message: string;
|
|
46
|
+
timestamp: number;
|
|
47
|
+
args?: unknown[] | null;
|
|
48
|
+
url?: string | null;
|
|
49
|
+
lineNumber?: number | null;
|
|
50
|
+
columnNumber?: number | null;
|
|
51
|
+
stackTrace?: string | null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** 이슈에 연결된 외부 트래커(Jira·Notion) 매핑. 서비스별 메타데이터는 형태가 서비스에 달려 있어 `unknown` 으로 둔다. */
|
|
55
|
+
export interface IssueExternalMapping {
|
|
56
|
+
id: string;
|
|
57
|
+
external_id: string;
|
|
58
|
+
service_type?: 'JIRA' | 'NOTION';
|
|
59
|
+
exposed_fields?: string[];
|
|
60
|
+
jira_issue_metadata?: unknown;
|
|
61
|
+
notion_page_metadata?: unknown;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** 목록용 이슈. 마커를 그리는 데 필요한 필드만 담는다. */
|
|
65
|
+
export interface IssueStickerSummary {
|
|
66
|
+
id: string;
|
|
67
|
+
project_id: string;
|
|
68
|
+
url: string;
|
|
69
|
+
title: string;
|
|
70
|
+
position: IssuePosition;
|
|
71
|
+
external_user_id?: string | null;
|
|
72
|
+
created_at: string;
|
|
73
|
+
updated_at: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** 상세 조회한 이슈. */
|
|
77
|
+
export interface Issue extends IssueStickerSummary {
|
|
78
|
+
description: string | null;
|
|
79
|
+
screenshot: string | string[] | null;
|
|
80
|
+
video: string | null;
|
|
81
|
+
user_agent: string | null;
|
|
82
|
+
external_user_name: string | null;
|
|
83
|
+
network_logs: NetworkLog[] | null;
|
|
84
|
+
console_logs: ConsoleLog[] | null;
|
|
85
|
+
issue_external_mappings?: IssueExternalMapping[];
|
|
86
|
+
project: { name: string } | null;
|
|
87
|
+
reporter: { display_name: string | null } | null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** 세션 리플레이 첨부 메타. */
|
|
91
|
+
export interface SessionReplayMeta {
|
|
92
|
+
window_seconds: number;
|
|
93
|
+
event_count: number;
|
|
94
|
+
size_bytes: number;
|
|
95
|
+
rrweb_version: string;
|
|
96
|
+
privacy_config_version: string;
|
|
97
|
+
release?: string;
|
|
98
|
+
release_source?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface IssueFilterOption {
|
|
102
|
+
label: string;
|
|
103
|
+
value: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export type IssueFilterGroup =
|
|
107
|
+
| {
|
|
108
|
+
kind: 'custom';
|
|
109
|
+
id: string;
|
|
110
|
+
fieldDefinitionId: string;
|
|
111
|
+
label: string;
|
|
112
|
+
options: IssueFilterOption[];
|
|
113
|
+
}
|
|
114
|
+
| { kind: 'jira'; id: string; fieldName: string; label: string; options: IssueFilterOption[] }
|
|
115
|
+
| { kind: 'notion'; id: string; fieldName: string; label: string; options: IssueFilterOption[] };
|
|
9
116
|
|
|
10
117
|
export type HeadlessPhase =
|
|
11
118
|
| 'initializing'
|
|
@@ -24,7 +131,8 @@ export type HeadlessErrorCode =
|
|
|
24
131
|
| 'MEMBER_AUTH_REQUIRED'
|
|
25
132
|
| 'NETWORK_ERROR'
|
|
26
133
|
| 'CAPTURE_FAILED'
|
|
27
|
-
| 'VALIDATION_ERROR'
|
|
134
|
+
| 'VALIDATION_ERROR'
|
|
135
|
+
| 'PAYLOAD_TOO_LARGE';
|
|
28
136
|
|
|
29
137
|
export type HeadlessAuthMode = 'public' | 'member';
|
|
30
138
|
export type HeadlessCaptureMediaMode = 'screenshot' | 'video';
|
|
@@ -119,10 +227,12 @@ export interface HeadlessSessionReplayState {
|
|
|
119
227
|
}
|
|
120
228
|
|
|
121
229
|
export interface HeadlessSnapshot {
|
|
230
|
+
/** 익스텐션이 이 페이지의 런타임을 소유 중인가. true 면 SDK 는 아무것도 띄우지 않는다. */
|
|
231
|
+
readonly extensionActive: boolean;
|
|
122
232
|
readonly phase: HeadlessPhase;
|
|
123
233
|
readonly auth: HeadlessAuthState;
|
|
124
234
|
readonly issues: readonly IssueStickerSummary[];
|
|
125
|
-
readonly activeIssue:
|
|
235
|
+
readonly activeIssue: Issue | null;
|
|
126
236
|
readonly draft: HeadlessIssueDraft | null;
|
|
127
237
|
readonly videoCapture: HeadlessVideoCaptureState;
|
|
128
238
|
readonly sessionReplay: HeadlessSessionReplayState;
|
|
@@ -131,8 +241,29 @@ export interface HeadlessSnapshot {
|
|
|
131
241
|
readonly error: IssueStickerHeadlessError | null;
|
|
132
242
|
}
|
|
133
243
|
|
|
134
|
-
export interface HeadlessIssueFilters
|
|
244
|
+
export interface HeadlessIssueFilters {
|
|
245
|
+
/** 이슈 발생 URL. `'all'` 이면 URL 조건 없이 조회합니다. */
|
|
246
|
+
url?: string[] | string | 'all';
|
|
247
|
+
/** 이 사용자가 만든 이슈만 조회합니다. */
|
|
135
248
|
externalUserId?: string;
|
|
249
|
+
/** 제목·URL substring 검색. */
|
|
250
|
+
search?: string;
|
|
251
|
+
/** ISO 8601 — 생성일 하한. */
|
|
252
|
+
dateFrom?: string;
|
|
253
|
+
/** ISO 8601 — 생성일 상한. */
|
|
254
|
+
dateTo?: string;
|
|
255
|
+
/** 1-based 페이지 번호. */
|
|
256
|
+
page?: number;
|
|
257
|
+
/** 페이지 크기 (1-500, 기본 100). */
|
|
258
|
+
pageSize?: number;
|
|
259
|
+
/** 커스텀 필드 ID → 선택 값 배열. */
|
|
260
|
+
customFieldValues?: Record<string, string[]>;
|
|
261
|
+
/** Jira 표준 필드 ID(예: `'status'`, `'assignee'`) → 선택 값 배열. */
|
|
262
|
+
jiraFieldValues?: Record<string, string[]>;
|
|
263
|
+
/** Notion 필드 ID → 선택 값 배열. */
|
|
264
|
+
notionFieldValues?: Record<string, string[]>;
|
|
265
|
+
/** 생성일 정렬 순서. 미지정 시 `'desc'`. */
|
|
266
|
+
sortOrder?: 'asc' | 'desc';
|
|
136
267
|
}
|
|
137
268
|
|
|
138
269
|
export interface SubmitDraftInput {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "issue-sticker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "IssueSticker SDK - Visual bug tracking widget for web applications",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|
|
@@ -23,9 +23,6 @@
|
|
|
23
23
|
"require": "./dist/issue-sticker-headless-react.js",
|
|
24
24
|
"default": "./dist/issue-sticker-headless-react.js"
|
|
25
25
|
},
|
|
26
|
-
"./react.js": "./dist/issue-sticker-react.js",
|
|
27
|
-
"./headless.js": "./dist/issue-sticker-headless.js",
|
|
28
|
-
"./headless/react.js": "./dist/issue-sticker-headless-react.js",
|
|
29
26
|
"./package.json": "./package.json"
|
|
30
27
|
},
|
|
31
28
|
"files": [
|
package/react.d.ts
CHANGED
|
@@ -3,7 +3,14 @@ export interface SDKUser {
|
|
|
3
3
|
name: string;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
export type OnboardingTrigger = 'off' | 'onMount'
|
|
6
|
+
export type OnboardingTrigger = 'off' | 'onMount';
|
|
7
|
+
|
|
8
|
+
export type ToolbarCorner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
9
|
+
|
|
10
|
+
export interface ToolbarConfig {
|
|
11
|
+
corner?: ToolbarCorner;
|
|
12
|
+
offset?: { x: number; y: number };
|
|
13
|
+
}
|
|
7
14
|
|
|
8
15
|
export interface SDKConfig {
|
|
9
16
|
apiKey: string;
|
|
@@ -12,6 +19,7 @@ export interface SDKConfig {
|
|
|
12
19
|
useWebWorker?: boolean;
|
|
13
20
|
};
|
|
14
21
|
onboarding?: OnboardingTrigger;
|
|
22
|
+
toolbar?: ToolbarConfig;
|
|
15
23
|
}
|
|
16
24
|
|
|
17
25
|
export type SDKEvent =
|