thebird 1.2.58 → 1.2.60

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/docs/index.html CHANGED
@@ -36,7 +36,7 @@ bird-chat { display: flex; flex-direction: column; height: 100%; }
36
36
  <button class="btn btn-xs btn-ghost" onclick="document.getElementById('preview-frame').src='preview/'">↺ Reload</button>
37
37
  <span class="text-xs text-base-content/50 self-center">preview/</span>
38
38
  </div>
39
- <iframe id="preview-frame" class="w-full flex-1 border-0" src="about:blank"></iframe>
39
+ <iframe id="preview-frame" class="w-full flex-1 border-0" src="about:blank" credentialless></iframe>
40
40
  </div>
41
41
  </div>
42
42
  <script>
@@ -40,18 +40,22 @@ self.addEventListener('fetch', e => {
40
40
  e.respondWith(handlePreview(key, e.request));
41
41
  });
42
42
 
43
+ const CORS_HEADERS = {
44
+ 'Cross-Origin-Resource-Policy': 'cross-origin',
45
+ };
46
+
43
47
  async function handlePreview(key, request) {
44
48
  const db = await openIDB();
45
49
  const fs = await getFS(db);
46
- if (key in fs) return new Response(fs[key], { status: 200, headers: { 'Content-Type': getMime(key) } });
50
+ if (key in fs) return new Response(fs[key], { status: 200, headers: { ...CORS_HEADERS, 'Content-Type': getMime(key) } });
47
51
  const clients = await self.clients.matchAll({ type: 'window', includeUncontrolled: true });
48
- if (!clients.length) return new Response('not found: ' + key, { status: 404 });
52
+ if (!clients.length) return new Response('not found: ' + key, { status: 404, headers: CORS_HEADERS });
49
53
  const { port1, port2 } = new MessageChannel();
50
54
  const result = await new Promise((res, rej) => {
51
55
  const t = setTimeout(() => rej(new Error('express timeout')), 5000);
52
56
  port1.onmessage = e => { clearTimeout(t); res(e.data); };
53
57
  clients[0].postMessage({ type: 'EXPRESS_REQUEST', path: '/' + key, method: request.method }, [port2]);
54
58
  });
55
- if (!result || result.status === 404) return new Response('not found: ' + key, { status: 404 });
56
- return new Response(result.body, { status: result.status || 200, headers: { 'Content-Type': result.contentType || 'text/html' } });
59
+ if (!result || result.status === 404) return new Response('not found: ' + key, { status: 404, headers: CORS_HEADERS });
60
+ return new Response(result.body, { status: result.status || 200, headers: { ...CORS_HEADERS, 'Content-Type': result.contentType || 'text/html' } });
57
61
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thebird",
3
- "version": "1.2.58",
3
+ "version": "1.2.60",
4
4
  "description": "Anthropic SDK to Gemini streaming bridge — drop-in proxy that translates Anthropic message format and tool calls to Google Gemini",
5
5
  "scripts": {
6
6
  "start": "node serve.js"