@certen.io/cli 0.5.0 → 0.7.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/CHANGELOG.md +407 -0
- package/README.md +232 -160
- package/dist/chains.d.ts +67 -0
- package/dist/chains.js +242 -0
- package/dist/chains.js.map +1 -0
- package/dist/commands/admin.js +49 -4
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auth.js +145 -12
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/billing.js +648 -40
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/call.d.ts +2 -0
- package/dist/commands/call.js +168 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/chains.d.ts +2 -0
- package/dist/commands/chains.js +123 -0
- package/dist/commands/chains.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +171 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/errors-catalogue.d.ts +2 -0
- package/dist/commands/errors-catalogue.js +83 -0
- package/dist/commands/errors-catalogue.js.map +1 -0
- package/dist/commands/identity.js +269 -19
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +307 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/keys.js +2 -0
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/oauth-clients.d.ts +2 -0
- package/dist/commands/oauth-clients.js +131 -0
- package/dist/commands/oauth-clients.js.map +1 -0
- package/dist/commands/orgs.d.ts +2 -0
- package/dist/commands/orgs.js +117 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/pending.js +13 -1
- package/dist/commands/pending.js.map +1 -1
- package/dist/commands/portfolio.js +34 -1
- package/dist/commands/portfolio.js.map +1 -1
- package/dist/commands/proof.d.ts +2 -0
- package/dist/commands/proof.js +400 -0
- package/dist/commands/proof.js.map +1 -0
- package/dist/commands/signup.d.ts +14 -0
- package/dist/commands/signup.js +271 -0
- package/dist/commands/signup.js.map +1 -0
- package/dist/commands/transaction.js +139 -21
- package/dist/commands/transaction.js.map +1 -1
- package/dist/commands/webhooks.d.ts +2 -0
- package/dist/commands/webhooks.js +200 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/commands/whoami.d.ts +16 -0
- package/dist/commands/whoami.js +98 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.d.ts +56 -0
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +14 -1
- package/dist/errors.js +15 -1
- package/dist/errors.js.map +1 -1
- package/dist/funding-guard.d.ts +40 -0
- package/dist/funding-guard.js +120 -0
- package/dist/funding-guard.js.map +1 -0
- package/dist/help-root.d.ts +2 -0
- package/dist/help-root.js +94 -0
- package/dist/help-root.js.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +23 -0
- package/dist/output.js +46 -0
- package/dist/output.js.map +1 -1
- package/dist/passphrase.d.ts +18 -0
- package/dist/passphrase.js +35 -3
- package/dist/passphrase.js.map +1 -1
- package/dist/payment-uri.d.ts +76 -0
- package/dist/payment-uri.js +135 -0
- package/dist/payment-uri.js.map +1 -0
- package/dist/signer.js +6 -3
- package/dist/signer.js.map +1 -1
- package/dist/solidity-args.d.ts +31 -0
- package/dist/solidity-args.js +111 -0
- package/dist/solidity-args.js.map +1 -0
- package/dist/wait.d.ts +79 -0
- package/dist/wait.js +168 -0
- package/dist/wait.js.map +1 -0
- package/package.json +5 -4
package/dist/wait.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { CliError, UsageError, EXIT } from './errors.js';
|
|
2
|
+
import { human, isJsonMode } from './output.js';
|
|
3
|
+
/**
|
|
4
|
+
* Waiting for asynchronous work to finish.
|
|
5
|
+
*
|
|
6
|
+
* Two of this product's central operations return before they are usable — `POST /v1/identity`
|
|
7
|
+
* answers 202 while provisioning continues, and a transaction intent takes a 60–110 second proof
|
|
8
|
+
* cycle to reach a terminal state. Every document in the repo warns about both. The CLI
|
|
9
|
+
* nonetheless printed the interim response and exited, leaving each user to write the same poll
|
|
10
|
+
* loop, and leaving anyone who did not write one holding an identity that fails at the last step
|
|
11
|
+
* of every flow with an error that never mentions provisioning.
|
|
12
|
+
*
|
|
13
|
+
* The polling shape here is lifted from `certen fund`, which got it right first: speak only when
|
|
14
|
+
* something changes, treat a timeout as neither success nor failure, and never exit 0 on an
|
|
15
|
+
* outcome a script would misread as done.
|
|
16
|
+
*/
|
|
17
|
+
/** `certen fund`'s defaults are 60 min / 5 s; these are per-operation because the work differs. */
|
|
18
|
+
export const IDENTITY_WAIT = { timeoutMin: 5, intervalSec: 3 };
|
|
19
|
+
/**
|
|
20
|
+
* A proof cycle is 60–110 seconds of real validator work and `execute.wait()` budgets 360s. Seven
|
|
21
|
+
* minutes leaves room for a queue without being an unbounded hang. Do NOT shorten this to make a
|
|
22
|
+
* test faster — it is not a tunable delay.
|
|
23
|
+
*/
|
|
24
|
+
export const TX_WAIT = { timeoutMin: 7, intervalSec: 8 };
|
|
25
|
+
const sleep = (ms) => new Promise((r) => { setTimeout(r, ms); });
|
|
26
|
+
/**
|
|
27
|
+
* Should this invocation wait?
|
|
28
|
+
*
|
|
29
|
+
* Human mode waits by default, because "it is not ready yet" is an implementation detail nobody
|
|
30
|
+
* asked to manage. JSON mode does NOT, because scripts already written against the old
|
|
31
|
+
* fire-and-forget behaviour must not silently start blocking for minutes. Either default is
|
|
32
|
+
* overridden by saying so explicitly.
|
|
33
|
+
*
|
|
34
|
+
* Read from `process.argv` rather than commander's parsed value: declaring `--no-wait` makes
|
|
35
|
+
* commander default `opts.wait` to true, which erases the distinction between "defaulted" and
|
|
36
|
+
* "asked for" — and that distinction is the whole rule.
|
|
37
|
+
*/
|
|
38
|
+
export function resolveWait(argv = process.argv) {
|
|
39
|
+
if (argv.includes('--no-wait'))
|
|
40
|
+
return false;
|
|
41
|
+
if (argv.includes('--wait'))
|
|
42
|
+
return true;
|
|
43
|
+
return !isJsonMode();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate `--timeout` and `--poll-interval` BEFORE any network call.
|
|
47
|
+
*
|
|
48
|
+
* Checking after would mean a typo'd timeout had already opened an intent that the user then has
|
|
49
|
+
* to wait out or abandon — the same reasoning `certen fund` applies to its own options.
|
|
50
|
+
*/
|
|
51
|
+
export function parseWaitBudget(timeout, pollInterval, defaults) {
|
|
52
|
+
const timeoutMin = timeout === undefined ? defaults.timeoutMin : Number(timeout);
|
|
53
|
+
if (!Number.isFinite(timeoutMin) || timeoutMin <= 0) {
|
|
54
|
+
throw new UsageError('--timeout must be a positive number of minutes', 'INVALID_TIMEOUT');
|
|
55
|
+
}
|
|
56
|
+
const intervalSec = pollInterval === undefined ? defaults.intervalSec : Number(pollInterval);
|
|
57
|
+
if (!Number.isFinite(intervalSec) || intervalSec <= 0) {
|
|
58
|
+
throw new UsageError('--poll-interval must be a positive number of seconds', 'INVALID_POLL_INTERVAL');
|
|
59
|
+
}
|
|
60
|
+
return { timeoutMs: timeoutMin * 60_000, intervalMs: intervalSec * 1_000 };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Statuses `POST /v1/identity` provisioning settles into.
|
|
64
|
+
*
|
|
65
|
+
* The gateway writes `active` or `error` (identity.orchestrator.ts). Anything else is treated as
|
|
66
|
+
* still in flight, which is the safe direction: waiting longer for an unrecognised status costs
|
|
67
|
+
* time, whereas calling it terminal would report an identity ready that never became one.
|
|
68
|
+
*/
|
|
69
|
+
const IDENTITY_IN_FLIGHT = ['provisioning', 'pending', 'creating'];
|
|
70
|
+
function isTerminalIdentityStatus(status) {
|
|
71
|
+
return !IDENTITY_IN_FLIGHT.includes(status);
|
|
72
|
+
}
|
|
73
|
+
/** Say it once, when it changes — a five-minute wait should not be a wall of identical lines. */
|
|
74
|
+
function progress() {
|
|
75
|
+
let last = '';
|
|
76
|
+
return (message) => {
|
|
77
|
+
if (isJsonMode() || message === last)
|
|
78
|
+
return;
|
|
79
|
+
last = message;
|
|
80
|
+
human(` ${message}`);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Poll an identity until it is genuinely usable.
|
|
85
|
+
*
|
|
86
|
+
* "Usable" is `status` terminal AND `can_sign === true`, and those are two separate conditions
|
|
87
|
+
* that fail for different reasons:
|
|
88
|
+
*
|
|
89
|
+
* - `can_sign === false` — provisioning finished but the key on the on-chain key page is not
|
|
90
|
+
* yours. The identity exists, consumes quota, and can never sign.
|
|
91
|
+
* - `can_sign === null` — the key page could not be READ. That is unknown, not a soft yes; an
|
|
92
|
+
* Accumulate outage is exactly when this distinction matters most. Reporting it as ready would
|
|
93
|
+
* be the one wrong answer, so this keeps polling and, if the budget runs out, says plainly that
|
|
94
|
+
* it could not determine the answer.
|
|
95
|
+
*/
|
|
96
|
+
export async function waitForIdentity(client, id, budget) {
|
|
97
|
+
const say = progress();
|
|
98
|
+
const deadline = Date.now() + budget.timeoutMs;
|
|
99
|
+
let last;
|
|
100
|
+
say('Provisioning. This takes a minute or two on Accumulate.');
|
|
101
|
+
while (Date.now() < deadline) {
|
|
102
|
+
// The response IS the identity — the gateway no longer nests it under an `identity` key.
|
|
103
|
+
const identity = await client.identity.get(id);
|
|
104
|
+
last = identity;
|
|
105
|
+
say(`Status: ${identity.status}.`);
|
|
106
|
+
if (isTerminalIdentityStatus(identity.status)) {
|
|
107
|
+
if (identity.can_sign === true)
|
|
108
|
+
return identity;
|
|
109
|
+
if (identity.can_sign === false) {
|
|
110
|
+
throw new CliError(`Identity ${id} finished provisioning as "${identity.status}" but cannot sign — its key `
|
|
111
|
+
+ 'page is not held by your key. It will fail at the signing step of every flow.'
|
|
112
|
+
+ (identity.error_message ? ` Gateway said: ${identity.error_message}` : ''), 'IDENTITY_CANNOT_SIGN', EXIT.FAILED);
|
|
113
|
+
}
|
|
114
|
+
if (identity.status === 'error') {
|
|
115
|
+
throw new CliError(`Identity ${id} failed to provision.`
|
|
116
|
+
+ (identity.error_message ? ` ${identity.error_message}` : ' The gateway gave no reason.'), 'IDENTITY_PROVISIONING_FAILED', EXIT.FAILED);
|
|
117
|
+
}
|
|
118
|
+
// Terminal status, can_sign null: the key page could not be read. Keep asking — this is
|
|
119
|
+
// usually transient — and fall through to the unknown-answer error if it never resolves.
|
|
120
|
+
say(`Status: ${identity.status}, waiting on the key page to confirm it holds your key.`);
|
|
121
|
+
}
|
|
122
|
+
await sleep(budget.intervalMs);
|
|
123
|
+
}
|
|
124
|
+
const minutes = Math.round(budget.timeoutMs / 60_000);
|
|
125
|
+
if (last && isTerminalIdentityStatus(last.status) && last.can_sign == null) {
|
|
126
|
+
throw new CliError(`Identity ${id} is "${last.status}" but whether it can sign could not be determined — the `
|
|
127
|
+
+ 'on-chain key page was unreadable for the whole wait. The identity may be fine; Accumulate '
|
|
128
|
+
+ `may not be. Check again: certen identity get ${id}`, 'IDENTITY_CAN_SIGN_UNKNOWN', EXIT.FAILED);
|
|
129
|
+
}
|
|
130
|
+
// Neither success nor failure: provisioning may still complete. Say which it is, and do not
|
|
131
|
+
// exit 0 — a script must not read "still working" as "ready".
|
|
132
|
+
throw new CliError(`Identity ${id} is still "${last?.status ?? 'unknown'}" after ${minutes} min. It may yet `
|
|
133
|
+
+ `finish. Check with: certen identity get ${id}`, 'IDENTITY_WAIT_TIMEOUT', EXIT.FAILED);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Poll a transaction intent to a terminal state.
|
|
137
|
+
*
|
|
138
|
+
* Delegates to the SDK's `execute.wait()` rather than re-implementing the loop, so the CLI and an
|
|
139
|
+
* SDK caller agree on which statuses are terminal. The SDK signals both failure and timeout by
|
|
140
|
+
* throwing a plain `Error`; those are translated here into typed CLI errors so the exit code and
|
|
141
|
+
* the `--json` envelope carry a code a caller can branch on.
|
|
142
|
+
*/
|
|
143
|
+
export async function waitForTransaction(client, intentId, budget) {
|
|
144
|
+
const say = progress();
|
|
145
|
+
say('Waiting for the proof cycle. This is 60-110 seconds of real validator work.');
|
|
146
|
+
try {
|
|
147
|
+
const result = await client.execute.wait(intentId, {
|
|
148
|
+
timeoutMs: budget.timeoutMs,
|
|
149
|
+
intervalMs: budget.intervalMs,
|
|
150
|
+
onPoll: (tx) => {
|
|
151
|
+
const status = tx.status;
|
|
152
|
+
if (status)
|
|
153
|
+
say(`Status: ${status}.`);
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
160
|
+
// "still <status> after <n>ms" is the SDK's timeout wording. A timeout is not a failed intent
|
|
161
|
+
// — it may still complete — and conflating the two would tell a user their work was lost.
|
|
162
|
+
const timedOut = /still .* after \d+ms/.test(message);
|
|
163
|
+
throw new CliError(timedOut
|
|
164
|
+
? `${message.replace(/^certen: /, '')}. It may yet complete. Check with: certen tx status ${intentId}`
|
|
165
|
+
: message.replace(/^certen: /, ''), timedOut ? 'TX_WAIT_TIMEOUT' : 'TX_FAILED', EXIT.FAILED);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=wait.js.map
|
package/dist/wait.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../src/wait.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AAEH,mGAAmG;AACnG,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAEzD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,OAAiB,OAAO,CAAC,IAAI;IACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2B,EAC3B,YAAgC,EAChC,QAAqD;IAErD,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,gDAAgD,EAAE,iBAAiB,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,WAAW,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAAC,sDAAsD,EAAE,uBAAuB,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,UAAU,GAAG,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,KAAK,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEnE,SAAS,wBAAwB,CAAC,MAAc;IAC9C,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,iGAAiG;AACjG,SAAS,QAAQ;IACf,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,OAAe,EAAE,EAAE;QACzB,IAAI,UAAU,EAAE,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7C,IAAI,GAAG,OAAO,CAAC;QACf,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,EAAU,EACV,MAAkB;IAElB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/C,IAAI,IAA0B,CAAC;IAE/B,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAE/D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,yFAAyF;QACzF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,GAAG,QAAQ,CAAC;QAChB,GAAG,CAAC,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAEnC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO,QAAQ,CAAC;YAEhD,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAChC,MAAM,IAAI,QAAQ,CAChB,YAAY,EAAE,8BAA8B,QAAQ,CAAC,MAAM,8BAA8B;sBACvF,+EAA+E;sBAC/E,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC5E,sBAAsB,EACtB,IAAI,CAAC,MAAM,CACZ,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,QAAQ,CAChB,YAAY,EAAE,uBAAuB;sBACnC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,EAC1F,8BAA8B,EAC9B,IAAI,CAAC,MAAM,CACZ,CAAC;YACJ,CAAC;YACD,wFAAwF;YACxF,yFAAyF;YACzF,GAAG,CAAC,WAAW,QAAQ,CAAC,MAAM,yDAAyD,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAEtD,IAAI,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC3E,MAAM,IAAI,QAAQ,CAChB,YAAY,EAAE,QAAQ,IAAI,CAAC,MAAM,0DAA0D;cACzF,4FAA4F;cAC5F,gDAAgD,EAAE,EAAE,EACtD,2BAA2B,EAC3B,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,8DAA8D;IAC9D,MAAM,IAAI,QAAQ,CAChB,YAAY,EAAE,cAAc,IAAI,EAAE,MAAM,IAAI,SAAS,WAAW,OAAO,mBAAmB;UACxF,2CAA2C,EAAE,EAAE,EACjD,uBAAuB,EACvB,IAAI,CAAC,MAAM,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,QAAgB,EAChB,MAAkB;IAElB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjD,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,MAAM,GAAI,EAAqC,CAAC,MAAM,CAAC;gBAC7D,IAAI,MAAM;oBAAE,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC;YACxC,CAAC;SACF,CAAC,CAAC;QACH,OAAO,MAA4C,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,8FAA8F;QAC9F,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,QAAQ,CAChB,QAAQ;YACN,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,uDAAuD,QAAQ,EAAE;YACtG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EACpC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAC1C,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@certen.io/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Command line for the CERTEN Gateway API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -33,19 +33,20 @@
|
|
|
33
33
|
"LICENSE"
|
|
34
34
|
],
|
|
35
35
|
"scripts": {
|
|
36
|
-
"build": "
|
|
36
|
+
"build": "node ../../scripts/build-package.mjs",
|
|
37
37
|
"test": "vitest run",
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
39
|
"//prepack": "Build before packing so the published bin can never point at a missing dist/index.js.",
|
|
40
40
|
"prepack": "npm run build",
|
|
41
|
-
"prepublishOnly": "
|
|
41
|
+
"prepublishOnly": "node ../../scripts/prepublish-check.mjs",
|
|
42
|
+
"//build": "dist/ is gitignored and tsc does not prune outputs whose source was deleted, so a stale artifact survives forever locally and ships on a local publish. CI never sees it. Clean first so both produce the same tarball."
|
|
42
43
|
},
|
|
43
44
|
"publishConfig": {
|
|
44
45
|
"access": "public"
|
|
45
46
|
},
|
|
46
47
|
"//dependencies": "@certen.io/sdk MUST be a version range, not file:../sdk. A published package carrying a file: dependency installs and then fails to resolve on the consumer's machine, because that path does not exist there. Local development uses `npm link` or a workspace instead.",
|
|
47
48
|
"dependencies": {
|
|
48
|
-
"@certen.io/sdk": "^0.
|
|
49
|
+
"@certen.io/sdk": "^0.7.0",
|
|
49
50
|
"commander": "^12.0.0"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|