scordi-extension 1.16.2 → 1.16.4

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 (240) hide show
  1. package/README.md +61 -29
  2. package/dist/blocks/AiParseDataBlock.d.ts.map +1 -1
  3. package/dist/blocks/EventClickBlock.d.ts.map +1 -1
  4. package/dist/blocks/ExportDataBlock.d.ts.map +1 -1
  5. package/dist/blocks/KeypressBlock.d.ts.map +1 -1
  6. package/dist/blocks/NetworkCatchBlock.d.ts.map +1 -1
  7. package/dist/blocks/WaitForConditionBlock.d.ts.map +1 -1
  8. package/dist/blocks/index.d.ts +1 -1
  9. package/dist/blocks/index.d.ts.map +1 -1
  10. package/dist/sdk/EightGClient.d.ts +9 -6
  11. package/dist/sdk/EightGClient.d.ts.map +1 -1
  12. package/dist/sdk/index.cjs +4 -4
  13. package/dist/sdk/index.js +175 -160
  14. package/dist/sdk/types.d.ts.map +1 -1
  15. package/dist/types/internal-messages.d.ts.map +1 -1
  16. package/dist/workflow/context/execution-context/binding.d.ts.map +1 -1
  17. package/dist/workflow/context/execution-context/condition.d.ts.map +1 -1
  18. package/dist/workflow/context/execution-context/index.d.ts +3 -3
  19. package/dist/workflow/context/execution-context/index.d.ts.map +1 -1
  20. package/dist/workflow/context/execution-context/resolver.d.ts.map +1 -1
  21. package/dist/workflow/context/loop-context/index.d.ts +1 -1
  22. package/dist/workflow/context/loop-context/index.d.ts.map +1 -1
  23. package/dist/workflow/context/loop-context/loop-context.d.ts.map +1 -1
  24. package/dist/workflow/context/loop-context/resolver.d.ts.map +1 -1
  25. package/dist/workflow/context/step-context/index.d.ts +1 -1
  26. package/dist/workflow/context/step-context/index.d.ts.map +1 -1
  27. package/dist/workflow/context/step-context/resolver.d.ts.map +1 -1
  28. package/dist/workflow/context/step-context/step-context.d.ts.map +1 -1
  29. package/dist/workflow/context/var-context/index.d.ts +1 -1
  30. package/dist/workflow/context/var-context/index.d.ts.map +1 -1
  31. package/dist/workflow/context/var-context/resolver.d.ts.map +1 -1
  32. package/dist/workflow/context/var-context/var-context.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/.vite/manifest.json +0 -75
  35. package/dist/assets/index-B45Q7XiR.js +0 -49
  36. package/dist/assets/index-BqQ8JinV.js +0 -1
  37. package/dist/assets/index-CVzjlC_s.js +0 -1
  38. package/dist/assets/index-CYVwV_2L.js +0 -1
  39. package/dist/assets/index-DkFIvNAm.css +0 -1
  40. package/dist/assets/index-DxZcS402.js +0 -1
  41. package/dist/assets/index-tW55lo_h.js +0 -4
  42. package/dist/assets/index.html-DZ7AUTQZ.js +0 -1
  43. package/dist/assets/index.ts-2nFLTUkL.js +0 -238
  44. package/dist/assets/index.ts-BRPHoTRl.js +0 -256
  45. package/dist/assets/index.ts-C2f2hGoV.js +0 -158
  46. package/dist/assets/index.ts-CD2jVezi.js +0 -256
  47. package/dist/assets/index.ts-COMnxBfB.js +0 -238
  48. package/dist/assets/index.ts-mAOhzdZJ.js +0 -238
  49. package/dist/assets/internal-messages-BMRA0i8A.js +0 -1
  50. package/dist/assets/internal-messages-BS1uEgeS.js +0 -1
  51. package/dist/assets/internal-messages-CP1ANEcL.js +0 -1
  52. package/dist/assets/internal-messages-Drf0Gb9U.js +0 -1
  53. package/dist/assets/loading-page-1924caaa.js +0 -51
  54. package/dist/assets/main.tsx-CHn9k-P7.js +0 -38
  55. package/dist/assets/main.tsx-DnGNeWWr.js +0 -38
  56. package/dist/assets/main.tsx-DtStYr-r.js +0 -2
  57. package/dist/assets/main.tsx-UFslEqbd.js +0 -38
  58. package/dist/assets/main.tsx-loader-6Ftbg0YS.js +0 -13
  59. package/dist/assets/main.tsx-loader-ByFSLdJ4.js +0 -13
  60. package/dist/assets/main.tsx-loader-CuF0J02t.js +0 -13
  61. package/dist/assets/main.tsx-loader-sjxNXQPw.js +0 -13
  62. package/dist/assets/types-BId3CBm7.js +0 -1
  63. package/dist/assets/types-CeXfY5Yv.js +0 -4
  64. package/dist/assets/types-Dzn4eD9c.js +0 -22
  65. package/dist/assets/types-q2_wITfk.js +0 -4
  66. package/dist/blocks/CaptureNetworkBlock.d.ts +0 -75
  67. package/dist/blocks/CaptureNetworkBlock.d.ts.map +0 -1
  68. package/dist/blocks/DataExtractBlock.d.ts +0 -23
  69. package/dist/blocks/DataExtractBlock.d.ts.map +0 -1
  70. package/dist/blocks/index.cjs +0 -4
  71. package/dist/blocks/index.js +0 -7839
  72. package/dist/blocks/logo.png +0 -0
  73. package/dist/logo.png +0 -0
  74. package/dist/manifest.json +0 -55
  75. package/dist/public/logo.png +0 -0
  76. package/dist/service-worker-loader.js +0 -3
  77. package/dist/src/blocks/AiParseDataBlock.ts.js +0 -111
  78. package/dist/src/blocks/CaptureNetworkBlock.ts.js +0 -55
  79. package/dist/src/blocks/ClearValueFormBlock.ts.js +0 -55
  80. package/dist/src/blocks/DataExtractBlock.ts.js +0 -28
  81. package/dist/src/blocks/ElementExistsBlock.ts.js +0 -26
  82. package/dist/src/blocks/EventClickBlock.ts.js +0 -143
  83. package/dist/src/blocks/ExportDataBlock.ts.js +0 -47
  84. package/dist/src/blocks/FetchApiBlock.ts.js +0 -50
  85. package/dist/src/blocks/GetAttributeValueBlock.ts.js +0 -33
  86. package/dist/src/blocks/GetElementDataBlock.ts.js +0 -114
  87. package/dist/src/blocks/GetTextBlock.ts.js +0 -152
  88. package/dist/src/blocks/GetValueFormBlock.ts.js +0 -52
  89. package/dist/src/blocks/KeypressBlock.ts.js +0 -89
  90. package/dist/src/blocks/NavigateBlock.ts.js +0 -48
  91. package/dist/src/blocks/NetworkCatchBlock.ts.js +0 -61
  92. package/dist/src/blocks/SaveAssetsBlock.ts.js +0 -35
  93. package/dist/src/blocks/ScrollBlock.ts.js +0 -111
  94. package/dist/src/blocks/SetValueFormBlock.ts.js +0 -56
  95. package/dist/src/blocks/TransformDataBlock.ts.js +0 -42
  96. package/dist/src/blocks/WaitBlock.ts.js +0 -24
  97. package/dist/src/blocks/WaitForConditionBlock.ts.js +0 -187
  98. package/dist/src/blocks/index.ts.js +0 -198
  99. package/dist/src/blocks/types.ts.js +0 -11
  100. package/dist/src/content/components/ConfirmationUI.tsx.js +0 -244
  101. package/dist/src/content/components/ExecutionStatusUI.tsx.js +0 -223
  102. package/dist/src/content/elements/finders/CssSelector.ts.js +0 -51
  103. package/dist/src/content/elements/finders/ElementSelector.ts.js +0 -20
  104. package/dist/src/content/elements/finders/IframeSelector.ts.js +0 -32
  105. package/dist/src/content/elements/finders/ShadowDOMSelector.ts.js +0 -38
  106. package/dist/src/content/elements/finders/XPathFinder.ts.js +0 -32
  107. package/dist/src/content/elements/index.ts.js +0 -26
  108. package/dist/src/content/elements/utils/CSSSelectorGenerator.ts.js +0 -72
  109. package/dist/src/content/elements/utils/XPathGenerator.ts.js +0 -62
  110. package/dist/src/content/handler/ExternalMessageHandler.ts.js +0 -78
  111. package/dist/src/content/handler/InternalMessageHandler.ts.js +0 -40
  112. package/dist/src/content/kernel/MessageKernel.ts.js +0 -83
  113. package/dist/src/content/main.tsx-loader.js +0 -22
  114. package/dist/src/content/main.tsx.js +0 -50
  115. package/dist/src/content/utils/index.ts.js +0 -1
  116. package/dist/src/content/utils/synchronizedLock.ts.js +0 -35
  117. package/dist/src/popup/index.html +0 -12
  118. package/dist/src/sdk/types.ts.js +0 -150
  119. package/dist/src/types/internal-messages.ts.js +0 -27
  120. package/dist/src/workflow/context/execution-context/types.ts.js +0 -0
  121. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--29d58732.js +0 -45
  122. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--34285d49.js +0 -45
  123. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--36a0c079.js +0 -45
  124. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--7cce5f32.js +0 -45
  125. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--8598b0e0.js +0 -45
  126. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--9054997c.js +0 -45
  127. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--a79cb78d.js +0 -45
  128. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--af906259.js +0 -45
  129. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--e041f26d.js +0 -45
  130. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--e1405dc4.js +0 -45
  131. package/dist/vendor/.vite-deps-chunk-2TUXWMP5.js__v--e2a1f584.js +0 -45
  132. package/dist/vendor/.vite-deps-chunk-DC5AMYBS.js__v--87b685c1.js +0 -38
  133. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--29d58732.js +0 -975
  134. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--34285d49.js +0 -975
  135. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--36a0c079.js +0 -975
  136. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--7cce5f32.js +0 -975
  137. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--8598b0e0.js +0 -975
  138. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--a79cb78d.js +0 -975
  139. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--af906259.js +0 -975
  140. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--e041f26d.js +0 -975
  141. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--e1405dc4.js +0 -975
  142. package/dist/vendor/.vite-deps-chunk-EL3BNLGW.js__v--e2a1f584.js +0 -975
  143. package/dist/vendor/.vite-deps-chunk-KDMJ4XM7.js__v--87b685c1.js +0 -4154
  144. package/dist/vendor/.vite-deps-chunk-MANNBT4V.js__v--87b685c1.js +0 -280
  145. package/dist/vendor/.vite-deps-chunk-NZP3G7XT.js__v--87b685c1.js +0 -975
  146. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--36a0c079.js +0 -4158
  147. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--8598b0e0.js +0 -4158
  148. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--9054997c.js +0 -4158
  149. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--a79cb78d.js +0 -4158
  150. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--e041f26d.js +0 -4158
  151. package/dist/vendor/.vite-deps-chunk-QIBDMRD4.js__v--e2a1f584.js +0 -4158
  152. package/dist/vendor/.vite-deps-chunk-UW5CEYRC.js__v--29d58732.js +0 -4154
  153. package/dist/vendor/.vite-deps-chunk-UW5CEYRC.js__v--34285d49.js +0 -4154
  154. package/dist/vendor/.vite-deps-chunk-UW5CEYRC.js__v--7cce5f32.js +0 -4154
  155. package/dist/vendor/.vite-deps-chunk-UW5CEYRC.js__v--af906259.js +0 -4154
  156. package/dist/vendor/.vite-deps-chunk-UW5CEYRC.js__v--e1405dc4.js +0 -4154
  157. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--29d58732.js +0 -280
  158. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--34285d49.js +0 -280
  159. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--36a0c079.js +0 -280
  160. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--7cce5f32.js +0 -280
  161. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--8598b0e0.js +0 -280
  162. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--a79cb78d.js +0 -280
  163. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--af906259.js +0 -280
  164. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--e041f26d.js +0 -280
  165. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--e1405dc4.js +0 -280
  166. package/dist/vendor/.vite-deps-chunk-XHY3JSIG.js__v--e2a1f584.js +0 -280
  167. package/dist/vendor/.vite-deps-jsonata.js__v--1f855851.js +0 -5761
  168. package/dist/vendor/.vite-deps-jsonata.js__v--34285d49.js +0 -5761
  169. package/dist/vendor/.vite-deps-jsonata.js__v--370b8ffe.js +0 -5761
  170. package/dist/vendor/.vite-deps-jsonata.js__v--7496ecd5.js +0 -5761
  171. package/dist/vendor/.vite-deps-jsonata.js__v--7cce5f32.js +0 -5761
  172. package/dist/vendor/.vite-deps-jsonata.js__v--8598b0e0.js +0 -5761
  173. package/dist/vendor/.vite-deps-jsonata.js__v--989ee283.js +0 -5761
  174. package/dist/vendor/.vite-deps-jsonata.js__v--aa4cf553.js +0 -5761
  175. package/dist/vendor/.vite-deps-jsonata.js__v--af906259.js +0 -5761
  176. package/dist/vendor/.vite-deps-jsonata.js__v--d602c657.js +0 -5761
  177. package/dist/vendor/.vite-deps-jsonata.js__v--e041f26d.js +0 -5761
  178. package/dist/vendor/.vite-deps-jsonata.js__v--e2a1f584.js +0 -5761
  179. package/dist/vendor/.vite-deps-react-dom.js__v--1217aa43.js +0 -6
  180. package/dist/vendor/.vite-deps-react-dom.js__v--34285d49.js +0 -6
  181. package/dist/vendor/.vite-deps-react-dom.js__v--36c31e85.js +0 -6
  182. package/dist/vendor/.vite-deps-react-dom.js__v--7cce5f32.js +0 -6
  183. package/dist/vendor/.vite-deps-react-dom.js__v--8313ef2c.js +0 -6
  184. package/dist/vendor/.vite-deps-react-dom.js__v--8598b0e0.js +0 -6
  185. package/dist/vendor/.vite-deps-react-dom.js__v--87af57af.js +0 -6
  186. package/dist/vendor/.vite-deps-react-dom.js__v--9967e564.js +0 -6
  187. package/dist/vendor/.vite-deps-react-dom.js__v--af906259.js +0 -6
  188. package/dist/vendor/.vite-deps-react-dom.js__v--e041f26d.js +0 -6
  189. package/dist/vendor/.vite-deps-react-dom.js__v--e2a1f584.js +0 -6
  190. package/dist/vendor/.vite-deps-react-dom_client.js__v--05e7db8c.js +0 -18108
  191. package/dist/vendor/.vite-deps-react-dom_client.js__v--34285d49.js +0 -18108
  192. package/dist/vendor/.vite-deps-react-dom_client.js__v--7cce5f32.js +0 -18108
  193. package/dist/vendor/.vite-deps-react-dom_client.js__v--8598b0e0.js +0 -18108
  194. package/dist/vendor/.vite-deps-react-dom_client.js__v--8ec6d0f4.js +0 -18108
  195. package/dist/vendor/.vite-deps-react-dom_client.js__v--a69c8f91.js +0 -18108
  196. package/dist/vendor/.vite-deps-react-dom_client.js__v--aaaed31d.js +0 -18108
  197. package/dist/vendor/.vite-deps-react-dom_client.js__v--af906259.js +0 -18108
  198. package/dist/vendor/.vite-deps-react-dom_client.js__v--e041f26d.js +0 -18108
  199. package/dist/vendor/.vite-deps-react-dom_client.js__v--e2a1f584.js +0 -18108
  200. package/dist/vendor/.vite-deps-react-dom_client.js__v--f80719e9.js +0 -18108
  201. package/dist/vendor/.vite-deps-react.js__v--1217aa43.js +0 -5
  202. package/dist/vendor/.vite-deps-react.js__v--34285d49.js +0 -5
  203. package/dist/vendor/.vite-deps-react.js__v--36c31e85.js +0 -5
  204. package/dist/vendor/.vite-deps-react.js__v--7cce5f32.js +0 -5
  205. package/dist/vendor/.vite-deps-react.js__v--8313ef2c.js +0 -5
  206. package/dist/vendor/.vite-deps-react.js__v--8598b0e0.js +0 -5
  207. package/dist/vendor/.vite-deps-react.js__v--87af57af.js +0 -5
  208. package/dist/vendor/.vite-deps-react.js__v--9967e564.js +0 -5
  209. package/dist/vendor/.vite-deps-react.js__v--af906259.js +0 -5
  210. package/dist/vendor/.vite-deps-react.js__v--e041f26d.js +0 -5
  211. package/dist/vendor/.vite-deps-react.js__v--e2a1f584.js +0 -5
  212. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--1217aa43.js +0 -281
  213. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--34285d49.js +0 -281
  214. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--36c31e85.js +0 -281
  215. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--7cce5f32.js +0 -281
  216. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--8313ef2c.js +0 -281
  217. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--8598b0e0.js +0 -281
  218. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--87af57af.js +0 -281
  219. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--9967e564.js +0 -281
  220. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--af906259.js +0 -281
  221. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--e041f26d.js +0 -281
  222. package/dist/vendor/.vite-deps-react_jsx-dev-runtime.js__v--e2a1f584.js +0 -281
  223. package/dist/vendor/.vite-deps-zod.js__v--34285d49.js +0 -222
  224. package/dist/vendor/.vite-deps-zod.js__v--6548a37a.js +0 -222
  225. package/dist/vendor/.vite-deps-zod.js__v--706a718e.js +0 -219
  226. package/dist/vendor/.vite-deps-zod.js__v--7cce5f32.js +0 -222
  227. package/dist/vendor/.vite-deps-zod.js__v--8598b0e0.js +0 -219
  228. package/dist/vendor/.vite-deps-zod.js__v--9e0f4cc1.js +0 -219
  229. package/dist/vendor/.vite-deps-zod.js__v--af906259.js +0 -222
  230. package/dist/vendor/.vite-deps-zod.js__v--b73c580c.js +0 -219
  231. package/dist/vendor/.vite-deps-zod.js__v--dc9842e6.js +0 -222
  232. package/dist/vendor/.vite-deps-zod.js__v--e041f26d.js +0 -219
  233. package/dist/vendor/.vite-deps-zod.js__v--e2a1f584.js +0 -219
  234. package/dist/vendor/.vite-deps-zod.js__v--e4714212.js +0 -222
  235. package/dist/vendor/crx-client-port.js +0 -66
  236. package/dist/vendor/crx-client-preamble.js +0 -4
  237. package/dist/vendor/react-refresh.js +0 -670
  238. package/dist/vendor/vite-client.js +0 -1134
  239. package/dist/vendor/vite-dist-client-env.mjs.js +0 -24
  240. package/dist/vendor/webcomponents-custom-elements.js +0 -47
