onboardconnect-agent 0.1.1

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 (58) hide show
  1. package/dist/crypto.d.ts +3 -0
  2. package/dist/crypto.d.ts.map +1 -0
  3. package/dist/crypto.js +12 -0
  4. package/dist/crypto.js.map +1 -0
  5. package/dist/heartbeat.d.ts +17 -0
  6. package/dist/heartbeat.d.ts.map +1 -0
  7. package/dist/heartbeat.js +86 -0
  8. package/dist/heartbeat.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +81 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/ldap.d.ts +31 -0
  14. package/dist/ldap.d.ts.map +1 -0
  15. package/dist/ldap.js +420 -0
  16. package/dist/ldap.js.map +1 -0
  17. package/dist/logger.d.ts +9 -0
  18. package/dist/logger.d.ts.map +1 -0
  19. package/dist/logger.js +47 -0
  20. package/dist/logger.js.map +1 -0
  21. package/dist/relay.d.ts +38 -0
  22. package/dist/relay.d.ts.map +1 -0
  23. package/dist/relay.js +347 -0
  24. package/dist/relay.js.map +1 -0
  25. package/dist/request-log.d.ts +24 -0
  26. package/dist/request-log.d.ts.map +1 -0
  27. package/dist/request-log.js +52 -0
  28. package/dist/request-log.js.map +1 -0
  29. package/dist/server.d.ts +30 -0
  30. package/dist/server.d.ts.map +1 -0
  31. package/dist/server.js +509 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/setup.d.ts +3 -0
  34. package/dist/setup.d.ts.map +1 -0
  35. package/dist/setup.js +342 -0
  36. package/dist/setup.js.map +1 -0
  37. package/dist/store.d.ts +53 -0
  38. package/dist/store.d.ts.map +1 -0
  39. package/dist/store.js +170 -0
  40. package/dist/store.js.map +1 -0
  41. package/dist/uninstall.d.ts +2 -0
  42. package/dist/uninstall.d.ts.map +1 -0
  43. package/dist/uninstall.js +127 -0
  44. package/dist/uninstall.js.map +1 -0
  45. package/dist/updater.d.ts +4 -0
  46. package/dist/updater.d.ts.map +1 -0
  47. package/dist/updater.js +30 -0
  48. package/dist/updater.js.map +1 -0
  49. package/package.json +62 -0
  50. package/scripts/install.ps1 +133 -0
  51. package/scripts/install.sh +132 -0
  52. package/scripts/postinstall.js +21 -0
  53. package/scripts/postinstall.ts +24 -0
  54. package/scripts/uninstall.ps1 +93 -0
  55. package/scripts/uninstall.sh +85 -0
  56. package/ui/assets/index-Bf505_Hi.css +1 -0
  57. package/ui/assets/index-zxbHz6zx.js +71 -0
  58. package/ui/index.html +23 -0
