@open-wa/wa-automate 4.76.0 → 5.0.0-alpha.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.
Files changed (125) hide show
  1. package/README.md +14 -165
  2. package/dist/cli-runtime-B7_3MM0c.cjs +798 -0
  3. package/dist/cli-runtime-B7_3MM0c.cjs.map +1 -0
  4. package/dist/cli-runtime-CmpYxFCk.d.cts +31 -0
  5. package/dist/cli-runtime-CmpYxFCk.d.cts.map +1 -0
  6. package/dist/cli.cjs +17 -0
  7. package/dist/cli.cjs.map +1 -0
  8. package/dist/cli.d.cts +2 -0
  9. package/dist/index.cjs +224 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.cts +81 -0
  12. package/dist/index.d.cts.map +1 -0
  13. package/package.json +34 -177
  14. package/CNAME +0 -1
  15. package/_tsconfig.docs.json +0 -140
  16. package/bin/config-schema.json +0 -1
  17. package/bin/oas-type-schemas.json +0 -1
  18. package/bin/server.js +0 -45
  19. package/build/build-config-json-for-bin.ts +0 -56
  20. package/build/generate-oas-types.ts +0 -31
  21. package/dist/api/Client.d.ts +0 -2255
  22. package/dist/api/Client.js +0 -4358
  23. package/dist/api/functions/exposed.enum.d.ts +0 -7
  24. package/dist/api/functions/exposed.enum.js +0 -11
  25. package/dist/api/model/aliases.d.ts +0 -110
  26. package/dist/api/model/aliases.js +0 -3
  27. package/dist/api/model/button.d.ts +0 -24
  28. package/dist/api/model/button.js +0 -2
  29. package/dist/api/model/call.d.ts +0 -51
  30. package/dist/api/model/call.js +0 -18
  31. package/dist/api/model/chat.d.ts +0 -221
  32. package/dist/api/model/chat.js +0 -52
  33. package/dist/api/model/config.d.ts +0 -836
  34. package/dist/api/model/config.js +0 -111
  35. package/dist/api/model/contact.d.ts +0 -143
  36. package/dist/api/model/contact.js +0 -2
  37. package/dist/api/model/errors.d.ts +0 -90
  38. package/dist/api/model/errors.js +0 -117
  39. package/dist/api/model/events.d.ts +0 -120
  40. package/dist/api/model/events.js +0 -127
  41. package/dist/api/model/group-metadata.d.ts +0 -124
  42. package/dist/api/model/group-metadata.js +0 -25
  43. package/dist/api/model/id.d.ts +0 -5
  44. package/dist/api/model/id.js +0 -2
  45. package/dist/api/model/index.d.ts +0 -110
  46. package/dist/api/model/index.js +0 -128
  47. package/dist/api/model/label.d.ts +0 -24
  48. package/dist/api/model/label.js +0 -2
  49. package/dist/api/model/media.d.ts +0 -93
  50. package/dist/api/model/media.js +0 -12
  51. package/dist/api/model/message.d.ts +0 -422
  52. package/dist/api/model/message.js +0 -40
  53. package/dist/api/model/product.d.ts +0 -141
  54. package/dist/api/model/product.js +0 -2
  55. package/dist/api/model/reactions.d.ts +0 -76
  56. package/dist/api/model/reactions.js +0 -2
  57. package/dist/api/model/sessionInfo.d.ts +0 -77
  58. package/dist/api/model/sessionInfo.js +0 -2
  59. package/dist/build/build-postman.d.ts +0 -1
  60. package/dist/build/build-postman.js +0 -262
  61. package/dist/cli/cli-options.d.ts +0 -9
  62. package/dist/cli/cli-options.js +0 -289
  63. package/dist/cli/collections.d.ts +0 -2
  64. package/dist/cli/collections.js +0 -251
  65. package/dist/cli/file-utils.d.ts +0 -1
  66. package/dist/cli/file-utils.js +0 -71
  67. package/dist/cli/index.d.ts +0 -1
  68. package/dist/cli/index.js +0 -231
  69. package/dist/cli/integrations/chatwoot.d.ts +0 -49
  70. package/dist/cli/integrations/chatwoot.js +0 -672
  71. package/dist/cli/integrations/cloudflare.d.ts +0 -6
  72. package/dist/cli/integrations/cloudflare.js +0 -76
  73. package/dist/cli/logo.d.ts +0 -1
  74. package/dist/cli/logo.js +0 -49
  75. package/dist/cli/server.d.ts +0 -24
  76. package/dist/cli/server.js +0 -540
  77. package/dist/cli/setup.d.ts +0 -30
  78. package/dist/cli/setup.js +0 -308
  79. package/dist/config/puppeteer.config.d.ts +0 -11
  80. package/dist/config/puppeteer.config.js +0 -65
  81. package/dist/controllers/auth.d.ts +0 -36
  82. package/dist/controllers/auth.js +0 -322
  83. package/dist/controllers/browser.d.ts +0 -17
  84. package/dist/controllers/browser.js +0 -603
  85. package/dist/controllers/events.d.ts +0 -82
  86. package/dist/controllers/events.js +0 -173
  87. package/dist/controllers/init_patch.d.ts +0 -13
  88. package/dist/controllers/init_patch.js +0 -42
  89. package/dist/controllers/initializer.d.ts +0 -22
  90. package/dist/controllers/initializer.js +0 -511
  91. package/dist/controllers/launch_checks.d.ts +0 -8
  92. package/dist/controllers/launch_checks.js +0 -130
  93. package/dist/controllers/patch_manager.d.ts +0 -37
  94. package/dist/controllers/patch_manager.js +0 -231
  95. package/dist/controllers/popup/index.d.ts +0 -3
  96. package/dist/controllers/popup/index.html +0 -168
  97. package/dist/controllers/popup/index.js +0 -148
  98. package/dist/controllers/script_preloader.d.ts +0 -17
  99. package/dist/controllers/script_preloader.js +0 -88
  100. package/dist/index.d.ts +0 -13
  101. package/dist/index.js +0 -36
  102. package/dist/lib/README.md +0 -5
  103. package/dist/lib/base64.js +0 -1
  104. package/dist/lib/hash.js +0 -1
  105. package/dist/lib/jsSha.min.js +0 -1
  106. package/dist/lib/launch.js +0 -1
  107. package/dist/lib/qr.min.js +0 -1
  108. package/dist/lib/wapi.js +0 -2163
  109. package/dist/logging/custom_transport.d.ts +0 -9
  110. package/dist/logging/custom_transport.js +0 -35
  111. package/dist/logging/logging.d.ts +0 -50
  112. package/dist/logging/logging.js +0 -196
  113. package/dist/structures/Collector.d.ts +0 -202
  114. package/dist/structures/Collector.js +0 -391
  115. package/dist/structures/Dialog.d.ts +0 -55
  116. package/dist/structures/Dialog.js +0 -21
  117. package/dist/structures/MessageCollector.d.ts +0 -78
  118. package/dist/structures/MessageCollector.js +0 -145
  119. package/dist/structures/preProcessors.d.ts +0 -58
  120. package/dist/structures/preProcessors.js +0 -181
  121. package/dist/utils/pid_utils.d.ts +0 -1
  122. package/dist/utils/pid_utils.js +0 -26
  123. package/dist/utils/tools.d.ts +0 -152
  124. package/dist/utils/tools.js +0 -494
  125. package/tos.md +0 -77
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runtime-B7_3MM0c.cjs","names":["ApiServer","eventRegistry","LightpandaDriver","PuppeteerDriver","ClientFacade"],"sources":["../src/server/hono-server.ts","../src/cli/output-sink.ts","../src/cli-runtime.ts"],"sourcesContent":["import { ApiServer, createApiServer as createSharedApiServer } from '@open-wa/api';\nimport type { Config } from '@open-wa/config';\n\nexport class WAServer extends ApiServer {\n constructor(config: Config) {\n super({ config });\n }\n}\n\nexport function createApiServer(config: Config) {\n return createSharedApiServer(config);\n}\n","import boxen from 'boxen';\nimport qrcode from 'qrcode-terminal';\n\nexport type CliOutputLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface CliOutputEntry {\n level: CliOutputLevel;\n message: string;\n meta?: Record<string, unknown>;\n}\n\nexport interface CliStatusUpdate {\n phase:\n | 'boot'\n | 'config.resolved'\n | 'server.starting'\n | 'server.started'\n | 'client.starting'\n | 'launch.auth'\n | 'launch.helpers'\n | 'launch.patch'\n | 'launch.license'\n | 'launch.finalize'\n | 'auth.qr'\n | 'client.ready'\n | 'shutdown.starting'\n | 'shutdown.complete'\n | 'error';\n detail?: string;\n sessionId?: string;\n}\n\nexport interface CliQrPayload {\n qr: string;\n sessionId: string;\n}\n\nexport interface CliOutputSink {\n write(entry: CliOutputEntry): void;\n status(update: CliStatusUpdate): void;\n qr(payload: CliQrPayload): void;\n}\n\nfunction writeToConsole(level: CliOutputLevel, message: string): void {\n if (level === 'warn') {\n console.warn(message);\n return;\n }\n\n if (level === 'error') {\n console.error(message);\n return;\n }\n\n console.log(message);\n}\n\nexport function createConsoleOutputSink(): CliOutputSink {\n return {\n write(entry) {\n writeToConsole(entry.level, entry.message);\n },\n status() {\n // Status updates are semantic signals for richer presenters.\n },\n qr(payload) {\n qrcode.generate(payload.qr, { small: true }, (terminalQrCode) => {\n console.log(\n boxen(terminalQrCode, {\n title: payload.sessionId,\n padding: 1,\n titleAlignment: 'center',\n })\n );\n });\n },\n };\n}\n\nlet activeSink: CliOutputSink = createConsoleOutputSink();\n\nexport function getCliOutputSink(): CliOutputSink {\n return activeSink;\n}\n\nexport function setCliOutputSink(sink: CliOutputSink): void {\n activeSink = sink;\n}\n\nexport function resetCliOutputSink(): void {\n activeSink = createConsoleOutputSink();\n}\n","import { createClient } from '@open-wa/core';\nimport { Client as ClientFacade } from '@open-wa/client';\nimport { LightpandaDriver } from '@open-wa/driver-lightpanda';\nimport { PuppeteerDriver } from '@open-wa/driver-puppeteer';\nimport { eventRegistry } from '@open-wa/schema';\nimport { WAServer } from './server/hono-server';\nimport { resolveConfig, type PartialConfig, type Config, type TrackedConfig } from '@open-wa/config';\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { getCliOutputSink, type CliOutputSink } from './cli/output-sink';\n\nexport interface CliRuntimeResult {\n server: WAServer;\n client: ClientFacade;\n config: Config;\n events: ClientFacade['events'];\n}\n\ninterface RuntimeEventPublisher {\n publish(eventName: string, payload: any): void;\n}\n\nfunction bridgeRuntimeEvents(\n openwaClient: Awaited<ReturnType<typeof createClient>>,\n publishRuntimeEvent: (eventName: string, payload: any) => void,\n): () => void {\n if (typeof openwaClient.events.onAny === 'function' && typeof openwaClient.events.offAny === 'function') {\n openwaClient.events.onAny(publishRuntimeEvent);\n return () => openwaClient.events.offAny(publishRuntimeEvent);\n }\n\n const unsubscribers: Array<() => void> = [];\n const bridgedEvents = new Set(eventRegistry.getAll().map((def) => def.meta.eventName));\n\n bridgedEvents.forEach((eventName) => {\n const handler = (payload: any) => publishRuntimeEvent(eventName, payload);\n openwaClient.events.on(eventName as never, handler);\n unsubscribers.push(() => openwaClient.events.off(eventName as never, handler));\n });\n\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe());\n };\n}\n\nfunction attachLaunchNarration(\n openwaClient: Awaited<ReturnType<typeof createClient>>,\n sink: CliOutputSink,\n sessionId: string,\n): () => void {\n const unsubscribers: Array<() => void> = [];\n const on = (event: string, handler: (...args: any[]) => void) => {\n openwaClient.events.on(event as never, handler);\n unsubscribers.push(() => openwaClient.events.off(event as never, handler));\n };\n\n on('launch.auth.check.before', (event: any) => {\n sink.status({ phase: 'launch.auth', sessionId, detail: `Authenticating (timeout=${event?.details?.timeoutMs ?? '∞'}ms)` });\n });\n\n on('launch.auth.check.after', (event: any) => {\n sink.write({ level: 'info', message: `Auth detected via ${event?.details?.method ?? 'unknown'} (${event?.details?.isAuthenticated ? 'authenticated' : 'not-authenticated'})` });\n });\n\n on('launch.helper.pre_api.before', (event: any) => {\n sink.status({ phase: 'launch.helpers', sessionId, detail: event?.details?.mode === 'scripts' ? 'Injecting pre-API helper assets...' : 'Pre-API helpers already present' });\n });\n\n on('launch.helper.pre_api.after', (event: any) => {\n sink.write({ level: 'info', message: `Pre-API helper phase complete (${event?.details?.mode ?? 'unknown'})` });\n });\n\n on('internal_launch_progress', (event: any) => {\n const prefix = (event?.value || event?.value === 0) ? `${event.value}% ` : '';\n if (event?.text) sink.write({ level: 'info', message: `${prefix}${event.text}`.trim() });\n });\n\n on('critical_internal_message', (event: any) => {\n sink.write({ level: 'warn', message: `Internal launch message: ${event?.text ?? event?.value ?? 'unknown'}` });\n });\n\n on('launch.patch.init.before', (event: any) => {\n if (event?.details?.phase === 'preload') {\n sink.status({ phase: 'launch.patch', sessionId, detail: 'Downloading patches from CDN...' });\n }\n });\n\n on('launch.patch.init.after', (event: any) => {\n if (event?.details?.phase === 'preload') {\n const source = event?.details?.source ?? 'unknown';\n const tag = event?.details?.tag ? ` tag=${event.details.tag}` : '';\n const available = Array.isArray(event?.details?.available) ? event.details.available.length : 0;\n const durationMs = event?.durationMs;\n const durationStr = durationMs ? ` in ${(durationMs / 1000).toFixed(2)}s` : '';\n sink.write({ level: 'info', message: `Downloaded patches${durationStr} (source=${source}, available=${available}${tag})` });\n }\n });\n\n on('patch.init.before', (event: any) => {\n if (event?.details?.phase === 'apply') {\n const count = Array.isArray(event?.details?.patchIds) ? event.details.patchIds.length : 0;\n sink.status({ phase: 'launch.patch', sessionId, detail: `Installing patches (${count} queued)` });\n }\n });\n\n on('patch.apply.before', (event: any) => {\n sink.status({ phase: 'launch.patch', sessionId, detail: `Applying patch: ${event?.details?.patchId ?? 'unknown'}` });\n });\n\n on('patch.apply.after', (event: any) => {\n sink.write({\n level: event?.details?.outcome === 'failed' ? 'warn' : 'info',\n message: `Patch ${event?.details?.patchId ?? 'unknown'}: ${event?.details?.outcome ?? (event?.details?.applied ? 'applied' : 'unknown')}${event?.details?.detail ? ` — ${event.details.detail}` : ''}`,\n });\n });\n\n on('patch.init.after', (event: any) => {\n if (event?.details?.phase === 'apply') {\n const applied = Array.isArray(event?.details?.applied) ? event.details.applied : [];\n const outcome = event?.details?.outcome ?? 'unknown';\n const tag = applied.length > 0 ? applied.join(', ') : outcome;\n const durationMs = event?.durationMs;\n const durationStr = durationMs ? ` in ${(durationMs / 1000).toFixed(2)}s` : '';\n sink.write({\n level: event?.details?.blockingFailure ? 'warn' : 'info',\n message: `Patches Installed${durationStr}: ${tag}`,\n });\n }\n });\n\n on('launch.patch.integrity.before', () => {\n sink.status({ phase: 'launch.patch', sessionId, detail: 'Validating patched runtime...' });\n });\n\n on('launch.patch.integrity.after', (event: any) => {\n sink.write({ level: event?.details?.usable ? 'info' : 'warn', message: `Patched runtime validation: ${event?.details?.usable ? 'usable' : 'failed'}${event?.details?.failureReason ? ` (${event.details.failureReason})` : ''}` });\n });\n\n on('launch.license.check.before', (event: any) => {\n sink.status({ phase: 'launch.license', sessionId, detail: `Checking license (${event?.details?.source ?? 'local'})` });\n });\n\n on('launch.license.check.after', (event: any) => {\n sink.write({ level: event?.details?.blockingFailure ? 'warn' : 'info', message: `License check: ${event?.details?.status ?? 'unknown'}${event?.details?.detail ? ` — ${event.details.detail}` : ''}` });\n });\n\n on('license.inject.before', () => {\n sink.status({ phase: 'launch.license', sessionId, detail: 'Injecting license payload...' });\n });\n\n on('license.inject.after', (event: any) => {\n sink.write({ level: event?.details?.success ? 'info' : 'warn', message: `License inject: ${event?.details?.success ? 'success' : 'failed'}${event?.details?.status ? ` (${event.details.status})` : ''}${event?.details?.detail ? ` — ${event.details.detail}` : ''}` });\n });\n\n on('launch.auth.qr.generated', (event: any) => {\n const qrIndex = event?.details?.qrIndex ?? '?';\n sink.status({ phase: 'launch.auth', sessionId, detail: `QR code generated (#${qrIndex})` });\n });\n\n on('launch.client.finalize.before', (event: any) => {\n sink.status({ phase: 'launch.finalize', sessionId, detail: `Finalizing session (${event?.details?.validationStage ?? 'unknown'})` });\n });\n\n on('launch.client.finalize.after', (event: any) => {\n sink.write({ level: event?.details?.success ? 'info' : 'warn', message: `Finalize: ${event?.details?.outcome ?? 'unknown'}${event?.details?.detail ? ` — ${event.details.detail}` : ''}` });\n });\n\n on('error', (event: any) => {\n const scope = event?.scope ?? 'unknown';\n const msg = event?.error?.message ?? String(event?.error ?? 'unknown error');\n const fatal = event?.fatal ? ' [FATAL]' : '';\n sink.write({ level: 'error', message: `${fatal} ${scope}: ${msg}`.trim() });\n });\n\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe());\n };\n}\n\nconst CHROME_CACHE_FILE = resolve(process.cwd(), '.open-wa', 'chrome-executable-path.json');\n\ninterface ChromePathCacheRecord {\n executablePath?: string;\n updatedAt?: string;\n}\n\ninterface ExecutablePathResolution {\n executablePath?: string;\n source:\n | 'config'\n | 'cache'\n | 'chrome_installation'\n | 'driver_default'\n | 'lightpanda_config'\n | 'lightpanda_sdk_default';\n warning?: string;\n}\n\ninterface DriverSelection {\n driver: PuppeteerDriver | LightpandaDriver;\n engineLabel: 'Puppeteer' | 'Lightpanda';\n executableResolution: ExecutablePathResolution;\n preferLocalChrome: boolean;\n}\n\nexport interface ParsedCliArgs {\n procName: string;\n pm2: boolean;\n forwardedArgs: string[];\n configPath?: string;\n cliOverrides: PartialConfig;\n verbose: boolean;\n unsupportedWarnings: string[];\n}\n\nexport function getChromeCacheFilePath(): string {\n return CHROME_CACHE_FILE;\n}\n\nexport function readChromePathCache(cacheFilePath: string = getChromeCacheFilePath()): ChromePathCacheRecord | undefined {\n if (!existsSync(cacheFilePath)) {\n return undefined;\n }\n\n try {\n const raw = JSON.parse(readFileSync(cacheFilePath, 'utf8')) as ChromePathCacheRecord;\n if (!raw || typeof raw !== 'object') {\n return undefined;\n }\n\n return {\n executablePath: typeof raw.executablePath === 'string' ? raw.executablePath : undefined,\n updatedAt: typeof raw.updatedAt === 'string' ? raw.updatedAt : undefined,\n };\n } catch {\n return undefined;\n }\n}\n\nexport function writeChromePathCache(executablePath: string, cacheFilePath: string = getChromeCacheFilePath()): void {\n mkdirSync(dirname(cacheFilePath), { recursive: true });\n writeFileSync(cacheFilePath, JSON.stringify({ executablePath, updatedAt: new Date().toISOString() }, null, 2), 'utf8');\n}\n\nexport function clearChromePathCache(cacheFilePath: string = getChromeCacheFilePath()): void {\n if (existsSync(cacheFilePath)) {\n rmSync(cacheFilePath, { force: true });\n }\n}\n\nexport function isUsableExecutablePath(executablePath?: string): executablePath is string {\n return !!executablePath && existsSync(executablePath);\n}\n\nfunction getExplicitUseChromePreference(rawConfigs?: TrackedConfig['rawConfigs']): boolean | undefined {\n const explicitConfigSources = [\n rawConfigs?.file,\n rawConfigs?.env,\n rawConfigs?.cli,\n rawConfigs?.programmatic,\n ];\n\n for (let index = explicitConfigSources.length - 1; index >= 0; index -= 1) {\n const source = explicitConfigSources[index];\n if (source?.useChrome !== undefined) {\n return source.useChrome;\n }\n }\n\n return undefined;\n}\n\nexport function shouldPreferLocalChrome(config: Config, rawConfigs?: TrackedConfig['rawConfigs']): boolean {\n if (config.useLightpanda) {\n return false;\n }\n\n if (config.executablePath) {\n return false;\n }\n\n const explicitUseChrome = getExplicitUseChromePreference(rawConfigs);\n if (explicitUseChrome !== undefined) {\n return explicitUseChrome;\n }\n\n return true;\n}\n\nfunction getVal(argv: string[], flag: string): string | undefined {\n const index = argv.findIndex(arg => arg === flag);\n return index !== -1 ? argv[index + 1] : undefined;\n}\n\nexport function parseCliArgs(argv: string[] = process.argv.slice(2)): ParsedCliArgs {\n const cliOverrides: PartialConfig = {};\n const unsupportedWarnings: string[] = [];\n let verbose = false;\n let configPath: string | undefined;\n\n const sessionId = getVal(argv, '--session-id') || 'session';\n cliOverrides.sessionId = sessionId;\n\n const portValue = getVal(argv, '--port') || getVal(argv, '-p');\n if (portValue) cliOverrides.port = parseInt(portValue, 10);\n\n const host = getVal(argv, '--host') || getVal(argv, '-h');\n if (host) cliOverrides.host = host;\n\n const apiKey = getVal(argv, '--api-key') || getVal(argv, '--key') || getVal(argv, '-k');\n if (apiKey) cliOverrides.apiKey = apiKey;\n\n const logLevel = getVal(argv, '--log-level');\n if (logLevel) cliOverrides.logLevel = logLevel;\n\n if (argv.includes('--no-ezqr')) cliOverrides.ezqr = false;\n if (argv.includes('--headful')) cliOverrides.headless = false;\n if (argv.includes('--headless')) cliOverrides.headless = true;\n if (argv.includes('--use-chrome')) cliOverrides.useChrome = true;\n if (argv.includes('--use-lightpanda')) cliOverrides.useLightpanda = true;\n if (argv.includes('--log-console')) cliOverrides.logConsole = true;\n if (argv.includes('--aggressive-garbage-collection')) cliOverrides.aggressiveGarbageCollection = true;\n if (argv.includes('--no-dashboard')) cliOverrides.dashboard = false;\n if (argv.includes('--ephemeral')) cliOverrides.ephemeral = true;\n\n const qrTimeout = getVal(argv, '--qr-timeout');\n if (qrTimeout) cliOverrides.qrTimeout = parseInt(qrTimeout, 10);\n\n const dashboardPort = getVal(argv, '--dashboard-port');\n if (dashboardPort) cliOverrides.dashboardPort = parseInt(dashboardPort, 10);\n\n const licenseKey = getVal(argv, '--license-key') || getVal(argv, '-l');\n if (licenseKey) cliOverrides.licenseKey = licenseKey;\n\n const webhook = getVal(argv, '--webhook') || getVal(argv, '-w');\n if (webhook) cliOverrides.webhook = webhook;\n\n const proxyHost = getVal(argv, '--proxy-host');\n if (proxyHost) cliOverrides.proxyHost = proxyHost;\n\n const proxyToken = getVal(argv, '--proxy-token');\n if (proxyToken) cliOverrides.proxyToken = proxyToken;\n\n const readyWebhook = getVal(argv, '--ready-webhook');\n if (readyWebhook) unsupportedWarnings.push(`--ready-webhook was provided (${readyWebhook}) but ready-webhook delivery is not yet wired in v5 CLI.`);\n\n if (argv.includes('-v') || argv.includes('--verbose')) {\n verbose = true;\n cliOverrides.disableSpins = true;\n cliOverrides.logConsole = true;\n cliOverrides.logLevel = cliOverrides.logLevel || 'debug';\n }\n\n if (argv.includes('--stats')) {\n unsupportedWarnings.push('--stats was provided but swagger-stats parity is not restored; v5 only exposes the compatibility redirect/deprecation route.');\n }\n\n if (argv.includes('--generate-api-docs')) {\n unsupportedWarnings.push('--generate-api-docs was provided; runtime docs are always served from the shared API layer and no separate collection generation step currently runs at CLI boot.');\n }\n\n if (argv.includes('--tunnel')) {\n unsupportedWarnings.push('--tunnel was provided but tunnel setup parity is not yet restored in the v5 CLI.');\n }\n\n if (argv.includes('--chatwoot-url') || argv.includes('--twilio-webhook') || argv.includes('--bot-press-url')) {\n unsupportedWarnings.push('Legacy integration flags (Chatwoot/Twilio/BotPress) were provided but are not yet wired into the v5 CLI boot path.');\n }\n\n if (argv.includes('--use-session-id-in-path')) {\n cliOverrides.sessionId = sessionId;\n }\n\n configPath = getVal(argv, '--config') || getVal(argv, '-c');\n\n const procName = getVal(argv, '--name') || sessionId || '@OPEN-WA EASY API';\n const pm2 = argv.includes('--pm2');\n\n return {\n procName,\n pm2,\n forwardedArgs: argv,\n configPath,\n cliOverrides,\n verbose,\n unsupportedWarnings,\n };\n}\n\nexport async function resolveExecutablePath(\n config: Config,\n options: {\n preferLocalChrome?: boolean;\n cacheFilePath?: string;\n } = {}\n): Promise<ExecutablePathResolution> {\n if (config.executablePath) {\n return {\n executablePath: config.executablePath,\n source: 'config',\n };\n }\n\n const preferLocalChrome = options.preferLocalChrome ?? config.useChrome;\n if (!preferLocalChrome) {\n return {\n source: 'driver_default',\n };\n }\n\n const cacheFilePath = options.cacheFilePath ?? getChromeCacheFilePath();\n const cachedPath = readChromePathCache(cacheFilePath)?.executablePath;\n if (isUsableExecutablePath(cachedPath)) {\n return {\n executablePath: cachedPath,\n source: 'cache',\n };\n }\n\n if (cachedPath) {\n clearChromePathCache(cacheFilePath);\n }\n\n const { Launcher } = await import('chrome-launcher');\n const detectedPath = Launcher.getInstallations().find((installationPath) => isUsableExecutablePath(installationPath));\n\n if (detectedPath) {\n writeChromePathCache(detectedPath, cacheFilePath);\n return {\n executablePath: detectedPath,\n source: 'chrome_installation',\n };\n }\n\n clearChromePathCache(cacheFilePath);\n\n return {\n source: 'driver_default',\n warning: 'Chrome resolution warning: no valid local Chrome installation was found. Falling back to Puppeteer/default driver browser resolution.',\n };\n}\n\nfunction resolveLightpandaExecutablePath(config: Config): ExecutablePathResolution {\n const executablePath = config.lightpanda?.executablePath;\n if (executablePath) {\n return {\n executablePath,\n source: 'lightpanda_config',\n };\n }\n\n return {\n source: 'lightpanda_sdk_default',\n };\n}\n\nasync function selectRuntimeDriver(config: Config, rawConfigs?: TrackedConfig['rawConfigs']): Promise<DriverSelection> {\n if (config.useLightpanda) {\n return {\n driver: new LightpandaDriver(),\n engineLabel: 'Lightpanda',\n executableResolution: resolveLightpandaExecutablePath(config),\n preferLocalChrome: false,\n };\n }\n\n const preferLocalChrome = shouldPreferLocalChrome(config, rawConfigs);\n const executableResolution = await resolveExecutablePath(config, { preferLocalChrome });\n\n return {\n driver: new PuppeteerDriver(),\n engineLabel: 'Puppeteer',\n executableResolution,\n preferLocalChrome,\n };\n}\n\nfunction printStartupSummary(\n config: Config,\n resolution: ExecutablePathResolution,\n preferLocalChrome: boolean,\n engineLabel: DriverSelection['engineLabel'],\n) {\n const host = config.host.includes('http') ? config.host : `http://${config.host}`;\n const sink = getCliOutputSink();\n sink.write({ level: 'info', message: `Easy API session: ${config.sessionId}` });\n sink.write({ level: 'info', message: `Health: ${host}:${config.port}/health` });\n sink.write({ level: 'info', message: `API Explorer: ${host}:${config.port}/api-docs/` });\n sink.write({ level: 'info', message: `Swagger JSON: ${host}:${config.port}/meta/swagger.json` });\n sink.write({ level: 'info', message: `Postman JSON: ${host}:${config.port}/meta/postman.json` });\n sink.write({ level: 'info', message: `Browser mode: ${config.headless ? 'headless' : 'headful'}` });\n sink.write({ level: 'info', message: `Browser engine: ${engineLabel}` });\n if (config.dashboard) {\n sink.write({ level: 'info', message: `Dashboard: ${host}:${config.port}/dashboard/` });\n } else {\n sink.write({ level: 'info', message: 'Dashboard: disabled (--no-dashboard)' });\n }\n if (resolution.source === 'lightpanda_config' && resolution.executablePath) {\n sink.write({ level: 'info', message: `Browser executable: explicit Lightpanda override (${resolution.executablePath})` });\n } else if (resolution.source === 'lightpanda_sdk_default') {\n sink.write({ level: 'info', message: 'Browser executable: Lightpanda SDK managed executable (shared cache/default resolution)' });\n } else if (resolution.source === 'config' && config.executablePath) {\n sink.write({ level: 'info', message: `Browser executable: explicit override (${config.executablePath})` });\n } else if (resolution.source === 'cache') {\n sink.write({ level: 'info', message: `Browser executable: local Chrome from cache (${resolution.executablePath})` });\n } else if (resolution.source === 'chrome_installation') {\n sink.write({ level: 'info', message: `Browser executable: local Chrome detected (${resolution.executablePath})` });\n } else if (preferLocalChrome) {\n sink.write({ level: 'info', message: 'Browser executable: driver default fallback (local Chrome unavailable)' });\n }\n if (config.webhook) {\n sink.write({\n level: 'warn',\n message: `Webhook configured (${config.webhook}) but v5 CLI webhook registration parity is not yet restored.`,\n });\n }\n}\n\nexport async function start(parsedArgs: ParsedCliArgs = parseCliArgs()): Promise<CliRuntimeResult> {\n const { configPath, cliOverrides, verbose, unsupportedWarnings } = parsedArgs;\n const sink = getCliOutputSink();\n\n sink.status({ phase: 'boot' });\n\n const { config, sources, configFilePath, rawConfigs } = await resolveConfig({\n configPath,\n cliOverrides: {\n disableSpins: true,\n apiLifecycle: 'hybrid',\n host: '0.0.0.0',\n port: 8002,\n ...cliOverrides,\n },\n includeRawConfigs: true,\n verbose,\n });\n\n if (verbose) {\n sink.write({ level: 'info', message: `Config sources: ${sources.join(', ')}` });\n if (configFilePath) {\n sink.write({ level: 'info', message: `Config file: ${configFilePath}` });\n }\n }\n\n sink.status({ phase: 'config.resolved', sessionId: config.sessionId });\n\n unsupportedWarnings.forEach((warning) => sink.write({ level: 'warn', message: `Compatibility warning: ${warning}` }));\n\n const driverSelection = await selectRuntimeDriver(config, rawConfigs);\n const { driver, engineLabel, executableResolution, preferLocalChrome } = driverSelection;\n if (executableResolution.warning) {\n sink.write({ level: 'warn', message: executableResolution.warning });\n }\n\n const server = new WAServer(config);\n sink.status({ phase: 'server.starting', sessionId: config.sessionId });\n\n await server.start();\n sink.status({ phase: 'server.started', sessionId: config.sessionId });\n\n printStartupSummary(config, executableResolution, preferLocalChrome, engineLabel);\n\n sink.status({ phase: 'client.starting', sessionId: config.sessionId });\n sink.write({ level: 'info', message: 'Starting WhatsApp Client...' });\n\n const openwaClient = await createClient({\n sessionId: config.sessionId,\n driver,\n deleteSessionDataOnLogout: config.deleteSessionDataOnLogout,\n killClientOnLogout: config.killClientOnLogout,\n sessionDataPath: config.sessionDataPath,\n debug: config.logLevel === 'debug' || verbose || config.logConsole,\n headless: config.headless,\n qrTimeoutMs: typeof config.qrTimeout === 'number' ? config.qrTimeout * 1000 : undefined,\n authTimeoutMs: typeof config.authTimeout === 'number' ? config.authTimeout * 1000 : undefined,\n executablePath: executableResolution.executablePath,\n browserArgs: config.chromiumArgs,\n userDataDir: config.userDataDir,\n ephemeral: config.ephemeral,\n logConsole: config.logConsole,\n logConsoleErrors: config.logConsoleErrors,\n blockCrashLogs: config.blockCrashLogs,\n blockAssets: config.blockAssets,\n safeMode: config.safeMode,\n licenseKey: config.licenseKey as any,\n });\n\n server.setReadinessProvider(() => ({ ...openwaClient.getReadiness(), state: openwaClient.getState() }));\n const detachLaunchNarration = attachLaunchNarration(openwaClient, sink, config.sessionId);\n\n openwaClient.events.on('launch.auth.qr.generated', (event) => {\n const qr = event.details?.qr;\n if (!qr) {\n return;\n }\n\n if (config.qrLogSkip) {\n sink.write({ level: 'info', message: 'New QR Code generated. Not printing in console because qrLogSkip is set to true' });\n } else {\n sink.status({ phase: 'auth.qr', sessionId: config.sessionId, detail: 'QR code generated' });\n sink.qr({ qr, sessionId: config.sessionId });\n }\n\n server.setQR(qr);\n });\n\n const client = new ClientFacade({\n client: openwaClient,\n transport: openwaClient.getTransport(),\n });\n\n server.setClient(client as any);\n\n const runtimeBridgeListeners = new Set<(event: string, value: any) => void>();\n const runtimeEventPublishers: RuntimeEventPublisher[] = [\n {\n publish: (eventName, payload) => {\n runtimeBridgeListeners.forEach((listener) => {\n listener(eventName, payload);\n });\n },\n },\n ];\n\n const publishRuntimeEvent = (eventName: string, payload: any) => {\n runtimeEventPublishers.forEach((publisher) => {\n publisher.publish(eventName, payload);\n });\n };\n\n const detachRuntimeBridge = bridgeRuntimeEvents(openwaClient, publishRuntimeEvent);\n\n // Bridge core events to the socket manager so dashboard clients\n // receive live events when they send register_ev.\n if (typeof server.setEventBridge === 'function') {\n server.setEventBridge({\n onAny: (listener: (event: string, value: any) => void) => {\n runtimeBridgeListeners.add(listener);\n },\n offAny: (listener: (event: string, value: any) => void) => {\n runtimeBridgeListeners.delete(listener);\n },\n });\n }\n\n openwaClient.events.on('launch.browser.init.after', async () => {\n const page = openwaClient.getTransport().getPage();\n if (page) {\n await server.setPage(page as any).catch(() => {});\n }\n });\n\n try {\n await client.start();\n } catch (startError) {\n const msg = startError instanceof Error ? startError.message : String(startError);\n sink.write({ level: 'error', message: `Bootstrap failed: ${msg}` });\n sink.write({ level: 'warn', message: 'Session kept alive for debugging. Browser page is still open.' });\n sink.write({ level: 'warn', message: 'The server is running — use /health and /api-docs to inspect state.' });\n detachLaunchNarration();\n return { server, client, config, events: openwaClient.events };\n }\n\n const readiness = openwaClient.getReadiness();\n sink.status({\n phase: 'client.ready',\n sessionId: config.sessionId,\n detail: `status=${readiness.status}, exposureSafe=${readiness.exposureSafe}`,\n });\n sink.write({\n level: 'info',\n message: `WhatsApp Client ready with state: ${client.getState()} (status=${readiness.status}, exposureSafe=${readiness.exposureSafe})`,\n });\n\n detachLaunchNarration();\n return { server, client, config, events: openwaClient.events };\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<CliRuntimeResult | void> {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.pm2) {\n const { spawn } = require('child_process');\n const sink = getCliOutputSink();\n const pm2Command = getPm2Command();\n const pm2SpawnOptions = getPm2SpawnOptions();\n try {\n const pm2 = spawn(pm2Command, ['--version'], pm2SpawnOptions);\n\n await new Promise<void>((resolve, reject) => {\n pm2.on('error', reject);\n pm2.on('exit', (code: number | null) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n reject(new Error(`pm2 probe exited with code ${code ?? 'unknown'}`));\n });\n pm2.stdout.on('data', () => resolve());\n });\n\n const pm2Flags = parsedArgs.forwardedArgs.filter((flag: string) => flag !== '--pm2');\n const cliPath = fileURLToPath(new URL('../dist/cli.cjs', import.meta.url));\n\n spawn(pm2Command, [\n 'start',\n cliPath,\n '--name', parsedArgs.procName,\n '--stop-exit-codes', '88',\n '--',\n ...pm2Flags,\n ], {\n ...pm2SpawnOptions,\n stdio: 'inherit',\n detached: true\n });\n return;\n } catch (error: unknown) {\n if (isCommandNotFoundError(error)) {\n sink.write({ level: 'error', message: 'pm2 not found. Please install with: npm install -g pm2' });\n return;\n }\n throw error;\n }\n }\n\n return await start(parsedArgs);\n}\n\nfunction getPm2Command(): string {\n return process.platform === 'win32' ? 'pm2.cmd' : 'pm2';\n}\n\nfunction getPm2SpawnOptions(): { shell: boolean } {\n return { shell: process.platform === 'win32' };\n}\n\nfunction isCommandNotFoundError(error: unknown): boolean {\n if (typeof error !== 'object' || error === null) {\n return false;\n }\n\n const systemError = error as { code?: unknown; errno?: unknown };\n return systemError.code === 'ENOENT' || systemError.errno === -2;\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Client } from "@open-wa/client";
2
+ import { ApiServer } from "@open-wa/api";
3
+ import { Config, PartialConfig } from "@open-wa/config";
4
+
5
+ //#region src/server/hono-server.d.ts
6
+ declare class WAServer extends ApiServer {
7
+ constructor(config: Config);
8
+ }
9
+ //#endregion
10
+ //#region src/cli-runtime.d.ts
11
+ interface CliRuntimeResult {
12
+ server: WAServer;
13
+ client: Client;
14
+ config: Config;
15
+ events: Client['events'];
16
+ }
17
+ interface ParsedCliArgs {
18
+ procName: string;
19
+ pm2: boolean;
20
+ forwardedArgs: string[];
21
+ configPath?: string;
22
+ cliOverrides: PartialConfig;
23
+ verbose: boolean;
24
+ unsupportedWarnings: string[];
25
+ }
26
+ declare function parseCliArgs(argv?: string[]): ParsedCliArgs;
27
+ declare function start(parsedArgs?: ParsedCliArgs): Promise<CliRuntimeResult>;
28
+ declare function main(argv?: string[]): Promise<CliRuntimeResult | void>;
29
+ //#endregion
30
+ export { WAServer as a, start as i, main as n, parseCliArgs as r, CliRuntimeResult as t };
31
+ //# sourceMappingURL=cli-runtime-CmpYxFCk.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runtime-CmpYxFCk.d.cts","names":[],"sources":["../src/server/hono-server.ts","../src/cli-runtime.ts"],"mappings":";;;;;cAGa,QAAA,SAAiB,SAAA;cAChB,MAAA,EAAQ,MAAA;AAAA;;;UCQL,gBAAA;EACb,MAAA,EAAQ,QAAA;EACR,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,MAAA;EACR,MAAA,EAAQ,MAAA;AAAA;AAAA,UA8LK,aAAA;EACb,QAAA;EACA,GAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA,EAAc,aAAA;EACd,OAAA;EACA,mBAAA;AAAA;AAAA,iBAkFY,YAAA,CAAa,IAAA,cAAyC,aAAA;AAAA,iBAgOhD,KAAA,CAAM,UAAA,GAAY,aAAA,GAAiC,OAAA,CAAQ,gBAAA;AAAA,iBAgK3D,IAAA,CAAK,IAAA,cAAyC,OAAA,CAAQ,gBAAA"}
package/dist/cli.cjs ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_cli_runtime = require("./cli-runtime-B7_3MM0c.cjs");
4
+ //#region src/cli.ts
5
+ if (require.main === module) require_cli_runtime.main().catch((err) => {
6
+ require_cli_runtime.getCliOutputSink().write({
7
+ level: "error",
8
+ message: `Failed to start: ${err instanceof Error ? err.message : String(err)}`
9
+ });
10
+ process.exit(1);
11
+ });
12
+ //#endregion
13
+ exports.main = require_cli_runtime.main;
14
+ exports.parseCliArgs = require_cli_runtime.parseCliArgs;
15
+ exports.start = require_cli_runtime.start;
16
+
17
+ //# sourceMappingURL=cli.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.cjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { main, parseCliArgs, start } from './cli-runtime';\nimport { getCliOutputSink } from './cli/output-sink';\n\nexport { main, parseCliArgs, start };\n\nif (require.main === module) {\n main().catch((err: any) => {\n getCliOutputSink().write({ level: 'error', message: `Failed to start: ${err instanceof Error ? err.message : String(err)}` });\n process.exit(1);\n });\n}\n"],"mappings":";;;;AAMA,IAAI,QAAQ,SAAS,OACjB,qBAAA,MAAM,CAAC,OAAO,QAAa;AACvB,qBAAA,kBAAkB,CAAC,MAAM;EAAE,OAAO;EAAS,SAAS,oBAAoB,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;EAAI,CAAC;AAC7H,SAAQ,KAAK,EAAE;EACjB"}
package/dist/cli.d.cts ADDED
@@ -0,0 +1,2 @@
1
+ import { i as start, n as main, r as parseCliArgs } from "./cli-runtime-CmpYxFCk.cjs";
2
+ export { main, parseCliArgs, start };
package/dist/index.cjs ADDED
@@ -0,0 +1,224 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_cli_runtime = require("./cli-runtime-B7_3MM0c.cjs");
3
+ let _open_wa_api = require("@open-wa/api");
4
+ let _open_wa_session_sync = require("@open-wa/session-sync");
5
+ let _open_wa_logger = require("@open-wa/logger");
6
+ let _open_wa_core = require("@open-wa/core");
7
+ let _open_wa_config = require("@open-wa/config");
8
+ //#region src/session/SessionManager.ts
9
+ var SessionManager = class SessionManager {
10
+ logger = (0, _open_wa_logger.createLogger)({ component: "SessionManager" });
11
+ localCompression = null;
12
+ s3Sync = null;
13
+ constructor(config) {
14
+ this.config = config;
15
+ this.logger.info("SessionManager initialized", { sessionId: config.sessionId });
16
+ }
17
+ async start() {
18
+ if (this.config.enableLocalCompression !== false) {
19
+ this.localCompression = new _open_wa_session_sync.LocalSessionCompression({
20
+ sessionPath: this.config.dataDir,
21
+ sessionId: this.config.sessionId,
22
+ intervalMs: this.config.syncInterval || 6e5
23
+ });
24
+ await this.localCompression.start();
25
+ this.logger.info("Local session compression started");
26
+ }
27
+ if (this.config.enableS3Backup && this.config.s3Config) {
28
+ this.s3Sync = new _open_wa_session_sync.S3SyncManager(this.config.s3Config);
29
+ this.startPeriodicSync();
30
+ this.logger.info("S3 session sync started");
31
+ }
32
+ }
33
+ async stop() {
34
+ if (this.localCompression) {
35
+ await this.localCompression.stop();
36
+ this.localCompression = null;
37
+ }
38
+ if (this.s3Sync) this.s3Sync = null;
39
+ this.logger.info("SessionManager stopped");
40
+ }
41
+ async backupSession() {
42
+ if (!this.s3Sync) {
43
+ this.logger.warn("S3 sync not configured");
44
+ return null;
45
+ }
46
+ try {
47
+ const sessionZstPath = `${this.config.dataDir}/${this.config.sessionId}.data.zst`;
48
+ const filename = await this.s3Sync.backupSession(sessionZstPath);
49
+ this.logger.info("Session backed up to S3", { filename });
50
+ return filename;
51
+ } catch (error) {
52
+ this.logger.error("Failed to backup session to S3", { error: error.message });
53
+ throw error;
54
+ }
55
+ }
56
+ async restoreSession(filename) {
57
+ if (!this.s3Sync) {
58
+ this.logger.warn("S3 sync not configured");
59
+ throw new Error("S3 sync not configured for session restore");
60
+ }
61
+ try {
62
+ await this.s3Sync.restoreSession(filename, this.config.dataDir);
63
+ this.logger.info("Session restored from S3", { filename });
64
+ } catch (error) {
65
+ this.logger.error("Failed to restore session from S3", { error: error.message });
66
+ throw error;
67
+ }
68
+ }
69
+ async getSessionBackupUrl(filename, expiresIn = 3600) {
70
+ if (!this.s3Sync) {
71
+ this.logger.warn("S3 sync not configured");
72
+ return null;
73
+ }
74
+ try {
75
+ const url = await this.s3Sync.getDownloadUrl(filename, expiresIn);
76
+ this.logger.info("Generated session backup URL", {
77
+ filename,
78
+ expiresIn
79
+ });
80
+ return url;
81
+ } catch (error) {
82
+ this.logger.error("Failed to generate backup URL", { error: error.message });
83
+ throw error;
84
+ }
85
+ }
86
+ startPeriodicSync() {
87
+ if (!this.s3Sync) return;
88
+ const syncInterval = this.config.syncInterval || 6e5;
89
+ setInterval(async () => {
90
+ try {
91
+ await this.backupSession();
92
+ } catch (error) {
93
+ this.logger.error("Periodic sync failed", { error: error.message });
94
+ }
95
+ }, syncInterval);
96
+ }
97
+ static createFromConfig(clientConfig) {
98
+ const s3Config = clientConfig.s3Sync;
99
+ return new SessionManager({
100
+ sessionId: clientConfig.sessionId || "session",
101
+ dataDir: clientConfig.sessionDataPath || "./.wwebjs",
102
+ s3Config,
103
+ syncInterval: clientConfig.s3Sync?.syncInterval,
104
+ compressionOptions: "-1 -T0",
105
+ enableLocalCompression: clientConfig.s3Sync?.enableLocalCompression !== false,
106
+ enableS3Backup: !!s3Config
107
+ });
108
+ }
109
+ };
110
+ //#endregion
111
+ //#region src/server/lifecycle-manager.ts
112
+ var APILifecycleManager = class {
113
+ config;
114
+ server;
115
+ sessionManager;
116
+ _sessionConnected = false;
117
+ constructor(config) {
118
+ this.config = config;
119
+ if (config.s3Sync) this.sessionManager = SessionManager.createFromConfig(config);
120
+ }
121
+ async initialize() {
122
+ const sink = require_cli_runtime.getCliOutputSink();
123
+ switch (this.config.apiLifecycle) {
124
+ case "immediate":
125
+ sink.status({
126
+ phase: "server.starting",
127
+ sessionId: this.config.sessionId,
128
+ detail: "Starting full API immediately"
129
+ });
130
+ await this.startFullAPI();
131
+ break;
132
+ case "post-connection":
133
+ this.waitForConnection();
134
+ break;
135
+ case "hybrid":
136
+ sink.status({
137
+ phase: "server.starting",
138
+ sessionId: this.config.sessionId,
139
+ detail: "Starting minimal API (QR only)"
140
+ });
141
+ await this.startMinimalAPI();
142
+ break;
143
+ }
144
+ if (this.sessionManager) await this.sessionManager.start();
145
+ }
146
+ async waitForConnection() {
147
+ require_cli_runtime.getCliOutputSink().write({
148
+ level: "info",
149
+ message: "Waiting for session connection before starting API..."
150
+ });
151
+ }
152
+ async startFullAPI() {
153
+ require_cli_runtime.getCliOutputSink().write({
154
+ level: "info",
155
+ message: "Starting full API immediately..."
156
+ });
157
+ this.server = new require_cli_runtime.WAServer(this.config);
158
+ await this.server.start();
159
+ }
160
+ async startMinimalAPI() {
161
+ require_cli_runtime.getCliOutputSink().write({
162
+ level: "info",
163
+ message: "Starting minimal API (QR only)..."
164
+ });
165
+ this.server = new require_cli_runtime.WAServer(this.config);
166
+ await this.server.start();
167
+ }
168
+ async stop() {
169
+ if (this.sessionManager) await this.sessionManager.stop();
170
+ if (this.server) await this.server.stop();
171
+ }
172
+ };
173
+ //#endregion
174
+ exports.APILifecycleManager = APILifecycleManager;
175
+ Object.defineProperty(exports, "Config", {
176
+ enumerable: true,
177
+ get: function() {
178
+ return _open_wa_config.Config;
179
+ }
180
+ });
181
+ Object.defineProperty(exports, "ConfigSchema", {
182
+ enumerable: true,
183
+ get: function() {
184
+ return _open_wa_config.ConfigSchema;
185
+ }
186
+ });
187
+ exports.SessionManager = SessionManager;
188
+ exports.WAServer = require_cli_runtime.WAServer;
189
+ Object.defineProperty(exports, "createApiMiddleware", {
190
+ enumerable: true,
191
+ get: function() {
192
+ return _open_wa_api.createApiMiddleware;
193
+ }
194
+ });
195
+ Object.defineProperty(exports, "createApiServer", {
196
+ enumerable: true,
197
+ get: function() {
198
+ return _open_wa_api.createApiServer;
199
+ }
200
+ });
201
+ Object.defineProperty(exports, "createClient", {
202
+ enumerable: true,
203
+ get: function() {
204
+ return _open_wa_core.createClient;
205
+ }
206
+ });
207
+ exports.createConsoleOutputSink = require_cli_runtime.createConsoleOutputSink;
208
+ exports.getCliOutputSink = require_cli_runtime.getCliOutputSink;
209
+ exports.parseCliArgs = require_cli_runtime.parseCliArgs;
210
+ exports.resetCliOutputSink = require_cli_runtime.resetCliOutputSink;
211
+ exports.runCli = require_cli_runtime.main;
212
+ exports.setCliOutputSink = require_cli_runtime.setCliOutputSink;
213
+ exports.startCli = require_cli_runtime.start;
214
+ var _open_wa_client = require("@open-wa/client");
215
+ Object.keys(_open_wa_client).forEach(function(k) {
216
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
217
+ enumerable: true,
218
+ get: function() {
219
+ return _open_wa_client[k];
220
+ }
221
+ });
222
+ });
223
+
224
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["LocalSessionCompression","S3SyncManager","getCliOutputSink","WAServer"],"sources":["../src/session/SessionManager.ts","../src/server/lifecycle-manager.ts"],"sourcesContent":["import { LocalSessionCompression, S3SyncManager } from '@open-wa/session-sync';\nimport type { ClientConfig } from '@open-wa/schema';\nimport { createLogger } from '@open-wa/logger';\n\nexport interface SessionManagerConfig {\n sessionId: string;\n dataDir: string;\n s3Config?: {\n bucket: string;\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n endpoint?: string;\n host?: string;\n };\n syncInterval?: number;\n compressionOptions?: string;\n enableLocalCompression?: boolean;\n enableS3Backup?: boolean;\n}\n\nexport class SessionManager {\n private logger = createLogger({ component: 'SessionManager' });\n private localCompression: LocalSessionCompression | null = null;\n private s3Sync: S3SyncManager | null = null;\n\n constructor(private config: SessionManagerConfig) {\n this.logger.info('SessionManager initialized', { sessionId: config.sessionId });\n }\n\n async start(): Promise<void> {\n // Start local compression if enabled\n if (this.config.enableLocalCompression !== false) {\n this.localCompression = new LocalSessionCompression({\n sessionPath: this.config.dataDir,\n sessionId: this.config.sessionId,\n intervalMs: this.config.syncInterval || 600000\n });\n \n await this.localCompression.start();\n this.logger.info('Local session compression started');\n }\n\n // Start S3 sync if configured\n if (this.config.enableS3Backup && this.config.s3Config) {\n this.s3Sync = new S3SyncManager(this.config.s3Config);\n \n // Start periodic S3 sync\n this.startPeriodicSync();\n this.logger.info('S3 session sync started');\n }\n }\n\n async stop(): Promise<void> {\n // Stop local compression\n if (this.localCompression) {\n await this.localCompression.stop();\n this.localCompression = null;\n }\n\n // Stop S3 sync\n if (this.s3Sync) {\n // Note: S3SyncManager doesn't have stop method in current implementation\n // This would need to be added to session-sync package\n this.s3Sync = null;\n }\n\n this.logger.info('SessionManager stopped');\n }\n\n async backupSession(): Promise<string | null> {\n if (!this.s3Sync) {\n this.logger.warn('S3 sync not configured');\n return null;\n }\n\n try {\n // Find the latest compressed session file\n const sessionZstPath = `${this.config.dataDir}/${this.config.sessionId}.data.zst`;\n \n const filename = await this.s3Sync.backupSession(sessionZstPath);\n this.logger.info('Session backed up to S3', { filename });\n return filename;\n } catch (error) {\n this.logger.error('Failed to backup session to S3', { error: error.message });\n throw error;\n }\n }\n\n async restoreSession(filename: string): Promise<void> {\n if (!this.s3Sync) {\n this.logger.warn('S3 sync not configured');\n throw new Error('S3 sync not configured for session restore');\n }\n\n try {\n await this.s3Sync.restoreSession(filename, this.config.dataDir);\n this.logger.info('Session restored from S3', { filename });\n } catch (error) {\n this.logger.error('Failed to restore session from S3', { error: error.message });\n throw error;\n }\n }\n\n async getSessionBackupUrl(filename: string, expiresIn = 3600): Promise<string | null> {\n if (!this.s3Sync) {\n this.logger.warn('S3 sync not configured');\n return null;\n }\n\n try {\n const url = await this.s3Sync.getDownloadUrl(filename, expiresIn);\n this.logger.info('Generated session backup URL', { filename, expiresIn });\n return url;\n } catch (error) {\n this.logger.error('Failed to generate backup URL', { error: error.message });\n throw error;\n }\n }\n\n private startPeriodicSync(): void {\n if (!this.s3Sync) return;\n\n const syncInterval = this.config.syncInterval || 600000; // Default 10 minutes\n\n setInterval(async () => {\n try {\n await this.backupSession();\n } catch (error) {\n this.logger.error('Periodic sync failed', { error: error.message });\n }\n }, syncInterval);\n }\n\n static createFromConfig(clientConfig: ClientConfig): SessionManager {\n const s3Config = clientConfig.s3Sync;\n \n return new SessionManager({\n sessionId: clientConfig.sessionId || 'session',\n dataDir: clientConfig.sessionDataPath || './.wwebjs',\n s3Config: s3Config,\n syncInterval: clientConfig.s3Sync?.syncInterval,\n compressionOptions: '-1 -T0', // Default compression options\n enableLocalCompression: clientConfig.s3Sync?.enableLocalCompression !== false,\n enableS3Backup: !!s3Config\n });\n }\n}","import { WAServer } from './hono-server';\nimport type { Config } from '@open-wa/config';\nimport { SessionManager } from '../session/SessionManager';\nimport { getCliOutputSink } from '../cli/output-sink';\n\nexport class APILifecycleManager {\n private config: Config;\n private server?: WAServer;\n private sessionManager?: SessionManager;\n // @ts-ignore\n private _sessionConnected: boolean = false;\n\n constructor(config: Config) {\n this.config = config;\n \n // Initialize session manager if S3 sync is configured\n if (config.s3Sync) {\n this.sessionManager = SessionManager.createFromConfig(config);\n }\n }\n\n public async initialize(): Promise<void> {\n const sink = getCliOutputSink();\n switch (this.config.apiLifecycle) {\n case 'immediate':\n sink.status({ phase: 'server.starting', sessionId: this.config.sessionId, detail: 'Starting full API immediately' });\n await this.startFullAPI();\n break;\n case 'post-connection':\n this.waitForConnection();\n break;\n case 'hybrid':\n sink.status({ phase: 'server.starting', sessionId: this.config.sessionId, detail: 'Starting minimal API (QR only)' });\n await this.startMinimalAPI();\n break;\n }\n \n // Start session manager after all other initialization\n if (this.sessionManager) {\n await this.sessionManager.start();\n }\n }\n\n private async waitForConnection(): Promise<void> {\n getCliOutputSink().write({ level: 'info', message: 'Waiting for session connection before starting API...' });\n // This will be called by the orchestrator or main entry point when session connects\n }\n\n private async startFullAPI(): Promise<void> {\n getCliOutputSink().write({ level: 'info', message: 'Starting full API immediately...' });\n this.server = new WAServer(this.config);\n await this.server.start();\n }\n\n private async startMinimalAPI(): Promise<void> {\n getCliOutputSink().write({ level: 'info', message: 'Starting minimal API (QR only)...' });\n \n // Create server with full config but we might restrict routes in the future\n // For now, hybrid mode just starts the server, but logic inside routes (like sendText)\n // should check if session is connected before execution.\n // In a more advanced implementation, we would only register public routes here.\n \n this.server = new WAServer(this.config);\n await this.server.start();\n }\n \n public async stop(): Promise<void> {\n // Stop session manager first\n if (this.sessionManager) {\n await this.sessionManager.stop();\n }\n \n // Then stop server\n if (this.server) {\n await this.server.stop();\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { a as WAServer, i as start, n as main, r as parseCliArgs, t as CliRuntimeResult } from "./cli-runtime-CmpYxFCk.cjs";
2
+ import { createApiMiddleware, createApiServer } from "@open-wa/api";
3
+ import { Config, Config as Config$1, ConfigSchema } from "@open-wa/config";
4
+ import { ClientConfig } from "@open-wa/schema";
5
+ import { CreateClientOptions, OpenWAClient, createClient } from "@open-wa/core";
6
+ export * from "@open-wa/client";
7
+
8
+ //#region src/server/lifecycle-manager.d.ts
9
+ declare class APILifecycleManager {
10
+ private config;
11
+ private server?;
12
+ private sessionManager?;
13
+ private _sessionConnected;
14
+ constructor(config: Config$1);
15
+ initialize(): Promise<void>;
16
+ private waitForConnection;
17
+ private startFullAPI;
18
+ private startMinimalAPI;
19
+ stop(): Promise<void>;
20
+ }
21
+ //#endregion
22
+ //#region src/session/SessionManager.d.ts
23
+ interface SessionManagerConfig {
24
+ sessionId: string;
25
+ dataDir: string;
26
+ s3Config?: {
27
+ bucket: string;
28
+ region: string;
29
+ accessKeyId: string;
30
+ secretAccessKey: string;
31
+ endpoint?: string;
32
+ host?: string;
33
+ };
34
+ syncInterval?: number;
35
+ compressionOptions?: string;
36
+ enableLocalCompression?: boolean;
37
+ enableS3Backup?: boolean;
38
+ }
39
+ declare class SessionManager {
40
+ private config;
41
+ private logger;
42
+ private localCompression;
43
+ private s3Sync;
44
+ constructor(config: SessionManagerConfig);
45
+ start(): Promise<void>;
46
+ stop(): Promise<void>;
47
+ backupSession(): Promise<string | null>;
48
+ restoreSession(filename: string): Promise<void>;
49
+ getSessionBackupUrl(filename: string, expiresIn?: number): Promise<string | null>;
50
+ private startPeriodicSync;
51
+ static createFromConfig(clientConfig: ClientConfig): SessionManager;
52
+ }
53
+ //#endregion
54
+ //#region src/cli/output-sink.d.ts
55
+ type CliOutputLevel = 'debug' | 'info' | 'warn' | 'error';
56
+ interface CliOutputEntry {
57
+ level: CliOutputLevel;
58
+ message: string;
59
+ meta?: Record<string, unknown>;
60
+ }
61
+ interface CliStatusUpdate {
62
+ phase: 'boot' | 'config.resolved' | 'server.starting' | 'server.started' | 'client.starting' | 'launch.auth' | 'launch.helpers' | 'launch.patch' | 'launch.license' | 'launch.finalize' | 'auth.qr' | 'client.ready' | 'shutdown.starting' | 'shutdown.complete' | 'error';
63
+ detail?: string;
64
+ sessionId?: string;
65
+ }
66
+ interface CliQrPayload {
67
+ qr: string;
68
+ sessionId: string;
69
+ }
70
+ interface CliOutputSink {
71
+ write(entry: CliOutputEntry): void;
72
+ status(update: CliStatusUpdate): void;
73
+ qr(payload: CliQrPayload): void;
74
+ }
75
+ declare function createConsoleOutputSink(): CliOutputSink;
76
+ declare function getCliOutputSink(): CliOutputSink;
77
+ declare function setCliOutputSink(sink: CliOutputSink): void;
78
+ declare function resetCliOutputSink(): void;
79
+ //#endregion
80
+ export { APILifecycleManager, type CliOutputEntry, type CliOutputLevel, type CliOutputSink, type CliQrPayload, type CliRuntimeResult, type CliStatusUpdate, Config, ConfigSchema, type CreateClientOptions, type OpenWAClient, SessionManager, WAServer, createApiMiddleware, createApiServer, createClient, createConsoleOutputSink, getCliOutputSink, parseCliArgs, resetCliOutputSink, main as runCli, setCliOutputSink, start as startCli };
81
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/server/lifecycle-manager.ts","../src/session/SessionManager.ts","../src/cli/output-sink.ts"],"mappings":";;;;;;;;cAKa,mBAAA;EAAA,QACD,MAAA;EAAA,QACA,MAAA;EAAA,QACA,cAAA;EAAA,QAEA,iBAAA;cAEI,MAAA,EAAQ,QAAA;EASP,UAAA,CAAA,GAAc,OAAA;EAAA,QAsBb,iBAAA;EAAA,QAKA,YAAA;EAAA,QAMA,eAAA;EAYD,IAAA,CAAA,GAAQ,OAAA;AAAA;;;UC9DR,oBAAA;EACf,SAAA;EACA,OAAA;EACA,QAAA;IACE,MAAA;IACA,MAAA;IACA,WAAA;IACA,eAAA;IACA,QAAA;IACA,IAAA;EAAA;EAEF,YAAA;EACA,kBAAA;EACA,sBAAA;EACA,cAAA;AAAA;AAAA,cAGW,cAAA;EAAA,QAKS,MAAA;EAAA,QAJZ,MAAA;EAAA,QACA,gBAAA;EAAA,QACA,MAAA;cAEY,MAAA,EAAQ,oBAAA;EAItB,KAAA,CAAA,GAAS,OAAA;EAuBT,IAAA,CAAA,GAAQ,OAAA;EAiBR,aAAA,CAAA,GAAiB,OAAA;EAmBjB,cAAA,CAAe,QAAA,WAAmB,OAAA;EAelC,mBAAA,CAAoB,QAAA,UAAkB,SAAA,YAAmB,OAAA;EAAA,QAgBvD,iBAAA;EAAA,OAcD,gBAAA,CAAiB,YAAA,EAAc,YAAA,GAAe,cAAA;AAAA;;;KCnI3C,cAAA;AAAA,UAEK,cAAA;EACf,KAAA,EAAO,cAAA;EACP,OAAA;EACA,IAAA,GAAO,MAAA;AAAA;AAAA,UAGQ,eAAA;EACf,KAAA;EAgBA,MAAA;EACA,SAAA;AAAA;AAAA,UAGe,YAAA;EACf,EAAA;EACA,SAAA;AAAA;AAAA,UAGe,aAAA;EACf,KAAA,CAAM,KAAA,EAAO,cAAA;EACb,MAAA,CAAO,MAAA,EAAQ,eAAA;EACf,EAAA,CAAG,OAAA,EAAS,YAAA;AAAA;AAAA,iBAiBE,uBAAA,CAAA,GAA2B,aAAA;AAAA,iBAwB3B,gBAAA,CAAA,GAAoB,aAAA;AAAA,iBAIpB,gBAAA,CAAiB,IAAA,EAAM,aAAA;AAAA,iBAIvB,kBAAA,CAAA"}