@farcaster/frame-host 0.0.21 → 0.0.22
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/dist/comlink/comlink.d.ts +1 -1
- package/dist/comlink/comlink.js +43 -42
- package/dist/comlink/index.d.ts +1 -1
- package/dist/comlink/index.js +1 -1
- package/dist/comlink/node-adapter.d.ts +1 -1
- package/dist/comlink/node-adapter.js +4 -4
- package/dist/comlink/protocol.d.ts +2 -2
- package/dist/comlink/protocol.js +16 -1
- package/dist/helpers/endpoint.d.ts +5 -5
- package/dist/helpers/endpoint.js +4 -4
- package/dist/helpers/provider.d.ts +2 -2
- package/dist/helpers/provider.js +31 -31
- package/dist/helpers/sdk.d.ts +1 -1
- package/dist/helpers/sdk.js +27 -4
- package/dist/iframe.d.ts +4 -4
- package/dist/iframe.js +6 -6
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +2 -2
- package/package.json +9 -5
- package/src/comlink/comlink.ts +184 -187
- package/src/comlink/index.ts +1 -1
- package/src/comlink/node-adapter.ts +18 -18
- package/src/comlink/protocol.ts +46 -46
- package/src/helpers/endpoint.ts +29 -29
- package/src/helpers/provider.ts +49 -49
- package/src/helpers/sdk.ts +32 -8
- package/src/iframe.ts +25 -25
- package/src/index.ts +4 -4
- package/src/types.ts +5 -5
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { Endpoint, EventSource, PostMessageWithOrigin } from
|
|
6
|
+
import { type Endpoint, type EventSource, type PostMessageWithOrigin } from './protocol';
|
|
7
7
|
export type { Endpoint };
|
|
8
8
|
export declare const proxyMarker: unique symbol;
|
|
9
9
|
export declare const createEndpoint: unique symbol;
|
package/dist/comlink/comlink.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
9
|
-
export const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
6
|
+
import { MessageType, WireValueType, } from './protocol';
|
|
7
|
+
export const proxyMarker = Symbol('Comlink.proxy');
|
|
8
|
+
export const createEndpoint = Symbol('Comlink.endpoint');
|
|
9
|
+
export const releaseProxy = Symbol('Comlink.releaseProxy');
|
|
10
|
+
export const finalizer = Symbol('Comlink.finalizer');
|
|
11
|
+
const throwMarker = Symbol('Comlink.thrown');
|
|
12
|
+
const isObject = (val) => (typeof val === 'object' && val !== null) || typeof val === 'function';
|
|
12
13
|
/**
|
|
13
14
|
* Internal transfer handle to handle objects marked to proxy.
|
|
14
15
|
*/
|
|
@@ -57,12 +58,12 @@ const throwTransferHandler = {
|
|
|
57
58
|
* Allows customizing the serialization of certain values.
|
|
58
59
|
*/
|
|
59
60
|
export const transferHandlers = new Map([
|
|
60
|
-
[
|
|
61
|
-
[
|
|
61
|
+
['proxy', proxyTransferHandler],
|
|
62
|
+
['throw', throwTransferHandler],
|
|
62
63
|
]);
|
|
63
64
|
function isAllowedOrigin(allowedOrigins, origin) {
|
|
64
65
|
for (const allowedOrigin of allowedOrigins) {
|
|
65
|
-
if (origin === allowedOrigin || allowedOrigin ===
|
|
66
|
+
if (origin === allowedOrigin || allowedOrigin === '*') {
|
|
66
67
|
return true;
|
|
67
68
|
}
|
|
68
69
|
if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {
|
|
@@ -71,7 +72,7 @@ function isAllowedOrigin(allowedOrigins, origin) {
|
|
|
71
72
|
}
|
|
72
73
|
return false;
|
|
73
74
|
}
|
|
74
|
-
export function expose(obj, ep = globalThis, allowedOrigins = [
|
|
75
|
+
export function expose(obj, ep = globalThis, allowedOrigins = ['*']) {
|
|
75
76
|
function callback(ev) {
|
|
76
77
|
if (!ev || !ev.data) {
|
|
77
78
|
return;
|
|
@@ -90,36 +91,36 @@ export function expose(obj, ep = globalThis, allowedOrigins = ["*"]) {
|
|
|
90
91
|
const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);
|
|
91
92
|
const rawValue = path.reduce((obj, prop) => obj[prop], obj);
|
|
92
93
|
switch (type) {
|
|
93
|
-
case
|
|
94
|
+
case MessageType.GET:
|
|
94
95
|
{
|
|
95
96
|
returnValue = rawValue;
|
|
96
97
|
}
|
|
97
98
|
break;
|
|
98
|
-
case
|
|
99
|
+
case MessageType.SET:
|
|
99
100
|
{
|
|
100
101
|
parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);
|
|
101
102
|
returnValue = true;
|
|
102
103
|
}
|
|
103
104
|
break;
|
|
104
|
-
case
|
|
105
|
+
case MessageType.APPLY:
|
|
105
106
|
{
|
|
106
107
|
returnValue = rawValue.apply(parent, argumentList);
|
|
107
108
|
}
|
|
108
109
|
break;
|
|
109
|
-
case
|
|
110
|
+
case MessageType.CONSTRUCT:
|
|
110
111
|
{
|
|
111
112
|
const value = new rawValue(...argumentList);
|
|
112
113
|
returnValue = proxy(value);
|
|
113
114
|
}
|
|
114
115
|
break;
|
|
115
|
-
case
|
|
116
|
+
case MessageType.ENDPOINT:
|
|
116
117
|
{
|
|
117
118
|
const { port1, port2 } = new MessageChannel();
|
|
118
119
|
expose(obj, port2);
|
|
119
120
|
returnValue = transfer(port1, [port1]);
|
|
120
121
|
}
|
|
121
122
|
break;
|
|
122
|
-
case
|
|
123
|
+
case MessageType.RELEASE:
|
|
123
124
|
{
|
|
124
125
|
returnValue = undefined;
|
|
125
126
|
}
|
|
@@ -138,11 +139,11 @@ export function expose(obj, ep = globalThis, allowedOrigins = ["*"]) {
|
|
|
138
139
|
.then((returnValue) => {
|
|
139
140
|
const [wireValue, transferables] = toWireValue(returnValue);
|
|
140
141
|
ep.postMessage({ ...wireValue, id }, transferables);
|
|
141
|
-
if (type ===
|
|
142
|
+
if (type === MessageType.RELEASE) {
|
|
142
143
|
// detach and deactive after sending release response above.
|
|
143
|
-
ep.removeEventListener(
|
|
144
|
+
ep.removeEventListener('message', callback);
|
|
144
145
|
closeEndPoint(ep);
|
|
145
|
-
if (finalizer in obj && typeof obj[finalizer] ===
|
|
146
|
+
if (finalizer in obj && typeof obj[finalizer] === 'function') {
|
|
146
147
|
obj[finalizer]();
|
|
147
148
|
}
|
|
148
149
|
}
|
|
@@ -150,26 +151,26 @@ export function expose(obj, ep = globalThis, allowedOrigins = ["*"]) {
|
|
|
150
151
|
.catch((error) => {
|
|
151
152
|
// Send Serialization Error To Caller
|
|
152
153
|
const [wireValue, transferables] = toWireValue({
|
|
153
|
-
value: new TypeError(
|
|
154
|
+
value: new TypeError('Unserializable return value'),
|
|
154
155
|
[throwMarker]: 0,
|
|
155
156
|
});
|
|
156
157
|
ep.postMessage({ ...wireValue, id }, transferables);
|
|
157
158
|
});
|
|
158
159
|
}
|
|
159
|
-
ep.addEventListener(
|
|
160
|
+
ep.addEventListener('message', callback);
|
|
160
161
|
if (ep.start) {
|
|
161
162
|
ep.start();
|
|
162
163
|
}
|
|
163
164
|
return () => {
|
|
164
|
-
ep.removeEventListener(
|
|
165
|
+
ep.removeEventListener('message', callback);
|
|
165
166
|
closeEndPoint(ep);
|
|
166
|
-
if (finalizer in obj && typeof obj[finalizer] ===
|
|
167
|
+
if (finalizer in obj && typeof obj[finalizer] === 'function') {
|
|
167
168
|
obj[finalizer]();
|
|
168
169
|
}
|
|
169
170
|
};
|
|
170
171
|
}
|
|
171
172
|
function isMessagePort(endpoint) {
|
|
172
|
-
return endpoint.constructor.name ===
|
|
173
|
+
return endpoint.constructor.name === 'MessagePort';
|
|
173
174
|
}
|
|
174
175
|
function closeEndPoint(endpoint) {
|
|
175
176
|
if (isMessagePort(endpoint))
|
|
@@ -177,7 +178,7 @@ function closeEndPoint(endpoint) {
|
|
|
177
178
|
}
|
|
178
179
|
export function wrap(ep, target) {
|
|
179
180
|
const pendingListeners = new Map();
|
|
180
|
-
ep.addEventListener(
|
|
181
|
+
ep.addEventListener('message', function handleMessage(ev) {
|
|
181
182
|
const { data } = ev;
|
|
182
183
|
if (!data || !data.id) {
|
|
183
184
|
return;
|
|
@@ -197,18 +198,18 @@ export function wrap(ep, target) {
|
|
|
197
198
|
}
|
|
198
199
|
function throwIfProxyReleased(isReleased) {
|
|
199
200
|
if (isReleased) {
|
|
200
|
-
throw new Error(
|
|
201
|
+
throw new Error('Proxy has been released and is not useable');
|
|
201
202
|
}
|
|
202
203
|
}
|
|
203
204
|
function releaseEndpoint(ep) {
|
|
204
205
|
return requestResponseMessage(ep, new Map(), {
|
|
205
|
-
type:
|
|
206
|
+
type: MessageType.RELEASE,
|
|
206
207
|
}).then(() => {
|
|
207
208
|
closeEndPoint(ep);
|
|
208
209
|
});
|
|
209
210
|
}
|
|
210
211
|
const proxyCounter = new WeakMap();
|
|
211
|
-
const proxyFinalizers =
|
|
212
|
+
const proxyFinalizers = 'FinalizationRegistry' in globalThis &&
|
|
212
213
|
new FinalizationRegistry((ep) => {
|
|
213
214
|
const newCount = (proxyCounter.get(ep) || 0) - 1;
|
|
214
215
|
proxyCounter.set(ep, newCount);
|
|
@@ -228,7 +229,7 @@ function unregisterProxy(proxy) {
|
|
|
228
229
|
proxyFinalizers.unregister(proxy);
|
|
229
230
|
}
|
|
230
231
|
}
|
|
231
|
-
function createProxy(ep, pendingListeners, path = [], target =
|
|
232
|
+
function createProxy(ep, pendingListeners, path = [], target = () => { }) {
|
|
232
233
|
let isProxyReleased = false;
|
|
233
234
|
const proxy = new Proxy(target, {
|
|
234
235
|
get(_target, prop) {
|
|
@@ -241,12 +242,12 @@ function createProxy(ep, pendingListeners, path = [], target = function () { })
|
|
|
241
242
|
isProxyReleased = true;
|
|
242
243
|
};
|
|
243
244
|
}
|
|
244
|
-
if (prop ===
|
|
245
|
+
if (prop === 'then') {
|
|
245
246
|
if (path.length === 0) {
|
|
246
247
|
return { then: () => proxy };
|
|
247
248
|
}
|
|
248
249
|
const r = requestResponseMessage(ep, pendingListeners, {
|
|
249
|
-
type:
|
|
250
|
+
type: MessageType.GET,
|
|
250
251
|
path: path.map((p) => p.toString()),
|
|
251
252
|
}).then(fromWireValue);
|
|
252
253
|
return r.then.bind(r);
|
|
@@ -259,7 +260,7 @@ function createProxy(ep, pendingListeners, path = [], target = function () { })
|
|
|
259
260
|
// boolean. To show good will, we return true asynchronously ¯\_(ツ)_/¯
|
|
260
261
|
const [value, transferables] = toWireValue(rawValue);
|
|
261
262
|
return requestResponseMessage(ep, pendingListeners, {
|
|
262
|
-
type:
|
|
263
|
+
type: MessageType.SET,
|
|
263
264
|
path: [...path, prop].map((p) => p.toString()),
|
|
264
265
|
value,
|
|
265
266
|
}, transferables).then(fromWireValue);
|
|
@@ -269,16 +270,16 @@ function createProxy(ep, pendingListeners, path = [], target = function () { })
|
|
|
269
270
|
const last = path[path.length - 1];
|
|
270
271
|
if (last === createEndpoint) {
|
|
271
272
|
return requestResponseMessage(ep, pendingListeners, {
|
|
272
|
-
type:
|
|
273
|
+
type: MessageType.ENDPOINT,
|
|
273
274
|
}).then(fromWireValue);
|
|
274
275
|
}
|
|
275
276
|
// We just pretend that `bind()` didn’t happen.
|
|
276
|
-
if (last ===
|
|
277
|
+
if (last === 'bind') {
|
|
277
278
|
return createProxy(ep, pendingListeners, path.slice(0, -1));
|
|
278
279
|
}
|
|
279
280
|
const [argumentList, transferables] = processArguments(rawArgumentList);
|
|
280
281
|
return requestResponseMessage(ep, pendingListeners, {
|
|
281
|
-
type:
|
|
282
|
+
type: MessageType.APPLY,
|
|
282
283
|
path: path.map((p) => p.toString()),
|
|
283
284
|
argumentList,
|
|
284
285
|
}, transferables).then(fromWireValue);
|
|
@@ -287,7 +288,7 @@ function createProxy(ep, pendingListeners, path = [], target = function () { })
|
|
|
287
288
|
throwIfProxyReleased(isProxyReleased);
|
|
288
289
|
const [argumentList, transferables] = processArguments(rawArgumentList);
|
|
289
290
|
return requestResponseMessage(ep, pendingListeners, {
|
|
290
|
-
type:
|
|
291
|
+
type: MessageType.CONSTRUCT,
|
|
291
292
|
path: path.map((p) => p.toString()),
|
|
292
293
|
argumentList,
|
|
293
294
|
}, transferables).then(fromWireValue);
|
|
@@ -311,7 +312,7 @@ export function transfer(obj, transfers) {
|
|
|
311
312
|
export function proxy(obj) {
|
|
312
313
|
return Object.assign(obj, { [proxyMarker]: true });
|
|
313
314
|
}
|
|
314
|
-
export function windowEndpoint(w, context = globalThis, targetOrigin =
|
|
315
|
+
export function windowEndpoint(w, context = globalThis, targetOrigin = '*') {
|
|
315
316
|
return {
|
|
316
317
|
postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),
|
|
317
318
|
addEventListener: context.addEventListener.bind(context),
|
|
@@ -324,7 +325,7 @@ function toWireValue(value) {
|
|
|
324
325
|
const [serializedValue, transferables] = handler.serialize(value);
|
|
325
326
|
return [
|
|
326
327
|
{
|
|
327
|
-
type:
|
|
328
|
+
type: WireValueType.HANDLER,
|
|
328
329
|
name,
|
|
329
330
|
value: serializedValue,
|
|
330
331
|
},
|
|
@@ -334,7 +335,7 @@ function toWireValue(value) {
|
|
|
334
335
|
}
|
|
335
336
|
return [
|
|
336
337
|
{
|
|
337
|
-
type:
|
|
338
|
+
type: WireValueType.RAW,
|
|
338
339
|
value,
|
|
339
340
|
},
|
|
340
341
|
transferCache.get(value) || [],
|
|
@@ -342,9 +343,9 @@ function toWireValue(value) {
|
|
|
342
343
|
}
|
|
343
344
|
function fromWireValue(value) {
|
|
344
345
|
switch (value.type) {
|
|
345
|
-
case
|
|
346
|
+
case WireValueType.HANDLER:
|
|
346
347
|
return transferHandlers.get(value.name).deserialize(value.value);
|
|
347
|
-
case
|
|
348
|
+
case WireValueType.RAW:
|
|
348
349
|
return value.value;
|
|
349
350
|
}
|
|
350
351
|
}
|
|
@@ -362,5 +363,5 @@ function generateUUID() {
|
|
|
362
363
|
return new Array(4)
|
|
363
364
|
.fill(0)
|
|
364
365
|
.map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))
|
|
365
|
-
.join(
|
|
366
|
+
.join('-');
|
|
366
367
|
}
|
package/dist/comlink/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './comlink';
|
package/dist/comlink/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './comlink';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { Endpoint } from
|
|
6
|
+
import type { Endpoint } from './protocol';
|
|
7
7
|
export interface NodeEndpoint {
|
|
8
8
|
postMessage(message: any, transfer?: any[]): void;
|
|
9
9
|
on(type: string, listener: EventListenerOrEventListenerObject, options?: {}): void;
|
|
@@ -9,14 +9,14 @@ export default function nodeEndpoint(nep) {
|
|
|
9
9
|
postMessage: nep.postMessage.bind(nep),
|
|
10
10
|
addEventListener: (_, eh) => {
|
|
11
11
|
const l = (data) => {
|
|
12
|
-
if (
|
|
12
|
+
if ('handleEvent' in eh) {
|
|
13
13
|
eh.handleEvent({ data });
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
16
|
eh({ data });
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
-
nep.on(
|
|
19
|
+
nep.on('message', l);
|
|
20
20
|
listeners.set(eh, l);
|
|
21
21
|
},
|
|
22
22
|
removeEventListener: (_, eh) => {
|
|
@@ -24,9 +24,9 @@ export default function nodeEndpoint(nep) {
|
|
|
24
24
|
if (!l) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
nep.off(
|
|
27
|
+
nep.off('message', l);
|
|
28
28
|
listeners.delete(eh);
|
|
29
29
|
},
|
|
30
|
-
start: nep.start
|
|
30
|
+
start: nep.start?.bind(nep),
|
|
31
31
|
};
|
|
32
32
|
}
|
|
@@ -14,7 +14,7 @@ export interface Endpoint extends EventSource {
|
|
|
14
14
|
postMessage(message: any, transfer?: Transferable[]): void;
|
|
15
15
|
start?: () => void;
|
|
16
16
|
}
|
|
17
|
-
export declare
|
|
17
|
+
export declare enum WireValueType {
|
|
18
18
|
RAW = "RAW",
|
|
19
19
|
PROXY = "PROXY",
|
|
20
20
|
THROW = "THROW",
|
|
@@ -33,7 +33,7 @@ export interface HandlerWireValue {
|
|
|
33
33
|
}
|
|
34
34
|
export type WireValue = RawWireValue | HandlerWireValue;
|
|
35
35
|
export type MessageID = string;
|
|
36
|
-
export declare
|
|
36
|
+
export declare enum MessageType {
|
|
37
37
|
GET = "GET",
|
|
38
38
|
SET = "SET",
|
|
39
39
|
APPLY = "APPLY",
|
package/dist/comlink/protocol.js
CHANGED
|
@@ -3,4 +3,19 @@
|
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export var WireValueType;
|
|
7
|
+
(function (WireValueType) {
|
|
8
|
+
WireValueType["RAW"] = "RAW";
|
|
9
|
+
WireValueType["PROXY"] = "PROXY";
|
|
10
|
+
WireValueType["THROW"] = "THROW";
|
|
11
|
+
WireValueType["HANDLER"] = "HANDLER";
|
|
12
|
+
})(WireValueType || (WireValueType = {}));
|
|
13
|
+
export var MessageType;
|
|
14
|
+
(function (MessageType) {
|
|
15
|
+
MessageType["GET"] = "GET";
|
|
16
|
+
MessageType["SET"] = "SET";
|
|
17
|
+
MessageType["APPLY"] = "APPLY";
|
|
18
|
+
MessageType["CONSTRUCT"] = "CONSTRUCT";
|
|
19
|
+
MessageType["ENDPOINT"] = "ENDPOINT";
|
|
20
|
+
MessageType["RELEASE"] = "RELEASE";
|
|
21
|
+
})(MessageType || (MessageType = {}));
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { FrameHost } from
|
|
2
|
-
import { Provider } from
|
|
3
|
-
import { HostEndpoint } from
|
|
1
|
+
import type { FrameHost } from '@farcaster/frame-core';
|
|
2
|
+
import type { Provider } from 'ox';
|
|
3
|
+
import type { HostEndpoint } from '../types';
|
|
4
4
|
/**
|
|
5
5
|
* @returns function to cleanup provider listeners
|
|
6
6
|
*/
|
|
7
7
|
export declare function exposeToEndpoint({ endpoint, sdk, frameOrigin, ethProvider, debug, }: {
|
|
8
8
|
endpoint: HostEndpoint;
|
|
9
|
-
sdk: Omit<FrameHost,
|
|
9
|
+
sdk: Omit<FrameHost, 'ethProviderRequestV2'>;
|
|
10
10
|
frameOrigin: string;
|
|
11
11
|
ethProvider?: Provider.Provider;
|
|
12
12
|
debug?: boolean;
|
|
13
13
|
}): () => void;
|
|
14
14
|
export declare function useExposeToEndpoint({ endpoint, sdk, frameOrigin, ethProvider, debug, }: {
|
|
15
15
|
endpoint: HostEndpoint | undefined;
|
|
16
|
-
sdk: Omit<FrameHost,
|
|
16
|
+
sdk: Omit<FrameHost, 'ethProviderRequestV2'>;
|
|
17
17
|
frameOrigin: string;
|
|
18
18
|
ethProvider?: Provider.Provider;
|
|
19
19
|
debug?: boolean;
|
package/dist/helpers/endpoint.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import * as Comlink from '../comlink';
|
|
3
|
+
import { forwardProviderEvents, wrapProviderRequest } from './provider';
|
|
4
|
+
import { wrapHandlers } from './sdk';
|
|
5
5
|
/**
|
|
6
6
|
* @returns function to cleanup provider listeners
|
|
7
7
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Provider, RpcRequest, RpcResponse } from
|
|
2
|
-
import { HostEndpoint } from
|
|
1
|
+
import { Provider, type RpcRequest, RpcResponse } from 'ox';
|
|
2
|
+
import type { HostEndpoint } from '../types';
|
|
3
3
|
export declare function forwardProviderEvents({ provider, endpoint, }: {
|
|
4
4
|
provider: Provider.Provider;
|
|
5
5
|
endpoint: HostEndpoint;
|
package/dist/helpers/provider.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { Provider, RpcResponse } from
|
|
1
|
+
import { Provider, RpcResponse } from 'ox';
|
|
2
2
|
export function forwardProviderEvents({ provider, endpoint, }) {
|
|
3
|
-
|
|
4
|
-
endpoint.emitEthProvider(
|
|
3
|
+
const accountsChanged = (accounts) => {
|
|
4
|
+
endpoint.emitEthProvider('accountsChanged', [accounts]);
|
|
5
5
|
};
|
|
6
|
-
|
|
7
|
-
endpoint.emitEthProvider(
|
|
6
|
+
const chainChanged = (chainId) => {
|
|
7
|
+
endpoint.emitEthProvider('chainChanged', [chainId]);
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
endpoint.emitEthProvider(
|
|
9
|
+
const connect = (connectInfo) => {
|
|
10
|
+
endpoint.emitEthProvider('connect', [connectInfo]);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
endpoint.emitEthProvider(
|
|
12
|
+
const disconnect = (providerRpcError) => {
|
|
13
|
+
endpoint.emitEthProvider('disconnect', [providerRpcError]);
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
endpoint.emitEthProvider(
|
|
15
|
+
const message = (message) => {
|
|
16
|
+
endpoint.emitEthProvider('message', [message]);
|
|
17
17
|
};
|
|
18
|
-
provider.on(
|
|
19
|
-
provider.on(
|
|
20
|
-
provider.on(
|
|
21
|
-
provider.on(
|
|
22
|
-
provider.on(
|
|
18
|
+
provider.on('accountsChanged', accountsChanged);
|
|
19
|
+
provider.on('chainChanged', chainChanged);
|
|
20
|
+
provider.on('connect', connect);
|
|
21
|
+
provider.on('disconnect', disconnect);
|
|
22
|
+
provider.on('message', message);
|
|
23
23
|
return () => {
|
|
24
|
-
provider.removeListener(
|
|
25
|
-
provider.removeListener(
|
|
26
|
-
provider.removeListener(
|
|
27
|
-
provider.removeListener(
|
|
28
|
-
provider.removeListener(
|
|
24
|
+
provider.removeListener('accountsChanged', accountsChanged);
|
|
25
|
+
provider.removeListener('chainChanged', chainChanged);
|
|
26
|
+
provider.removeListener('connect', connect);
|
|
27
|
+
provider.removeListener('disconnect', disconnect);
|
|
28
|
+
provider.removeListener('message', message);
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
// export type FrameTransport<
|
|
@@ -39,18 +39,18 @@ export function forwardProviderEvents({ provider, endpoint, }) {
|
|
|
39
39
|
export const wrapProviderRequest = ({ provider, debug = false, }) => async (request) => {
|
|
40
40
|
try {
|
|
41
41
|
if (debug) {
|
|
42
|
-
console.debug(
|
|
42
|
+
console.debug('[frame-host] eth provider req: ', request);
|
|
43
43
|
}
|
|
44
44
|
const result = await provider.request(request);
|
|
45
45
|
const response = RpcResponse.from({ result }, { request });
|
|
46
46
|
if (debug) {
|
|
47
|
-
console.debug(
|
|
47
|
+
console.debug('[frame-host] eth provider res: ', response);
|
|
48
48
|
}
|
|
49
49
|
return response;
|
|
50
50
|
}
|
|
51
51
|
catch (e) {
|
|
52
52
|
if (debug) {
|
|
53
|
-
console.error(
|
|
53
|
+
console.error('provider request error', e);
|
|
54
54
|
}
|
|
55
55
|
if (e instanceof Provider.ProviderRpcError) {
|
|
56
56
|
return RpcResponse.from({
|
|
@@ -62,22 +62,22 @@ export const wrapProviderRequest = ({ provider, debug = false, }) => async (requ
|
|
|
62
62
|
}, { request });
|
|
63
63
|
}
|
|
64
64
|
if (e !== null &&
|
|
65
|
-
typeof e ===
|
|
66
|
-
|
|
67
|
-
typeof e.message ===
|
|
68
|
-
|
|
69
|
-
typeof e.code ===
|
|
65
|
+
typeof e === 'object' &&
|
|
66
|
+
'message' in e &&
|
|
67
|
+
typeof e.message === 'string' &&
|
|
68
|
+
'code' in e &&
|
|
69
|
+
typeof e.code === 'number') {
|
|
70
70
|
return RpcResponse.from({
|
|
71
71
|
error: {
|
|
72
72
|
message: e.message,
|
|
73
73
|
code: e.code,
|
|
74
|
-
details:
|
|
74
|
+
details: 'details' in e && typeof e.details === 'string'
|
|
75
75
|
? e.details
|
|
76
76
|
: undefined,
|
|
77
77
|
},
|
|
78
78
|
}, { request });
|
|
79
79
|
}
|
|
80
|
-
const errorMessage = e instanceof Error ? e.message :
|
|
80
|
+
const errorMessage = e instanceof Error ? e.message : 'Unknown';
|
|
81
81
|
return RpcResponse.from({
|
|
82
82
|
error: {
|
|
83
83
|
message: errorMessage,
|
package/dist/helpers/sdk.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { FrameHost, WireFrameHost } from
|
|
1
|
+
import type { FrameHost, WireFrameHost } from '@farcaster/frame-core';
|
|
2
2
|
export declare function wrapHandlers(host: FrameHost): WireFrameHost;
|
package/dist/helpers/sdk.js
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import { SignIn } from
|
|
1
|
+
import { AddFrame, SignIn } from '@farcaster/frame-core';
|
|
2
2
|
export function wrapHandlers(host) {
|
|
3
3
|
return {
|
|
4
4
|
...host,
|
|
5
|
+
addFrame: async () => {
|
|
6
|
+
try {
|
|
7
|
+
const result = await host.addFrame();
|
|
8
|
+
return { result };
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
if (e instanceof AddFrame.RejectedByUser) {
|
|
12
|
+
return {
|
|
13
|
+
error: {
|
|
14
|
+
type: 'rejected_by_user',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (e instanceof AddFrame.InvalidDomainManifest) {
|
|
19
|
+
return {
|
|
20
|
+
error: {
|
|
21
|
+
type: 'invalid_domain_manifest',
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
throw e;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
5
28
|
signIn: async (options) => {
|
|
6
29
|
try {
|
|
7
30
|
const result = await host.signIn(options);
|
|
@@ -11,12 +34,12 @@ export function wrapHandlers(host) {
|
|
|
11
34
|
if (e instanceof SignIn.RejectedByUser) {
|
|
12
35
|
return {
|
|
13
36
|
error: {
|
|
14
|
-
type: 'rejected_by_user'
|
|
15
|
-
}
|
|
37
|
+
type: 'rejected_by_user',
|
|
38
|
+
},
|
|
16
39
|
};
|
|
17
40
|
}
|
|
18
41
|
throw e;
|
|
19
42
|
}
|
|
20
|
-
}
|
|
43
|
+
},
|
|
21
44
|
};
|
|
22
45
|
}
|
package/dist/iframe.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
import { HostEndpoint } from
|
|
1
|
+
import type { FrameHost } from '@farcaster/frame-core';
|
|
2
|
+
import type { Provider } from 'ox';
|
|
3
|
+
import type { HostEndpoint } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* An endpoint of communicating with an iFrame
|
|
6
6
|
*/
|
|
@@ -11,7 +11,7 @@ export declare function createIframeEndpoint({ iframe, targetOrigin, debug, }: {
|
|
|
11
11
|
}): HostEndpoint;
|
|
12
12
|
export declare function exposeToIframe({ iframe, sdk, ethProvider, frameOrigin, debug, }: {
|
|
13
13
|
iframe: HTMLIFrameElement;
|
|
14
|
-
sdk: Omit<FrameHost,
|
|
14
|
+
sdk: Omit<FrameHost, 'ethProviderRequestV2'>;
|
|
15
15
|
frameOrigin: string;
|
|
16
16
|
ethProvider?: Provider.Provider;
|
|
17
17
|
debug?: boolean;
|
package/dist/iframe.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as Comlink from
|
|
2
|
-
import { exposeToEndpoint } from
|
|
1
|
+
import * as Comlink from './comlink';
|
|
2
|
+
import { exposeToEndpoint } from './helpers/endpoint';
|
|
3
3
|
/**
|
|
4
4
|
* An endpoint of communicating with an iFrame
|
|
5
5
|
*/
|
|
@@ -9,20 +9,20 @@ export function createIframeEndpoint({ iframe, targetOrigin, debug = true, }) {
|
|
|
9
9
|
...Comlink.windowEndpoint(iframe.contentWindow),
|
|
10
10
|
emit: (event) => {
|
|
11
11
|
if (debug) {
|
|
12
|
-
console.debug(
|
|
12
|
+
console.debug('frameEvent', event);
|
|
13
13
|
}
|
|
14
14
|
const wireEvent = {
|
|
15
|
-
type:
|
|
15
|
+
type: 'frameEvent',
|
|
16
16
|
event,
|
|
17
17
|
};
|
|
18
18
|
iframe.contentWindow?.postMessage(wireEvent, targetOrigin);
|
|
19
19
|
},
|
|
20
20
|
emitEthProvider: (event, params) => {
|
|
21
21
|
if (debug) {
|
|
22
|
-
console.debug(
|
|
22
|
+
console.debug('fc:emitEthProvider', event, params);
|
|
23
23
|
}
|
|
24
24
|
const wireEvent = {
|
|
25
|
-
type:
|
|
25
|
+
type: 'frameEthProviderEvent',
|
|
26
26
|
event,
|
|
27
27
|
params,
|
|
28
28
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from '@farcaster/frame-core';
|
|
2
|
+
export * from './types';
|
|
3
|
+
export * from './iframe';
|
|
4
|
+
export * from './helpers/endpoint';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from '@farcaster/frame-core';
|
|
2
|
+
export * from './types';
|
|
3
|
+
export * from './iframe';
|
|
4
|
+
export * from './helpers/endpoint';
|