apipay 1.12.2 → 1.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -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":"AAEA,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,kBAAkB;YA8DlB,iBAAiB;IA6C/B,OAAO,CAAC,KAAK;CAGb"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { Flags } from "@oclif/core";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import open from "open";
|
|
4
3
|
import { BaseCommand } from "../lib/base-command.js";
|
|
5
|
-
import { clearApiKey, clearAuth, getAuth,
|
|
6
|
-
import { MAGIC_LINK_POLL_INTERVAL_MS, MAGIC_LINK_TIMEOUT_MS, } from "../lib/constants.js";
|
|
4
|
+
import { clearApiKey, clearAuth, getAuth, isLoggedIn, setAuth, } from "../lib/config.js";
|
|
7
5
|
import { info, kvLine, maskLongString, success, warn, } from "../lib/formatters.js";
|
|
8
6
|
import { promptConfirm, promptEmail } from "../lib/prompts.js";
|
|
9
7
|
export default class Login extends BaseCommand {
|
|
@@ -24,7 +22,7 @@ export default class Login extends BaseCommand {
|
|
|
24
22
|
description: "Password for email+password login (CI/scripting)",
|
|
25
23
|
}),
|
|
26
24
|
"no-browser": Flags.boolean({
|
|
27
|
-
description: "
|
|
25
|
+
description: "Accepted for compatibility; browser is not opened during CLI magic-link login",
|
|
28
26
|
default: false,
|
|
29
27
|
}),
|
|
30
28
|
};
|
|
@@ -48,13 +46,16 @@ export default class Login extends BaseCommand {
|
|
|
48
46
|
return this.loginWithPassword(email, flags.password);
|
|
49
47
|
}
|
|
50
48
|
// Magic link flow (default — best UX)
|
|
51
|
-
return this.loginWithMagicLink(email
|
|
49
|
+
return this.loginWithMagicLink(email);
|
|
52
50
|
}
|
|
53
|
-
async loginWithMagicLink(email
|
|
51
|
+
async loginWithMagicLink(email) {
|
|
54
52
|
this.spinner.start("Requesting magic link...");
|
|
55
53
|
let data;
|
|
56
54
|
try {
|
|
57
|
-
data = await this.api.post("/auth/magic-link/request", {
|
|
55
|
+
data = await this.api.post("/auth/magic-link/request", {
|
|
56
|
+
email,
|
|
57
|
+
client: "cli",
|
|
58
|
+
});
|
|
58
59
|
}
|
|
59
60
|
catch (error) {
|
|
60
61
|
this.spinner.fail("Failed to request magic link");
|
|
@@ -67,82 +68,37 @@ export default class Login extends BaseCommand {
|
|
|
67
68
|
info(`Use ${chalk.cyan("apipay login --email " + email + " --password <password>")} or sign in from the dashboard.`);
|
|
68
69
|
return;
|
|
69
70
|
}
|
|
70
|
-
this.spinner.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
71
|
+
this.spinner.text = "Completing magic-link login...";
|
|
72
|
+
try {
|
|
73
|
+
const authResult = await this.api.post("/auth/magic-link/verify", {
|
|
74
|
+
token,
|
|
75
|
+
client: "cli",
|
|
76
|
+
});
|
|
77
|
+
const result = authResult?.data ?? authResult;
|
|
78
|
+
const user = result?.user;
|
|
79
|
+
const tokens = result?.tokens;
|
|
80
|
+
if (!tokens?.accessToken) {
|
|
81
|
+
this.spinner.fail("Login failed");
|
|
82
|
+
this.error("Unexpected response from server", { exit: 2 });
|
|
81
83
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
setAuth({
|
|
85
|
+
accessToken: tokens.accessToken,
|
|
86
|
+
refreshToken: tokens.refreshToken,
|
|
87
|
+
expiresAt: Date.now() + (tokens.expiresIn ?? 900) * 1000,
|
|
88
|
+
email: user?.email ?? email,
|
|
89
|
+
userId: user?.id ?? "",
|
|
90
|
+
});
|
|
91
|
+
this.spinner.succeed("Authenticated!");
|
|
92
|
+
console.log("");
|
|
93
|
+
success(`Logged in as ${chalk.bold(user?.email ?? email)}`);
|
|
94
|
+
if (this.jsonOutput) {
|
|
95
|
+
this.outputJson({ email: user?.email, userId: user?.id });
|
|
84
96
|
}
|
|
85
97
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
while (Date.now() - startTime < MAGIC_LINK_TIMEOUT_MS) {
|
|
90
|
-
await this.sleep(MAGIC_LINK_POLL_INTERVAL_MS);
|
|
91
|
-
try {
|
|
92
|
-
const status = await this.api.get(`/auth/magic-link/status?token=${token}`);
|
|
93
|
-
const st = status?.data?.status ?? status?.status;
|
|
94
|
-
if (st === "verified") {
|
|
95
|
-
// Token has been consumed — now exchange for auth tokens
|
|
96
|
-
// The verify endpoint was already called by the browser;
|
|
97
|
-
// we need to call it ourselves too to get the tokens for CLI
|
|
98
|
-
try {
|
|
99
|
-
const authResult = await this.api.post("/auth/magic-link/verify", {
|
|
100
|
-
token,
|
|
101
|
-
});
|
|
102
|
-
const result = authResult?.data ?? authResult;
|
|
103
|
-
const user = result?.user;
|
|
104
|
-
const tokens = result?.tokens;
|
|
105
|
-
if (tokens?.accessToken) {
|
|
106
|
-
setAuth({
|
|
107
|
-
accessToken: tokens.accessToken,
|
|
108
|
-
refreshToken: tokens.refreshToken,
|
|
109
|
-
expiresAt: Date.now() + (tokens.expiresIn ?? 900) * 1000,
|
|
110
|
-
email: user?.email ?? email,
|
|
111
|
-
userId: user?.id ?? "",
|
|
112
|
-
});
|
|
113
|
-
this.spinner.succeed("Authenticated!");
|
|
114
|
-
console.log("");
|
|
115
|
-
success(`Logged in as ${chalk.bold(user?.email ?? email)}`);
|
|
116
|
-
if (this.jsonOutput) {
|
|
117
|
-
this.outputJson({ email: user?.email, userId: user?.id });
|
|
118
|
-
}
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// Token already consumed by browser — that's expected.
|
|
124
|
-
// In this case, the CLI should have its own token.
|
|
125
|
-
// We'll try the password fallback or re-request.
|
|
126
|
-
this.spinner.fail("Magic link was verified in browser but could not retrieve tokens for CLI.");
|
|
127
|
-
info(`Please run ${chalk.cyan("apipay login --email " + email + " --password <password>")} instead.`);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (st === "expired") {
|
|
132
|
-
this.spinner.fail("Magic link expired");
|
|
133
|
-
this.error("The magic link has expired. Please try again.", {
|
|
134
|
-
exit: 1,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
// Network error during poll — continue
|
|
140
|
-
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.spinner.fail("Magic-link login failed");
|
|
100
|
+
this.handleError(error);
|
|
141
101
|
}
|
|
142
|
-
this.spinner.fail("Authentication timed out");
|
|
143
|
-
this.error("Timed out waiting for authentication. Please try again.", {
|
|
144
|
-
exit: 1,
|
|
145
|
-
});
|
|
146
102
|
}
|
|
147
103
|
async loginWithPassword(email, password) {
|
|
148
104
|
this.spinner.start("Logging in...");
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-banks.d.ts","sourceRoot":"","sources":["../../src/lib/client-banks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"client-banks.d.ts","sourceRoot":"","sources":["../../src/lib/client-banks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAW1C,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAEtD;AAgBD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAyBvD"}
|
package/dist/lib/client-banks.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { ApiClient } from "./api-client.js";
|
|
2
2
|
import { getApiBaseUrl } from "./config.js";
|
|
3
|
+
function getClientBanksBaseUrl() {
|
|
4
|
+
const baseUrl = getApiBaseUrl().replace(/\/+$/, "");
|
|
5
|
+
if (/\/v[12]$/.test(baseUrl)) {
|
|
6
|
+
return baseUrl.replace(/\/v[12]$/, "/v2");
|
|
7
|
+
}
|
|
8
|
+
return `${baseUrl}/v2`;
|
|
9
|
+
}
|
|
3
10
|
export function getClientBanksApi() {
|
|
4
|
-
return new ApiClient(
|
|
11
|
+
return new ApiClient(getClientBanksBaseUrl());
|
|
5
12
|
}
|
|
6
13
|
export function unwrapApiMessage(data) {
|
|
7
14
|
return (data?.message ?? data?.data ?? data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-banks.js","sourceRoot":"","sources":["../../src/lib/client-banks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,MAAM,
|
|
1
|
+
{"version":3,"file":"client-banks.js","sourceRoot":"","sources":["../../src/lib/client-banks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,SAAS,qBAAqB;IAC7B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAU,IAAS;IAClD,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAM,CAAC;AACnD,CAAC;AAcD,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACrC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CACzB,sBAAsB,IAAI,UAAU,eAAe,EAAE,EACrD,QAAQ,CACR,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAQ,IAAI,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,UAAU;YACT,IAAI,EAAE,UAAU,EAAE,UAAU;gBAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,eAAe;oBAC/D,CAAC,CAAC,IAAI,GAAG,CAAC;oBACV,CAAC,CAAC,IAAI,CAAC,CAAC;QACV,IAAI,IAAI,CAAC,CAAC;IACX,CAAC,QAAQ,IAAI,IAAI,UAAU,EAAE;IAE7B,OAAO,KAAK,CAAC;AACd,CAAC"}
|