apipay 0.1.0 → 0.3.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/README.md +2 -7
- package/bin/dev.js +2 -0
- package/dist/commands/banks/add.d.ts +1 -1
- package/dist/commands/banks/add.d.ts.map +1 -1
- package/dist/commands/banks/add.js +43 -43
- package/dist/commands/banks/add.js.map +1 -1
- package/dist/commands/banks/list.d.ts +1 -1
- package/dist/commands/banks/list.d.ts.map +1 -1
- package/dist/commands/banks/list.js +19 -17
- package/dist/commands/banks/list.js.map +1 -1
- package/dist/commands/banks/remove-unconfirmed.d.ts +7 -0
- package/dist/commands/banks/remove-unconfirmed.d.ts.map +1 -0
- package/dist/commands/banks/remove-unconfirmed.js +41 -0
- package/dist/commands/banks/remove-unconfirmed.js.map +1 -0
- package/dist/commands/banks/remove.d.ts +1 -1
- package/dist/commands/banks/remove.d.ts.map +1 -1
- package/dist/commands/banks/remove.js +19 -19
- package/dist/commands/banks/remove.js.map +1 -1
- package/dist/commands/banks/toggle.d.ts +1 -1
- package/dist/commands/banks/toggle.d.ts.map +1 -1
- package/dist/commands/banks/toggle.js +13 -13
- package/dist/commands/banks/toggle.js.map +1 -1
- package/dist/commands/config/get.d.ts +1 -1
- package/dist/commands/config/get.d.ts.map +1 -1
- package/dist/commands/config/get.js +15 -12
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/reset.d.ts +1 -1
- package/dist/commands/config/reset.d.ts.map +1 -1
- package/dist/commands/config/reset.js +12 -12
- package/dist/commands/config/reset.js.map +1 -1
- package/dist/commands/config/set.d.ts +2 -2
- package/dist/commands/config/set.d.ts.map +1 -1
- package/dist/commands/config/set.js +14 -13
- package/dist/commands/config/set.js.map +1 -1
- package/dist/commands/keys/create.d.ts +1 -1
- package/dist/commands/keys/create.d.ts.map +1 -1
- package/dist/commands/keys/create.js +43 -32
- package/dist/commands/keys/create.js.map +1 -1
- package/dist/commands/keys/list.d.ts +1 -1
- package/dist/commands/keys/list.d.ts.map +1 -1
- package/dist/commands/keys/list.js +15 -15
- package/dist/commands/keys/list.js.map +1 -1
- package/dist/commands/keys/revoke.d.ts +1 -1
- package/dist/commands/keys/revoke.d.ts.map +1 -1
- package/dist/commands/keys/revoke.js +25 -22
- package/dist/commands/keys/revoke.js.map +1 -1
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +67 -56
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +12 -12
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/metrics/summary.d.ts +1 -1
- package/dist/commands/metrics/summary.d.ts.map +1 -1
- package/dist/commands/metrics/summary.js +17 -17
- package/dist/commands/metrics/summary.js.map +1 -1
- package/dist/commands/metrics/transactions.d.ts +1 -1
- package/dist/commands/metrics/transactions.d.ts.map +1 -1
- package/dist/commands/metrics/transactions.js +23 -20
- package/dist/commands/metrics/transactions.js.map +1 -1
- package/dist/commands/{init.d.ts → setup.d.ts} +4 -4
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +189 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +45 -45
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/webhooks/add.d.ts +1 -1
- package/dist/commands/webhooks/add.d.ts.map +1 -1
- package/dist/commands/webhooks/add.js +34 -32
- package/dist/commands/webhooks/add.js.map +1 -1
- package/dist/commands/webhooks/history.d.ts +1 -1
- package/dist/commands/webhooks/history.d.ts.map +1 -1
- package/dist/commands/webhooks/history.js +19 -17
- package/dist/commands/webhooks/history.js.map +1 -1
- package/dist/commands/webhooks/list.d.ts +1 -1
- package/dist/commands/webhooks/list.d.ts.map +1 -1
- package/dist/commands/webhooks/list.js +16 -16
- package/dist/commands/webhooks/list.js.map +1 -1
- package/dist/commands/webhooks/remove.d.ts +1 -1
- package/dist/commands/webhooks/remove.d.ts.map +1 -1
- package/dist/commands/webhooks/remove.js +14 -14
- package/dist/commands/webhooks/remove.js.map +1 -1
- package/dist/commands/webhooks/resend.d.ts +1 -1
- package/dist/commands/webhooks/resend.d.ts.map +1 -1
- package/dist/commands/webhooks/resend.js +20 -11
- package/dist/commands/webhooks/resend.js.map +1 -1
- package/dist/commands/webhooks/toggle.d.ts +1 -1
- package/dist/commands/webhooks/toggle.d.ts.map +1 -1
- package/dist/commands/webhooks/toggle.js +12 -12
- package/dist/commands/webhooks/toggle.js.map +1 -1
- package/dist/commands/webhooks/update.d.ts +1 -1
- package/dist/commands/webhooks/update.d.ts.map +1 -1
- package/dist/commands/webhooks/update.js +17 -17
- package/dist/commands/webhooks/update.js.map +1 -1
- package/dist/commands/whoami.d.ts +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +18 -18
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +1 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +39 -34
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/base-command.d.ts +3 -3
- package/dist/lib/base-command.d.ts.map +1 -1
- package/dist/lib/base-command.js +10 -10
- package/dist/lib/base-command.js.map +1 -1
- package/dist/lib/config.d.ts +4 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +44 -34
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +11 -11
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/formatters.d.ts +4 -0
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +49 -37
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/prompts.d.ts +1 -0
- package/dist/lib/prompts.d.ts.map +1 -1
- package/dist/lib/prompts.js +33 -18
- package/dist/lib/prompts.js.map +1 -1
- package/dist/lib/validators.d.ts +1 -0
- package/dist/lib/validators.d.ts.map +1 -1
- package/dist/lib/validators.js +51 -30
- package/dist/lib/validators.js.map +1 -1
- package/oclif.manifest.json +78 -43
- package/package.json +93 -82
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -109
- package/dist/commands/init.js.map +0 -1
package/dist/commands/login.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { Flags } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import open from
|
|
4
|
-
import { BaseCommand } from
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import open from "open";
|
|
4
|
+
import { BaseCommand } from "../lib/base-command.js";
|
|
5
|
+
import { getAuth, getDashboardUrl, isLoggedIn, setAuth } from "../lib/config.js";
|
|
6
|
+
import { MAGIC_LINK_POLL_INTERVAL_MS, MAGIC_LINK_TIMEOUT_MS, } from "../lib/constants.js";
|
|
7
|
+
import { info, kvLine, success, warn } from "../lib/formatters.js";
|
|
8
|
+
import { promptConfirm, promptEmail } from "../lib/prompts.js";
|
|
9
9
|
export default class Login extends BaseCommand {
|
|
10
|
-
static description =
|
|
10
|
+
static description = "Authenticate with ApiPay";
|
|
11
11
|
static examples = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
"<%= config.bin %> login",
|
|
13
|
+
"<%= config.bin %> login --email user@example.com",
|
|
14
|
+
"<%= config.bin %> login --email user@example.com --password mypass",
|
|
15
15
|
];
|
|
16
16
|
static flags = {
|
|
17
17
|
...BaseCommand.baseFlags,
|
|
18
18
|
email: Flags.string({
|
|
19
|
-
char:
|
|
20
|
-
description:
|
|
19
|
+
char: "e",
|
|
20
|
+
description: "Email address (skip interactive prompt)",
|
|
21
21
|
}),
|
|
22
22
|
password: Flags.string({
|
|
23
|
-
char:
|
|
24
|
-
description:
|
|
23
|
+
char: "p",
|
|
24
|
+
description: "Password for email+password login (CI/scripting)",
|
|
25
25
|
}),
|
|
26
|
-
|
|
27
|
-
description:
|
|
26
|
+
"no-browser": Flags.boolean({
|
|
27
|
+
description: "Don't open the browser for magic link",
|
|
28
28
|
default: false,
|
|
29
29
|
}),
|
|
30
30
|
};
|
|
@@ -34,63 +34,66 @@ export default class Login extends BaseCommand {
|
|
|
34
34
|
if (isLoggedIn()) {
|
|
35
35
|
const auth = getAuth();
|
|
36
36
|
warn(`Already logged in as ${chalk.bold(auth.email)}`);
|
|
37
|
-
const relogin = await promptConfirm(
|
|
37
|
+
const relogin = await promptConfirm("Login with a different account?");
|
|
38
38
|
if (!relogin)
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
const email = flags.email ?? (await promptEmail());
|
|
42
42
|
// Password flow (for CI/scripting)
|
|
43
43
|
if (flags.password) {
|
|
44
|
+
warn("Passing --password on the command line stores it in shell history and may be visible in process lists. Prefer the magic-link flow for interactive sessions.");
|
|
44
45
|
return this.loginWithPassword(email, flags.password);
|
|
45
46
|
}
|
|
46
47
|
// Magic link flow (default — best UX)
|
|
47
|
-
return this.loginWithMagicLink(email, flags[
|
|
48
|
+
return this.loginWithMagicLink(email, flags["no-browser"]);
|
|
48
49
|
}
|
|
49
50
|
async loginWithMagicLink(email, noBrowser) {
|
|
50
|
-
this.spinner.start(
|
|
51
|
+
this.spinner.start("Requesting magic link...");
|
|
51
52
|
let data;
|
|
52
53
|
try {
|
|
53
|
-
data = await this.api.post(
|
|
54
|
+
data = await this.api.post("/auth/magic-link/request", { email });
|
|
54
55
|
}
|
|
55
56
|
catch (error) {
|
|
56
|
-
this.spinner.fail(
|
|
57
|
+
this.spinner.fail("Failed to request magic link");
|
|
57
58
|
this.handleError(error);
|
|
58
59
|
}
|
|
59
60
|
const token = data?.data?.token ?? data?.token;
|
|
60
61
|
if (!token) {
|
|
61
|
-
this.spinner.fail(
|
|
62
|
-
this.error(
|
|
62
|
+
this.spinner.fail("Failed to get magic link token");
|
|
63
|
+
this.error("Unexpected response from server", { exit: 2 });
|
|
63
64
|
}
|
|
64
|
-
this.spinner.succeed(
|
|
65
|
+
this.spinner.succeed("Magic link requested!");
|
|
65
66
|
// Open browser
|
|
66
|
-
const verifyUrl = `${
|
|
67
|
-
console.log(
|
|
67
|
+
const verifyUrl = `${getDashboardUrl()}/verify?token=${token}`;
|
|
68
|
+
console.log("");
|
|
68
69
|
info(`Open this URL to authenticate:`);
|
|
69
70
|
console.log(` ${chalk.underline.cyan(verifyUrl)}`);
|
|
70
|
-
console.log(
|
|
71
|
+
console.log("");
|
|
71
72
|
if (!noBrowser) {
|
|
72
73
|
try {
|
|
73
74
|
await open(verifyUrl);
|
|
74
|
-
info(
|
|
75
|
+
info("Browser opened automatically.");
|
|
75
76
|
}
|
|
76
77
|
catch {
|
|
77
|
-
warn(
|
|
78
|
+
warn("Could not open browser. Please open the URL manually.");
|
|
78
79
|
}
|
|
79
80
|
}
|
|
80
81
|
// Poll for verification
|
|
81
|
-
this.spinner.start(
|
|
82
|
+
this.spinner.start("Waiting for authentication...");
|
|
82
83
|
const startTime = Date.now();
|
|
83
84
|
while (Date.now() - startTime < MAGIC_LINK_TIMEOUT_MS) {
|
|
84
85
|
await this.sleep(MAGIC_LINK_POLL_INTERVAL_MS);
|
|
85
86
|
try {
|
|
86
87
|
const status = await this.api.get(`/auth/magic-link/status?token=${token}`);
|
|
87
88
|
const st = status?.data?.status ?? status?.status;
|
|
88
|
-
if (st ===
|
|
89
|
+
if (st === "verified") {
|
|
89
90
|
// Token has been consumed — now exchange for auth tokens
|
|
90
|
-
// The verify endpoint was already called by the browser;
|
|
91
|
+
// The verify endpoint was already called by the browser;
|
|
91
92
|
// we need to call it ourselves too to get the tokens for CLI
|
|
92
93
|
try {
|
|
93
|
-
const authResult = await this.api.post(
|
|
94
|
+
const authResult = await this.api.post("/auth/magic-link/verify", {
|
|
95
|
+
token,
|
|
96
|
+
});
|
|
94
97
|
const result = authResult?.data ?? authResult;
|
|
95
98
|
const user = result?.user;
|
|
96
99
|
const tokens = result?.tokens;
|
|
@@ -100,10 +103,10 @@ export default class Login extends BaseCommand {
|
|
|
100
103
|
refreshToken: tokens.refreshToken,
|
|
101
104
|
expiresAt: Date.now() + (tokens.expiresIn ?? 900) * 1000,
|
|
102
105
|
email: user?.email ?? email,
|
|
103
|
-
userId: user?.id ??
|
|
106
|
+
userId: user?.id ?? "",
|
|
104
107
|
});
|
|
105
|
-
this.spinner.succeed(
|
|
106
|
-
console.log(
|
|
108
|
+
this.spinner.succeed("Authenticated!");
|
|
109
|
+
console.log("");
|
|
107
110
|
success(`Logged in as ${chalk.bold(user?.email ?? email)}`);
|
|
108
111
|
if (this.jsonOutput) {
|
|
109
112
|
this.outputJson({ email: user?.email, userId: user?.id });
|
|
@@ -115,52 +118,60 @@ export default class Login extends BaseCommand {
|
|
|
115
118
|
// Token already consumed by browser — that's expected.
|
|
116
119
|
// In this case, the CLI should have its own token.
|
|
117
120
|
// We'll try the password fallback or re-request.
|
|
118
|
-
this.spinner.fail(
|
|
119
|
-
info(`Please run ${chalk.cyan(
|
|
121
|
+
this.spinner.fail("Magic link was verified in browser but could not retrieve tokens for CLI.");
|
|
122
|
+
info(`Please run ${chalk.cyan("apipay login --email " + email + " --password <password>")} instead.`);
|
|
120
123
|
return;
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
|
-
if (st ===
|
|
124
|
-
this.spinner.fail(
|
|
125
|
-
this.error(
|
|
126
|
+
if (st === "expired") {
|
|
127
|
+
this.spinner.fail("Magic link expired");
|
|
128
|
+
this.error("The magic link has expired. Please try again.", {
|
|
129
|
+
exit: 1,
|
|
130
|
+
});
|
|
126
131
|
}
|
|
127
132
|
}
|
|
128
133
|
catch {
|
|
129
134
|
// Network error during poll — continue
|
|
130
135
|
}
|
|
131
136
|
}
|
|
132
|
-
this.spinner.fail(
|
|
133
|
-
this.error(
|
|
137
|
+
this.spinner.fail("Authentication timed out");
|
|
138
|
+
this.error("Timed out waiting for authentication. Please try again.", {
|
|
139
|
+
exit: 1,
|
|
140
|
+
});
|
|
134
141
|
}
|
|
135
142
|
async loginWithPassword(email, password) {
|
|
136
|
-
this.spinner.start(
|
|
143
|
+
this.spinner.start("Logging in...");
|
|
137
144
|
try {
|
|
138
|
-
const data = await this.api.post(
|
|
145
|
+
const data = await this.api.post("/auth/login", { email, password });
|
|
139
146
|
const result = data?.data ?? data;
|
|
140
147
|
const user = result?.user;
|
|
141
148
|
const tokens = result?.tokens;
|
|
142
149
|
if (!tokens?.accessToken) {
|
|
143
|
-
this.spinner.fail(
|
|
144
|
-
this.error(
|
|
150
|
+
this.spinner.fail("Login failed");
|
|
151
|
+
this.error("Unexpected response from server", { exit: 2 });
|
|
145
152
|
}
|
|
146
153
|
setAuth({
|
|
147
154
|
accessToken: tokens.accessToken,
|
|
148
155
|
refreshToken: tokens.refreshToken,
|
|
149
156
|
expiresAt: Date.now() + (tokens.expiresIn ?? 900) * 1000,
|
|
150
157
|
email: user?.email ?? email,
|
|
151
|
-
userId: user?.id ??
|
|
158
|
+
userId: user?.id ?? "",
|
|
152
159
|
});
|
|
153
|
-
this.spinner.succeed(
|
|
154
|
-
console.log(
|
|
160
|
+
this.spinner.succeed("Authenticated!");
|
|
161
|
+
console.log("");
|
|
155
162
|
success(`Logged in as ${chalk.bold(user?.email ?? email)}`);
|
|
156
|
-
kvLine(
|
|
157
|
-
kvLine(
|
|
163
|
+
kvLine("User ID", user?.id ?? "");
|
|
164
|
+
kvLine("Role", user?.role ?? "USER");
|
|
158
165
|
if (this.jsonOutput) {
|
|
159
|
-
this.outputJson({
|
|
166
|
+
this.outputJson({
|
|
167
|
+
email: user?.email,
|
|
168
|
+
userId: user?.id,
|
|
169
|
+
role: user?.role,
|
|
170
|
+
});
|
|
160
171
|
}
|
|
161
172
|
}
|
|
162
173
|
catch (error) {
|
|
163
|
-
this.spinner.fail(
|
|
174
|
+
this.spinner.fail("Login failed");
|
|
164
175
|
this.handleError(error);
|
|
165
176
|
}
|
|
166
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAK5D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,oBAAoB;IACvD,OAAgB,WAAW,SACyB;IAEpD,OAAgB,QAAQ,WAAgC;IAElD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B1B"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import chalk from
|
|
2
|
-
import { AuthenticatedCommand } from
|
|
3
|
-
import {
|
|
4
|
-
import { success } from
|
|
5
|
-
import { promptConfirm } from
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { AuthenticatedCommand } from "../lib/base-command.js";
|
|
3
|
+
import { clearApiKey, clearAuth, getAuth } from "../lib/config.js";
|
|
4
|
+
import { success } from "../lib/formatters.js";
|
|
5
|
+
import { promptConfirm } from "../lib/prompts.js";
|
|
6
6
|
export default class Logout extends AuthenticatedCommand {
|
|
7
|
-
static description =
|
|
8
|
-
static examples = [
|
|
7
|
+
static description = "Log out from ApiPay and clear stored credentials";
|
|
8
|
+
static examples = ["<%= config.bin %> logout"];
|
|
9
9
|
async run() {
|
|
10
10
|
const auth = getAuth();
|
|
11
11
|
const confirmed = await promptConfirm(`Log out from ${chalk.bold(auth.email)}? This will clear stored tokens and API keys.`);
|
|
12
12
|
if (!confirmed) {
|
|
13
|
-
this.log(
|
|
13
|
+
this.log("Cancelled.");
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
this.spinner.start(
|
|
16
|
+
this.spinner.start("Logging out...");
|
|
17
17
|
try {
|
|
18
|
-
await this.api.post(
|
|
18
|
+
await this.api.post("/auth/logout", undefined, "jwt");
|
|
19
19
|
}
|
|
20
20
|
catch {
|
|
21
21
|
// Server logout might fail if token expired — that's fine
|
|
22
22
|
}
|
|
23
23
|
clearAuth();
|
|
24
24
|
clearApiKey();
|
|
25
|
-
this.spinner.succeed(
|
|
26
|
-
success(
|
|
25
|
+
this.spinner.succeed("Logged out");
|
|
26
|
+
success("All credentials cleared.");
|
|
27
27
|
if (this.jsonOutput) {
|
|
28
28
|
this.outputJson({ success: true });
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,oBAAoB;IACvD,MAAM,CAAU,WAAW,GAC1B,kDAAkD,CAAC;IAEpD,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACR,MAAM,IAAI,GAAG,OAAO,EAAG,CAAC;QAExB,MAAM,SAAS,GAAG,MAAM,aAAa,CACpC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CACrF,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAErC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACR,0DAA0D;QAC3D,CAAC;QAED,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QAEd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAClC,CAAC;IACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/commands/metrics/summary.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/commands/metrics/summary.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa;IACxD,OAAgB,WAAW,SAA8C;IAEzE,OAAgB,QAAQ,WAAyC;IAE3D,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC1B"}
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import chalk from
|
|
2
|
-
import { ApiKeyCommand } from
|
|
3
|
-
import { createTable } from
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { ApiKeyCommand } from "../../lib/base-command.js";
|
|
3
|
+
import { createTable } from "../../lib/formatters.js";
|
|
4
4
|
export default class MetricsSummary extends ApiKeyCommand {
|
|
5
|
-
static description =
|
|
6
|
-
static examples = [
|
|
5
|
+
static description = "View transaction summary grouped by bank";
|
|
6
|
+
static examples = ["<%= config.bin %> metrics:summary"];
|
|
7
7
|
async run() {
|
|
8
|
-
this.spinner.start(
|
|
8
|
+
this.spinner.start("Fetching transaction summary...");
|
|
9
9
|
try {
|
|
10
|
-
const data = await this.api.get(
|
|
10
|
+
const data = await this.api.get("/client/metrics/summary", "apikey");
|
|
11
11
|
const summary = data?.data ?? data;
|
|
12
12
|
this.spinner.stop();
|
|
13
13
|
if (!summary || (Array.isArray(summary) && summary.length === 0)) {
|
|
14
|
-
this.log(
|
|
14
|
+
this.log("\n No transactions yet.\n");
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
17
|
const items = Array.isArray(summary) ? summary : [summary];
|
|
18
|
-
console.log(
|
|
19
|
-
const table = createTable([
|
|
20
|
-
s.bankName ?? s.bankShortName ??
|
|
21
|
-
chalk.green(s.totalIn?.toLocaleString() ??
|
|
22
|
-
chalk.red(s.totalOut?.toLocaleString() ??
|
|
23
|
-
s.countIn?.toString() ??
|
|
24
|
-
s.countOut?.toString() ??
|
|
18
|
+
console.log("");
|
|
19
|
+
const table = createTable(["Bank", "Total In", "Total Out", "Count In", "Count Out"], items.map((s) => [
|
|
20
|
+
s.bankName ?? s.bankShortName ?? "—",
|
|
21
|
+
chalk.green(s.totalIn?.toLocaleString() ?? "0"),
|
|
22
|
+
chalk.red(s.totalOut?.toLocaleString() ?? "0"),
|
|
23
|
+
s.countIn?.toString() ?? "0",
|
|
24
|
+
s.countOut?.toString() ?? "0",
|
|
25
25
|
]));
|
|
26
26
|
console.log(table);
|
|
27
|
-
console.log(
|
|
27
|
+
console.log("");
|
|
28
28
|
if (this.jsonOutput) {
|
|
29
29
|
this.outputJson(summary);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
|
-
this.spinner.fail(
|
|
33
|
+
this.spinner.fail("Failed to fetch summary");
|
|
34
34
|
this.handleError(error);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/commands/metrics/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/commands/metrics/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa;IACxD,MAAM,CAAU,WAAW,GAAG,0CAA0C,CAAC;IAEzE,MAAM,CAAU,QAAQ,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjE,KAAK,CAAC,GAAG;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAEtD,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpB,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBACvC,OAAO;YACR,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAE3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,WAAW,CACxB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,EAC1D,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC;gBACrB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG;gBACpC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,GAAG,CAAC;gBAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAG,CAAC;gBAC9C,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG;gBAC5B,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAG;aAC7B,CAAC,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../src/commands/metrics/transactions.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../src/commands/metrics/transactions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,aAAa;IAC7D,OAAgB,WAAW,SAA8B;IAEzD,OAAgB,KAAK;;;;;MAOnB;IAEF,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+C1B"}
|
|
@@ -1,40 +1,43 @@
|
|
|
1
|
-
import { Flags } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import { ApiKeyCommand } from
|
|
4
|
-
import { createTable, formatDate } from
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { ApiKeyCommand } from "../../lib/base-command.js";
|
|
4
|
+
import { createTable, formatDate } from "../../lib/formatters.js";
|
|
5
5
|
export default class MetricsTransactions extends ApiKeyCommand {
|
|
6
|
-
static description =
|
|
6
|
+
static description = "List recent transactions";
|
|
7
7
|
static flags = {
|
|
8
8
|
...ApiKeyCommand.baseFlags,
|
|
9
|
-
page: Flags.integer({ description:
|
|
10
|
-
limit: Flags.integer({
|
|
9
|
+
page: Flags.integer({ description: "Page number", default: 1 }),
|
|
10
|
+
limit: Flags.integer({
|
|
11
|
+
description: "Items per page (max 100)",
|
|
12
|
+
default: 20,
|
|
13
|
+
}),
|
|
11
14
|
};
|
|
12
15
|
static examples = [
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
"<%= config.bin %> metrics:transactions",
|
|
17
|
+
"<%= config.bin %> metrics:transactions --page 2 --limit 50",
|
|
15
18
|
];
|
|
16
19
|
async run() {
|
|
17
20
|
const { flags } = await this.parse(MetricsTransactions);
|
|
18
|
-
this.spinner.start(
|
|
21
|
+
this.spinner.start("Fetching transactions...");
|
|
19
22
|
try {
|
|
20
|
-
const data = await this.api.get(`/client/metrics/transactions?page=${flags.page}&limit=${flags.limit}`,
|
|
23
|
+
const data = await this.api.get(`/client/metrics/transactions?page=${flags.page}&limit=${flags.limit}`, "apikey");
|
|
21
24
|
const result = data?.data ?? data;
|
|
22
25
|
const transactions = result?.transactions ?? result;
|
|
23
26
|
this.spinner.stop();
|
|
24
27
|
if (!Array.isArray(transactions) || transactions.length === 0) {
|
|
25
|
-
this.log(
|
|
28
|
+
this.log("\n No transactions found.\n");
|
|
26
29
|
return;
|
|
27
30
|
}
|
|
28
|
-
console.log(
|
|
29
|
-
const table = createTable([
|
|
30
|
-
t.referenceCode ? t.referenceCode.slice(0, 12) +
|
|
31
|
-
t.type ===
|
|
31
|
+
console.log("");
|
|
32
|
+
const table = createTable(["Ref Code", "Amount", "Type", "Bank", "Date", "Status"], transactions.map((t) => [
|
|
33
|
+
t.referenceCode ? t.referenceCode.slice(0, 12) + "..." : "—",
|
|
34
|
+
t.type === "IN"
|
|
32
35
|
? chalk.green(`+${t.amount}`)
|
|
33
36
|
: chalk.red(`-${t.amount}`),
|
|
34
|
-
t.type ??
|
|
35
|
-
t.bankAccount?.bankShortName ??
|
|
37
|
+
t.type ?? "—",
|
|
38
|
+
t.bankAccount?.bankShortName ?? "—",
|
|
36
39
|
formatDate(t.transactionDate ?? t.createdAt),
|
|
37
|
-
t.status ??
|
|
40
|
+
t.status ?? "—",
|
|
38
41
|
]));
|
|
39
42
|
console.log(table);
|
|
40
43
|
console.log(`\n ${chalk.gray(`Page ${flags.page} • ${transactions.length} result(s)`)}\n`);
|
|
@@ -43,7 +46,7 @@ export default class MetricsTransactions extends ApiKeyCommand {
|
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
catch (error) {
|
|
46
|
-
this.spinner.fail(
|
|
49
|
+
this.spinner.fail("Failed to fetch transactions");
|
|
47
50
|
this.handleError(error);
|
|
48
51
|
}
|
|
49
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../src/commands/metrics/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../src/commands/metrics/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaseCommand } from
|
|
1
|
+
import { BaseCommand } from "../lib/base-command.js";
|
|
2
2
|
/**
|
|
3
|
-
* `apipay
|
|
3
|
+
* `apipay setup` — Guided setup wizard.
|
|
4
4
|
* Walks new users through the complete setup flow:
|
|
5
5
|
* 1. Login (magic link or password)
|
|
6
6
|
* 2. Generate API key
|
|
@@ -9,10 +9,10 @@ import { BaseCommand } from '../lib/base-command.js';
|
|
|
9
9
|
*
|
|
10
10
|
* Resumes from the last incomplete step automatically.
|
|
11
11
|
*/
|
|
12
|
-
export default class
|
|
12
|
+
export default class Setup extends BaseCommand {
|
|
13
13
|
static description: string;
|
|
14
14
|
static examples: string[];
|
|
15
15
|
run(): Promise<void>;
|
|
16
16
|
private printChecklist;
|
|
17
17
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AA4BnD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC7C,OAAgB,WAAW,SAC0D;IAErF,OAAgB,QAAQ,WAA+B;IAEjD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8L1B,OAAO,CAAC,cAAc;CAetB"}
|