osra 0.2.0 → 0.2.2

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 (33) hide show
  1. package/README.md +284 -34
  2. package/build/extension/background.js +2 -0
  3. package/build/extension/background.js.map +1 -0
  4. package/build/extension/chunks/index.js +2 -0
  5. package/build/extension/chunks/index.js.map +1 -0
  6. package/build/extension/content.js +2 -0
  7. package/build/extension/content.js.map +1 -0
  8. package/build/extension/manifest.json +21 -0
  9. package/build/extension/popup.html +120 -0
  10. package/build/extension/popup.js +2 -0
  11. package/build/extension/popup.js.map +1 -0
  12. package/build/extension-test/background.js +753 -0
  13. package/build/extension-test/background.js.map +1 -0
  14. package/build/extension-test/content.js +4585 -0
  15. package/build/extension-test/content.js.map +1 -0
  16. package/build/extension-test/manifest.json +22 -0
  17. package/build/extension-test/popup.html +106 -0
  18. package/build/extension-test/popup.js +4610 -0
  19. package/build/extension-test/popup.js.map +1 -0
  20. package/build/extension-test-firefox/background.js +5464 -0
  21. package/build/extension-test-firefox/background.js.map +1 -0
  22. package/build/extension-test-firefox/content.js +5286 -0
  23. package/build/extension-test-firefox/content.js.map +1 -0
  24. package/build/extension-test-firefox/manifest.json +27 -0
  25. package/build/extension-test-firefox/popup.html +106 -0
  26. package/build/extension-test-firefox/popup.js +5213 -0
  27. package/build/extension-test-firefox/popup.js.map +1 -0
  28. package/build/index.d.ts +383 -9
  29. package/build/index.js +432 -327
  30. package/build/index.js.map +1 -1
  31. package/build/test.js +25848 -0
  32. package/build/test.js.map +1 -0
  33. package/package.json +13 -6
