apipay 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.
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAgBnD,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;YA+GlB,iBAAiB;IA4C/B,OAAO,CAAC,KAAK;CAGb"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAsBnD,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;YA+GlB,iBAAiB;IA6C/B,OAAO,CAAC,KAAK;CAGb"}
@@ -4,7 +4,7 @@ import open from "open";
4
4
  import { BaseCommand } from "../lib/base-command.js";
5
5
  import { clearApiKey, clearAuth, getAuth, getDashboardUrl, isLoggedIn, setAuth, } from "../lib/config.js";
6
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";
7
+ import { info, kvLine, maskLongString, success, warn, } from "../lib/formatters.js";
8
8
  import { promptConfirm, promptEmail } from "../lib/prompts.js";
9
9
  export default class Login extends BaseCommand {
10
10
  static description = "Authenticate with ApiPay";
@@ -145,7 +145,10 @@ export default class Login extends BaseCommand {
145
145
  async loginWithPassword(email, password) {
146
146
  this.spinner.start("Logging in...");
147
147
  try {
148
- const data = await this.api.post("/auth/login", { email, password });
148
+ const data = await this.api.post("/auth/login", {
149
+ emailOrUsername: email,
150
+ password,
151
+ });
149
152
  const result = data?.data ?? data;
150
153
  const user = result?.user;
151
154
  const tokens = result?.tokens;
@@ -163,13 +166,11 @@ export default class Login extends BaseCommand {
163
166
  this.spinner.succeed("Authenticated!");
164
167
  console.log("");
165
168
  success(`Logged in as ${chalk.bold(user?.email ?? email)}`);
166
- kvLine("User ID", user?.id ?? "");
167
- kvLine("Role", user?.role ?? "USER");
169
+ kvLine("User ID", maskLongString(user?.id) ?? "");
168
170
  if (this.jsonOutput) {
169
171
  this.outputJson({
170
172
  email: user?.email,
171
173
  userId: user?.id,
172
- role: user?.role,
173
174
  });
174
175
  }
175
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { ApiKeyCommand } from "../../lib/base-command.js";
3
- import { createTable } from "../../lib/formatters.js";
3
+ import { createTable, formatCurrency } from "../../lib/formatters.js";
4
4
  export default class MetricsSummary extends ApiKeyCommand {
5
5
  static description = "View transaction summary grouped by bank";
6
6
  static examples = ["<%= config.bin %> metrics:summary"];
@@ -18,8 +18,8 @@ export default class MetricsSummary extends ApiKeyCommand {
18
18
  console.log("");
19
19
  const table = createTable(["Bank", "Total In", "Total Out", "Count In", "Count Out"], items.map((s) => [
20
20
  s.bankName ?? s.bankShortName ?? "—",
21
- chalk.green(s.totalIn?.toLocaleString() ?? "0"),
22
- chalk.red(s.totalOut?.toLocaleString() ?? "0"),
21
+ chalk.green(formatCurrency(s.totalIn ?? 0)),
22
+ chalk.red(formatCurrency(s.totalOut ?? 0)),
23
23
  s.countIn?.toString() ?? "0",
24
24
  s.countOut?.toString() ?? "0",
25
25
  ]));
@@ -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,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
+ {"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,EAAE,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAEpE,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,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBAC3C,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;gBAC1C,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,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { ApiKeyCommand } from "../../lib/base-command.js";
3
- import { kvLine, success } from "../../lib/formatters.js";
3
+ import { formatCurrency, kvLine, success } from "../../lib/formatters.js";
4
4
  import { promptAmount, promptBankFromList, promptNote, } from "../../lib/prompts.js";
5
5
  export default class PayCreate extends ApiKeyCommand {
6
6
  static description = "Generate a new payment link (payment request)";
@@ -49,7 +49,7 @@ export default class PayCreate extends ApiKeyCommand {
49
49
  this.spinner.succeed("Payment link generated successfully!");
50
50
  console.log("");
51
51
  kvLine("ID", pr.publicId ?? "—");
52
- kvLine("Amount", pr.amount ? `${pr.amount} VND` : amount ? `${amount} VND` : "Flexible");
52
+ kvLine("Amount", pr.amount ? formatCurrency(pr.amount) : amount ? formatCurrency(amount) : "Flexible");
53
53
  kvLine("Content", pr.content ?? pr.title ?? note ?? "—");
54
54
  kvLine("Payment URL", chalk.cyan.underline(pr.payUrl ?? "—"));
55
55
  // if (pr.qrUrl) {
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/pay/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/pay/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/pay/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAOxD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IACjD,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAAkC;IAEpD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD1B"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/pay/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAQxD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IACjD,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAAkC;IAEpD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD1B"}
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { ApiKeyCommand } from "../../lib/base-command.js";
3
- import { createTable, maskLongString, statusBadge, } from "../../lib/formatters.js";
3
+ import { createTable, formatCurrency, maskLongString, statusBadge, } from "../../lib/formatters.js";
4
4
  export default class PayList extends ApiKeyCommand {
5
5
  static description = "List all payment links (payment requests)";
6
6
  static examples = ["<%= config.bin %> pay:list"];
@@ -22,7 +22,7 @@ export default class PayList extends ApiKeyCommand {
22
22
  console.log("");
23
23
  const table = createTable(["UUID", "Amount", "Content", "Status", "Bank", "URL"], prs.map((pr) => [
24
24
  maskLongString(pr.publicId) ?? "—",
25
- pr.amount ? `${pr.amount} ₫` : "-",
25
+ pr.amount ? formatCurrency(pr.amount) : "-",
26
26
  pr.content ?? pr.title ?? "—",
27
27
  statusBadge(pr.status ?? "PENDING"),
28
28
  pr.bankCode ?? "—",
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/pay/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACN,WAAW,EACX,cAAc,EACd,WAAW,GACX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IACjD,MAAM,CAAU,WAAW,GAAG,2CAA2C,CAAC;IAE1E,MAAM,CAAU,QAAQ,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1D,KAAK,CAAC,GAAG;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAEhD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;YAE1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,GAAG,GAAG,EAAE,CAAC;YAElC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,kEAAkE,CAClE,CACD,CAAC;gBACF,OAAO;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,KAAK,GAAG,WAAW,CACxB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EACtD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC;gBACpB,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG;gBAClC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG;gBAClC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG;gBAC7B,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,SAAS,CAAC;gBACnC,EAAE,CAAC,QAAQ,IAAI,GAAG;gBAClB,EAAE,CAAC,MAAM,IAAI,GAAG;aAChB,CAAC,CACF,CAAC;YAEF,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,GAAG,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/pay/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACN,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,GACX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IACjD,MAAM,CAAU,WAAW,GAAG,2CAA2C,CAAC;IAE1E,MAAM,CAAU,QAAQ,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1D,KAAK,CAAC,GAAG;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAEhD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;YAE1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,GAAG,GAAG,EAAE,CAAC;YAElC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,kEAAkE,CAClE,CACD,CAAC;gBACF,OAAO;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,KAAK,GAAG,WAAW,CACxB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EACtD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC;gBACpB,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG;gBAClC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;gBAC3C,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG;gBAC7B,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,SAAS,CAAC;gBACnC,EAAE,CAAC,QAAQ,IAAI,GAAG;gBAClB,EAAE,CAAC,MAAM,IAAI,GAAG;aAChB,CAAC,CACF,CAAC;YAEF,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,GAAG,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC"}
@@ -3,7 +3,7 @@ export default class PayRemove extends ApiKeyCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static args: {
6
- uuid: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ cuid: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
7
  };
8
8
  run(): Promise<void>;
9
9
  }
@@ -2,27 +2,27 @@ import { select } from "@inquirer/prompts";
2
2
  import { Args } from "@oclif/core";
3
3
  import chalk from "chalk";
4
4
  import { ApiKeyCommand } from "../../lib/base-command.js";
5
- import { maskLongString, success } from "../../lib/formatters.js";
5
+ import { formatCurrency, maskLongString, success } from "../../lib/formatters.js";
6
6
  export default class PayRemove extends ApiKeyCommand {
7
7
  static description = "Remove a payment link (payment request)";
8
8
  static examples = [
9
9
  "<%= config.bin %> pay:remove",
10
- "<%= config.bin %> pay:remove 123e4567-e89b-12d3...",
10
+ "<%= config.bin %> pay:remove ckabcdef1234567890",
11
11
  ];
12
12
  static args = {
13
- uuid: Args.string({
14
- description: "UUID of the payment link to remove",
13
+ cuid: Args.string({
14
+ description: "CUID of the payment link to remove",
15
15
  required: false,
16
16
  }),
17
17
  };
18
18
  async run() {
19
19
  const { args } = await this.parse(PayRemove);
20
- let uuid = args.uuid;
20
+ let cuid = args.cuid;
21
21
  console.log("");
22
22
  console.log(chalk.bold(" Remove Payment Link"));
23
23
  console.log(chalk.gray(" ───────────────────"));
24
24
  console.log("");
25
- if (!uuid) {
25
+ if (!cuid) {
26
26
  this.spinner.start("Fetching payment links...");
27
27
  try {
28
28
  const result = await this.api.get("/client/payment-requests", "apikey");
@@ -36,11 +36,11 @@ export default class PayRemove extends ApiKeyCommand {
36
36
  console.log(chalk.gray("No payment links found. Nothing to remove."));
37
37
  return;
38
38
  }
39
- uuid = await select({
39
+ cuid = await select({
40
40
  message: "Select a payment link to remove:",
41
41
  choices: prs.map((pr) => ({
42
42
  value: maskLongString(pr.publicId),
43
- name: `${maskLongString(pr.publicId)} — ${pr.amount ? pr.amount + " ₫" : "Flexible"} — ${pr.content ?? pr.title ?? "No Note"}`,
43
+ name: `${maskLongString(pr.publicId)} — ${pr.amount ? formatCurrency(pr.amount) : "Flexible"} — ${pr.content ?? pr.title ?? "No Note"}`,
44
44
  })),
45
45
  });
46
46
  }
@@ -49,18 +49,18 @@ export default class PayRemove extends ApiKeyCommand {
49
49
  this.handleError(error);
50
50
  }
51
51
  }
52
- if (!uuid)
52
+ if (!cuid)
53
53
  return;
54
- this.spinner.start(`Removing payment link ${uuid.substring(0, 8)}...`);
54
+ this.spinner.start(`Removing payment link ${cuid.substring(0, 8)}...`);
55
55
  try {
56
- await this.api.delete(`/client/payment-requests/${uuid}`, "apikey");
56
+ await this.api.delete(`/client/payment-requests/${cuid}`, "apikey");
57
57
  this.spinner.succeed("Payment link removed successfully!");
58
58
  if (this.jsonOutput) {
59
- this.outputJson({ success: true, removedId: uuid });
59
+ this.outputJson({ success: true, removedId: cuid });
60
60
  }
61
61
  else {
62
62
  console.log("");
63
- success(`Removed payment link ${chalk.cyan(uuid)}`);
63
+ success(`Removed payment link ${chalk.cyan(cuid)}`);
64
64
  console.log("");
65
65
  }
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/pay/remove.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/pay/remove.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,11 @@
1
1
  import { BaseCommand } from "../lib/base-command.js";
2
2
  /**
3
3
  * `apipay setup` — Guided setup wizard.
4
- * Walks new users through the complete setup flow:
5
- * 1. Login (magic link or password)
6
- * 2. Generate API key
7
- * 3. Add bank account
8
- * 4. Register webhook
9
- *
10
- * Resumes from the last incomplete step automatically.
4
+ * Walks users through the complete setup flow every time:
5
+ * 1. Login (skipped only if already authenticated)
6
+ * 2. Generate / confirm API key (always refetched from API)
7
+ * 3. Add bank account (always refetched from API)
8
+ * 4. Register webhook (always refetched from API)
11
9
  */
12
10
  export default class Setup extends BaseCommand {
13
11
  static description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AA6BnD;;;;;;;;;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;YA0KZ,iBAAiB;YAgBjB,kBAAkB;IAYhC,OAAO,CAAC,cAAc;CAetB"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAuBnD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC7C,OAAgB,WAAW,SAC0D;IAErF,OAAgB,QAAQ,WAA+B;IAEjD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAsKZ,iBAAiB;YAgBjB,kBAAkB;IAYhC,OAAO,CAAC,cAAc;CActB"}
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { BaseCommand } from "../lib/base-command.js";
3
- import { getApiKey, getCompletedSteps, getNextIncompleteStep, isLoggedIn, markStepComplete, } from "../lib/config.js";
3
+ import { getAuth, getApiKey, isLoggedIn, markStepComplete } from "../lib/config.js";
4
4
  import { SETUP_STEPS } from "../lib/constants.js";
5
5
  import { banner, createTable, info, kvLine, maskAccountNumber, maskLongString, statusBadge, stepLabel, success, } from "../lib/formatters.js";
6
6
  import { promptConfirm } from "../lib/prompts.js";
@@ -12,13 +12,11 @@ import PayCreate from "./pay/create.js";
12
12
  import WebhooksAdd from "./webhooks/add.js";
13
13
  /**
14
14
  * `apipay setup` — Guided setup wizard.
15
- * Walks new users through the complete setup flow:
16
- * 1. Login (magic link or password)
17
- * 2. Generate API key
18
- * 3. Add bank account
19
- * 4. Register webhook
20
- *
21
- * Resumes from the last incomplete step automatically.
15
+ * Walks users through the complete setup flow every time:
16
+ * 1. Login (skipped only if already authenticated)
17
+ * 2. Generate / confirm API key (always refetched from API)
18
+ * 3. Add bank account (always refetched from API)
19
+ * 4. Register webhook (always refetched from API)
22
20
  */
23
21
  export default class Setup extends BaseCommand {
24
22
  static description = "Set up ApiPay interactively — login, generate API key, add bank, register webhook";
@@ -26,133 +24,133 @@ export default class Setup extends BaseCommand {
26
24
  async run() {
27
25
  banner();
28
26
  console.log(chalk.gray("Initializing ApiPay SDK..."));
29
- const completed = getCompletedSteps();
30
- const nextStep = getNextIncompleteStep();
31
- if (!nextStep) {
32
- await this.printFinalSummary();
33
- return;
34
- }
35
- if (completed.length > 0) {
36
- info(`Resuming setup from step ${completed.length + 1}/${SETUP_STEPS.length}...`);
37
- await this.printChecklist(completed);
38
- console.log("");
39
- }
27
+ console.log("");
40
28
  const totalSteps = SETUP_STEPS.length;
41
- // Step 1: Login
42
- if (!completed.includes("login")) {
43
- console.log(stepLabel(1, totalSteps, "Authenticate with ApiPay"));
44
- console.log(chalk.gray(" Sign in to your account or create a new one at https://my.apipay.vn/signup \n"));
45
- await Login.run([]);
46
- console.log("");
47
- }
48
- // Step 2: API Key
49
- if (!completed.includes("api-key")) {
50
- if (!isLoggedIn()) {
51
- this.error("Login is required before proceeding. Run `apipay login` first.", { exit: 1 });
52
- }
53
- console.log(stepLabel(2, totalSteps, "Generate API Key"));
54
- console.log(chalk.gray(" Create an API key to authenticate your integration.\n"));
55
- await KeysCreate.run([]);
56
- console.log("");
57
- }
58
- // Step 3: Add Bank
59
- if (!completed.includes("bank")) {
60
- if (!getApiKey()) {
61
- this.error("API key is required. Run `apipay keys:create` first.", {
62
- exit: 1,
63
- });
64
- }
65
- console.log(stepLabel(3, totalSteps, "Add Bank Account"));
66
- console.log(chalk.gray(" Connect a bank account to start receiving payments.\n"));
67
- // Check for existing bank accounts first
68
- let existingBanks = [];
29
+ // Step 1: Login — skip only if token is valid (verified via /me)
30
+ let tokenValid = false;
31
+ if (isLoggedIn()) {
69
32
  try {
70
- this.spinner.start("Checking existing bank accounts...");
71
- const data = await this.api.get("/client/banks", "apikey");
72
- existingBanks = Array.isArray(data)
73
- ? data
74
- : (data?.message ?? data?.data ?? data ?? []);
75
- if (!Array.isArray(existingBanks))
76
- existingBanks = [];
33
+ this.spinner.start("Verifying session...");
34
+ const data = await this.api.post("/auth/me", undefined, "jwt");
35
+ const user = data?.data ?? data;
77
36
  this.spinner.stop();
37
+ const name = user?.name ?? user?.email ?? getAuth()?.email ?? "there";
38
+ info(`✓ Welcome back, ${chalk.cyan(name)}!`);
39
+ console.log("");
40
+ tokenValid = true;
78
41
  }
79
42
  catch {
80
43
  this.spinner.stop();
81
- // Non-fatal: proceed to add flow if fetch fails
82
- }
83
- if (existingBanks.length > 0) {
84
- info(`You already have ${existingBanks.length} bank account(s):`);
44
+ info("Session expired. Please log in again.");
85
45
  console.log("");
86
- for (const b of existingBanks) {
87
- kvLine(`${b.bankShortName ?? b.bankName ?? "—"} ${maskAccountNumber(b.accountNumber ?? "")}`, statusBadge(b.status ?? "UNKNOWN"));
88
- }
89
- console.log("");
90
- const addAnother = await promptConfirm("Would you like to add another bank account?", false);
91
- if (addAnother) {
92
- await BanksAdd.run([]);
93
- }
94
- else {
95
- markStepComplete("bank");
96
- success("Using existing bank account.");
97
- }
98
- }
99
- else {
100
- await BanksAdd.run([]);
101
46
  }
47
+ }
48
+ if (!tokenValid) {
49
+ console.log(stepLabel(1, totalSteps, "Authenticate with ApiPay"));
50
+ console.log(chalk.gray(" Sign in to your account or create a new one at https://my.apipay.vn/signup \n"));
51
+ await Login.run([]);
102
52
  console.log("");
103
53
  }
104
- // Step 4: Add Webhook
105
- if (!completed.includes("webhook")) {
106
- if (!getApiKey()) {
107
- this.error("API key is required. Run `apipay keys:create` first.", {
108
- exit: 1,
109
- });
54
+ // Step 2: API Key — always refetch and allow create/keep
55
+ if (!isLoggedIn()) {
56
+ this.error("Login is required before proceeding. Run `apipay login` first.", { exit: 1 });
57
+ }
58
+ console.log(stepLabel(2, totalSteps, "Generate API Key"));
59
+ console.log(chalk.gray(" Create an API key to authenticate your integration.\n"));
60
+ await KeysCreate.run([]);
61
+ console.log("");
62
+ // Step 3: Add Bank — always refetch from API
63
+ if (!getApiKey()) {
64
+ this.error("API key is required. Run `apipay keys:create` first.", {
65
+ exit: 1,
66
+ });
67
+ }
68
+ console.log(stepLabel(3, totalSteps, "Add Bank Account"));
69
+ console.log(chalk.gray(" Connect a bank account to start receiving payments.\n"));
70
+ let existingBanks = [];
71
+ try {
72
+ this.spinner.start("Checking existing bank accounts...");
73
+ const data = await this.api.get("/client/banks", "apikey");
74
+ existingBanks = Array.isArray(data)
75
+ ? data
76
+ : (data?.message ?? data?.data ?? data ?? []);
77
+ if (!Array.isArray(existingBanks))
78
+ existingBanks = [];
79
+ this.spinner.stop();
80
+ }
81
+ catch {
82
+ this.spinner.stop();
83
+ // Non-fatal: proceed to add flow if fetch fails
84
+ }
85
+ if (existingBanks.length > 0) {
86
+ info(`You already have ${existingBanks.length} bank account(s):`);
87
+ console.log("");
88
+ for (const b of existingBanks) {
89
+ kvLine(`${b.bankShortName ?? b.bankName ?? "—"} ${maskAccountNumber(b.accountNumber ?? "")}`, statusBadge(b.status ?? "UNKNOWN"));
110
90
  }
111
- console.log(stepLabel(4, totalSteps, "Register Webhook"));
112
- console.log(chalk.gray(" Set up a webhook to receive transaction notifications.\n"));
113
- // Check for existing webhooks first
114
- let existingWebhooks = [];
115
- try {
116
- this.spinner.start("Checking existing webhooks...");
117
- const data = await this.api.get("/client/webhooks", "apikey");
118
- existingWebhooks = Array.isArray(data)
119
- ? data
120
- : (data?.data ?? data ?? []);
121
- if (!Array.isArray(existingWebhooks))
122
- existingWebhooks = [];
123
- this.spinner.stop();
91
+ console.log("");
92
+ const addAnother = await promptConfirm("Would you like to add another bank account?", false);
93
+ if (addAnother) {
94
+ await BanksAdd.run([]);
124
95
  }
125
- catch {
126
- this.spinner.stop();
127
- // Non-fatal: proceed to add flow if fetch fails
96
+ else {
97
+ markStepComplete("bank");
98
+ success("Using existing bank account.");
128
99
  }
129
- if (existingWebhooks.length > 0) {
130
- info(`You already have ${existingWebhooks.length} webhook(s):`);
131
- console.log("");
132
- const table = createTable(["URL", "Type", "Status", "Bank"], existingWebhooks.map((w) => [
133
- w.webhookUrl ? maskLongString(w.webhookUrl) : "",
134
- w.type ?? "",
135
- statusBadge(w.isActive ? "ACTIVE" : "INACTIVE"),
136
- w.bankAccount?.bankShortName
137
- ? `${w.bankAccount.bankShortName} ${maskAccountNumber(w.bankAccount.accountNumber ?? "")}`
138
- : "—",
139
- ]));
140
- console.log(table);
141
- console.log("");
142
- const addAnother = await promptConfirm("Would you like to add another webhook?", false);
143
- if (addAnother) {
144
- await WebhooksAdd.run([]);
145
- }
146
- else {
147
- markStepComplete("webhook");
148
- success("Using existing webhook.");
149
- }
100
+ }
101
+ else {
102
+ await BanksAdd.run([]);
103
+ }
104
+ console.log("");
105
+ // Step 4: Add Webhook always refetch from API
106
+ if (!getApiKey()) {
107
+ this.error("API key is required. Run `apipay keys:create` first.", {
108
+ exit: 1,
109
+ });
110
+ }
111
+ console.log(stepLabel(4, totalSteps, "Register Webhook"));
112
+ console.log(chalk.gray(" Set up a webhook to receive transaction notifications.\n"));
113
+ let existingWebhooks = [];
114
+ try {
115
+ this.spinner.start("Checking existing webhooks...");
116
+ const data = await this.api.get("/client/webhooks", "apikey");
117
+ existingWebhooks = Array.isArray(data)
118
+ ? data
119
+ : (data?.data ?? data ?? []);
120
+ if (!Array.isArray(existingWebhooks))
121
+ existingWebhooks = [];
122
+ this.spinner.stop();
123
+ }
124
+ catch {
125
+ this.spinner.stop();
126
+ // Non-fatal: proceed to add flow if fetch fails
127
+ }
128
+ if (existingWebhooks.length > 0) {
129
+ info(`You already have ${existingWebhooks.length} webhook(s):`);
130
+ console.log("");
131
+ const table = createTable(["URL", "Type", "Status", "Bank"], existingWebhooks.map((w) => [
132
+ w.webhookUrl ? maskLongString(w.webhookUrl) : "—",
133
+ w.type ?? "—",
134
+ statusBadge(w.isActive ? "ACTIVE" : "INACTIVE"),
135
+ w.bankAccount?.bankShortName
136
+ ? `${w.bankAccount.bankShortName} ${maskAccountNumber(w.bankAccount.accountNumber ?? "")}`
137
+ : "—",
138
+ ]));
139
+ console.log(table);
140
+ console.log("");
141
+ const addAnother = await promptConfirm("Would you like to add another webhook?", false);
142
+ if (addAnother) {
143
+ await WebhooksAdd.run([]);
150
144
  }
151
145
  else {
152
- await WebhooksAdd.run([]);
146
+ markStepComplete("webhook");
147
+ success("Using existing webhook.");
153
148
  }
154
- console.log("");
155
149
  }
150
+ else {
151
+ await WebhooksAdd.run([]);
152
+ }
153
+ console.log("");
156
154
  await this.printFinalSummary();
157
155
  }
158
156
  async printFinalSummary() {
@@ -161,7 +159,7 @@ export default class Setup extends BaseCommand {
161
159
  console.log(chalk.green.bold(" ║ ✓ Setup Complete! ║"));
162
160
  console.log(chalk.green.bold(" ╚══════════════════════════════════════╝"));
163
161
  console.log("");
164
- this.printChecklist(getCompletedSteps());
162
+ this.printChecklist();
165
163
  console.log("");
166
164
  info(`Dashboard: ${chalk.underline.cyan("https://my.apipay.vn")}`);
167
165
  info(`Docs: ${chalk.underline.cyan("https://docs.apipay.vn")}`);
@@ -176,7 +174,7 @@ export default class Setup extends BaseCommand {
176
174
  await PayCreate.run([]);
177
175
  }
178
176
  }
179
- printChecklist(completed) {
177
+ printChecklist() {
180
178
  const labels = {
181
179
  login: "Login",
182
180
  "api-key": "API Key",
@@ -184,9 +182,8 @@ export default class Setup extends BaseCommand {
184
182
  webhook: "Webhook",
185
183
  };
186
184
  for (const step of SETUP_STEPS) {
187
- const done = completed.includes(step);
188
- const icon = done ? chalk.green("✓") : chalk.gray("○");
189
- const label = done ? chalk.white(labels[step]) : chalk.gray(labels[step]);
185
+ const icon = chalk.green("✓");
186
+ const label = chalk.white(labels[step]);
190
187
  console.log(` ${icon} ${label}`);
191
188
  }
192
189
  }