@mdfriday/foundry 26.3.8 → 26.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -9173,20 +9173,15 @@ var init_publish2 = __esm({
9173
9173
  }
9174
9174
  /**
9175
9175
  * Publish project to specified platform
9176
+ *
9177
+ * @param project - 项目实例
9178
+ * @param config - 已合并的发布配置(由调用方准备)
9179
+ * @param options - 发布选项
9180
+ * @param onProgress - 进度回调
9176
9181
  */
9177
- async publish(project, method, options, onProgress) {
9178
- log17.info(`Publishing project: ${project.getName()} to ${method}`);
9182
+ async publish(project, config, options, onProgress) {
9183
+ log17.info(`Publishing project: ${project.getName()} to ${config.type}`);
9179
9184
  try {
9180
- const workspace = await this.workspaceService.loadWorkspace();
9181
- const globalConfig = await workspace.getAllConfig();
9182
- const publishConfig = WorkspacePublishConfig.fromGlobalConfig(globalConfig);
9183
- let config;
9184
- if (options?.config) {
9185
- const mergedConfig = publishConfig.merge(options.config, method);
9186
- config = await this.getMethodConfig(mergedConfig, method);
9187
- } else {
9188
- config = await this.getMethodConfig(publishConfig, method);
9189
- }
9190
9185
  const publicDir = await project.getPublishDir();
9191
9186
  const publisher = this.publisherFactory.create(
9192
9187
  project.getId(),
@@ -9205,27 +9200,59 @@ var init_publish2 = __esm({
9205
9200
  const result = await publisher.publish(publicDir, publishOptions);
9206
9201
  return result;
9207
9202
  } catch (error) {
9208
- log17.error(`Publish failed: ${method}`, error);
9203
+ log17.error(`Publish failed: ${config.type}`, error);
9209
9204
  throw error;
9210
9205
  }
9211
9206
  }
9212
9207
  /**
9213
9208
  * Test connection
9209
+ *
9210
+ * @param project - 项目实例
9211
+ * @param config - 已合并的发布配置(由调用方准备)
9214
9212
  */
9215
- async testConnection(project, method) {
9216
- const workspace = await this.workspaceService.loadWorkspace();
9213
+ async testConnection(project, config) {
9214
+ log17.info(`Testing ${config.type} connection for project: ${project.getName()}`);
9215
+ try {
9216
+ const publisher = this.publisherFactory.create(
9217
+ project.getId(),
9218
+ project.getPath(),
9219
+ config
9220
+ );
9221
+ if (publisher.testConnection) {
9222
+ return await publisher.testConnection();
9223
+ }
9224
+ return { success: true };
9225
+ } catch (error) {
9226
+ log17.error(`Test connection failed: ${config.type}`, error);
9227
+ return {
9228
+ success: false,
9229
+ error: error.message
9230
+ };
9231
+ }
9232
+ }
9233
+ /**
9234
+ * 准备最终的发布配置
9235
+ *
9236
+ * 配置查找优先级(两级):
9237
+ * 1. 项目配置 (project.config.publish)
9238
+ * 2. 全局配置 (workspace global config)
9239
+ *
9240
+ * @param workspace - Workspace 实例
9241
+ * @param project - Project 实例
9242
+ * @param method - 发布方法
9243
+ * @returns 最终的发布配置
9244
+ */
9245
+ async prepareFinalConfig(workspace, project, method) {
9217
9246
  const globalConfig = await workspace.getAllConfig();
9218
- const publishConfig = WorkspacePublishConfig.fromGlobalConfig(globalConfig);
9219
- const config = await this.getMethodConfig(publishConfig, method);
9220
- const publisher = this.publisherFactory.create(
9221
- project.getId(),
9222
- project.getPath(),
9223
- config
9224
- );
9225
- if (publisher.testConnection) {
9226
- return await publisher.testConnection();
9247
+ let publishConfig = WorkspacePublishConfig.fromGlobalConfig(globalConfig);
9248
+ await project.loadConfig();
9249
+ const projectConfig = project.getConfig();
9250
+ if (projectConfig?.publish) {
9251
+ log17.debug("Merging project publish config");
9252
+ const projectPublishData = projectConfig.publish;
9253
+ publishConfig = publishConfig.merge(projectPublishData, method);
9227
9254
  }
9228
- return { success: true };
9255
+ return this.getMethodConfig(publishConfig, method, workspace);
9229
9256
  }
9230
9257
  // ============================================================================
9231
9258
  // Private Methods
@@ -9233,7 +9260,7 @@ var init_publish2 = __esm({
9233
9260
  /**
9234
9261
  * Get method-specific config from WorkspacePublishConfig
9235
9262
  */
9236
- async getMethodConfig(publishConfig, method) {
9263
+ async getMethodConfig(publishConfig, method, workspace) {
9237
9264
  switch (method) {
9238
9265
  case "ftp":
9239
9266
  const ftpConfig = publishConfig.getFTPConfig();
@@ -9267,15 +9294,14 @@ var init_publish2 = __esm({
9267
9294
  const licenseKey = mdConfig.licenseKey || "";
9268
9295
  if (!licenseKey) {
9269
9296
  throw new Error(
9270
- "\u274C MDFriday license key is required for publishing.\n\nDifferent licenses deploy to different servers.\nYou must explicitly configure or provide a license key:\n\n1\uFE0F\u20E3 Configure license globally (recommended):\n mdf config:set publish.mdfriday.licenseKey MDF-XXXX-XXXX-XXXX --global\n\n2\uFE0F\u20E3 Pass license via CLI:\n mdf publish mdfriday --license-key MDF-XXXX-XXXX-XXXX\n\n\u{1F4A1} Note: License login (mdf license:login) only gets TOKEN.\n Publishing requires explicitly setting a license key."
9297
+ "\u274C MDFriday license key is required for publishing.\n\nDifferent licenses deploy to different servers.\nYou must explicitly configure a license key:\n\nConfigure license globally (recommended):\n mdf config:set publish.mdfriday.licenseKey MDF-XXXX-XXXX-XXXX --global\n\nOr configure for project only:\n mdf config:set publish.mdfriday.licenseKey MDF-XXXX-XXXX-XXXX\n\n\u{1F4A1} Note: License login (mdf license:login) only gets TOKEN.\n Publishing requires explicitly setting a license key."
9271
9298
  );
9272
9299
  }
9273
- const workspace = await this.workspaceService.loadWorkspace();
9274
9300
  const { createIdentityService: createIdentityService2 } = await Promise.resolve().then(() => (init_container(), container_exports));
9275
9301
  let accessToken = null;
9276
9302
  let apiUrl = "https://app.mdfriday.com";
9277
9303
  try {
9278
- const identityService = await createIdentityService2();
9304
+ const identityService = await createIdentityService2(workspace.getInfo().path);
9279
9305
  await identityService.initialize();
9280
9306
  accessToken = identityService.getToken();
9281
9307
  const serverConfig = identityService.getServerConfig();
@@ -9288,33 +9314,30 @@ var init_publish2 = __esm({
9288
9314
  }
9289
9315
  if (!accessToken) {
9290
9316
  throw new Error(
9291
- "\u274C MDFriday access token not found.\n\nPlease login first to get an access token:\n\nOption 1 - Login with email/password:\n mdf auth:login --email <email> --password <password>\n\nOption 2 - Login with license key:\n mdf license:login --key MDF-XXXX-XXXX-XXXX"
9317
+ "\u274C Not authenticated.\n\nPlease login first:\n mdf auth:login\n\nOr use license login:\n mdf license:login --key YOUR-LICENSE-KEY"
9292
9318
  );
9293
9319
  }
9294
9320
  return {
9295
9321
  type: "mdfriday",
9296
- deploymentType: mdConfig.type || "share",
9297
- // Already merged with CLI override
9298
9322
  licenseKey,
9299
- // Required, from merged config
9300
- enabled: mdConfig.enabled,
9301
9323
  accessToken,
9302
- // From Identity Service
9303
- apiUrl
9304
- // From Identity Service (ServerConfig)
9324
+ apiUrl,
9325
+ deploymentType: mdConfig.type || "share",
9326
+ enabled: true
9305
9327
  };
9306
9328
  default:
9307
- throw new Error(`Unknown publish method: ${method}`);
9329
+ throw new Error(`Unsupported publish method: ${method}`);
9308
9330
  }
9309
9331
  }
9310
9332
  };
9311
9333
  }
9312
9334
  });
9313
9335
 
9314
- // internal/interfaces/cli/container.ts
9336
+ // internal/application/container.ts
9315
9337
  var container_exports = {};
9316
9338
  __export(container_exports, {
9317
9339
  createIdentityService: () => createIdentityService,
9340
+ createIdentityServiceForObsidian: () => createIdentityServiceForObsidian,
9318
9341
  createPublishAppService: () => createPublishAppService,
9319
9342
  createWorkspaceAppService: () => createWorkspaceAppService,
9320
9343
  createWorkspaceFactory: () => createWorkspaceFactory
@@ -9334,19 +9357,30 @@ function createWorkspaceAppService() {
9334
9357
  workspaceFactory
9335
9358
  });
9336
9359
  }
9337
- async function createIdentityService(projectPath) {
9360
+ async function createIdentityService(workspacePath) {
9338
9361
  const httpClient = new NodeHttpClient();
9339
9362
  const workspaceAppService = createWorkspaceAppService();
9340
- const workspace = await workspaceAppService.loadWorkspace(projectPath);
9363
+ const workspace = await workspaceAppService.loadWorkspace(workspacePath);
9341
9364
  const storageProvider = workspaceAppService.createIdentityStorage(workspace);
9342
9365
  const userFactory = new UserFactory({
9343
9366
  httpClient,
9344
9367
  storageProvider
9345
9368
  });
9346
- const identityAppService = new IdentityAppService({
9369
+ return new IdentityAppService({
9370
+ userFactory
9371
+ });
9372
+ }
9373
+ async function createIdentityServiceForObsidian(workspacePath, httpClient) {
9374
+ const workspaceAppService = createWorkspaceAppService();
9375
+ const workspace = await workspaceAppService.loadWorkspace(workspacePath);
9376
+ const storageProvider = workspaceAppService.createIdentityStorage(workspace);
9377
+ const userFactory = new UserFactory({
9378
+ httpClient,
9379
+ storageProvider
9380
+ });
9381
+ return new IdentityAppService({
9347
9382
  userFactory
9348
9383
  });
9349
- return identityAppService;
9350
9384
  }
9351
9385
  function createPublishAppService() {
9352
9386
  const { PublishAppService: PublishAppService2 } = (init_publish2(), __toCommonJS(publish_exports2));
@@ -9362,7 +9396,7 @@ function createPublishAppService() {
9362
9396
  );
9363
9397
  }
9364
9398
  var init_container = __esm({
9365
- "internal/interfaces/cli/container.ts"() {
9399
+ "internal/application/container.ts"() {
9366
9400
  "use strict";
9367
9401
  init_workspace2();
9368
9402
  init_workspace3();
@@ -9372,6 +9406,22 @@ var init_container = __esm({
9372
9406
  }
9373
9407
  });
9374
9408
 
9409
+ // internal/interfaces/cli/container.ts
9410
+ var container_exports2 = {};
9411
+ __export(container_exports2, {
9412
+ createIdentityService: () => createIdentityService,
9413
+ createIdentityServiceForObsidian: () => createIdentityServiceForObsidian,
9414
+ createPublishAppService: () => createPublishAppService,
9415
+ createWorkspaceAppService: () => createWorkspaceAppService,
9416
+ createWorkspaceFactory: () => createWorkspaceFactory
9417
+ });
9418
+ var init_container2 = __esm({
9419
+ "internal/interfaces/cli/container.ts"() {
9420
+ "use strict";
9421
+ init_container();
9422
+ }
9423
+ });
9424
+
9375
9425
  // internal/domain/config/type.ts
9376
9426
  var ConfigError, ErrConfigNotFound, ErrInvalidConfig, ErrWorkspaceNotFound, ErrConfigFileNotFound, ErrInvalidConfigFormat;
9377
9427
  var init_type4 = __esm({
@@ -50558,7 +50608,7 @@ __export(cli_exports, {
50558
50608
  module.exports = __toCommonJS(cli_exports);
50559
50609
 
50560
50610
  // internal/interfaces/cli/router.ts
50561
- init_container();
50611
+ init_container2();
50562
50612
 
50563
50613
  // internal/interfaces/cli/commands/workspace.ts
50564
50614
  init_log();
@@ -52870,17 +52920,7 @@ var ServeCommand = class {
52870
52920
  },
52871
52921
  onSuccess: async () => {
52872
52922
  if (options.publish && this.publishAppService) {
52873
- const publishOptions = {};
52874
- if (options.type)
52875
- publishOptions.type = options.type;
52876
- if (options.licenseKey)
52877
- publishOptions.licenseKey = options.licenseKey;
52878
- await this.autoPublish(
52879
- project,
52880
- options.publish,
52881
- options.publishDelay,
52882
- publishOptions
52883
- );
52923
+ await this.autoPublish(workspace, project, options.publish, options.publishDelay);
52884
52924
  }
52885
52925
  }
52886
52926
  };
@@ -52980,7 +53020,7 @@ Press Ctrl+C to stop`,
52980
53020
  /**
52981
53021
  * 自动发布(带防抖)
52982
53022
  */
52983
- async autoPublish(project, method, delayMs, options) {
53023
+ async autoPublish(workspace, project, method, delayMs) {
52984
53024
  if (this.publishTimer) {
52985
53025
  clearTimeout(this.publishTimer);
52986
53026
  }
@@ -52995,17 +53035,11 @@ Press Ctrl+C to stop`,
52995
53035
  clearOnComplete: true
52996
53036
  });
52997
53037
  const startTime = Date.now();
52998
- const publishOptions = { incremental: true };
52999
- if (options && (options.type || options.licenseKey)) {
53000
- publishOptions.config = {
53001
- type: options.type,
53002
- licenseKey: options.licenseKey
53003
- };
53004
- }
53038
+ const config = await this.publishAppService.prepareFinalConfig(workspace, project, method);
53005
53039
  const result = await this.publishAppService.publish(
53006
53040
  project,
53007
- method,
53008
- publishOptions,
53041
+ config,
53042
+ { incremental: true },
53009
53043
  (progress) => {
53010
53044
  progressBar.update(progress.percentage, progress.message);
53011
53045
  }
@@ -53186,7 +53220,7 @@ var SnapshotDeleteCommand = class {
53186
53220
  };
53187
53221
 
53188
53222
  // internal/interfaces/cli/commands/auth.ts
53189
- init_container();
53223
+ init_container2();
53190
53224
  init_log();
53191
53225
  var log90 = getDomainLogger("auth-command", { component: "cli" });
53192
53226
  async function getIdentityService() {
@@ -54335,18 +54369,22 @@ var PublishCommand = class {
54335
54369
  description = "Publish project to hosting platform";
54336
54370
  async execute(args, options) {
54337
54371
  try {
54338
- const method = args[0];
54372
+ const subcommand = args[0];
54373
+ if (subcommand === "test") {
54374
+ return await this.executeTest(args.slice(1), options);
54375
+ }
54376
+ const method = subcommand;
54339
54377
  if (!method || !["ftp", "netlify", "mdfriday"].includes(method)) {
54340
54378
  return {
54341
54379
  success: false,
54342
- message: "Please specify publish method: ftp, netlify, or mdfriday\n\nUsage:\n mdf publish ftp [options]\n mdf publish netlify [options]\n mdf publish mdfriday [options]\n\nOptions:\n --project <name> Project to publish\n --force Force full publish (ignore incremental)\n --verbose Show detailed progress\n\nFTP Options:\n --host <host> FTP server host\n --username <user> FTP username\n --password <pass> FTP password\n --remote-path <path> Remote directory path\n\nExamples:\n mdf publish ftp\n mdf publish ftp --project my-blog\n mdf publish ftp --host ftp.example.com --username admin"
54380
+ message: "Please specify publish method: ftp, netlify, or mdfriday\n\nUsage:\n mdf publish ftp [options]\n mdf publish netlify [options]\n mdf publish mdfriday [options]\n mdf publish test <method>\n\nOptions:\n --project <name> Project to publish\n --force Force full publish (ignore incremental)\n --verbose Show detailed progress\n\nConfiguration:\n All publish settings are configured via config command:\n mdf config:set publish.<method>.<key> <value> --global\n mdf config:set publish.<method>.<key> <value> (project-level)\n\nExamples:\n mdf publish ftp\n mdf publish ftp --project my-blog --force\n mdf publish test ftp"
54343
54381
  };
54344
54382
  }
54345
54383
  const { workspace, project } = await this.workspaceAppService.loadWorkspaceAndProject(
54346
54384
  options.project
54347
54385
  );
54348
54386
  log92.info(`Publishing project: ${project.getName()} to ${method}`);
54349
- const configOverride = this.parseConfigOverride(method, options);
54387
+ const config = await this.publishService.prepareFinalConfig(workspace, project, method);
54350
54388
  const progressBar = new ProgressBar({
54351
54389
  width: 30,
54352
54390
  showPercentage: true,
@@ -54354,17 +54392,10 @@ var PublishCommand = class {
54354
54392
  clearOnComplete: true
54355
54393
  });
54356
54394
  const startTime = Date.now();
54357
- const appPublishOptions = {};
54358
- if (options.force) {
54359
- appPublishOptions.force = true;
54360
- }
54361
- if (configOverride) {
54362
- appPublishOptions.config = configOverride;
54363
- }
54364
54395
  const result = await this.publishService.publish(
54365
54396
  project,
54366
- method,
54367
- appPublishOptions,
54397
+ config,
54398
+ options.force ? { force: true } : {},
54368
54399
  (progress) => {
54369
54400
  if (options.verbose) {
54370
54401
  console.log(
@@ -54424,40 +54455,48 @@ var PublishCommand = class {
54424
54455
  }
54425
54456
  }
54426
54457
  /**
54427
- * Parse config override from command line options
54458
+ * Execute test connection command
54428
54459
  */
54429
- parseConfigOverride(method, options) {
54430
- switch (method) {
54431
- case "ftp":
54432
- if (options.host || options.username) {
54433
- return {
54434
- host: options.host,
54435
- port: options.port || 21,
54436
- username: options.username,
54437
- password: options.password,
54438
- remotePath: options.remotePath || "/",
54439
- secure: options.secure !== false
54440
- };
54441
- }
54442
- break;
54443
- case "netlify":
54444
- if (options.siteId || options.token) {
54445
- return {
54446
- siteId: options.siteId,
54447
- accessToken: options.token
54448
- };
54449
- }
54450
- break;
54451
- case "mdfriday":
54452
- if (options.type || options.licenseKey) {
54453
- return {
54454
- type: options.type,
54455
- licenseKey: options.licenseKey
54456
- };
54457
- }
54458
- break;
54460
+ async executeTest(args, options) {
54461
+ try {
54462
+ const method = args[0];
54463
+ if (!method || !["ftp", "netlify", "mdfriday"].includes(method)) {
54464
+ return {
54465
+ success: false,
54466
+ message: "Please specify publish method to test: ftp, netlify, or mdfriday\n\nUsage:\n mdf publish test ftp\n mdf publish test netlify\n mdf publish test mdfriday\n\nOptions:\n --project <name> Project to test (optional)\n\nConfiguration:\n All publish settings are configured via config command:\n mdf config:set publish.<method>.<key> <value> --global\n mdf config:set publish.<method>.<key> <value> (project-level)\n\nExamples:\n mdf publish test ftp\n mdf publish test netlify"
54467
+ };
54468
+ }
54469
+ const { workspace, project } = await this.workspaceAppService.loadWorkspaceAndProject(
54470
+ options.project
54471
+ );
54472
+ log92.info(`Testing ${method} connection for project: ${project.getName()}`);
54473
+ const config = await this.publishService.prepareFinalConfig(workspace, project, method);
54474
+ console.log(`
54475
+ Testing ${method.toUpperCase()} connection...`);
54476
+ console.log("Configuration priority: Project config > Global config\n");
54477
+ const result = await this.publishService.testConnection(project, config);
54478
+ if (result.success) {
54479
+ return {
54480
+ success: true,
54481
+ message: `
54482
+ \u2713 ${method.toUpperCase()} connection test passed!`
54483
+ };
54484
+ } else {
54485
+ return {
54486
+ success: false,
54487
+ message: `
54488
+ \u2717 ${method.toUpperCase()} connection test failed: ${result.error}`,
54489
+ error: new Error(result.error)
54490
+ };
54491
+ }
54492
+ } catch (error) {
54493
+ log92.error("Test connection command failed", error);
54494
+ return {
54495
+ success: false,
54496
+ message: `Test connection failed: ${error.message}`,
54497
+ error
54498
+ };
54459
54499
  }
54460
- return void 0;
54461
54500
  }
54462
54501
  };
54463
54502
 
@@ -54480,7 +54519,7 @@ var CommandRegistry = class {
54480
54519
  this.register(new ProjectShowCommand(workspaceAppService));
54481
54520
  this.register(new ProjectDeleteCommand(workspaceAppService));
54482
54521
  this.register(new BuildCommand(workspaceAppService));
54483
- const { createPublishAppService: createPublishAppService2 } = (init_container(), __toCommonJS(container_exports));
54522
+ const { createPublishAppService: createPublishAppService2 } = (init_container2(), __toCommonJS(container_exports2));
54484
54523
  const publishAppService = createPublishAppService2();
54485
54524
  this.register(new PublishCommand(publishAppService, workspaceAppService));
54486
54525
  this.register(new ServeCommand(workspaceAppService, publishAppService));
@@ -54832,7 +54871,7 @@ For more information, visit: https://help.mdfriday.com
54832
54871
  * Show version
54833
54872
  */
54834
54873
  showVersion() {
54835
- const version = "26.3.8";
54874
+ const version = "26.3.9";
54836
54875
  return {
54837
54876
  success: true,
54838
54877
  message: `MDFriday CLI v${version}`
package/dist/index.d.ts CHANGED
@@ -3,4 +3,4 @@ export { processSSGParallel, ParallelSSGStats } from './internal/application/ssg
3
3
  export { startIncrementalBuild, IncrementalBuildConfig, IncrementalBuildCoordinator } from './internal/application/incremental-ssg';
4
4
  export { MarkdownRenderer, AutoIDGenerator, ParsingResult, Header, TocFragments, Link, Paragraph } from './internal/domain/markdown';
5
5
  export { PageTask } from './pkg/page-filter';
6
- export { ObsidianWorkspaceService, createObsidianWorkspaceService, ObsidianWorkspaceInitOptions, ObsidianWorkspaceInfo, ObsidianWorkspaceResult, ObsidianProjectService, createObsidianProjectService, ObsidianProjectCreateOptions, ObsidianProjectInfo, ObsidianProjectResult, ObsidianBuildService, createObsidianBuildService, ObsidianBuildOptions, ObsidianBuildResult, ObsidianGlobalConfigService, ObsidianProjectConfigService, createObsidianGlobalConfigService, createObsidianProjectConfigService, ObsidianConfigResult, ConfigGetResult, ConfigListResult, ObsidianPublishService, createObsidianPublishService, ObsidianPublishMethod, ObsidianPublishOptions, ObsidianPublishProgress, ObsidianPublishResult, ObsidianTestConnectionResult, ObsidianServeService, createObsidianServeService, ObsidianServeOptions, ObsidianServeResult, ObsidianServeProgress, ObsidianLicenseService, createObsidianLicenseService, ObsidianLicenseInfo, ObsidianLicenseUsage, ObsidianLicenseResult, ObsidianAuthService, createObsidianAuthService, ObsidianAuthStatus, ObsidianServerConfig, ObsidianAuthResult, ObsidianDomainService, createObsidianDomainService, ObsidianDomainInfo, ObsidianSubdomainCheckResult, ObsidianSubdomainUpdateResult, ObsidianCustomDomainCheckResult, ObsidianCustomDomainAddResult, ObsidianHttpsCertificate, ObsidianHttpsStatusResult, ObsidianDomainResult, createWorkspaceAppService, createWorkspaceFactory, type HttpClient, type HttpResponse, } from './internal/interfaces/obsidian';
6
+ export { ObsidianWorkspaceService, createObsidianWorkspaceService, ObsidianWorkspaceInitOptions, ObsidianWorkspaceInfo, ObsidianWorkspaceResult, ObsidianProjectService, createObsidianProjectService, ObsidianProjectCreateOptions, ObsidianProjectInfo, ObsidianProjectResult, ObsidianBuildService, createObsidianBuildService, ObsidianBuildOptions, ObsidianBuildResult, ObsidianGlobalConfigService, ObsidianProjectConfigService, createObsidianGlobalConfigService, createObsidianProjectConfigService, ObsidianConfigResult, ConfigGetResult, ConfigListResult, ObsidianPublishService, createObsidianPublishService, ObsidianPublishMethod, ObsidianPublishOptions, ObsidianPublishProgress, ObsidianPublishResult, ObsidianTestConnectionResult, ObsidianServeService, createObsidianServeService, ObsidianServeOptions, ObsidianServeResult, ObsidianServeProgress, ObsidianLicenseService, createObsidianLicenseService, ObsidianLicenseInfo, ObsidianLicenseUsage, ObsidianLicenseResult, ObsidianAuthService, createObsidianAuthService, ObsidianAuthStatus, ObsidianServerConfig, ObsidianAuthResult, ObsidianDomainService, createObsidianDomainService, ObsidianDomainInfo, ObsidianSubdomainCheckResult, ObsidianSubdomainUpdateResult, ObsidianCustomDomainCheckResult, ObsidianCustomDomainAddResult, ObsidianHttpsCertificate, ObsidianHttpsStatusResult, ObsidianDomainResult, createWorkspaceAppService, createWorkspaceFactory, type PublishHttpClient, type PublishHttpResponse, type IdentityHttpClient, type IdentityHttpResponse, type AnyPublishConfig, type FTPConfig, type NetlifyConfig, type MDFridayConfig, } from './internal/interfaces/obsidian';