osra 0.0.10 → 0.0.11

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/build/index.d.ts CHANGED
@@ -2,3 +2,4 @@ import type { ApiMessageData, ApiResolverOptions, Resolvers, StructuredCloneTran
2
2
  export type { ApiMessageData, ApiResolverOptions, Resolvers, StructuredCloneTransferableObject, StructuredCloneTransferableType, StructuredCloneObject, StructuredCloneType, Target, TransferableObject };
3
3
  export * from './register';
4
4
  export * from './call';
5
+ export * from './webextension';
package/build/index.js CHANGED
@@ -1,89 +1,181 @@
1
- const m = "osra-message", A = ({
2
- target: r,
3
- resolvers: s,
4
- filter: o,
5
- map: t,
6
- key: n = m
1
+ const g = "osra-message", l = ({
2
+ target: e,
3
+ resolvers: t,
4
+ filter: r,
5
+ map: n,
6
+ key: a = g
7
7
  }) => {
8
- const a = (e) => {
9
- if (!e.data || typeof e.data != "object" || e.data?.source !== n || o && !o(e))
8
+ const o = (s) => {
9
+ if (!s.data || typeof s.data != "object" || s.data?.source !== a || r && !r(s))
10
10
  return;
11
- const { type: c, data: b, port: g } = e.data, i = s[c];
12
- if (!i)
11
+ const { type: c, data: i, port: d } = s.data, m = t[c];
12
+ if (!m)
13
13
  throw new Error(`Osra received a message of type "${String(c)}" but no resolver was found for type.`);
14
- t ? i(...t(b, { event: e, type: c, port: g })) : i(b, { event: e, type: c, port: g });
14
+ n ? m(...n(i, { event: s, type: c, port: d })) : m(i, { event: s, type: c, port: d });
15
15
  };
16
- return r.addEventListener("message", a), {
17
- listener: a,
18
- resolvers: s
16
+ return e.addEventListener("message", o), {
17
+ listener: o,
18
+ resolvers: t
19
19
  };
20
- }, y = (r) => !!(globalThis.SharedArrayBuffer && r instanceof globalThis.SharedArrayBuffer), h = (r) => globalThis.ArrayBuffer && r instanceof globalThis.ArrayBuffer || globalThis.MessagePort && r instanceof globalThis.MessagePort || globalThis.ReadableStream && r instanceof globalThis.ReadableStream || globalThis.WritableStream && r instanceof globalThis.WritableStream || globalThis.TransformStream && r instanceof globalThis.TransformStream ? !0 : !!(globalThis.ImageBitmap && r instanceof globalThis.ImageBitmap), p = (r) => {
21
- const s = [], o = (t) => y(t) ? void 0 : h(t) ? s.push(t) : Array.isArray(t) ? t.map(o) : t && typeof t == "object" ? Object.values(t).map(o) : void 0;
22
- return o(r), s;
23
- }, l = "__proxyFunctionPort__", O = (r) => {
24
- const { port1: s, port2: o } = new MessageChannel();
25
- return s.addEventListener("message", async (t) => {
20
+ }, b = (e) => !!(globalThis.SharedArrayBuffer && e instanceof globalThis.SharedArrayBuffer), y = (e) => globalThis.ArrayBuffer && e instanceof globalThis.ArrayBuffer || globalThis.MessagePort && e instanceof globalThis.MessagePort || globalThis.ReadableStream && e instanceof globalThis.ReadableStream || globalThis.WritableStream && e instanceof globalThis.WritableStream || globalThis.TransformStream && e instanceof globalThis.TransformStream ? !0 : !!(globalThis.ImageBitmap && e instanceof globalThis.ImageBitmap), h = (e) => {
21
+ const t = [], r = (n) => b(n) ? void 0 : y(n) ? t.push(n) : Array.isArray(n) ? n.map(r) : n && typeof n == "object" ? Object.values(n).map(r) : void 0;
22
+ return r(e), t;
23
+ }, p = "__proxyFunctionPort__", M = "__proxyMessageChannelPort__", j = (e) => {
24
+ const { port1: t, port2: r } = new MessageChannel();
25
+ return t.addEventListener("message", async (n) => {
26
26
  try {
27
- const n = await r(...t.data), a = f(n), e = p(a);
28
- s.postMessage({ result: a }, { transfer: e });
29
- } catch (n) {
30
- s.postMessage({ error: n });
27
+ const a = await e(...n.data), o = f(a), s = h(o);
28
+ t.postMessage({ result: o }, { transfer: s });
29
+ } catch (a) {
30
+ t.postMessage({ error: a });
31
31
  }
32
- }), s.start(), o;
33
- }, f = (r) => y(r) || h(r) ? r : typeof r == "function" ? { [l]: O(r) } : Array.isArray(r) ? r.map(f) : r && typeof r == "object" ? Object.fromEntries(
34
- Object.entries(r).map(([s, o]) => [
35
- s,
36
- f(o)
32
+ }), t.start(), r;
33
+ }, f = (e) => b(e) || y(e) ? e : typeof e == "function" ? { [p]: j(e) } : Array.isArray(e) ? e.map(f) : e && typeof e == "object" ? Object.fromEntries(
34
+ Object.entries(e).map(([t, r]) => [
35
+ t,
36
+ f(r)
37
37
  ])
38
- ) : r, j = (r) => (...s) => new Promise((o, t) => {
39
- const n = f(s), a = p(n);
40
- r.addEventListener("message", (e) => {
41
- e.data.error ? t(e.data.error) : o(d(e.data.result));
42
- }), r.start(), r.postMessage(n, { transfer: a });
43
- }), d = (r) => y(r) || h(r) ? r : r && typeof r == "object" && r[l] ? j(r[l]) : Array.isArray(r) ? r.map(f) : r && typeof r == "object" ? Object.fromEntries(
44
- Object.entries(r).map(([s, o]) => [
45
- s,
46
- d(o)
38
+ ) : e, x = (e) => (...t) => new Promise((r, n) => {
39
+ const a = f(t), o = h(a), s = (c) => {
40
+ c.data.error ? n(c.data.error) : r(E(c.data.result)), e.removeEventListener("message", s);
41
+ };
42
+ e.addEventListener("message", s), e.start(), e.postMessage(a, { transfer: o });
43
+ }), E = (e) => b(e) || y(e) ? e : e && typeof e == "object" && e[p] ? x(e[p]) : Array.isArray(e) ? e.map(f) : e && typeof e == "object" ? Object.fromEntries(
44
+ Object.entries(e).map(([t, r]) => [
45
+ t,
46
+ E(r)
47
47
  ])
48
- ) : r, E = (r, { key: s = m } = { key: m }) => (o, t) => new Promise((n, a) => {
49
- const { port1: e, port2: c } = new MessageChannel();
50
- e.addEventListener(
48
+ ) : e, A = (e, { key: t = g } = { key: g }) => (r, n) => new Promise((a, o) => {
49
+ const { port1: s, port2: c } = new MessageChannel();
50
+ s.addEventListener(
51
51
  "message",
52
- ({ data: i }) => {
53
- if (i.error)
54
- a(i.error);
52
+ ({ data: m }) => {
53
+ if (m.error)
54
+ o(m.error);
55
55
  else {
56
- const T = d(i.result);
57
- n(T);
56
+ const L = E(m.result);
57
+ a(L);
58
58
  }
59
- e.close(), c.close();
59
+ s.close(), c.close();
60
60
  },
61
61
  { once: !0 }
62
- ), e.start();
63
- const b = f(t), g = p(b);
64
- r.postMessage(
62
+ ), s.start();
63
+ const i = f(n), d = h(i);
64
+ e.postMessage(
65
65
  {
66
- source: s,
67
- type: o,
68
- data: b,
66
+ source: t,
67
+ type: r,
68
+ data: i,
69
69
  port: c
70
70
  },
71
71
  {
72
72
  targetOrigin: "*",
73
- transfer: [c, ...g ?? []]
73
+ transfer: [c, ...d ?? []]
74
74
  }
75
75
  );
76
- }), S = (r) => async (s, o) => {
77
- const { port: t } = o, n = d(s);
76
+ }), _ = (e) => async (t, r) => {
77
+ const { port: n } = r, a = E(t);
78
78
  try {
79
- const a = await r(n, o), e = f(a), c = p(e);
80
- return t.postMessage({ result: e }, { transfer: c }), t.close(), a;
81
- } catch (a) {
82
- throw t.postMessage({ error: a }), t.close(), a;
79
+ const o = await e(a, r), s = f(o), c = h(s);
80
+ return n.postMessage({ result: s }, { transfer: c }), n.close(), o;
81
+ } catch (o) {
82
+ throw n.postMessage({ error: o }), n.close(), o;
83
83
  }
84
+ }, w = ({ key: e = g }) => {
85
+ const t = /* @__PURE__ */ new Map(), r = async (a) => t.get(a) ?? new Promise((o, s) => {
86
+ let c = !1;
87
+ setTimeout(() => {
88
+ c || s(new Error(`Osra getPort for "${a}" timed out`));
89
+ }, 1e3), chrome.runtime.onConnect.addListener((i) => {
90
+ i.name === `${e}:${a}` && (t.set(a, i), o(i), c = !0);
91
+ });
92
+ }), n = {
93
+ addPort: (a, o) => t.set(a, o),
94
+ proxyPort: (a) => {
95
+ const o = self.crypto.randomUUID(), s = chrome.runtime.connect({ name: `${e}:${o}` });
96
+ return t.set(o, s), s.onDisconnect.addListener(() => {
97
+ t.delete(o);
98
+ }), s.onMessage.addListener((c) => {
99
+ a.postMessage(c);
100
+ }), a.addEventListener("message", async (c) => {
101
+ s.postMessage(c.data);
102
+ }), a.addEventListener("close", () => {
103
+ s.disconnect();
104
+ }), {
105
+ [M]: o
106
+ };
107
+ },
108
+ proxiedPort: async ({ [M]: a }) => {
109
+ const { port1: o, port2: s } = new MessageChannel(), c = await r(a);
110
+ c.onMessage.addListener((d) => {
111
+ o.postMessage(d);
112
+ }), c.onDisconnect.addListener(() => {
113
+ o.close();
114
+ }), o.addEventListener("close", () => {
115
+ c.disconnect();
116
+ }), o.addEventListener("message", async (d) => {
117
+ c.postMessage(d.data);
118
+ }), o.start(), s.addEventListener("message", async (d) => {
119
+ c.postMessage(d.data);
120
+ }), s.start();
121
+ const i = O(n, s);
122
+ return i.uuid = a, i;
123
+ }
124
+ };
125
+ return n;
126
+ }, P = (e, t) => t instanceof MessagePort ? e.proxyPort(t) : b(t) || y(t) ? t : typeof t == "object" && p in t ? { [p]: e.proxyPort(t[p]) } : Array.isArray(t) ? t.map((r) => P(e, r)) : t && typeof t == "object" ? Object.fromEntries(
127
+ Object.entries(t).map(([r, n]) => [
128
+ r,
129
+ P(e, n)
130
+ ])
131
+ ) : t, T = async (e, t) => b(t) || y(t) ? t : typeof t == "object" && M in t ? await e.proxiedPort(t) : typeof t == "object" && p in t ? { [p]: await e.proxiedPort(t[p]) } : Array.isArray(t) ? await Promise.all(t.map((r) => T(e, r))) : t && typeof t == "object" ? Object.fromEntries(
132
+ await Promise.all(
133
+ Object.entries(t).map(async ([r, n]) => [
134
+ r,
135
+ await T(e, n)
136
+ ])
137
+ )
138
+ ) : t, O = (e, t) => {
139
+ const r = t.postMessage;
140
+ return t.postMessage = (n) => {
141
+ r.apply(t, [P(e, n)]);
142
+ }, t;
143
+ }, S = ({
144
+ target: e,
145
+ key: t = g
146
+ }) => {
147
+ const r = w({ key: t });
148
+ return {
149
+ ...e,
150
+ postMessage: (n) => {
151
+ e.runtime.sendMessage(P(r, n));
152
+ }
153
+ };
154
+ }, C = ({
155
+ target: e,
156
+ key: t = g
157
+ }) => {
158
+ const r = w({ key: t });
159
+ return {
160
+ ...e,
161
+ addEventListener: (n, a, o) => {
162
+ if (n !== "message")
163
+ return e.addEventListener(n, a, o);
164
+ chrome.runtime.onMessage.addListener((s, c, i) => {
165
+ T(r, s).then((d) => a({ data: d }));
166
+ }), chrome.runtime.onConnect.addListener((s) => {
167
+ s.name.startsWith(`${t}:`) && r.addPort(s.name.split(":")[1], s);
168
+ });
169
+ }
170
+ };
84
171
  };
85
172
  export {
86
- E as call,
87
- S as makeCallListener,
88
- A as registerListener
173
+ A as call,
174
+ _ as makeCallListener,
175
+ l as registerListener,
176
+ T as replaceProxied,
177
+ P as replaceProxies,
178
+ S as wrapExtensionTarget,
179
+ C as wrapListenerExtensionTarget,
180
+ O as wrapPort
89
181
  };
package/build/utils.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import { TransferableObject } from './types';
2
+ export declare const isClonable: (value: any) => boolean;
3
+ export declare const isTransferable: (value: any) => boolean;
2
4
  export declare const getTransferableObjects: (value: any) => TransferableObject[];
5
+ export declare const PROXY_FUNCTION_PROPERTY = "__proxyFunctionPort__";
6
+ export declare const PROXY_MESSAGE_CHANNEL_PROPERTY = "__proxyMessageChannelPort__";
3
7
  export declare const makeProxyFunction: (func: any) => MessagePort;
4
8
  export declare const proxyObjectFunctions: (value: any) => any;
5
9
  export declare const makeProxiedFunction: (port: MessagePort) => (...args: any[]) => Promise<unknown>;
@@ -0,0 +1,137 @@
1
+ import type browser from 'webextension-polyfill';
2
+ import { PROXY_MESSAGE_CHANNEL_PROPERTY } from './utils';
3
+ type PortManager = ReturnType<typeof makePortManager>;
4
+ declare const makePortManager: ({ key }: {
5
+ key?: string | undefined;
6
+ }) => {
7
+ addPort: (name: string, port: browser.Runtime.Port) => Map<string, browser.Runtime.Port>;
8
+ proxyPort: (messagePort: MessagePort) => {
9
+ __proxyMessageChannelPort__: string;
10
+ };
11
+ proxiedPort: ({ [PROXY_MESSAGE_CHANNEL_PROPERTY]: uuid }: {
12
+ [PROXY_MESSAGE_CHANNEL_PROPERTY]: string;
13
+ }) => Promise<MessagePort>;
14
+ };
15
+ export declare const replaceProxies: (portManager: PortManager, value: any) => any;
16
+ export declare const replaceProxied: (portManager: PortManager, value: any) => any;
17
+ export declare const wrapPort: (portManager: any, port: MessagePort) => MessagePort;
18
+ export declare const wrapExtensionTarget: ({ target, key }: {
19
+ target: browser.Browser;
20
+ key?: string | undefined;
21
+ }) => {
22
+ postMessage: (message: any) => void;
23
+ activityLog: browser.ActivityLog.Static;
24
+ alarms: browser.Alarms.Static;
25
+ bookmarks: browser.Bookmarks.Static;
26
+ action: browser.Action.Static;
27
+ browserAction: browser.BrowserAction.Static;
28
+ browserSettings: browser.BrowserSettings.Static;
29
+ browsingData: browser.BrowsingData.Static;
30
+ captivePortal: browser.CaptivePortal.Static;
31
+ clipboard: browser.Clipboard.Static;
32
+ commands: browser.Commands.Static;
33
+ contentScripts: browser.ContentScripts.Static;
34
+ contextualIdentities: browser.ContextualIdentities.Static;
35
+ cookies: browser.Cookies.Static;
36
+ declarativeNetRequest: browser.DeclarativeNetRequest.Static;
37
+ devtools: browser.Devtools.Static;
38
+ dns: browser.Dns.Static;
39
+ downloads: browser.Downloads.Static;
40
+ events: browser.Events.Static;
41
+ experiments: browser.Experiments.Static;
42
+ extension: browser.Extension.Static;
43
+ extensionTypes: browser.ExtensionTypes.Static;
44
+ find: browser.Find.Static;
45
+ geckoProfiler: browser.GeckoProfiler.Static;
46
+ history: browser.History.Static;
47
+ i18n: browser.I18n.Static;
48
+ identity: browser.Identity.Static;
49
+ idle: browser.Idle.Static;
50
+ management: browser.Management.Static;
51
+ manifest: browser.Manifest.Static;
52
+ contextMenus: browser.ContextMenus.Static;
53
+ menus: browser.Menus.Static;
54
+ networkStatus: browser.NetworkStatus.Static;
55
+ normandyAddonStudy: browser.NormandyAddonStudy.Static;
56
+ notifications: browser.Notifications.Static;
57
+ omnibox: browser.Omnibox.Static;
58
+ pageAction: browser.PageAction.Static;
59
+ permissions: browser.Permissions.Static;
60
+ pkcs11: browser.Pkcs11.Static;
61
+ privacy: browser.Privacy.Static;
62
+ proxy: browser.Proxy.Static;
63
+ runtime: browser.Runtime.Static;
64
+ scripting: browser.Scripting.Static;
65
+ search: browser.Search.Static;
66
+ sessions: browser.Sessions.Static;
67
+ sidebarAction: browser.SidebarAction.Static;
68
+ storage: browser.Storage.Static;
69
+ tabs: browser.Tabs.Static;
70
+ theme: browser.Theme.Static;
71
+ topSites: browser.TopSites.Static;
72
+ types: browser.Types.Static;
73
+ urlbar: browser.Urlbar.Static;
74
+ userScripts: browser.UserScripts.Static;
75
+ webNavigation: browser.WebNavigation.Static;
76
+ webRequest: browser.WebRequest.Static;
77
+ windows: browser.Windows.Static;
78
+ };
79
+ export declare const wrapListenerExtensionTarget: ({ target, key }: {
80
+ target: WindowEventHandlers | ServiceWorkerContainer | Worker | SharedWorker;
81
+ key?: string | undefined;
82
+ }) => {
83
+ addEventListener: (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void;
84
+ onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null;
85
+ onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null;
86
+ onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null;
87
+ ongamepadconnected: ((this: WindowEventHandlers, ev: GamepadEvent) => any) | null;
88
+ ongamepaddisconnected: ((this: WindowEventHandlers, ev: GamepadEvent) => any) | null;
89
+ onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null;
90
+ onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null;
91
+ onmessage: ((this: WindowEventHandlers, ev: MessageEvent<any>) => any) | null;
92
+ onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent<any>) => any) | null;
93
+ onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null;
94
+ ononline: ((this: WindowEventHandlers, ev: Event) => any) | null;
95
+ onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null;
96
+ onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null;
97
+ onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null;
98
+ onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null;
99
+ onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null;
100
+ onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null;
101
+ onunload: ((this: WindowEventHandlers, ev: Event) => any) | null;
102
+ removeEventListener<K extends keyof WindowEventHandlersEventMap>(type: K, listener: (this: WindowEventHandlers, ev: WindowEventHandlersEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void;
103
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
104
+ } | {
105
+ addEventListener: (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void;
106
+ controller: ServiceWorker | null;
107
+ oncontrollerchange: ((this: ServiceWorkerContainer, ev: Event) => any) | null;
108
+ onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent<any>) => any) | null;
109
+ onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent<any>) => any) | null;
110
+ ready: Promise<ServiceWorkerRegistration>;
111
+ getRegistration(clientURL?: string | URL | undefined): Promise<ServiceWorkerRegistration | undefined>;
112
+ getRegistrations(): Promise<readonly ServiceWorkerRegistration[]>;
113
+ register(scriptURL: string | URL, options?: RegistrationOptions | undefined): Promise<ServiceWorkerRegistration>;
114
+ startMessages(): void;
115
+ removeEventListener<K_1 extends keyof ServiceWorkerContainerEventMap>(type: K_1, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K_1]) => any, options?: boolean | EventListenerOptions | undefined): void;
116
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
117
+ dispatchEvent(event: Event): boolean;
118
+ } | {
119
+ addEventListener: (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void;
120
+ port: MessagePort;
121
+ removeEventListener<K_2 extends "error">(type: K_2, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K_2]) => any, options?: boolean | EventListenerOptions | undefined): void;
122
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
123
+ dispatchEvent(event: Event): boolean;
124
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
125
+ } | {
126
+ addEventListener: (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void;
127
+ onmessage: ((this: Worker, ev: MessageEvent<any>) => any) | null;
128
+ onmessageerror: ((this: Worker, ev: MessageEvent<any>) => any) | null;
129
+ postMessage(message: any, transfer: Transferable[]): void;
130
+ postMessage(message: any, options?: StructuredSerializeOptions | undefined): void;
131
+ terminate(): void;
132
+ removeEventListener<K_3 extends keyof WorkerEventMap>(type: K_3, listener: (this: Worker, ev: WorkerEventMap[K_3]) => any, options?: boolean | EventListenerOptions | undefined): void;
133
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void;
134
+ dispatchEvent(event: Event): boolean;
135
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
136
+ };
137
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osra",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Easy communication between workers",
5
5
  "files": [
6
6
  "build"
@@ -31,7 +31,9 @@
31
31
  "homepage": "https://github.com/Banou26/osra#readme",
32
32
  "devDependencies": {
33
33
  "@types/chai-as-promised": "^7.1.5",
34
+ "@types/chrome": "^0.0.237",
34
35
  "@types/node": "^18.11.18",
36
+ "@types/webextension-polyfill": "^0.10.0",
35
37
  "chai": "^4.3.6",
36
38
  "chai-as-promised": "^7.1.1",
37
39
  "concurrently": "^7.0.0",
@@ -39,6 +41,7 @@
39
41
  "epk": "^0.16.0",
40
42
  "mime": "^3.0.0",
41
43
  "typescript": "^4.9.4",
42
- "vite": "^4.0.4"
44
+ "vite": "^4.0.4",
45
+ "webextension-polyfill": "^0.10.0"
43
46
  }
44
47
  }
File without changes
File without changes
package/build/pull.d.ts DELETED
File without changes
package/build/send.d.ts DELETED
File without changes