@iwonz/ywtc 0.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +4 -0
- package/CHANGELOG.md +56 -0
- package/LICENSE +21 -0
- package/README.md +267 -1
- package/dist/adapters/confluence.d.ts +46 -0
- package/dist/adapters/confluence.js +187 -0
- package/dist/adapters/confluence.js.map +1 -0
- package/dist/adapters/factory.d.ts +3 -0
- package/dist/adapters/factory.js +11 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/yandex.d.ts +45 -0
- package/dist/adapters/yandex.js +233 -0
- package/dist/adapters/yandex.js.map +1 -0
- package/dist/cli-arguments.d.ts +41 -0
- package/dist/cli-arguments.js +149 -0
- package/dist/cli-arguments.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +180 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/confluence-cloud.d.ts +45 -0
- package/dist/clients/confluence-cloud.js +261 -0
- package/dist/clients/confluence-cloud.js.map +1 -0
- package/dist/clients/confluence-factory.d.ts +3 -0
- package/dist/clients/confluence-factory.js +8 -0
- package/dist/clients/confluence-factory.js.map +1 -0
- package/dist/clients/confluence.d.ts +42 -0
- package/dist/clients/confluence.js +286 -0
- package/dist/clients/confluence.js.map +1 -0
- package/dist/clients/yandex-wiki.d.ts +35 -0
- package/dist/clients/yandex-wiki.js +255 -0
- package/dist/clients/yandex-wiki.js.map +1 -0
- package/dist/config.d.ts +52 -0
- package/dist/config.js +177 -0
- package/dist/config.js.map +1 -0
- package/dist/content-model.d.ts +12 -0
- package/dist/content-model.js +416 -0
- package/dist/content-model.js.map +1 -0
- package/dist/conversion.d.ts +43 -0
- package/dist/conversion.js +450 -0
- package/dist/conversion.js.map +1 -0
- package/dist/doctor.d.ts +24 -0
- package/dist/doctor.js +45 -0
- package/dist/doctor.js.map +1 -0
- package/dist/domain.d.ts +202 -0
- package/dist/domain.js +18 -0
- package/dist/domain.js.map +1 -0
- package/dist/filesystem-export.d.ts +53 -0
- package/dist/filesystem-export.js +243 -0
- package/dist/filesystem-export.js.map +1 -0
- package/dist/graph.d.ts +13 -0
- package/dist/graph.js +121 -0
- package/dist/graph.js.map +1 -0
- package/dist/http.d.ts +26 -0
- package/dist/http.js +100 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +4 -0
- package/dist/input.js +56 -0
- package/dist/input.js.map +1 -0
- package/dist/locators.d.ts +24 -0
- package/dist/locators.js +84 -0
- package/dist/locators.js.map +1 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +28 -0
- package/dist/logger.js.map +1 -0
- package/dist/migrator.d.ts +53 -0
- package/dist/migrator.js +669 -0
- package/dist/migrator.js.map +1 -0
- package/dist/rate-limiter.d.ts +12 -0
- package/dist/rate-limiter.js +31 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/report.d.ts +101 -0
- package/dist/report.js +106 -0
- package/dist/report.js.map +1 -0
- package/dist/state.d.ts +119 -0
- package/dist/state.js +201 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +24 -0
- package/dist/updater.js +92 -0
- package/dist/updater.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace.d.ts +29 -0
- package/dist/workspace.js +157 -0
- package/dist/workspace.js.map +1 -0
- package/docs/assets/readme-header.png +0 -0
- package/package.json +108 -3
- package/ywtc.config.example.yaml +52 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface NetworkLimits {
|
|
2
|
+
readConcurrency: number;
|
|
3
|
+
writeConcurrency: number;
|
|
4
|
+
downloadConcurrency: number;
|
|
5
|
+
uploadConcurrency: number;
|
|
6
|
+
requestsPerSecond: number;
|
|
7
|
+
burst: number;
|
|
8
|
+
}
|
|
9
|
+
interface ProfileBase {
|
|
10
|
+
name: string;
|
|
11
|
+
tokenEnv: string;
|
|
12
|
+
token: string;
|
|
13
|
+
limits: NetworkLimits;
|
|
14
|
+
}
|
|
15
|
+
export interface YandexConnectionProfile extends ProfileBase {
|
|
16
|
+
type: 'yandex-wiki';
|
|
17
|
+
apiUrl: string;
|
|
18
|
+
webUrl: string;
|
|
19
|
+
authType: 'oauth' | 'iam';
|
|
20
|
+
organization: {
|
|
21
|
+
type: 'yandex360' | 'cloud';
|
|
22
|
+
id: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface ConfluenceConnectionProfile extends ProfileBase {
|
|
26
|
+
type: 'confluence';
|
|
27
|
+
deployment: 'data-center' | 'cloud';
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
authType: 'pat' | 'api-token';
|
|
30
|
+
emailEnv?: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
}
|
|
33
|
+
export type ConnectionProfile = YandexConnectionProfile | ConfluenceConnectionProfile;
|
|
34
|
+
export interface AppConfig {
|
|
35
|
+
schemaVersion: 2;
|
|
36
|
+
profiles: Record<string, ConnectionProfile>;
|
|
37
|
+
timeoutMs: number;
|
|
38
|
+
concurrency: number;
|
|
39
|
+
envFile: string;
|
|
40
|
+
configFile: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class ConfigurationError extends Error {
|
|
43
|
+
readonly fields: string[];
|
|
44
|
+
readonly configFile?: string | undefined;
|
|
45
|
+
constructor(fields: string[], configFile?: string | undefined);
|
|
46
|
+
}
|
|
47
|
+
export declare function loadEnvironment(envFile: string, processEnvironment?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
48
|
+
export declare function readWorkspaceConfig(envFile: string, configFile: string, processEnvironment?: NodeJS.ProcessEnv): AppConfig;
|
|
49
|
+
/** Validate only the profiles an operation will actually use. */
|
|
50
|
+
export declare function validateProfileSecrets(config: AppConfig, profiles: ConnectionProfile[]): void;
|
|
51
|
+
export declare function secretValues(config: AppConfig): string[];
|
|
52
|
+
export {};
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { parse as parseDotEnv } from 'dotenv';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const limitsSchema = z.object({
|
|
6
|
+
readConcurrency: z.number().int().min(1).max(64).default(4),
|
|
7
|
+
writeConcurrency: z.number().int().min(1).max(32).default(2),
|
|
8
|
+
downloadConcurrency: z.number().int().min(1).max(32).default(2),
|
|
9
|
+
uploadConcurrency: z.number().int().min(1).max(32).default(2),
|
|
10
|
+
requestsPerSecond: z.number().int().min(1).max(1_000).default(8),
|
|
11
|
+
burst: z.number().int().min(1).max(1_000).default(8),
|
|
12
|
+
}).partial().default({});
|
|
13
|
+
const baseProfileSchema = z.object({
|
|
14
|
+
tokenEnv: z.string().regex(/^[A-Z][A-Z0-9_]*$/, 'must be an uppercase environment variable name'),
|
|
15
|
+
limits: limitsSchema,
|
|
16
|
+
});
|
|
17
|
+
const yandexProfileSchema = baseProfileSchema.extend({
|
|
18
|
+
type: z.literal('yandex-wiki'),
|
|
19
|
+
apiUrl: z.url(),
|
|
20
|
+
webUrl: z.url(),
|
|
21
|
+
authType: z.enum(['oauth', 'iam']).default('oauth'),
|
|
22
|
+
organization: z.object({
|
|
23
|
+
type: z.enum(['yandex360', 'cloud']).default('yandex360'),
|
|
24
|
+
id: z.string().trim().min(1),
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
const confluenceProfileSchema = baseProfileSchema.extend({
|
|
28
|
+
type: z.literal('confluence'),
|
|
29
|
+
deployment: z.enum(['data-center', 'cloud']),
|
|
30
|
+
baseUrl: z.url(),
|
|
31
|
+
authType: z.enum(['pat', 'api-token']),
|
|
32
|
+
emailEnv: z.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),
|
|
33
|
+
}).superRefine((profile, context) => {
|
|
34
|
+
if (profile.deployment === 'data-center' && profile.authType !== 'pat') {
|
|
35
|
+
context.addIssue({ code: 'custom', path: ['authType'], message: 'Data Center requires pat' });
|
|
36
|
+
}
|
|
37
|
+
if (profile.deployment === 'cloud' && profile.authType !== 'api-token') {
|
|
38
|
+
context.addIssue({ code: 'custom', path: ['authType'], message: 'Cloud requires api-token' });
|
|
39
|
+
}
|
|
40
|
+
if (profile.deployment === 'cloud' && !profile.emailEnv) {
|
|
41
|
+
context.addIssue({ code: 'custom', path: ['emailEnv'], message: 'Cloud API token requires emailEnv' });
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const fileSchema = z.object({
|
|
45
|
+
schemaVersion: z.literal(2),
|
|
46
|
+
defaults: z.object({
|
|
47
|
+
timeoutMs: z.number().int().min(1_000).max(300_000).default(30_000),
|
|
48
|
+
concurrency: z.number().int().min(1).max(64).default(4),
|
|
49
|
+
}).partial().default({}),
|
|
50
|
+
connections: z.record(z.string().regex(/^[a-z0-9][a-z0-9._-]*$/), z.discriminatedUnion('type', [
|
|
51
|
+
yandexProfileSchema,
|
|
52
|
+
confluenceProfileSchema,
|
|
53
|
+
])).refine((connections) => Object.keys(connections).length > 0, 'at least one connection is required'),
|
|
54
|
+
});
|
|
55
|
+
export class ConfigurationError extends Error {
|
|
56
|
+
fields;
|
|
57
|
+
configFile;
|
|
58
|
+
constructor(fields, configFile) {
|
|
59
|
+
const location = configFile ? ` in ${configFile}` : '';
|
|
60
|
+
super(`Invalid or missing configuration${location}: ${fields.join(', ')}. Run "ywtc init" and fix the listed values.`);
|
|
61
|
+
this.fields = fields;
|
|
62
|
+
this.configFile = configFile;
|
|
63
|
+
this.name = 'ConfigurationError';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function withoutTrailingSlash(value) {
|
|
67
|
+
return value.replace(/\/+$/, '');
|
|
68
|
+
}
|
|
69
|
+
export function loadEnvironment(envFile, processEnvironment = process.env) {
|
|
70
|
+
let fileEnvironment = {};
|
|
71
|
+
try {
|
|
72
|
+
fileEnvironment = parseDotEnv(readFileSync(envFile));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error.code !== 'ENOENT') {
|
|
76
|
+
throw new Error(`Cannot read workspace credentials: ${envFile}`, { cause: error });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { ...fileEnvironment, ...processEnvironment };
|
|
80
|
+
}
|
|
81
|
+
function readYaml(filename) {
|
|
82
|
+
try {
|
|
83
|
+
return parseYaml(readFileSync(filename, 'utf8'));
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error.code === 'ENOENT')
|
|
87
|
+
throw new ConfigurationError(['ywtc.config.yaml'], filename);
|
|
88
|
+
throw new Error(`Cannot parse workspace profile configuration: ${filename}`, { cause: error });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const defaultLimits = {
|
|
92
|
+
readConcurrency: 4,
|
|
93
|
+
writeConcurrency: 2,
|
|
94
|
+
downloadConcurrency: 2,
|
|
95
|
+
uploadConcurrency: 2,
|
|
96
|
+
requestsPerSecond: 8,
|
|
97
|
+
burst: 8,
|
|
98
|
+
};
|
|
99
|
+
function resolvedLimits(input) {
|
|
100
|
+
return {
|
|
101
|
+
readConcurrency: input.readConcurrency ?? defaultLimits.readConcurrency,
|
|
102
|
+
writeConcurrency: input.writeConcurrency ?? defaultLimits.writeConcurrency,
|
|
103
|
+
downloadConcurrency: input.downloadConcurrency ?? defaultLimits.downloadConcurrency,
|
|
104
|
+
uploadConcurrency: input.uploadConcurrency ?? defaultLimits.uploadConcurrency,
|
|
105
|
+
requestsPerSecond: input.requestsPerSecond ?? defaultLimits.requestsPerSecond,
|
|
106
|
+
burst: input.burst ?? defaultLimits.burst,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export function readWorkspaceConfig(envFile, configFile, processEnvironment = process.env) {
|
|
110
|
+
const parsed = fileSchema.safeParse(readYaml(configFile));
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
const fields = [...new Set(parsed.error.issues.map((issue) => issue.path.join('.') || 'configuration'))].sort();
|
|
113
|
+
throw new ConfigurationError(fields, configFile);
|
|
114
|
+
}
|
|
115
|
+
const environment = loadEnvironment(envFile, processEnvironment);
|
|
116
|
+
const profiles = {};
|
|
117
|
+
for (const [name, profile] of Object.entries(parsed.data.connections)) {
|
|
118
|
+
const token = environment[profile.tokenEnv]?.trim() ?? '';
|
|
119
|
+
const limits = resolvedLimits(profile.limits);
|
|
120
|
+
if (profile.type === 'yandex-wiki') {
|
|
121
|
+
profiles[name] = {
|
|
122
|
+
name,
|
|
123
|
+
type: profile.type,
|
|
124
|
+
apiUrl: withoutTrailingSlash(profile.apiUrl),
|
|
125
|
+
webUrl: withoutTrailingSlash(profile.webUrl),
|
|
126
|
+
authType: profile.authType,
|
|
127
|
+
organization: profile.organization,
|
|
128
|
+
tokenEnv: profile.tokenEnv,
|
|
129
|
+
token,
|
|
130
|
+
limits,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const email = profile.emailEnv ? environment[profile.emailEnv]?.trim() : undefined;
|
|
135
|
+
profiles[name] = {
|
|
136
|
+
name,
|
|
137
|
+
type: profile.type,
|
|
138
|
+
deployment: profile.deployment,
|
|
139
|
+
baseUrl: withoutTrailingSlash(profile.baseUrl),
|
|
140
|
+
authType: profile.authType,
|
|
141
|
+
tokenEnv: profile.tokenEnv,
|
|
142
|
+
token,
|
|
143
|
+
limits,
|
|
144
|
+
...(profile.emailEnv ? { emailEnv: profile.emailEnv } : {}),
|
|
145
|
+
...(email ? { email } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const timeoutOverride = Number(environment.HTTP_TIMEOUT_MS);
|
|
150
|
+
const concurrencyOverride = Number(environment.MIGRATION_CONCURRENCY);
|
|
151
|
+
return {
|
|
152
|
+
schemaVersion: 2,
|
|
153
|
+
profiles,
|
|
154
|
+
timeoutMs: Number.isInteger(timeoutOverride) && timeoutOverride >= 1_000 ? timeoutOverride : parsed.data.defaults.timeoutMs ?? 30_000,
|
|
155
|
+
concurrency: Number.isInteger(concurrencyOverride) && concurrencyOverride >= 1 ? concurrencyOverride : parsed.data.defaults.concurrency ?? 4,
|
|
156
|
+
envFile,
|
|
157
|
+
configFile,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/** Validate only the profiles an operation will actually use. */
|
|
161
|
+
export function validateProfileSecrets(config, profiles) {
|
|
162
|
+
const missing = profiles.flatMap((profile) => [
|
|
163
|
+
...(!profile.token ? [profile.tokenEnv] : []),
|
|
164
|
+
...(profile.type === 'confluence' && profile.deployment === 'cloud' && !profile.email
|
|
165
|
+
? [profile.emailEnv ?? 'emailEnv']
|
|
166
|
+
: []),
|
|
167
|
+
]);
|
|
168
|
+
if (missing.length > 0)
|
|
169
|
+
throw new ConfigurationError([...new Set(missing)].sort(), config.envFile);
|
|
170
|
+
}
|
|
171
|
+
export function secretValues(config) {
|
|
172
|
+
return Object.values(config.profiles).flatMap((profile) => [
|
|
173
|
+
...(profile.token ? [profile.token] : []),
|
|
174
|
+
...(profile.type === 'confluence' && profile.email ? [profile.email] : []),
|
|
175
|
+
]);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DestinationPage, NormalizedDocument, PageReference, RenderContext, RenderedDocument, SourcePage, SourceResource } from './domain.js';
|
|
2
|
+
export declare function extractPageReferences(content: string, format: SourcePage['rawFormat']): PageReference[];
|
|
3
|
+
export declare function normalizePageContent(page: SourcePage): NormalizedDocument;
|
|
4
|
+
export declare function appendGridSnapshots(document: NormalizedDocument, resources: SourceResource[]): NormalizedDocument;
|
|
5
|
+
export declare function normalizedPreviewHtml(document: NormalizedDocument): string;
|
|
6
|
+
export declare function renderedPreviewHtml(body: string, provider: SourcePage['provider']): string;
|
|
7
|
+
export declare function renderMarkdown(document: NormalizedDocument, context: RenderContext): Promise<RenderedDocument>;
|
|
8
|
+
export declare function renderStaticHtml(document: NormalizedDocument, context: RenderContext): Promise<RenderedDocument>;
|
|
9
|
+
export declare function renderYfm(document: NormalizedDocument, context: RenderContext): Promise<RenderedDocument>;
|
|
10
|
+
export declare function renderConfluenceStorage(document: NormalizedDocument, page: SourcePage, context: RenderContext, spaceKey: string): Promise<RenderedDocument>;
|
|
11
|
+
export declare function resolveYandexReferenceSlug(page: SourcePage, href: string): string | undefined;
|
|
12
|
+
export declare function destinationPageFromPath(path: string, title: string): DestinationPage;
|