npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

zion-mdapi

v2.1.7

Published

ZION数据对接SDK

Readme

第一步:安装

npm i zion-mdapi

// 如果要使用【mdapi框架自定义行为】需要先在行为流中按格式配置好
// [mdapi配置教程和使用文档链接](https://functorz.feishu.cn/wiki/HnjcwGPs8i5i8RkloJZccp6UnVa)

第二步:定义配置文件mdapi.config.js

// mdapi.config.js,放在项目根目录(node_modules同级目录下)
export default {
	// 回调链接调用框架自定义行为
	"callback_url": "https://zion-app.functorz.com/Y5GGXyqOA5K/zero/L6ARjmeyKwy/callback/8c6be54d-2123-412c-b90b-303f1a24ca8d",

	//zion项目信息配置,配置url、actionflow_id、actionflow_version后会走前端直连方式
	//"url": "https://zion-app.functorz.com/Y5GGXyqOA5K/zero/L6ARjmeyKwy/api/graphql-v2",

	// 配置权限管理后可传入headers信息来支持调用制定接口
	"headers": {
		"authorization": ""
	},

	// mdapi框架自定义行为actionflowId
	//"actionflow_id": "5e5e155d-7b3c-4771-bf94-ceb597cbb666",

	// mdapi框架自定义行为行为版本号,未配置则调用最新部署的版本号,一般在system?.actionflow_version中配置
	//"actionflow_version": 0,

	//会自动追加到payload中的客户端数据
	"client_data": {
		"secret":"",//开发者密钥
		//内置框架自定义行为执行密码,mdapi执行内置的框架自定义行为时会与system.actionflow_pwd进行比对验证
		"actionflow_pwd": "",
		// 统一token,mdapi在dataToToken中会取payload?.client_data.token为默认值
		"token": ""

		// ...支持更多自定义配置
	},

	// 可以不配置,不配置时默认会根据环境执行环境检测判断
	//"env": "H5", //1.MP-WEIXIN 2.H5 3.NODE

	"isClog":true,//请求时是否在控制台打印日志
	// server配置参数,用于调试,一般无需变动
	"server_port": 3020,
	"server_root": "http://localhost"
}

第三步:开始使用(客户端/前端)

项目内引入

  1. 方式一:web项目或小程序项目ES模块化引入
import zionMdapi from "zion-mdapi"
const mdapiConfig = {
	url:"XXXXXXX",
	env:"H5"// 1.H5(web项目)2.MP-WEIXIN(小程序项目)
}
const mdapi = zionMdapi.init(mdapiConfig)
// 查看mdapi支持的所有方法
console.log(mdapi)
  1. 方式二:node环境中使用

// 支持commonjs和ES模块两种引入方式
import zionMdapi from "zion-mdapi";//ES模块化引入
// const zionMdapi = require("zion-mdapi");//commonjs方式
const mdapiConfig = {
	url:"XXXXXXX",
	env:"NODE"
}
const mdapi = zionMdapi.init(mdapiConfig)
console.log(mdapi)
  1. 方式三:script标签模块化引入
<script type="module">
// 可以使用cdn方式,也可以将文件下载到本地
import zionMdapi from "https://cdn.jsdelivr.net/npm/zion-mdapi/dist/client/index-browser-esm.js"
const mdapiConfig = {
	url:"XXXXXXX",
	env:"H5"
}
const mdapi = zionMdapi.init(mdapiConfig)
console.log(mdapi)
</script>
  1. 方式四:浏览器script标签直接引入
<script src="https://cdn.jsdelivr.net/npm/zion-mdapi/dist/client/index-browser-iife.js">
</script>

<script>
window.onload = function () {
	const mdapiConfig = {
		url:"XXXXXXX",
		env:"H5"
	}
	const mdapi = zionMdapi.init(mdapiConfig)
	console.log(mdapi)
}

</script>
  1. 方式五:mdapi框架自定义行为通过http请求调用,示例curl如下
curl --location --request POST 'https://zion-app.functorz.com/Y5GGXyqOA5K/zero/L6ARjmeyKwy/api/graphql-v2' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
    "variables": {
        "args": {
            "actionflow_name": "query",
            "payload": {
                "client_data": {},
                "data": {
                    "model":"account"
                }
            }
        },
        "versionId": 60,
        "actionFlowId": "5e5e155d-7b3c-4771-bf94-ceb597cbb666"
    },
    "query": "mutation fz_invoke_action_flow(\n\t\t\t  $args: Json!\n\t\t\t  $versionId: Int!\n\t\t\t  $actionFlowId: String!\n\t\t\t) {\n\t\t\t  response: fz_invoke_action_flow(\n\t\t\t    args: $args\n\t\t\t    versionId: $versionId\n\t\t\t    actionFlowId: $actionFlowId\n\t\t\t  )\n\t\t\t}"
}'

