@package-broker/core 0.2.15
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/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-driver.d.ts +15 -0
- package/dist/cache/memory-driver.d.ts.map +1 -0
- package/dist/cache/memory-driver.js +56 -0
- package/dist/cache/memory-driver.js.map +1 -0
- package/dist/db/d1-driver.d.ts +3 -0
- package/dist/db/d1-driver.d.ts.map +1 -0
- package/dist/db/d1-driver.js +7 -0
- package/dist/db/d1-driver.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +696 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +99 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/factory.d.ts +34 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +121 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/index.d.ts +2 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/processor.d.ts +49 -0
- package/dist/jobs/processor.d.ts.map +1 -0
- package/dist/jobs/processor.js +118 -0
- package/dist/jobs/processor.js.map +1 -0
- package/dist/middleware/auth.d.ts +52 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +300 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/composer-version.d.ts +7 -0
- package/dist/middleware/composer-version.d.ts.map +1 -0
- package/dist/middleware/composer-version.js +18 -0
- package/dist/middleware/composer-version.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +7 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +45 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +5 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +6 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +9 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +36 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/ports.d.ts +32 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +4 -0
- package/dist/ports.js.map +1 -0
- package/dist/queue/consumer.d.ts +18 -0
- package/dist/queue/consumer.d.ts.map +1 -0
- package/dist/queue/consumer.js +82 -0
- package/dist/queue/consumer.js.map +1 -0
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +2 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/memory-driver.d.ts +13 -0
- package/dist/queue/memory-driver.d.ts.map +1 -0
- package/dist/queue/memory-driver.js +22 -0
- package/dist/queue/memory-driver.js.map +1 -0
- package/dist/queue/types.d.ts +19 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +3 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/routes/api/artifacts.d.ts +25 -0
- package/dist/routes/api/artifacts.d.ts.map +1 -0
- package/dist/routes/api/artifacts.js +57 -0
- package/dist/routes/api/artifacts.js.map +1 -0
- package/dist/routes/api/auth.d.ts +50 -0
- package/dist/routes/api/auth.d.ts.map +1 -0
- package/dist/routes/api/auth.js +268 -0
- package/dist/routes/api/auth.js.map +1 -0
- package/dist/routes/api/index.d.ts +9 -0
- package/dist/routes/api/index.d.ts.map +1 -0
- package/dist/routes/api/index.js +10 -0
- package/dist/routes/api/index.js.map +1 -0
- package/dist/routes/api/packages.d.ts +47 -0
- package/dist/routes/api/packages.d.ts.map +1 -0
- package/dist/routes/api/packages.js +671 -0
- package/dist/routes/api/packages.js.map +1 -0
- package/dist/routes/api/repositories.d.ts +56 -0
- package/dist/routes/api/repositories.d.ts.map +1 -0
- package/dist/routes/api/repositories.js +317 -0
- package/dist/routes/api/repositories.js.map +1 -0
- package/dist/routes/api/settings.d.ts +28 -0
- package/dist/routes/api/settings.d.ts.map +1 -0
- package/dist/routes/api/settings.js +81 -0
- package/dist/routes/api/settings.js.map +1 -0
- package/dist/routes/api/stats.d.ts +21 -0
- package/dist/routes/api/stats.d.ts.map +1 -0
- package/dist/routes/api/stats.js +52 -0
- package/dist/routes/api/stats.js.map +1 -0
- package/dist/routes/api/tokens.d.ts +39 -0
- package/dist/routes/api/tokens.d.ts.map +1 -0
- package/dist/routes/api/tokens.js +191 -0
- package/dist/routes/api/tokens.js.map +1 -0
- package/dist/routes/api/users.d.ts +5 -0
- package/dist/routes/api/users.d.ts.map +1 -0
- package/dist/routes/api/users.js +125 -0
- package/dist/routes/api/users.js.map +1 -0
- package/dist/routes/composer.d.ts +133 -0
- package/dist/routes/composer.d.ts.map +1 -0
- package/dist/routes/composer.js +1179 -0
- package/dist/routes/composer.js.map +1 -0
- package/dist/routes/dist.d.ts +32 -0
- package/dist/routes/dist.d.ts.map +1 -0
- package/dist/routes/dist.js +761 -0
- package/dist/routes/dist.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +22 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +5 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +6 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/services/EmailService.d.ts +20 -0
- package/dist/services/EmailService.d.ts.map +1 -0
- package/dist/services/EmailService.js +27 -0
- package/dist/services/EmailService.js.map +1 -0
- package/dist/services/UserService.d.ts +27 -0
- package/dist/services/UserService.d.ts.map +1 -0
- package/dist/services/UserService.js +164 -0
- package/dist/services/UserService.js.map +1 -0
- package/dist/storage/driver.d.ts +65 -0
- package/dist/storage/driver.d.ts.map +1 -0
- package/dist/storage/driver.js +59 -0
- package/dist/storage/driver.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/r2-driver.d.ts +16 -0
- package/dist/storage/r2-driver.d.ts.map +1 -0
- package/dist/storage/r2-driver.js +28 -0
- package/dist/storage/r2-driver.js.map +1 -0
- package/dist/storage/s3-driver.d.ts +22 -0
- package/dist/storage/s3-driver.d.ts.map +1 -0
- package/dist/storage/s3-driver.js +66 -0
- package/dist/storage/s3-driver.js.map +1 -0
- package/dist/sync/github-sync.d.ts +15 -0
- package/dist/sync/github-sync.d.ts.map +1 -0
- package/dist/sync/github-sync.js +39 -0
- package/dist/sync/github-sync.js.map +1 -0
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/repository-sync.d.ts +18 -0
- package/dist/sync/repository-sync.d.ts.map +1 -0
- package/dist/sync/repository-sync.js +214 -0
- package/dist/sync/repository-sync.js.map +1 -0
- package/dist/sync/strategies/composer-repo.d.ts +11 -0
- package/dist/sync/strategies/composer-repo.d.ts.map +1 -0
- package/dist/sync/strategies/composer-repo.js +269 -0
- package/dist/sync/strategies/composer-repo.js.map +1 -0
- package/dist/sync/strategies/github-api.d.ts +6 -0
- package/dist/sync/strategies/github-api.d.ts.map +1 -0
- package/dist/sync/strategies/github-api.js +137 -0
- package/dist/sync/strategies/github-api.js.map +1 -0
- package/dist/sync/strategies/github-packages.d.ts +7 -0
- package/dist/sync/strategies/github-packages.d.ts.map +1 -0
- package/dist/sync/strategies/github-packages.js +66 -0
- package/dist/sync/strategies/github-packages.js.map +1 -0
- package/dist/sync/strategies/index.d.ts +4 -0
- package/dist/sync/strategies/index.d.ts.map +1 -0
- package/dist/sync/strategies/index.js +5 -0
- package/dist/sync/strategies/index.js.map +1 -0
- package/dist/sync/types.d.ts +60 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +3 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/utils/analytics.d.ts +142 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +229 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/download.d.ts +10 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +34 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/encryption.d.ts +20 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +76 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +78 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +134 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/upstream-fetch.d.ts +15 -0
- package/dist/utils/upstream-fetch.d.ts.map +1 -0
- package/dist/utils/upstream-fetch.js +108 -0
- package/dist/utils/upstream-fetch.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +8 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/package-storage.d.ts +47 -0
- package/dist/workflows/package-storage.d.ts.map +1 -0
- package/dist/workflows/package-storage.js +136 -0
- package/dist/workflows/package-storage.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
import { buildAuthHeaders, COMPOSER_USER_AGENT } from '@package-broker/shared';
|
|
7
|
+
import pRetry from 'p-retry';
|
|
8
|
+
import { getLogger } from '../../utils/logger';
|
|
9
|
+
/**
|
|
10
|
+
* Sync from Composer repository (e.g., Satis, Packagist, third-party)
|
|
11
|
+
* @param url - Repository base URL
|
|
12
|
+
* @param credentialType - Type of authentication
|
|
13
|
+
* @param credentials - Authentication credentials
|
|
14
|
+
* @param packageFilter - Optional comma-separated list of packages to sync (required for provider-includes repos)
|
|
15
|
+
*/
|
|
16
|
+
export async function syncComposerRepository(url, credentialType, credentials, packageFilter) {
|
|
17
|
+
// Build auth headers based on credential type
|
|
18
|
+
const authHeaders = buildAuthHeaders(credentialType, credentials);
|
|
19
|
+
// Normalize URL
|
|
20
|
+
const baseUrl = url.replace(/\/$/, '');
|
|
21
|
+
const packagesUrl = `${baseUrl}/packages.json`;
|
|
22
|
+
try {
|
|
23
|
+
const response = await pRetry(() => fetch(packagesUrl, {
|
|
24
|
+
headers: {
|
|
25
|
+
...authHeaders,
|
|
26
|
+
Accept: 'application/json',
|
|
27
|
+
'User-Agent': COMPOSER_USER_AGENT,
|
|
28
|
+
},
|
|
29
|
+
}), { retries: 3 });
|
|
30
|
+
if (response.status === 401 || response.status === 403) {
|
|
31
|
+
return { success: false, packages: [], error: 'auth_failed' };
|
|
32
|
+
}
|
|
33
|
+
if (response.status === 404) {
|
|
34
|
+
return { success: false, packages: [], error: 'packages_json_not_found' };
|
|
35
|
+
}
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
return { success: false, packages: [], error: `http_${response.status}` };
|
|
38
|
+
}
|
|
39
|
+
const packagesJson = await response.json();
|
|
40
|
+
// Check if repository uses provider-includes (lazy loading)
|
|
41
|
+
if (packagesJson['providers-url'] && packagesJson['provider-includes']) {
|
|
42
|
+
// Large repository with lazy loading
|
|
43
|
+
return await syncWithProviderIncludes(baseUrl, packagesJson, authHeaders, packageFilter);
|
|
44
|
+
}
|
|
45
|
+
// Direct packages - parse all
|
|
46
|
+
const packages = parseComposerPackagesJson(packagesJson, baseUrl);
|
|
47
|
+
return { success: true, packages, strategy: 'composer_repo' };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const logger = getLogger();
|
|
51
|
+
logger.error('Composer repository sync error', { url }, error instanceof Error ? error : new Error(String(error)));
|
|
52
|
+
return { success: false, packages: [], error: 'network_error' };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sync packages from a repository using provider-includes (lazy loading)
|
|
57
|
+
* This is used by large repositories like Magento Marketplace
|
|
58
|
+
*/
|
|
59
|
+
async function syncWithProviderIncludes(baseUrl, packagesJson, authHeaders, packageFilter) {
|
|
60
|
+
const providersUrl = packagesJson['providers-url'];
|
|
61
|
+
const providerIncludes = packagesJson['provider-includes'];
|
|
62
|
+
// Parse package filter
|
|
63
|
+
const targetPackages = packageFilter
|
|
64
|
+
? packageFilter.split(',').map(p => p.trim()).filter(p => p.length > 0)
|
|
65
|
+
: [];
|
|
66
|
+
// If no filter provided, we'll sync all packages from provider files
|
|
67
|
+
const syncAllPackages = targetPackages.length === 0;
|
|
68
|
+
// Step 1: Fetch all provider files to build package-to-hash mapping
|
|
69
|
+
const packageHashes = new Map();
|
|
70
|
+
for (const [providerPath, { sha256 }] of Object.entries(providerIncludes)) {
|
|
71
|
+
// Replace %hash% placeholder with actual hash
|
|
72
|
+
const providerUrl = `${baseUrl}/${providerPath.replace('%hash%', sha256)}`;
|
|
73
|
+
try {
|
|
74
|
+
const response = await pRetry(() => fetch(providerUrl, {
|
|
75
|
+
headers: {
|
|
76
|
+
...authHeaders,
|
|
77
|
+
Accept: 'application/json',
|
|
78
|
+
'User-Agent': COMPOSER_USER_AGENT,
|
|
79
|
+
},
|
|
80
|
+
}), { retries: 2 });
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
const logger = getLogger();
|
|
83
|
+
logger.warn('Failed to fetch provider file', { providerUrl, status: response.status });
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const providerData = await response.json();
|
|
87
|
+
// Extract package hashes - all packages if no filter, or only filtered packages
|
|
88
|
+
for (const [pkgName, { sha256: pkgHash }] of Object.entries(providerData.providers || {})) {
|
|
89
|
+
if (syncAllPackages || targetPackages.includes(pkgName)) {
|
|
90
|
+
packageHashes.set(pkgName, pkgHash);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const logger = getLogger();
|
|
96
|
+
logger.warn('Error fetching provider file', { providerUrl, error: error instanceof Error ? error.message : String(error) });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Log sync strategy
|
|
100
|
+
const logger = getLogger();
|
|
101
|
+
if (syncAllPackages) {
|
|
102
|
+
logger.info('Syncing all packages from provider-includes', { packageCount: packageHashes.size });
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
logger.info('Syncing filtered packages via provider-includes', { targetCount: targetPackages.length });
|
|
106
|
+
// Check if we found all requested packages (only when filtering)
|
|
107
|
+
const missingPackages = targetPackages.filter(pkg => !packageHashes.has(pkg));
|
|
108
|
+
if (missingPackages.length > 0) {
|
|
109
|
+
logger.warn('Some packages not found in provider files', { missingPackages });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (packageHashes.size === 0) {
|
|
113
|
+
return {
|
|
114
|
+
success: false,
|
|
115
|
+
packages: [],
|
|
116
|
+
error: 'no_packages_found',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Step 2: Fetch metadata for each package using providers-url
|
|
120
|
+
const allPackages = [];
|
|
121
|
+
for (const [packageName, packageHash] of packageHashes) {
|
|
122
|
+
// Build package URL from providers-url template
|
|
123
|
+
// Format: /p/%package%$%hash%.json
|
|
124
|
+
const packageUrl = `${baseUrl}${providersUrl
|
|
125
|
+
.replace('%package%', packageName)
|
|
126
|
+
.replace('%hash%', packageHash)}`;
|
|
127
|
+
try {
|
|
128
|
+
const response = await pRetry(() => fetch(packageUrl, {
|
|
129
|
+
headers: {
|
|
130
|
+
...authHeaders,
|
|
131
|
+
Accept: 'application/json',
|
|
132
|
+
'User-Agent': COMPOSER_USER_AGENT,
|
|
133
|
+
},
|
|
134
|
+
}), { retries: 2 });
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
const logger = getLogger();
|
|
137
|
+
logger.warn('Failed to fetch package metadata', { packageUrl, status: response.status });
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const packageData = await response.json();
|
|
141
|
+
// Parse package versions - handle both array format (Packagist p2) and object format (traditional repos)
|
|
142
|
+
const packageVersions = packageData.packages?.[packageName] || {};
|
|
143
|
+
// Normalize versions to handle both array and object formats
|
|
144
|
+
const versionsArray = Array.isArray(packageVersions)
|
|
145
|
+
? packageVersions.map((metadata) => ({ version: metadata.version || String(metadata), metadata }))
|
|
146
|
+
: Object.entries(packageVersions).map(([key, val]) => ({
|
|
147
|
+
version: val?.version || key,
|
|
148
|
+
metadata: val,
|
|
149
|
+
}));
|
|
150
|
+
for (const { version, metadata } of versionsArray) {
|
|
151
|
+
// Transform dist URL to absolute URL
|
|
152
|
+
let distUrl = resolveDistUrl(baseUrl, metadata.dist?.url, packageName, version);
|
|
153
|
+
allPackages.push({
|
|
154
|
+
name: packageName,
|
|
155
|
+
version,
|
|
156
|
+
time: metadata.time,
|
|
157
|
+
description: metadata.description,
|
|
158
|
+
license: metadata.license,
|
|
159
|
+
type: metadata.type,
|
|
160
|
+
homepage: metadata.homepage,
|
|
161
|
+
dist: distUrl
|
|
162
|
+
? {
|
|
163
|
+
type: metadata.dist?.type || 'zip',
|
|
164
|
+
url: distUrl,
|
|
165
|
+
reference: metadata.dist?.reference,
|
|
166
|
+
}
|
|
167
|
+
: undefined,
|
|
168
|
+
require: metadata.require,
|
|
169
|
+
'require-dev': metadata['require-dev'],
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
const logger = getLogger();
|
|
173
|
+
logger.info('Fetched package versions', { packageName, versionCount: Object.keys(packageVersions).length });
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const logger = getLogger();
|
|
177
|
+
logger.warn('Error fetching package', { packageName, error: error instanceof Error ? error.message : String(error) });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (allPackages.length === 0) {
|
|
181
|
+
return {
|
|
182
|
+
success: false,
|
|
183
|
+
packages: [],
|
|
184
|
+
error: 'no_package_versions_found',
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
success: true,
|
|
189
|
+
packages: allPackages,
|
|
190
|
+
strategy: 'composer_repo_providers',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Resolve dist URL to an absolute URL
|
|
195
|
+
* Handles: absolute URLs, protocol-relative URLs, relative paths, and constructs fallback archive URLs
|
|
196
|
+
*/
|
|
197
|
+
function resolveDistUrl(baseUrl, rawUrl, packageName, version) {
|
|
198
|
+
// If we have a valid absolute URL, use it
|
|
199
|
+
if (rawUrl && (rawUrl.startsWith('http://') || rawUrl.startsWith('https://'))) {
|
|
200
|
+
return rawUrl;
|
|
201
|
+
}
|
|
202
|
+
// Handle protocol-relative URLs (//example.com/path)
|
|
203
|
+
if (rawUrl && rawUrl.startsWith('//')) {
|
|
204
|
+
return `https:${rawUrl}`;
|
|
205
|
+
}
|
|
206
|
+
// Handle relative URLs starting with /
|
|
207
|
+
if (rawUrl && rawUrl.startsWith('/')) {
|
|
208
|
+
// Remove trailing slash from baseUrl to avoid double slashes
|
|
209
|
+
return `${baseUrl}${rawUrl}`;
|
|
210
|
+
}
|
|
211
|
+
// Handle other relative URLs
|
|
212
|
+
if (rawUrl && rawUrl.length > 0) {
|
|
213
|
+
return `${baseUrl}/${rawUrl}`;
|
|
214
|
+
}
|
|
215
|
+
// No dist URL provided - try to construct archive URL for Magento Marketplace format
|
|
216
|
+
// Format: /archives/vendor/package/vendor-package-version.zip
|
|
217
|
+
if (baseUrl.includes('repo.magento.com')) {
|
|
218
|
+
const [vendor, pkg] = packageName.split('/');
|
|
219
|
+
if (vendor && pkg) {
|
|
220
|
+
// Magento archive format: /archives/vendor/package/vendor-package-version.zip
|
|
221
|
+
// Version format may need adjustment (remove 'v' prefix if present, handle dev versions)
|
|
222
|
+
const cleanVersion = version.replace(/^v/, '');
|
|
223
|
+
return `${baseUrl}/archives/${vendor}/${pkg}/${vendor}-${pkg}-${cleanVersion}.zip`;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// No URL could be constructed
|
|
227
|
+
const logger = getLogger();
|
|
228
|
+
logger.warn('No dist URL available', { packageName, version, baseUrl });
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Parse Composer packages.json and transform dist URLs if needed
|
|
233
|
+
*/
|
|
234
|
+
function parseComposerPackagesJson(data, baseUrl) {
|
|
235
|
+
const packages = [];
|
|
236
|
+
for (const [packageName, versions] of Object.entries(data.packages || {})) {
|
|
237
|
+
// Normalize versions to handle both array format (Packagist p2) and object format (traditional repos)
|
|
238
|
+
const versionsArray = Array.isArray(versions)
|
|
239
|
+
? versions.map((metadata) => ({ version: metadata.version || String(metadata), metadata }))
|
|
240
|
+
: Object.entries(versions).map(([key, val]) => ({
|
|
241
|
+
version: val?.version || key,
|
|
242
|
+
metadata: val,
|
|
243
|
+
}));
|
|
244
|
+
for (const { version, metadata } of versionsArray) {
|
|
245
|
+
// Transform dist URL to absolute URL
|
|
246
|
+
const distUrl = resolveDistUrl(baseUrl, metadata.dist?.url, packageName, version);
|
|
247
|
+
packages.push({
|
|
248
|
+
name: packageName,
|
|
249
|
+
version,
|
|
250
|
+
time: metadata.time,
|
|
251
|
+
description: metadata.description,
|
|
252
|
+
license: metadata.license,
|
|
253
|
+
type: metadata.type,
|
|
254
|
+
homepage: metadata.homepage,
|
|
255
|
+
dist: distUrl
|
|
256
|
+
? {
|
|
257
|
+
type: metadata.dist?.type || 'zip',
|
|
258
|
+
url: distUrl,
|
|
259
|
+
reference: metadata.dist?.reference,
|
|
260
|
+
}
|
|
261
|
+
: undefined,
|
|
262
|
+
require: metadata.require,
|
|
263
|
+
'require-dev': metadata['require-dev'],
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return packages;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=composer-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer-repo.js","sourceRoot":"","sources":["../../../src/sync/strategies/composer-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SyncResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Sync via GitHub Repository API (fallback when Packages Registry unavailable)
|
|
4
|
+
*/
|
|
5
|
+
export declare function syncViaGitHubApi(owner: string, repo: string, token: string, branch?: string, composerJsonPath?: string): Promise<SyncResult>;
|
|
6
|
+
//# sourceMappingURL=github-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/github-api.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAuD,MAAM,UAAU,CAAC;AAMhG;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAe,EACvB,gBAAgB,GAAE,MAA2B,GAC5C,OAAO,CAAC,UAAU,CAAC,CAsHrB"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
import micromatch from 'micromatch';
|
|
7
|
+
import semver from 'semver';
|
|
8
|
+
import pRetry from 'p-retry';
|
|
9
|
+
import { getLogger } from '../../utils/logger';
|
|
10
|
+
/**
|
|
11
|
+
* Sync via GitHub Repository API (fallback when Packages Registry unavailable)
|
|
12
|
+
*/
|
|
13
|
+
export async function syncViaGitHubApi(owner, repo, token, branch = 'main', composerJsonPath = '**/composer.json') {
|
|
14
|
+
const headers = {
|
|
15
|
+
Authorization: `Bearer ${token}`,
|
|
16
|
+
Accept: 'application/vnd.github+json',
|
|
17
|
+
'User-Agent': 'CloudflareComposerProxy/1.0',
|
|
18
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
19
|
+
};
|
|
20
|
+
try {
|
|
21
|
+
// Step 1: Get repository tree
|
|
22
|
+
const treeResponse = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}?recursive=1`, { headers }), { retries: 3 });
|
|
23
|
+
if (treeResponse.status === 401 || treeResponse.status === 403) {
|
|
24
|
+
return { success: false, packages: [], error: 'auth_failed' };
|
|
25
|
+
}
|
|
26
|
+
if (treeResponse.status === 404) {
|
|
27
|
+
return { success: false, packages: [], error: 'repo_not_found' };
|
|
28
|
+
}
|
|
29
|
+
if (!treeResponse.ok) {
|
|
30
|
+
return { success: false, packages: [], error: `tree_fetch_failed_${treeResponse.status}` };
|
|
31
|
+
}
|
|
32
|
+
const treeData = await treeResponse.json();
|
|
33
|
+
// Handle truncated repos (>100k files)
|
|
34
|
+
if (treeData.truncated) {
|
|
35
|
+
const logger = getLogger();
|
|
36
|
+
logger.warn('Repository has >100k files, tree truncated', { owner, repo });
|
|
37
|
+
// Could implement directory-by-directory traversal here
|
|
38
|
+
}
|
|
39
|
+
// Step 2: Find composer.json files using glob pattern
|
|
40
|
+
const composerFiles = findComposerJsonFiles(treeData.tree, composerJsonPath);
|
|
41
|
+
if (composerFiles.length === 0) {
|
|
42
|
+
return { success: false, packages: [], error: 'no_composer_json_found' };
|
|
43
|
+
}
|
|
44
|
+
// Step 3: Fetch each composer.json
|
|
45
|
+
const packages = [];
|
|
46
|
+
for (const file of composerFiles) {
|
|
47
|
+
const contentResponse = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/contents/${file.path}?ref=${branch}`, {
|
|
48
|
+
headers: {
|
|
49
|
+
...headers,
|
|
50
|
+
Accept: 'application/vnd.github.raw+json',
|
|
51
|
+
},
|
|
52
|
+
}), { retries: 2 });
|
|
53
|
+
if (!contentResponse.ok)
|
|
54
|
+
continue;
|
|
55
|
+
const composerJson = await contentResponse.json();
|
|
56
|
+
// Step 4: Parse package info
|
|
57
|
+
if (composerJson.name) {
|
|
58
|
+
packages.push({
|
|
59
|
+
name: composerJson.name,
|
|
60
|
+
version: composerJson.version || `dev-${branch}`,
|
|
61
|
+
require: composerJson.require,
|
|
62
|
+
'require-dev': composerJson['require-dev'],
|
|
63
|
+
description: composerJson.description,
|
|
64
|
+
dist: {
|
|
65
|
+
type: 'zip',
|
|
66
|
+
url: `https://api.github.com/repos/${owner}/${repo}/zipball/${branch}`,
|
|
67
|
+
reference: treeData.sha,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Step 5: Get versions from tags
|
|
73
|
+
const versions = await getVersionsFromTags(owner, repo, token);
|
|
74
|
+
// Add versioned packages from tags
|
|
75
|
+
for (const [version, sha] of versions) {
|
|
76
|
+
for (const pkg of packages) {
|
|
77
|
+
if (semver.valid(version)) {
|
|
78
|
+
packages.push({
|
|
79
|
+
...pkg,
|
|
80
|
+
version,
|
|
81
|
+
dist: {
|
|
82
|
+
type: 'zip',
|
|
83
|
+
url: `https://api.github.com/repos/${owner}/${repo}/zipball/${version}`,
|
|
84
|
+
reference: sha,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { success: true, packages, strategy: 'github_api' };
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const logger = getLogger();
|
|
94
|
+
logger.error('GitHub API sync error', { owner, repo }, error instanceof Error ? error : new Error(String(error)));
|
|
95
|
+
return { success: false, packages: [], error: 'network_error' };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Find composer.json files using glob pattern matching
|
|
100
|
+
*/
|
|
101
|
+
function findComposerJsonFiles(tree, globPattern) {
|
|
102
|
+
const blobPaths = tree.filter((item) => item.type === 'blob').map((item) => item.path);
|
|
103
|
+
const matchedPaths = micromatch(blobPaths, globPattern);
|
|
104
|
+
return tree.filter((item) => matchedPaths.includes(item.path));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get versions from repository tags
|
|
108
|
+
*/
|
|
109
|
+
async function getVersionsFromTags(owner, repo, token) {
|
|
110
|
+
const headers = {
|
|
111
|
+
Authorization: `Bearer ${token}`,
|
|
112
|
+
Accept: 'application/vnd.github+json',
|
|
113
|
+
'User-Agent': 'CloudflareComposerProxy/1.0',
|
|
114
|
+
};
|
|
115
|
+
try {
|
|
116
|
+
const response = await pRetry(() => fetch(`https://api.github.com/repos/${owner}/${repo}/tags`, { headers }), { retries: 2 });
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
return new Map();
|
|
119
|
+
}
|
|
120
|
+
const tags = await response.json();
|
|
121
|
+
const versions = new Map();
|
|
122
|
+
for (const tag of tags) {
|
|
123
|
+
// Parse tag name as semver (e.g., "v1.2.3" → "1.2.3")
|
|
124
|
+
const version = semver.clean(tag.name) || tag.name;
|
|
125
|
+
if (semver.valid(version)) {
|
|
126
|
+
versions.set(version, tag.commit.sha);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return versions;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const logger = getLogger();
|
|
133
|
+
logger.error('Error fetching tags', { owner, repo }, error instanceof Error ? error : new Error(String(error)));
|
|
134
|
+
return new Map();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=github-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-api.js","sourceRoot":"","sources":["../../../src/sync/strategies/github-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SyncResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Sync via GitHub Packages Composer Registry (preferred strategy)
|
|
4
|
+
* Single API call returns native Composer packages.json format
|
|
5
|
+
*/
|
|
6
|
+
export declare function syncViaGitHubPackages(owner: string, token: string, targetPackages?: string[]): Promise<SyncResult>;
|
|
7
|
+
//# sourceMappingURL=github-packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-packages.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/github-packages.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,UAAU,CAAC;AAKlF;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,UAAU,CAAC,CAsCrB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PACKAGE.broker
|
|
3
|
+
* Copyright (C) 2025 Łukasz Bajsarowicz
|
|
4
|
+
* Licensed under AGPL-3.0
|
|
5
|
+
*/
|
|
6
|
+
import { COMPOSER_USER_AGENT } from '@package-broker/shared';
|
|
7
|
+
import pRetry from 'p-retry';
|
|
8
|
+
import { getLogger } from '../../utils/logger';
|
|
9
|
+
/**
|
|
10
|
+
* Sync via GitHub Packages Composer Registry (preferred strategy)
|
|
11
|
+
* Single API call returns native Composer packages.json format
|
|
12
|
+
*/
|
|
13
|
+
export async function syncViaGitHubPackages(owner, token, targetPackages) {
|
|
14
|
+
const url = `https://composer.pkg.github.com/${owner}/packages.json`;
|
|
15
|
+
try {
|
|
16
|
+
const response = await pRetry(() => fetch(url, {
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `Bearer ${token}`,
|
|
19
|
+
Accept: 'application/json',
|
|
20
|
+
'User-Agent': COMPOSER_USER_AGENT,
|
|
21
|
+
},
|
|
22
|
+
}), { retries: 3 });
|
|
23
|
+
// GitHub Packages returns 404 if owner has no packages
|
|
24
|
+
if (response.status === 404) {
|
|
25
|
+
return { success: false, packages: [], error: 'no_packages_registry' };
|
|
26
|
+
}
|
|
27
|
+
if (response.status === 401 || response.status === 403) {
|
|
28
|
+
return { success: false, packages: [], error: 'auth_failed' };
|
|
29
|
+
}
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
return { success: false, packages: [], error: `http_${response.status}` };
|
|
32
|
+
}
|
|
33
|
+
const packagesJson = await response.json();
|
|
34
|
+
const packages = parseComposerPackagesJson(packagesJson, targetPackages);
|
|
35
|
+
return { success: true, packages, strategy: 'github_packages' };
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const logger = getLogger();
|
|
39
|
+
logger.error('GitHub Packages sync error', { owner, url }, error instanceof Error ? error : new Error(String(error)));
|
|
40
|
+
return { success: false, packages: [], error: 'network_error' };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse Composer packages.json structure
|
|
45
|
+
*/
|
|
46
|
+
function parseComposerPackagesJson(data, filter) {
|
|
47
|
+
const packages = [];
|
|
48
|
+
for (const [packageName, versions] of Object.entries(data.packages || {})) {
|
|
49
|
+
// Apply filter if specified
|
|
50
|
+
if (filter && !filter.includes(packageName)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
for (const [version, metadata] of Object.entries(versions)) {
|
|
54
|
+
packages.push({
|
|
55
|
+
name: packageName,
|
|
56
|
+
version,
|
|
57
|
+
dist: metadata.dist,
|
|
58
|
+
require: metadata.require,
|
|
59
|
+
'require-dev': metadata['require-dev'],
|
|
60
|
+
description: metadata.description,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return packages;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=github-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-packages.js","sourceRoot":"","sources":["../../../src/sync/strategies/github-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync/strategies/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync/strategies/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface ComposerPackage {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
time?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
license?: string | string[];
|
|
7
|
+
type?: string;
|
|
8
|
+
homepage?: string;
|
|
9
|
+
dist?: {
|
|
10
|
+
type: string;
|
|
11
|
+
url: string;
|
|
12
|
+
reference?: string;
|
|
13
|
+
};
|
|
14
|
+
require?: Record<string, string>;
|
|
15
|
+
'require-dev'?: Record<string, string>;
|
|
16
|
+
autoload?: object;
|
|
17
|
+
readme?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SyncResult {
|
|
20
|
+
success: boolean;
|
|
21
|
+
packages: ComposerPackage[];
|
|
22
|
+
strategy?: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface GitHubTreeItem {
|
|
26
|
+
path: string;
|
|
27
|
+
type: 'blob' | 'tree';
|
|
28
|
+
sha: string;
|
|
29
|
+
}
|
|
30
|
+
export interface GitHubTreeResponse {
|
|
31
|
+
sha: string;
|
|
32
|
+
tree: GitHubTreeItem[];
|
|
33
|
+
truncated: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface ComposerPackagesJson {
|
|
36
|
+
packages: Record<string, Record<string, ComposerPackage>>;
|
|
37
|
+
'providers-url'?: string;
|
|
38
|
+
'provider-includes'?: Record<string, {
|
|
39
|
+
sha256: string;
|
|
40
|
+
}>;
|
|
41
|
+
'providers-lazy-url'?: string;
|
|
42
|
+
'metadata-url'?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Provider file structure (from provider-includes)
|
|
46
|
+
* Contains package names and their SHA256 hashes for lazy loading
|
|
47
|
+
*/
|
|
48
|
+
export interface ProviderFile {
|
|
49
|
+
providers: Record<string, {
|
|
50
|
+
sha256: string;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Package metadata fetched via providers-url
|
|
55
|
+
* Same structure as packages.json but for a single package
|
|
56
|
+
*/
|
|
57
|
+
export interface ProviderPackageResponse {
|
|
58
|
+
packages: Record<string, Record<string, ComposerPackage>>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;CAC3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,aAAa"}
|