@fnet/cli 0.13.0 → 0.13.2
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/index.js +1 -1
- package/package.json +1 -1
- package/readme.md +87 -0
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.13.
|
|
2
|
+
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.13.2",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},dependencies:{"@flownet/lib-atom-api-js":"^0.1.8","@flownet/lib-bpmn-from-flow":"^0.1.7","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-load-fnet-config":"^0.2.1","@flownet/lib-parse-imports-js":"^0.1.35","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.1.12","@flownet/template-node-common":"^0.12.0","@flownet/template-node-library":"^0.12.0","@flownet/template-node-workflow":"^0.12.0","@fnet/expression":"^0.1.5","@fnet/shell":"^0.1.9","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^3.29.1"}};const v=process.cwd();s({name:["server","redis"],dir:v,optional:!0}),async function(){const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,s=n,i=o,r=l,g=function(){if(f)return b;f=1;const e=n,t=d,s=c,{nanoid:i}=a;return b=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;s.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),j=function(){if(y)return m;y=1;const e=n,t=d,s=c,{nanoid:i}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),E=u,x=h,q=new(0,x.MemoryStore),S=new w({store:q}),I=s(),R=p;I.set("query parser",(function(e){return R.parse(e,{depth:12})})),I.use(x({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:q})),I.use(r()),I.use(i()),I.use(s.json({limit:"1024kb"})),I.get("/healthz",(function(e,t){t.sendStatus(200)})),I.use(E.mw()),I.use(S.middleware()),new g({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),new j({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),I.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)}().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
|
package/package.json
CHANGED
package/readme.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# @fnet/cli: Flow Node & Flow Project Setup Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `@fnet/cli` is a command-line interface tool designed to facilitate the development and deployment of flow-based projects within the Flownet.ai ecosystem. It simplifies the processes of creating, managing, and deploying flow-based projects, acting as a bridge between developers and the Flownet.ai platform.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
Ensure you have `@fnet/cli` installed globally:
|
|
10
|
+
```bash
|
|
11
|
+
npm i @fnet/cli -g
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Upon installation, two binary commands become available: `fnet` (for flow projects) and `fnode` (for flow node projects).
|
|
15
|
+
|
|
16
|
+
## Identifying Project Type
|
|
17
|
+
|
|
18
|
+
- Flow Node Project: Presence of `node.yaml`. Use `fnode` commands.
|
|
19
|
+
- Flow Project: Presence of `flow.yaml`. Use `fnet` commands.
|
|
20
|
+
|
|
21
|
+
## Building the Project
|
|
22
|
+
|
|
23
|
+
For Flow Node:
|
|
24
|
+
```bash
|
|
25
|
+
fnode build
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
For Flow:
|
|
29
|
+
```bash
|
|
30
|
+
fnet build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Both commands generate a `.workspace` directory with files and configurations for debugging, building, and deploying.
|
|
34
|
+
|
|
35
|
+
## Watching the Project (Development Mode)
|
|
36
|
+
|
|
37
|
+
For Flow Node:
|
|
38
|
+
```bash
|
|
39
|
+
fnode watch
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
For Flow:
|
|
43
|
+
```bash
|
|
44
|
+
fnet watch
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Deploying the Project
|
|
48
|
+
|
|
49
|
+
Ensure respective `node.devops.yaml` (for Flow Node) or `flow.devops.yaml` (for Flow) has the correct deployment configurations.
|
|
50
|
+
|
|
51
|
+
### Configuration for NPM Deployment
|
|
52
|
+
|
|
53
|
+
**Structure for devops.yaml:**
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
targets:
|
|
57
|
+
- name: npm
|
|
58
|
+
enabled: true
|
|
59
|
+
params:
|
|
60
|
+
name: "NPM_PACKAGE_NAME"
|
|
61
|
+
version: "NPM_VERSION"
|
|
62
|
+
```
|
|
63
|
+
Replace placeholders with desired npm package name and version.
|
|
64
|
+
|
|
65
|
+
For deployment:
|
|
66
|
+
|
|
67
|
+
For Flow Node:
|
|
68
|
+
```bash
|
|
69
|
+
fnode deploy
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
For Flow:
|
|
73
|
+
```bash
|
|
74
|
+
fnet deploy
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**NPM Configuration File:**
|
|
78
|
+
|
|
79
|
+
The CLI checks for `npm.fnet` under the first `.fnet` directory (in the project root, parent directory, or user's home). The file format:
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
version: 1
|
|
83
|
+
type: fnet.config
|
|
84
|
+
env:
|
|
85
|
+
NPM_TOKEN: "YOUR_NPM_TOKEN"
|
|
86
|
+
```
|
|
87
|
+
Replace `YOUR_NPM_TOKEN` with your npm token for deployment authentication.
|