1.查询(query)

// 前端直接查询
mdapi.nativeQuery({
	model:"actionflow"
})

// 前端直接批量查询
mdapi.nativeBatchQuery([{
	response_key:"actionflow_1" //批量查询必须设置response_key,且response_key需要唯一
	model:"actionflow"
}])

// 前端带聚合数据的模型查询
mdapi.nativeResponseQuery({
	model:"user",
	aggregate_fields:"count"	//当前表的数据条数
})

// 框架方式查询,需要配置actionflow_id
mdapi.query({
	model:"actionflow",
	where:{},								//查询条件,同graphql接口文档
	order_by:{},							// 排序方式,同graphql接口文档
	limit:0,								// 0表示不限额
	offset:0,								//第几条开始
	fields:`id name actionflow_id` 			//要返回哪些字段信息,参考graphql接口文档
}).then(res=>{
	console.log(res)
}).catch(err=>{
	console.error(err)
})
// 框架方式批量查询
mdapi.batch_query([{
	response_key:"actionflow_1" //批量查询必须设置response_key,且response_key需要唯一
	model:"actionflow"
}])

// 框架方式带聚合数据的模型查询
mdapi.responseQuery({
	model:"user",
	aggregate_fields:"count"	//当前表的数据条数
})

2.变更(mutation)

// mdapi框架方式变更,需要配置callback_url或项目url
mdapi.mutation({
	operation:"insert_errlog",
	objects:[{
		title:"测试"
	}]
})

// 前端直接操作变更,需要配置项目url
mdapi.nativeMutation({
	operation:"insert_errlog",	// 操作前缀:1.insert(插入) 2.update(更新) 3.delete(删除)
	objects:[{					// 格式为:操作前缀_操作表
		title:"测试"			
	}],
})

// 与查询一样,变更也支持:batch_mutation、nativeBatchMutation

3.nativeCallActionflow(原生执行自定义行为)

mdapi.nativeCallActionflow({
	actionflowId:"",	//行为流id
	versionId:null,//行为流版本号,
	args:{
		
	}
})

4.nativeRunJscode(原生执行自定义行为代码)

// 依赖调试密码
mdapi.nativeRunJscode({
	jscode:"",				// 代码内容
	args:{}					// 参数
})

5.媒体资源上传

// 依赖mdapi框架,公网资源直传,media_url必须为资源格式的公网链接
mdapi.outer_umedia(media_url) 	

// 本地上传资源的方法,上传后可以获得对应的资源id
mdapi.local_uimage(fileObj)   	//fileObj为文件对象或者{path:"blob:xxxx",name:"xxx.png"}格式的对象
mdapi.local_uvideo(fileObj) 
mdapi.local_ufile(fileObj) 

6.callActionflow(框架执行自定义行为)

// 调用mdapi框架自定义行为
mdapi.callActionflow({
	actionflow_id:"",// 一般无需传入,会自动从配置文件读取
	actionflow_version:null,// 一般无需传入,会自动从配置文件读取
	
	actionflow_dir:"",//指定执行目录
	actionflow_name:"test",
	payload:{
		// 客户端自定义配置数据,未传入时默认从配置文件中读取
		client_data:{}
		
		//...其他业务参数
	}
})

7.runJscode(框架执行自定义行为代码)

// mdapi框架 依赖调试token,生产环境慎用
mdapi.runJscode({
	jscode:"",				// mdapi框架的actionflow代码内容
	attach_data:{},			// 模拟配置数据
	payload:{}				// 参数
})

8.调试自定义行为debugActionflow(需要启动文件服务器)

// 依赖调试token,生产环境慎用
mdapi.debugActionflow({
	actionflow_type:"native", 	// 1.native(原生自定义行为)  2.custom(框架自定义行为)
	actionflow_name:"test", 	// 调试代码文件名
	actionflow_dir:"/", 		// 调试代码文件目录
	attach_data:{},				// 仅custom时传入
	payload:{},					// 仅custom时传入
	args:{}						// 仅native时传入
})

// 新增mdapi框架代码
mdapi.insertActionflow("test","/",{
	attach_data,//配置数据
	describe:"",//接口描述
	jscode:"", //为传入时从本地文件服务器自动读取
	parameters:{},//入参jsonSchema
	returns:{}//返回参数jsonSchema
})

// 更新mdapi框架代码
mdapi.updateActionflow("test","/",{
	attach_data,//配置数据
	describe:"",//接口描述
	jscode:"", //为传入时从本地文件服务器自动读取
	parameters:{},//入参jsonSchema
	returns:{}//返回参数jsonSchema
})