@@ -0,0 +1,3 @@
1
+ import type { OcEncryptedPayload } from "@oc/types";
2
+ export declare function ocDecryptPayload<T>(encrypted: OcEncryptedPayload, encryptionKeyHex: string): T;
3
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,GAAG,CAAC,CAW9F"}
package/dist/crypto.js ADDED
@@ -0,0 +1,12 @@
1
+ import { createDecipheriv } from "crypto";
2
+ export function ocDecryptPayload(encrypted, encryptionKeyHex) {
3
+ const key = Buffer.from(encryptionKeyHex, "hex");
4
+ const iv = Buffer.from(encrypted.iv, "base64");
5
+ const ciphertext = Buffer.from(encrypted.ciphertext, "base64");
6
+ const tag = Buffer.from(encrypted.tag, "base64");
7
+ const decipher = createDecipheriv("aes-256-gcm", key, iv);
8
+ decipher.setAuthTag(tag);
9
+ const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
10
+ return JSON.parse(plaintext.toString("utf8"));
11
+ }
12
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG1C,MAAM,UAAU,gBAAgB,CAAI,SAA6B,EAAE,gBAAwB;IACzF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAM,CAAC;AACrD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { OcAgentCredentials } from "./store.js";
2
+ export declare class OcHeartbeat {
3
+ private credentials;
4
+ private timer;
5
+ private readonly logger;
6
+ private readonly version;
7
+ private readonly platform;
8
+ lastHeartbeatAt: string | null;
9
+ private onBlocked;
10
+ private getPaused;
11
+ constructor(credentials: OcAgentCredentials | null, onBlocked?: (reason: string) => void, getPaused?: () => boolean);
12
+ updateCredentials(creds: OcAgentCredentials): void;
13
+ start(): void;
14
+ stop(): void;
15
+ private send;
16
+ }
17
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkBrD,qBAAa,WAAW;IAUpB,OAAO,CAAC,WAAW;IATrB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IACrC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7C,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,SAAS,CAAgC;gBAGvC,WAAW,EAAE,kBAAkB,GAAG,IAAI,EAC9C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACpC,SAAS,CAAC,EAAE,MAAM,OAAO;IAM3B,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIlD,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;YAOE,IAAI;CAyCnB"}
@@ -0,0 +1,86 @@
1
+ import { createRequire } from "module";
2
+ import os from "os";
3
+ import { OcLogger } from "./logger.js";
4
+ const HEARTBEAT_INTERVAL_MS = 30_000;
5
+ function ocGetVersion() {
6
+ try {
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require("../package.json");
9
+ return pkg.version;
10
+ }
11
+ catch {
12
+ return "0.0.0";
13
+ }
14
+ }
15
+ function ocGetPlatform() {
16
+ return process.platform === "win32" ? "windows" : "linux";
17
+ }
18
+ export class OcHeartbeat {
19
+ credentials;
20
+ timer = null;
21
+ logger = new OcLogger("heartbeat");
22
+ version = ocGetVersion();
23
+ platform = ocGetPlatform();
24
+ lastHeartbeatAt = null;
25
+ onBlocked = null;
26
+ getPaused = null;
27
+ constructor(credentials, onBlocked, getPaused) {
28
+ this.credentials = credentials;
29
+ this.onBlocked = onBlocked ?? null;
30
+ this.getPaused = getPaused ?? null;
31
+ }
32
+ updateCredentials(creds) {
33
+ this.credentials = creds;
34
+ }
35
+ start() {
36
+ this.timer = setInterval(() => void this.send(), HEARTBEAT_INTERVAL_MS);
37
+ this.logger.info("Heartbeat loop started (30s interval)");
38
+ }
39
+ stop() {
40
+ if (this.timer) {
41
+ clearInterval(this.timer);
42
+ this.timer = null;
43
+ }
44
+ }
45
+ async send() {
46
+ if (!this.credentials)
47
+ return;
48
+ try {
49
+ const response = await fetch(`${this.credentials.relayUrl}/relay/${this.credentials.agentId}/heartbeat`, {
50
+ method: "POST",
51
+ headers: {
52
+ Authorization: `Bearer ${this.credentials.agentToken}`,
53
+ "Content-Type": "application/json",
54
+ },
55
+ body: JSON.stringify({
56
+ agentId: this.credentials.agentId,
57
+ tenantId: this.credentials.tenantId,
58
+ version: this.version,
59
+ platform: this.platform,
60
+ timestamp: new Date().toISOString(),
61
+ hostname: os.hostname(),
62
+ osVersion: os.version?.() ?? os.release(),
63
+ arch: os.arch(),
64
+ totalMemMb: Math.round(os.totalmem() / (1024 * 1024)),
65
+ nodeVersion: process.version,
66
+ uptime: Math.round(os.uptime()),
67
+ paused: this.getPaused !== null ? this.getPaused() : false,
68
+ }),
69
+ });
70
+ if (response.ok) {
71
+ this.lastHeartbeatAt = new Date().toISOString();
72
+ const data = await response.json();
73
+ if (data.canRun === false && this.onBlocked !== null) {
74
+ this.onBlocked(data.reason ?? "unknown");
75
+ }
76
+ }
77
+ else {
78
+ this.logger.warn("Heartbeat rejected by relay", { status: response.status });
79
+ }
80
+ }
81
+ catch (err) {
82
+ this.logger.error("Heartbeat send failed", { err });
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env node
2
+ import { randomBytes } from "crypto";
3
+ import { OcLogger } from "./logger.js";
4
+ import { OcRelay } from "./relay.js";
5
+ import { OcHeartbeat } from "./heartbeat.js";
6
+ import { OcUpdater } from "./updater.js";
7
+ import { OcStore } from "./store.js";
8
+ import { OcServer } from "./server.js";
9
+ const logger = new OcLogger("main");
10
+ const subcommand = process.argv[2];
11
+ // ─── Uninstall ────────────────────────────────────────────────────────────────
12
+ if (subcommand === "uninstall") {
13
+ const { ocUninstall } = await import("./uninstall.js");
14
+ await ocUninstall();
15
+ process.exit(0);
16
+ }
17
+ // ─── Setup ────────────────────────────────────────────────────────────────────
18
+ if (subcommand === "setup") {
19
+ const { default: setup } = await import("./setup.js");
20
+ await setup();
21
+ process.exit(0);
22
+ }
23
+ async function ocMain() {
24
+ logger.info("OnboardConnect On-Prem Agent starting...");
25
+ // Check for updates on startup
26
+ const updater = new OcUpdater();
27
+ await updater.checkForUpdates();
28
+ const store = new OcStore();
29
+ const credentials = await store.loadCredentials();
30
+ if (credentials) {
31
+ logger.info(`Agent ID: ${credentials.agentId}`);
32
+ logger.info(`Tenant ID: ${credentials.tenantId}`);
33
+ }
34
+ else {
35
+ logger.info("No credentials found — starting in setup mode. Open http://localhost:7432 to configure.");
36
+ }
37
+ // Load or generate the UI token
38
+ let uiToken = await store.loadUiToken();
39
+ if (!uiToken) {
40
+ uiToken = randomBytes(16).toString("hex");
41
+ await store.saveUiToken(uiToken);
42
+ }
43
+ // Create relay and heartbeat — both handle null credentials gracefully
44
+ const relay = new OcRelay(credentials);
45
+ const heartbeat = new OcHeartbeat(credentials, (reason) => {
46
+ relay.setBlockedByHeartbeat(reason);
47
+ logger.error(`Agent blocked by relay: ${reason}`);
48
+ }, () => relay.paused);
49
+ // Connect to relay only if credentials are present
50
+ if (credentials) {
51
+ await relay.connect();
52
+ heartbeat.start();
53
+ }
54
+ // After UI setup completes, start the relay and heartbeat with new credentials
55
+ const onSetupComplete = (newCreds) => {
56
+ heartbeat.updateCredentials(newCreds);
57
+ heartbeat.start();
58
+ };
59
+ // Start local management HTTP server
60
+ const { createRequire } = await import("module");
61
+ const _require = createRequire(import.meta.url);
62
+ const pkg = _require("../package.json");
63
+ const server = new OcServer(relay, heartbeat, store, uiToken, credentials?.agentId ?? "", credentials?.relayUrl ?? "", pkg.version, onSetupComplete);
64
+ server.start();
65
+ logger.info(`Agent UI: http://localhost:7432 (token: ${uiToken})`);
66
+ // Graceful shutdown
67
+ const shutdown = async (signal) => {
68
+ logger.info(`Received ${signal}. Shutting down gracefully...`);
69
+ heartbeat.stop();
70
+ await relay.disconnect();
71
+ process.exit(0);
72
+ };
73
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
74
+ process.on("SIGINT", () => shutdown("SIGINT"));
75
+ logger.info("Agent running. Press Ctrl+C to stop.");
76
+ }
77
+ ocMain().catch((err) => {
78
+ console.error("Fatal agent error:", err);
79
+ process.exit(1);
80
+ });
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/ldap.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import type { OcAgentCommandResult, OcCommandType } from "@oc/types";
2
+ import type { OcLdapCredentials } from "./store.js";
3
+ interface OcDecryptedCommand {
4
+ commandId: string;
5
+ commandType: OcCommandType;
6
+ payload: unknown;
7
+ dryRun: boolean;
8
+ expiresAt: string;
9
+ }
10
+ export declare class OcCommandExecutor {
11
+ private readonly config;
12
+ private readonly logger;
13
+ private client;
14
+ constructor(config: OcLdapCredentials);
15
+ execute(command: OcDecryptedCommand): Promise<OcAgentCommandResult>;
16
+ private dispatch;
17
+ private ensureConnected;
18
+ private createUser;
19
+ private disableUser;
20
+ private activateUser;
21
+ private moveOu;
22
+ private setPassword;
23
+ private deleteUser;
24
+ private updateUser;
25
+ private readGroups;
26
+ private getSchema;
27
+ private searchUsers;
28
+ private readUsers;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=ldap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldap.d.ts","sourceRoot":"","sources":["../src/ldap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EAapB,aAAa,EACd,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,MAAM,CAAuB;gBAER,MAAM,EAAE,iBAAiB;IAEhD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAoH3D,QAAQ;YA4BR,eAAe;YAYf,UAAU;YAgBV,WAAW;YAsBX,YAAY;YAeZ,MAAM;YAgBN,WAAW;YAqBX,UAAU;YAMV,UAAU;YAsBV,UAAU;YA+BV,SAAS;YAqCT,WAAW;YA8BX,SAAS;CA6BxB"}