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/lib/api-client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import chalk from
|
|
2
|
-
import { getApiBaseUrl, getApiKey, getAuth, setAuth } from
|
|
3
|
-
import { MAX_RETRIES, RETRY_DELAY_MS } from
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { getApiBaseUrl, getApiKey, getAuth, setAuth } from "./config.js";
|
|
3
|
+
import { MAX_RETRIES, RETRY_DELAY_MS } from "./constants.js";
|
|
4
4
|
/**
|
|
5
5
|
* API error structure
|
|
6
6
|
*/
|
|
@@ -8,15 +8,15 @@ export class ApiError extends Error {
|
|
|
8
8
|
statusCode;
|
|
9
9
|
body;
|
|
10
10
|
constructor(statusCode, body) {
|
|
11
|
-
const msg = typeof body?.message ===
|
|
11
|
+
const msg = typeof body?.message === "string"
|
|
12
12
|
? body.message
|
|
13
|
-
: typeof body?.data?.message ===
|
|
13
|
+
: typeof body?.data?.message === "string"
|
|
14
14
|
? body.data.message
|
|
15
15
|
: `API request failed with status ${statusCode}`;
|
|
16
16
|
super(msg);
|
|
17
17
|
this.statusCode = statusCode;
|
|
18
18
|
this.body = body;
|
|
19
|
-
this.name =
|
|
19
|
+
this.name = "ApiError";
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -28,21 +28,23 @@ export class ApiClient {
|
|
|
28
28
|
constructor(baseUrl) {
|
|
29
29
|
this.baseUrl = baseUrl ?? getApiBaseUrl();
|
|
30
30
|
}
|
|
31
|
-
getHeaders(authMode) {
|
|
31
|
+
getHeaders(authMode, hasBody = false) {
|
|
32
32
|
const headers = {
|
|
33
|
-
|
|
34
|
-
Accept: 'application/json',
|
|
33
|
+
Accept: "application/json",
|
|
35
34
|
};
|
|
36
|
-
if (
|
|
35
|
+
if (hasBody) {
|
|
36
|
+
headers["Content-Type"] = "application/json";
|
|
37
|
+
}
|
|
38
|
+
if (authMode === "jwt") {
|
|
37
39
|
const auth = getAuth();
|
|
38
40
|
if (auth?.accessToken) {
|
|
39
|
-
headers[
|
|
41
|
+
headers["Authorization"] = `Bearer ${auth.accessToken}`;
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
|
-
else if (authMode ===
|
|
44
|
+
else if (authMode === "apikey") {
|
|
43
45
|
const key = getApiKey();
|
|
44
46
|
if (key?.accessKey && key?.secretKey) {
|
|
45
|
-
headers[
|
|
47
|
+
headers["Authorization"] = `Bearer ${key.accessKey}:${key.secretKey}`;
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
return headers;
|
|
@@ -56,9 +58,9 @@ export class ApiClient {
|
|
|
56
58
|
return false;
|
|
57
59
|
try {
|
|
58
60
|
const res = await fetch(`${this.baseUrl}/auth/refresh`, {
|
|
59
|
-
method:
|
|
61
|
+
method: "POST",
|
|
60
62
|
headers: {
|
|
61
|
-
|
|
63
|
+
"Content-Type": "application/json",
|
|
62
64
|
Authorization: `Bearer ${auth.accessToken}`,
|
|
63
65
|
},
|
|
64
66
|
body: JSON.stringify({ refreshToken: auth.refreshToken }),
|
|
@@ -86,18 +88,18 @@ export class ApiClient {
|
|
|
86
88
|
* Core request method with retry and auto-refresh.
|
|
87
89
|
*/
|
|
88
90
|
async request(method, path, options = {}) {
|
|
89
|
-
const { body, authMode =
|
|
91
|
+
const { body, authMode = "none", retries = MAX_RETRIES } = options;
|
|
90
92
|
const url = `${this.baseUrl}${path}`;
|
|
91
93
|
let lastError = null;
|
|
92
94
|
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
93
95
|
try {
|
|
94
96
|
const res = await fetch(url, {
|
|
95
97
|
method,
|
|
96
|
-
headers: this.getHeaders(authMode),
|
|
98
|
+
headers: this.getHeaders(authMode, !!body),
|
|
97
99
|
body: body ? JSON.stringify(body) : undefined,
|
|
98
100
|
});
|
|
99
101
|
// Auto-refresh on 401 for JWT
|
|
100
|
-
if (res.status === 401 && authMode ===
|
|
102
|
+
if (res.status === 401 && authMode === "jwt" && attempt === 0) {
|
|
101
103
|
const refreshed = await this.refreshToken();
|
|
102
104
|
if (refreshed)
|
|
103
105
|
continue;
|
|
@@ -113,7 +115,9 @@ export class ApiClient {
|
|
|
113
115
|
lastError = error;
|
|
114
116
|
if (error instanceof ApiError) {
|
|
115
117
|
// Don't retry client errors (4xx) except 429
|
|
116
|
-
if (error.statusCode >= 400 &&
|
|
118
|
+
if (error.statusCode >= 400 &&
|
|
119
|
+
error.statusCode < 500 &&
|
|
120
|
+
error.statusCode !== 429) {
|
|
117
121
|
throw error;
|
|
118
122
|
}
|
|
119
123
|
}
|
|
@@ -123,20 +127,20 @@ export class ApiClient {
|
|
|
123
127
|
}
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
|
-
throw lastError ?? new Error(
|
|
130
|
+
throw lastError ?? new Error("Request failed");
|
|
127
131
|
}
|
|
128
132
|
/* ===== Convenience methods ===== */
|
|
129
|
-
get(path, authMode =
|
|
130
|
-
return this.request(
|
|
133
|
+
get(path, authMode = "none") {
|
|
134
|
+
return this.request("GET", path, { authMode });
|
|
131
135
|
}
|
|
132
|
-
post(path, body, authMode =
|
|
133
|
-
return this.request(
|
|
136
|
+
post(path, body, authMode = "none") {
|
|
137
|
+
return this.request("POST", path, { body, authMode });
|
|
134
138
|
}
|
|
135
|
-
patch(path, body, authMode =
|
|
136
|
-
return this.request(
|
|
139
|
+
patch(path, body, authMode = "none") {
|
|
140
|
+
return this.request("PATCH", path, { body, authMode });
|
|
137
141
|
}
|
|
138
|
-
delete(path, authMode =
|
|
139
|
-
return this.request(
|
|
142
|
+
delete(path, authMode = "none") {
|
|
143
|
+
return this.request("DELETE", path, { authMode });
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
let _client = null;
|
|
@@ -156,21 +160,22 @@ export function formatApiError(error) {
|
|
|
156
160
|
if (error instanceof ApiError) {
|
|
157
161
|
switch (error.statusCode) {
|
|
158
162
|
case 401:
|
|
159
|
-
return `${chalk.red(
|
|
163
|
+
return `${chalk.red("Authentication failed.")} Run ${chalk.cyan("apipay login")} to sign in.`;
|
|
160
164
|
case 403:
|
|
161
|
-
return `${chalk.red(
|
|
165
|
+
return `${chalk.red("Permission denied.")} You don't have access to this resource.`;
|
|
162
166
|
case 404:
|
|
163
|
-
return chalk.red(
|
|
167
|
+
return chalk.red("Resource not found.");
|
|
164
168
|
case 409:
|
|
165
169
|
return chalk.red(error.message);
|
|
166
170
|
case 429:
|
|
167
|
-
return chalk.yellow(
|
|
171
|
+
return chalk.yellow("Rate limit exceeded. Please wait and try again.");
|
|
168
172
|
default:
|
|
169
173
|
return chalk.red(error.message);
|
|
170
174
|
}
|
|
171
175
|
}
|
|
172
|
-
if (error instanceof TypeError &&
|
|
173
|
-
|
|
176
|
+
if (error instanceof TypeError &&
|
|
177
|
+
error.cause?.code === "ECONNREFUSED") {
|
|
178
|
+
return `${chalk.red("Cannot reach the API server.")} Check your connection or run ${chalk.cyan("apipay config:set apiBaseUrl <url>")} to update the endpoint.`;
|
|
174
179
|
}
|
|
175
180
|
return chalk.red(String(error));
|
|
176
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import { type Ora } from
|
|
3
|
-
import { ApiClient } from
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { type Ora } from "ora";
|
|
3
|
+
import { ApiClient } from "./api-client.js";
|
|
4
4
|
/**
|
|
5
5
|
* BaseCommand
|
|
6
6
|
* Shared base for all apipay CLI commands.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAC;AAE3C,OAAY,EAAC,KAAK,GAAG,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,SAAS,EAA+B,MAAM,iBAAiB,CAAC;AAGxE;;;;GAIG;AACH,8BAAsB,WAAY,SAAQ,OAAO;IAChD,MAAM,CAAC,SAAS;;;MAUd;IAEF,SAAS,CAAC,GAAG,EAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAG,GAAG,CAAC;IACxB,SAAS,CAAC,UAAU,UAAS;IAC7B,SAAS,CAAC,WAAW,UAAS;IAExB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,2DAA2D;IAC3D,SAAS,CAAC,WAAW,IAAI,IAAI;IAS7B,2DAA2D;IAC3D,SAAS,CAAC,aAAa,IAAI,IAAI;IAU/B,yCAAyC;IACzC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAMrC,oDAAoD;IACpD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK;CAI5C;AAED;;;GAGG;AACH,8BAAsB,oBAAqB,SAAQ,WAAW;IACvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3B;AAED;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,WAAW;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3B"}
|
package/dist/lib/base-command.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Command, Flags } from
|
|
2
|
-
import chalk from
|
|
3
|
-
import ora from
|
|
4
|
-
import { formatApiError, getApiClient } from
|
|
5
|
-
import {
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import { formatApiError, getApiClient } from "./api-client.js";
|
|
5
|
+
import { getApiKey, isLoggedIn } from "./config.js";
|
|
6
6
|
/**
|
|
7
7
|
* BaseCommand
|
|
8
8
|
* Shared base for all apipay CLI commands.
|
|
@@ -11,12 +11,12 @@ import { isLoggedIn, getApiKey } from './config.js';
|
|
|
11
11
|
export class BaseCommand extends Command {
|
|
12
12
|
static baseFlags = {
|
|
13
13
|
json: Flags.boolean({
|
|
14
|
-
description:
|
|
14
|
+
description: "Output raw JSON (for scripting/CI)",
|
|
15
15
|
default: false,
|
|
16
16
|
}),
|
|
17
17
|
quiet: Flags.boolean({
|
|
18
|
-
char:
|
|
19
|
-
description:
|
|
18
|
+
char: "q",
|
|
19
|
+
description: "Suppress interactive output",
|
|
20
20
|
default: false,
|
|
21
21
|
}),
|
|
22
22
|
};
|
|
@@ -35,14 +35,14 @@ export class BaseCommand extends Command {
|
|
|
35
35
|
/** Require JWT auth — exits with error if not logged in */
|
|
36
36
|
requireAuth() {
|
|
37
37
|
if (!isLoggedIn()) {
|
|
38
|
-
this.error(`${chalk.red(
|
|
38
|
+
this.error(`${chalk.red("Not logged in.")} Run ${chalk.cyan("apipay login")} first.`, { exit: 1 });
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
/** Require API key — exits with error if not configured */
|
|
42
42
|
requireApiKey() {
|
|
43
43
|
const key = getApiKey();
|
|
44
44
|
if (!key?.accessKey || !key?.secretKey) {
|
|
45
|
-
this.error(`${chalk.red(
|
|
45
|
+
this.error(`${chalk.red("No API key configured.")} Run ${chalk.cyan("apipay keys:create")} first.`, { exit: 1 });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
/** Output JSON data or formatted text */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Conf from
|
|
2
|
-
import { type SetupStep } from
|
|
1
|
+
import Conf from "conf";
|
|
2
|
+
import { type SetupStep } from "./constants.js";
|
|
3
3
|
/**
|
|
4
4
|
* Auth state stored in config
|
|
5
5
|
*/
|
|
@@ -24,6 +24,7 @@ export interface ApiKeyConfig {
|
|
|
24
24
|
*/
|
|
25
25
|
export interface CliConfig {
|
|
26
26
|
apiBaseUrl: string;
|
|
27
|
+
dashboardUrl: string;
|
|
27
28
|
auth?: AuthConfig;
|
|
28
29
|
apiKey?: ApiKeyConfig;
|
|
29
30
|
setup: {
|
|
@@ -46,5 +47,6 @@ export declare function getCompletedSteps(): SetupStep[];
|
|
|
46
47
|
export declare function markStepComplete(step: SetupStep): void;
|
|
47
48
|
export declare function getNextIncompleteStep(): SetupStep | null;
|
|
48
49
|
export declare function getApiBaseUrl(): string;
|
|
50
|
+
export declare function getDashboardUrl(): string;
|
|
49
51
|
export declare function resetAll(): void;
|
|
50
52
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAA8B,KAAK,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE;QACN,cAAc,EAAE,SAAS,EAAE,CAAC;KAC5B,CAAC;CACF;AA6CD;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAQ1C;AAID,wBAAgB,OAAO,IAAI,UAAU,GAAG,SAAS,CAEhD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG9C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAGhC;AAED,wBAAgB,UAAU,IAAI,OAAO,CAGpC;AAID,wBAAgB,SAAS,IAAI,YAAY,GAAG,SAAS,CAEpD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAGjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAID,wBAAgB,iBAAiB,IAAI,SAAS,EAAE,CAK/C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAMtD;AAED,wBAAgB,qBAAqB,IAAI,SAAS,GAAG,IAAI,CAIxD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAE/B"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,36 +1,40 @@
|
|
|
1
|
-
import Conf from
|
|
2
|
-
import { API_BASE_URL } from
|
|
1
|
+
import Conf from "conf";
|
|
2
|
+
import { API_BASE_URL, DASHBOARD_URL } from "./constants.js";
|
|
3
3
|
const schema = {
|
|
4
4
|
apiBaseUrl: {
|
|
5
|
-
type:
|
|
5
|
+
type: "string",
|
|
6
6
|
default: API_BASE_URL,
|
|
7
7
|
},
|
|
8
|
+
dashboardUrl: {
|
|
9
|
+
type: "string",
|
|
10
|
+
default: DASHBOARD_URL,
|
|
11
|
+
},
|
|
8
12
|
auth: {
|
|
9
|
-
type:
|
|
13
|
+
type: "object",
|
|
10
14
|
properties: {
|
|
11
|
-
accessToken: { type:
|
|
12
|
-
refreshToken: { type:
|
|
13
|
-
expiresAt: { type:
|
|
14
|
-
email: { type:
|
|
15
|
-
userId: { type:
|
|
15
|
+
accessToken: { type: "string" },
|
|
16
|
+
refreshToken: { type: "string" },
|
|
17
|
+
expiresAt: { type: "number" },
|
|
18
|
+
email: { type: "string" },
|
|
19
|
+
userId: { type: "string" },
|
|
16
20
|
},
|
|
17
21
|
},
|
|
18
22
|
apiKey: {
|
|
19
|
-
type:
|
|
23
|
+
type: "object",
|
|
20
24
|
properties: {
|
|
21
|
-
id: { type:
|
|
22
|
-
accessKey: { type:
|
|
23
|
-
secretKey: { type:
|
|
24
|
-
name: { type:
|
|
25
|
+
id: { type: "string" },
|
|
26
|
+
accessKey: { type: "string" },
|
|
27
|
+
secretKey: { type: "string" },
|
|
28
|
+
name: { type: "string" },
|
|
25
29
|
},
|
|
26
30
|
},
|
|
27
31
|
setup: {
|
|
28
|
-
type:
|
|
32
|
+
type: "object",
|
|
29
33
|
default: { completedSteps: [] },
|
|
30
34
|
properties: {
|
|
31
35
|
completedSteps: {
|
|
32
|
-
type:
|
|
33
|
-
items: { type:
|
|
36
|
+
type: "array",
|
|
37
|
+
items: { type: "string" },
|
|
34
38
|
default: [],
|
|
35
39
|
},
|
|
36
40
|
},
|
|
@@ -44,7 +48,7 @@ let _store = null;
|
|
|
44
48
|
export function getStore() {
|
|
45
49
|
if (!_store) {
|
|
46
50
|
_store = new Conf({
|
|
47
|
-
projectName:
|
|
51
|
+
projectName: "apipay",
|
|
48
52
|
schema,
|
|
49
53
|
});
|
|
50
54
|
}
|
|
@@ -52,16 +56,15 @@ export function getStore() {
|
|
|
52
56
|
}
|
|
53
57
|
/* ===== Auth helpers ===== */
|
|
54
58
|
export function getAuth() {
|
|
55
|
-
return getStore().get(
|
|
59
|
+
return getStore().get("auth");
|
|
56
60
|
}
|
|
57
61
|
export function setAuth(auth) {
|
|
58
|
-
getStore().set(
|
|
59
|
-
markStepComplete(
|
|
62
|
+
getStore().set("auth", auth);
|
|
63
|
+
markStepComplete("login");
|
|
60
64
|
}
|
|
61
65
|
export function clearAuth() {
|
|
62
|
-
getStore().delete(
|
|
63
|
-
|
|
64
|
-
getStore().set('setup.completedSteps', steps);
|
|
66
|
+
getStore().delete("auth");
|
|
67
|
+
getStore().set("setup.completedSteps", []);
|
|
65
68
|
}
|
|
66
69
|
export function isLoggedIn() {
|
|
67
70
|
const auth = getAuth();
|
|
@@ -69,36 +72,43 @@ export function isLoggedIn() {
|
|
|
69
72
|
}
|
|
70
73
|
/* ===== API Key helpers ===== */
|
|
71
74
|
export function getApiKey() {
|
|
72
|
-
return getStore().get(
|
|
75
|
+
return getStore().get("apiKey");
|
|
73
76
|
}
|
|
74
77
|
export function setApiKey(key) {
|
|
75
|
-
getStore().set(
|
|
76
|
-
markStepComplete(
|
|
78
|
+
getStore().set("apiKey", key);
|
|
79
|
+
markStepComplete("api-key");
|
|
77
80
|
}
|
|
78
81
|
export function clearApiKey() {
|
|
79
|
-
getStore().delete(
|
|
80
|
-
const steps = getCompletedSteps().filter((s) => s !==
|
|
81
|
-
getStore().set(
|
|
82
|
+
getStore().delete("apiKey");
|
|
83
|
+
const steps = getCompletedSteps().filter((s) => s !== "api-key");
|
|
84
|
+
getStore().set("setup.completedSteps", steps);
|
|
82
85
|
}
|
|
83
86
|
/* ===== Setup tracking ===== */
|
|
84
87
|
export function getCompletedSteps() {
|
|
85
|
-
const setup = getStore().get(
|
|
88
|
+
const setup = getStore().get("setup");
|
|
86
89
|
return setup?.completedSteps ?? [];
|
|
87
90
|
}
|
|
88
91
|
export function markStepComplete(step) {
|
|
89
92
|
const steps = getCompletedSteps();
|
|
90
93
|
if (!steps.includes(step)) {
|
|
91
94
|
steps.push(step);
|
|
92
|
-
getStore().set(
|
|
95
|
+
getStore().set("setup.completedSteps", steps);
|
|
93
96
|
}
|
|
94
97
|
}
|
|
95
98
|
export function getNextIncompleteStep() {
|
|
96
99
|
const completed = getCompletedSteps();
|
|
97
|
-
const allSteps = [
|
|
100
|
+
const allSteps = ["login", "api-key", "bank", "webhook"];
|
|
98
101
|
return allSteps.find((s) => !completed.includes(s)) ?? null;
|
|
99
102
|
}
|
|
100
103
|
export function getApiBaseUrl() {
|
|
101
|
-
return
|
|
104
|
+
return (process.env.APIPAY_API_URL ||
|
|
105
|
+
getStore().get("apiBaseUrl") ||
|
|
106
|
+
API_BASE_URL);
|
|
107
|
+
}
|
|
108
|
+
export function getDashboardUrl() {
|
|
109
|
+
return (process.env.APIPAY_DASHBOARD_URL ||
|
|
110
|
+
getStore().get("dashboardUrl") ||
|
|
111
|
+
DASHBOARD_URL);
|
|
102
112
|
}
|
|
103
113
|
export function resetAll() {
|
|
104
114
|
getStore().clear();
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Central place for all magic strings, URLs, and configuration values.
|
|
4
4
|
*/
|
|
5
5
|
export declare const API_BASE_URL = "https://app.apipay.vn/v1";
|
|
6
|
-
export declare const DASHBOARD_URL = "https://apipay.vn";
|
|
6
|
+
export declare const DASHBOARD_URL = "https://my.apipay.vn";
|
|
7
7
|
export declare const CONFIG_DIR = "apipay";
|
|
8
8
|
export declare const CONFIG_FILE = "config";
|
|
9
9
|
export declare const SUPPORTED_BANKS: readonly [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,aAAa,yBAAyB,CAAC;AAEpD,eAAO,MAAM,UAAU,WAAW,CAAC;AACnC,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC,eAAO,MAAM,eAAe;;;;;;;;;EAIlB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;EAIhB,CAAC;AAEX,eAAO,MAAM,WAAW,kDAAmD,CAAC;AAC5E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,gCAAgC;AAChC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AAEnD,wBAAwB;AACxB,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,gDAAgD;AAChD,eAAO,MAAM,UAAU;;;;;CAKb,CAAC"}
|
package/dist/lib/constants.js
CHANGED
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* CLI Constants
|
|
3
3
|
* Central place for all magic strings, URLs, and configuration values.
|
|
4
4
|
*/
|
|
5
|
-
export const API_BASE_URL =
|
|
6
|
-
export const DASHBOARD_URL =
|
|
7
|
-
export const CONFIG_DIR =
|
|
8
|
-
export const CONFIG_FILE =
|
|
5
|
+
export const API_BASE_URL = "https://app.apipay.vn/v1";
|
|
6
|
+
export const DASHBOARD_URL = "https://my.apipay.vn";
|
|
7
|
+
export const CONFIG_DIR = "apipay";
|
|
8
|
+
export const CONFIG_FILE = "config";
|
|
9
9
|
export const SUPPORTED_BANKS = [
|
|
10
|
-
{ value:
|
|
11
|
-
{ value:
|
|
12
|
-
{ value:
|
|
10
|
+
{ value: "BIDV", name: "BIDV — Ngân hàng TMCP Đầu tư và Phát triển Việt Nam" },
|
|
11
|
+
{ value: "ACB", name: "ACB — Ngân hàng TMCP Á Châu" },
|
|
12
|
+
{ value: "MBB", name: "MB Bank — Ngân hàng TMCP Quân đội" },
|
|
13
13
|
];
|
|
14
14
|
export const WEBHOOK_TYPES = [
|
|
15
|
-
{ value:
|
|
16
|
-
{ value:
|
|
17
|
-
{ value:
|
|
15
|
+
{ value: "IN", name: "IN — Incoming transactions only" },
|
|
16
|
+
{ value: "OUT", name: "OUT — Outgoing transactions only" },
|
|
17
|
+
{ value: "ALL", name: "ALL — Both incoming and outgoing" },
|
|
18
18
|
];
|
|
19
|
-
export const SETUP_STEPS = [
|
|
19
|
+
export const SETUP_STEPS = ["login", "api-key", "bank", "webhook"];
|
|
20
20
|
/** Magic link polling config */
|
|
21
21
|
export const MAGIC_LINK_POLL_INTERVAL_MS = 2000;
|
|
22
22
|
export const MAGIC_LINK_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,qDAAqD,EAAC;IAC5E,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,6BAA6B,EAAC;IACnD,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,mCAAmC,EAAC;CAChD,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,iCAAiC,EAAC;IACtD,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,kCAAkC,EAAC;IACxD,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,kCAAkC,EAAC;CAC/C,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAG5E,gCAAgC;AAChC,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAEhE,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,GAAG;CACF,CAAC"}
|
package/dist/lib/formatters.d.ts
CHANGED
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
export declare function formatDate(date: string | Date): string;
|
|
6
6
|
/** Mask a secret key: show first 8 and last 4 chars */
|
|
7
7
|
export declare function maskSecret(secret: string): string;
|
|
8
|
+
/** Mask a bank account number: show •••• and last 4 digits */
|
|
9
|
+
export declare function maskAccountNumber(accountNumber: string): string;
|
|
10
|
+
/** Mask a long string: show first 16 and last 8 chars */
|
|
11
|
+
export declare function maskLongString(secret: string): string;
|
|
8
12
|
/** Status badge with color */
|
|
9
13
|
export declare function statusBadge(status: string): string;
|
|
10
14
|
/** Create a table with consistent styling */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA0BpE;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,8BAA8B;AAC9B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,6BAA6B;AAC7B,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,uCAAuC;AACvC,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBlD;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA0BpE;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,8BAA8B;AAC9B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,6BAA6B;AAC7B,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,uCAAuC;AACvC,wBAAgB,SAAS,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACX,MAAM,CAER;AAED,wBAAwB;AACxB,wBAAgB,MAAM,IAAI,IAAI,CAO7B"}
|