@mdfriday/foundry 26.3.1 → 26.3.3

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.
@@ -60,6 +60,11 @@ export declare class Project {
60
60
  getStaticLink(): {
61
61
  sourcePath: string;
62
62
  } | null;
63
+ getFileLink(): {
64
+ sourcePath: string;
65
+ targetPath: string;
66
+ isSymlink: boolean;
67
+ } | null;
63
68
  setContentLinks(links: Array<{
64
69
  sourcePath: string;
65
70
  languageCode: string;
@@ -0,0 +1,26 @@
1
+ import { HttpClient } from '@internal/domain/publish/repository/http-client';
2
+ export interface ObsidianAuthStatus {
3
+ isAuthenticated: boolean;
4
+ email?: string;
5
+ serverUrl: string;
6
+ token?: string;
7
+ }
8
+ export interface ObsidianServerConfig {
9
+ apiUrl: string;
10
+ websiteUrl?: string;
11
+ }
12
+ export interface ObsidianAuthResult<T = void> {
13
+ success: boolean;
14
+ message: string;
15
+ data?: T;
16
+ error?: string;
17
+ }
18
+ export declare class ObsidianAuthService {
19
+ private httpClient;
20
+ constructor(httpClient?: HttpClient);
21
+ getStatus(): Promise<ObsidianAuthResult<ObsidianAuthStatus>>;
22
+ getConfig(): Promise<ObsidianAuthResult<ObsidianServerConfig>>;
23
+ updateConfig(config: ObsidianServerConfig): Promise<ObsidianAuthResult<ObsidianServerConfig>>;
24
+ private getIdentityService;
25
+ }
26
+ export declare function createObsidianAuthService(httpClient?: HttpClient): ObsidianAuthService;
@@ -0,0 +1,31 @@
1
+ import { WorkspaceAppService } from '@internal/application/workspace';
2
+ export interface ObsidianBuildOptions {
3
+ workspacePath: string;
4
+ projectNameOrPath: string;
5
+ destination?: string;
6
+ modulesDir?: string;
7
+ contentDirs?: string[];
8
+ clean?: boolean;
9
+ parallel?: boolean;
10
+ snapshot?: boolean;
11
+ snapshotName?: string;
12
+ }
13
+ export interface ObsidianBuildResult {
14
+ success: boolean;
15
+ message?: string;
16
+ data?: {
17
+ projectName: string;
18
+ duration: number;
19
+ outputDir: string;
20
+ contentDirs: string[];
21
+ snapshot?: string;
22
+ };
23
+ error?: string;
24
+ }
25
+ export declare class ObsidianBuildService {
26
+ private workspaceAppService;
27
+ constructor(workspaceAppService: WorkspaceAppService);
28
+ buildProject(options: ObsidianBuildOptions): Promise<ObsidianBuildResult>;
29
+ private cleanOutputDir;
30
+ }
31
+ export declare function createObsidianBuildService(): ObsidianBuildService;
@@ -0,0 +1,47 @@
1
+ import { WorkspaceAppService } from '@internal/application/workspace';
2
+ export interface ObsidianConfigResult<T = any> {
3
+ success: boolean;
4
+ message?: string;
5
+ data?: T;
6
+ error?: string;
7
+ }
8
+ export interface ConfigGetResult {
9
+ key: string;
10
+ value: any;
11
+ project?: string;
12
+ }
13
+ export interface ConfigListResult {
14
+ config: Record<string, any>;
15
+ scope: 'global' | 'project';
16
+ project?: string;
17
+ }
18
+ export declare class ObsidianGlobalConfigService {
19
+ private workspaceAppService;
20
+ constructor(workspaceAppService: WorkspaceAppService);
21
+ get(workspacePath: string, key: string): Promise<ObsidianConfigResult<ConfigGetResult>>;
22
+ set(workspacePath: string, key: string, value: any): Promise<ObsidianConfigResult<ConfigGetResult>>;
23
+ list(workspacePath: string): Promise<ObsidianConfigResult<ConfigListResult>>;
24
+ unset(workspacePath: string, key: string): Promise<ObsidianConfigResult<{
25
+ key: string;
26
+ }>>;
27
+ getConfigPath(workspacePath: string): Promise<ObsidianConfigResult<{
28
+ path: string;
29
+ }>>;
30
+ }
31
+ export declare class ObsidianProjectConfigService {
32
+ private workspaceAppService;
33
+ constructor(workspaceAppService: WorkspaceAppService);
34
+ get(workspacePath: string, projectName: string, key: string): Promise<ObsidianConfigResult<ConfigGetResult>>;
35
+ set(workspacePath: string, projectName: string, key: string, value: any): Promise<ObsidianConfigResult<ConfigGetResult>>;
36
+ list(workspacePath: string, projectName: string): Promise<ObsidianConfigResult<ConfigListResult>>;
37
+ unset(workspacePath: string, projectName: string, key: string): Promise<ObsidianConfigResult<{
38
+ key: string;
39
+ project: string;
40
+ }>>;
41
+ getConfigPath(workspacePath: string, projectName: string): Promise<ObsidianConfigResult<{
42
+ path: string;
43
+ project: string;
44
+ }>>;
45
+ }
46
+ export declare function createObsidianGlobalConfigService(): ObsidianGlobalConfigService;
47
+ export declare function createObsidianProjectConfigService(): ObsidianProjectConfigService;
@@ -0,0 +1,59 @@
1
+ import { HttpClient } from '@internal/domain/publish/repository/http-client';
2
+ export interface ObsidianDomainInfo {
3
+ subdomain: string;
4
+ fullDomain: string;
5
+ customDomain?: string;
6
+ folder: string;
7
+ createdAt: string;
8
+ }
9
+ export interface ObsidianSubdomainCheckResult {
10
+ available: boolean;
11
+ message?: string;
12
+ }
13
+ export interface ObsidianSubdomainUpdateResult {
14
+ oldSubdomain: string;
15
+ newSubdomain: string;
16
+ fullDomain: string;
17
+ message: string;
18
+ }
19
+ export interface ObsidianCustomDomainCheckResult {
20
+ ready: boolean;
21
+ dnsValid: boolean;
22
+ resolvedIps?: string[];
23
+ message: string;
24
+ }
25
+ export interface ObsidianCustomDomainAddResult {
26
+ domain: string;
27
+ status: string;
28
+ message: string;
29
+ }
30
+ export interface ObsidianHttpsCertificate {
31
+ issuer?: string;
32
+ validFrom?: string;
33
+ validTo?: string;
34
+ }
35
+ export interface ObsidianHttpsStatusResult {
36
+ tlsReady: boolean;
37
+ dnsValid: boolean;
38
+ status: string;
39
+ message: string;
40
+ certificate?: ObsidianHttpsCertificate;
41
+ }
42
+ export interface ObsidianDomainResult<T = void> {
43
+ success: boolean;
44
+ message: string;
45
+ data?: T;
46
+ error?: string;
47
+ }
48
+ export declare class ObsidianDomainService {
49
+ private httpClient;
50
+ constructor(httpClient?: HttpClient);
51
+ getDomainInfo(): Promise<ObsidianDomainResult<ObsidianDomainInfo>>;
52
+ checkSubdomain(subdomain: string): Promise<ObsidianDomainResult<ObsidianSubdomainCheckResult>>;
53
+ updateSubdomain(newSubdomain: string): Promise<ObsidianDomainResult<ObsidianSubdomainUpdateResult>>;
54
+ checkCustomDomain(domain: string): Promise<ObsidianDomainResult<ObsidianCustomDomainCheckResult>>;
55
+ addCustomDomain(domain: string): Promise<ObsidianDomainResult<ObsidianCustomDomainAddResult>>;
56
+ checkHttpsStatus(domain: string): Promise<ObsidianDomainResult<ObsidianHttpsStatusResult>>;
57
+ private getIdentityService;
58
+ }
59
+ export declare function createObsidianDomainService(httpClient?: HttpClient): ObsidianDomainService;
@@ -1,2 +1,11 @@
1
1
  export { ObsidianWorkspaceService, createObsidianWorkspaceService, ObsidianWorkspaceInitOptions, ObsidianWorkspaceInfo, ObsidianWorkspaceResult, } from './workspace';
2
+ export { ObsidianProjectService, createObsidianProjectService, ObsidianProjectCreateOptions, ObsidianProjectInfo, ObsidianProjectResult, } from './project';
3
+ export { ObsidianBuildService, createObsidianBuildService, ObsidianBuildOptions, ObsidianBuildResult, } from './build';
4
+ export { ObsidianGlobalConfigService, ObsidianProjectConfigService, createObsidianGlobalConfigService, createObsidianProjectConfigService, ObsidianConfigResult, ConfigGetResult, ConfigListResult, } from './config';
5
+ export { ObsidianPublishService, createObsidianPublishService, ObsidianPublishMethod, ObsidianPublishOptions, ObsidianPublishProgress, ObsidianPublishResult, ObsidianTestConnectionResult, } from './publish';
6
+ export { ObsidianServeService, createObsidianServeService, ObsidianServeOptions, ObsidianServeResult, ObsidianServeProgress, } from './serve';
7
+ export { ObsidianLicenseService, createObsidianLicenseService, ObsidianLicenseInfo, ObsidianLicenseUsage, ObsidianLicenseResult, } from './license';
8
+ export { ObsidianAuthService, createObsidianAuthService, ObsidianAuthStatus, ObsidianServerConfig, ObsidianAuthResult, } from './auth';
9
+ export { ObsidianDomainService, createObsidianDomainService, ObsidianDomainInfo, ObsidianSubdomainCheckResult, ObsidianSubdomainUpdateResult, ObsidianCustomDomainCheckResult, ObsidianCustomDomainAddResult, ObsidianHttpsCertificate, ObsidianHttpsStatusResult, ObsidianDomainResult, } from './domain';
2
10
  export { createWorkspaceAppService, createWorkspaceFactory, } from './container';
11
+ export type { HttpClient, HttpResponse } from '@internal/domain/publish/repository/http-client';
@@ -0,0 +1,76 @@
1
+ import { WorkspaceAppService } from '@internal/application/workspace';
2
+ import { HttpClient } from '@internal/domain/publish/repository/http-client';
3
+ export interface ObsidianLicenseInfo {
4
+ key: string;
5
+ plan: string;
6
+ isExpired: boolean;
7
+ expires: string;
8
+ daysRemaining: number;
9
+ isTrial: boolean;
10
+ features: {
11
+ maxDevices: number;
12
+ maxIps: number;
13
+ syncEnabled: boolean;
14
+ syncQuota: number;
15
+ publishEnabled: boolean;
16
+ maxSites: number;
17
+ maxStorage: number;
18
+ customDomain: boolean;
19
+ customSubDomain: boolean;
20
+ };
21
+ }
22
+ export interface ObsidianLicenseUsage {
23
+ licenseKey: string;
24
+ plan: string;
25
+ devices: {
26
+ count: number;
27
+ max: number;
28
+ list: Array<{
29
+ id: string;
30
+ name: string;
31
+ type: string;
32
+ status: string;
33
+ lastSeenAt: string;
34
+ }>;
35
+ };
36
+ ips: {
37
+ count: number;
38
+ max: number;
39
+ list: Array<{
40
+ ip: string;
41
+ city: string;
42
+ region: string;
43
+ country: string;
44
+ status: string;
45
+ lastSeenAt: string;
46
+ }>;
47
+ };
48
+ disk: {
49
+ syncUsage: number;
50
+ publishUsage: number;
51
+ totalUsage: number;
52
+ maxStorage: number;
53
+ unit: string;
54
+ };
55
+ }
56
+ export interface ObsidianLicenseResult<T = any> {
57
+ success: boolean;
58
+ message?: string;
59
+ data?: T;
60
+ error?: string;
61
+ }
62
+ export declare class ObsidianLicenseService {
63
+ private workspaceAppService;
64
+ private httpClient;
65
+ constructor(workspaceAppService: WorkspaceAppService, httpClient?: HttpClient);
66
+ requestTrial(email: string): Promise<ObsidianLicenseResult<ObsidianLicenseInfo>>;
67
+ loginWithLicense(licenseKey: string): Promise<ObsidianLicenseResult<ObsidianLicenseInfo>>;
68
+ activateLicense(licenseKey: string): Promise<ObsidianLicenseResult<ObsidianLicenseInfo>>;
69
+ getLicenseInfo(): Promise<ObsidianLicenseResult<ObsidianLicenseInfo>>;
70
+ getLicenseUsage(): Promise<ObsidianLicenseResult<ObsidianLicenseUsage>>;
71
+ resetUsage(force: boolean): Promise<ObsidianLicenseResult<any>>;
72
+ hasActiveLicense(): Promise<boolean>;
73
+ private getIdentityService;
74
+ private buildLicenseInfo;
75
+ }
76
+ export declare function createObsidianLicenseService(httpClient?: HttpClient): ObsidianLicenseService;
@@ -0,0 +1,51 @@
1
+ import { WorkspaceAppService } from '@internal/application/workspace';
2
+ export interface ObsidianProjectCreateOptions {
3
+ name: string;
4
+ workspacePath: string;
5
+ theme?: string;
6
+ language?: string;
7
+ sourceFile?: string;
8
+ sourceFolder?: string;
9
+ createSampleContent?: boolean;
10
+ }
11
+ export interface ObsidianProjectInfo {
12
+ id: string;
13
+ name: string;
14
+ path: string;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ theme?: string;
18
+ language?: string;
19
+ fileLink?: {
20
+ sourcePath: string;
21
+ targetPath: string;
22
+ isSymlink: boolean;
23
+ };
24
+ contentLinks?: Array<{
25
+ sourcePath: string;
26
+ languageCode: string;
27
+ weight: number;
28
+ }>;
29
+ staticLink?: {
30
+ sourcePath: string;
31
+ };
32
+ languages?: string[];
33
+ }
34
+ export interface ObsidianProjectResult<T = any> {
35
+ success: boolean;
36
+ message?: string;
37
+ data?: T;
38
+ error?: string;
39
+ }
40
+ export declare class ObsidianProjectService {
41
+ private workspaceAppService;
42
+ constructor(workspaceAppService: WorkspaceAppService);
43
+ createProject(options: ObsidianProjectCreateOptions): Promise<ObsidianProjectResult<ObsidianProjectInfo>>;
44
+ private createProjectFromFile;
45
+ private createProjectFromFolder;
46
+ private createEmptyProject;
47
+ private buildProjectInfo;
48
+ listProjects(workspacePath: string): Promise<ObsidianProjectResult<ObsidianProjectInfo[]>>;
49
+ getProjectInfo(workspacePath: string, projectName: string): Promise<ObsidianProjectResult<ObsidianProjectInfo>>;
50
+ }
51
+ export declare function createObsidianProjectService(): ObsidianProjectService;
@@ -0,0 +1,43 @@
1
+ import { PublishAppService } from '@internal/application/publish';
2
+ import { WorkspaceAppService } from '@internal/application/workspace';
3
+ import { HttpClient } from '@internal/domain/publish/repository/http-client';
4
+ export type ObsidianPublishMethod = 'ftp' | 'netlify' | 'mdfriday';
5
+ export interface ObsidianPublishOptions {
6
+ workspacePath: string;
7
+ projectName: string;
8
+ method: ObsidianPublishMethod;
9
+ force?: boolean;
10
+ config?: any;
11
+ }
12
+ export interface ObsidianPublishProgress {
13
+ phase: 'scanning' | 'uploading' | 'deploying' | 'complete';
14
+ percentage: number;
15
+ message: string;
16
+ currentFile?: string;
17
+ filesCompleted?: number;
18
+ filesTotal?: number;
19
+ bytesTransferred?: number;
20
+ }
21
+ export interface ObsidianPublishResult {
22
+ success: boolean;
23
+ message?: string;
24
+ data?: {
25
+ url?: string;
26
+ filesUploaded: number;
27
+ bytesTransferred: number;
28
+ duration: number;
29
+ };
30
+ error?: string;
31
+ }
32
+ export interface ObsidianTestConnectionResult {
33
+ success: boolean;
34
+ error?: string;
35
+ }
36
+ export declare class ObsidianPublishService {
37
+ private publishAppService;
38
+ private workspaceAppService;
39
+ constructor(publishAppService: PublishAppService, workspaceAppService: WorkspaceAppService);
40
+ publish(options: ObsidianPublishOptions, onProgress?: (progress: ObsidianPublishProgress) => void): Promise<ObsidianPublishResult>;
41
+ testConnection(workspacePath: string, projectName: string, method: ObsidianPublishMethod): Promise<ObsidianTestConnectionResult>;
42
+ }
43
+ export declare function createObsidianPublishService(httpClient: HttpClient): ObsidianPublishService;
@@ -0,0 +1,47 @@
1
+ import { WorkspaceAppService } from '@internal/application/workspace';
2
+ import { PublishAppService } from '@internal/application/publish';
3
+ import { HttpClient } from '@internal/domain/publish/repository/http-client';
4
+ export interface ObsidianServeOptions {
5
+ workspacePath: string;
6
+ projectName: string;
7
+ port?: number;
8
+ host?: string;
9
+ livereloadPort?: number;
10
+ livereload?: boolean;
11
+ publish?: 'ftp' | 'netlify' | 'mdfriday';
12
+ publishDelay?: number;
13
+ publishConfig?: {
14
+ type?: string;
15
+ licenseKey?: string;
16
+ };
17
+ }
18
+ export interface ObsidianServeResult {
19
+ success: boolean;
20
+ message?: string;
21
+ data?: {
22
+ url: string;
23
+ port: number;
24
+ host: string;
25
+ livereloadPort?: number;
26
+ autoPublish?: string;
27
+ };
28
+ error?: string;
29
+ }
30
+ export interface ObsidianServeProgress {
31
+ phase: 'initializing' | 'building' | 'watching' | 'publishing' | 'ready';
32
+ percentage: number;
33
+ message: string;
34
+ currentFile?: string;
35
+ }
36
+ export declare class ObsidianServeService {
37
+ private workspaceAppService;
38
+ private publishAppService;
39
+ private coordinator?;
40
+ private publishTimer?;
41
+ constructor(workspaceAppService: WorkspaceAppService, publishAppService?: PublishAppService);
42
+ startServer(options: ObsidianServeOptions, onProgress?: (progress: ObsidianServeProgress) => void): Promise<ObsidianServeResult>;
43
+ stopServer(): Promise<boolean>;
44
+ isRunning(): boolean;
45
+ private autoPublish;
46
+ }
47
+ export declare function createObsidianServeService(httpClient?: HttpClient): ObsidianServeService;
@@ -116,6 +116,7 @@ var init_logger = __esm({
116
116
  entry.caller = caller;
117
117
  }
118
118
  const output = this.config.jsonFormat ? JSON.stringify(entry) : this.formatPlainText(entry);
119
+ console.log(output);
119
120
  if (level === "error" /* ERROR */ || level === "fatal" /* FATAL */) {
120
121
  process.stderr.write(output + "\n");
121
122
  } else {
@@ -116,6 +116,7 @@ var init_logger = __esm({
116
116
  entry.caller = caller;
117
117
  }
118
118
  const output = this.config.jsonFormat ? JSON.stringify(entry) : this.formatPlainText(entry);
119
+ console.log(output);
119
120
  if (level === "error" /* ERROR */ || level === "fatal" /* FATAL */) {
120
121
  process.stderr.write(output + "\n");
121
122
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdfriday/foundry",
3
- "version": "26.3.1",
3
+ "version": "26.3.3",
4
4
  "description": "The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",