akundigital 0.2.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 CHANGED
@@ -16,6 +16,7 @@ The CLI provides these commands:
16
16
  - `help` — show available commands
17
17
  - `version` — show the installed version
18
18
  - `login <email> <password>` — authenticate with AkunDigital and save tokens locally
19
+ - `login --device` — browser-assisted login: prints a verification URL and code, then waits for approval in a browser (useful on headless/remote machines)
19
20
  - `profile` — fetch and print the current user profile
20
21
 
21
22
  Authentication tokens are stored in `~/.config/akundigital/tokens.json`. Expired access tokens are refreshed automatically with the saved refresh token.
package/dist/auth.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import type { TokenSet, TokenStore } from "./token-store.js";
2
2
  type FetchLike = typeof fetch;
3
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>;
4
9
  export declare const getProfile: (tokenStore: TokenStore, fetchImpl?: FetchLike, clientId?: string, now?: number) => Promise<unknown>;
5
10
  export {};
package/dist/auth.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { createTokenSet, isTokenExpired } from "./token-store.js";
2
2
  const cognitoEndpoint = "https://cognito-idp.ap-southeast-3.amazonaws.com/";
3
3
  const defaultClientId = "6vcd500elmtpkiks9qp83vs8fh";
4
- const profileEndpoint = "https://6cr9nj44pd.execute-api.ap-southeast-3.amazonaws.com/v1/profile";
4
+ const apiBaseUrl = "https://6cr9nj44pd.execute-api.ap-southeast-3.amazonaws.com";
5
+ const profileEndpoint = `${apiBaseUrl}/v1/profile`;
6
+ const deviceStartEndpoint = `${apiBaseUrl}/v1/auth/cli/device`;
7
+ const deviceTokenEndpoint = `${apiBaseUrl}/v1/auth/cli/token`;
5
8
  const requestCognito = async (target, parameters, fetchImpl, clientId) => {
6
9
  const response = await fetchImpl(cognitoEndpoint, {
7
10
  method: "POST",
@@ -35,6 +38,54 @@ export const login = async (email, password, tokenStore, fetchImpl = fetch, clie
35
38
  await tokenStore.save(tokens);
36
39
  return tokens;
37
40
  };
41
+ const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
42
+ const startDeviceLogin = async (fetchImpl) => {
43
+ const response = await fetchImpl(deviceStartEndpoint, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ body: JSON.stringify({}),
47
+ });
48
+ const body = await response.json();
49
+ if (!response.ok || !body.success || !body.data) {
50
+ throw new Error(body.error ?? "Failed to start device login");
51
+ }
52
+ return body.data;
53
+ };
54
+ const pollDeviceToken = async (deviceCode, fetchImpl) => {
55
+ const response = await fetchImpl(deviceTokenEndpoint, {
56
+ method: "POST",
57
+ headers: { "Content-Type": "application/json" },
58
+ body: JSON.stringify({ device_code: deviceCode }),
59
+ });
60
+ const body = await response.json();
61
+ if (body.success && body.data) {
62
+ return body.data;
63
+ }
64
+ if (body.code === "AUTHORIZATION_PENDING") {
65
+ return undefined;
66
+ }
67
+ throw new Error(body.error ?? "Device login failed");
68
+ };
69
+ export const loginWithDevice = async (tokenStore, fetchImpl = fetch, onPrompt, sleepImpl = sleep) => {
70
+ const session = await startDeviceLogin(fetchImpl);
71
+ onPrompt?.({ verificationUri: session.verification_uri, userCode: session.user_code });
72
+ const deadline = Date.now() + session.expires_in * 1000;
73
+ while (Date.now() < deadline) {
74
+ await sleepImpl(session.interval * 1000);
75
+ const result = await pollDeviceToken(session.device_code, fetchImpl);
76
+ if (result) {
77
+ const tokens = createTokenSet({
78
+ AccessToken: result.access_token,
79
+ IdToken: result.id_token,
80
+ RefreshToken: result.refresh_token,
81
+ ExpiresIn: result.expires_in,
82
+ }, result.refresh_token);
83
+ await tokenStore.save(tokens);
84
+ return tokens;
85
+ }
86
+ }
87
+ throw new Error("Device login timed out. Run `akundigital login --device` again.");
88
+ };
38
89
  const refresh = async (tokens, tokenStore, fetchImpl, clientId) => {
39
90
  const response = await requestCognito("REFRESH_TOKEN_AUTH", { REFRESH_TOKEN: tokens.refreshToken }, fetchImpl, clientId);
40
91
  const result = getAuthenticationResult(response);
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,eAAe,GAAG,mDAAmD,CAAC;AAC5E,MAAM,eAAe,GAAG,4BAA4B,CAAC;AACrD,MAAM,eAAe,GAAG,wEAAwE,CAAC;AAiBjG,MAAM,cAAc,GAAG,KAAK,EAC1B,MAAmD,EACnD,UAAkC,EAClC,SAAoB,EACpB,QAAgB,EACU,EAAE;IAC5B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,4BAA4B;YAC5C,cAAc,EAAE,gDAAgD;SACjE;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;KAC3F,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,uBAAuB,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,QAAyB,EAKxD,EAAE;IACF,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,WAAW,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,aAAa,IAAI,sCAAsC,CAAC,CAAC;IACxG,CAAC;IACD,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,WAAW;QACtD,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,OAAO;QAC9C,YAAY,EAAE,QAAQ,CAAC,oBAAoB,CAAC,YAAY;QACxD,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,SAAS;KACnD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACxB,KAAa,EACb,QAAgB,EAChB,UAAsB,EACtB,YAAuB,KAAK,EAC5B,QAAQ,GAAG,eAAe,EACP,EAAE;IACrB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1H,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EACnB,MAAgB,EAChB,UAAsB,EACtB,SAAoB,EACpB,QAAgB,EACG,EAAE;IACrB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,UAAsB,EACtB,YAAuB,KAAK,EAC5B,QAAQ,GAAG,eAAe,EAC1B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EACE,EAAE;IACpB,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE;QAC9C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE;KAC3D,CAAC,CAAC;IACH,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,SAAS,CAAC,eAAe,EAAE;YAC1C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE;SAC3D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwC,CAAC;IACzE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;AAC3B,CAAC,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/commands.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getProfile, login } from "./auth.js";
1
+ import { getProfile, login, loginWithDevice } from "./auth.js";
2
2
  import { createTokenStore } from "./token-store.js";
3
3
  export const createCommands = (version) => ({
4
4
  help: {
@@ -10,7 +10,7 @@ export const createCommands = (version) => ({
10
10
  "Commands:",
11
11
  " help Show available commands",
12
12
  " version Show the installed version",
13
- " login Log in with email and password",
13
+ " login Log in with email and password, or `login --device` for browser-assisted login",
14
14
  " profile Show the current user profile",
15
15
  "",
16
16
  "Run `akundigital <command> --help` for command-specific help.",
@@ -26,10 +26,27 @@ export const createCommands = (version) => ({
26
26
  },
27
27
  },
28
28
  login: {
29
- description: "Log in with email and password",
29
+ description: "Log in with email and password, or `login --device` for browser-assisted login",
30
30
  run: async ({ args, output, error }) => {
31
- if (args.length !== 2 || args.includes("--help")) {
32
- error("Usage: akundigital login <email> <password>");
31
+ if (args.includes("--help")) {
32
+ error("Usage: akundigital login <email> <password>\n or: akundigital login --device");
33
+ return 1;
34
+ }
35
+ if (args.includes("--device")) {
36
+ try {
37
+ await loginWithDevice(createTokenStore(), fetch, ({ verificationUri, userCode }) => {
38
+ output(`Open ${verificationUri} in a browser and enter code: ${userCode}`);
39
+ });
40
+ output("Logged in successfully.");
41
+ return 0;
42
+ }
43
+ catch (loginError) {
44
+ error(loginError instanceof Error ? loginError.message : "Authentication failed");
45
+ return 1;
46
+ }
47
+ }
48
+ if (args.length !== 2) {
49
+ error("Usage: akundigital login <email> <password>\n or: akundigital login --device");
33
50
  return 1;
34
51
  }
35
52
  try {
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akundigital",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "A command-line interface for AkunDigital.",
5
5
  "type": "module",
6
6
  "bin": {