@keeper-security/keeper-sdk-javascript 0.1.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.
Files changed (173) hide show
  1. package/dist/auth/ConsoleAuthUI.d.ts +10 -0
  2. package/dist/auth/ConsoleAuthUI.js +152 -0
  3. package/dist/auth/ConsoleAuthUI.js.map +1 -0
  4. package/dist/auth/ConsoleLogin.d.ts +8 -0
  5. package/dist/auth/ConsoleLogin.js +266 -0
  6. package/dist/auth/ConsoleLogin.js.map +1 -0
  7. package/dist/auth/SessionManager.d.ts +66 -0
  8. package/dist/auth/SessionManager.js +211 -0
  9. package/dist/auth/SessionManager.js.map +1 -0
  10. package/dist/index.d.ts +17 -0
  11. package/dist/index.js +61 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/records/RecordOperations.d.ts +79 -0
  14. package/dist/records/RecordOperations.js +346 -0
  15. package/dist/records/RecordOperations.js.map +1 -0
  16. package/dist/records/RecordUtils.d.ts +36 -0
  17. package/dist/records/RecordUtils.js +224 -0
  18. package/dist/records/RecordUtils.js.map +1 -0
  19. package/dist/sharing/Sharing.d.ts +27 -0
  20. package/dist/sharing/Sharing.js +125 -0
  21. package/dist/sharing/Sharing.js.map +1 -0
  22. package/dist/src/auth/ConsoleAuthUI.d.ts +10 -0
  23. package/dist/src/auth/ConsoleAuthUI.js +161 -0
  24. package/dist/src/auth/ConsoleAuthUI.js.map +1 -0
  25. package/dist/src/auth/ConsoleLogin.d.ts +8 -0
  26. package/dist/src/auth/ConsoleLogin.js +311 -0
  27. package/dist/src/auth/ConsoleLogin.js.map +1 -0
  28. package/dist/src/auth/SessionManager.d.ts +67 -0
  29. package/dist/src/auth/SessionManager.js +212 -0
  30. package/dist/src/auth/SessionManager.js.map +1 -0
  31. package/dist/src/folders/FolderManager.d.ts +57 -0
  32. package/dist/src/folders/FolderManager.js +108 -0
  33. package/dist/src/folders/FolderManager.js.map +1 -0
  34. package/dist/src/folders/addFolder.d.ts +32 -0
  35. package/dist/src/folders/addFolder.js +207 -0
  36. package/dist/src/folders/addFolder.js.map +1 -0
  37. package/dist/src/folders/changeDirectory.d.ts +19 -0
  38. package/dist/src/folders/changeDirectory.js +171 -0
  39. package/dist/src/folders/changeDirectory.js.map +1 -0
  40. package/dist/src/folders/deleteFolder.d.ts +17 -0
  41. package/dist/src/folders/deleteFolder.js +237 -0
  42. package/dist/src/folders/deleteFolder.js.map +1 -0
  43. package/dist/src/folders/folderHelpers.d.ts +48 -0
  44. package/dist/src/folders/folderHelpers.js +100 -0
  45. package/dist/src/folders/folderHelpers.js.map +1 -0
  46. package/dist/src/folders/folderTree.d.ts +29 -0
  47. package/dist/src/folders/folderTree.js +250 -0
  48. package/dist/src/folders/folderTree.js.map +1 -0
  49. package/dist/src/folders/getFolder.d.ts +56 -0
  50. package/dist/src/folders/getFolder.js +143 -0
  51. package/dist/src/folders/getFolder.js.map +1 -0
  52. package/dist/src/folders/listFolder.d.ts +48 -0
  53. package/dist/src/folders/listFolder.js +276 -0
  54. package/dist/src/folders/listFolder.js.map +1 -0
  55. package/dist/src/folders/updateFolder.d.ts +31 -0
  56. package/dist/src/folders/updateFolder.js +137 -0
  57. package/dist/src/folders/updateFolder.js.map +1 -0
  58. package/dist/src/index.d.ts +49 -0
  59. package/dist/src/index.js +151 -0
  60. package/dist/src/index.js.map +1 -0
  61. package/dist/src/records/RecordOperations.d.ts +80 -0
  62. package/dist/src/records/RecordOperations.js +356 -0
  63. package/dist/src/records/RecordOperations.js.map +1 -0
  64. package/dist/src/records/RecordUtils.d.ts +37 -0
  65. package/dist/src/records/RecordUtils.js +263 -0
  66. package/dist/src/records/RecordUtils.js.map +1 -0
  67. package/dist/src/records/Totp.d.ts +14 -0
  68. package/dist/src/records/Totp.js +111 -0
  69. package/dist/src/records/Totp.js.map +1 -0
  70. package/dist/src/sharedFolders/SharedFolderManager.d.ts +20 -0
  71. package/dist/src/sharedFolders/SharedFolderManager.js +33 -0
  72. package/dist/src/sharedFolders/SharedFolderManager.js.map +1 -0
  73. package/dist/src/sharedFolders/listSharedFolders.d.ts +29 -0
  74. package/dist/src/sharedFolders/listSharedFolders.js +127 -0
  75. package/dist/src/sharedFolders/listSharedFolders.js.map +1 -0
  76. package/dist/src/sharedFolders/shareFolder.d.ts +36 -0
  77. package/dist/src/sharedFolders/shareFolder.js +352 -0
  78. package/dist/src/sharedFolders/shareFolder.js.map +1 -0
  79. package/dist/src/sharing/Sharing.d.ts +50 -0
  80. package/dist/src/sharing/Sharing.js +195 -0
  81. package/dist/src/sharing/Sharing.js.map +1 -0
  82. package/dist/src/storage/InMemoryStorage.d.ts +24 -0
  83. package/dist/src/storage/InMemoryStorage.js +139 -0
  84. package/dist/src/storage/InMemoryStorage.js.map +1 -0
  85. package/dist/src/teams/TeamManager.d.ts +17 -0
  86. package/dist/src/teams/TeamManager.js +38 -0
  87. package/dist/src/teams/TeamManager.js.map +1 -0
  88. package/dist/src/teams/enterpriseData.d.ts +106 -0
  89. package/dist/src/teams/enterpriseData.js +319 -0
  90. package/dist/src/teams/enterpriseData.js.map +1 -0
  91. package/dist/src/teams/listTeams.d.ts +42 -0
  92. package/dist/src/teams/listTeams.js +308 -0
  93. package/dist/src/teams/listTeams.js.map +1 -0
  94. package/dist/src/teams/viewTeam.d.ts +35 -0
  95. package/dist/src/teams/viewTeam.js +177 -0
  96. package/dist/src/teams/viewTeam.js.map +1 -0
  97. package/dist/src/utils/Logger.d.ts +28 -0
  98. package/dist/src/utils/Logger.js +62 -0
  99. package/dist/src/utils/Logger.js.map +1 -0
  100. package/dist/src/utils/constants.d.ts +50 -0
  101. package/dist/src/utils/constants.js +64 -0
  102. package/dist/src/utils/constants.js.map +1 -0
  103. package/dist/src/utils/errors.d.ts +10 -0
  104. package/dist/src/utils/errors.js +117 -0
  105. package/dist/src/utils/errors.js.map +1 -0
  106. package/dist/src/utils/guards.d.ts +7 -0
  107. package/dist/src/utils/guards.js +29 -0
  108. package/dist/src/utils/guards.js.map +1 -0
  109. package/dist/src/utils/index.d.ts +7 -0
  110. package/dist/src/utils/index.js +39 -0
  111. package/dist/src/utils/index.js.map +1 -0
  112. package/dist/src/utils/patterns.d.ts +9 -0
  113. package/dist/src/utils/patterns.js +20 -0
  114. package/dist/src/utils/patterns.js.map +1 -0
  115. package/dist/src/utils/types.d.ts +12 -0
  116. package/dist/src/utils/types.js +3 -0
  117. package/dist/src/utils/types.js.map +1 -0
  118. package/dist/src/vault/KeeperVault.d.ts +116 -0
  119. package/dist/src/vault/KeeperVault.js +443 -0
  120. package/dist/src/vault/KeeperVault.js.map +1 -0
  121. package/dist/storage/InMemoryStorage.d.ts +24 -0
  122. package/dist/storage/InMemoryStorage.js +132 -0
  123. package/dist/storage/InMemoryStorage.js.map +1 -0
  124. package/dist/utils/Logger.d.ts +28 -0
  125. package/dist/utils/Logger.js +62 -0
  126. package/dist/utils/Logger.js.map +1 -0
  127. package/dist/utils/constants.d.ts +26 -0
  128. package/dist/utils/constants.js +37 -0
  129. package/dist/utils/constants.js.map +1 -0
  130. package/dist/utils/errors.d.ts +10 -0
  131. package/dist/utils/errors.js +117 -0
  132. package/dist/utils/errors.js.map +1 -0
  133. package/dist/utils/index.d.ts +4 -0
  134. package/dist/utils/index.js +22 -0
  135. package/dist/utils/index.js.map +1 -0
  136. package/dist/vault/KeeperVault.d.ts +72 -0
  137. package/dist/vault/KeeperVault.js +338 -0
  138. package/dist/vault/KeeperVault.js.map +1 -0
  139. package/package.json +32 -0
  140. package/src/auth/ConsoleAuthUI.ts +169 -0
  141. package/src/auth/ConsoleLogin.ts +351 -0
  142. package/src/auth/SessionManager.ts +293 -0
  143. package/src/folders/FolderManager.ts +174 -0
  144. package/src/folders/addFolder.ts +294 -0
  145. package/src/folders/changeDirectory.ts +217 -0
  146. package/src/folders/deleteFolder.ts +293 -0
  147. package/src/folders/folderHelpers.ts +99 -0
  148. package/src/folders/folderTree.ts +321 -0
  149. package/src/folders/getFolder.ts +234 -0
  150. package/src/folders/listFolder.ts +358 -0
  151. package/src/folders/updateFolder.ts +210 -0
  152. package/src/index.ts +242 -0
  153. package/src/records/RecordOperations.ts +549 -0
  154. package/src/records/RecordUtils.ts +282 -0
  155. package/src/records/Totp.ts +119 -0
  156. package/src/sharedFolders/SharedFolderManager.ts +57 -0
  157. package/src/sharedFolders/listSharedFolders.ts +173 -0
  158. package/src/sharedFolders/shareFolder.ts +457 -0
  159. package/src/sharing/Sharing.ts +282 -0
  160. package/src/storage/InMemoryStorage.ts +163 -0
  161. package/src/teams/TeamManager.ts +61 -0
  162. package/src/teams/enterpriseData.ts +453 -0
  163. package/src/teams/listTeams.ts +373 -0
  164. package/src/teams/viewTeam.ts +248 -0
  165. package/src/utils/Logger.ts +71 -0
  166. package/src/utils/constants.ts +63 -0
  167. package/src/utils/errors.ts +108 -0
  168. package/src/utils/guards.ts +24 -0
  169. package/src/utils/index.ts +22 -0
  170. package/src/utils/patterns.ts +20 -0
  171. package/src/utils/types.ts +11 -0
  172. package/src/vault/KeeperVault.ts +612 -0
  173. package/tsconfig.json +16 -0
