@ticatec/omniflow-aliyun 1.0.0

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 (34) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -0
  3. package/README_CN.md +100 -0
  4. package/dist/client/AliyunClient.d.ts +7 -0
  5. package/dist/client/AliyunClient.d.ts.map +1 -0
  6. package/dist/client/AliyunClient.js +6 -0
  7. package/dist/client/AliyunClient.js.map +1 -0
  8. package/dist/docker/AliyunAcrPublisher.d.ts +22 -0
  9. package/dist/docker/AliyunAcrPublisher.d.ts.map +1 -0
  10. package/dist/docker/AliyunAcrPublisher.js +54 -0
  11. package/dist/docker/AliyunAcrPublisher.js.map +1 -0
  12. package/dist/generic/AliyunGenericPublisher.d.ts +35 -0
  13. package/dist/generic/AliyunGenericPublisher.d.ts.map +1 -0
  14. package/dist/generic/AliyunGenericPublisher.js +212 -0
  15. package/dist/generic/AliyunGenericPublisher.js.map +1 -0
  16. package/dist/index.d.ts +29 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +39 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/maven/AliyunMavenPublisher.d.ts +41 -0
  21. package/dist/maven/AliyunMavenPublisher.d.ts.map +1 -0
  22. package/dist/maven/AliyunMavenPublisher.js +261 -0
  23. package/dist/maven/AliyunMavenPublisher.js.map +1 -0
  24. package/dist/npm/AliyunNpmPublisher.d.ts +17 -0
  25. package/dist/npm/AliyunNpmPublisher.d.ts.map +1 -0
  26. package/dist/npm/AliyunNpmPublisher.js +63 -0
  27. package/dist/npm/AliyunNpmPublisher.js.map +1 -0
  28. package/package.json +58 -0
  29. package/src/client/AliyunClient.ts +14 -0
  30. package/src/docker/AliyunAcrPublisher.ts +61 -0
  31. package/src/generic/AliyunGenericPublisher.ts +273 -0
  32. package/src/index.ts +56 -0
  33. package/src/maven/AliyunMavenPublisher.ts +330 -0
  34. package/src/npm/AliyunNpmPublisher.ts +76 -0
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ import { AliyunAcrPublisher } from './docker/AliyunAcrPublisher.js';
2
+ import { AliyunNpmPublisher } from './npm/AliyunNpmPublisher.js';
3
+ import { AliyunMavenPublisher } from './maven/AliyunMavenPublisher.js';
4
+ import { AliyunGenericPublisher } from './generic/AliyunGenericPublisher.js';
5
+ export * from './docker/AliyunAcrPublisher.js';
6
+ export * from './npm/AliyunNpmPublisher.js';
7
+ export * from './maven/AliyunMavenPublisher.js';
8
+ export * from './generic/AliyunGenericPublisher.js';
9
+ export * from './client/AliyunClient.js';
10
+ /**
11
+ * Standard OmniFlow Plugin SPI entry point.
12
+ */
13
+ export function register(ctx, options = {}) {
14
+ const artifactsEnabled = options.artifacts !== false;
15
+ registerAliyun({ artifactRegistry: artifactsEnabled ? ctx.artifactRegistry : undefined });
16
+ }
17
+ export default register;
18
+ /**
19
+ * Register all official Aliyun artifact publishers (ACR, NPM, Maven, Generic) into the target registry.
20
+ */
21
+ export function registerAliyun(options = {}) {
22
+ const acrPublisher = new AliyunAcrPublisher();
23
+ const npmPublisher = new AliyunNpmPublisher();
24
+ const mavenPublisher = new AliyunMavenPublisher();
25
+ const genericPublisher = new AliyunGenericPublisher();
26
+ if (options.artifactRegistry) {
27
+ options.artifactRegistry.register(acrPublisher);
28
+ options.artifactRegistry.register(npmPublisher);
29
+ options.artifactRegistry.register(mavenPublisher);
30
+ options.artifactRegistry.register(genericPublisher);
31
+ }
32
+ return {
33
+ acrPublisher,
34
+ npmPublisher,
35
+ mavenPublisher,
36
+ genericPublisher
37
+ };
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,0BAA0B,CAAA;AAMxC;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAkB,EAAE,UAAmC,EAAE;IAChF,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK,CAAA;IACpD,cAAc,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;AAC3F,CAAC;AAED,eAAe,QAAQ,CAAA;AAEvB;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAMhE,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;IAC7C,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;IAC7C,MAAM,cAAc,GAAG,IAAI,oBAAoB,EAAE,CAAA;IACjD,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAA;IAErD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC/C,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC/C,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QACjD,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACrD,CAAC;IAED,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,cAAc;QACd,gBAAgB;KACjB,CAAA;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { BasePublisher } from '@ticatec/omniflow-artifact';
2
+ import type { ArtifactPayload, PublishOptions, RegistryConfig } from '@ticatec/omniflow-artifact';
3
+ /**
4
+ * Aliyun Apsara DevOps (云效) Maven Package Registry Publisher.
5
+ *
6
+ * Endpoint format: https://packages.aliyun.com/maven/repository/<repoId>/
7
+ * Or direct custom console URL: https://packages.aliyun.com/<orgId>/maven/<repoId>/
8
+ */
9
+ export declare class AliyunMavenPublisher extends BasePublisher {
10
+ readonly id = "aliyun-maven";
11
+ readonly name = "Aliyun Packages Maven";
12
+ readonly platform = "aliyun-maven";
13
+ readonly artifactType = "maven";
14
+ readonly priority = 20;
15
+ detect(registry: RegistryConfig): boolean;
16
+ login(registry: RegistryConfig, _options?: PublishOptions): Promise<void>;
17
+ /**
18
+ * Resolve Maven coordinates (groupId, artifactId, version) from artifact.
19
+ * Throws an error if groupId is missing rather than guessing 'com.aliyun' (M4 fix).
20
+ */
21
+ protected resolveCoordinates(artifact: ArtifactPayload): {
22
+ groupId: string;
23
+ artifactId: string;
24
+ version: string;
25
+ };
26
+ /**
27
+ * Resolve the base repository URL.
28
+ * If server already contains path segments (e.g. console URL), respect it directly (M6 fix).
29
+ * If bare host, requires a valid namespace/repoId (M4 fix).
30
+ */
31
+ protected resolveBaseRepoUrl(registry: RegistryConfig): string;
32
+ protected buildAuthHeaders(username?: string, token?: string, secrets?: string[]): Record<string, string>;
33
+ buildTargetRef(artifact: ArtifactPayload, _registry: RegistryConfig): string;
34
+ exists(artifact: ArtifactPayload, registry: RegistryConfig, options?: PublishOptions): Promise<boolean>;
35
+ protected doPublish(artifact: ArtifactPayload, registry: RegistryConfig, options?: PublishOptions): Promise<{
36
+ ref: string;
37
+ digest?: string;
38
+ metadata?: Record<string, unknown>;
39
+ }>;
40
+ }
41
+ //# sourceMappingURL=AliyunMavenPublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AliyunMavenPublisher.d.ts","sourceRoot":"","sources":["../../src/maven/AliyunMavenPublisher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAuE,MAAM,4BAA4B,CAAA;AAC/H,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAGjG;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,EAAE,kBAAiB;IAC5B,QAAQ,CAAC,IAAI,2BAA0B;IACvC,QAAQ,CAAC,QAAQ,kBAAiB;IAClC,QAAQ,CAAC,YAAY,WAAU;IAC/B,SAAkB,QAAQ,MAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAuB5C,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/E;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG;QACvD,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;KAChB;IA0BD;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IA4B9D,SAAS,CAAC,gBAAgB,CACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,MAAM,EAAO,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAsBhB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM;IAUtE,MAAM,CACnB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC;cAwDH,SAAS,CACvB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC;QACT,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACnC,CAAC;CA0GH"}
@@ -0,0 +1,261 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { BasePublisher, resolveMavenArtifactFilenames, mavenPomPathFor, isMavenArtifactFile } from '@ticatec/omniflow-artifact';
5
+ import { safeFetch, extractErrorMessage, maskSecrets } from '../client/AliyunClient.js';
6
+ /**
7
+ * Aliyun Apsara DevOps (云效) Maven Package Registry Publisher.
8
+ *
9
+ * Endpoint format: https://packages.aliyun.com/maven/repository/<repoId>/
10
+ * Or direct custom console URL: https://packages.aliyun.com/<orgId>/maven/<repoId>/
11
+ */
12
+ export class AliyunMavenPublisher extends BasePublisher {
13
+ id = 'aliyun-maven';
14
+ name = 'Aliyun Packages Maven';
15
+ platform = 'aliyun-maven';
16
+ artifactType = 'maven';
17
+ priority = 20;
18
+ detect(registry) {
19
+ if (registry.type !== 'maven' && registry.type !== 'jar') {
20
+ return false;
21
+ }
22
+ const regName = (registry.name || '').toLowerCase();
23
+ if (regName === 'aliyun' || regName.startsWith('aliyun-')) {
24
+ return true;
25
+ }
26
+ const server = (registry.server || '').toLowerCase();
27
+ try {
28
+ const parsed = new URL(server.includes('://') ? server : `https://${server}`);
29
+ const host = parsed.hostname.toLowerCase();
30
+ const segments = host.split('.');
31
+ const isAliyun = host === 'aliyun.com' || host.endsWith('.aliyun.com');
32
+ const isPackages = segments.includes('packages') || host === 'packages.aliyun.com';
33
+ return isAliyun && isPackages;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ async login(registry, _options) {
40
+ const creds = this.resolveCredentials(registry);
41
+ if (!creds.token && !creds.username) {
42
+ this.log(` ℹ No credentials configured for Aliyun Maven repository ${registry.server}`);
43
+ }
44
+ else if (creds.token && !creds.username && !creds.token.includes(':')) {
45
+ this.warn(` ⚠ Aliyun Maven repository typically requires username + password/token for Basic authentication`);
46
+ }
47
+ }
48
+ /**
49
+ * Resolve Maven coordinates (groupId, artifactId, version) from artifact.
50
+ * Throws an error if groupId is missing rather than guessing 'com.aliyun' (M4 fix).
51
+ */
52
+ resolveCoordinates(artifact) {
53
+ let groupId = artifact.metadata?.groupId?.trim();
54
+ let artifactId = artifact.metadata?.artifactId?.trim();
55
+ if (!groupId && artifact.name.includes(':')) {
56
+ const parts = artifact.name.split(':');
57
+ groupId = parts[0].trim();
58
+ artifactId = artifactId || parts[1].trim();
59
+ }
60
+ if (!groupId) {
61
+ throw new Error(`Aliyun Maven publisher requires a valid 'groupId' (specify via artifact.metadata.groupId or 'groupId:artifactId' name)`);
62
+ }
63
+ if (!artifactId) {
64
+ artifactId = artifact.name.trim();
65
+ }
66
+ const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : artifact.metadata?.version || '1.0.0';
67
+ return { groupId, artifactId, version };
68
+ }
69
+ /**
70
+ * Resolve the base repository URL.
71
+ * If server already contains path segments (e.g. console URL), respect it directly (M6 fix).
72
+ * If bare host, requires a valid namespace/repoId (M4 fix).
73
+ */
74
+ resolveBaseRepoUrl(registry) {
75
+ let serverUrl = registry.server.trim();
76
+ if (!/^https?:\/\//i.test(serverUrl)) {
77
+ serverUrl = `https://${serverUrl}`;
78
+ }
79
+ const parsed = new URL(serverUrl);
80
+ const cleanServer = serverUrl.replace(/\/+$/, '');
81
+ // M6 Escape hatch: if server contains path segments beyond '/', use it as-is
82
+ if (parsed.pathname !== '/' && parsed.pathname !== '') {
83
+ return cleanServer;
84
+ }
85
+ const reg = registry;
86
+ const repoId = reg.namespace?.trim() ||
87
+ reg.options?.repoId?.trim() ||
88
+ reg.metadata?.repoId?.trim();
89
+ if (!repoId) {
90
+ throw new Error(`Aliyun Maven publisher requires a valid repository ID (specify via registry.namespace or full server URL)`);
91
+ }
92
+ return `${cleanServer}/maven/repository/${encodeURIComponent(repoId)}`;
93
+ }
94
+ buildAuthHeaders(username, token, secrets = []) {
95
+ const headers = {};
96
+ if (username && token) {
97
+ const basic = Buffer.from(`${username}:${token}`).toString('base64');
98
+ if (basic.length >= 3) {
99
+ secrets.push(basic);
100
+ }
101
+ headers['Authorization'] = `Basic ${basic}`;
102
+ }
103
+ else if (token) {
104
+ if (token.includes(':')) {
105
+ const basic = Buffer.from(token).toString('base64');
106
+ if (basic.length >= 3) {
107
+ secrets.push(basic);
108
+ }
109
+ headers['Authorization'] = `Basic ${basic}`;
110
+ }
111
+ else {
112
+ headers['Authorization'] = `Bearer ${token}`;
113
+ }
114
+ }
115
+ return headers;
116
+ }
117
+ buildTargetRef(artifact, _registry) {
118
+ try {
119
+ const { groupId, artifactId, version } = this.resolveCoordinates(artifact);
120
+ return `${groupId}:${artifactId}:${version}`;
121
+ }
122
+ catch {
123
+ const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : '1.0.0';
124
+ return `${artifact.name}:${version}`;
125
+ }
126
+ }
127
+ async exists(artifact, registry, options) {
128
+ const creds = this.resolveCredentials(registry);
129
+ const token = creds.token || creds.password;
130
+ const username = creds.username;
131
+ const secrets = [token, creds.password].filter((s) => typeof s === 'string' && s.length >= 3);
132
+ let jarPath = artifact.source;
133
+ if (jarPath) {
134
+ const stat = await fs.stat(jarPath).catch(() => null);
135
+ if (stat?.isDirectory()) {
136
+ const files = await fs.readdir(jarPath).catch(() => []);
137
+ const jarFile = files.find(f => isMavenArtifactFile(f));
138
+ if (jarFile) {
139
+ jarPath = path.join(jarPath, jarFile);
140
+ }
141
+ }
142
+ }
143
+ const { groupId, artifactId, version, groupPath, jarFilename } = resolveMavenArtifactFilenames(artifact, jarPath, undefined, 'Aliyun');
144
+ const baseRepoUrl = this.resolveBaseRepoUrl(registry);
145
+ const probeUrl = `${baseRepoUrl}/${groupPath}/${artifactId}/${version}/${jarFilename}`;
146
+ const headers = this.buildAuthHeaders(username, token, secrets);
147
+ const timeoutMs = options?.timeoutMs ?? 10000;
148
+ try {
149
+ const res = await safeFetch(probeUrl, {
150
+ method: 'HEAD',
151
+ headers,
152
+ timeoutMs,
153
+ secrets
154
+ });
155
+ if (res.ok || res.status === 200 || res.status === 204) {
156
+ return true;
157
+ }
158
+ if (res.status === 404) {
159
+ return false;
160
+ }
161
+ // Fail-close on authorization or server errors
162
+ const errText = await extractErrorMessage(res, secrets);
163
+ throw new Error(`Failed to check Maven artifact existence (${res.status}): ${errText}`);
164
+ }
165
+ catch (err) {
166
+ if (err?.message?.includes('Failed to check Maven artifact existence')) {
167
+ throw err;
168
+ }
169
+ throw new Error(`Failed to check Maven artifact existence: ${maskSecrets(err?.message || String(err), secrets)}`);
170
+ }
171
+ }
172
+ async doPublish(artifact, registry, options) {
173
+ const creds = this.resolveCredentials(registry);
174
+ const token = creds.token || creds.password;
175
+ const username = creds.username;
176
+ const secrets = [token, creds.password].filter((s) => typeof s === 'string' && s.length >= 3);
177
+ // Locate jar file
178
+ let jarPath = artifact.source;
179
+ const stat = await fs.stat(jarPath).catch(() => null);
180
+ if (stat?.isDirectory()) {
181
+ const files = await fs.readdir(jarPath);
182
+ const jarFile = files.find(f => isMavenArtifactFile(f));
183
+ if (!jarFile) {
184
+ throw new Error(`No jar/war artifact found in directory: ${jarPath}`);
185
+ }
186
+ jarPath = path.join(jarPath, jarFile);
187
+ }
188
+ const { groupId, artifactId, version, groupPath, jarFilename, pomFilename } = resolveMavenArtifactFilenames(artifact, jarPath, undefined, 'Aliyun');
189
+ const jarBuffer = await fs.readFile(jarPath);
190
+ const digest = `sha256:${crypto.createHash('sha256').update(jarBuffer).digest('hex')}`;
191
+ const baseRepoUrl = this.resolveBaseRepoUrl(registry);
192
+ const targetUrl = `${baseRepoUrl}/${groupPath}/${artifactId}/${version}/${jarFilename}`;
193
+ this.log(` 📤 Uploading Maven JAR to Aliyun Packages: ${targetUrl}`);
194
+ if (options?.dryRun) {
195
+ this.log(` [dryRun] Would PUT ${jarFilename} (${jarBuffer.length} bytes) to ${targetUrl}`);
196
+ return {
197
+ ref: `${groupId}:${artifactId}:${version}`,
198
+ digest,
199
+ metadata: { targetUrl, size: jarBuffer.length }
200
+ };
201
+ }
202
+ const headers = {
203
+ 'Content-Type': 'application/java-archive',
204
+ ...this.buildAuthHeaders(username, token, secrets)
205
+ };
206
+ const timeoutMs = options?.timeoutMs ?? 30000;
207
+ // The POM goes up first, deliberately.
208
+ //
209
+ // The existence probe checks for the jar/war, so uploading that last is what
210
+ // makes the probe mean "this artifact is complete". With the artifact first, a
211
+ // run that uploaded it and then failed on the POM would leave a coordinate that
212
+ // probes as present: the retry skips it as already published, and the POM never
213
+ // arrives — a jar in the repository forever, with no dependency information.
214
+ // Check if matching .pom exists and upload it as well (M2 verification)
215
+ const pomPath = mavenPomPathFor(jarPath);
216
+ const pomStat = await fs.stat(pomPath).catch(() => null);
217
+ if (pomStat?.isFile()) {
218
+ const pomBuffer = await fs.readFile(pomPath);
219
+ const pomFilename = `${artifactId}-${version}.pom`;
220
+ const pomTargetUrl = `${baseRepoUrl}/${groupPath}/${artifactId}/${version}/${pomFilename}`;
221
+ this.log(` 📤 Uploading Maven POM to Aliyun Packages: ${pomTargetUrl}`);
222
+ const pomRes = await safeFetch(pomTargetUrl, {
223
+ method: 'PUT',
224
+ headers: {
225
+ ...headers,
226
+ 'Content-Type': 'application/xml'
227
+ },
228
+ body: pomBuffer,
229
+ timeoutMs,
230
+ secrets
231
+ });
232
+ if (!pomRes.ok && pomRes.status !== 201 && pomRes.status !== 200) {
233
+ const errText = await extractErrorMessage(pomRes, secrets);
234
+ throw new Error(`Failed to upload Maven POM to Aliyun Packages (${pomRes.status}): ${errText}`);
235
+ }
236
+ }
237
+ const res = await safeFetch(targetUrl, {
238
+ method: 'PUT',
239
+ headers,
240
+ body: jarBuffer,
241
+ timeoutMs,
242
+ secrets
243
+ });
244
+ if (!res.ok && res.status !== 201 && res.status !== 200) {
245
+ const errText = await extractErrorMessage(res, secrets);
246
+ throw new Error(`Failed to upload Maven JAR to Aliyun Packages (${res.status}): ${errText}`);
247
+ }
248
+ return {
249
+ ref: `${groupId}:${artifactId}:${version}`,
250
+ digest,
251
+ metadata: {
252
+ groupId,
253
+ artifactId,
254
+ version,
255
+ targetUrl,
256
+ size: jarBuffer.length
257
+ }
258
+ };
259
+ }
260
+ }
261
+ //# sourceMappingURL=AliyunMavenPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AliyunMavenPublisher.js","sourceRoot":"","sources":["../../src/maven/AliyunMavenPublisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseNpmPublisher } from '@ticatec/omniflow-artifact';
2
+ import type { RegistryConfig } from '@ticatec/omniflow-artifact';
3
+ /**
4
+ * Aliyun Apsara DevOps (云效) NPM Package Registry Publisher.
5
+ *
6
+ * Endpoint format: https://packages.aliyun.com/npm/registry/<repoId>/
7
+ * Or direct custom console URL: https://packages.aliyun.com/<orgId>/npm/registry/<repoId>/
8
+ */
9
+ export declare class AliyunNpmPublisher extends BaseNpmPublisher {
10
+ readonly id = "aliyun-npm";
11
+ readonly name = "Aliyun Packages NPM";
12
+ readonly platform = "aliyun-npm";
13
+ readonly priority = 20;
14
+ detect(registry: RegistryConfig): boolean;
15
+ normalizeRegistryUrl(server: string, _registryOrNamespace?: RegistryConfig | string): string;
16
+ }
17
+ //# sourceMappingURL=AliyunNpmPublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AliyunNpmPublisher.d.ts","sourceRoot":"","sources":["../../src/npm/AliyunNpmPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,QAAQ,CAAC,EAAE,gBAAe;IAC1B,QAAQ,CAAC,IAAI,yBAAwB;IACrC,QAAQ,CAAC,QAAQ,gBAAe;IAChC,SAAkB,QAAQ,MAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAuBzC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,MAAM;CAqCtG"}
@@ -0,0 +1,63 @@
1
+ import { BaseNpmPublisher } from '@ticatec/omniflow-artifact';
2
+ /**
3
+ * Aliyun Apsara DevOps (云效) NPM Package Registry Publisher.
4
+ *
5
+ * Endpoint format: https://packages.aliyun.com/npm/registry/<repoId>/
6
+ * Or direct custom console URL: https://packages.aliyun.com/<orgId>/npm/registry/<repoId>/
7
+ */
8
+ export class AliyunNpmPublisher extends BaseNpmPublisher {
9
+ id = 'aliyun-npm';
10
+ name = 'Aliyun Packages NPM';
11
+ platform = 'aliyun-npm';
12
+ priority = 20;
13
+ detect(registry) {
14
+ if (registry.type !== 'npm') {
15
+ return false;
16
+ }
17
+ const regName = (registry.name || '').toLowerCase();
18
+ if (regName === 'aliyun' || regName.startsWith('aliyun-')) {
19
+ return true;
20
+ }
21
+ const server = (registry.server || '').toLowerCase();
22
+ try {
23
+ const parsed = new URL(server.includes('://') ? server : `https://${server}`);
24
+ const host = parsed.hostname.toLowerCase();
25
+ const segments = host.split('.');
26
+ const isAliyun = host === 'aliyun.com' || host.endsWith('.aliyun.com');
27
+ const isPackages = segments.includes('packages') || host === 'packages.aliyun.com';
28
+ return isAliyun && isPackages;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ normalizeRegistryUrl(server, _registryOrNamespace) {
35
+ let url = server.trim();
36
+ if (!/^https?:\/\//i.test(url)) {
37
+ url = `https://${url}`;
38
+ }
39
+ const parsed = new URL(url);
40
+ const cleanBase = url.replace(/\/+$/, '');
41
+ // M6 Escape hatch: if server URL already has path segments beyond root '/', use it as-is
42
+ if (parsed.pathname !== '/' && parsed.pathname !== '') {
43
+ return cleanBase.endsWith('/') ? cleanBase : `${cleanBase}/`;
44
+ }
45
+ // Extract repoId strictly from namespace or options/metadata
46
+ let repoId;
47
+ if (typeof _registryOrNamespace === 'string') {
48
+ repoId = _registryOrNamespace.trim();
49
+ }
50
+ else if (_registryOrNamespace && typeof _registryOrNamespace === 'object') {
51
+ const reg = _registryOrNamespace;
52
+ repoId =
53
+ reg.namespace?.trim() ||
54
+ reg.options?.repoId?.trim() ||
55
+ reg.metadata?.repoId?.trim();
56
+ }
57
+ if (!repoId) {
58
+ throw new Error(`Aliyun NPM registry requires a valid repository ID (specify via registry.namespace or full server URL)`);
59
+ }
60
+ return `${cleanBase}/npm/registry/${encodeURIComponent(repoId)}/`;
61
+ }
62
+ }
63
+ //# sourceMappingURL=AliyunNpmPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AliyunNpmPublisher.js","sourceRoot":"","sources":["../../src/npm/AliyunNpmPublisher.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@ticatec/omniflow-aliyun",
3
+ "version": "1.0.0",
4
+ "description": "Alibaba Cloud artifact management provider for OmniFlow: ACR Container Registry (Personal & Enterprise), Apsara DevOps Packages (NPM, Maven), and Generic Archives",
5
+ "homepage": "https://github.com/ticatec/omniflow#readme",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/ticatec/omniflow.git",
9
+ "directory": "omniflow-aliyun"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/ticatec/omniflow/issues"
13
+ },
14
+ "author": "Henry Feng <huili.f@gmail.com>",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "@ticatec/omniflow-artifact": "^1.0.0",
27
+ "@ticatec/omniflow-core": "^1.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "@jest/globals": "^30.4.1",
31
+ "@types/jest": "^30.0.0",
32
+ "@types/node": "^22.10.2",
33
+ "jest": "^30.4.2",
34
+ "ts-jest": "^29.4.9",
35
+ "typescript": "^5.7.2"
36
+ },
37
+ "engines": {
38
+ "node": ">=20.0.0"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "src",
43
+ "README.md",
44
+ "README_CN.md",
45
+ "LICENSE"
46
+ ],
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc",
52
+ "clean": "rm -rf dist",
53
+ "prebuild": "npm run clean",
54
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest",
55
+ "typecheck": "tsc --noEmit",
56
+ "publish:npm": "pnpm publish --access public --no-git-checks"
57
+ }
58
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Utility functions for Aliyun API interactions: safe fetch with timeout and credential scrubbing.
3
+ */
4
+ import {
5
+ maskSecrets,
6
+ safeFetch,
7
+ extractErrorMessage,
8
+ type SafeFetchOptions
9
+ } from '@ticatec/omniflow-artifact'
10
+
11
+ export type AliyunRequestOptions = SafeFetchOptions
12
+
13
+ export { maskSecrets, safeFetch, extractErrorMessage }
14
+
@@ -0,0 +1,61 @@
1
+ import { BaseDockerPublisher } from '@ticatec/omniflow-artifact'
2
+ import type { RegistryConfig } from '@ticatec/omniflow-artifact'
3
+
4
+ /**
5
+ * Aliyun Container Registry (ACR) Publisher.
6
+ *
7
+ * Supports both:
8
+ * 1. ACR Personal Edition: registry.<region>.aliyuncs.com (Public & VPC internal)
9
+ * 2. ACR Enterprise Edition: <instance>-registry.<region>.cr.aliyuncs.com (Public & VPC internal)
10
+ */
11
+ export class AliyunAcrPublisher extends BaseDockerPublisher {
12
+ readonly id = 'aliyun-acr'
13
+ readonly name = 'Aliyun ACR'
14
+ readonly platform = 'aliyun-acr'
15
+ override readonly priority = 20
16
+
17
+ override detect(registry: RegistryConfig): boolean {
18
+ if (registry.type !== 'docker' && registry.type !== 'container') {
19
+ return false
20
+ }
21
+
22
+ const regName = (registry.name || '').toLowerCase()
23
+ if (regName === 'aliyun' || regName === 'acr' || regName.startsWith('aliyun-') || regName.startsWith('acr-')) {
24
+ return true
25
+ }
26
+
27
+ const server = (registry.server || '').toLowerCase()
28
+ try {
29
+ const parsed = new URL(server.includes('://') ? server : `https://${server}`)
30
+ const host = parsed.hostname.toLowerCase()
31
+ const segments = host.split('.')
32
+ const isAliyunCs = host === 'aliyuncs.com' || host.endsWith('.aliyuncs.com')
33
+ const isCr = segments.includes('cr') || segments.some(s => s.startsWith('registry'))
34
+ return isAliyunCs && isCr
35
+ } catch {
36
+ return false
37
+ }
38
+ }
39
+
40
+ override buildRepositoryUrl(registry: RegistryConfig, imageName: string): string {
41
+ const host = this.normalizeServerHost(registry.server)
42
+ const cleanImage = imageName.replace(/^\/+/, '')
43
+
44
+ const ns = (registry.namespace || '').replace(/\/+$/, '')
45
+ if (ns) {
46
+ if (cleanImage.startsWith(`${ns}/`)) {
47
+ return `${host}/${cleanImage}`
48
+ }
49
+ return `${host}/${ns}/${cleanImage}`
50
+ }
51
+
52
+ return `${host}/${cleanImage}`
53
+ }
54
+
55
+ /**
56
+ * Helper to check if registry server points to an internal VPC endpoint.
57
+ */
58
+ isVpcEndpoint(server: string): boolean {
59
+ return server.toLowerCase().includes('-vpc.')
60
+ }
61
+ }