@coxwave/tap-kit-types 1.0.3 → 2.0.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/dist/index.d.ts +1025 -76
- package/dist/index.js +88 -20
- package/dist/index.js.map +1 -1
- package/package.json +15 -3
package/dist/index.js
CHANGED
|
@@ -132,19 +132,68 @@ var TapKitIframeError = class _TapKitIframeError extends TapKitError {
|
|
|
132
132
|
return null;
|
|
133
133
|
}
|
|
134
134
|
};
|
|
135
|
-
var
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
135
|
+
var MaterialViewerError = class _MaterialViewerError extends TapKitError {
|
|
136
|
+
constructor(message, materialId, options) {
|
|
137
|
+
super(message, options);
|
|
138
|
+
__publicField(this, "materialId");
|
|
139
|
+
this.name = "MaterialViewerError";
|
|
140
|
+
this.materialId = materialId;
|
|
141
|
+
this.code = options?.code ?? "ERR_MATERIAL_VIEWER";
|
|
142
|
+
}
|
|
143
|
+
static fromPossibleFrameSafeError(error) {
|
|
144
|
+
if (error instanceof _MaterialViewerError) {
|
|
145
|
+
return error;
|
|
146
|
+
}
|
|
147
|
+
if (error && typeof error === "object" && TAP_ERROR_MARKER in error && error[TAP_ERROR_MARKER] === "MaterialViewerError") {
|
|
148
|
+
const err = new _MaterialViewerError(
|
|
149
|
+
error.message,
|
|
150
|
+
error.materialId || "unknown",
|
|
151
|
+
{
|
|
152
|
+
code: error.code
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
err.stack = error.stack;
|
|
156
|
+
return err;
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
// src/protocol/alarm.ts
|
|
163
|
+
var ALARM_DURATION = 18e3;
|
|
164
|
+
var CSSStyleSchema = v.record(
|
|
165
|
+
v.string(),
|
|
166
|
+
v.union([v.string(), v.number()])
|
|
167
|
+
);
|
|
168
|
+
var AlarmElementPropsSchema = v.object({
|
|
169
|
+
style: v.optional(CSSStyleSchema),
|
|
170
|
+
className: v.optional(v.string()),
|
|
171
|
+
id: v.optional(v.string()),
|
|
172
|
+
src: v.optional(v.string()),
|
|
173
|
+
alt: v.optional(v.string()),
|
|
174
|
+
href: v.optional(v.string()),
|
|
175
|
+
target: v.optional(v.string()),
|
|
176
|
+
type: v.optional(v.string()),
|
|
177
|
+
placeholder: v.optional(v.string()),
|
|
178
|
+
value: v.optional(v.string()),
|
|
179
|
+
disabled: v.optional(v.boolean())
|
|
180
|
+
});
|
|
181
|
+
var AlarmElementSchema = v.lazy(
|
|
182
|
+
() => v.object({
|
|
183
|
+
tag: v.string(),
|
|
184
|
+
props: v.optional(AlarmElementPropsSchema),
|
|
185
|
+
children: v.optional(v.array(v.union([AlarmElementSchema, v.string()]))),
|
|
186
|
+
payload: v.optional(
|
|
187
|
+
v.object({
|
|
188
|
+
message: v.string(),
|
|
189
|
+
pingMessageId: v.optional(v.string())
|
|
190
|
+
})
|
|
191
|
+
)
|
|
192
|
+
})
|
|
193
|
+
);
|
|
142
194
|
var AlarmMessageInstanceSchema = v.object({
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
pingMessageId: v.optional(v.string()),
|
|
146
|
-
type: AlarmTypeSchema,
|
|
147
|
-
priority: v.number()
|
|
195
|
+
content: AlarmElementSchema,
|
|
196
|
+
duration: v.optional(v.number())
|
|
148
197
|
});
|
|
149
198
|
var TapReadySchema = v.object({
|
|
150
199
|
type: v.literal("tap:ready"),
|
|
@@ -176,13 +225,27 @@ var PopUpOpenSchema = v.object({
|
|
|
176
225
|
var PopUpCloseSchema = v.object({
|
|
177
226
|
type: v.literal("popUp:close")
|
|
178
227
|
});
|
|
179
|
-
var
|
|
180
|
-
type: v.literal("
|
|
228
|
+
var MaterialViewOpenSchema = v.object({
|
|
229
|
+
type: v.literal("material:view:open"),
|
|
230
|
+
materialId: v.string(),
|
|
231
|
+
presignedUrl: v.string(),
|
|
232
|
+
pageStart: v.number(),
|
|
233
|
+
pageEnd: v.number(),
|
|
181
234
|
nonce: v.optional(v.union([v.string(), v.number()]))
|
|
182
235
|
});
|
|
183
|
-
var
|
|
184
|
-
type: v.literal("
|
|
185
|
-
|
|
236
|
+
var MaterialViewCloseSchema = v.object({
|
|
237
|
+
type: v.literal("material:view:close")
|
|
238
|
+
});
|
|
239
|
+
var MaterialViewErrorSchema = v.object({
|
|
240
|
+
type: v.literal("material:view:error"),
|
|
241
|
+
materialId: v.string(),
|
|
242
|
+
error: v.union([
|
|
243
|
+
v.literal("fetch_failed"),
|
|
244
|
+
v.literal("expired_url"),
|
|
245
|
+
v.literal("extraction_failed"),
|
|
246
|
+
v.literal("unknown")
|
|
247
|
+
]),
|
|
248
|
+
message: v.optional(v.string())
|
|
186
249
|
});
|
|
187
250
|
var ContainerModeChangeSchema = v.object({
|
|
188
251
|
type: v.literal("container:mode:change"),
|
|
@@ -230,6 +293,7 @@ var ConfigUpdateSchema = v.object({
|
|
|
230
293
|
courseId: v.optional(v.string()),
|
|
231
294
|
clipId: v.optional(v.string()),
|
|
232
295
|
clipPlayHead: v.optional(v.number()),
|
|
296
|
+
inline: v.optional(v.boolean()),
|
|
233
297
|
container: v.optional(
|
|
234
298
|
v.object({
|
|
235
299
|
mode: v.optional(
|
|
@@ -276,8 +340,9 @@ var TapMessageSchema = v.union([
|
|
|
276
340
|
AlarmFadeInSchema,
|
|
277
341
|
PopUpOpenSchema,
|
|
278
342
|
PopUpCloseSchema,
|
|
279
|
-
|
|
280
|
-
|
|
343
|
+
MaterialViewOpenSchema,
|
|
344
|
+
MaterialViewCloseSchema,
|
|
345
|
+
MaterialViewErrorSchema,
|
|
281
346
|
ContainerModeChangeSchema,
|
|
282
347
|
ContainerModeChangeAckSchema,
|
|
283
348
|
ContainerLayoutStateChangedSchema,
|
|
@@ -286,6 +351,9 @@ var TapMessageSchema = v.union([
|
|
|
286
351
|
GAEventSchema
|
|
287
352
|
]);
|
|
288
353
|
|
|
289
|
-
|
|
354
|
+
// src/tap-button.d.ts
|
|
355
|
+
var TAP_BUTTON_CLICK_EVENT = "tap-button:click";
|
|
356
|
+
|
|
357
|
+
export { ALARM_DURATION, AlarmClickSchema, AlarmElementPropsSchema, AlarmElementSchema, AlarmFadeInSchema, AlarmMessageInstanceSchema, CSSStyleSchema, ConfigUpdateSchema, ContainerLayoutStateChangedSchema, ContainerModeChangeAckSchema, ContainerModeChangeSchema, GAEventSchema, TapKitInitializationError as InitializationError, MaterialViewCloseSchema, MaterialViewErrorSchema, MaterialViewOpenSchema, MaterialViewerError, PopUpCloseSchema, PopUpOpenSchema, TAP_BUTTON_CLICK_EVENT, TAP_ERROR_MARKER, TapCloseSchema, TapKitConfigurationError, TapKitError, TapKitIframeError, TapKitInitializationError, TapKitLoaderError, TapKitMessageError, TapMessageSchema, TapReadySchema, TimelineSeekSchema, ViewportResizeSchema };
|
|
290
358
|
//# sourceMappingURL=index.js.map
|
|
291
359
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/protocol/schema.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error Classes\n */\n\nexport const TAP_ERROR_MARKER = \"__tap_sdk_error__\";\n\nexport interface TapErrorOptions {\n code?: string;\n cause?: Error;\n}\n\n/**\n * Base error class for all TapKit errors\n * Supports serialization across iframe boundaries\n */\nexport class TapKitError extends Error {\n override cause: Error | undefined;\n code: string | undefined;\n\n constructor(message: string, options?: TapErrorOptions) {\n super(message);\n this.name = \"TapKitError\";\n this.code = options?.code;\n this.cause = options?.cause;\n }\n\n /**\n * Restore error from postMessage serialization\n */\n static fromPossibleFrameSafeError(error: any): TapKitError | null {\n if (error instanceof TapKitError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitError\"\n ) {\n const err = new TapKitError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when SDK initialization fails\n */\nexport class TapKitInitializationError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitInitializationError\";\n this.code = options?.code ?? \"ERR_INITIALIZATION\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitInitializationError | null {\n if (error instanceof TapKitInitializationError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitInitializationError\"\n ) {\n const err = new TapKitInitializationError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when message communication fails\n */\nexport class TapKitMessageError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitMessageError\";\n this.code = options?.code ?? \"ERR_MESSAGE\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitMessageError | null {\n if (error instanceof TapKitMessageError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitMessageError\"\n ) {\n const err = new TapKitMessageError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when configuration is invalid\n */\nexport class TapKitConfigurationError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitConfigurationError\";\n this.code = options?.code ?? \"ERR_CONFIGURATION\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitConfigurationError | null {\n if (error instanceof TapKitConfigurationError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitConfigurationError\"\n ) {\n const err = new TapKitConfigurationError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when loader fails to fetch or load resources\n */\nexport class TapKitLoaderError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitLoaderError\";\n this.code = options?.code ?? \"ERR_LOADER\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitLoaderError | null {\n if (error instanceof TapKitLoaderError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitLoaderError\"\n ) {\n const err = new TapKitLoaderError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when iframe operations fail\n */\nexport class TapKitIframeError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitIframeError\";\n this.code = options?.code ?? \"ERR_IFRAME\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitIframeError | null {\n if (error instanceof TapKitIframeError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitIframeError\"\n ) {\n const err = new TapKitIframeError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n// Backward compatibility alias\nexport { TapKitInitializationError as InitializationError };\n","import * as v from \"valibot\";\n\n// Alarm-related schemas\nexport const AlarmTypeSchema = v.union([\n v.literal(\"quiz\"),\n v.literal(\"pingMessage\"),\n v.literal(\"callToAction\"),\n v.literal(\"hourSpent\"),\n v.literal(\"default\"),\n]);\n\nexport const AlarmMessageInstanceSchema = v.object({\n message: v.string(),\n question: v.optional(v.string()),\n pingMessageId: v.optional(v.string()),\n type: AlarmTypeSchema,\n priority: v.number(),\n});\n\n// Validation schemas for each message type\nexport const TapReadySchema = v.object({\n type: v.literal(\"tap:ready\"),\n gaId: v.string(),\n});\n\nexport const TapCloseSchema = v.object({\n type: v.literal(\"tap:close\"),\n});\n\nexport const TimelineSeekSchema = v.object({\n type: v.literal(\"timeline:seek\"),\n clipId: v.string(),\n clipPlayHead: v.number(),\n});\n\nexport const AlarmClickSchema = v.object({\n type: v.literal(\"alarm:click\"),\n messageInfo: AlarmMessageInstanceSchema,\n});\n\nexport const AlarmFadeInSchema = v.object({\n type: v.literal(\"alarm:fadeIn\"),\n messageInfo: AlarmMessageInstanceSchema,\n});\n\nexport const PopUpOpenSchema = v.object({\n type: v.literal(\"popUp:open\"),\n popUpInfo: v.object({\n html: v.string(),\n requestId: v.optional(v.string()),\n }),\n});\n\nexport const PopUpCloseSchema = v.object({\n type: v.literal(\"popUp:close\"),\n});\n\nexport const ContainerExpandSchema = v.object({\n type: v.literal(\"container:expand\"),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerCollapseSchema = v.object({\n type: v.literal(\"container:collapse\"),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerModeChangeSchema = v.object({\n type: v.literal(\"container:mode:change\"),\n mode: v.union([v.literal(\"floating\"), v.literal(\"sidebar\")]),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerModeChangeAckSchema = v.object({\n type: v.literal(\"container:mode:change:ack\"),\n success: v.boolean(),\n currentMode: v.union([\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n v.literal(\"floating-forced\"),\n ]),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerLayoutStateChangedSchema = v.object({\n type: v.literal(\"container:layout:state:changed\"),\n layoutState: v.union([\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n v.literal(\"floating-forced\"),\n ]),\n});\n\nexport const ViewportResizeSchema = v.object({\n type: v.literal(\"viewport:resize\"),\n viewportWidth: v.number(),\n});\n\nexport const ConfigUpdateSchema = v.object({\n type: v.literal(\"config:update\"),\n apiKey: v.optional(v.string()),\n hostOrigin: v.optional(v.string()),\n tapUrl: v.optional(v.string()),\n apiUrl: v.optional(v.string()),\n environment: v.optional(\n v.union([\n v.literal(\"dev\"),\n v.literal(\"prod\"),\n v.literal(\"demo\"),\n v.literal(\"staging\"),\n ]),\n ),\n language: v.optional(v.string()),\n userId: v.optional(v.string()),\n courseId: v.optional(v.string()),\n clipId: v.optional(v.string()),\n clipPlayHead: v.optional(v.number()),\n container: v.optional(\n v.object({\n mode: v.optional(\n v.union([\n v.literal(\"auto\"),\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n ]),\n ),\n floatingConfig: v.optional(\n v.object({\n position: v.optional(\n v.object({\n top: v.optional(v.string()),\n left: v.optional(v.string()),\n right: v.optional(v.string()),\n bottom: v.optional(v.string()),\n }),\n ),\n width: v.optional(v.string()),\n height: v.optional(v.string()),\n borderRadius: v.optional(v.string()),\n }),\n ),\n sidebarConfig: v.optional(\n v.object({\n maxWidth: v.optional(v.string()),\n minViewportWidth: v.optional(v.number()),\n }),\n ),\n }),\n ),\n});\n\n// Google Analytics event schema\nexport const GAEventSchema = v.object({\n type: v.literal(\"GA_EVENT\"),\n payload: v.record(v.string(), v.any()), // 유연한 payload 구조\n});\n\n// Union schema for all TAP protocol messages\nexport const TapMessageSchema = v.union([\n TapReadySchema,\n TapCloseSchema,\n TimelineSeekSchema,\n AlarmClickSchema,\n AlarmFadeInSchema,\n PopUpOpenSchema,\n PopUpCloseSchema,\n ContainerExpandSchema,\n ContainerCollapseSchema,\n ContainerModeChangeSchema,\n ContainerModeChangeAckSchema,\n ContainerLayoutStateChangedSchema,\n ViewportResizeSchema,\n ConfigUpdateSchema,\n GAEventSchema,\n]);\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/protocol/alarm.ts","../src/protocol/schema.ts","../src/tap-button.d.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error Classes\n */\n\nexport const TAP_ERROR_MARKER = \"__tap_sdk_error__\";\n\nexport interface TapErrorOptions {\n code?: string;\n cause?: Error;\n}\n\n/**\n * Base error class for all TapKit errors\n * Supports serialization across iframe boundaries\n */\nexport class TapKitError extends Error {\n override cause: Error | undefined;\n code: string | undefined;\n\n constructor(message: string, options?: TapErrorOptions) {\n super(message);\n this.name = \"TapKitError\";\n this.code = options?.code;\n this.cause = options?.cause;\n }\n\n /**\n * Restore error from postMessage serialization\n */\n static fromPossibleFrameSafeError(error: any): TapKitError | null {\n if (error instanceof TapKitError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitError\"\n ) {\n const err = new TapKitError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when SDK initialization fails\n */\nexport class TapKitInitializationError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitInitializationError\";\n this.code = options?.code ?? \"ERR_INITIALIZATION\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitInitializationError | null {\n if (error instanceof TapKitInitializationError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitInitializationError\"\n ) {\n const err = new TapKitInitializationError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when message communication fails\n */\nexport class TapKitMessageError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitMessageError\";\n this.code = options?.code ?? \"ERR_MESSAGE\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitMessageError | null {\n if (error instanceof TapKitMessageError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitMessageError\"\n ) {\n const err = new TapKitMessageError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when configuration is invalid\n */\nexport class TapKitConfigurationError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitConfigurationError\";\n this.code = options?.code ?? \"ERR_CONFIGURATION\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitConfigurationError | null {\n if (error instanceof TapKitConfigurationError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitConfigurationError\"\n ) {\n const err = new TapKitConfigurationError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when loader fails to fetch or load resources\n */\nexport class TapKitLoaderError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitLoaderError\";\n this.code = options?.code ?? \"ERR_LOADER\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitLoaderError | null {\n if (error instanceof TapKitLoaderError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitLoaderError\"\n ) {\n const err = new TapKitLoaderError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when iframe operations fail\n */\nexport class TapKitIframeError extends TapKitError {\n constructor(message: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"TapKitIframeError\";\n this.code = options?.code ?? \"ERR_IFRAME\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): TapKitIframeError | null {\n if (error instanceof TapKitIframeError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"TapKitIframeError\"\n ) {\n const err = new TapKitIframeError(error.message, {\n code: error.code,\n });\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n/**\n * Error thrown when material viewer operations fail\n */\nexport class MaterialViewerError extends TapKitError {\n materialId: string;\n\n constructor(message: string, materialId: string, options?: TapErrorOptions) {\n super(message, options);\n this.name = \"MaterialViewerError\";\n this.materialId = materialId;\n this.code = options?.code ?? \"ERR_MATERIAL_VIEWER\";\n }\n\n static override fromPossibleFrameSafeError(\n error: any,\n ): MaterialViewerError | null {\n if (error instanceof MaterialViewerError) {\n return error;\n }\n if (\n error &&\n typeof error === \"object\" &&\n TAP_ERROR_MARKER in error &&\n error[TAP_ERROR_MARKER] === \"MaterialViewerError\"\n ) {\n const err = new MaterialViewerError(\n error.message,\n error.materialId || \"unknown\",\n {\n code: error.code,\n },\n );\n err.stack = error.stack;\n return err;\n }\n return null;\n }\n}\n\n// Backward compatibility alias\nexport { TapKitInitializationError as InitializationError };\n","import type * as CSS from \"csstype\";\n\n// ============================================\n// Constants\n// ============================================\n\n/**\n * Alarm display duration (18 seconds total)\n * 말풍선 발생 후, 12초 뒤에 서서히 사라짐 (전체 시간 18초)\n */\nexport const ALARM_DURATION = 18000;\n\n// ============================================\n// Common types used in messages\n// ============================================\n\n// ============================================\n// UI Element Types (JSON Component Descriptor)\n// ============================================\n\n/**\n * Base style type for all elements\n * Uses csstype for accurate CSS property types\n */\nexport type CSSStyle = CSS.Properties<string | number>;\n\n/**\n * Props for AlarmElement\n * Supports common HTML attributes with type safety\n */\nexport interface AlarmElementProps {\n style?: CSSStyle;\n className?: string;\n id?: string;\n\n // Image specific\n src?: string;\n alt?: string;\n\n // Link specific\n href?: string;\n target?: string;\n\n // Input/Button specific\n type?: string;\n placeholder?: string;\n value?: string;\n disabled?: boolean;\n\n // Generic HTML attributes (for extensibility)\n [key: string]: unknown;\n}\n\n/**\n * Alarm click action payload\n * Defines what happens when user clicks an alarm\n */\nexport type AlarmPayload = {\n type: \"startChat\";\n message: string;\n pingMessageId?: string;\n};\n\n/**\n * Generalized UI element that can represent any HTML element\n * Inspired by crel.js pattern for flexible DOM construction\n *\n * This replaces the previous hardcoded types (AlarmDivElement, AlarmTextElement, etc.)\n * with a single flexible schema that supports all HTML elements.\n *\n * @example\n * // Text node\n * \"Hello World\"\n *\n * @example\n * // Button with action\n * {\n * tag: \"button\",\n * action: { id: \"summarize\", payload: {} },\n * children: [\"Summarize\"]\n * }\n *\n * @example\n * // Div container\n * {\n * tag: \"div\",\n * props: { className: \"container\", style: { padding: \"16px\" } },\n * children: [\n * { tag: \"h1\", children: [\"Title\"] },\n * { tag: \"p\", children: [\"Description\"] }\n * ]\n * }\n */\nexport interface AlarmElement {\n tag: string; // HTML tag name: 'div', 'span', 'button', 'img', 'p', 'h1', etc.\n props?: AlarmElementProps;\n children?: (AlarmElement | string)[]; // Nested elements or text nodes\n payload?: AlarmPayload;\n}\n\n// ============================================\n// Alarm Message Types\n// ============================================\n\n/**\n * Alarm type classification with namespace pattern\n * - basic:* - System-level alarms (welcome, default, etc.)\n * - feat:* - Feature-specific alarms (quiz, guide, progress, etc.)\n * - custom:* - Custom alarms (cheer, etc.)\n */\nexport type AlarmType =\n | \"basic:welcome\"\n | \"basic:default\"\n | \"feat:quiz\"\n | \"feat:guide\"\n | \"feat:progress\"\n | \"custom:cheer\";\n\n/**\n * Complete alarm message definition\n * UI is fully defined via JSON Component Descriptor\n * Click behavior is simple: open chat + send message (if provided in content.payload)\n * Duration is always 18 seconds (handled in useAlarmEffects)\n */\nexport interface AlarmMessageInstanceType {\n type: AlarmType; // Alarm classification\n content: AlarmElement; // UI structure (JSON Component Descriptor) + click payload\n}\n","import * as v from \"valibot\";\n\n// ============================================\n// Alarm-related schemas (JSON Component Descriptor)\n// ============================================\n\n/**\n * Schema for CSS style properties\n * Allows any CSS property as string or number\n */\nexport const CSSStyleSchema = v.record(\n v.string(),\n v.union([v.string(), v.number()]),\n);\n\n/**\n * Schema for AlarmElementProps\n * Supports common HTML attributes\n */\nexport const AlarmElementPropsSchema = v.object({\n style: v.optional(CSSStyleSchema),\n className: v.optional(v.string()),\n id: v.optional(v.string()),\n src: v.optional(v.string()),\n alt: v.optional(v.string()),\n href: v.optional(v.string()),\n target: v.optional(v.string()),\n type: v.optional(v.string()),\n placeholder: v.optional(v.string()),\n value: v.optional(v.string()),\n disabled: v.optional(v.boolean()),\n});\n\n/**\n * Schema for AlarmElement (recursive)\n * Supports nested structure with children and payload\n */\nexport const AlarmElementSchema: v.GenericSchema<any> = v.lazy(() =>\n v.object({\n tag: v.string(),\n props: v.optional(AlarmElementPropsSchema),\n children: v.optional(v.array(v.union([AlarmElementSchema, v.string()]))),\n payload: v.optional(\n v.object({\n message: v.string(),\n pingMessageId: v.optional(v.string()),\n }),\n ),\n }),\n);\n\n/**\n * Schema for AlarmMessageInstanceType (simplified)\n * Uses JSON Component Descriptor pattern\n * content includes UI + payload (for click handling)\n */\nexport const AlarmMessageInstanceSchema = v.object({\n content: AlarmElementSchema,\n duration: v.optional(v.number()),\n});\n\n// Validation schemas for each message type\nexport const TapReadySchema = v.object({\n type: v.literal(\"tap:ready\"),\n gaId: v.string(),\n});\n\nexport const TapCloseSchema = v.object({\n type: v.literal(\"tap:close\"),\n});\n\nexport const TimelineSeekSchema = v.object({\n type: v.literal(\"timeline:seek\"),\n clipId: v.string(),\n clipPlayHead: v.number(),\n});\n\nexport const AlarmClickSchema = v.object({\n type: v.literal(\"alarm:click\"),\n messageInfo: AlarmMessageInstanceSchema,\n});\n\nexport const AlarmFadeInSchema = v.object({\n type: v.literal(\"alarm:fadeIn\"),\n messageInfo: AlarmMessageInstanceSchema,\n});\n\nexport const PopUpOpenSchema = v.object({\n type: v.literal(\"popUp:open\"),\n popUpInfo: v.object({\n html: v.string(),\n requestId: v.optional(v.string()),\n }),\n});\n\nexport const PopUpCloseSchema = v.object({\n type: v.literal(\"popUp:close\"),\n});\n\nexport const MaterialViewOpenSchema = v.object({\n type: v.literal(\"material:view:open\"),\n materialId: v.string(),\n presignedUrl: v.string(),\n pageStart: v.number(),\n pageEnd: v.number(),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const MaterialViewCloseSchema = v.object({\n type: v.literal(\"material:view:close\"),\n});\n\nexport const MaterialViewErrorSchema = v.object({\n type: v.literal(\"material:view:error\"),\n materialId: v.string(),\n error: v.union([\n v.literal(\"fetch_failed\"),\n v.literal(\"expired_url\"),\n v.literal(\"extraction_failed\"),\n v.literal(\"unknown\"),\n ]),\n message: v.optional(v.string()),\n});\n\nexport const ContainerModeChangeSchema = v.object({\n type: v.literal(\"container:mode:change\"),\n mode: v.union([v.literal(\"floating\"), v.literal(\"sidebar\")]),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerModeChangeAckSchema = v.object({\n type: v.literal(\"container:mode:change:ack\"),\n success: v.boolean(),\n currentMode: v.union([\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n v.literal(\"floating-forced\"),\n ]),\n nonce: v.optional(v.union([v.string(), v.number()])),\n});\n\nexport const ContainerLayoutStateChangedSchema = v.object({\n type: v.literal(\"container:layout:state:changed\"),\n layoutState: v.union([\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n v.literal(\"floating-forced\"),\n ]),\n});\n\nexport const ViewportResizeSchema = v.object({\n type: v.literal(\"viewport:resize\"),\n viewportWidth: v.number(),\n});\n\nexport const ConfigUpdateSchema = v.object({\n type: v.literal(\"config:update\"),\n apiKey: v.optional(v.string()),\n hostOrigin: v.optional(v.string()),\n tapUrl: v.optional(v.string()),\n apiUrl: v.optional(v.string()),\n environment: v.optional(\n v.union([\n v.literal(\"dev\"),\n v.literal(\"prod\"),\n v.literal(\"demo\"),\n v.literal(\"staging\"),\n ]),\n ),\n language: v.optional(v.string()),\n userId: v.optional(v.string()),\n courseId: v.optional(v.string()),\n clipId: v.optional(v.string()),\n clipPlayHead: v.optional(v.number()),\n inline: v.optional(v.boolean()),\n container: v.optional(\n v.object({\n mode: v.optional(\n v.union([\n v.literal(\"auto\"),\n v.literal(\"floating\"),\n v.literal(\"sidebar\"),\n ]),\n ),\n floatingConfig: v.optional(\n v.object({\n position: v.optional(\n v.object({\n top: v.optional(v.string()),\n left: v.optional(v.string()),\n right: v.optional(v.string()),\n bottom: v.optional(v.string()),\n }),\n ),\n width: v.optional(v.string()),\n height: v.optional(v.string()),\n borderRadius: v.optional(v.string()),\n }),\n ),\n sidebarConfig: v.optional(\n v.object({\n maxWidth: v.optional(v.string()),\n minViewportWidth: v.optional(v.number()),\n }),\n ),\n }),\n ),\n});\n\n// Google Analytics event schema\nexport const GAEventSchema = v.object({\n type: v.literal(\"GA_EVENT\"),\n payload: v.record(v.string(), v.any()), // 유연한 payload 구조\n});\n\n// Union schema for all TAP protocol messages\nexport const TapMessageSchema = v.union([\n TapReadySchema,\n TapCloseSchema,\n TimelineSeekSchema,\n AlarmClickSchema,\n AlarmFadeInSchema,\n PopUpOpenSchema,\n PopUpCloseSchema,\n MaterialViewOpenSchema,\n MaterialViewCloseSchema,\n MaterialViewErrorSchema,\n ContainerModeChangeSchema,\n ContainerModeChangeAckSchema,\n ContainerLayoutStateChangedSchema,\n ViewportResizeSchema,\n ConfigUpdateSchema,\n GAEventSchema,\n]);\n","/**\n * Type declarations for <tap-button> Web Component\n *\n * Provides TypeScript support for using <tap-button> in JSX/TSX.\n * The actual Web Component is registered by tap-kit-core when loaded.\n */\n\nimport type { CSSProperties, ReactNode } from \"react\";\n\n// ==================== Custom Events ====================\n\n/**\n * Event name constant for tap-button click\n *\n * Use this constant to ensure type-safety when listening to tap-button events.\n * The event is dispatched with `bubbles: true` and `composed: true`, so it can\n * be caught anywhere in the document.\n *\n * @example\n * ```typescript\n * import { TAP_BUTTON_CLICK_EVENT } from '@coxwave/tap-kit-types';\n *\n * // Type-safe event listening on document\n * document.addEventListener(TAP_BUTTON_CLICK_EVENT, (e) => {\n * console.log('Button clicked!');\n * console.log('Original event:', e.detail.originalEvent);\n * console.log('Button element:', e.detail.buttonElement);\n * });\n *\n * // Or on specific element\n * const btn = document.querySelector('tap-button');\n * btn?.addEventListener(TAP_BUTTON_CLICK_EVENT, (e) => {\n * console.log('Clicked:', e.detail);\n * });\n * ```\n */\nexport const TAP_BUTTON_CLICK_EVENT = \"tap-button:click\" as const;\n\n/**\n * Event detail payload for tap-button:click CustomEvent\n *\n * This interface defines the structure of the `detail` property\n * in the CustomEvent dispatched by <tap-button> Web Component.\n *\n * @example\n * ```typescript\n * import { TAP_BUTTON_CLICK_EVENT, TapButtonClickEventDetail } from '@coxwave/tap-kit-types';\n *\n * document.addEventListener(TAP_BUTTON_CLICK_EVENT, (e: CustomEvent<TapButtonClickEventDetail>) => {\n * // Type-safe access to event detail\n * e.detail.originalEvent; // ✅ Event\n * e.detail.buttonElement; // ✅ HTMLButtonElement | null\n * });\n * ```\n */\nexport interface TapButtonClickEventDetail {\n /** Original DOM click event */\n originalEvent: Event;\n /** Reference to the button element inside Shadow DOM */\n buttonElement: HTMLButtonElement | null;\n}\n\n// React 19 requires module augmentation based on tsconfig jsx setting\n// - \"jsx\": \"react-jsx\" → augment \"react/jsx-runtime\"\n// - \"jsx\": \"react-jsxdev\" → augment \"react/jsx-dev-runtime\"\n// - \"jsx\": \"preserve\" → augment \"react\" (Next.js default)\n// - \"jsx\": \"react\" → augment \"react\"\n\n// For Next.js (jsx: preserve)\ndeclare module \"react\" {\n namespace JSX {\n interface IntrinsicElements {\n \"tap-button\": TapButtonAttributes;\n }\n }\n}\n\n// For CRA, Vite (jsx: react-jsx)\ndeclare module \"react/jsx-runtime\" {\n namespace JSX {\n interface IntrinsicElements {\n \"tap-button\": TapButtonAttributes;\n }\n }\n}\n\n// Global event maps for type-safe event listeners\ndeclare global {\n /**\n * Extend DocumentEventMap for type-safe addEventListener on document\n * Provides autocomplete and type checking for tap-button events\n */\n interface DocumentEventMap {\n [TAP_BUTTON_CLICK_EVENT]: CustomEvent<TapButtonClickEventDetail>;\n }\n\n /**\n * Extend HTMLElementEventMap for type-safe addEventListener on elements\n * Provides autocomplete and type checking for tap-button events\n */\n interface HTMLElementEventMap {\n [TAP_BUTTON_CLICK_EVENT]: CustomEvent<TapButtonClickEventDetail>;\n }\n}\n\n/**\n * Public API interface for TapButtonElement Web Component\n *\n * This interface defines the contract that tap-kit-core's TapButtonElement must implement.\n * It provides type-safe access to the Web Component's internal structure.\n */\nexport interface ITapButtonElement extends HTMLElement {\n /**\n * Get the button element from Shadow DOM\n * Used by tap-kit-core to attach click listeners and manage the button\n * @returns The button element inside Shadow DOM, or null if not found\n */\n getButtonElement(): HTMLButtonElement | null;\n}\n\n/**\n * Props/Attributes for <tap-button> Web Component\n */\nexport interface TapButtonAttributes {\n /**\n * Element ID attribute\n */\n id?: string;\n\n /**\n * CSS class name(s)\n */\n className?: string;\n\n /**\n * Enable floating mode (position: fixed)\n * When true or omitted: button floats with fixed positioning\n * When false: button uses static positioning (normal flow)\n * @default true\n */\n floating?: boolean;\n\n /**\n * Button position on screen (only applies when floating is true)\n * @default \"bottom-right\"\n */\n position?:\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-right\"\n | \"top-left\"\n | \"custom\";\n\n /**\n * Button size preset\n * @default \"large\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Child content (replaces default icon via slot)\n * Use this to provide custom button content (e.g., custom logo, icon, or text)\n * If not provided, displays default edutap logo\n */\n children?: ReactNode;\n\n /**\n * Custom inline styles for positioning\n * Use position=\"custom\" attribute to enable custom positioning\n */\n style?: CSSProperties;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coxwave/tap-kit-types",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Shared TypeScript types for TapKit SDK packages",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,7 +8,15 @@
|
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
-
"import": "./dist/index.js"
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"typesVersions": {
|
|
16
|
+
"*": {
|
|
17
|
+
"*": [
|
|
18
|
+
"./dist/index.d.ts"
|
|
19
|
+
]
|
|
12
20
|
}
|
|
13
21
|
},
|
|
14
22
|
"keywords": [
|
|
@@ -17,15 +25,19 @@
|
|
|
17
25
|
"typescript"
|
|
18
26
|
],
|
|
19
27
|
"author": "",
|
|
28
|
+
"homepage": "https://docs.edutap.ai",
|
|
20
29
|
"license": "MIT",
|
|
21
30
|
"files": [
|
|
22
31
|
"dist"
|
|
23
32
|
],
|
|
24
33
|
"devDependencies": {
|
|
25
34
|
"tsup": "^8.5.0",
|
|
26
|
-
"valibot": "1.1.0",
|
|
35
|
+
"valibot": "^1.1.0",
|
|
27
36
|
"@coxwave/config-typescript": "1.0.0"
|
|
28
37
|
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"csstype": "^3.1.3"
|
|
40
|
+
},
|
|
29
41
|
"scripts": {
|
|
30
42
|
"build": "tsup",
|
|
31
43
|
"dev": "tsup --watch",
|