@@ -0,0 +1,10 @@
1
+ import type { AuthUI3, DeviceApprovalChannel, TwoFactorChannelData } from '@keeper-security/keeperapi';
2
+ export declare class ConsoleAuthUI implements AuthUI3 {
3
+ private static readonly DEVICE_VERIFICATION;
4
+ private static channelName;
5
+ private static twoFactorChannelName;
6
+ private static waitWithCancel;
7
+ waitForDeviceApproval(channels: DeviceApprovalChannel[], isCloud: boolean): Promise<boolean>;
8
+ waitForTwoFactorCode(channels: TwoFactorChannelData[], cancel: Promise<void>): Promise<boolean>;
9
+ getPassword(isAlternate: boolean): Promise<string>;
10
+ }
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConsoleAuthUI = void 0;
7
+ const promises_1 = __importDefault(require("readline/promises"));
8
+ const promises_2 = require("timers/promises");
9
+ const keeperapi_1 = require("@keeper-security/keeperapi");
10
+ const utils_1 = require("../utils");
11
+ class ConsoleAuthUI {
12
+ static channelName(channel) {
13
+ switch (channel) {
14
+ case ConsoleAuthUI.DEVICE_VERIFICATION.Email:
15
+ return 'Email Verification';
16
+ case ConsoleAuthUI.DEVICE_VERIFICATION.KeeperPush:
17
+ return 'Keeper Push';
18
+ case ConsoleAuthUI.DEVICE_VERIFICATION.TFA:
19
+ return 'Two-Factor Authentication';
20
+ case ConsoleAuthUI.DEVICE_VERIFICATION.AdminApproval:
21
+ return 'Admin Approval';
22
+ default:
23
+ return `Channel ${channel}`;
24
+ }
25
+ }
26
+ static twoFactorChannelName(channelType) {
27
+ switch (channelType) {
28
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_TOTP:
29
+ return 'Authenticator App (TOTP)';
30
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_SMS:
31
+ return 'SMS';
32
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_DUO:
33
+ return 'Duo Security';
34
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_RSA:
35
+ return 'RSA SecurID';
36
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_DNA:
37
+ return 'Keeper DNA';
38
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_U2F:
39
+ return 'U2F Security Key';
40
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_WEBAUTHN:
41
+ return 'WebAuthn Security Key';
42
+ case keeperapi_1.Authentication.TwoFactorChannelType.TWO_FA_CT_KEEPER:
43
+ return 'Keeper';
44
+ default:
45
+ throw new utils_1.KeeperSdkError(`Unsupported 2FA channel type: ${channelType}`, utils_1.ResultCodes.UNSUPPORTED_2FA_CHANNEL);
46
+ }
47
+ }
48
+ static async waitWithCancel(timeoutMs, cancel) {
49
+ if (!cancel) {
50
+ await (0, promises_2.setTimeout)(timeoutMs);
51
+ return;
52
+ }
53
+ await Promise.race([(0, promises_2.setTimeout)(timeoutMs), cancel]);
54
+ }
55
+ async waitForDeviceApproval(channels, isCloud) {
56
+ const rl = promises_1.default.createInterface({ input: process.stdin, output: process.stdout });
57
+ try {
58
+ utils_1.logger.info('\n--- Device Approval Required ---');
59
+ utils_1.logger.info('This device needs to be approved before you can log in.');
60
+ utils_1.logger.info('Available verification methods:');
61
+ channels.forEach((ch, i) => {
62
+ utils_1.logger.info(` ${i + 1}. ${ConsoleAuthUI.channelName(ch.channel)}`);
63
+ });
64
+ const choice = (await rl.question('\nSelect method (number): ')).trim();
65
+ const idx = parseInt(choice, 10) - 1;
66
+ if (isNaN(idx) || idx < 0 || idx >= channels.length) {
67
+ utils_1.logger.warn('Invalid selection, cancelling.');
68
+ return false;
69
+ }
70
+ const selected = channels[idx];
71
+ utils_1.logger.info(`\nSending ${ConsoleAuthUI.channelName(selected.channel)} request...`);
72
+ await selected.sendApprovalRequest();
73
+ if (selected.validateCode) {
74
+ const code = (await rl.question('Enter verification code: ')).trim();
75
+ if (!code)
76
+ return false;
77
+ await selected.validateCode(code);
78
+ }
79
+ else {
80
+ utils_1.logger.info('Approval request sent. Waiting for approval on your other device...');
81
+ await ConsoleAuthUI.waitWithCancel(utils_1.AuthDefaults.APPROVAL_TIMEOUT_MS);
82
+ }
83
+ return true;
84
+ }
85
+ catch (e) {
86
+ utils_1.logger.error('Device approval error:', (0, utils_1.extractErrorMessage)(e));
87
+ return false;
88
+ }
89
+ finally {
90
+ rl.close();
91
+ }
92
+ }
93
+ async waitForTwoFactorCode(channels, cancel) {
94
+ const rl = promises_1.default.createInterface({ input: process.stdin, output: process.stdout });
95
+ try {
96
+ utils_1.logger.info('\n--- Two-Factor Authentication Required ---');
97
+ utils_1.logger.info('Available 2FA methods:');
98
+ channels.forEach((ch, i) => {
99
+ const name = ConsoleAuthUI.twoFactorChannelName(ch.channel.channelType);
100
+ utils_1.logger.info(` ${i + 1}. ${name}`);
101
+ });
102
+ const choice = (await rl.question('\nSelect method (number): ')).trim();
103
+ const idx = parseInt(choice, 10) - 1;
104
+ if (isNaN(idx) || idx < 0 || idx >= channels.length) {
105
+ utils_1.logger.warn('Invalid selection, cancelling.');
106
+ return false;
107
+ }
108
+ const selected = channels[idx];
109
+ const name = ConsoleAuthUI.twoFactorChannelName(selected.channel.channelType);
110
+ if (selected.availablePushes && selected.availablePushes.length > 0) {
111
+ const pushChoice = (await rl.question(`Send push notification for ${name}? (y/n): `)).trim();
112
+ if (pushChoice.toLowerCase() === 'y' && selected.sendPush) {
113
+ selected.sendPush(selected.availablePushes[0]);
114
+ utils_1.logger.info('Push sent. Waiting for approval...');
115
+ await ConsoleAuthUI.waitWithCancel(utils_1.AuthDefaults.APPROVAL_TIMEOUT_MS, cancel);
116
+ return true;
117
+ }
118
+ }
119
+ const code = (await rl.question(`Enter ${name} code: `)).trim();
120
+ if (!code)
121
+ return false;
122
+ selected.sendCode(code);
123
+ await ConsoleAuthUI.waitWithCancel(utils_1.AuthDefaults.CODE_VALIDATION_DELAY_MS, cancel);
124
+ return true;
125
+ }
126
+ catch (e) {
127
+ utils_1.logger.error('2FA error:', (0, utils_1.extractErrorMessage)(e));
128
+ return false;
129
+ }
130
+ finally {
131
+ rl.close();
132
+ }
133
+ }
134
+ async getPassword(isAlternate) {
135
+ const rl = promises_1.default.createInterface({ input: process.stdin, output: process.stdout });
136
+ try {
137
+ const label = isAlternate ? 'alternate master password' : 'master password';
138
+ return (await rl.question(`Enter your ${label}: `)).trim();
139
+ }
140
+ finally {
141
+ rl.close();
142
+ }
143
+ }
144
+ }
145
+ exports.ConsoleAuthUI = ConsoleAuthUI;
146
+ ConsoleAuthUI.DEVICE_VERIFICATION = {
147
+ Email: 0,
148
+ KeeperPush: 1,
149
+ TFA: 2,
150
+ AdminApproval: 3,
151
+ };
152
+ //# sourceMappingURL=ConsoleAuthUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleAuthUI.js","sourceRoot":"","sources":["../../src/auth/ConsoleAuthUI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { KeeperVault } from '../vault/KeeperVault';
2
+ import type { KeeperJsonConfig } from './SessionManager';
3
+ export declare function prompt(question: string, masked?: boolean): Promise<string>;
4
+ export declare function loadKeeperConfig(preloaded?: KeeperJsonConfig): Promise<KeeperJsonConfig>;
5
+ export declare function resolveServer(username?: string, preloadedConfig?: KeeperJsonConfig): Promise<string>;
6
+ export declare function suppressLogs(): () => void;
7
+ export declare function login(): Promise<KeeperVault>;
8
+ export declare function cleanup(vault: KeeperVault): void;
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanup = exports.login = exports.suppressLogs = exports.resolveServer = exports.loadKeeperConfig = exports.prompt = void 0;
7
+ const promises_1 = __importDefault(require("readline/promises"));
8
+ const KeeperVault_1 = require("../vault/KeeperVault");
9
+ const utils_1 = require("../utils");
10
+ const SessionManager_1 = require("./SessionManager");
11
+ const defaultConfigLoader = new SessionManager_1.FileConfigLoader();
12
+ let rlManager = null;
13
+ let suppressionDepth = 0;
14
+ let originals = null;
15
+ var CliCharAction;
16
+ (function (CliCharAction) {
17
+ CliCharAction[CliCharAction["Submit"] = 0] = "Submit";
18
+ CliCharAction[CliCharAction["Cancel"] = 1] = "Cancel";
19
+ CliCharAction[CliCharAction["Backspace"] = 2] = "Backspace";
20
+ CliCharAction[CliCharAction["Append"] = 3] = "Append";
21
+ })(CliCharAction || (CliCharAction = {}));
22
+ function classifyInputChar(ch) {
23
+ if (ch === '\n' || ch === '\r')
24
+ return CliCharAction.Submit;
25
+ if (ch === '\u0003')
26
+ return CliCharAction.Cancel;
27
+ if (ch === '\u007F' || ch === '\b')
28
+ return CliCharAction.Backspace;
29
+ return CliCharAction.Append;
30
+ }
31
+ class ReadlineManager {
32
+ constructor() {
33
+ this.rl = null;
34
+ }
35
+ getOrCreate() {
36
+ if (!this.rl) {
37
+ this.rl = promises_1.default.createInterface({
38
+ input: process.stdin,
39
+ output: process.stdout,
40
+ });
41
+ }
42
+ return this.rl;
43
+ }
44
+ async question(query) {
45
+ const rl = this.getOrCreate();
46
+ const answer = await rl.question(query);
47
+ return answer.trim();
48
+ }
49
+ close() {
50
+ if (this.rl) {
51
+ this.rl.close();
52
+ this.rl = null;
53
+ }
54
+ }
55
+ }
56
+ function getReadlineManager() {
57
+ if (!rlManager) {
58
+ rlManager = new ReadlineManager();
59
+ }
60
+ return rlManager;
61
+ }
62
+ function prompt(question, masked = false) {
63
+ const mgr = getReadlineManager();
64
+ if (!masked) {
65
+ return mgr.question(question);
66
+ }
67
+ return new Promise((resolve, reject) => {
68
+ mgr.close();
69
+ process.stdout.write(question);
70
+ let buf = '';
71
+ process.stdin.setRawMode(true);
72
+ process.stdin.resume();
73
+ process.stdin.setEncoding('utf8');
74
+ function exitRawMode() {
75
+ process.stdout.write('\n');
76
+ process.stdin.setRawMode(false);
77
+ process.stdin.pause();
78
+ process.stdin.removeListener('data', onData);
79
+ }
80
+ const onData = (str) => {
81
+ for (const ch of str) {
82
+ switch (classifyInputChar(ch)) {
83
+ case CliCharAction.Submit:
84
+ exitRawMode();
85
+ resolve(buf.trim());
86
+ return;
87
+ case CliCharAction.Cancel:
88
+ exitRawMode();
89
+ reject(new utils_1.KeeperSdkError('Operation cancelled by user.', utils_1.ResultCodes.USER_CANCELLED));
90
+ return;
91
+ case CliCharAction.Backspace:
92
+ if (buf.length > 0) {
93
+ buf = buf.slice(0, -1);
94
+ process.stdout.write('\b \b');
95
+ }
96
+ break;
97
+ case CliCharAction.Append:
98
+ buf += ch;
99
+ process.stdout.write('*');
100
+ break;
101
+ }
102
+ }
103
+ };
104
+ process.stdin.on('data', onData);
105
+ });
106
+ }
107
+ exports.prompt = prompt;
108
+ async function loadKeeperConfig(preloaded) {
109
+ if (preloaded)
110
+ return preloaded;
111
+ return defaultConfigLoader.load();
112
+ }
113
+ exports.loadKeeperConfig = loadKeeperConfig;
114
+ async function resolveServer(username, preloadedConfig) {
115
+ const config = await loadKeeperConfig(preloadedConfig);
116
+ const configServer = config.last_server || config.server;
117
+ if (username) {
118
+ const users = config.users || [];
119
+ const userEntry = users.find((u) => { var _a; return ((_a = u.user) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === username.toLowerCase(); });
120
+ if (userEntry === null || userEntry === void 0 ? void 0 : userEntry.server)
121
+ return userEntry.server;
122
+ }
123
+ if (configServer)
124
+ return configServer;
125
+ utils_1.logger.info('Select server region:');
126
+ const entries = Object.entries(utils_1.KEEPER_PUBLIC_HOSTS);
127
+ entries.forEach(([region, host], i) => {
128
+ utils_1.logger.info(` ${i + 1}. ${region} (${host})`);
129
+ });
130
+ utils_1.logger.info(` Or enter a hostname directly (e.g. dev.keepersecurity.com)`);
131
+ const choice = await prompt('Region [1 = US]: ');
132
+ if (!choice)
133
+ return utils_1.KEEPER_PUBLIC_HOSTS.US;
134
+ const idx = parseInt(choice, 10) - 1;
135
+ if (idx >= 0 && idx < entries.length)
136
+ return entries[idx][1];
137
+ const byName = utils_1.KEEPER_PUBLIC_HOSTS[choice.toUpperCase()];
138
+ if (byName)
139
+ return byName;
140
+ return choice;
141
+ }
142
+ exports.resolveServer = resolveServer;
143
+ function suppressLogs() {
144
+ if (suppressionDepth === 0) {
145
+ originals = {
146
+ log: console.log,
147
+ warn: console.warn,
148
+ debug: console.debug,
149
+ error: console.error,
150
+ stdoutWrite: process.stdout.write.bind(process.stdout),
151
+ stderrWrite: process.stderr.write.bind(process.stderr),
152
+ };
153
+ console.log = () => { };
154
+ console.warn = () => { };
155
+ console.debug = () => { };
156
+ console.error = () => { };
157
+ process.stdout.write = (() => true);
158
+ process.stderr.write = (() => true);
159
+ }
160
+ suppressionDepth++;
161
+ let restored = false;
162
+ return () => {
163
+ if (restored)
164
+ return;
165
+ restored = true;
166
+ suppressionDepth--;
167
+ if (suppressionDepth === 0 && originals) {
168
+ console.log = originals.log;
169
+ console.warn = originals.warn;
170
+ console.debug = originals.debug;
171
+ console.error = originals.error;
172
+ process.stdout.write = originals.stdoutWrite;
173
+ process.stderr.write = originals.stderrWrite;
174
+ originals = null;
175
+ }
176
+ };
177
+ }
178
+ exports.suppressLogs = suppressLogs;
179
+ async function withSuppressedOutput(fn) {
180
+ const restore = suppressLogs();
181
+ try {
182
+ return await fn();
183
+ }
184
+ finally {
185
+ restore();
186
+ }
187
+ }
188
+ async function login() {
189
+ const config = await loadKeeperConfig();
190
+ const defaultUsername = config.last_login || config.user || '';
191
+ const host = defaultUsername
192
+ ? await resolveServer(defaultUsername, config)
193
+ : undefined;
194
+ if (defaultUsername && host) {
195
+ const vault = await tryPersistentLogin(host, defaultUsername);
196
+ if (vault)
197
+ return vault;
198
+ }
199
+ let username;
200
+ if (defaultUsername) {
201
+ utils_1.logger.info(`Enter master password for ${defaultUsername}`);
202
+ username = defaultUsername;
203
+ }
204
+ else {
205
+ username = await prompt('Username (email): ');
206
+ }
207
+ if (!username) {
208
+ throw new utils_1.KeeperSdkError('Username is required.', utils_1.ResultCodes.MISSING_USERNAME);
209
+ }
210
+ const resolvedHost = host || await resolveServer(username, config);
211
+ return await interactiveLogin(resolvedHost, username);
212
+ }
213
+ exports.login = login;
214
+ async function tryPersistentLogin(host, username) {
215
+ const vault = new KeeperVault_1.KeeperVault({ host, clientVersion: utils_1.SdkDefaults.CLIENT_VERSION });
216
+ try {
217
+ await withSuppressedOutput(() => vault.resumeSession());
218
+ utils_1.logger.info(`Logging in to Keeper as ${username}`);
219
+ utils_1.logger.info('Successfully authenticated with Persistent Login');
220
+ return await syncVault(vault);
221
+ }
222
+ catch (err) {
223
+ utils_1.logger.debug('Persistent login failed:', (0, utils_1.extractErrorMessage)(err));
224
+ vault.disconnect();
225
+ return null;
226
+ }
227
+ }
228
+ async function interactiveLogin(host, username) {
229
+ const vault = new KeeperVault_1.KeeperVault({ host, clientVersion: utils_1.SdkDefaults.CLIENT_VERSION });
230
+ for (let attempt = 1; attempt <= utils_1.AuthDefaults.MAX_LOGIN_ATTEMPTS; attempt++) {
231
+ const password = await prompt('Password: ', true);
232
+ if (!password) {
233
+ throw new utils_1.KeeperSdkError('Password is required.', utils_1.ResultCodes.MISSING_PASSWORD);
234
+ }
235
+ try {
236
+ await withSuppressedOutput(() => vault.login(username, password));
237
+ utils_1.logger.info('Successfully authenticated with Master Password\n');
238
+ return await syncVault(vault);
239
+ }
240
+ catch (err) {
241
+ const resultCode = (0, utils_1.extractResultCode)(err);
242
+ if (resultCode === utils_1.ResultCodes.INVALID_CREDENTIALS) {
243
+ const remaining = utils_1.AuthDefaults.MAX_LOGIN_ATTEMPTS - attempt;
244
+ if (remaining > 0) {
245
+ utils_1.logger.warn(`Invalid credentials (${remaining} attempt${remaining === 1 ? '' : 's'} remaining)`);
246
+ continue;
247
+ }
248
+ throw new utils_1.KeeperSdkError(`Maximum login attempts (${utils_1.AuthDefaults.MAX_LOGIN_ATTEMPTS}) exceeded.`, utils_1.ResultCodes.MAX_ATTEMPTS_EXCEEDED);
249
+ }
250
+ throw utils_1.KeeperSdkError.from(err);
251
+ }
252
+ }
253
+ throw new utils_1.KeeperSdkError(`Maximum login attempts (${utils_1.AuthDefaults.MAX_LOGIN_ATTEMPTS}) exceeded.`, utils_1.ResultCodes.MAX_ATTEMPTS_EXCEEDED);
254
+ }
255
+ async function syncVault(vault) {
256
+ utils_1.logger.info('Syncing vault...');
257
+ await withSuppressedOutput(() => vault.sync());
258
+ utils_1.logger.info(`Vault synced. ${vault.getSummary().recordCount} records loaded.\n`);
259
+ return vault;
260
+ }
261
+ function cleanup(vault) {
262
+ vault.disconnect();
263
+ getReadlineManager().close();
264
+ }
265
+ exports.cleanup = cleanup;
266
+ //# sourceMappingURL=ConsoleLogin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleLogin.js","sourceRoot":"","sources":["../../src/auth/ConsoleLogin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { type DeviceConfig, type SessionStorage, type KeeperHost, type SessionParams } from '@keeper-security/keeperapi';
2
+ export type ConfigurationUser = {
3
+ user?: string;
4
+ server?: string;
5
+ last_device?: {
6
+ device_token?: string;
7
+ };
8
+ };
9
+ export type ConfigurationServerConfig = {
10
+ server?: string;
11
+ clone_code?: string;
12
+ };
13
+ export type ConfigurationDeviceConfig = {
14
+ device_token?: string;
15
+ private_key?: string;
16
+ server_info?: Array<ConfigurationServerConfig>;
17
+ };
18
+ export type KeeperJsonConfig = {
19
+ last_login?: string;
20
+ last_server?: string;
21
+ user?: string;
22
+ server?: string;
23
+ device_token?: string;
24
+ private_key?: string;
25
+ clone_code?: string;
26
+ users?: Array<ConfigurationUser>;
27
+ devices?: Array<ConfigurationDeviceConfig>;
28
+ };
29
+ export interface ConfigLoader {
30
+ load(): Promise<KeeperJsonConfig>;
31
+ save(config: KeeperJsonConfig): Promise<void>;
32
+ readonly configDir: string;
33
+ }
34
+ export declare class FileConfigLoader implements ConfigLoader {
35
+ readonly configDir: string;
36
+ constructor(configDir?: string);
37
+ load(): Promise<KeeperJsonConfig>;
38
+ save(config: KeeperJsonConfig): Promise<void>;
39
+ }
40
+ export declare class SessionManager implements SessionStorage {
41
+ private readonly configLoader;
42
+ private sessionParams;
43
+ private _lastUsername?;
44
+ private _keeperConfig;
45
+ private _deviceCache;
46
+ private sessionDevices;
47
+ private sessionCloneCodes;
48
+ constructor(configDir?: string);
49
+ constructor(loader: ConfigLoader);
50
+ get configDir(): string;
51
+ get lastUsername(): string | undefined;
52
+ getLastUsername(): Promise<string | undefined>;
53
+ getDeviceConfig(host: string): Promise<DeviceConfig>;
54
+ createOnDeviceConfig(host: string): (deviceConfig: DeviceConfig) => Promise<void>;
55
+ private cloneCodeKey;
56
+ getCloneCode(host: KeeperHost, username: string): Promise<Uint8Array | null>;
57
+ saveCloneCode(host: KeeperHost, username: string, cloneCode: Uint8Array): Promise<void>;
58
+ private updateKeeperConfigCloneCode;
59
+ getSessionParameters(): Promise<SessionParams | null>;
60
+ saveSessionParameters(params: Partial<SessionParams>): Promise<void>;
61
+ setLastUsername(username: string): void;
62
+ private loadKeeperConfig;
63
+ private findDeviceInKeeperConfig;
64
+ private lookupDeviceInKeeperConfig;
65
+ static isValidKeeperConfig(value: unknown): value is KeeperJsonConfig;
66
+ }