🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

ifapi

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ifapi - npm Package Compare versions

Comparing version
1.2.3
to
2.0.0
+3
-0
main.d.ts
export declare function expose(apiHandlers: Record<string, Function>, originVertify?: (origin: string) => boolean): () => void;
export declare function callMethodResponseListener(e: any): void;
export declare function excute<T>(frameID: string, actionName: string, ...params: any): Promise<T>;
export declare function emitEvent(eventName: string, params: any): void;
export declare function addIframeEventListener(eventName: string, handler: (params: any) => void): () => void;
+71
-30
function response(id, data, error = "") {
window.parent.postMessage(JSON.stringify({ id, data, error }), "*");
const resp = { id, data, errorMsg: error, eventType: EventType.callMethodResponse };
try {
window.parent.postMessage(JSON.stringify(resp), "*");
}
catch (e) {
return;
}
}

@@ -18,6 +24,15 @@ function uuid() {

}
var EventType;
(function (EventType) {
EventType["callMethodRequest"] = "IFAPI_CALL_METHOD_REQUEST";
EventType["callMethodResponse"] = "IFAPI_CALL_METHOD_RESPONSE";
EventType["eventEmit"] = "IFAPI_EVENT_EMIT";
})(EventType || (EventType = {}));
function isPromise(obj) {
return !!obj && typeof obj.then === "function";
}
// 暴露API接口供业务系统调用
export function expose(apiHandlers, originVertify) {
function listener(e) {
let data = {};
let data = null;
try {

@@ -27,5 +42,6 @@ data = JSON.parse(e.data);

catch (e) {
window.console.error(e);
return;
}
if (!data || !data.id || data.eventType !== EventType.callMethodRequest)
return;
const id = data.id;

@@ -46,3 +62,3 @@ if (originVertify && !originVertify(e.origin)) {

const resp = handler(...data.params);
if (!resp || !resp.then) {
if (!resp || !isPromise(resp)) {
response(id, resp);

@@ -58,2 +74,26 @@ return;

}
const callMethodResolveHandlers = new Map();
export function callMethodResponseListener(e) {
let resp = null;
try {
resp = JSON.parse(e.data);
}
catch (e) {
return;
}
if (!resp || !resp.id || resp.eventType !== EventType.callMethodResponse)
return;
const handlers = callMethodResolveHandlers.get(resp.id);
if (!handlers)
return;
const { resolve, reject } = handlers;
if (resp.errorMsg) {
reject(resp.errorMsg);
}
else {
resolve(resp.data);
}
callMethodResolveHandlers.delete(resp.id);
}
window.addEventListener("message", callMethodResponseListener);
export function excute(frameID, actionName, ...params) {

@@ -67,31 +107,32 @@ return new Promise((resolve, reject) => {

}
;
const id = uuid();
function listener(e) {
window.removeEventListener("message", listener);
let resp = {};
try {
resp = JSON.parse(e.data);
}
catch (e) {
window.console.error(e);
return;
}
if (!resp.id || resp.id !== id)
return;
if (resp.error) {
reject(resp.error);
return;
}
let data = resp.data;
try {
data = JSON.parse(resp.data);
}
catch (e) { }
resolve(data);
}
window.addEventListener("message", listener);
const requestData = { id, actionName, params };
callMethodResolveHandlers.set(id, { resolve, reject });
const requestData = { id, actionName, params, eventType: EventType.callMethodRequest };
(_a = frame.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(JSON.stringify(requestData), frame.src);
});
}
export function emitEvent(eventName, params) {
const event = { eventName, params, eventType: EventType.eventEmit };
try {
window.parent.postMessage(JSON.stringify(event), "*");
}
catch (error) {
return;
}
}
export function addIframeEventListener(eventName, handler) {
function listener(e) {
let req = null;
try {
req = JSON.parse(e.data);
}
catch (error) {
return;
}
if (!req || req.eventType !== EventType.eventEmit || req.eventName !== eventName)
return;
handler(req.params);
}
window.addEventListener("message", listener);
return () => window.removeEventListener("message", listener);
}
+90
-27
function response(id: string, data: any, error = "") {
window.parent.postMessage(JSON.stringify({ id, data, error }), "*");
const resp: IframeResponse = { id, data, errorMsg: error, eventType: EventType.callMethodResponse };
try {
window.parent.postMessage(JSON.stringify(resp), "*");
} catch (e) {
return;
}
}

@@ -20,12 +25,42 @@

enum EventType {
callMethodRequest = "IFAPI_CALL_METHOD_REQUEST",
callMethodResponse = "IFAPI_CALL_METHOD_RESPONSE",
eventEmit = "IFAPI_EVENT_EMIT",
}
interface IframeRequest {
eventType: EventType.callMethodRequest;
id: string;
actionName: string;
params: Array<any>;
}
interface IframeResponse {
eventType: EventType.callMethodResponse;
id: string;
data: any;
errorMsg: string;
}
interface IframeEvent {
eventName: string;
eventType: EventType.eventEmit;
params: any;
}
function isPromise(obj: any) {
return !!obj && typeof obj.then === "function";
}
// 暴露API接口供业务系统调用
export function expose(apiHandlers: Record<string, Function>, originVertify?: (origin: string) => boolean) {
function listener(e: any) {
let data: any = {};
let data: IframeRequest | null = null;
try {
data = JSON.parse(e.data);
} catch (e) {
window.console.error(e);
return;
}
if (!data || !data.id || data.eventType !== EventType.callMethodRequest) return;
const id = data.id;

@@ -41,2 +76,3 @@ if (originVertify && !originVertify(e.origin)) {

}
const handler = apiHandlers[data.actionName];

@@ -47,4 +83,5 @@ if (!handler) {

}
const resp = handler(...data.params);
if (!resp || !resp.then) {
if (!resp || !isPromise(resp)) {
response(id, resp);

@@ -61,3 +98,25 @@ return;

const callMethodResolveHandlers = new Map<string, { resolve: (value: any) => void; reject: (value: any) => void }>();
export function callMethodResponseListener(e: any) {
let resp: IframeResponse | null = null;
try {
resp = JSON.parse(e.data);
} catch (e) {
return;
}
if (!resp || !resp.id || resp.eventType !== EventType.callMethodResponse) return;
const handlers = callMethodResolveHandlers.get(resp.id);
if (!handlers) return;
const { resolve, reject } = handlers;
if (resp.errorMsg) {
reject(resp.errorMsg);
} else {
resolve(resp.data);
}
callMethodResolveHandlers.delete(resp.id);
}
window.addEventListener("message", callMethodResponseListener);
export function excute<T>(frameID: string, actionName: string, ...params: any): Promise<T> {

@@ -69,28 +128,32 @@ return new Promise((resolve, reject) => {

return;
};
}
const id = uuid();
function listener(e: any) {
window.removeEventListener("message", listener);
let resp: any = {};
try {
resp = JSON.parse(e.data);
} catch (e) {
window.console.error(e);
return;
}
if (!resp.id || resp.id !== id) return;
if (resp.error) {
reject(resp.error);
return;
}
let data: any = resp.data;
try {
data = JSON.parse(resp.data);
} catch (e) {}
resolve(data);
}
window.addEventListener("message", listener);
const requestData = { id, actionName, params };
callMethodResolveHandlers.set(id, { resolve, reject });
const requestData: IframeRequest = { id, actionName, params, eventType: EventType.callMethodRequest };
frame.contentWindow?.postMessage(JSON.stringify(requestData), frame.src);
});
}
export function emitEvent(eventName: string, params: any) {
const event: IframeEvent = { eventName, params, eventType: EventType.eventEmit };
try {
window.parent.postMessage(JSON.stringify(event), "*");
} catch (error) {
return;
}
}
export function addIframeEventListener(eventName: string, handler: (params: any) => void): () => void {
function listener(e: any) {
let req: IframeEvent | null = null;
try {
req = JSON.parse(e.data);
} catch (error) {
return;
}
if (!req || req.eventType !== EventType.eventEmit || req.eventName !== eventName) return;
handler(req.params);
}
window.addEventListener("message", listener);
return () => window.removeEventListener("message", listener);
}
{
"name": "ifapi",
"version": "1.2.3",
"version": "2.0.0",
"type": "module",

@@ -5,0 +5,0 @@ "main": "main.js",