@@ -1,72 +0,0 @@
1
- export class CSSSelectorGenerator {
2
- /**
3
- * 요소의 안정적인 CSS 셀렉터 생성
4
- * @param element 대상 요소
5
- * @returns 생성된 CSS 셀렉터
6
- */
7
- static generate(element) {
8
- const staticAttributes = ["data-testid", "aria-label", "title", "alt", "role"];
9
- for (const attr of staticAttributes) {
10
- const value = element.getAttribute(attr);
11
- if (value && !this.isDynamicValue(value)) {
12
- return `[${attr}="${CSS.escape(value)}"]`;
13
- }
14
- }
15
- const tagName = element.tagName.toLowerCase();
16
- const parent = element.parentElement;
17
- if (parent) {
18
- const siblings = Array.from(parent.children);
19
- const index = siblings.indexOf(element) + 1;
20
- if (siblings.length > 1) {
21
- return `${tagName}:nth-child(${index})`;
22
- }
23
- }
24
- if (parent) {
25
- const parentSelector = this.generateParentSelector(parent);
26
- if (parentSelector) {
27
- return `${parentSelector} > ${tagName}:nth-child(${Array.from(parent.children).indexOf(element) + 1})`;
28
- }
29
- }
30
- return tagName;
31
- }
32
- /**
33
- * 부모 요소의 셀렉터 생성
34
- */
35
- static generateParentSelector(parent) {
36
- const tagName = parent.tagName.toLowerCase();
37
- const staticAttributes = ["data-testid", "aria-label", "title", "alt", "role"];
38
- for (const attr of staticAttributes) {
39
- const value = parent.getAttribute(attr);
40
- if (value && !this.isDynamicValue(value)) {
41
- return `[${attr}="${CSS.escape(value)}"]`;
42
- }
43
- }
44
- const grandParent = parent.parentElement;
45
- if (grandParent) {
46
- const siblings = Array.from(grandParent.children);
47
- const index = siblings.indexOf(parent) + 1;
48
- if (siblings.length > 1) {
49
- return `${tagName}:nth-child(${index})`;
50
- }
51
- }
52
- return tagName;
53
- }
54
- /**
55
- * 동적 값 패턴 감지
56
- * @param value 확인할 값
57
- * @returns 동적 값 여부
58
- */
59
- static isDynamicValue(value) {
60
- const dynamicPatterns = [
61
- /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
62
- // UUID
63
- /^\d{13}$/,
64
- // timestamp
65
- /^[a-zA-Z0-9]{16,}$/,
66
- // long random string
67
- /^[a-zA-Z0-9]+-\d+$/
68
- // name-123 pattern
69
- ];
70
- return dynamicPatterns.some((pattern) => pattern.test(value));
71
- }
72
- }
@@ -1,62 +0,0 @@
1
- export class XPathGenerator {
2
- /**
3
- * 요소의 XPath 생성
4
- * @param element 대상 요소
5
- * @returns 생성된 XPath
6
- */
7
- static generate(element) {
8
- const path = [];
9
- let current = element;
10
- while (current && current.nodeType === Node.ELEMENT_NODE) {
11
- let selector = current.tagName.toLowerCase();
12
- const siblings = Array.from(current.parentElement?.children || []).filter((sibling) => sibling.tagName === current.tagName);
13
- if (siblings.length > 1) {
14
- const index = siblings.indexOf(current) + 1;
15
- selector += `[${index}]`;
16
- }
17
- const attributes = this.getStableAttributes(current);
18
- if (attributes.length > 0) {
19
- selector += `[@${attributes.join(" and @")}]`;
20
- }
21
- path.unshift(selector);
22
- current = current.parentElement;
23
- }
24
- return "/" + path.join("/");
25
- }
26
- /**
27
- * 요소의 안정적인 속성들을 반환
28
- * @param element 대상 요소
29
- * @returns 안정적인 속성 배열
30
- */
31
- static getStableAttributes(element) {
32
- const stableAttributes = [];
33
- const stableAttrs = ["data-testid", "aria-label", "title", "alt", "role"];
34
- for (const attr of stableAttrs) {
35
- const value = element.getAttribute(attr);
36
- if (value && !this.isDynamicValue(value)) {
37
- stableAttributes.push(`${attr}="${value}"`);
38
- }
39
- }
40
- return stableAttributes;
41
- }
42
- /**
43
- * 동적 값 패턴 감지
44
- * @param value 확인할 값
45
- * @returns 동적 값 여부
46
- */
47
- static isDynamicValue(value) {
48
- const dynamicPatterns = [
49
- /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
50
- // UUID
51
- /^\d{13}$/,
52
- // timestamp
53
- /^[a-zA-Z0-9]{16,}$/,
54
- // long random string
55
- /^[a-zA-Z0-9]+-\d+$/,
56
- // name-123 pattern
57
- /^[a-zA-Z0-9]+_[a-zA-Z0-9]+$/
58
- // underscore pattern
59
- ];
60
- return dynamicPatterns.some((pattern) => pattern.test(value));
61
- }
62
- }
@@ -1,78 +0,0 @@
1
- export class ExternalMessageHandler {
2
- constructor(kernel) {
3
- this.kernel = kernel;
4
- }
5
- /**
6
- * 웹페이지로부터의 window message 리스너 초기화
7
- */
8
- initializeMessageListener() {
9
- window.addEventListener("message", this.handleWindowMessage.bind(this));
10
- }
11
- /**
12
- * 웹페이지로부터의 window message 처리
13
- */
14
- async handleWindowMessage(event) {
15
- if (event.source !== window) return;
16
- const message = event.data;
17
- switch (message.type) {
18
- case "8G_EXTENSION_CHECK":
19
- this.handleExtensionCheck();
20
- break;
21
- case "8G_COLLECT_WORKFLOW":
22
- await this.handleCollectWorkflow(message);
23
- break;
24
- default:
25
- break;
26
- }
27
- }
28
- /**
29
- * 확장 프로그램 설치 확인 요청 처리
30
- */
31
- handleExtensionCheck() {
32
- const response = {
33
- type: "8G_EXTENSION_RESPONSE",
34
- installed: true,
35
- version: "1.0.0"
36
- };
37
- this.kernel.sendToWebpage(response);
38
- }
39
- /**
40
- * 워크플로우 수집 요청 처리
41
- */
42
- async handleCollectWorkflow(message) {
43
- try {
44
- this.validateCollectWorkflowMessage(message);
45
- const backgroundMessage = {
46
- type: "COLLECT_WORKFLOW_NEW_TAB",
47
- data: {
48
- targetUrl: message.targetUrl,
49
- workflow: message.workflow,
50
- closeTabAfterCollection: message.closeTabAfterCollection !== false,
51
- activateTab: message.activateTab === true
52
- }
53
- };
54
- try {
55
- const response = await this.kernel.sendToBackground(backgroundMessage);
56
- const successResponse = this.kernel.createSuccessResponse(message.requestId, response);
57
- this.kernel.sendToWebpage(successResponse);
58
- } catch (error) {
59
- const errorResponse = this.kernel.createErrorResponse(message.requestId, error);
60
- this.kernel.sendToWebpage(errorResponse);
61
- }
62
- } catch (error) {
63
- const errorResponse = this.kernel.createErrorResponse(message.requestId, error);
64
- this.kernel.sendToWebpage(errorResponse);
65
- }
66
- }
67
- validateCollectWorkflowMessage(message) {
68
- if (!message.targetUrl) {
69
- throw new Error("Target URL is required");
70
- }
71
- if (!message.workflow) {
72
- throw new Error("Workflow is required");
73
- }
74
- if (!message.workflow.start || !Array.isArray(message.workflow.steps)) {
75
- throw new Error("Workflow must have start and steps");
76
- }
77
- }
78
- }
@@ -1,40 +0,0 @@
1
- import {
2
- isExecuteBlockMessage,
3
- isShowExecutionStatusMessage,
4
- isHideExecutionStatusMessage
5
- } from "/src/types/internal-messages.ts.js";
6
- export class InternalMessageHandler {
7
- constructor(kernel) {
8
- this.kernel = kernel;
9
- }
10
- /**
11
- * Background script로부터의 메시지 리스너 초기화
12
- */
13
- initializeMessageListener() {
14
- chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
15
- if (isExecuteBlockMessage(message)) {
16
- this.kernel.handleRuntimeMessage(message).then((result) => sendResponse(result)).catch((error) => sendResponse(this.kernel.createErrorResponse("", error)));
17
- return true;
18
- }
19
- if (isShowExecutionStatusMessage(message)) {
20
- console.log("[InternalMessageHandler] Show execution status:", message.data);
21
- window.dispatchEvent(
22
- new CustomEvent("8g-show-execution-status", {
23
- detail: {
24
- message: message.data.message || "워크플로우 실행 중"
25
- }
26
- })
27
- );
28
- sendResponse({ success: true });
29
- return false;
30
- }
31
- if (isHideExecutionStatusMessage(message)) {
32
- console.log("[InternalMessageHandler] Hide execution status");
33
- window.dispatchEvent(new CustomEvent("8g-hide-execution-status"));
34
- sendResponse({ success: true });
35
- return false;
36
- }
37
- return false;
38
- });
39
- }
40
- }
@@ -1,83 +0,0 @@
1
- import {
2
- isErrorResponse
3
- } from "/src/types/internal-messages.ts.js";
4
- export class MessageKernel {
5
- /**
6
- * Background script로 메시지 전송
7
- */
8
- async sendToBackground(message) {
9
- return new Promise((resolve, reject) => {
10
- chrome.runtime.sendMessage(message, (response) => {
11
- if (chrome.runtime.lastError) {
12
- reject(new Error(chrome.runtime.lastError.message || "Communication error"));
13
- } else if (isErrorResponse(response)) {
14
- reject(new Error(response.message));
15
- } else {
16
- resolve(response);
17
- }
18
- });
19
- });
20
- }
21
- /**
22
- * Content script에서 Block 실행
23
- */
24
- async executeBlock(block) {
25
- const { BlockHandler } = await import("/src/blocks/index.ts.js");
26
- const { synchronizedLock } = await import("/src/content/utils/index.ts.js");
27
- await synchronizedLock.getLock();
28
- try {
29
- return await BlockHandler.executeBlock(block);
30
- } finally {
31
- synchronizedLock.releaseLock();
32
- }
33
- }
34
- /**
35
- * Chrome runtime 메시지 처리 (Background -> Content)
36
- */
37
- async handleRuntimeMessage(message) {
38
- if (message?.isBlock && message?.type === "EXECUTE_BLOCK") {
39
- try {
40
- const result = await this.executeBlock(message.data);
41
- return result;
42
- } catch (error) {
43
- return {
44
- $isError: true,
45
- message: error instanceof Error ? error.message : "Unknown error",
46
- data: {}
47
- };
48
- }
49
- }
50
- throw new Error("Invalid message type");
51
- }
52
- /**
53
- * Window message를 웹페이지로 전송
54
- */
55
- sendToWebpage(message) {
56
- window.postMessage(message, "*");
57
- }
58
- /**
59
- * 에러 응답 생성 헬퍼
60
- */
61
- createErrorResponse(requestId, error) {
62
- return {
63
- type: "8G_COLLECT_RESPONSE",
64
- requestId,
65
- success: false,
66
- result: {
67
- error: error instanceof Error ? error.message : "Unknown error",
68
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
69
- }
70
- };
71
- }
72
- /**
73
- * 성공 응답 생성 헬퍼
74
- */
75
- createSuccessResponse(requestId, result) {
76
- return {
77
- type: "8G_COLLECT_RESPONSE",
78
- requestId,
79
- success: true,
80
- result
81
- };
82
- }
83
- }
@@ -1,22 +0,0 @@
1
- (function () {
2
- 'use strict';
3
-
4
- const injectTime = performance.now();
5
- (async () => {
6
- if ("vendor/crx-client-preamble.js")
7
- await import(
8
- /* @vite-ignore */
9
- chrome.runtime.getURL("vendor/crx-client-preamble.js")
10
- );
11
- await import(
12
- /* @vite-ignore */
13
- chrome.runtime.getURL("vendor/vite-client.js")
14
- );
15
- const { onExecute } = await import(
16
- /* @vite-ignore */
17
- chrome.runtime.getURL("src/content/main.tsx.js")
18
- );
19
- onExecute?.({ perf: { injectTime, loadTime: performance.now() - injectTime } });
20
- })().catch(console.error);
21
-
22
- })();
@@ -1,50 +0,0 @@
1
- import __vite__cjsImport0_react_jsxDevRuntime from "/vendor/.vite-deps-react_jsx-dev-runtime.js__v--34285d49.js"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2
- import __vite__cjsImport1_reactDom_client from "/vendor/.vite-deps-react-dom_client.js__v--34285d49.js"; const createRoot = __vite__cjsImport1_reactDom_client["createRoot"];
3
- import { MessageKernel } from "/src/content/kernel/MessageKernel.ts.js";
4
- import { InternalMessageHandler } from "/src/content/handler/InternalMessageHandler.ts.js";
5
- import { ExternalMessageHandler } from "/src/content/handler/ExternalMessageHandler.ts.js";
6
- import { ConfirmationUIContainer } from "/src/content/components/ConfirmationUI.tsx.js";
7
- import { ExecutionStatusUIContainer } from "/src/content/components/ExecutionStatusUI.tsx.js";
8
- (() => {
9
- if (window.is8gExtensionInjected) return;
10
- window.is8gExtensionInjected = true;
11
- console.log("[8G Extension] Content script initialized on:", window.location.href);
12
- const messageKernel = new MessageKernel();
13
- const internalHandler = new InternalMessageHandler(messageKernel);
14
- const externalHandler = new ExternalMessageHandler(messageKernel);
15
- internalHandler.initializeMessageListener();
16
- externalHandler.initializeMessageListener();
17
- const isTopFrame = window.self === window.top;
18
- if (isTopFrame) {
19
- const initUI = () => {
20
- const confirmationRoot = document.createElement("div");
21
- confirmationRoot.id = "8g-confirmation-ui-root";
22
- confirmationRoot.style.cssText = "all: initial; position: fixed; z-index: 2147483647;";
23
- document.body.appendChild(confirmationRoot);
24
- const confirmationReactRoot = createRoot(confirmationRoot);
25
- confirmationReactRoot.render(/* @__PURE__ */ jsxDEV(ConfirmationUIContainer, {}, void 0, false, {
26
- fileName: "/Users/kerry/Documents/GitHub/8g-extension/src/content/main.tsx",
27
- lineNumber: 40,
28
- columnNumber: 36
29
- }, this));
30
- const executionStatusRoot = document.createElement("div");
31
- executionStatusRoot.id = "8g-execution-status-ui-root";
32
- executionStatusRoot.style.cssText = "all: initial; position: fixed; z-index: 2147483647;";
33
- document.body.appendChild(executionStatusRoot);
34
- const executionStatusReactRoot = createRoot(executionStatusRoot);
35
- executionStatusReactRoot.render(/* @__PURE__ */ jsxDEV(ExecutionStatusUIContainer, {}, void 0, false, {
36
- fileName: "/Users/kerry/Documents/GitHub/8g-extension/src/content/main.tsx",
37
- lineNumber: 49,
38
- columnNumber: 39
39
- }, this));
40
- console.log("[8G Extension] UI Components mounted (top frame only)");
41
- };
42
- if (document.body) {
43
- initUI();
44
- } else {
45
- document.addEventListener("DOMContentLoaded", initUI);
46
- }
47
- } else {
48
- console.log("[8G Extension] Skipping UI mount (inside iframe)");
49
- }
50
- })();
@@ -1 +0,0 @@
1
- export { synchronizedLock } from "/src/content/utils/synchronizedLock.ts.js";
@@ -1,35 +0,0 @@
1
- class SynchronizedLock {
2
- isLocked = false;
3
- waitQueue = [];
4
- async getLock() {
5
- return new Promise((resolve) => {
6
- if (!this.isLocked) {
7
- this.isLocked = true;
8
- resolve();
9
- } else {
10
- this.waitQueue.push(resolve);
11
- }
12
- });
13
- }
14
- releaseLock() {
15
- if (!this.isLocked) {
16
- console.warn("[SynchronizedLock] Attempting to release an unlocked lock");
17
- return;
18
- }
19
- this.isLocked = false;
20
- if (this.waitQueue.length > 0) {
21
- const nextResolve = this.waitQueue.shift();
22
- if (nextResolve) {
23
- this.isLocked = true;
24
- nextResolve();
25
- }
26
- }
27
- }
28
- isCurrentlyLocked() {
29
- return this.isLocked;
30
- }
31
- getQueueLength() {
32
- return this.waitQueue.length;
33
- }
34
- }
35
- export const synchronizedLock = new SynchronizedLock();
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <title>Vite Dev Mode</title>
5
- <script src="/assets/loading-page-1924caaa.js" type="module"></script>
6
- </head>
7
- <body
8
- style="font-family: Arial, sans-serif; padding: 20px; text-align: center"
9
- >
10
- <h1>Vite Dev Mode</h1>
11
- </body>
12
- </html>
@@ -1,150 +0,0 @@
1
- export * from "/src/blocks/index.ts.js";
2
- export class Condition {
3
- expr;
4
- json;
5
- }
6
- export class Binding {
7
- template;
8
- valueFrom;
9
- default;
10
- }
11
- export class WorkflowStep {
12
- id;
13
- title;
14
- when;
15
- block;
16
- // BlockBase 호환. 바인딩은 런타임에서 해석
17
- repeat;
18
- // 반복 설정 (forEach 또는 count)`
19
- next;
20
- onSuccess;
21
- onFailure;
22
- switch;
23
- timeoutMs;
24
- retry;
25
- delayAfterMs;
26
- }
27
- export class Workflow {
28
- version;
29
- id;
30
- title;
31
- description;
32
- start;
33
- steps;
34
- vars;
35
- // 워크플로우 초기 변수
36
- defaultDelayMs;
37
- }
38
- export class WorkflowStepRunResult {
39
- stepId;
40
- skipped;
41
- success;
42
- message;
43
- result;
44
- startedAt;
45
- finishedAt;
46
- attempts;
47
- }
48
- export class CollectWorkflowResult {
49
- success;
50
- steps;
51
- context;
52
- targetUrl;
53
- timestamp;
54
- error;
55
- }
56
- export var CurrencyCode = /* @__PURE__ */ ((CurrencyCode2) => {
57
- CurrencyCode2["USD"] = "USD";
58
- CurrencyCode2["KRW"] = "KRW";
59
- CurrencyCode2["EUR"] = "EUR";
60
- CurrencyCode2["GBP"] = "GBP";
61
- CurrencyCode2["CAD"] = "CAD";
62
- CurrencyCode2["CNY"] = "CNY";
63
- CurrencyCode2["JPY"] = "JPY";
64
- CurrencyCode2["VND"] = "VND";
65
- CurrencyCode2["ARS"] = "ARS";
66
- CurrencyCode2["INR"] = "INR";
67
- CurrencyCode2["TWD"] = "TWD";
68
- CurrencyCode2["AUD"] = "AUD";
69
- CurrencyCode2["HKD"] = "HKD";
70
- CurrencyCode2["IDR"] = "IDR";
71
- CurrencyCode2["MXN"] = "MXN";
72
- CurrencyCode2["NZD"] = "NZD";
73
- CurrencyCode2["SGD"] = "SGD";
74
- CurrencyCode2["CHF"] = "CHF";
75
- CurrencyCode2["THB"] = "THB";
76
- CurrencyCode2["BRL"] = "BRL";
77
- CurrencyCode2["TRY"] = "TRY";
78
- CurrencyCode2["RUB"] = "RUB";
79
- CurrencyCode2["NOK"] = "NOK";
80
- CurrencyCode2["DKK"] = "DKK";
81
- CurrencyCode2["SEK"] = "SEK";
82
- CurrencyCode2["ILS"] = "ILS";
83
- CurrencyCode2["ZAR"] = "ZAR";
84
- CurrencyCode2["PLN"] = "PLN";
85
- CurrencyCode2["PHP"] = "PHP";
86
- CurrencyCode2["CZK"] = "CZK";
87
- CurrencyCode2["CLP"] = "CLP";
88
- CurrencyCode2["COP"] = "COP";
89
- CurrencyCode2["EGP"] = "EGP";
90
- CurrencyCode2["MYR"] = "MYR";
91
- CurrencyCode2["HUF"] = "HUF";
92
- CurrencyCode2["AED"] = "AED";
93
- CurrencyCode2["SAR"] = "SAR";
94
- CurrencyCode2["RON"] = "RON";
95
- CurrencyCode2["BGN"] = "BGN";
96
- return CurrencyCode2;
97
- })(CurrencyCode || {});
98
- export const CurrencyInfoSchema = {
99
- code: {
100
- type: "string",
101
- enum: Object.values(CurrencyCode),
102
- description: "Currency code"
103
- },
104
- symbol: {
105
- type: "string",
106
- enum: [
107
- "$",
108
- "₩",
109
- "€",
110
- "£",
111
- "¥",
112
- "₫",
113
- "₹",
114
- "NT$",
115
- "Rp",
116
- "₣",
117
- "฿",
118
- "R$",
119
- "₺",
120
- "₽",
121
- "kr",
122
- "₪",
123
- "R",
124
- "zł",
125
- "₱",
126
- "Kč",
127
- "E£",
128
- "RM",
129
- "Ft",
130
- "د.إ",
131
- "﷼",
132
- "L",
133
- "лв"
134
- ],
135
- description: "Currency symbol"
136
- },
137
- format: {
138
- type: "string",
139
- enum: ["%s%u", "%s%n", "%u%s", "%n%s", "%s %u", "%s %n", "%u %s", "%n %s"],
140
- description: "Display format (%s: symbol, %u/%n: amount)"
141
- },
142
- amount: {
143
- type: "number",
144
- description: "Actual amount value"
145
- },
146
- text: {
147
- type: "string",
148
- description: "Formatted display text (e.g., US$57.75)"
149
- }
150
- };
@@ -1,27 +0,0 @@
1
- export function isExecuteBlockMessage(message) {
2
- return message && message.isBlock === true && message.type === "EXECUTE_BLOCK";
3
- }
4
- export function isCdpClickMessage(message) {
5
- return message && message.type === "CDP_CLICK";
6
- }
7
- export function isCdpKeypressMessage(message) {
8
- return message && message.type === "CDP_KEYPRESS";
9
- }
10
- export function isFetchApiMessage(message) {
11
- return message && message.type === "FETCH_API";
12
- }
13
- export function isExportDataMessage(message) {
14
- return message && message.type === "EXPORT_DATA";
15
- }
16
- export function isNetworkCatchMessage(message) {
17
- return message && message.type === "NETWORK_CATCH";
18
- }
19
- export function isShowExecutionStatusMessage(message) {
20
- return message && message.type === "SHOW_EXECUTION_STATUS";
21
- }
22
- export function isHideExecutionStatusMessage(message) {
23
- return message && message.type === "HIDE_EXECUTION_STATUS";
24
- }
25
- export function isErrorResponse(response) {
26
- return response && response.$isError === true;
27
- }
@@ -1,45 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
10
- }) : x)(function(x) {
11
- if (typeof require !== "undefined") return require.apply(this, arguments);
12
- throw Error('Dynamic require of "' + x + '" is not supported');
13
- });
14
- var __commonJS = (cb, mod) => function __require2() {
15
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
16
- };
17
- var __export = (target, all) => {
18
- for (var name in all)
19
- __defProp(target, name, { get: all[name], enumerable: true });
20
- };
21
- var __copyProps = (to, from, except, desc) => {
22
- if (from && typeof from === "object" || typeof from === "function") {
23
- for (let key of __getOwnPropNames(from))
24
- if (!__hasOwnProp.call(to, key) && key !== except)
25
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
26
- }
27
- return to;
28
- };
29
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
- // If the importer is in node compatibility mode or this is not an ESM
31
- // file that has been converted to a CommonJS file using a Babel-
32
- // compatible transform (i.e. "__esModule" has not been set), then set
33
- // "default" to the CommonJS "module.exports" for node compatibility.
34
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
- mod
36
- ));
37
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
38
-
39
- export {
40
- __require,
41
- __commonJS,
42
- __export,
43
- __toESM,
44
- __publicField
45
- };