pha-deploy 0.2.0
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/LICENSE +21 -0
- package/README.md +223 -0
- package/config/config.example.toml +117 -0
- package/dist/actions/createSeries.d.ts +20 -0
- package/dist/actions/createSeries.d.ts.map +1 -0
- package/dist/actions/createSeries.js +79 -0
- package/dist/actions/createSeries.js.map +1 -0
- package/dist/actions/createToken.d.ts +25 -0
- package/dist/actions/createToken.d.ts.map +1 -0
- package/dist/actions/createToken.js +124 -0
- package/dist/actions/createToken.js.map +1 -0
- package/dist/actions/helpers.d.ts +11 -0
- package/dist/actions/helpers.d.ts.map +1 -0
- package/dist/actions/helpers.js +78 -0
- package/dist/actions/helpers.js.map +1 -0
- package/dist/actions/mintNftToken.d.ts +20 -0
- package/dist/actions/mintNftToken.d.ts.map +1 -0
- package/dist/actions/mintNftToken.js +79 -0
- package/dist/actions/mintNftToken.js.map +1 -0
- package/dist/actions/waitForTx.d.ts +6 -0
- package/dist/actions/waitForTx.d.ts.map +1 -0
- package/dist/actions/waitForTx.js +54 -0
- package/dist/actions/waitForTx.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +269 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs\";\nimport loadConfig, { Config, TokenType } from \"./config\";\nimport { createToken, createTokenCfg } from \"./actions/createToken\";\nimport { createSeries, createSeriesCfg } from \"./actions/createSeries\";\nimport { mintNftToken, mintNftTokenCfg } from \"./actions/mintNftToken\";\n\n/**\n * CLI for pha-deploy.\n *\n * Modes:\n * - CLI one-shot: use flags to perform actions immediately\n * - TOML-driven: use `--config` or default `config.toml` for config values\n *\n * Actions:\n * - create-token\n * - create-series\n * - mint-nft\n */\n\nfunction requireArg<T>(\n value: T,\n name: string,\n): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(`${name} is required`);\n }\n}\n\n/* ----------------------------- Actions ----------------------------- */\nasync function actionCreateToken(cfg: Config, dryRun: boolean) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.symbol, \"symbol\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenBase, \"gas_fee_create_token_base\");\n requireArg(cfg.gasFeeCreateTokenSymbol, \"gas_fee_create_token_symbol\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenMaxData, \"create_token_max_data\");\n\n const tokenType: TokenType =\n (cfg.tokenType ?? \"nft\") === \"fungible\" ? \"fungible\" : \"nft\";\n\n if (tokenType === \"fungible\") {\n requireArg(cfg.tokenMaxSupply, \"token_max_supply\");\n requireArg(cfg.fungibleDecimals, \"fungible_decimals\");\n }\n\n await createToken(\n new createTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.symbol,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenBase,\n cfg.gasFeeCreateTokenSymbol,\n cfg.gasFeeMultiplier,\n cfg.createTokenMaxData,\n cfg.tokenSchemas,\n cfg.tokenMetadata,\n tokenType,\n cfg.tokenMaxSupply,\n cfg.fungibleDecimals,\n ),\n dryRun,\n );\n}\n\nasync function actionCreateSeries(cfg: Config, dryRun: boolean) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.seriesMetadata, \"series_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeCreateTokenSeries, \"gas_fee_create_token_series\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.createTokenSeriesMaxData, \"create_token_series_max_data\");\n\n await createSeries(\n new createSeriesCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.gasFeeBase,\n cfg.gasFeeCreateTokenSeries,\n cfg.gasFeeMultiplier,\n cfg.createTokenSeriesMaxData,\n cfg.tokenSchemas?.seriesMetadata,\n cfg.seriesMetadata\n ),\n dryRun,\n );\n}\n\nasync function actionMintNft(cfg: Config, dryRun: boolean) {\n requireArg(cfg.rpc, \"rpc\");\n requireArg(cfg.nexus, \"nexus\");\n requireArg(cfg.wif, \"wif\");\n requireArg(cfg.carbonTokenId, \"carbon_token_id\");\n requireArg(cfg.carbonTokenSeriesId, \"carbon_token_series_id\");\n requireArg(cfg.tokenSchemas, \"token_schemas\");\n requireArg(cfg.nftMetadata, \"nft_metadata\");\n requireArg(cfg.gasFeeBase, \"gas_fee_base\");\n requireArg(cfg.gasFeeMultiplier, \"gas_fee_multiplier\");\n requireArg(cfg.mintTokenMaxData, \"mint_token_max_data\");\n\n await mintNftToken(\n new mintNftTokenCfg(\n cfg.rpc,\n cfg.nexus,\n cfg.wif,\n cfg.carbonTokenId,\n cfg.carbonTokenSeriesId,\n cfg.tokenSchemas.rom,\n cfg.nftMetadata,\n cfg.gasFeeBase,\n cfg.gasFeeMultiplier,\n cfg.mintTokenMaxData,\n ),\n dryRun,\n );\n}\n\n/* ------------------------------- Main ------------------------------- */\n\nasync function main() {\n // Pre-parse --config early so the TOML file can be loaded before the main yargs parsing.\n const pre = yargs(hideBin(process.argv))\n .option(\"config\", {\n type: \"string\",\n alias: \"c\",\n description: \"Path to TOML config file (default: config.toml)\",\n })\n .help(false)\n .parseSync();\n\n // Load TOML configuration (if present) before doing full parsing\n const cfg = loadConfig({ configPath: pre.config ?? null });\n\n // Minimal yargs parsing for the top-level CLI behavior\n const argv = await yargs(hideBin(process.argv))\n .scriptName(\"pha-deploy\")\n .usage(\"Usage: $0 [options] [--create-token|--mint-nft|--transfer]\")\n .option(\"rpc\", { type: \"string\", describe: \"RPC endpoint\" })\n .option(\"nexus\", { type: \"string\", describe: \"Chain nexus\" })\n .option(\"wif\", { type: \"string\", describe: \"WIF for signing\" })\n .option(\"symbol\", { type: \"string\", describe: \"Token symbol\" })\n .option(\"token-type\", {\n type: \"string\",\n choices: [\"nft\", \"fungible\"],\n describe: \"Token type to create (default: nft)\",\n })\n .option(\"token-max-supply\", {\n type: \"string\",\n describe:\n \"Token max supply (optional for NFT; required when --token-type fungible)\",\n })\n .option(\"fungible-decimals\", {\n type: \"number\",\n describe:\n \"Decimal places for fungible token (required when --token-type fungible)\",\n })\n .option(\"dry-run\", {\n type: \"boolean\",\n describe: \"Do not broadcast transactions; just show payloads\",\n })\n .option(\"config\", {\n type: \"string\",\n describe:\n \"Path to TOML config file (default: config.toml). Takes precedence as the file used for defaults.\",\n })\n .option(\"create-token\", { type: \"boolean\", describe: \"Create a token\" })\n .option(\"create-series\", {\n type: \"boolean\",\n describe: \"Create a token series\",\n })\n .option(\"mint-nft\", { type: \"boolean\", describe: \"Mint tokens\" })\n .help()\n .alias(\"h\", \"help\")\n .epilog(\"pha-deploy - minimal template\")\n .parseAsync();\n\n // Determine dry-run (CLI flag overrides config)\n const dryRun = Boolean((argv as any)[\"dry-run\"]) || cfg.dryRun || false;\n\n // One-shot actions: pick the first matching action\n const actions = [\"create-token\", \"create-series\", \"mint-nft\"];\n for (const action of actions) {\n if ((argv as any)[action]) {\n switch (action) {\n case \"create-token\": {\n await actionCreateToken(cfg, dryRun);\n return;\n }\n case \"create-series\": {\n await actionCreateSeries(cfg, dryRun);\n return;\n }\n case \"mint-nft\": {\n await actionMintNft(cfg, dryRun);\n return;\n }\n }\n }\n }\n\n // No action requested -> show help\n console.log(\n \"No action specified. Pass an action flag (e.g. --create-token or --mint-nft).\",\n );\n console.log(\"Use --help to see available flags.\");\n}\n\n/* ----------------------------- Run Script ---------------------------- */\n\nif (require.main === module) {\n main().catch((err) => {\n console.error(\n \"Unhandled error in CLI:\",\n err && err.stack ? err.stack : err,\n );\n process.exit(2);\n });\n}\n\nexport default main;\n"]}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Metadata } from "./actions/helpers";
|
|
2
|
+
import { MetadataField, TokenSchemas } from "phantasma-sdk-ts";
|
|
3
|
+
export type TokenType = "nft" | "fungible";
|
|
4
|
+
export interface Config {
|
|
5
|
+
rpc: string;
|
|
6
|
+
nexus?: string | null;
|
|
7
|
+
wif?: string | null;
|
|
8
|
+
symbol?: string | null;
|
|
9
|
+
carbonTokenId?: bigint | null;
|
|
10
|
+
rom?: string | null;
|
|
11
|
+
tokenSchemas?: TokenSchemas | null;
|
|
12
|
+
tokenMetadata: Metadata;
|
|
13
|
+
tokenType?: TokenType | null;
|
|
14
|
+
tokenMaxSupply?: bigint | null;
|
|
15
|
+
fungibleDecimals?: number | null;
|
|
16
|
+
carbonTokenSeriesId?: number | null;
|
|
17
|
+
seriesMetadata?: MetadataField[] | null;
|
|
18
|
+
nftMetadata?: MetadataField[] | null;
|
|
19
|
+
createTokenMaxData?: bigint | null;
|
|
20
|
+
createTokenSeriesMaxData?: bigint | null;
|
|
21
|
+
mintTokenMaxData?: bigint | null;
|
|
22
|
+
gasFeeBase?: bigint | null;
|
|
23
|
+
gasFeeCreateTokenBase?: bigint | null;
|
|
24
|
+
gasFeeCreateTokenSymbol?: bigint | null;
|
|
25
|
+
gasFeeCreateTokenSeries?: bigint | null;
|
|
26
|
+
gasFeeMultiplier?: bigint | null;
|
|
27
|
+
configPath?: string | null;
|
|
28
|
+
dryRun?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build Config by merging:
|
|
32
|
+
* - TOML config file (config.toml) values
|
|
33
|
+
* - CLI flags (override TOML)
|
|
34
|
+
* - defaults (where applicable)
|
|
35
|
+
*
|
|
36
|
+
* Usage:
|
|
37
|
+
* loadConfig(); // uses process.argv and config.toml if present
|
|
38
|
+
* loadConfig({ argv: ['--rpc','https://...'], configPath: 'custom-config.toml' })
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadConfig(options?: {
|
|
41
|
+
argv?: string[];
|
|
42
|
+
configPath?: string | null;
|
|
43
|
+
}): Config;
|
|
44
|
+
export default loadConfig;
|
|
45
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAkB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAEpF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;AAE3C,MAAM,WAAW,MAAM;IAErB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,QAAQ,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGxC,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAGrC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsKD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,MAAM,CAmNT;AAED,eAAe,UAAU,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const toml_1 = __importDefault(require("@iarna/toml"));
|
|
10
|
+
const yargs_1 = __importDefault(require("yargs/yargs"));
|
|
11
|
+
const helpers_1 = require("./actions/helpers");
|
|
12
|
+
const phantasma_sdk_ts_1 = require("phantasma-sdk-ts");
|
|
13
|
+
/**
|
|
14
|
+
* Try to parse a JSON string, returning undefined if parsing fails.
|
|
15
|
+
*/
|
|
16
|
+
function tryParseJSON(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return undefined;
|
|
19
|
+
try {
|
|
20
|
+
// Some users may provide single-quoted JSON; normalize quotes if necessary
|
|
21
|
+
const trimmed = value.trim();
|
|
22
|
+
return JSON.parse(trimmed);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
console.error("JSON parsing error: ", e);
|
|
26
|
+
// ignore parse errors; caller will handle fallback
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function makeMetadataField(name, value, context) {
|
|
31
|
+
const trimmed = name.trim();
|
|
32
|
+
if (!trimmed) {
|
|
33
|
+
throw new Error(`${context}: metadata field name cannot be empty`);
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === "string" ||
|
|
36
|
+
typeof value === "number" ||
|
|
37
|
+
typeof value === "bigint" ||
|
|
38
|
+
value instanceof Uint8Array) {
|
|
39
|
+
const field = new phantasma_sdk_ts_1.MetadataField();
|
|
40
|
+
field.name = trimmed;
|
|
41
|
+
field.value = value;
|
|
42
|
+
return field;
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`${context}.${trimmed} must be a string, number, bigint or Uint8Array`);
|
|
45
|
+
}
|
|
46
|
+
function parseMetadataFieldArray(raw, context) {
|
|
47
|
+
if (!raw) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const parsed = tryParseJSON(raw);
|
|
51
|
+
if (parsed === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
if (Array.isArray(parsed)) {
|
|
55
|
+
return parsed.map((entry, idx) => {
|
|
56
|
+
if (entry &&
|
|
57
|
+
typeof entry === "object" &&
|
|
58
|
+
!Array.isArray(entry) &&
|
|
59
|
+
"name" in entry &&
|
|
60
|
+
"value" in entry &&
|
|
61
|
+
typeof entry.name === "string") {
|
|
62
|
+
return makeMetadataField(entry.name, entry.value, `${context}[${idx}]`);
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`${context}[${idx}] must be an object like { name: string; value: ... }`);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (parsed && typeof parsed === "object") {
|
|
68
|
+
return Object.entries(parsed).map(([name, value]) => makeMetadataField(name, value, context));
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`${context} must be a JSON object or array`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse a numeric-ish value into a number or undefined.
|
|
74
|
+
*/
|
|
75
|
+
function parseNumber(value) {
|
|
76
|
+
if (value == null)
|
|
77
|
+
return undefined;
|
|
78
|
+
if (typeof value === "number")
|
|
79
|
+
return Number.isFinite(value) ? value : undefined;
|
|
80
|
+
const v = value.toString().trim();
|
|
81
|
+
if (v === "")
|
|
82
|
+
return undefined;
|
|
83
|
+
const n = Number(v);
|
|
84
|
+
return Number.isFinite(n) ? n : undefined;
|
|
85
|
+
}
|
|
86
|
+
function parseBigInt(value) {
|
|
87
|
+
if (value == null)
|
|
88
|
+
return undefined;
|
|
89
|
+
if (typeof value === "bigint")
|
|
90
|
+
return value;
|
|
91
|
+
const v = value.toString().trim();
|
|
92
|
+
if (v === "")
|
|
93
|
+
return undefined;
|
|
94
|
+
return BigInt(v);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Load TOML configuration from a provided path (if exists) or from default `config.toml`.
|
|
98
|
+
* The parsed result is stored in the module-scoped `tomlConfig` object and used as
|
|
99
|
+
* the source of truth for configuration values unless overridden by CLI flags.
|
|
100
|
+
*/
|
|
101
|
+
let tomlConfig = {};
|
|
102
|
+
function loadToml(configPath) {
|
|
103
|
+
const file = configPath ? configPath : "config.toml";
|
|
104
|
+
try {
|
|
105
|
+
const resolved = path_1.default.resolve(process.cwd(), file);
|
|
106
|
+
if (fs_1.default.existsSync(resolved)) {
|
|
107
|
+
const raw = fs_1.default.readFileSync(resolved, { encoding: "utf8" });
|
|
108
|
+
// Parse TOML into a plain object. If parse fails, keep an empty config.
|
|
109
|
+
try {
|
|
110
|
+
tomlConfig = toml_1.default.parse(raw);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
tomlConfig = {};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
tomlConfig = {};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
tomlConfig = {};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Helper to obtain a value by preferring CLI args -> TOML config -> fallback.
|
|
126
|
+
* Accepts multiple possible CLI keys (kebab-case and camelCase).
|
|
127
|
+
*/
|
|
128
|
+
function pickValue(argv, cliKey, // prefer these (kebab/camel)
|
|
129
|
+
tomlKey) {
|
|
130
|
+
// try as-is from CLI
|
|
131
|
+
if (Object.prototype.hasOwnProperty.call(argv, cliKey)) {
|
|
132
|
+
const v = argv[cliKey];
|
|
133
|
+
// yargs may map flags to boolean when not provided with value
|
|
134
|
+
if (!(v === undefined)) {
|
|
135
|
+
return v;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Fall back to TOML configuration.
|
|
139
|
+
if (tomlConfig) {
|
|
140
|
+
return tomlConfig[tomlKey];
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build Config by merging:
|
|
146
|
+
* - TOML config file (config.toml) values
|
|
147
|
+
* - CLI flags (override TOML)
|
|
148
|
+
* - defaults (where applicable)
|
|
149
|
+
*
|
|
150
|
+
* Usage:
|
|
151
|
+
* loadConfig(); // uses process.argv and config.toml if present
|
|
152
|
+
* loadConfig({ argv: ['--rpc','https://...'], configPath: 'custom-config.toml' })
|
|
153
|
+
*/
|
|
154
|
+
function loadConfig(options) {
|
|
155
|
+
// Load TOML config (if any)
|
|
156
|
+
loadToml(options?.configPath ?? null);
|
|
157
|
+
// Parse CLI args using yargs; pass provided argv or process.argv
|
|
158
|
+
const rawArgv = options?.argv ?? process.argv.slice(2);
|
|
159
|
+
const argv = (0, yargs_1.default)(rawArgv).parseSync();
|
|
160
|
+
const cfg = {
|
|
161
|
+
rpc: "",
|
|
162
|
+
nexus: "",
|
|
163
|
+
wif: null,
|
|
164
|
+
symbol: null,
|
|
165
|
+
carbonTokenId: null,
|
|
166
|
+
carbonTokenSeriesId: null,
|
|
167
|
+
rom: null,
|
|
168
|
+
tokenSchemas: new phantasma_sdk_ts_1.TokenSchemas(),
|
|
169
|
+
tokenMetadata: new helpers_1.Metadata(undefined, "token_metadata"),
|
|
170
|
+
seriesMetadata: null,
|
|
171
|
+
tokenType: null,
|
|
172
|
+
tokenMaxSupply: null,
|
|
173
|
+
fungibleDecimals: null,
|
|
174
|
+
nftMetadata: null,
|
|
175
|
+
createTokenMaxData: null,
|
|
176
|
+
createTokenSeriesMaxData: null,
|
|
177
|
+
mintTokenMaxData: null,
|
|
178
|
+
gasFeeBase: null,
|
|
179
|
+
gasFeeCreateTokenBase: null,
|
|
180
|
+
gasFeeCreateTokenSymbol: null,
|
|
181
|
+
gasFeeCreateTokenSeries: null,
|
|
182
|
+
gasFeeMultiplier: null,
|
|
183
|
+
configPath: null,
|
|
184
|
+
dryRun: false,
|
|
185
|
+
};
|
|
186
|
+
// Core / connection
|
|
187
|
+
cfg.rpc =
|
|
188
|
+
pickValue(argv, "rpc", "rpc") ??
|
|
189
|
+
"https://testnet.phantasma.info/rpc";
|
|
190
|
+
cfg.nexus = pickValue(argv, "nexus", "nexus") ?? null;
|
|
191
|
+
cfg.wif = pickValue(argv, "wif", "wif") ?? null;
|
|
192
|
+
// Token defaults
|
|
193
|
+
cfg.symbol =
|
|
194
|
+
pickValue(argv, "symbol", "symbol") ?? null;
|
|
195
|
+
cfg.carbonTokenId =
|
|
196
|
+
parseBigInt(pickValue(argv, "carbon-token-id", "carbon_token_id")) ?? null;
|
|
197
|
+
cfg.carbonTokenSeriesId =
|
|
198
|
+
parseNumber(pickValue(argv, "carbon-token-series-id", "carbon_token_series_id")) ?? null;
|
|
199
|
+
cfg.rom = pickValue(argv, "rom", "rom") ?? null;
|
|
200
|
+
const tokenTypeRaw = pickValue(argv, "token-type", "token_type");
|
|
201
|
+
if (!tokenTypeRaw) {
|
|
202
|
+
throw Error("Token type must be provided");
|
|
203
|
+
}
|
|
204
|
+
const lowered = tokenTypeRaw.trim().toLowerCase();
|
|
205
|
+
if (lowered === "fungible" || lowered === "nft") {
|
|
206
|
+
cfg.tokenType = lowered;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
throw Error(`Unsupported token type ${lowered}`);
|
|
210
|
+
}
|
|
211
|
+
// tokenSchemas
|
|
212
|
+
if (cfg.tokenType == "nft") {
|
|
213
|
+
const tokenSchemasRaw = pickValue(argv, "token-schemas", "token_schemas");
|
|
214
|
+
if (!tokenSchemasRaw) {
|
|
215
|
+
throw Error("Token schemas must be provided");
|
|
216
|
+
}
|
|
217
|
+
cfg.tokenSchemas = phantasma_sdk_ts_1.TokenSchemasBuilder.fromJson(tokenSchemasRaw);
|
|
218
|
+
}
|
|
219
|
+
// tokenMetadata
|
|
220
|
+
const tmfRaw = pickValue(argv, "token-metadata", "token_metadata");
|
|
221
|
+
if (tmfRaw) {
|
|
222
|
+
const tokenMetadataFields = tryParseJSON(tmfRaw);
|
|
223
|
+
if (!tokenMetadataFields) {
|
|
224
|
+
throw new Error("token_metadata must be valid JSON");
|
|
225
|
+
}
|
|
226
|
+
cfg.tokenMetadata = new helpers_1.Metadata(tokenMetadataFields, "token_metadata");
|
|
227
|
+
}
|
|
228
|
+
if (cfg.tokenType == "nft") {
|
|
229
|
+
const smfRaw = pickValue(argv, "series-metadata", "series_metadata");
|
|
230
|
+
cfg.seriesMetadata = parseMetadataFieldArray(smfRaw, "series_metadata");
|
|
231
|
+
}
|
|
232
|
+
const rawMaxSupply = pickValue(argv, "token-max-supply", "token_max_supply") ??
|
|
233
|
+
pickValue(argv, "fungible-max-supply", "fungible_max_supply");
|
|
234
|
+
cfg.tokenMaxSupply = parseBigInt(rawMaxSupply) ?? null;
|
|
235
|
+
cfg.fungibleDecimals =
|
|
236
|
+
parseNumber(pickValue(argv, "fungible-decimals", "fungible_decimals")) ?? null;
|
|
237
|
+
if (cfg.tokenType == "nft") {
|
|
238
|
+
// NFT metadata
|
|
239
|
+
const nmfRaw = pickValue(argv, "nft-metadata", "nft_metadata");
|
|
240
|
+
cfg.nftMetadata = parseMetadataFieldArray(nmfRaw, "nft_metadata");
|
|
241
|
+
}
|
|
242
|
+
// Limits and sizes
|
|
243
|
+
cfg.createTokenMaxData =
|
|
244
|
+
parseBigInt(pickValue(argv, "create-token-max-data", "create_token_max_data")) ?? null;
|
|
245
|
+
cfg.createTokenSeriesMaxData =
|
|
246
|
+
parseBigInt(pickValue(argv, "create-token-series-max-data", "create_token_series_max_data")) ?? null;
|
|
247
|
+
cfg.mintTokenMaxData =
|
|
248
|
+
parseBigInt(pickValue(argv, "mint-token-max-data", "mint_token_max_data")) ?? null;
|
|
249
|
+
// Gas / fees
|
|
250
|
+
cfg.gasFeeBase =
|
|
251
|
+
parseBigInt(pickValue(argv, "gas-fee-base", "gas_fee_base")) ?? null;
|
|
252
|
+
cfg.gasFeeCreateTokenBase =
|
|
253
|
+
parseBigInt(pickValue(argv, "gas-fee-create-token-base", "gas_fee_create_token_base")) ?? null;
|
|
254
|
+
cfg.gasFeeCreateTokenSymbol =
|
|
255
|
+
parseBigInt(pickValue(argv, "gas-fee-create-token-symbol", "gas_fee_create_token_symbol")) ?? null;
|
|
256
|
+
cfg.gasFeeCreateTokenSeries =
|
|
257
|
+
parseBigInt(pickValue(argv, "gas-fee-create-token-series", "gas_fee_create_token_series")) ?? null;
|
|
258
|
+
cfg.gasFeeMultiplier =
|
|
259
|
+
parseBigInt(pickValue(argv, "gas-fee-multiplier", "gas_fee_multiplier")) ?? null;
|
|
260
|
+
// Runtime flags
|
|
261
|
+
cfg.configPath =
|
|
262
|
+
pickValue(argv, "config", "CONFIG_PATH") ??
|
|
263
|
+
options?.configPath ??
|
|
264
|
+
null;
|
|
265
|
+
cfg.dryRun = Boolean(pickValue(argv, "dry-run", "dry_run")) || false;
|
|
266
|
+
return cfg;
|
|
267
|
+
}
|
|
268
|
+
exports.default = loadConfig;
|
|
269
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport toml from \"@iarna/toml\";\nimport yargs from \"yargs/yargs\";\nimport { Metadata, MetadataFields } from \"./actions/helpers\";\nimport { MetadataField, TokenSchemas, TokenSchemasBuilder } from \"phantasma-sdk-ts\";\n\nexport type TokenType = \"nft\" | \"fungible\";\n\nexport interface Config {\n // Core / connection\n rpc: string;\n nexus?: string | null;\n wif?: string | null;\n\n // Token\n symbol?: string | null;\n carbonTokenId?: bigint | null;\n rom?: string | null;\n tokenSchemas?: TokenSchemas | null;\n tokenMetadata: Metadata;\n tokenType?: TokenType | null;\n tokenMaxSupply?: bigint | null;\n fungibleDecimals?: number | null;\n\n // Series\n carbonTokenSeriesId?: number | null;\n seriesMetadata?: MetadataField[] | null;\n\n // NFT-specific\n nftMetadata?: MetadataField[] | null;\n\n // Limits / sizes\n createTokenMaxData?: bigint | null;\n createTokenSeriesMaxData?: bigint | null;\n mintTokenMaxData?: bigint | null;\n\n // Gas / fees\n gasFeeBase?: bigint | null;\n gasFeeCreateTokenBase?: bigint | null;\n gasFeeCreateTokenSymbol?: bigint | null;\n gasFeeCreateTokenSeries?: bigint | null;\n gasFeeMultiplier?: bigint | null;\n\n // Runtime flags\n configPath?: string | null;\n dryRun?: boolean;\n}\n\n/**\n * Try to parse a JSON string, returning undefined if parsing fails.\n */\nfunction tryParseJSON<T = unknown>(value?: string | null): T | undefined {\n if (!value) return undefined;\n try {\n // Some users may provide single-quoted JSON; normalize quotes if necessary\n const trimmed = value.trim();\n return JSON.parse(trimmed) as T;\n } catch(e) {\n console.error(\"JSON parsing error: \", e);\n // ignore parse errors; caller will handle fallback\n return undefined;\n }\n}\n\nfunction makeMetadataField(\n name: string,\n value: unknown,\n context: string,\n): MetadataField {\n const trimmed = name.trim();\n if (!trimmed) {\n throw new Error(`${context}: metadata field name cannot be empty`);\n }\n\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value instanceof Uint8Array\n ) {\n const field = new MetadataField();\n field.name = trimmed;\n field.value = value;\n return field;\n }\n\n throw new Error(\n `${context}.${trimmed} must be a string, number, bigint or Uint8Array`,\n );\n}\n\nfunction parseMetadataFieldArray(\n raw: string | undefined,\n context: string,\n): MetadataField[] | undefined {\n if (!raw) {\n return undefined;\n }\n\n const parsed = tryParseJSON<unknown>(raw);\n if (parsed === undefined) {\n return undefined;\n }\n\n if (Array.isArray(parsed)) {\n return parsed.map((entry, idx) => {\n if (\n entry &&\n typeof entry === \"object\" &&\n !Array.isArray(entry) &&\n \"name\" in entry &&\n \"value\" in entry &&\n typeof (entry as any).name === \"string\"\n ) {\n return makeMetadataField(\n (entry as any).name,\n (entry as any).value,\n `${context}[${idx}]`,\n );\n }\n throw new Error(\n `${context}[${idx}] must be an object like { name: string; value: ... }`,\n );\n });\n }\n\n if (parsed && typeof parsed === \"object\") {\n return Object.entries(parsed as Record<string, unknown>).map(\n ([name, value]) => makeMetadataField(name, value, context),\n );\n }\n\n throw new Error(`${context} must be a JSON object or array`);\n}\n\n/**\n * Parse a numeric-ish value into a number or undefined.\n */\nfunction parseNumber(value?: string | number | null): number | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"number\")\n return Number.isFinite(value) ? value : undefined;\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\nfunction parseBigInt(value?: string | bigint | null): bigint | undefined {\n if (value == null) return undefined;\n\n if (typeof value === \"bigint\") return value;\n\n const v = value.toString().trim();\n if (v === \"\") return undefined;\n return BigInt(v);\n}\n\n/**\n * Load TOML configuration from a provided path (if exists) or from default `config.toml`.\n * The parsed result is stored in the module-scoped `tomlConfig` object and used as\n * the source of truth for configuration values unless overridden by CLI flags.\n */\nlet tomlConfig: Record<string, any> = {};\n\nfunction loadToml(configPath?: string | null) {\n const file = configPath ? configPath : \"config.toml\";\n try {\n const resolved = path.resolve(process.cwd(), file);\n if (fs.existsSync(resolved)) {\n const raw = fs.readFileSync(resolved, { encoding: \"utf8\" });\n // Parse TOML into a plain object. If parse fails, keep an empty config.\n try {\n tomlConfig = toml.parse(raw) as Record<string, any>;\n } catch {\n tomlConfig = {};\n }\n } else {\n tomlConfig = {};\n }\n } catch {\n tomlConfig = {};\n }\n}\n\n/**\n * Helper to obtain a value by preferring CLI args -> TOML config -> fallback.\n * Accepts multiple possible CLI keys (kebab-case and camelCase).\n */\nfunction pickValue<T = string | undefined>(\n argv: Record<string, unknown>,\n cliKey: string, // prefer these (kebab/camel)\n tomlKey: string,\n): T | undefined {\n // try as-is from CLI\n if (Object.prototype.hasOwnProperty.call(argv, cliKey)) {\n const v = argv[cliKey];\n // yargs may map flags to boolean when not provided with value\n if (!(v === undefined)) {\n return v as unknown as T;\n }\n }\n\n // Fall back to TOML configuration.\n if (tomlConfig) {\n return tomlConfig[tomlKey] as unknown as T;\n }\n\n return undefined;\n}\n\n/**\n * Build Config by merging:\n * - TOML config file (config.toml) values\n * - CLI flags (override TOML)\n * - defaults (where applicable)\n *\n * Usage:\n * loadConfig(); // uses process.argv and config.toml if present\n * loadConfig({ argv: ['--rpc','https://...'], configPath: 'custom-config.toml' })\n */\nexport function loadConfig(options?: {\n argv?: string[];\n configPath?: string | null;\n}): Config {\n // Load TOML config (if any)\n loadToml(options?.configPath ?? null);\n\n // Parse CLI args using yargs; pass provided argv or process.argv\n const rawArgv = options?.argv ?? process.argv.slice(2);\n const argv = yargs(rawArgv).parseSync();\n\n const cfg: Config = {\n rpc: \"\",\n nexus: \"\",\n wif: null,\n symbol: null,\n carbonTokenId: null,\n carbonTokenSeriesId: null,\n rom: null,\n tokenSchemas: new TokenSchemas(),\n tokenMetadata: new Metadata(undefined, \"token_metadata\"),\n seriesMetadata: null,\n tokenType: null,\n tokenMaxSupply: null,\n fungibleDecimals: null,\n nftMetadata: null,\n createTokenMaxData: null,\n createTokenSeriesMaxData: null,\n mintTokenMaxData: null,\n gasFeeBase: null,\n gasFeeCreateTokenBase: null,\n gasFeeCreateTokenSymbol: null,\n gasFeeCreateTokenSeries: null,\n gasFeeMultiplier: null,\n configPath: null,\n dryRun: false,\n };\n\n // Core / connection\n cfg.rpc =\n (pickValue(argv, \"rpc\", \"rpc\") as string | undefined) ??\n \"https://testnet.phantasma.info/rpc\";\n cfg.nexus = (pickValue(argv, \"nexus\", \"nexus\") as string | undefined) ?? null;\n cfg.wif = (pickValue(argv, \"wif\", \"wif\") as string | undefined) ?? null;\n\n // Token defaults\n cfg.symbol =\n (pickValue(argv, \"symbol\", \"symbol\") as string | undefined) ?? null;\n cfg.carbonTokenId =\n parseBigInt(\n pickValue(argv, \"carbon-token-id\", \"carbon_token_id\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.carbonTokenSeriesId =\n parseNumber(\n pickValue(argv, \"carbon-token-series-id\", \"carbon_token_series_id\") as\n | string\n | number\n | undefined,\n ) ?? null;\n cfg.rom = (pickValue(argv, \"rom\", \"rom\") as string | undefined) ?? null;\n\n const tokenTypeRaw = pickValue(argv, \"token-type\", \"token_type\") as\n | string\n | undefined;\n if(!tokenTypeRaw){\n throw Error(\"Token type must be provided\");\n }\n const lowered = tokenTypeRaw.trim().toLowerCase();\n if (lowered === \"fungible\" || lowered === \"nft\") {\n cfg.tokenType = lowered;\n } else {\n throw Error(`Unsupported token type ${lowered}`);\n }\n\n // tokenSchemas\n if(cfg.tokenType == \"nft\") {\n const tokenSchemasRaw = pickValue<string>(\n argv,\n \"token-schemas\",\n \"token_schemas\",\n );\n if(!tokenSchemasRaw){\n throw Error(\"Token schemas must be provided\");\n }\n cfg.tokenSchemas = TokenSchemasBuilder.fromJson(tokenSchemasRaw);\n }\n\n\n // tokenMetadata\n const tmfRaw = pickValue<string>(\n argv,\n \"token-metadata\",\n \"token_metadata\",\n );\n if (tmfRaw) {\n const tokenMetadataFields = tryParseJSON<MetadataFields>(tmfRaw);\n if (!tokenMetadataFields) {\n throw new Error(\"token_metadata must be valid JSON\");\n }\n cfg.tokenMetadata = new Metadata(tokenMetadataFields, \"token_metadata\");\n }\n\n if(cfg.tokenType == \"nft\") {\n const smfRaw = pickValue(\n argv,\n \"series-metadata\",\n \"series_metadata\",\n );\n cfg.seriesMetadata = parseMetadataFieldArray(smfRaw, \"series_metadata\");\n }\n\n const rawMaxSupply =\n (pickValue(argv, \"token-max-supply\", \"token_max_supply\") as\n | string\n | bigint\n | undefined) ??\n (pickValue(argv, \"fungible-max-supply\", \"fungible_max_supply\") as\n | string\n | bigint\n | undefined);\n cfg.tokenMaxSupply = parseBigInt(rawMaxSupply) ?? null;\n cfg.fungibleDecimals =\n parseNumber(\n pickValue(argv, \"fungible-decimals\", \"fungible_decimals\") as\n | string\n | number\n | undefined,\n ) ?? null;\n\n if(cfg.tokenType == \"nft\") {\n // NFT metadata\n const nmfRaw = pickValue(\n argv,\n \"nft-metadata\",\n \"nft_metadata\",\n );\n cfg.nftMetadata = parseMetadataFieldArray(nmfRaw, \"nft_metadata\");\n }\n\n // Limits and sizes\n cfg.createTokenMaxData =\n parseBigInt(\n pickValue(argv, \"create-token-max-data\", \"create_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.createTokenSeriesMaxData =\n parseBigInt(\n pickValue(\n argv,\n \"create-token-series-max-data\",\n \"create_token_series_max_data\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.mintTokenMaxData =\n parseBigInt(\n pickValue(argv, \"mint-token-max-data\", \"mint_token_max_data\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Gas / fees\n cfg.gasFeeBase =\n parseBigInt(\n pickValue(argv, \"gas-fee-base\", \"gas_fee_base\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenBase =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-base\",\n \"gas_fee_create_token_base\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSymbol =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-symbol\",\n \"gas_fee_create_token_symbol\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeCreateTokenSeries =\n parseBigInt(\n pickValue(\n argv,\n \"gas-fee-create-token-series\",\n \"gas_fee_create_token_series\",\n ) as string | bigint | undefined,\n ) ?? null;\n cfg.gasFeeMultiplier =\n parseBigInt(\n pickValue(argv, \"gas-fee-multiplier\", \"gas_fee_multiplier\") as\n | string\n | bigint\n | undefined,\n ) ?? null;\n\n // Runtime flags\n cfg.configPath =\n (pickValue(argv, \"config\", \"CONFIG_PATH\") as string | undefined) ??\n options?.configPath ??\n null;\n cfg.dryRun = Boolean(pickValue(argv, \"dry-run\", \"dry_run\")) || false;\n\n return cfg;\n}\n\nexport default loadConfig;\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Barrel file for pha-deploy
|
|
3
|
+
*
|
|
4
|
+
* Re-exports config utilities and the CLI entrypoint so consumers can:
|
|
5
|
+
* - import { loadConfig, Config } from 'pha-deploy'
|
|
6
|
+
* - import { main } from 'pha-deploy' (to run CLI programmatically)
|
|
7
|
+
*
|
|
8
|
+
* This file is intentionally small — it simply re-exports the pieces implemented
|
|
9
|
+
* in `src/config.ts` and `src/cli.ts`.
|
|
10
|
+
*/
|
|
11
|
+
export { default as loadConfig } from "./config";
|
|
12
|
+
export type { Config } from "./config";
|
|
13
|
+
export { default as main } from "./cli";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AAEjD,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,OAAO,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Barrel file for pha-deploy
|
|
4
|
+
*
|
|
5
|
+
* Re-exports config utilities and the CLI entrypoint so consumers can:
|
|
6
|
+
* - import { loadConfig, Config } from 'pha-deploy'
|
|
7
|
+
* - import { main } from 'pha-deploy' (to run CLI programmatically)
|
|
8
|
+
*
|
|
9
|
+
* This file is intentionally small — it simply re-exports the pieces implemented
|
|
10
|
+
* in `src/config.ts` and `src/cli.ts`.
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.main = exports.loadConfig = void 0;
|
|
17
|
+
var config_1 = require("./config");
|
|
18
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return __importDefault(config_1).default; } });
|
|
19
|
+
// Export the CLI entrypoint (default export from ./cli)
|
|
20
|
+
var cli_1 = require("./cli");
|
|
21
|
+
Object.defineProperty(exports, "main", { enumerable: true, get: function () { return __importDefault(cli_1).default; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;AAEH,mCAAiD;AAAxC,qHAAA,OAAO,OAAc;AAI9B,wDAAwD;AACxD,6BAAwC;AAA/B,4GAAA,OAAO,OAAQ","sourcesContent":["/**\n * Barrel file for pha-deploy\n *\n * Re-exports config utilities and the CLI entrypoint so consumers can:\n * - import { loadConfig, Config } from 'pha-deploy'\n * - import { main } from 'pha-deploy' (to run CLI programmatically)\n *\n * This file is intentionally small — it simply re-exports the pieces implemented\n * in `src/config.ts` and `src/cli.ts`.\n */\n\nexport { default as loadConfig } from \"./config\";\n\nexport type { Config } from \"./config\";\n\n// Export the CLI entrypoint (default export from ./cli)\nexport { default as main } from \"./cli\";\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pha-deploy",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "CLI token deployment tool for Phantasma blockchain",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"pha-deploy": "dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"config/config.example.toml"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=16"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/phantasma-io/pha-deploy.git"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.json",
|
|
26
|
+
"clean": "rm -rf dist && mkdir -p dist",
|
|
27
|
+
"dev": "ts-node-dev --respawn --transpile-only src/cli.ts",
|
|
28
|
+
"start": "node --enable-source-maps dist/cli.js",
|
|
29
|
+
"cli": "npm run build && node dist/cli.js",
|
|
30
|
+
"lint": "eslint \"src/**/*.{ts,js}\" --fix || true",
|
|
31
|
+
"test": "echo \"No tests configured\" && exit 0",
|
|
32
|
+
"prepare": "npm run build"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"phantasma",
|
|
36
|
+
"phantasma-sdk-ts",
|
|
37
|
+
"cli",
|
|
38
|
+
"typescript"
|
|
39
|
+
],
|
|
40
|
+
"author": "",
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@iarna/toml": "*",
|
|
44
|
+
"phantasma-sdk-ts": "^0.2.4",
|
|
45
|
+
"yargs": "*"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "*",
|
|
49
|
+
"@types/yargs": "*",
|
|
50
|
+
"@typescript-eslint/eslint-plugin": "*",
|
|
51
|
+
"@typescript-eslint/parser": "*",
|
|
52
|
+
"eslint": "*",
|
|
53
|
+
"ts-node": "*",
|
|
54
|
+
"ts-node-dev": "*"
|
|
55
|
+
}
|
|
56
|
+
}
|