// 批量上传mdapi框架代码
mdapi.uploadActionflow("test","/",false) //参数1:行为流名称 参数2:行为流目录 参数3:是否覆盖远端

// 批量下载mdapi框架代码
mdapi.uploadActionflow("test","/",false) //参数1:行为流名称 参数2:行为流目录 参数3:是否覆盖本地

// 格式化actionflow表的actionflow_dir字段,自动检测出不符合文件夹目录规范的字段并格式化,主要是兼容解决旧版调试工具的问题
mdapi.actionflowDirFormat()

9.本地代码保存和获取(需要启动文件服务器)

//保存自定义代码到本地
mdapi.setActionflowCode([{
	actionflow_name:"test",		// 文件名称
	actionflow_dir:"/",  		// 保存到哪个路径
	actionflow_type:"custom"	// 类型:1.custom(框架自定义行为)2.native(原生自定义行为)
	jscode:"",					// 代码内容
}])


//从本地获取自定义代码
mdapi.getActionflowCode(actionflow_name, actionflow_dir = "/", actionflow_type = "custom")

10.生成graphql并执行

// mdapi框架执行
mdapi.action({
	response_key:"response", // 节点重命名
	action_name:"user",      // 节点
	inputs:{
		where:{
			id:{
				_gt:0
			}
		},
		order_by:{
			__enum_keys:{// 遇到枚举字段时用放入__enum_keys字段下即可
				id:"desc"
			}
		}
	},				// 节点入参
	fields:["id",{
		action_name:"user_logs",
		fields:['id',"created_at"]
	}]				// 返回内容,支持无限往下嵌套
},{
	type:"query",
	mode:3, // 1.返回生成的gql 2.返回生成的gql内容体 3.生成gql并执行
	variables:{},//执行gql变量
	variables_def:{}// 如果gql语句中包含变量需要提前定义
})

// 前端直接执行,需要配置项目url
mdapi.nativeAction({
	// 参数同上
})

11.执行gql

// madpi框架执行gql
mdapi.runGql(`query{user{id}}`,{}) //第一个参数:gql字符串   第二个参数:variables变量

// 前端直接执行gql,需要配置项目url
mdapi.nativeRunGql(`query{user{id}}`,{}) 

12.调用第三方api

// 前端直接调用第三方api,需要配置项目url
mdapi.nativeCallThirdapi({
	thirdapi_name:"",//可选参数,从表中配置第三方api
	action_name:"operation_xxx",//名称
	params:{
		// 参数列表
	},
	fields:"" //需要返回的字段
})

12.更多内置方法

// 浏览器中为fetch、微信小程序中为wx.request、node环境中为axios
mdapi.request({
	url:"",				//请求地址
	method:"POST",		//请求方法
	headers:{},			//请求头
	data:{}				//数据
}),

//mdapi.generateJWT--------------JWT:参数1:payload,参数2:secret,参数3:header
//mdapi.verifyJWT----------------JWT:参数1:token,参数2:secret

//mdapi.ksort--------------------将对象键值按ascll码表排序:参数1:obj
//mdapi.dateFormat---------------日期格式化函数:参数1:date,参数2:fmt
//mdapi.deepMerge----------------对象深度合并:参数1:obj_result,参数2:obj_provide

14.AI流式数据处理使用示例

// mdapi.aiUtil中提供了chatgpt、zhipu、azure的流式响应数据转换
import zionMdapi from "zion-mdapi";
let mdapi = zionMdapi.init({env:"H5"});
const OPENAI_API_KEY="";
let resBody = await mdapi.request({
	url: `https://api.openai.com/v1/chat/completions`,
	header: {
		'Authorization': `Bearer ${OPENAI_API_KEY}`,
		'Content-Type': 'application/json'
	},
	data:{
		model:"gpt-3.5-turbo",
		// 消息内容
		messages: [
		      {
		        role: "system",
		        content: "你是个有用的助手。"
		      },
		      {
		        role: "user",
		        content: "你好!"
		      }
		],
		// 流式返回结果
		stream: true
	}
})

// 流数据转化为js对象
async function streamDeal(resBody,callBack){
	const reader = resBody.getReader();
	while (true) {
		const {
			value,
			done
		} = await reader.read();
		if (done) {
			break; // 读取完毕
		} else {
			let messageStr = new TextDecoder().decode(value);
			let messageRes = mdapi.aiUtil.chatgpt.dealStreamStr(messageStr) ;
			callback && callback(messageRes)
		}
	}
} 
let content=""
await streamDeal(resBody,result=>{
	// 这里会逐条收到回调信息
	content += result.content;
	if(result.process=="finish"){
		// 已获取到完整的输出内容
		console.log(content)
	}
})

