aoform-toolkit 1.0.3
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/CHANGELOG.md +12 -0
- package/LICENSE +22 -0
- package/README.md +113 -0
- package/dist/bin/aoform.d.ts +3 -0
- package/dist/bin/aoform.d.ts.map +1 -0
- package/dist/bin/aoform.js +4 -0
- package/dist/bin/aoform.js.map +1 -0
- package/dist/src/cli/createProgram.d.ts +3 -0
- package/dist/src/cli/createProgram.d.ts.map +1 -0
- package/dist/src/cli/createProgram.js +27 -0
- package/dist/src/cli/createProgram.js.map +1 -0
- package/dist/src/cli/run.d.ts +2 -0
- package/dist/src/cli/run.d.ts.map +1 -0
- package/dist/src/cli/run.js +11 -0
- package/dist/src/cli/run.js.map +1 -0
- package/dist/src/commands/deploy.d.ts +3 -0
- package/dist/src/commands/deploy.d.ts.map +1 -0
- package/dist/src/commands/deploy.js +12 -0
- package/dist/src/commands/deploy.js.map +1 -0
- package/dist/src/commands/init.d.ts +3 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +22 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/constants.d.ts +5 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +5 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/core/deploy/constants.d.ts +2 -0
- package/dist/src/core/deploy/constants.d.ts.map +1 -0
- package/dist/src/core/deploy/constants.js +19 -0
- package/dist/src/core/deploy/constants.js.map +1 -0
- package/dist/src/core/deploy/deploySource.d.ts +3 -0
- package/dist/src/core/deploy/deploySource.d.ts.map +1 -0
- package/dist/src/core/deploy/deploySource.js +53 -0
- package/dist/src/core/deploy/deploySource.js.map +1 -0
- package/dist/src/core/deploy/hash.d.ts +2 -0
- package/dist/src/core/deploy/hash.d.ts.map +1 -0
- package/dist/src/core/deploy/hash.js +7 -0
- package/dist/src/core/deploy/hash.js.map +1 -0
- package/dist/src/core/deploy/index.d.ts +6 -0
- package/dist/src/core/deploy/index.d.ts.map +1 -0
- package/dist/src/core/deploy/index.js +31 -0
- package/dist/src/core/deploy/index.js.map +1 -0
- package/dist/src/core/deploy/io.d.ts +5 -0
- package/dist/src/core/deploy/io.d.ts.map +1 -0
- package/dist/src/core/deploy/io.js +47 -0
- package/dist/src/core/deploy/io.js.map +1 -0
- package/dist/src/core/deploy/luaCode.d.ts +3 -0
- package/dist/src/core/deploy/luaCode.d.ts.map +1 -0
- package/dist/src/core/deploy/luaCode.js +20 -0
- package/dist/src/core/deploy/luaCode.js.map +1 -0
- package/dist/src/core/deploy/spawnProcess.d.ts +3 -0
- package/dist/src/core/deploy/spawnProcess.d.ts.map +1 -0
- package/dist/src/core/deploy/spawnProcess.js +51 -0
- package/dist/src/core/deploy/spawnProcess.js.map +1 -0
- package/dist/src/core/lua/packLua.d.ts +10 -0
- package/dist/src/core/lua/packLua.d.ts.map +1 -0
- package/dist/src/core/lua/packLua.js +55 -0
- package/dist/src/core/lua/packLua.js.map +1 -0
- package/dist/src/templates/processes.yaml +11 -0
- package/dist/src/types.d.ts +22 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +56 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on Keep a Changelog and this project follows Semantic Versioning.
|
|
6
|
+
|
|
7
|
+
## [1.0.0] - 2026-02-22
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Initial npm-ready release of `aoform-toolkit`.
|
|
11
|
+
- CLI commands for process config initialization and deployment.
|
|
12
|
+
- TypeScript build output in `dist/` for package distribution.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 AF (Autonomous Finance)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# aoform-toolkit
|
|
2
|
+
|
|
3
|
+
`aoform-toolkit` is a CLI for deploying AO processes from YAML config files.
|
|
4
|
+
It keeps a local state file and only re-sends source code when content changes.
|
|
5
|
+
|
|
6
|
+
This project is a fork of AOForm originally developed by [AF (Autonomous Finance)](https://autonomous.finance), maintained independently with custom functionality.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install --save-dev aoform-toolkit
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Use with `npx`:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx aoform --help
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
1. Create a config file:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx aoform init
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. Set wallet JSON:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
export WALLET_JSON="$(cat ~/.aos.json)"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
3. Deploy processes:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx aoform deploy
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## CLI Commands
|
|
41
|
+
|
|
42
|
+
`aoform init`
|
|
43
|
+
- Creates `processes.yaml` in the current directory.
|
|
44
|
+
- Option: `-n, --name <name>` to create a custom YAML filename.
|
|
45
|
+
|
|
46
|
+
`aoform deploy`
|
|
47
|
+
- Deploys or updates processes from YAML config.
|
|
48
|
+
- Options:
|
|
49
|
+
- `-f, --file <path>` custom YAML file path.
|
|
50
|
+
- `-u, --url <url>` custom HyperBEAM node URL.
|
|
51
|
+
- `-s, --scheduler <scheduler>` custom scheduler.
|
|
52
|
+
|
|
53
|
+
## Configuration (`processes.yaml`)
|
|
54
|
+
|
|
55
|
+
Top-level value must be an array of process entries.
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
- name: My-App-V2
|
|
59
|
+
file: build/output.lua
|
|
60
|
+
resetModules: true
|
|
61
|
+
module: cNlipBptaF9JeFAf4wUmpi43EojNanIBos3EfNrEOWo
|
|
62
|
+
tags:
|
|
63
|
+
- name: Process-Type
|
|
64
|
+
value: My-App
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Fields:
|
|
68
|
+
- `name` (required): logical process name used in state tracking.
|
|
69
|
+
- `file` (required): Lua source file path.
|
|
70
|
+
- `resetModules` (optional): unload modules before eval.
|
|
71
|
+
- `module` (optional): AO module id.
|
|
72
|
+
- `tags` (optional): spawn tags as `{ name, value }`.
|
|
73
|
+
|
|
74
|
+
## Environment Variables
|
|
75
|
+
|
|
76
|
+
- `WALLET_JSON` (required): wallet JSON string used for signing.
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
export WALLET_JSON="$(cat ~/.aos.json)"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Alternatively, use a `.env` file:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# .env
|
|
88
|
+
WALLET_JSON={"address":"...","privateKey":"..."}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## State Files
|
|
93
|
+
|
|
94
|
+
- Default state file: `state.yaml`
|
|
95
|
+
- With a custom deploy file (for example `-f my-processes.yaml`): `state-my-processes.yaml`
|
|
96
|
+
|
|
97
|
+
The state file stores process IDs and code hashes so unchanged processes are skipped on future deploys.
|
|
98
|
+
|
|
99
|
+
## Local Development
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npm install
|
|
103
|
+
npm run build
|
|
104
|
+
npm run aoform -- --help
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
|
|
109
|
+
MIT. See [LICENSE](LICENSE).
|
|
110
|
+
|
|
111
|
+
## Contributing
|
|
112
|
+
|
|
113
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aoform.d.ts","sourceRoot":"","sources":["../../bin/aoform.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aoform.js","sourceRoot":"","sources":["../../bin/aoform.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProgram.d.ts","sourceRoot":"","sources":["../../../src/cli/createProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,aAAa,YA4B5B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export function createProgram() {
|
|
3
|
+
const program = new Command();
|
|
4
|
+
program
|
|
5
|
+
.name('aoform')
|
|
6
|
+
.description('A tool for managing AO processes ⚙️');
|
|
7
|
+
program
|
|
8
|
+
.command('init')
|
|
9
|
+
.description('Initialize a new processes.yaml file')
|
|
10
|
+
.option('-n, --name <name>', 'Create <name>.yaml (default: processes.yaml)')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
const { initCommand } = await import('../commands/init.js');
|
|
13
|
+
await initCommand(options);
|
|
14
|
+
});
|
|
15
|
+
program
|
|
16
|
+
.command('deploy')
|
|
17
|
+
.description('Deploy or update processes')
|
|
18
|
+
.option('-f, --file <path>', 'Specify a custom processes.yaml file')
|
|
19
|
+
.option('-u, --url <url>', 'Specify a HyperBEAM node URL')
|
|
20
|
+
.option('-s, --scheduler <scheduler>', 'Specify a scheduler')
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
const { deployCommand } = await import('../commands/deploy.js');
|
|
23
|
+
await deployCommand(options);
|
|
24
|
+
});
|
|
25
|
+
return program;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=createProgram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProgram.js","sourceRoot":"","sources":["../../../src/cli/createProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,qCAAqC,CAAC,CAAA;IAErD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,mBAAmB,EAAE,8CAA8C,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC5D,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CAAC,6BAA6B,EAAE,qBAAqB,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;QACtC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAEA,wBAAsB,GAAG,CAAC,IAAI,WAAe,iBAO5C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createProgram } from './createProgram.js';
|
|
2
|
+
export async function run(argv = process.argv) {
|
|
3
|
+
try {
|
|
4
|
+
await createProgram().parseAsync(argv);
|
|
5
|
+
}
|
|
6
|
+
catch (err) {
|
|
7
|
+
console.error('CLI execution failed:', err);
|
|
8
|
+
process.exitCode = 1;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC3C,IAAI,CAAC;QACH,MAAM,aAAa,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,eAAO,MAAM,aAAa,GAAU,SAAS,YAAY,mBASxD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { deployProcesses } from '../core/deploy/index.js';
|
|
2
|
+
export const deployCommand = async (options) => {
|
|
3
|
+
try {
|
|
4
|
+
await deployProcesses({ file: options.file, url: options.url, scheduler: options.scheduler });
|
|
5
|
+
process.exit(0);
|
|
6
|
+
}
|
|
7
|
+
catch (err) {
|
|
8
|
+
console.error('Error deploying processes:', err);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAqB,EAAE,EAAE;IAE3D,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAC,IAAI,EAAC,OAAO,CAAC,IAA0B,EAAE,GAAG,EAAC,OAAO,CAAC,GAAyB,EAAE,SAAS,EAAC,OAAO,CAAC,SAA+B,EAAC,CAAC,CAAC;QAC3J,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,eAAO,MAAM,WAAW,GAAU,UAAS,YAAiB,kBAiB3D,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
export const initCommand = async (options = {}) => {
|
|
5
|
+
const name = options.name?.trim();
|
|
6
|
+
const fileName = name
|
|
7
|
+
? (name.endsWith('.yaml') || name.endsWith('.yml') ? name : `${name}.yaml`)
|
|
8
|
+
: 'processes.yaml';
|
|
9
|
+
const configFilePath = path.join(process.cwd(), fileName);
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const templatePath = path.resolve(__dirname, '../templates/processes.yaml');
|
|
12
|
+
try {
|
|
13
|
+
await fs.access(configFilePath);
|
|
14
|
+
console.log(`${path.basename(configFilePath)} file already exists.`);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
const template = await fs.readFile(templatePath, 'utf-8');
|
|
18
|
+
await fs.writeFile(configFilePath, template, 'utf-8');
|
|
19
|
+
console.log(`${path.basename(configFilePath)} file created successfully.`);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,UAAwB,EAAE,EAAE,EAAE;IAC9D,MAAM,IAAI,GAAI,OAAO,CAAC,IAA2B,EAAE,IAAI,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;QAC3E,CAAC,CAAC,gBAAgB,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const default_hb_url = "https://push.forward.computer/";
|
|
2
|
+
export declare const scheduler = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
3
|
+
export declare const default_scheduler = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
4
|
+
export declare const authority = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
5
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,mCAAmC,CAAA;AAE9D,eAAO,MAAM,SAAS,gDAAgD,CAAA;AACtE,eAAO,MAAM,iBAAiB,gDAAgD,CAAA;AAC9E,eAAO,MAAM,SAAS,gDAAgD,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const default_hb_url = "https://push.forward.computer/";
|
|
2
|
+
export const scheduler = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
3
|
+
export const default_scheduler = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
4
|
+
export const authority = "n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo";
|
|
5
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,gCAAgC,CAAA;AAE9D,MAAM,CAAC,MAAM,SAAS,GAAG,6CAA6C,CAAA;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,6CAA6C,CAAA;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,6CAA6C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAiBtB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const RESET_MODULES_LUA = `
|
|
2
|
+
INITIAL_MODULES = { ".ao", ".crypto.mac.hmac", "string", ".crypto.cipher.morus", "debug", ".handlers", ".crypto.padding.zero", ".crypto.digest.sha2_256", ".crypto.digest.md2", ".crypto.util.hex", ".default", ".eval", ".crypto.util.bit", ".utils", ".crypto.util.stream", "_G", "json", ".crypto.cipher.norx", ".base64", ".crypto.cipher.aes256", ".crypto.digest.md4", ".crypto.util.queue", ".stringify", ".handlers-utils", ".crypto.cipher.issac", "utf8", ".crypto.cipher.aes", ".dump", ".process", ".crypto.cipher.mode.cfb", "ao", ".pretty", ".crypto.digest.sha1", "coroutine", ".crypto.cipher.aes128", ".crypto.init", ".crypto.digest.sha2_512", ".crypto.cipher.aes192", ".crypto.kdf.pbkdf2", ".crypto.mac.init", ".crypto.digest.init", "package", "table", ".crypto.cipher.mode.ctr", ".crypto.util.array", "bit32", ".crypto.cipher.mode.ecb", ".crypto.kdf.init", ".assignment", ".crypto.cipher.mode.cbc", ".crypto.digest.blake2b", ".crypto.digest.sha3", ".crypto.digest.md5", ".crypto.cipher.mode.ofb", "io", "os", ".chance", ".crypto.util.init", ".crypto.cipher.init", ".boot" }
|
|
3
|
+
|
|
4
|
+
local function isInitialModule(value)
|
|
5
|
+
for _, v in pairs(INITIAL_MODULES) do
|
|
6
|
+
if v == value then
|
|
7
|
+
return true
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
return false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
for k, _ in pairs(package.loaded) do
|
|
14
|
+
if not isInitialModule(k) then
|
|
15
|
+
package.loaded[k] = nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
`.trim();
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/core/deploy/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;CAiBhC,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploySource.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/deploySource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMnF,wBAAsB,YAAY,CAChC,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuDf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { buildLuaCode } from './luaCode.js';
|
|
2
|
+
import { getStringHash } from './hash.js';
|
|
3
|
+
function sleep(ms) {
|
|
4
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
|
+
}
|
|
6
|
+
export async function deploySource(ao, processInfo, state, directory) {
|
|
7
|
+
const name = processInfo.name;
|
|
8
|
+
const processId = directory[name];
|
|
9
|
+
if (!processId) {
|
|
10
|
+
throw new Error(`No process ID found for '${name}'.`);
|
|
11
|
+
}
|
|
12
|
+
const luaCode = buildLuaCode(processInfo, directory);
|
|
13
|
+
const currentHash = getStringHash(luaCode);
|
|
14
|
+
if (state[name]?.hash === currentHash) {
|
|
15
|
+
console.log(`Process '${name}' is up-to-date.`);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let attempts = 0;
|
|
19
|
+
const maxAttempts = 5;
|
|
20
|
+
const delay = 30000;
|
|
21
|
+
console.log('Sending code...');
|
|
22
|
+
while (attempts < maxAttempts) {
|
|
23
|
+
try {
|
|
24
|
+
const messageId = await ao.message({
|
|
25
|
+
process: processId,
|
|
26
|
+
data: luaCode,
|
|
27
|
+
tags: [{ name: 'Action', value: 'Eval' }],
|
|
28
|
+
});
|
|
29
|
+
const result = await ao.result({
|
|
30
|
+
process: processId,
|
|
31
|
+
message: messageId,
|
|
32
|
+
});
|
|
33
|
+
if (result.Error) {
|
|
34
|
+
throw new Error(`Error on 'eval' action: ${JSON.stringify(result.Error)}`);
|
|
35
|
+
}
|
|
36
|
+
console.log(`Successfully sent 'Eval' action for process '${name}'.`);
|
|
37
|
+
console.log(`view result on Lunar Explorer: https://lunar.ar.io/#/explorer/${processId}`);
|
|
38
|
+
state[name] = { processId, hash: currentHash };
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
attempts += 1;
|
|
43
|
+
console.error('error', err);
|
|
44
|
+
console.log(`Failed to send 'eval' action for process '${name}'. Attempt ${attempts}/${maxAttempts}`);
|
|
45
|
+
if (attempts === maxAttempts) {
|
|
46
|
+
throw new Error(`Failed to send 'eval' action for process '${name}' after ${maxAttempts} attempts.`);
|
|
47
|
+
}
|
|
48
|
+
console.log(`Retrying in ${delay / 1000} seconds...`);
|
|
49
|
+
await sleep(delay);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=deploySource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploySource.js","sourceRoot":"","sources":["../../../../src/core/deploy/deploySource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAO,EACP,WAA0B,EAC1B,KAAkB,EAClB,SAA2B;IAE3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;gBACjC,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC;gBAC7B,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,SAAS;aACnB,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,IAAI,CAAC,CAAA;YACrE,OAAO,CAAC,GAAG,CAAC,iEAAiE,SAAS,EAAE,CAAC,CAAC;YAE1F,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,cAAc,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;YAEtG,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,WAAW,WAAW,YAAY,CAAC,CAAC;YACvG,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../src/core/deploy/hash.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/index.ts"],"names":[],"mappings":"AAUA,wBAAsB,eAAe,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAC,EAAE;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,iBAgC9G"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import { connect, createDataItemSigner } from '@permaweb/aoconnect';
|
|
3
|
+
import { loadProcesses, loadState, saveState } from './io.js';
|
|
4
|
+
import { spawnProcess } from './spawnProcess.js';
|
|
5
|
+
import { deploySource } from './deploySource.js';
|
|
6
|
+
import { default_hb_url, default_scheduler } from '../../constants.js';
|
|
7
|
+
dotenv.config();
|
|
8
|
+
export async function deployProcesses({ file, url, scheduler }) {
|
|
9
|
+
if (!process.env.WALLET_JSON) {
|
|
10
|
+
throw new Error('Missing WALLET_JSON environment variable. Please provide wallet JSON in WALLET_JSON.');
|
|
11
|
+
}
|
|
12
|
+
const wallet = JSON.parse(process.env.WALLET_JSON);
|
|
13
|
+
const signer = createDataItemSigner(wallet);
|
|
14
|
+
const processes = loadProcesses(file);
|
|
15
|
+
const state = loadState(file);
|
|
16
|
+
const ao = connect({
|
|
17
|
+
MODE: "mainnet",
|
|
18
|
+
SCHEDULER: scheduler || default_scheduler,
|
|
19
|
+
URL: url || default_hb_url,
|
|
20
|
+
signer
|
|
21
|
+
});
|
|
22
|
+
const directory = {};
|
|
23
|
+
for (const processInfo of processes) {
|
|
24
|
+
directory[processInfo.name] = await spawnProcess(ao, processInfo, state, directory);
|
|
25
|
+
}
|
|
26
|
+
for (const processInfo of processes) {
|
|
27
|
+
await deploySource(ao, processInfo, state, directory);
|
|
28
|
+
}
|
|
29
|
+
saveState(file, state);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvE,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAoD;IAE7G,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAY,CAAC;IAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAa,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9B,MAAM,EAAE,GAAG,OAAO,CAChB;QACE,IAAI,EAAE,SAAS;QACf,SAAS,EAAC,SAAS,IAAI,iBAAiB;QACxC,GAAG,EAAE,GAAG,IAAI,cAAc;QAC1B,MAAM;KACP,CACF,CAAC;IAEF,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;QACpC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;QACpC,MAAM,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DeployState, ProcessConfig } from '../../types.js';
|
|
2
|
+
export declare function loadProcesses(customFilePath?: string): ProcessConfig[];
|
|
3
|
+
export declare function loadState(customFilePath?: string): DeployState;
|
|
4
|
+
export declare function saveState(customFilePath: string | undefined, state: DeployState): void;
|
|
5
|
+
//# sourceMappingURL=io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/io.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOjE,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAiBtE;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,CAa9D;AAED,wBAAgB,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAKtF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import yaml from 'js-yaml';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
function getStateFileName(customFilePath) {
|
|
5
|
+
if (!customFilePath)
|
|
6
|
+
return 'state.yaml';
|
|
7
|
+
return `state-${customFilePath}`;
|
|
8
|
+
}
|
|
9
|
+
export function loadProcesses(customFilePath) {
|
|
10
|
+
const processesYamlPath = path.join(process.cwd(), customFilePath || 'processes.yaml');
|
|
11
|
+
try {
|
|
12
|
+
const processesYaml = fs.readFileSync(processesYamlPath, 'utf8');
|
|
13
|
+
const processes = (yaml.load(processesYaml) || []);
|
|
14
|
+
if (!Array.isArray(processes)) {
|
|
15
|
+
throw new Error(`Expected an array in ${processesYamlPath}`);
|
|
16
|
+
}
|
|
17
|
+
return processes;
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (err.code !== 'ENOENT') {
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
console.warn(`${path.basename(processesYamlPath)} file not found. No processes will be deployed or updated.`);
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function loadState(customFilePath) {
|
|
28
|
+
const stateFile = getStateFileName(customFilePath);
|
|
29
|
+
const stateYamlPath = path.join(process.cwd(), stateFile);
|
|
30
|
+
try {
|
|
31
|
+
const stateYaml = fs.readFileSync(stateYamlPath, 'utf8');
|
|
32
|
+
return (yaml.load(stateYaml) || {});
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err.code === 'ENOENT') {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function saveState(customFilePath, state) {
|
|
42
|
+
const stateFile = getStateFileName(customFilePath);
|
|
43
|
+
const stateYamlPath = path.join(process.cwd(), stateFile);
|
|
44
|
+
const updatedState = yaml.dump(state);
|
|
45
|
+
fs.writeFileSync(stateYamlPath, updatedState, 'utf8');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../../src/core/deploy/io.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,SAAS,gBAAgB,CAAC,cAAuB;IAC/C,IAAI,CAAC,cAAc;QAAE,OAAO,YAAY,CAAC;IACzC,OAAO,SAAS,cAAc,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,cAAuB;IACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,IAAI,gBAAgB,CAAC,CAAC;IAEvF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAY,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,iBAAiB,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,SAA4B,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,4DAA4D,CAAC,CAAC;QAC9G,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,cAAuB;IAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAgB,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,cAAkC,EAAE,KAAkB;IAC9E,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luaCode.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/luaCode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAYtE,wBAAgB,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAU5F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { pack } from '../lua/packLua.js';
|
|
3
|
+
import { RESET_MODULES_LUA } from './constants.js';
|
|
4
|
+
function buildDirectoryCode(directory) {
|
|
5
|
+
return `
|
|
6
|
+
package.preload["aoform.directory"] = function () return {
|
|
7
|
+
${Object.keys(directory).map((key) => `["${key}"] = "${directory[key]}"`).join(',\n')}
|
|
8
|
+
} end
|
|
9
|
+
`.trim();
|
|
10
|
+
}
|
|
11
|
+
export function buildLuaCode(processInfo, directory) {
|
|
12
|
+
const filePath = processInfo.file;
|
|
13
|
+
const prerunFilePath = processInfo.prerun || '';
|
|
14
|
+
const mainScript = processInfo.pack ? pack(filePath) : fs.readFileSync(filePath, 'utf8');
|
|
15
|
+
const prerunScript = prerunFilePath ? fs.readFileSync(prerunFilePath, 'utf8') : '';
|
|
16
|
+
const resetModulesCode = processInfo.resetModules === false ? '' : RESET_MODULES_LUA;
|
|
17
|
+
const directoryCode = processInfo.directory === true ? buildDirectoryCode(directory) : '';
|
|
18
|
+
return `${resetModulesCode}\n${directoryCode}\n${prerunScript}\n${mainScript}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=luaCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luaCode.js","sourceRoot":"","sources":["../../../../src/core/deploy/luaCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,SAAS,kBAAkB,CAAC,SAA2B;IACrD,OAAO;;IAEL,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;GAEpF,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAA0B,EAAE,SAA2B;IAClF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;IAClC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;IAEhD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACrF,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1F,OAAO,GAAG,gBAAgB,KAAK,aAAa,KAAK,YAAY,KAAK,UAAU,EAAE,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawnProcess.d.ts","sourceRoot":"","sources":["../../../../src/core/deploy/spawnProcess.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAO,MAAM,gBAAgB,CAAC;AAaxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { scheduler } from '../../constants.js';
|
|
2
|
+
function mapTags(tags, directory) {
|
|
3
|
+
return (tags || []).map((tag) => {
|
|
4
|
+
if (!directory[tag.value])
|
|
5
|
+
return tag;
|
|
6
|
+
return { ...tag, value: directory[tag.value] };
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function sleep(ms) {
|
|
10
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11
|
+
}
|
|
12
|
+
export async function spawnProcess(ao, processInfo, state, directory) {
|
|
13
|
+
const name = processInfo.name;
|
|
14
|
+
const tags = mapTags(processInfo.tags, directory);
|
|
15
|
+
if (state[name]?.processId) {
|
|
16
|
+
const existingProcessId = state[name].processId;
|
|
17
|
+
console.log(`Using existing process ID '${existingProcessId}' for process '${name}'.`);
|
|
18
|
+
return existingProcessId;
|
|
19
|
+
}
|
|
20
|
+
console.log('Spawning process...', {
|
|
21
|
+
module: processInfo.module,
|
|
22
|
+
scheduler: processInfo.scheduler,
|
|
23
|
+
tags,
|
|
24
|
+
});
|
|
25
|
+
let spawnAttempts = 0;
|
|
26
|
+
const maxSpawnAttempts = 5;
|
|
27
|
+
const spawnDelay = 30000; // 30 seconds
|
|
28
|
+
while (spawnAttempts < maxSpawnAttempts) {
|
|
29
|
+
try {
|
|
30
|
+
const processId = await ao.spawn({
|
|
31
|
+
module: processInfo.module,
|
|
32
|
+
scheduler, //: processInfo.scheduler,
|
|
33
|
+
tags,
|
|
34
|
+
});
|
|
35
|
+
console.log('Spawned process:', processId);
|
|
36
|
+
return processId;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
spawnAttempts += 1;
|
|
40
|
+
console.log('err', err);
|
|
41
|
+
console.log(`Failed to spawn process '${name}'. Attempt ${spawnAttempts}/${maxSpawnAttempts}`);
|
|
42
|
+
if (spawnAttempts === maxSpawnAttempts) {
|
|
43
|
+
throw new Error(`Failed to spawn process '${name}' after ${maxSpawnAttempts} attempts.`);
|
|
44
|
+
}
|
|
45
|
+
console.log(`Retrying in ${spawnDelay / 1000} seconds...`);
|
|
46
|
+
await sleep(spawnDelay);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`Failed to spawn process '${name}'.`);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=spawnProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawnProcess.js","sourceRoot":"","sources":["../../../../src/core/deploy/spawnProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,SAAS,OAAO,CAAC,IAAuB,EAAE,SAA2B;IACnE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACtC,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAO,EACP,WAA0B,EAC1B,KAAkB,EAClB,SAA2B;IAE3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAElD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;QAC3B,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,8BAA8B,iBAAiB,kBAAkB,IAAI,IAAI,CAAC,CAAC;QACvF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;QACjC,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa;IAEvC,OAAO,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC;gBAC/B,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,SAAS,EAAE,0BAA0B;gBACrC,IAAI;aACL,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,IAAI,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,cAAc,aAAa,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAE/F,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,WAAW,gBAAgB,YAAY,CAAC,CAAC;YAC3F,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,GAAG,IAAI,aAAa,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface LuaModule {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
content?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function createExecutableFromProject(project: LuaModule[]): [string, LuaModule[]];
|
|
7
|
+
export declare function createProjectStructure(mainFile: string): LuaModule[];
|
|
8
|
+
export declare function pack(startFile: string): string;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=packLua.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packLua.d.ts","sourceRoot":"","sources":["../../../../src/core/lua/packLua.ts"],"names":[],"mappings":"AAGA,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAuBvF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAqBpE;AAiBD,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI9C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
export function createExecutableFromProject(project) {
|
|
4
|
+
const getModFnName = (name) => name.replace(/\./g, '_').replace(/^_/, '');
|
|
5
|
+
const contents = [];
|
|
6
|
+
for (let i = 0; i < project.length - 1; i++) {
|
|
7
|
+
const mod = project[i];
|
|
8
|
+
const existing = contents.find((m) => m.path === mod.path);
|
|
9
|
+
const moduleContent = (!existing && `-- module: "${mod.name}"\nlocal function _loaded_mod_${getModFnName(mod.name)}()\n${mod.content}\nend\n`) || '';
|
|
10
|
+
const requireMapper = `\n_G.package.loaded["${mod.name}"] = _loaded_mod_${getModFnName(existing?.name || mod.name)}()`;
|
|
11
|
+
contents.push({
|
|
12
|
+
...mod,
|
|
13
|
+
content: moduleContent + requireMapper,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
contents.push(project[project.length - 1]);
|
|
17
|
+
return [
|
|
18
|
+
contents.reduce((acc, con) => acc + '\n\n' + (con.content || ''), ''),
|
|
19
|
+
contents,
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
export function createProjectStructure(mainFile) {
|
|
23
|
+
const sorted = [];
|
|
24
|
+
const cwd = path.dirname(mainFile);
|
|
25
|
+
const isSorted = (node) => sorted.find((sortedNode) => sortedNode.path === node.path);
|
|
26
|
+
function dfs(currentNode) {
|
|
27
|
+
const unvisitedChildNodes = exploreNodes(currentNode, cwd).filter((node) => !isSorted(node));
|
|
28
|
+
for (let i = 0; i < unvisitedChildNodes.length; i++) {
|
|
29
|
+
dfs(unvisitedChildNodes[i]);
|
|
30
|
+
}
|
|
31
|
+
if (!isSorted(currentNode)) {
|
|
32
|
+
sorted.push(currentNode);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
dfs({ name: mainFile, path: mainFile });
|
|
36
|
+
return sorted.filter((mod) => mod.content !== undefined);
|
|
37
|
+
}
|
|
38
|
+
function exploreNodes(node, cwd) {
|
|
39
|
+
if (!fs.existsSync(node.path))
|
|
40
|
+
return [];
|
|
41
|
+
node.content = fs.readFileSync(node.path, 'utf-8');
|
|
42
|
+
const requirePattern = /(?<!^.*--.*)(?<=(require( *)(\n*)(\()?( *)("|'))).*(?=("|'))/gm;
|
|
43
|
+
const requiredModules = node.content.match(requirePattern)?.map((mod) => ({
|
|
44
|
+
name: mod,
|
|
45
|
+
path: path.join(cwd, mod.replace(/\./g, '/') + '.lua'),
|
|
46
|
+
content: undefined,
|
|
47
|
+
})) || [];
|
|
48
|
+
return requiredModules;
|
|
49
|
+
}
|
|
50
|
+
export function pack(startFile) {
|
|
51
|
+
const projectStructure = createProjectStructure(startFile);
|
|
52
|
+
const [executable] = createExecutableFromProject(projectStructure);
|
|
53
|
+
return executable;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=packLua.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packLua.js","sourceRoot":"","sources":["../../../../src/core/lua/packLua.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type Tag = {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type ProcessConfig = {
|
|
6
|
+
name: string;
|
|
7
|
+
file: string;
|
|
8
|
+
pack?: boolean;
|
|
9
|
+
prerun?: string;
|
|
10
|
+
resetModules?: boolean;
|
|
11
|
+
directory?: boolean;
|
|
12
|
+
module?: string;
|
|
13
|
+
scheduler?: string;
|
|
14
|
+
tags?: Tag[];
|
|
15
|
+
};
|
|
16
|
+
export type ProcessState = {
|
|
17
|
+
processId: string;
|
|
18
|
+
hash: string;
|
|
19
|
+
};
|
|
20
|
+
export type DeployState = Record<string, ProcessState>;
|
|
21
|
+
export type ProcessDirectory = Record<string, string>;
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAE;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "aoform-toolkit",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "CLI toolkit to deploy and update AO processes from YAML configs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ao",
|
|
7
|
+
"arweave",
|
|
8
|
+
"cli",
|
|
9
|
+
"deployment",
|
|
10
|
+
"lua",
|
|
11
|
+
"hyperBEAM"
|
|
12
|
+
],
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/merdikim/aoform.git"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://github.com/merdikim/aoform#readme",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/merdikim/aoform/issues"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"aoform": "dist/bin/aoform.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE",
|
|
28
|
+
"CHANGELOG.md"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"clean": "rm -rf dist",
|
|
32
|
+
"compile": "tsc -p tsconfig.json",
|
|
33
|
+
"build": "npm run clean && npm run compile && npm run copy:templates",
|
|
34
|
+
"copy:templates": "mkdir -p dist/src/templates && cp -R src/templates/. dist/src/templates/",
|
|
35
|
+
"aoform": "node dist/bin/aoform.js",
|
|
36
|
+
"start": "npm run build && node dist/bin/aoform.js",
|
|
37
|
+
"prepublishOnly": "npm run build"
|
|
38
|
+
},
|
|
39
|
+
"author": "merdikim",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.18"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@permaweb/aoconnect": "^0.0.93",
|
|
46
|
+
"commander": "^12.0.0",
|
|
47
|
+
"dotenv": "^16.4.5",
|
|
48
|
+
"js-yaml": "^4.1.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/js-yaml": "^4.0.9",
|
|
52
|
+
"@types/node": "^22.19.11",
|
|
53
|
+
"typescript": "^5.7.2"
|
|
54
|
+
},
|
|
55
|
+
"type": "module"
|
|
56
|
+
}
|