apipay 1.12.3 → 1.12.5
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 -2
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +47 -21
- package/dist/commands/login.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ curl -fsSL https://apipay.vn/install | bash
|
|
|
23
23
|
apipay setup
|
|
24
24
|
|
|
25
25
|
# Or step-by-step:
|
|
26
|
-
apipay login # Authenticate (
|
|
26
|
+
apipay login # Authenticate (browser approval or email/password)
|
|
27
27
|
apipay keys:create # Generate your API key
|
|
28
28
|
apipay banks:add # Connect a bank account
|
|
29
29
|
apipay webhooks:add # Register a webhook for notifications
|
|
@@ -35,7 +35,7 @@ apipay webhooks:add # Register a webhook for notifications
|
|
|
35
35
|
|
|
36
36
|
| Command | Description |
|
|
37
37
|
|---------|-------------|
|
|
38
|
-
| `apipay login` | Sign in
|
|
38
|
+
| `apipay login` | Sign in by approving from an already logged-in browser or with email/password |
|
|
39
39
|
| `apipay logout` | Sign out and clear stored credentials |
|
|
40
40
|
| `apipay whoami` | Show current authenticated user |
|
|
41
41
|
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ export default class Login extends BaseCommand {
|
|
|
10
10
|
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
11
|
};
|
|
12
12
|
run(): Promise<void>;
|
|
13
|
-
private
|
|
13
|
+
private loginWithBrowserApproval;
|
|
14
|
+
private pollCliLoginApproval;
|
|
14
15
|
private loginWithPassword;
|
|
15
16
|
private sleep;
|
|
16
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAiBnD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC7C,OAAgB,WAAW,SAA8B;IAEzD,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;MAcnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA+BZ,wBAAwB;YAsExB,oBAAoB;YA2BpB,iBAAiB;IA6C/B,OAAO,CAAC,KAAK;CAGb"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Flags } from "@oclif/core";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
+
import open from "open";
|
|
3
4
|
import { BaseCommand } from "../lib/base-command.js";
|
|
4
5
|
import { clearApiKey, clearAuth, getAuth, isLoggedIn, setAuth, } from "../lib/config.js";
|
|
5
6
|
import { info, kvLine, maskLongString, success, warn, } from "../lib/formatters.js";
|
|
@@ -22,7 +23,7 @@ export default class Login extends BaseCommand {
|
|
|
22
23
|
description: "Password for email+password login (CI/scripting)",
|
|
23
24
|
}),
|
|
24
25
|
"no-browser": Flags.boolean({
|
|
25
|
-
description: "
|
|
26
|
+
description: "Print the browser approval URL instead of opening it automatically",
|
|
26
27
|
default: false,
|
|
27
28
|
}),
|
|
28
29
|
};
|
|
@@ -46,35 +47,41 @@ export default class Login extends BaseCommand {
|
|
|
46
47
|
return this.loginWithPassword(email, flags.password);
|
|
47
48
|
}
|
|
48
49
|
// Magic link flow (default — best UX)
|
|
49
|
-
return this.
|
|
50
|
+
return this.loginWithBrowserApproval(email, flags["no-browser"]);
|
|
50
51
|
}
|
|
51
|
-
async
|
|
52
|
-
this.spinner.start("
|
|
53
|
-
let
|
|
52
|
+
async loginWithBrowserApproval(email, noBrowser) {
|
|
53
|
+
this.spinner.start("Starting browser approval...");
|
|
54
|
+
let request;
|
|
54
55
|
try {
|
|
55
|
-
|
|
56
|
+
request = await this.api.post("/auth/cli-login/request", {
|
|
56
57
|
email,
|
|
57
|
-
client: "cli",
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
catch (error) {
|
|
61
|
-
this.spinner.fail("Failed to
|
|
61
|
+
this.spinner.fail("Failed to start browser approval");
|
|
62
62
|
this.handleError(error);
|
|
63
63
|
}
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
const approvalToken = request?.approvalToken;
|
|
65
|
+
const approvalUrl = request?.approvalUrl;
|
|
66
|
+
const expiresAt = request?.expiresAt ? new Date(request.expiresAt) : null;
|
|
67
|
+
if (!approvalToken || !approvalUrl || !expiresAt) {
|
|
68
|
+
this.spinner.fail("Login failed");
|
|
69
|
+
this.error("Unexpected response from server", { exit: 2 });
|
|
70
|
+
}
|
|
71
|
+
this.spinner.succeed("Browser approval required");
|
|
72
|
+
info("Approve this terminal login from a browser already logged into the same ApiPay account.");
|
|
73
|
+
kvLine("Approval URL", approvalUrl);
|
|
74
|
+
if (!noBrowser) {
|
|
75
|
+
try {
|
|
76
|
+
await open(approvalUrl);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
warn("Could not open browser automatically. Open the approval URL manually.");
|
|
80
|
+
}
|
|
70
81
|
}
|
|
71
|
-
this.spinner.
|
|
82
|
+
this.spinner.start("Waiting for browser approval...");
|
|
72
83
|
try {
|
|
73
|
-
const
|
|
74
|
-
token,
|
|
75
|
-
client: "cli",
|
|
76
|
-
});
|
|
77
|
-
const result = authResult?.data ?? authResult;
|
|
84
|
+
const result = await this.pollCliLoginApproval(approvalToken, expiresAt);
|
|
78
85
|
const user = result?.user;
|
|
79
86
|
const tokens = result?.tokens;
|
|
80
87
|
if (!tokens?.accessToken) {
|
|
@@ -96,10 +103,29 @@ export default class Login extends BaseCommand {
|
|
|
96
103
|
}
|
|
97
104
|
}
|
|
98
105
|
catch (error) {
|
|
99
|
-
this.spinner.fail("
|
|
106
|
+
this.spinner.fail("Browser approval failed");
|
|
100
107
|
this.handleError(error);
|
|
101
108
|
}
|
|
102
109
|
}
|
|
110
|
+
async pollCliLoginApproval(token, expiresAt) {
|
|
111
|
+
while (Date.now() < expiresAt.getTime()) {
|
|
112
|
+
const result = await this.api.post("/auth/cli-login/exchange", {
|
|
113
|
+
token,
|
|
114
|
+
});
|
|
115
|
+
if (result?.status === "approved") {
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
if (result?.status === "expired") {
|
|
119
|
+
this.error("CLI login approval expired. Run `apipay login` again.", {
|
|
120
|
+
exit: 2,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
await this.sleep(2000);
|
|
124
|
+
}
|
|
125
|
+
this.error("CLI login approval expired. Run `apipay login` again.", {
|
|
126
|
+
exit: 2,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
103
129
|
async loginWithPassword(email, password) {
|
|
104
130
|
this.spinner.start("Logging in...");
|
|
105
131
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACN,WAAW,EACX,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,GACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,IAAI,EACJ,MAAM,EACN,cAAc,EACd,OAAO,EACP,IAAI,GACJ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC7C,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAC;IAEzD,MAAM,CAAU,QAAQ,GAAG;QAC1B,yBAAyB;QACzB,kDAAkD;QAClD,oEAAoE;KACpE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACvB,GAAG,WAAW,CAAC,SAAS;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yCAAyC;SACtD,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kDAAkD;SAC/D,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|