akundigital 0.4.0 → 0.4.2
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 +28 -3
- package/dist/admin-resources.d.ts +74 -0
- package/dist/admin-resources.js +73 -0
- package/dist/admin-resources.js.map +1 -0
- package/dist/api-client.d.ts +3 -0
- package/dist/api-client.js +22 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cognito.d.ts +9 -0
- package/dist/{auth.js → cognito.js} +10 -85
- package/dist/cognito.js.map +1 -0
- package/dist/commands.js +148 -11
- package/dist/commands.js.map +1 -1
- package/dist/http.d.ts +11 -0
- package/dist/http.js +5 -0
- package/dist/http.js.map +1 -0
- package/dist/token-store.d.ts +1 -0
- package/dist/token-store.js +11 -0
- package/dist/token-store.js.map +1 -1
- package/package.json +3 -3
- package/dist/auth.d.ts +0 -38
- package/dist/auth.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# akundigital
|
|
2
2
|
|
|
3
|
-
A command-line interface for AkunDigital.
|
|
3
|
+
A command-line interface for AkunDigital admin staff.
|
|
4
|
+
|
|
5
|
+
This CLI is intended for internal admin use only. Log in with an AkunDigital
|
|
6
|
+
account that belongs to the Cognito `admin` group — commands that call
|
|
7
|
+
admin-only backend endpoints (see below) will fail with a 403 for any account
|
|
8
|
+
that isn't a member of that group.
|
|
4
9
|
|
|
5
10
|
## Usage
|
|
6
11
|
|
|
@@ -18,8 +23,28 @@ The CLI provides these commands:
|
|
|
18
23
|
- `login <email> <password>` — authenticate with AkunDigital and save tokens locally
|
|
19
24
|
- `login --device` — browser-assisted login: prints a verification URL and code, then waits for approval in a browser (useful on headless/remote machines)
|
|
20
25
|
- `profile` — fetch and print the current user profile
|
|
21
|
-
- `orders` — list your most recent orders (max 10, newest first)
|
|
22
|
-
- `
|
|
26
|
+
- `orders` — list your most recent orders (max 10, newest first, `--status <status>` to filter)
|
|
27
|
+
- `approve-order <order-id>` — mark an order `PAID` (admin; only valid from `PENDING`/`AWAITING_VERIFICATION`)
|
|
28
|
+
- `subscriptions` — list subscriptions (admin only, max 10, `--status <status>` to filter)
|
|
29
|
+
- `archive-subscriptions [subscription-id ...]` — archive subscriptions (admin). With no arguments, archives every currently `EXPIRED` subscription; with explicit IDs, archives exactly those (each must be `EXPIRED`)
|
|
30
|
+
- `payments` — list payments (admin only, max 10, `--status <status>` to filter)
|
|
31
|
+
- `credentials` — list credentials (admin only, max 10, `--status <status>` to filter)
|
|
32
|
+
|
|
33
|
+
`--status` values are matched case-sensitively against the backend's uppercase
|
|
34
|
+
status enums (e.g. `ACTIVE`, `EXPIRED`, `PAID`) — lowercase values will not
|
|
35
|
+
match any records. For `payments`, `--status` filters on the backend's
|
|
36
|
+
`match_status` field (`AUTO_PAID`, `FLAGGED`, `UNMATCHED`, `AMBIGUOUS`).
|
|
37
|
+
|
|
38
|
+
`approve-order`, `subscriptions`, `archive-subscriptions`, `payments`, and
|
|
39
|
+
`credentials` require the logged-in account to be a member of the Cognito
|
|
40
|
+
`admin` group; other accounts will get a 403 from the backend. `profile` and
|
|
41
|
+
`orders` work for any authenticated account, but since this CLI is for admin
|
|
42
|
+
staff, log in with your admin account for all commands.
|
|
43
|
+
|
|
44
|
+
Backend API contracts (request/response shapes, endpoints, error codes) live
|
|
45
|
+
in the `akundigital/services` repo under `docs/api/`, not in this repo. Check
|
|
46
|
+
the relevant doc there before adding or changing any command that calls the
|
|
47
|
+
API.
|
|
23
48
|
|
|
24
49
|
Authentication tokens are stored in `~/.config/akundigital/tokens.json`. Expired access tokens are refreshed automatically with the saved refresh token.
|
|
25
50
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { TokenStore } from "./token-store.js";
|
|
2
|
+
import type { FetchLike } from "./http.js";
|
|
3
|
+
export declare const getProfile: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<unknown>;
|
|
4
|
+
export type Order = {
|
|
5
|
+
id: string;
|
|
6
|
+
platform_name: string;
|
|
7
|
+
plan_type: string;
|
|
8
|
+
plan_duration: number;
|
|
9
|
+
status: string;
|
|
10
|
+
total_amount?: number;
|
|
11
|
+
created_at: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const maxOrdersLimit = 5;
|
|
14
|
+
export declare const getOrders: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number, limit?: number, status?: string) => Promise<Order[]>;
|
|
15
|
+
export type AdminOrder = Order & {
|
|
16
|
+
source: string;
|
|
17
|
+
user_name?: string;
|
|
18
|
+
user_email?: string;
|
|
19
|
+
user_phone?: string;
|
|
20
|
+
total_payment: number;
|
|
21
|
+
payment_received: boolean;
|
|
22
|
+
payment_received_at?: string;
|
|
23
|
+
expires_at?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare const approveOrder: (tokenStore: TokenStore, orderId: string, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<AdminOrder>;
|
|
26
|
+
export type Subscription = {
|
|
27
|
+
id: string;
|
|
28
|
+
user_id: string;
|
|
29
|
+
platform_slug: string;
|
|
30
|
+
platform_name: string;
|
|
31
|
+
order_id: string;
|
|
32
|
+
plan_type: string;
|
|
33
|
+
plan_duration: number;
|
|
34
|
+
status: string;
|
|
35
|
+
credential_id?: string;
|
|
36
|
+
credential_slot_id?: string;
|
|
37
|
+
subscription_expires_at?: string;
|
|
38
|
+
created_at: string;
|
|
39
|
+
updated_at: string;
|
|
40
|
+
};
|
|
41
|
+
export declare const maxSubscriptionsLimit = 5;
|
|
42
|
+
export declare const getSubscriptions: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number, limit?: number, status?: string) => Promise<Subscription[]>;
|
|
43
|
+
export type ArchiveSubscriptionsResult = {
|
|
44
|
+
archived_count: number;
|
|
45
|
+
subscriptions: Subscription[];
|
|
46
|
+
};
|
|
47
|
+
export declare const archiveSubscriptions: (tokenStore: TokenStore, subscriptionIds: string[], fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<ArchiveSubscriptionsResult>;
|
|
48
|
+
export type Payment = {
|
|
49
|
+
id: string;
|
|
50
|
+
amount: number;
|
|
51
|
+
provider: string;
|
|
52
|
+
sender_name?: string;
|
|
53
|
+
match_status: string;
|
|
54
|
+
order_id?: string;
|
|
55
|
+
candidate_order_ids?: string[];
|
|
56
|
+
received_at: string;
|
|
57
|
+
};
|
|
58
|
+
export declare const maxPaymentsLimit = 5;
|
|
59
|
+
export declare const getPayments: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number, limit?: number, matchStatus?: string) => Promise<Payment[]>;
|
|
60
|
+
export type Credential = {
|
|
61
|
+
id: string;
|
|
62
|
+
platform: string;
|
|
63
|
+
credential_types: string[];
|
|
64
|
+
has_password: boolean;
|
|
65
|
+
email?: string;
|
|
66
|
+
phone?: string;
|
|
67
|
+
expiration_date: string;
|
|
68
|
+
status: string;
|
|
69
|
+
total_slots: number;
|
|
70
|
+
used_slots: number;
|
|
71
|
+
available_slots: number;
|
|
72
|
+
};
|
|
73
|
+
export declare const maxCredentialsLimit = 5;
|
|
74
|
+
export declare const getCredentials: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number, limit?: number, status?: string) => Promise<Credential[]>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { apiBaseUrl, defaultClientId, withQueryParam, withStatus } from "./http.js";
|
|
2
|
+
import { fetchAuthorized } from "./api-client.js";
|
|
3
|
+
const profileEndpoint = `${apiBaseUrl}/v1/profile`;
|
|
4
|
+
const ordersEndpoint = `${apiBaseUrl}/v1/orders`;
|
|
5
|
+
const adminOrdersEndpoint = `${apiBaseUrl}/v1/admin/orders`;
|
|
6
|
+
const subscriptionsEndpoint = `${apiBaseUrl}/v1/admin/subscriptions`;
|
|
7
|
+
const paymentsEndpoint = `${apiBaseUrl}/v1/admin/payments`;
|
|
8
|
+
const credentialsEndpoint = `${apiBaseUrl}/v1/admin/credentials`;
|
|
9
|
+
export const getProfile = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
10
|
+
const response = await fetchAuthorized(profileEndpoint, tokenStore, fetchImpl, clientId, now);
|
|
11
|
+
const body = await response.json();
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
throw new Error(body.error ?? "Failed to get profile");
|
|
14
|
+
}
|
|
15
|
+
return body.data ?? body;
|
|
16
|
+
};
|
|
17
|
+
export const maxOrdersLimit = 5;
|
|
18
|
+
export const getOrders = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now(), limit = maxOrdersLimit, status) => {
|
|
19
|
+
const response = await fetchAuthorized(withStatus(ordersEndpoint, status), tokenStore, fetchImpl, clientId, now);
|
|
20
|
+
const body = await response.json();
|
|
21
|
+
if (!response.ok || !body.success || !body.data) {
|
|
22
|
+
throw new Error(body.error ?? "Failed to get orders");
|
|
23
|
+
}
|
|
24
|
+
return body.data.orders.slice(0, limit);
|
|
25
|
+
};
|
|
26
|
+
export const approveOrder = async (tokenStore, orderId, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
27
|
+
const response = await fetchAuthorized(`${adminOrdersEndpoint}/${encodeURIComponent(orderId)}/status`, tokenStore, fetchImpl, clientId, now, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ status: "PAID" }) });
|
|
28
|
+
const body = await response.json();
|
|
29
|
+
if (!response.ok || !body.success || !body.data) {
|
|
30
|
+
throw new Error(body.error ?? "Failed to approve order");
|
|
31
|
+
}
|
|
32
|
+
return body.data.order;
|
|
33
|
+
};
|
|
34
|
+
export const maxSubscriptionsLimit = 5;
|
|
35
|
+
export const getSubscriptions = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now(), limit = maxSubscriptionsLimit, status) => {
|
|
36
|
+
const response = await fetchAuthorized(withStatus(subscriptionsEndpoint, status), tokenStore, fetchImpl, clientId, now);
|
|
37
|
+
const body = await response.json();
|
|
38
|
+
if (!response.ok || !body.success || !body.data) {
|
|
39
|
+
throw new Error(body.error ?? "Failed to get subscriptions");
|
|
40
|
+
}
|
|
41
|
+
return body.data.subscriptions.slice(0, limit);
|
|
42
|
+
};
|
|
43
|
+
export const archiveSubscriptions = async (tokenStore, subscriptionIds, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
44
|
+
const response = await fetchAuthorized(`${subscriptionsEndpoint}/archive`, tokenStore, fetchImpl, clientId, now, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: { "Content-Type": "application/json" },
|
|
47
|
+
body: JSON.stringify({ subscription_ids: subscriptionIds }),
|
|
48
|
+
});
|
|
49
|
+
const body = await response.json();
|
|
50
|
+
if (!response.ok || !body.success || !body.data) {
|
|
51
|
+
throw new Error(body.error ?? "Failed to archive subscriptions");
|
|
52
|
+
}
|
|
53
|
+
return body.data;
|
|
54
|
+
};
|
|
55
|
+
export const maxPaymentsLimit = 5;
|
|
56
|
+
export const getPayments = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now(), limit = maxPaymentsLimit, matchStatus) => {
|
|
57
|
+
const response = await fetchAuthorized(withQueryParam(paymentsEndpoint, "match_status", matchStatus), tokenStore, fetchImpl, clientId, now);
|
|
58
|
+
const body = await response.json();
|
|
59
|
+
if (!response.ok || !body.success || !body.data) {
|
|
60
|
+
throw new Error(body.error ?? "Failed to get payments");
|
|
61
|
+
}
|
|
62
|
+
return body.data.payments.slice(0, limit);
|
|
63
|
+
};
|
|
64
|
+
export const maxCredentialsLimit = 5;
|
|
65
|
+
export const getCredentials = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now(), limit = maxCredentialsLimit, status) => {
|
|
66
|
+
const response = await fetchAuthorized(withStatus(credentialsEndpoint, status), tokenStore, fetchImpl, clientId, now);
|
|
67
|
+
const body = await response.json();
|
|
68
|
+
if (!response.ok || !body.success || !body.data) {
|
|
69
|
+
throw new Error(body.error ?? "Failed to get credentials");
|
|
70
|
+
}
|
|
71
|
+
return body.data.credentials.slice(0, limit);
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=admin-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-resources.js","sourceRoot":"","sources":["../src/admin-resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isTokenExpired } from "./token-store.js";
|
|
2
|
+
import { refresh } from "./cognito.js";
|
|
3
|
+
export const fetchAuthorized = async (url, tokenStore, fetchImpl, clientId, now, init) => {
|
|
4
|
+
const loadedTokens = await tokenStore.load();
|
|
5
|
+
if (!loadedTokens) {
|
|
6
|
+
throw new Error("Not logged in. Run `akundigital login <email> <password>` first.");
|
|
7
|
+
}
|
|
8
|
+
let tokens = isTokenExpired(loadedTokens, now)
|
|
9
|
+
? await refresh(loadedTokens, tokenStore, fetchImpl, clientId)
|
|
10
|
+
: loadedTokens;
|
|
11
|
+
const request = () => fetchImpl(url, {
|
|
12
|
+
...init,
|
|
13
|
+
headers: { ...init?.headers, Authorization: `Bearer ${tokens.accessToken}` },
|
|
14
|
+
});
|
|
15
|
+
let response = await request();
|
|
16
|
+
if (response.status === 401) {
|
|
17
|
+
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
18
|
+
response = await request();
|
|
19
|
+
}
|
|
20
|
+
return response;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,GAAW,EACX,UAAsB,EACtB,SAAoB,EACpB,QAAgB,EAChB,GAAW,EACX,IAAkB,EACC,EAAE;IACrB,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,GAAG,CAAC;QAC5C,CAAC,CAAC,MAAM,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC9D,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE;QACnC,GAAG,IAAI;QACP,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE;KAC7E,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAC;IAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,QAAQ,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TokenSet, TokenStore } from "./token-store.js";
|
|
2
|
+
import type { FetchLike } from "./http.js";
|
|
3
|
+
export declare const login: (email: string, password: string, tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string) => Promise<TokenSet>;
|
|
4
|
+
export declare const refresh: (tokens: TokenSet, tokenStore: TokenStore, fetchImpl: FetchLike, clientId: string) => Promise<TokenSet>;
|
|
5
|
+
export type DevicePrompt = {
|
|
6
|
+
verificationUri: string;
|
|
7
|
+
userCode: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const loginWithDevice: (tokenStore: TokenStore, fetchImpl?: FetchLike, onPrompt?: (prompt: DevicePrompt) => void, sleepImpl?: (milliseconds: number) => Promise<void>) => Promise<TokenSet>;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { createTokenSet
|
|
1
|
+
import { createTokenSet } from "./token-store.js";
|
|
2
|
+
import { apiBaseUrl, defaultClientId } from "./http.js";
|
|
2
3
|
const cognitoEndpoint = "https://cognito-idp.ap-southeast-3.amazonaws.com/";
|
|
3
|
-
const defaultClientId = "6vcd500elmtpkiks9qp83vs8fh";
|
|
4
|
-
const apiBaseUrl = "https://6cr9nj44pd.execute-api.ap-southeast-3.amazonaws.com";
|
|
5
|
-
const profileEndpoint = `${apiBaseUrl}/v1/profile`;
|
|
6
|
-
const ordersEndpoint = `${apiBaseUrl}/v1/orders`;
|
|
7
|
-
const subscriptionsEndpoint = `${apiBaseUrl}/v1/admin/subscriptions`;
|
|
8
4
|
const deviceStartEndpoint = `${apiBaseUrl}/v1/auth/cli/device`;
|
|
9
5
|
const deviceTokenEndpoint = `${apiBaseUrl}/v1/auth/cli/token`;
|
|
10
6
|
const requestCognito = async (target, parameters, fetchImpl, clientId) => {
|
|
@@ -40,6 +36,13 @@ export const login = async (email, password, tokenStore, fetchImpl = fetch, clie
|
|
|
40
36
|
await tokenStore.save(tokens);
|
|
41
37
|
return tokens;
|
|
42
38
|
};
|
|
39
|
+
export const refresh = async (tokens, tokenStore, fetchImpl, clientId) => {
|
|
40
|
+
const response = await requestCognito("REFRESH_TOKEN_AUTH", { REFRESH_TOKEN: tokens.refreshToken }, fetchImpl, tokens.clientId ?? clientId);
|
|
41
|
+
const result = getAuthenticationResult(response);
|
|
42
|
+
const refreshedTokens = createTokenSet(result, tokens.refreshToken);
|
|
43
|
+
await tokenStore.save(refreshedTokens);
|
|
44
|
+
return refreshedTokens;
|
|
45
|
+
};
|
|
43
46
|
const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
44
47
|
const startDeviceLogin = async (fetchImpl) => {
|
|
45
48
|
const response = await fetchImpl(deviceStartEndpoint, {
|
|
@@ -88,82 +91,4 @@ export const loginWithDevice = async (tokenStore, fetchImpl = fetch, onPrompt, s
|
|
|
88
91
|
}
|
|
89
92
|
throw new Error("Device login timed out. Run `akundigital login --device` again.");
|
|
90
93
|
};
|
|
91
|
-
|
|
92
|
-
const response = await requestCognito("REFRESH_TOKEN_AUTH", { REFRESH_TOKEN: tokens.refreshToken }, fetchImpl, clientId);
|
|
93
|
-
const result = getAuthenticationResult(response);
|
|
94
|
-
const refreshedTokens = createTokenSet(result, tokens.refreshToken);
|
|
95
|
-
await tokenStore.save(refreshedTokens);
|
|
96
|
-
return refreshedTokens;
|
|
97
|
-
};
|
|
98
|
-
export const getProfile = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
99
|
-
let tokens = await tokenStore.load();
|
|
100
|
-
if (!tokens) {
|
|
101
|
-
throw new Error("Not logged in. Run `akundigital login <email> <password>` first.");
|
|
102
|
-
}
|
|
103
|
-
if (isTokenExpired(tokens, now)) {
|
|
104
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
105
|
-
}
|
|
106
|
-
let response = await fetchImpl(profileEndpoint, {
|
|
107
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
108
|
-
});
|
|
109
|
-
if (response.status === 401) {
|
|
110
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
111
|
-
response = await fetchImpl(profileEndpoint, {
|
|
112
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
const body = await response.json();
|
|
116
|
-
if (!response.ok) {
|
|
117
|
-
throw new Error(body.error ?? "Failed to get profile");
|
|
118
|
-
}
|
|
119
|
-
return body.data ?? body;
|
|
120
|
-
};
|
|
121
|
-
export const maxOrdersLimit = 10;
|
|
122
|
-
export const getOrders = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
123
|
-
let tokens = await tokenStore.load();
|
|
124
|
-
if (!tokens) {
|
|
125
|
-
throw new Error("Not logged in. Run `akundigital login <email> <password>` first.");
|
|
126
|
-
}
|
|
127
|
-
if (isTokenExpired(tokens, now)) {
|
|
128
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
129
|
-
}
|
|
130
|
-
let response = await fetchImpl(ordersEndpoint, {
|
|
131
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
132
|
-
});
|
|
133
|
-
if (response.status === 401) {
|
|
134
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
135
|
-
response = await fetchImpl(ordersEndpoint, {
|
|
136
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
const body = await response.json();
|
|
140
|
-
if (!response.ok || !body.success || !body.data) {
|
|
141
|
-
throw new Error(body.error ?? "Failed to get orders");
|
|
142
|
-
}
|
|
143
|
-
return body.data.orders.slice(0, maxOrdersLimit);
|
|
144
|
-
};
|
|
145
|
-
export const maxSubscriptionsLimit = 10;
|
|
146
|
-
export const getSubscriptions = async (tokenStore, fetchImpl = fetch, clientId = defaultClientId, now = Date.now()) => {
|
|
147
|
-
let tokens = await tokenStore.load();
|
|
148
|
-
if (!tokens) {
|
|
149
|
-
throw new Error("Not logged in. Run `akundigital login <email> <password>` first.");
|
|
150
|
-
}
|
|
151
|
-
if (isTokenExpired(tokens, now)) {
|
|
152
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
153
|
-
}
|
|
154
|
-
let response = await fetchImpl(subscriptionsEndpoint, {
|
|
155
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
156
|
-
});
|
|
157
|
-
if (response.status === 401) {
|
|
158
|
-
tokens = await refresh(tokens, tokenStore, fetchImpl, clientId);
|
|
159
|
-
response = await fetchImpl(subscriptionsEndpoint, {
|
|
160
|
-
headers: { Authorization: `Bearer ${tokens.accessToken}` },
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
const body = await response.json();
|
|
164
|
-
if (!response.ok || !body.success || !body.data) {
|
|
165
|
-
throw new Error(body.error ?? "Failed to get subscriptions");
|
|
166
|
-
}
|
|
167
|
-
return body.data.subscriptions.slice(0, maxSubscriptionsLimit);
|
|
168
|
-
};
|
|
169
|
-
//# sourceMappingURL=auth.js.map
|
|
94
|
+
//# sourceMappingURL=cognito.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognito.js","sourceRoot":"","sources":["../src/cognito.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.js
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import { getOrders, getProfile, getSubscriptions,
|
|
1
|
+
import { approveOrder, archiveSubscriptions, getCredentials, getOrders, getPayments, getProfile, getSubscriptions, maxCredentialsLimit, maxOrdersLimit, maxPaymentsLimit, maxSubscriptionsLimit } from "./admin-resources.js";
|
|
2
|
+
import { login, loginWithDevice } from "./cognito.js";
|
|
2
3
|
import { createTokenStore } from "./token-store.js";
|
|
4
|
+
const parseLimit = (args, defaultLimit) => {
|
|
5
|
+
const index = args.findIndex((argument) => argument === "--limit" || argument === "-l");
|
|
6
|
+
if (index === -1)
|
|
7
|
+
return defaultLimit;
|
|
8
|
+
const value = args[index + 1];
|
|
9
|
+
const parsed = Number(value);
|
|
10
|
+
if (!value || !Number.isInteger(parsed) || parsed <= 0) {
|
|
11
|
+
return new Error("--limit must be a positive integer");
|
|
12
|
+
}
|
|
13
|
+
return parsed;
|
|
14
|
+
};
|
|
15
|
+
const parseOption = (args, name) => {
|
|
16
|
+
const index = args.findIndex((argument) => argument === name);
|
|
17
|
+
if (index === -1)
|
|
18
|
+
return undefined;
|
|
19
|
+
return args[index + 1];
|
|
20
|
+
};
|
|
21
|
+
const hasOnlyKnownFlags = (args, knownFlags) => args.length % 2 === 0 && args.filter((_, index) => index % 2 === 0).every((flag) => knownFlags.has(flag));
|
|
3
22
|
export const createCommands = (version) => ({
|
|
4
23
|
help: {
|
|
5
24
|
description: "Show available commands",
|
|
@@ -12,8 +31,15 @@ export const createCommands = (version) => ({
|
|
|
12
31
|
" version Show the installed version",
|
|
13
32
|
" login Log in with email and password, or `login --device` for browser-assisted login",
|
|
14
33
|
" profile Show the current user profile",
|
|
15
|
-
" orders List your most recent orders (
|
|
16
|
-
"
|
|
34
|
+
" orders List your most recent orders (default 5, --limit/-l <n>, --status <status>)",
|
|
35
|
+
" approve-order Mark an order as paid (admin)",
|
|
36
|
+
" subscriptions List subscriptions (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
37
|
+
" archive-subscriptions Archive expired subscriptions (admin)",
|
|
38
|
+
" payments List payments (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
39
|
+
" credentials List credentials (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
40
|
+
"",
|
|
41
|
+
"--status values are matched case-sensitively against uppercase status",
|
|
42
|
+
"enums (e.g. ACTIVE, EXPIRED, PAID); lowercase values will not match.",
|
|
17
43
|
"",
|
|
18
44
|
"Run `akundigital <command> --help` for command-specific help.",
|
|
19
45
|
].join("\n"));
|
|
@@ -81,14 +107,20 @@ export const createCommands = (version) => ({
|
|
|
81
107
|
},
|
|
82
108
|
},
|
|
83
109
|
orders: {
|
|
84
|
-
description: "List your most recent orders (
|
|
110
|
+
description: "List your most recent orders (default 5, --limit/-l <n>, --status <status>)",
|
|
85
111
|
run: async ({ args, output, error }) => {
|
|
86
|
-
if (args
|
|
87
|
-
error("Usage: akundigital orders");
|
|
112
|
+
if (!hasOnlyKnownFlags(args, new Set(["--limit", "-l", "--status"]))) {
|
|
113
|
+
error("Usage: akundigital orders [--limit|-l <n>] [--status <status>]");
|
|
114
|
+
return 1;
|
|
115
|
+
}
|
|
116
|
+
const limit = parseLimit(args, maxOrdersLimit);
|
|
117
|
+
if (limit instanceof Error) {
|
|
118
|
+
error(limit.message);
|
|
88
119
|
return 1;
|
|
89
120
|
}
|
|
121
|
+
const status = parseOption(args, "--status");
|
|
90
122
|
try {
|
|
91
|
-
const orders = await getOrders(createTokenStore());
|
|
123
|
+
const orders = await getOrders(createTokenStore(), fetch, undefined, undefined, limit, status);
|
|
92
124
|
if (orders.length === 0) {
|
|
93
125
|
output("No orders found.");
|
|
94
126
|
return 0;
|
|
@@ -102,15 +134,39 @@ export const createCommands = (version) => ({
|
|
|
102
134
|
}
|
|
103
135
|
},
|
|
104
136
|
},
|
|
137
|
+
"approve-order": {
|
|
138
|
+
description: "Mark an order as paid (admin)",
|
|
139
|
+
run: async ({ args, output, error }) => {
|
|
140
|
+
if (args.length !== 1) {
|
|
141
|
+
error("Usage: akundigital approve-order <order-id>");
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const order = await approveOrder(createTokenStore(), args[0]);
|
|
146
|
+
output(JSON.stringify(order, null, 2));
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
catch (approveError) {
|
|
150
|
+
error(approveError instanceof Error ? approveError.message : "Failed to approve order");
|
|
151
|
+
return 1;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
},
|
|
105
155
|
subscriptions: {
|
|
106
|
-
description: "List subscriptions (admin,
|
|
156
|
+
description: "List subscriptions (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
107
157
|
run: async ({ args, output, error }) => {
|
|
108
|
-
if (args
|
|
109
|
-
error("Usage: akundigital subscriptions");
|
|
158
|
+
if (!hasOnlyKnownFlags(args, new Set(["--limit", "-l", "--status"]))) {
|
|
159
|
+
error("Usage: akundigital subscriptions [--limit|-l <n>] [--status <status>]");
|
|
110
160
|
return 1;
|
|
111
161
|
}
|
|
162
|
+
const limit = parseLimit(args, maxSubscriptionsLimit);
|
|
163
|
+
if (limit instanceof Error) {
|
|
164
|
+
error(limit.message);
|
|
165
|
+
return 1;
|
|
166
|
+
}
|
|
167
|
+
const status = parseOption(args, "--status");
|
|
112
168
|
try {
|
|
113
|
-
const subscriptions = await getSubscriptions(createTokenStore());
|
|
169
|
+
const subscriptions = await getSubscriptions(createTokenStore(), fetch, undefined, undefined, limit, status);
|
|
114
170
|
if (subscriptions.length === 0) {
|
|
115
171
|
output("No subscriptions found.");
|
|
116
172
|
return 0;
|
|
@@ -124,6 +180,87 @@ export const createCommands = (version) => ({
|
|
|
124
180
|
}
|
|
125
181
|
},
|
|
126
182
|
},
|
|
183
|
+
"archive-subscriptions": {
|
|
184
|
+
description: "Archive expired subscriptions (admin, optionally by ID)",
|
|
185
|
+
run: async ({ args, output, error }) => {
|
|
186
|
+
try {
|
|
187
|
+
const store = createTokenStore();
|
|
188
|
+
let subscriptionIds = args;
|
|
189
|
+
if (subscriptionIds.length === 0) {
|
|
190
|
+
const expired = await getSubscriptions(store, fetch, undefined, undefined, Number.POSITIVE_INFINITY, "EXPIRED");
|
|
191
|
+
subscriptionIds = expired.map((subscription) => subscription.id);
|
|
192
|
+
if (subscriptionIds.length === 0) {
|
|
193
|
+
output("No expired subscriptions found.");
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const result = await archiveSubscriptions(store, subscriptionIds);
|
|
198
|
+
output(`Archived ${result.archived_count} subscription(s).`);
|
|
199
|
+
output(JSON.stringify(result.subscriptions, null, 2));
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
catch (archiveError) {
|
|
203
|
+
error(archiveError instanceof Error ? archiveError.message : "Failed to archive subscriptions");
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
payments: {
|
|
209
|
+
description: "List payments (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
210
|
+
run: async ({ args, output, error }) => {
|
|
211
|
+
if (!hasOnlyKnownFlags(args, new Set(["--limit", "-l", "--status"]))) {
|
|
212
|
+
error("Usage: akundigital payments [--limit|-l <n>] [--status <status>]");
|
|
213
|
+
return 1;
|
|
214
|
+
}
|
|
215
|
+
const limit = parseLimit(args, maxPaymentsLimit);
|
|
216
|
+
if (limit instanceof Error) {
|
|
217
|
+
error(limit.message);
|
|
218
|
+
return 1;
|
|
219
|
+
}
|
|
220
|
+
const status = parseOption(args, "--status");
|
|
221
|
+
try {
|
|
222
|
+
const payments = await getPayments(createTokenStore(), fetch, undefined, undefined, limit, status);
|
|
223
|
+
if (payments.length === 0) {
|
|
224
|
+
output("No payments found.");
|
|
225
|
+
return 0;
|
|
226
|
+
}
|
|
227
|
+
output(JSON.stringify(payments, null, 2));
|
|
228
|
+
return 0;
|
|
229
|
+
}
|
|
230
|
+
catch (paymentsError) {
|
|
231
|
+
error(paymentsError instanceof Error ? paymentsError.message : "Failed to get payments");
|
|
232
|
+
return 1;
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
credentials: {
|
|
237
|
+
description: "List credentials (admin, default 5, --limit/-l <n>, --status <status>)",
|
|
238
|
+
run: async ({ args, output, error }) => {
|
|
239
|
+
if (!hasOnlyKnownFlags(args, new Set(["--limit", "-l", "--status"]))) {
|
|
240
|
+
error("Usage: akundigital credentials [--limit|-l <n>] [--status <status>]");
|
|
241
|
+
return 1;
|
|
242
|
+
}
|
|
243
|
+
const limit = parseLimit(args, maxCredentialsLimit);
|
|
244
|
+
if (limit instanceof Error) {
|
|
245
|
+
error(limit.message);
|
|
246
|
+
return 1;
|
|
247
|
+
}
|
|
248
|
+
const status = parseOption(args, "--status");
|
|
249
|
+
try {
|
|
250
|
+
const credentials = await getCredentials(createTokenStore(), fetch, undefined, undefined, limit, status);
|
|
251
|
+
if (credentials.length === 0) {
|
|
252
|
+
output("No credentials found.");
|
|
253
|
+
return 0;
|
|
254
|
+
}
|
|
255
|
+
output(JSON.stringify(credentials, null, 2));
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
catch (credentialsError) {
|
|
259
|
+
error(credentialsError instanceof Error ? credentialsError.message : "Failed to get credentials");
|
|
260
|
+
return 1;
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
},
|
|
127
264
|
});
|
|
128
265
|
export const runCommand = async (commandName, args, version, output, error) => {
|
|
129
266
|
const commands = createCommands(version);
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const apiBaseUrl = "https://6cr9nj44pd.execute-api.ap-southeast-3.amazonaws.com";
|
|
2
|
+
export declare const defaultClientId = "6vcd500elmtpkiks9qp83vs8fh";
|
|
3
|
+
export type FetchLike = typeof fetch;
|
|
4
|
+
export type ApiEnvelope<T> = {
|
|
5
|
+
success: boolean;
|
|
6
|
+
data?: T;
|
|
7
|
+
error?: string;
|
|
8
|
+
code?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const withQueryParam: (endpoint: string, name: string, value?: string) => string;
|
|
11
|
+
export declare const withStatus: (endpoint: string, status?: string) => string;
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const apiBaseUrl = "https://6cr9nj44pd.execute-api.ap-southeast-3.amazonaws.com";
|
|
2
|
+
export const defaultClientId = "6vcd500elmtpkiks9qp83vs8fh";
|
|
3
|
+
export const withQueryParam = (endpoint, name, value) => value ? `${endpoint}?${name}=${encodeURIComponent(value)}` : endpoint;
|
|
4
|
+
export const withStatus = (endpoint, status) => withQueryParam(endpoint, "status", status);
|
|
5
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,6DAA6D,CAAC;AACxF,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAW5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,KAAc,EAAU,EAAE,CACvF,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,MAAe,EAAU,EAAE,CACtE,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC"}
|
package/dist/token-store.d.ts
CHANGED
package/dist/token-store.js
CHANGED
|
@@ -25,11 +25,22 @@ export const createTokenStore = (path = tokenPath) => ({
|
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
27
|
export const isTokenExpired = (tokens, now = Date.now()) => new Date(tokens.expiresAt).getTime() <= now;
|
|
28
|
+
const decodeJwtClientId = (jwt) => {
|
|
29
|
+
try {
|
|
30
|
+
const payload = jwt.split(".")[1];
|
|
31
|
+
const decoded = Buffer.from(payload, "base64").toString("utf8");
|
|
32
|
+
return JSON.parse(decoded).client_id;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
28
38
|
export const createTokenSet = (result, refreshToken, now = new Date()) => ({
|
|
29
39
|
accessToken: result.AccessToken,
|
|
30
40
|
idToken: result.IdToken,
|
|
31
41
|
refreshToken: result.RefreshToken ?? refreshToken ?? "",
|
|
32
42
|
issuedAt: now.toISOString(),
|
|
33
43
|
expiresAt: new Date(now.getTime() + (result.ExpiresIn ?? 3600) * 1000).toISOString(),
|
|
44
|
+
clientId: decodeJwtClientId(result.AccessToken),
|
|
34
45
|
});
|
|
35
46
|
//# sourceMappingURL=token-store.js.map
|
package/dist/token-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "akundigital",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "A command-line interface for AkunDigital.",
|
|
3
|
+
"version": "0.4.2",
|
|
4
|
+
"description": "A command-line interface for AkunDigital admin staff.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"akundigital": "dist/index.js"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"typecheck": "tsc --noEmit",
|
|
15
|
-
"test": "npm run build && node --test",
|
|
15
|
+
"test": "npm run build && node --test test/*.test.mjs",
|
|
16
16
|
"prepublishOnly": "npm run typecheck && npm test"
|
|
17
17
|
},
|
|
18
18
|
"engines": {
|
package/dist/auth.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { TokenSet, TokenStore } from "./token-store.js";
|
|
2
|
-
type FetchLike = typeof fetch;
|
|
3
|
-
export declare const login: (email: string, password: string, tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string) => Promise<TokenSet>;
|
|
4
|
-
export type DevicePrompt = {
|
|
5
|
-
verificationUri: string;
|
|
6
|
-
userCode: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const loginWithDevice: (tokenStore: TokenStore, fetchImpl?: FetchLike, onPrompt?: (prompt: DevicePrompt) => void, sleepImpl?: (milliseconds: number) => Promise<void>) => Promise<TokenSet>;
|
|
9
|
-
export declare const getProfile: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<unknown>;
|
|
10
|
-
export type Order = {
|
|
11
|
-
id: string;
|
|
12
|
-
platform_name: string;
|
|
13
|
-
plan_type: string;
|
|
14
|
-
plan_duration: number;
|
|
15
|
-
status: string;
|
|
16
|
-
total_amount?: number;
|
|
17
|
-
created_at: string;
|
|
18
|
-
};
|
|
19
|
-
export declare const maxOrdersLimit = 10;
|
|
20
|
-
export declare const getOrders: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<Order[]>;
|
|
21
|
-
export type Subscription = {
|
|
22
|
-
id: string;
|
|
23
|
-
user_id: string;
|
|
24
|
-
platform_slug: string;
|
|
25
|
-
platform_name: string;
|
|
26
|
-
order_id: string;
|
|
27
|
-
plan_type: string;
|
|
28
|
-
plan_duration: number;
|
|
29
|
-
status: string;
|
|
30
|
-
credential_id?: string;
|
|
31
|
-
credential_slot_id?: string;
|
|
32
|
-
subscription_expires_at?: string;
|
|
33
|
-
created_at: string;
|
|
34
|
-
updated_at: string;
|
|
35
|
-
};
|
|
36
|
-
export declare const maxSubscriptionsLimit = 10;
|
|
37
|
-
export declare const getSubscriptions: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<Subscription[]>;
|
|
38
|
-
export {};
|
package/dist/auth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|