@fkn/lib 0.0.2 → 0.1.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/README.md CHANGED
@@ -4,3 +4,5 @@
4
4
 
5
5
  ## TODOs:
6
6
  - make docs using vitepress
7
+ - Allow multiple origins to access the same data by having a public/private key pair sign the origin it's served from
8
+ e.g, anime.fkn.app hashes gives access to the same public key verif that fc7zsi85kboht4mj5.npm.fkn.sdbx.app has
package/build/api.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Target } from 'osra';
2
- export declare const setApiTarget: (messagePort: Target | Promise<Target>) => Promise<void>;
3
- export declare const apiTargetIsReady: () => Promise<Target>;
4
- export declare const getApiTargetPort: () => Promise<any>;
1
+ import type { Target } from 'osra';
2
+ export declare const setApiTarget: (messagePort: Target | Promise<Target>) => Promise<void>;
3
+ export declare const apiTargetIsReady: () => Promise<Target>;
4
+ export declare const getApiTargetPort: () => Promise<any>;
package/build/dom.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- export declare const isWorker: boolean;
2
- export declare const createdIframe: HTMLIFrameElement;
3
- export declare const foundIframe: HTMLIFrameElement;
4
- export declare const iframe: HTMLIFrameElement;
5
- export declare const targetWindow: Window | null;
1
+ export declare const isWorker: boolean;
2
+ export declare const iframe: HTMLIFrameElement;
3
+ export declare const targetWindow: Window | null;
package/build/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { serverProxyFetch } from './proxy';
2
- export { torrent, torrentFile } from './torrent';
3
- export { setApiTarget, apiTargetIsReady as getApiTarget, getApiTargetPort } from './api';
1
+ export { serverProxyFetch } from './proxy';
2
+ export { WebVPNWebTransport } from './webvpn';
3
+ export { setApiTarget, apiTargetIsReady as getApiTarget, getApiTargetPort } from './api';
package/build/index.js CHANGED
@@ -1,71 +1,127 @@
1
- import { call as d } from "osra";
2
- let h, a;
3
- const f = () => (a = new Promise((e, t) => {
4
- h = e;
5
- }), a), y = f(), m = async (e) => {
6
- e === y && f(), h(await e);
7
- }, g = "https://fkn.app", T = globalThis.window === void 0, r = globalThis.document?.createElement("iframe");
8
- r && (r.src = `${g}/sandbox-api`, r.style.display = "none", document.body.appendChild(r));
9
- const c = r, p = c?.contentWindow, b = (e) => m(e), w = () => a, k = async () => d(await w(), { key: "fkn-sandbox-api" })("API_PORT", {});
10
- if (T) {
11
- let e = !1;
12
- a.then(() => {
13
- e = !0;
1
+ import { call as g } from "osra";
2
+ let c, i;
3
+ const d = () => (i = new Promise((t, e) => {
4
+ c = t;
5
+ }), i), p = d(), m = async (t) => {
6
+ t === p && d(), c(await t);
7
+ }, h = "https://fkn.app", f = globalThis.window === void 0, o = globalThis?.document.querySelector(`iframe[src="${h}/sandbox-api"]`), n = globalThis.document?.createElement("iframe");
8
+ !o && n && (n.src = `${h}/sandbox-api`, n.style.display = "none", document.body.appendChild(n));
9
+ const w = o || n, l = w?.contentWindow, b = (t) => m(t), u = () => i, x = async () => g(await u(), { key: "fkn-sandbox-api" })("API_PORT", {});
10
+ if (f) {
11
+ let t = !1;
12
+ i.then(() => {
13
+ t = !0;
14
14
  }), setTimeout(() => {
15
- e || console.warn("@fkn/lib's api target has not resolved after 250ms while in a worker, make sure to call `setApiTarget(messagePort)`");
15
+ t || console.warn("@fkn/lib's api target has not resolved after 250ms while in a worker, make sure to call `setApiTarget(messagePort)`");
16
16
  }, 250);
17
17
  } else {
18
- if (!c)
18
+ if (!w)
19
19
  throw new Error("Missing appended iframe");
20
- c.addEventListener("load", () => {
21
- const e = setInterval(
22
- () => d(p, { key: "fkn-sandbox" })("APP_READY", {}).then(() => {
23
- m(p), clearInterval(e);
24
- }),
25
- 10
26
- );
27
- });
20
+ const t = setInterval(
21
+ () => g(l, { key: "fkn-sandbox" })("APP_READY", {}).then(() => {
22
+ m(l), clearInterval(t);
23
+ }).catch(() => {
24
+ console.warn("Failed to connect to sandbox, trying again in 10ms");
25
+ }),
26
+ 10
27
+ );
28
28
  }
29
- const l = (e, t) => w().then(
30
- (s) => d(s, { key: "fkn-sandbox-api" })(e, t)
31
- ), E = async (e, t) => {
32
- const s = e, o = t, { body: i, ...n } = await l("SERVER_PROXY_FETCH", { input: s, init: o });
29
+ const _ = (t, e) => u().then(
30
+ (a) => g(a, { key: "fkn-sandbox-api" })(t, e)
31
+ ), y = async (t, e) => {
32
+ const a = t, s = e, { body: I, ...r } = await _("SERVER_PROXY_FETCH", { input: a, init: s });
33
33
  return new Response(
34
- i,
34
+ I,
35
35
  {
36
- ...n,
36
+ ...r,
37
37
  headers: {
38
- ...n.headers,
39
- ...n.headers && {
40
- setCookie: n.headers["set-cookie"]
38
+ ...r.headers,
39
+ ...r.headers && {
40
+ setCookie: r.headers["set-cookie"]
41
41
  }
42
42
  }
43
43
  }
44
44
  );
45
- }, P = async ({ magnet: e, path: t, offset: s, end: o }) => {
46
- const { body: i, ...n } = await l("TORRENT", { magnet: e, path: t, offset: s, end: o });
47
- return new Response(
48
- i,
49
- {
50
- ...n,
51
- headers: Object.fromEntries(n.headers)
52
- }
53
- );
54
- }, u = async ({ magnet: e }) => {
55
- const { body: t, ...s } = await l("TORRENT_FILE", { magnet: e });
56
- return new Response(
57
- t,
58
- {
59
- ...s,
60
- headers: Object.fromEntries(s.headers)
61
- }
62
- );
63
45
  };
46
+ class M {
47
+ _internals;
48
+ _awaitedInternals;
49
+ closed;
50
+ constructor() {
51
+ this.closed = new Promise((e) => {
52
+ this._internals = _(
53
+ "WEBVPN_WEBTRANSPORT",
54
+ {
55
+ close: ({ closeCode: a, reason: s }) => e({ closeCode: a, reason: s })
56
+ }
57
+ ), this._internals.then((a) => {
58
+ this._awaitedInternals = a;
59
+ });
60
+ });
61
+ }
62
+ close(e) {
63
+ this._internals.then(({ close: a }) => a(e ?? {}));
64
+ }
65
+ get ready() {
66
+ return this._internals.then(() => {
67
+ });
68
+ }
69
+ get incomingBidirectionalStreams() {
70
+ return this._awaitedInternals.incomingBidirectionalStreams;
71
+ }
72
+ get incomingUnidirectionalStreams() {
73
+ return this._awaitedInternals.incomingUnidirectionalStreams;
74
+ }
75
+ async createBidirectionalStream() {
76
+ const { readable: e, writable: a } = await this._awaitedInternals.createBidirectionalStream();
77
+ return { readable: e, writable: a };
78
+ }
79
+ createUnidirectionalStream() {
80
+ return this._awaitedInternals.createUnidirectionalStream();
81
+ }
82
+ get datagrams() {
83
+ const e = this;
84
+ return {
85
+ get incomingHighWaterMark() {
86
+ return e._awaitedInternals.datagrams.incomingHighWaterMark;
87
+ },
88
+ set incomingHighWaterMark(a) {
89
+ e._awaitedInternals.datagrams.setIncomingHighWaterMark(a);
90
+ },
91
+ get incomingMaxAge() {
92
+ return e._awaitedInternals.datagrams.incomingMaxAge;
93
+ },
94
+ set incomingMaxAge(a) {
95
+ e._awaitedInternals.datagrams.setIncomingMaxAge(a);
96
+ },
97
+ get maxDatagramSize() {
98
+ return e._awaitedInternals.datagrams.maxDatagramSize;
99
+ },
100
+ get outgoingHighWaterMark() {
101
+ return e._awaitedInternals.datagrams.outgoingHighWaterMark;
102
+ },
103
+ set outgoingHighWaterMark(a) {
104
+ e._awaitedInternals.datagrams.setOutgoingHighWaterMark(a);
105
+ },
106
+ get outgoingMaxAge() {
107
+ return e._awaitedInternals.datagrams.outgoingMaxAge;
108
+ },
109
+ set outgoingMaxAge(a) {
110
+ e._awaitedInternals.datagrams.setOutgoingMaxAge(a);
111
+ },
112
+ get readable() {
113
+ return e._awaitedInternals.datagrams.readable;
114
+ },
115
+ get writable() {
116
+ return e._awaitedInternals.datagrams.writable;
117
+ }
118
+ };
119
+ }
120
+ }
64
121
  export {
65
- w as getApiTarget,
66
- k as getApiTargetPort,
67
- E as serverProxyFetch,
68
- b as setApiTarget,
69
- P as torrent,
70
- u as torrentFile
122
+ M as WebVPNWebTransport,
123
+ u as getApiTarget,
124
+ x as getApiTargetPort,
125
+ y as serverProxyFetch,
126
+ b as setApiTarget
71
127
  };
@@ -1 +1 @@
1
- export declare const showPluginBrowser: () => Promise<any>;
1
+ export declare const showPluginBrowser: () => Promise<any>;
package/build/proxy.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export type NativeFetch = typeof globalThis.fetch;
2
- export type ProxyFetchRequestInit = Omit<RequestInit, "body" | "headers" | "signal"> & {
3
- body: Exclude<RequestInit['body'], FormData | URLSearchParams>;
4
- headers: Exclude<RequestInit['headers'], Headers>;
5
- };
6
- export type FetchInitOptions = {
7
- proxyCache?: string | undefined;
8
- proxyDelay?: string | undefined;
9
- proxyRuntime?: boolean | undefined;
10
- noProxy?: boolean | undefined;
11
- };
12
- export type ProxyFetchRequestInfo = string | Omit<Request, "arrayBuffer" | "text" | "headers" | "signal" | "clone" | "blob" | "formData" | "json">;
13
- export declare const serverProxyFetch: (_input: Parameters<NativeFetch>[0], _init?: Parameters<NativeFetch>[1]) => Promise<Response>;
1
+ export type NativeFetch = typeof globalThis.fetch;
2
+ export type ProxyFetchRequestInit = Omit<RequestInit, "body" | "headers" | "signal"> & {
3
+ body: Exclude<RequestInit['body'], FormData | URLSearchParams>;
4
+ headers: Exclude<RequestInit['headers'], Headers>;
5
+ };
6
+ export type FetchInitOptions = {
7
+ proxyCache?: string | undefined;
8
+ proxyDelay?: string | undefined;
9
+ proxyRuntime?: boolean | undefined;
10
+ noProxy?: boolean | undefined;
11
+ };
12
+ export type ProxyFetchRequestInfo = string | Omit<Request, "arrayBuffer" | "text" | "headers" | "signal" | "clone" | "blob" | "formData" | "json">;
13
+ export declare const serverProxyFetch: (_input: Parameters<NativeFetch>[0], _init?: Parameters<NativeFetch>[1]) => Promise<Response>;
package/build/target.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { Target } from 'osra';
2
- export declare let _resolve: any, _reject: any;
3
- export declare let target: Promise<Target>;
4
- export declare const initTargetPromise: () => Promise<Target>;
5
- export declare const initialTargetPromise: Promise<Target>;
6
- export declare const setTarget: (newTarget: Target | Promise<Target>) => Promise<void>;
1
+ import { Target } from 'osra';
2
+ export declare let _resolve: any, _reject: any;
3
+ export declare let target: Promise<Target>;
4
+ export declare const initTargetPromise: () => Promise<Target>;
5
+ export declare const initialTargetPromise: Promise<Target>;
6
+ export declare const setTarget: (newTarget: Target | Promise<Target>) => Promise<void>;
@@ -1,2 +1,3 @@
1
- declare const readyCall: <T2 extends SandboxApiResolvers, T3 extends keyof T2>(type: T3, data?: Parameters<T2[T3]>[0] | undefined) => Promise<any>;
2
- export { readyCall as call, };
1
+ import type { SandboxApiResolvers } from '@mfkn/fkn-web/src/api/resolvers';
2
+ declare const readyCall: <T2 extends SandboxApiResolvers, T3 extends keyof T2>(type: T3, data?: Parameters<T2[T3]>[0] | undefined) => Promise<any>;
3
+ export { readyCall as call, };
@@ -1 +1 @@
1
- export * from './call';
1
+ export * from './call';
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1,52 @@
1
+ type WebVPNWebTransportResponse = {
2
+ ready: undefined;
3
+ close: ({ closeCode, reason }: {
4
+ closeCode?: number;
5
+ reason?: string;
6
+ }) => void;
7
+ incomingBidirectionalStreams: ReadableStream<any>;
8
+ incomingUnidirectionalStreams: ReadableStream<any>;
9
+ createBidirectionalStream: () => Promise<{
10
+ readable: ReadableStream<any>;
11
+ writable: WritableStream<any>;
12
+ }>;
13
+ createUnidirectionalStream: () => Promise<WritableStream<any>>;
14
+ datagrams: {
15
+ incomingHighWaterMark: number;
16
+ setIncomingHighWaterMark: (value: number) => void;
17
+ incomingMaxAge: number;
18
+ setIncomingMaxAge: (value: number) => void;
19
+ maxDatagramSize: number;
20
+ outgoingHighWaterMark: number;
21
+ setOutgoingHighWaterMark: (value: number) => void;
22
+ outgoingMaxAge: number;
23
+ setOutgoingMaxAge: (value: number) => void;
24
+ readable: ReadableStream<any>;
25
+ writable: WritableStream<any>;
26
+ };
27
+ };
28
+ export declare class WebVPNWebTransport implements WebTransport {
29
+ _internals: Promise<WebVPNWebTransportResponse>;
30
+ _awaitedInternals: WebVPNWebTransportResponse;
31
+ closed: Promise<WebTransportCloseInfo>;
32
+ constructor();
33
+ close(closeInfo?: WebTransportCloseInfo): void;
34
+ get ready(): Promise<undefined>;
35
+ get incomingBidirectionalStreams(): ReadableStream<any>;
36
+ get incomingUnidirectionalStreams(): ReadableStream<any>;
37
+ createBidirectionalStream(): Promise<{
38
+ readable: ReadableStream<any>;
39
+ writable: WritableStream<any>;
40
+ }>;
41
+ createUnidirectionalStream(): Promise<WritableStream<any>>;
42
+ get datagrams(): {
43
+ incomingHighWaterMark: number;
44
+ incomingMaxAge: number;
45
+ readonly maxDatagramSize: number;
46
+ outgoingHighWaterMark: number;
47
+ outgoingMaxAge: number;
48
+ readonly readable: ReadableStream<any>;
49
+ readonly writable: WritableStream<any>;
50
+ };
51
+ }
52
+ export {};
package/package.json CHANGED
@@ -1,22 +1,25 @@
1
1
  {
2
2
  "name": "@fkn/lib",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "type": "module",
7
- "files": ["build"],
7
+ "files": [
8
+ "build"
9
+ ],
8
10
  "devDependencies": {
9
11
  "@mfkn/web": "file:../web",
10
12
  "@mfkn/web-extension": "git+https://github.com/MFKN/web-extension.git",
11
13
  "concurrently": "^7.6.0",
12
14
  "parse-torrent-file": "^4.2.2",
13
- "typescript": "^4.9.3",
15
+ "typescript": "^5.5.4",
14
16
  "vite": "^3.2.5",
15
17
  "webextension-polyfill": "^0.10.0"
16
18
  },
17
19
  "scripts": {
18
20
  "dev": "concurrently \"vite build --watch --mode development\" \"tsc --watch\"",
19
21
  "build": "vite build && tsc",
22
+ "build-watch": "vite build --watch --mode production && tsc",
20
23
  "build-dev": "vite build --mode development && tsc",
21
24
  "dev-watch": "vite build --watch --mode development",
22
25
  "build-types": "tsc"
@@ -1,10 +0,0 @@
1
- export type TorrentOptions = {
2
- magnet: string;
3
- path: string;
4
- offset?: number;
5
- end?: number;
6
- };
7
- export declare const torrent: ({ magnet, path, offset, end }: TorrentOptions) => Promise<Response>;
8
- export declare const torrentFile: ({ magnet }: {
9
- magnet: string;
10
- }) => Promise<Response>;