@@ -0,0 +1,120 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Osra Test</title>
6
+ <style>
7
+ body {
8
+ width: 350px;
9
+ padding: 16px;
10
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
11
+ font-size: 14px;
12
+ }
13
+ h1 {
14
+ font-size: 18px;
15
+ margin: 0 0 16px;
16
+ }
17
+ .section {
18
+ margin-bottom: 16px;
19
+ padding: 12px;
20
+ background: #f5f5f5;
21
+ border-radius: 8px;
22
+ }
23
+ .section h2 {
24
+ font-size: 14px;
25
+ margin: 0 0 8px;
26
+ color: #333;
27
+ }
28
+ input, button {
29
+ padding: 8px 12px;
30
+ border: 1px solid #ddd;
31
+ border-radius: 4px;
32
+ font-size: 14px;
33
+ }
34
+ input {
35
+ width: 100%;
36
+ box-sizing: border-box;
37
+ margin-bottom: 8px;
38
+ }
39
+ button {
40
+ background: #4285f4;
41
+ color: white;
42
+ border: none;
43
+ cursor: pointer;
44
+ margin-right: 4px;
45
+ margin-bottom: 4px;
46
+ }
47
+ button:hover {
48
+ background: #3367d6;
49
+ }
50
+ button:disabled {
51
+ background: #ccc;
52
+ cursor: not-allowed;
53
+ }
54
+ #output {
55
+ background: #1e1e1e;
56
+ color: #d4d4d4;
57
+ padding: 12px;
58
+ border-radius: 4px;
59
+ font-family: 'Consolas', 'Monaco', monospace;
60
+ font-size: 12px;
61
+ max-height: 200px;
62
+ overflow-y: auto;
63
+ white-space: pre-wrap;
64
+ word-break: break-all;
65
+ }
66
+ .log-entry {
67
+ margin-bottom: 4px;
68
+ }
69
+ .log-success { color: #4ec9b0; }
70
+ .log-error { color: #f48771; }
71
+ .log-info { color: #9cdcfe; }
72
+ #status {
73
+ padding: 8px;
74
+ border-radius: 4px;
75
+ margin-bottom: 12px;
76
+ text-align: center;
77
+ }
78
+ #status.connected { background: #d4edda; color: #155724; }
79
+ #status.disconnected { background: #f8d7da; color: #721c24; }
80
+ #status.connecting { background: #fff3cd; color: #856404; }
81
+ </style>
82
+ </head>
83
+ <body>
84
+ <h1>Osra Test Extension</h1>
85
+
86
+ <div id="status" class="connecting">Connecting...</div>
87
+
88
+ <div class="section">
89
+ <h2>Greet Test</h2>
90
+ <input type="text" id="greetInput" placeholder="Enter a name" value="World">
91
+ <button id="greetBtn">Greet</button>
92
+ </div>
93
+
94
+ <div class="section">
95
+ <h2>Counter Test</h2>
96
+ <button id="createCounterBtn">Create Counter (10)</button>
97
+ <button id="incrementBtn" disabled>Increment</button>
98
+ <button id="decrementBtn" disabled>Decrement</button>
99
+ <button id="getValueBtn" disabled>Get Value</button>
100
+ </div>
101
+
102
+ <div class="section">
103
+ <h2>Process Data Test</h2>
104
+ <input type="text" id="dataInput" placeholder="Comma-separated items" value="apple,banana,cherry">
105
+ <button id="processBtn">Process</button>
106
+ </div>
107
+
108
+ <div class="section">
109
+ <h2>Extension Info</h2>
110
+ <button id="infoBtn">Get Info</button>
111
+ </div>
112
+
113
+ <div class="section">
114
+ <h2>Output</h2>
115
+ <div id="output"></div>
116
+ </div>
117
+
118
+ <script type="module" src="popup.js"></script>
119
+ </body>
120
+ </html>
@@ -0,0 +1,2 @@
1
+ import{e as f}from"./chunks/index.js";const a=document.getElementById("status"),s=document.getElementById("output"),B=document.getElementById("greetInput"),l=document.getElementById("greetBtn"),d=document.getElementById("createCounterBtn"),u=document.getElementById("incrementBtn"),m=document.getElementById("decrementBtn"),g=document.getElementById("getValueBtn"),p=document.getElementById("dataInput"),y=document.getElementById("processBtn"),E=document.getElementById("infoBtn");let o,r=null;function t(e,n="info"){const c=document.createElement("div");c.className=`log-entry log-${n}`,c.textContent=`[${new Date().toLocaleTimeString()}] ${e}`,s.appendChild(c),s.scrollTop=s.scrollHeight}function i(e,n){a.className=e,a.textContent=n}async function $(){try{t("Connecting to background script...","info");const e=chrome.runtime.connect({name:"popup"});o=await f({},{transport:e}),i("connected","Connected to background"),t("Successfully connected!","success"),l.disabled=!1,d.disabled=!1,y.disabled=!1,E.disabled=!1}catch(e){i("disconnected","Connection failed"),t(`Failed to connect: ${e}`,"error")}}l.addEventListener("click",async()=>{try{const e=B.value||"World";t(`Calling greet("${e}")...`,"info");const n=await o.greet(e);t(`Result: ${n}`,"success")}catch(e){t(`Error: ${e}`,"error")}});d.addEventListener("click",async()=>{try{t("Creating counter with initial value 10...","info"),r=await o.createCounter(10),t("Counter created!","success"),u.disabled=!1,m.disabled=!1,g.disabled=!1}catch(e){t(`Error: ${e}`,"error")}});u.addEventListener("click",async()=>{if(r)try{const e=await r.increment();t(`Incremented: ${e}`,"success")}catch(e){t(`Error: ${e}`,"error")}});m.addEventListener("click",async()=>{if(r)try{const e=await r.decrement();t(`Decremented: ${e}`,"success")}catch(e){t(`Error: ${e}`,"error")}});g.addEventListener("click",async()=>{if(r)try{const e=await r.getValue();t(`Current value: ${e}`,"success")}catch(e){t(`Error: ${e}`,"error")}});y.addEventListener("click",async()=>{try{const e=p.value.split(",").map(c=>c.trim()).filter(Boolean);t(`Processing ${e.length} items...`,"info");const n=await o.processData({items:e});t(`Result: ${JSON.stringify(n)}`,"success")}catch(e){t(`Error: ${e}`,"error")}});E.addEventListener("click",async()=>{try{t("Getting extension info...","info");const e=await o.getExtensionInfo();t(`Extension ID: ${e.id}`,"success"),t(`Version: ${e.version}`,"success")}catch(e){t(`Error: ${e}`,"error")}});$();
2
+ //# sourceMappingURL=popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.js","sources":["../../tests/extension/popup.ts"],"sourcesContent":["import { expose } from '../../src/index'\r\nimport type { BackgroundAPI } from './background'\r\n\r\ntype Counter = Awaited<ReturnType<BackgroundAPI['createCounter']>>\r\n\r\nconst statusEl = document.getElementById('status')!\r\nconst outputEl = document.getElementById('output')!\r\nconst greetInput = document.getElementById('greetInput') as HTMLInputElement\r\nconst greetBtn = document.getElementById('greetBtn') as HTMLButtonElement\r\nconst createCounterBtn = document.getElementById('createCounterBtn') as HTMLButtonElement\r\nconst incrementBtn = document.getElementById('incrementBtn') as HTMLButtonElement\r\nconst decrementBtn = document.getElementById('decrementBtn') as HTMLButtonElement\r\nconst getValueBtn = document.getElementById('getValueBtn') as HTMLButtonElement\r\nconst dataInput = document.getElementById('dataInput') as HTMLInputElement\r\nconst processBtn = document.getElementById('processBtn') as HTMLButtonElement\r\nconst infoBtn = document.getElementById('infoBtn') as HTMLButtonElement\r\n\r\nlet api: BackgroundAPI\r\nlet counter: Counter | null = null\r\n\r\nfunction log(message: string, type: 'success' | 'error' | 'info' = 'info') {\r\n const entry = document.createElement('div')\r\n entry.className = `log-entry log-${type}`\r\n entry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`\r\n outputEl.appendChild(entry)\r\n outputEl.scrollTop = outputEl.scrollHeight\r\n}\r\n\r\nfunction setStatus(status: 'connected' | 'disconnected' | 'connecting', text: string) {\r\n statusEl.className = status\r\n statusEl.textContent = text\r\n}\r\n\r\nasync function init() {\r\n try {\r\n log('Connecting to background script...', 'info')\r\n const port = chrome.runtime.connect({ name: 'popup' })\r\n\r\n api = await expose<BackgroundAPI>({}, { transport: port })\r\n\r\n setStatus('connected', 'Connected to background')\r\n log('Successfully connected!', 'success')\r\n\r\n // Enable buttons\r\n greetBtn.disabled = false\r\n createCounterBtn.disabled = false\r\n processBtn.disabled = false\r\n infoBtn.disabled = false\r\n } catch (error) {\r\n setStatus('disconnected', 'Connection failed')\r\n log(`Failed to connect: ${error}`, 'error')\r\n }\r\n}\r\n\r\ngreetBtn.addEventListener('click', async () => {\r\n try {\r\n const name = greetInput.value || 'World'\r\n log(`Calling greet(\"${name}\")...`, 'info')\r\n const result = await api.greet(name)\r\n log(`Result: ${result}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\ncreateCounterBtn.addEventListener('click', async () => {\r\n try {\r\n log('Creating counter with initial value 10...', 'info')\r\n counter = await api.createCounter(10)\r\n log('Counter created!', 'success')\r\n\r\n // Enable counter buttons\r\n incrementBtn.disabled = false\r\n decrementBtn.disabled = false\r\n getValueBtn.disabled = false\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\nincrementBtn.addEventListener('click', async () => {\r\n if (!counter) return\r\n try {\r\n const result = await counter.increment()\r\n log(`Incremented: ${result}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\ndecrementBtn.addEventListener('click', async () => {\r\n if (!counter) return\r\n try {\r\n const result = await counter.decrement()\r\n log(`Decremented: ${result}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\ngetValueBtn.addEventListener('click', async () => {\r\n if (!counter) return\r\n try {\r\n const result = await counter.getValue()\r\n log(`Current value: ${result}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\nprocessBtn.addEventListener('click', async () => {\r\n try {\r\n const items = dataInput.value.split(',').map(s => s.trim()).filter(Boolean)\r\n log(`Processing ${items.length} items...`, 'info')\r\n const result = await api.processData({ items })\r\n log(`Result: ${JSON.stringify(result)}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\ninfoBtn.addEventListener('click', async () => {\r\n try {\r\n log('Getting extension info...', 'info')\r\n const info = await api.getExtensionInfo()\r\n log(`Extension ID: ${info.id}`, 'success')\r\n log(`Version: ${info.version}`, 'success')\r\n } catch (error) {\r\n log(`Error: ${error}`, 'error')\r\n }\r\n})\r\n\r\n// Initialize\r\ninit()\r\n"],"names":["statusEl","outputEl","greetInput","greetBtn","createCounterBtn","incrementBtn","decrementBtn","getValueBtn","dataInput","processBtn","infoBtn","api","counter","log","message","type","entry","setStatus","status","text","init","port","expose","error","name","result","items","s","info"],"mappings":"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"}