第四步:调试功能配置说明(可以调试zion的行为流自定义代码块)

  1. 运行服务器(package.json添加scripts,第一个终端执行npm start启动文件服务器,第二个终端执行npm test启动调试服务器)
	// 文件服务器默认服务位置:http://localhost:3020(端口号默认为server_port+1)
	// 调试服务器默认服务位置:http://localhost:3021(端口号默认为server_port+1)
	"scripts": {
		"start": "cd node_modules/zion-mdapi && npm start",
		"test": "cd node_modules/zion-mdapi && npm test"
	}
  1. 在md_actionflow文件夹对应的自定义行为目录(custom或native)下新建js文件编写代码即可。

  2. 目录/node_modules/zion-mdapi/dist/actionflow/下放置了mdapi框架自定义行为.umd-all.js为该框架的actionflow入口文件,复制内容粘贴到zion的actionflow代码块中部署后即可生效。

  3. 代码打包文件cdn目录dist目录

更多文档及教学课程参考

  1. 技术文档
  2. 视频教学文档

有问题可在文档评论~

更新日志

-【2.1.7】【mdapi】

  1. setReturn报错捕捉、增加console.log日志记录到阿里云

-【2.1.6】【zion-mdapi、mdapi】

  1. 修复action生成graphql代码时fields嵌套传入时的bug问题
  2. mdapi框架配置回调时会尝试自动读取actionflow_name、actionflow_dir、payload入参

-【2.1.5】【zion-mdapi】

  1. 修复上传文件无法上传压缩包的问题

-【2.1.4】【调试工具】

  1. 修复npm run test后报错的问题

-【2.1.3】【zion-mdapi】

  1. mdapi.config.json改为mdapi.config.js模块导出方式
  2. mdapi.config.js增加配置项isClog,控制是否在控制台打印请求日志,默认会进行打印,isClog设置为false时会关掉打印日志。不再使用process变量来判断生产还是开发环境

-【2.1.2】【zion-mdapi】

  1. callActionflow第二个参数默认会自动处理status!=="成功"的错误

-【2.1.1】【mdapi框架、zion-mdapi】

  1. 修复action生成gql时出现inputs中数组参数不符合期待的问题,如:_in:["zach","yach"]
  2. 新增developer数据模型,可以独立配置开发者的接口调用权限
  3. decimalToBase62base62ToDecimal方法支持bigInt入参,长度不足默认填充0变为默认填充a
  4. 取消dataToToken方法的必传id条件限制
  5. 调试工具方法updateActionflowinsertActionflowuploadActionflowdownloadActionflowactionflowDirFormat更改为后端操作
  6. callNativeThirdapi改名为nativeCallThirdapirunNativeJscode改名为nativeRunJscodecallNativeActionflow改名为nativeCallActionflow
  7. 相关入参名全局调整,涉及变动有nativeRunJscode,nativeCallActionflow,callActionflow
  8. 调试工具强依赖madpi框架,配置文件兼容两种模式,1.前端直接控制【url+actionflow_id+actionflow_version】 2.统一回调入口【callback_url】。需求满足时推荐使用callback_url模式
  9. mdapi框架新增接口callActionflowouter_umedianativeRunJscode

-【2.0.8】【mdapi框架】

  1. 修改errlog和binlog数据模型,报错机制更新
  2. querymutationresponseQuerycallThirdapi方法的参数优先级调整

-【2.0.7】【mdapi框架】

  1. 客户端的responseQuery兼容aggregate_fields入参
  2. query和mutation兼容inputs节点输入

-【2.0.6】【zion-mdapi】

  1. 运行npm start脚本会在项目根目录自动生成带演示项目的配置文件mdapi.config.js
  2. responseQuery兼容aggregate_fields入参
  3. 使用原生自定义行为时必须配置actionflow_vertion

-【2.0.5】【mdapi框架】

  1. 修复中间件不支持使用setReturn和错误抛出的bug

-【2.0.1】【mdapi框架】

  1. middleware指定在actionflow表中的actionflow_dir名必须为/middleware/

-【2.0.0】【客户端、mdapi框架】

  1. 配置文件新增client_data配置项,并将tokenactionflow_pwd配置项移动到client_data配置项下
  2. 新增入参actionflow_dir可用于actionflow_name指定文件夹目录
  3. middleware分解为start_middlewareend_middleware,可在/md_actionflow/custom/middleware/目录下编写中间件代码后上传
  4. mdapi新增挂载项responseactionflowactionflow_dir