arc-1 0.6.9 → 0.6.10
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/README.md +6 -4
- package/dist/adt/abapgit.d.ts +39 -0
- package/dist/adt/abapgit.d.ts.map +1 -0
- package/dist/adt/abapgit.js +333 -0
- package/dist/adt/abapgit.js.map +1 -0
- package/dist/adt/config.d.ts +1 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js +1 -0
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +42 -3
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/errors.d.ts +22 -1
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +71 -2
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/features.d.ts.map +1 -1
- package/dist/adt/features.js +3 -0
- package/dist/adt/features.js.map +1 -1
- package/dist/adt/gcts.d.ts +68 -0
- package/dist/adt/gcts.d.ts.map +1 -0
- package/dist/adt/gcts.js +239 -0
- package/dist/adt/gcts.js.map +1 -0
- package/dist/adt/safety.d.ts +3 -0
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/safety.js +9 -0
- package/dist/adt/safety.js.map +1 -1
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +4 -1
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +137 -0
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/xml-parser.d.ts +2 -0
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +2 -0
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/handlers/intent.d.ts.map +1 -1
- package/dist/handlers/intent.js +235 -0
- package/dist/handlers/intent.js.map +1 -1
- package/dist/handlers/schemas.d.ts +45 -1
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +46 -0
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/tools.d.ts +4 -3
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +115 -3
- package/dist/handlers/tools.js.map +1 -1
- package/dist/probe/catalog.d.ts +30 -0
- package/dist/probe/catalog.d.ts.map +1 -0
- package/dist/probe/catalog.js +196 -0
- package/dist/probe/catalog.js.map +1 -0
- package/dist/probe/fixtures.d.ts +54 -0
- package/dist/probe/fixtures.d.ts.map +1 -0
- package/dist/probe/fixtures.js +94 -0
- package/dist/probe/fixtures.js.map +1 -0
- package/dist/probe/format.d.ts +10 -0
- package/dist/probe/format.d.ts.map +1 -0
- package/dist/probe/format.js +114 -0
- package/dist/probe/format.js.map +1 -0
- package/dist/probe/quality.d.ts +13 -0
- package/dist/probe/quality.d.ts.map +1 -0
- package/dist/probe/quality.js +50 -0
- package/dist/probe/quality.js.map +1 -0
- package/dist/probe/runner.d.ts +48 -0
- package/dist/probe/runner.d.ts.map +1 -0
- package/dist/probe/runner.js +211 -0
- package/dist/probe/runner.js.map +1 -0
- package/dist/probe/types.d.ts +159 -0
- package/dist/probe/types.d.ts.map +1 -0
- package/dist/probe/types.js +11 -0
- package/dist/probe/types.js.map +1 -0
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js +12 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +15 -2
- package/dist/server/config.js.map +1 -1
- package/dist/server/server.d.ts +2 -2
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +5 -3
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +3 -1
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ Built for organizations that need AI-assisted SAP development with guardrails. I
|
|
|
19
19
|
- **Package restrictions** — limit AI write operations (create, update, delete) to specific packages with wildcards (`--allowed-packages "Z*,$TMP"`). Read operations are not restricted by package — use SAP's native authorization for read-level access control
|
|
20
20
|
- **Data access control** — enable table data preview (`--block-data=false`) or free-form SQL (`--block-free-sql=false`)
|
|
21
21
|
- **Transport safety** — require transport assignments, restrict to specific transports, or make transports read-only. Update/delete operations auto-use the lock correction number when no explicit transport is provided
|
|
22
|
+
- **Git workflow safety** — Git operations are disabled by default. Enable explicitly with `--enable-git` / `SAP_ENABLE_GIT=true`
|
|
22
23
|
- **Safety profiles** — preconfigured roles: `viewer`, `viewer-data`, `viewer-sql`, `developer`, `developer-data`, `developer-sql`
|
|
23
24
|
- **Writes restricted to `$TMP` when enabled** — only local/throwaway objects; writing to transportable packages requires explicit `--allowed-packages`
|
|
24
25
|
|
|
@@ -42,7 +43,7 @@ Deploy ARC-1 as a Cloud Foundry app on SAP BTP with full platform integration:
|
|
|
42
43
|
|
|
43
44
|
### Token Efficiency
|
|
44
45
|
|
|
45
|
-
- **
|
|
46
|
+
- **12 intent-based tools** (~5K schema tokens) instead of 200+ individual tools — keeps the LLM's context window small
|
|
46
47
|
- **Method-level read/edit** — read or update a single class method, not the whole source (up to 20x fewer tokens)
|
|
47
48
|
- **Context compression** — `SAPContext` returns public API contracts of all dependencies in one call (7-30x compression)
|
|
48
49
|
|
|
@@ -66,7 +67,7 @@ See **[docs/caching.md](docs/caching.md)** for full documentation.
|
|
|
66
67
|
|
|
67
68
|
### Tools Refined for Real-World Usage
|
|
68
69
|
|
|
69
|
-
The
|
|
70
|
+
The 12 tools are designed from real LLM interaction feedback:
|
|
70
71
|
|
|
71
72
|
| Tool | What it does |
|
|
72
73
|
|------|-------------|
|
|
@@ -77,6 +78,7 @@ The 11 tools are designed from real LLM interaction feedback:
|
|
|
77
78
|
| **SAPNavigate** | Go-to-definition, find references, code completion |
|
|
78
79
|
| **SAPQuery** | Execute ABAP SQL with table-not-found suggestions |
|
|
79
80
|
| **SAPTransport** | CTS transport management (list/create/release/delete/reassign), transport requirement checks, and reverse lookup history (`action="history"`) |
|
|
81
|
+
| **SAPGit** | Git-based ABAP workflows across gCTS and abapGit (list/clone/pull/push/commit/branch/unlink) with backend auto-selection and safety gating (`--enable-git`) |
|
|
80
82
|
| **SAPContext** | Compressed dependency context (`action="deps"`), reverse dependency lookup (`action="usages"`), and CDS upstream/downstream impact analysis (`action="impact"` for DDLS) |
|
|
81
83
|
| **SAPLint** | Local ABAP lint (system-aware presets, auto-fix, pre-write validation) + ADT PrettyPrint (server-side formatting) |
|
|
82
84
|
| **SAPDiagnose** | Syntax check, ABAP Unit tests, ATC code quality, short dumps, profiler traces |
|
|
@@ -88,7 +90,7 @@ Tool definitions automatically adapt to the target system (BTP vs on-premise), r
|
|
|
88
90
|
|
|
89
91
|
ARC-1 probes the SAP system at startup and adapts its behavior:
|
|
90
92
|
|
|
91
|
-
- Detects HANA, abapGit, RAP/CDS, AMDP, UI5, and transport availability
|
|
93
|
+
- Detects HANA, gCTS, abapGit, RAP/CDS, AMDP, UI5, and transport availability
|
|
92
94
|
- Auto-detects BTP vs on-premise systems
|
|
93
95
|
- Maps SAP_BASIS release to the correct ABAP language version
|
|
94
96
|
- Each feature can be forced on/off or left on auto-detect
|
|
@@ -115,7 +117,7 @@ Full documentation is available at **[marianfoo.github.io/arc-1](https://marianf
|
|
|
115
117
|
| [Configuration](https://marianfoo.github.io/arc-1/configuration-reference/) | Every flag and env var, one table |
|
|
116
118
|
| [Updating](https://marianfoo.github.io/arc-1/updating/) | Update procedures per install method |
|
|
117
119
|
| [Enterprise Auth](https://marianfoo.github.io/arc-1/enterprise-auth/) | Layer A / Layer B auth internals, coexistence matrix |
|
|
118
|
-
| [Tool Reference](https://marianfoo.github.io/arc-1/tools/) | Complete reference for all
|
|
120
|
+
| [Tool Reference](https://marianfoo.github.io/arc-1/tools/) | Complete reference for all 12 tools |
|
|
119
121
|
| [Architecture](https://marianfoo.github.io/arc-1/architecture/) | System architecture with diagrams |
|
|
120
122
|
| [AI Usage Patterns](https://marianfoo.github.io/arc-1/mcp-usage/) | Agent workflow patterns and best practices |
|
|
121
123
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abapGit ADT bridge client helpers.
|
|
3
|
+
*
|
|
4
|
+
* Bridge endpoints live under /sap/bc/adt/abapgit/* and use XML payloads.
|
|
5
|
+
*/
|
|
6
|
+
import type { AdtHttpClient } from './http.js';
|
|
7
|
+
import { type SafetyConfig } from './safety.js';
|
|
8
|
+
import type { AbapGitExternalInfo, AbapGitObject, AbapGitRepo, AbapGitStaging } from './types.js';
|
|
9
|
+
export declare function parseAbapGitRepos(xml: string): AbapGitRepo[];
|
|
10
|
+
export declare function parseAbapGitExternalInfo(xml: string): AbapGitExternalInfo;
|
|
11
|
+
export declare function parseAbapGitObjects(xml: string): AbapGitObject[];
|
|
12
|
+
export declare function listRepos(http: AdtHttpClient, safety: SafetyConfig): Promise<AbapGitRepo[]>;
|
|
13
|
+
export declare function getExternalInfo(http: AdtHttpClient, safety: SafetyConfig, url: string, user?: string, password?: string): Promise<AbapGitExternalInfo>;
|
|
14
|
+
export declare function createRepo(http: AdtHttpClient, safety: SafetyConfig, params: {
|
|
15
|
+
package: string;
|
|
16
|
+
url: string;
|
|
17
|
+
branchName?: string;
|
|
18
|
+
transportRequest?: string;
|
|
19
|
+
user?: string;
|
|
20
|
+
password?: string;
|
|
21
|
+
}): Promise<AbapGitRepo[]>;
|
|
22
|
+
export declare function pullRepo(http: AdtHttpClient, safety: SafetyConfig, repoId: string, params?: {
|
|
23
|
+
package?: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
branchName?: string;
|
|
26
|
+
transportRequest?: string;
|
|
27
|
+
user?: string;
|
|
28
|
+
password?: string;
|
|
29
|
+
}): Promise<AbapGitObject[]>;
|
|
30
|
+
export declare function unlinkRepo(http: AdtHttpClient, safety: SafetyConfig, repoId: string): Promise<void>;
|
|
31
|
+
export declare function stageRepo(http: AdtHttpClient, safety: SafetyConfig, repo: AbapGitRepo): Promise<AbapGitStaging>;
|
|
32
|
+
export declare function pushRepo(http: AdtHttpClient, safety: SafetyConfig, repo: AbapGitRepo, staging: AbapGitStaging): Promise<void>;
|
|
33
|
+
export declare function checkRepo(http: AdtHttpClient, safety: SafetyConfig, repo: AbapGitRepo): Promise<{
|
|
34
|
+
ok: boolean;
|
|
35
|
+
message: string | null;
|
|
36
|
+
}>;
|
|
37
|
+
export declare function switchBranch(http: AdtHttpClient, safety: SafetyConfig, repoId: string, branch: string, create?: boolean): Promise<void>;
|
|
38
|
+
export declare function createBranch(http: AdtHttpClient, safety: SafetyConfig, repoId: string, branch: string): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=abapgit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abapgit.d.ts","sourceRoot":"","sources":["../../src/adt/abapgit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* abapGit ADT bridge client helpers.
|
|
3
|
+
*
|
|
4
|
+
* Bridge endpoints live under /sap/bc/adt/abapgit/* and use XML payloads.
|
|
5
|
+
*/
|
|
6
|
+
import { AdtApiError, classifyAbapgitError } from './errors.js';
|
|
7
|
+
import { checkGit, checkOperation, checkPackage, OperationType } from './safety.js';
|
|
8
|
+
import { escapeXmlAttr, findDeepNodes, parseXml } from './xml-parser.js';
|
|
9
|
+
const ABAPGIT_BASE = '/sap/bc/adt/abapgit';
|
|
10
|
+
const REPOS_V2 = 'application/abapgit.adt.repos.v2+xml';
|
|
11
|
+
const REPO_V3 = 'application/abapgit.adt.repo.v3+xml';
|
|
12
|
+
const REPO_STAGE_V1 = 'application/abapgit.adt.repo.stage.v1+xml';
|
|
13
|
+
const EXTERNAL_INFO_REQUEST_V2 = 'application/abapgit.adt.repo.info.ext.request.v2+xml';
|
|
14
|
+
const EXTERNAL_INFO_RESPONSE_V2 = 'application/abapgit.adt.repo.info.ext.response.v2+xml';
|
|
15
|
+
function boolish(value) {
|
|
16
|
+
if (value === true || value === false)
|
|
17
|
+
return value;
|
|
18
|
+
const norm = String(value ?? '')
|
|
19
|
+
.trim()
|
|
20
|
+
.toLowerCase();
|
|
21
|
+
if (!norm)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (norm === 'true' || norm === 'x' || norm === '1')
|
|
24
|
+
return true;
|
|
25
|
+
if (norm === 'false' || norm === '0')
|
|
26
|
+
return false;
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
function field(node, ...keys) {
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
const attr = node[`@_${key}`];
|
|
32
|
+
if (attr !== undefined && attr !== null && String(attr).trim() !== '')
|
|
33
|
+
return String(attr);
|
|
34
|
+
const direct = node[key];
|
|
35
|
+
if (typeof direct === 'string' && direct.trim() !== '')
|
|
36
|
+
return direct;
|
|
37
|
+
if (typeof direct === 'object' && direct !== null) {
|
|
38
|
+
const text = direct['#text'];
|
|
39
|
+
if (typeof text === 'string' && text.trim() !== '')
|
|
40
|
+
return text;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
function encodePassword(password) {
|
|
46
|
+
return Buffer.from(password, 'utf-8').toString('base64');
|
|
47
|
+
}
|
|
48
|
+
function authHeaders(user, password) {
|
|
49
|
+
if (!user || !password)
|
|
50
|
+
return {};
|
|
51
|
+
return {
|
|
52
|
+
Username: user,
|
|
53
|
+
Password: encodePassword(password),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function absolutizeLink(href) {
|
|
57
|
+
if (/^https?:\/\//i.test(href)) {
|
|
58
|
+
const u = new URL(href);
|
|
59
|
+
return `${u.pathname}${u.search}`;
|
|
60
|
+
}
|
|
61
|
+
if (href.startsWith('/'))
|
|
62
|
+
return href;
|
|
63
|
+
return `${ABAPGIT_BASE}/${href}`;
|
|
64
|
+
}
|
|
65
|
+
function findRepoLink(repo, type) {
|
|
66
|
+
const relNeedle = type.replace('_link', '');
|
|
67
|
+
const link = repo.links.find((candidate) => {
|
|
68
|
+
const rel = candidate.rel.toLowerCase();
|
|
69
|
+
const href = candidate.href.toLowerCase();
|
|
70
|
+
const candidateType = (candidate.type ?? '').toLowerCase();
|
|
71
|
+
if (candidateType === type)
|
|
72
|
+
return true;
|
|
73
|
+
if (rel.endsWith(`/${relNeedle}`) || rel.includes(`/${relNeedle}/`))
|
|
74
|
+
return true;
|
|
75
|
+
if (relNeedle === 'check') {
|
|
76
|
+
if (rel.endsWith('/checks') || rel.includes('/checks/'))
|
|
77
|
+
return true;
|
|
78
|
+
if (href.endsWith('/checks') || href.includes('/checks/'))
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return href.endsWith(`/${relNeedle}`) || href.includes(`/${relNeedle}/`);
|
|
82
|
+
});
|
|
83
|
+
if (!link) {
|
|
84
|
+
throw new Error(`abapGit repository ${repo.key} does not expose a ${type} HATEOAS link.`);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
...link,
|
|
88
|
+
href: absolutizeLink(link.href),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function parseAbapGitLinks(node) {
|
|
92
|
+
const links = findDeepNodes(node, 'link');
|
|
93
|
+
return links
|
|
94
|
+
.map((link) => ({
|
|
95
|
+
rel: field(link, 'rel') ?? '',
|
|
96
|
+
href: field(link, 'href') ?? '',
|
|
97
|
+
type: field(link, 'type'),
|
|
98
|
+
title: field(link, 'title'),
|
|
99
|
+
}))
|
|
100
|
+
.filter((link) => Boolean(link.rel) && Boolean(link.href));
|
|
101
|
+
}
|
|
102
|
+
export function parseAbapGitRepos(xml) {
|
|
103
|
+
const parsed = parseXml(xml);
|
|
104
|
+
const repositories = findDeepNodes(parsed, 'repository');
|
|
105
|
+
return repositories
|
|
106
|
+
.map((repo) => {
|
|
107
|
+
const links = parseAbapGitLinks(repo);
|
|
108
|
+
const writeProtected = boolish(field(repo, 'writeProtected', 'write_protected'));
|
|
109
|
+
return {
|
|
110
|
+
key: field(repo, 'key', 'repoKey', 'id') ?? '',
|
|
111
|
+
package: field(repo, 'package', 'packageName') ?? '',
|
|
112
|
+
url: field(repo, 'url') ?? '',
|
|
113
|
+
branchName: field(repo, 'branchName', 'branch_name', 'branch') ?? '',
|
|
114
|
+
selectedBranch: field(repo, 'selectedBranch', 'selected_branch'),
|
|
115
|
+
deserializedBy: field(repo, 'deserializedBy', 'deserialized_by'),
|
|
116
|
+
...(writeProtected !== undefined ? { writeProtected } : {}),
|
|
117
|
+
createdBy: field(repo, 'createdBy', 'created_by'),
|
|
118
|
+
createdAt: field(repo, 'createdAt', 'created_at'),
|
|
119
|
+
dotAbapGit: field(repo, 'dotAbapGit', 'dot_abapgit'),
|
|
120
|
+
links,
|
|
121
|
+
};
|
|
122
|
+
})
|
|
123
|
+
.filter((repo) => repo.key && repo.package && repo.url);
|
|
124
|
+
}
|
|
125
|
+
export function parseAbapGitExternalInfo(xml) {
|
|
126
|
+
const parsed = parseXml(xml);
|
|
127
|
+
const infoNode = findDeepNodes(parsed, 'externalRepoInfo')[0] ?? parsed;
|
|
128
|
+
const branches = findDeepNodes(infoNode, 'branch').map((branch) => {
|
|
129
|
+
const name = field(branch, 'name', 'branchName', 'displayName') ?? '';
|
|
130
|
+
return {
|
|
131
|
+
name,
|
|
132
|
+
isHead: boolish(field(branch, 'head', 'isHead')),
|
|
133
|
+
sha1: field(branch, 'sha1', 'hash'),
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
const userNode = findDeepNodes(infoNode, 'user')[0];
|
|
137
|
+
const user = userNode
|
|
138
|
+
? {
|
|
139
|
+
name: field(userNode, 'name', 'user'),
|
|
140
|
+
email: field(userNode, 'email', 'mail'),
|
|
141
|
+
}
|
|
142
|
+
: undefined;
|
|
143
|
+
return {
|
|
144
|
+
accessMode: field(infoNode, 'accessMode', 'access_mode'),
|
|
145
|
+
defaultBranch: field(infoNode, 'defaultBranch', 'default_branch'),
|
|
146
|
+
selectedBranch: field(infoNode, 'selectedBranch', 'selected_branch'),
|
|
147
|
+
branches: branches.filter((branch) => branch.name),
|
|
148
|
+
...(user ? { user } : {}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export function parseAbapGitObjects(xml) {
|
|
152
|
+
const parsed = parseXml(xml);
|
|
153
|
+
const objectNodes = findDeepNodes(parsed, 'object');
|
|
154
|
+
return objectNodes.map((node) => ({
|
|
155
|
+
type: field(node, 'type'),
|
|
156
|
+
name: field(node, 'name'),
|
|
157
|
+
package: field(node, 'package', 'packageName'),
|
|
158
|
+
path: field(node, 'path'),
|
|
159
|
+
state: field(node, 'state'),
|
|
160
|
+
operation: field(node, 'operation'),
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
async function requestAbapGit(path, run) {
|
|
164
|
+
try {
|
|
165
|
+
return await run();
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (err instanceof AdtApiError) {
|
|
169
|
+
const parsed = classifyAbapgitError(err.responseBody ?? '');
|
|
170
|
+
if (parsed.message || parsed.namespace) {
|
|
171
|
+
const detail = [parsed.namespace ? `[${parsed.namespace}]` : undefined, parsed.message]
|
|
172
|
+
.filter(Boolean)
|
|
173
|
+
.join(' ');
|
|
174
|
+
throw new AdtApiError(detail, err.statusCode, err.path || path, err.responseBody);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
throw err;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function buildRepoPayloadXml(params) {
|
|
181
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
182
|
+
<abapgitrepo:repository xmlns:abapgitrepo="http://www.sap.com/adt/abapgit/repository">
|
|
183
|
+
<abapgitrepo:package>${escapeXmlAttr(params.package)}</abapgitrepo:package>
|
|
184
|
+
<abapgitrepo:url>${escapeXmlAttr(params.url)}</abapgitrepo:url>
|
|
185
|
+
${params.branchName ? `<abapgitrepo:branchName>${escapeXmlAttr(params.branchName)}</abapgitrepo:branchName>` : ''}
|
|
186
|
+
${params.transportRequest ? `<abapgitrepo:transportRequest>${escapeXmlAttr(params.transportRequest)}</abapgitrepo:transportRequest>` : ''}
|
|
187
|
+
${params.user ? `<abapgitrepo:remoteUser>${escapeXmlAttr(params.user)}</abapgitrepo:remoteUser>` : ''}
|
|
188
|
+
${params.password ? `<abapgitrepo:remotePassword>${escapeXmlAttr(params.password)}</abapgitrepo:remotePassword>` : ''}
|
|
189
|
+
</abapgitrepo:repository>`;
|
|
190
|
+
}
|
|
191
|
+
function buildExternalInfoRequestXml(url, user, password) {
|
|
192
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
193
|
+
<abapgitexternalrepo:externalRepoInfoRequest xmlns:abapgitexternalrepo="http://www.sap.com/adt/abapgit/externalRepo">
|
|
194
|
+
<abapgitexternalrepo:url>${escapeXmlAttr(url)}</abapgitexternalrepo:url>
|
|
195
|
+
${user ? `<abapgitexternalrepo:remoteUser>${escapeXmlAttr(user)}</abapgitexternalrepo:remoteUser>` : ''}
|
|
196
|
+
${password ? `<abapgitexternalrepo:remotePassword>${escapeXmlAttr(password)}</abapgitexternalrepo:remotePassword>` : ''}
|
|
197
|
+
</abapgitexternalrepo:externalRepoInfoRequest>`;
|
|
198
|
+
}
|
|
199
|
+
function buildStagingPayloadXml(staging) {
|
|
200
|
+
const objects = (staging.objects ?? [])
|
|
201
|
+
.map((object) => {
|
|
202
|
+
const attrs = [
|
|
203
|
+
object.type ? `type="${escapeXmlAttr(object.type)}"` : '',
|
|
204
|
+
object.name ? `name="${escapeXmlAttr(object.name)}"` : '',
|
|
205
|
+
object.package ? `package="${escapeXmlAttr(object.package)}"` : '',
|
|
206
|
+
object.path ? `path="${escapeXmlAttr(object.path)}"` : '',
|
|
207
|
+
object.state ? `state="${escapeXmlAttr(object.state)}"` : '',
|
|
208
|
+
object.operation ? `operation="${escapeXmlAttr(object.operation)}"` : '',
|
|
209
|
+
]
|
|
210
|
+
.filter(Boolean)
|
|
211
|
+
.join(' ');
|
|
212
|
+
return ` <abapgitrepo:object ${attrs}/>`;
|
|
213
|
+
})
|
|
214
|
+
.join('\n');
|
|
215
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
216
|
+
<abapgitrepo:objects xmlns:abapgitrepo="http://www.sap.com/adt/abapgit/repository">
|
|
217
|
+
${objects}
|
|
218
|
+
</abapgitrepo:objects>`;
|
|
219
|
+
}
|
|
220
|
+
export async function listRepos(http, safety) {
|
|
221
|
+
checkOperation(safety, OperationType.Read, 'AbapGitListRepos');
|
|
222
|
+
const path = `${ABAPGIT_BASE}/repos`;
|
|
223
|
+
const resp = await requestAbapGit(path, () => http.get(path, { Accept: REPOS_V2 }));
|
|
224
|
+
return parseAbapGitRepos(resp.body);
|
|
225
|
+
}
|
|
226
|
+
export async function getExternalInfo(http, safety, url, user, password) {
|
|
227
|
+
checkOperation(safety, OperationType.Read, 'AbapGitExternalInfo');
|
|
228
|
+
const path = `${ABAPGIT_BASE}/externalrepoinfo`;
|
|
229
|
+
const body = buildExternalInfoRequestXml(url, user, password);
|
|
230
|
+
const resp = await requestAbapGit(path, () => http.post(path, body, EXTERNAL_INFO_REQUEST_V2, {
|
|
231
|
+
Accept: EXTERNAL_INFO_RESPONSE_V2,
|
|
232
|
+
...authHeaders(user, password),
|
|
233
|
+
}));
|
|
234
|
+
return parseAbapGitExternalInfo(resp.body);
|
|
235
|
+
}
|
|
236
|
+
export async function createRepo(http, safety, params) {
|
|
237
|
+
checkOperation(safety, OperationType.Create, 'AbapGitCreateRepo');
|
|
238
|
+
checkGit(safety, 'clone');
|
|
239
|
+
checkPackage(safety, params.package);
|
|
240
|
+
const path = `${ABAPGIT_BASE}/repos`;
|
|
241
|
+
const body = buildRepoPayloadXml(params);
|
|
242
|
+
const resp = await requestAbapGit(path, () => http.post(path, body, REPO_V3, {
|
|
243
|
+
Accept: REPO_V3,
|
|
244
|
+
...authHeaders(params.user, params.password),
|
|
245
|
+
}));
|
|
246
|
+
return parseAbapGitRepos(resp.body);
|
|
247
|
+
}
|
|
248
|
+
export async function pullRepo(http, safety, repoId, params = {}) {
|
|
249
|
+
checkOperation(safety, OperationType.Update, 'AbapGitPullRepo');
|
|
250
|
+
checkGit(safety, 'pull');
|
|
251
|
+
const path = `${ABAPGIT_BASE}/repos/${encodeURIComponent(repoId)}/pull`;
|
|
252
|
+
const body = buildRepoPayloadXml({
|
|
253
|
+
package: params.package ?? '$TMP',
|
|
254
|
+
url: params.url ?? '',
|
|
255
|
+
branchName: params.branchName,
|
|
256
|
+
transportRequest: params.transportRequest,
|
|
257
|
+
user: params.user,
|
|
258
|
+
password: params.password,
|
|
259
|
+
});
|
|
260
|
+
const resp = await requestAbapGit(path, () => http.post(path, body, REPO_V3, {
|
|
261
|
+
Accept: REPO_STAGE_V1,
|
|
262
|
+
...authHeaders(params.user, params.password),
|
|
263
|
+
}));
|
|
264
|
+
return parseAbapGitObjects(resp.body);
|
|
265
|
+
}
|
|
266
|
+
export async function unlinkRepo(http, safety, repoId) {
|
|
267
|
+
checkOperation(safety, OperationType.Delete, 'AbapGitUnlinkRepo');
|
|
268
|
+
checkGit(safety, 'unlink');
|
|
269
|
+
const path = `${ABAPGIT_BASE}/repos/${encodeURIComponent(repoId)}`;
|
|
270
|
+
await requestAbapGit(path, () => http.delete(path, { Accept: REPO_V3 }));
|
|
271
|
+
}
|
|
272
|
+
export async function stageRepo(http, safety, repo) {
|
|
273
|
+
checkOperation(safety, OperationType.Update, 'AbapGitStageRepo');
|
|
274
|
+
checkGit(safety, 'stage');
|
|
275
|
+
const link = findRepoLink(repo, 'stage_link');
|
|
276
|
+
const resp = await requestAbapGit(link.href, () => http.get(link.href, {
|
|
277
|
+
Accept: REPO_STAGE_V1,
|
|
278
|
+
'Content-Type': REPO_STAGE_V1,
|
|
279
|
+
}));
|
|
280
|
+
const objects = parseAbapGitObjects(resp.body).map((object) => object);
|
|
281
|
+
return {
|
|
282
|
+
repoKey: repo.key,
|
|
283
|
+
branchName: repo.branchName,
|
|
284
|
+
objects,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
export async function pushRepo(http, safety, repo, staging) {
|
|
288
|
+
checkOperation(safety, OperationType.Update, 'AbapGitPushRepo');
|
|
289
|
+
checkGit(safety, 'push');
|
|
290
|
+
const link = findRepoLink(repo, 'push_link');
|
|
291
|
+
const body = buildStagingPayloadXml(staging);
|
|
292
|
+
await requestAbapGit(link.href, () => http.post(link.href, body, REPO_STAGE_V1, {
|
|
293
|
+
Accept: REPO_STAGE_V1,
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
export async function checkRepo(http, safety, repo) {
|
|
297
|
+
checkOperation(safety, OperationType.Read, 'AbapGitCheckRepo');
|
|
298
|
+
const link = findRepoLink(repo, 'check_link');
|
|
299
|
+
// Live trial returns 5xx with `<namespace id="org.abapgit.adt"/>` + message like
|
|
300
|
+
// "HTTP error 421" when the remote Git registry is unreachable. That's diagnostic
|
|
301
|
+
// info the LLM should see — normalise to {ok:false,message} rather than throwing.
|
|
302
|
+
let resp;
|
|
303
|
+
try {
|
|
304
|
+
resp = await http.post(link.href, '', undefined, { Accept: REPO_V3 });
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
if (err instanceof AdtApiError) {
|
|
308
|
+
const parsed = classifyAbapgitError(err.responseBody ?? '');
|
|
309
|
+
if (parsed.namespace === 'org.abapgit.adt') {
|
|
310
|
+
return { ok: false, message: parsed.message ?? AdtApiError.extractCleanMessage(err.responseBody ?? '') };
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
throw err;
|
|
314
|
+
}
|
|
315
|
+
if (!resp.body || resp.body.trim().length === 0) {
|
|
316
|
+
return { ok: true, message: null };
|
|
317
|
+
}
|
|
318
|
+
const parsed = classifyAbapgitError(resp.body);
|
|
319
|
+
return {
|
|
320
|
+
ok: false,
|
|
321
|
+
message: parsed.message ?? AdtApiError.extractCleanMessage(resp.body),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
export async function switchBranch(http, safety, repoId, branch, create = false) {
|
|
325
|
+
checkOperation(safety, OperationType.Update, 'AbapGitSwitchBranch');
|
|
326
|
+
checkGit(safety, create ? 'create_branch' : 'switch_branch');
|
|
327
|
+
const path = `${ABAPGIT_BASE}/repos/${encodeURIComponent(repoId)}/branches/${encodeURIComponent(branch)}?create=${create ? 'true' : 'false'}`;
|
|
328
|
+
await requestAbapGit(path, () => http.post(path, '', undefined, { Accept: REPO_V3 }));
|
|
329
|
+
}
|
|
330
|
+
export async function createBranch(http, safety, repoId, branch) {
|
|
331
|
+
await switchBranch(http, safety, repoId, branch, true);
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=abapgit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abapgit.js","sourceRoot":"","sources":["../../src/adt/abapgit.ts"],"names":[],"mappings":"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"}
|
package/dist/adt/config.d.ts
CHANGED
package/dist/adt/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/adt/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAEhD,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/adt/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAEhD,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,IAAI,aAAa,CAYpD;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,2BAA2B;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,EAAE,aAAa,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,+EAA+E;IAC/E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uCAAuC;AACvC,wBAAgB,sBAAsB,IAAI,eAAe,CAaxD"}
|
package/dist/adt/config.js
CHANGED
package/dist/adt/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/adt/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/adt/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAkBvD,8CAA8C;AAC9C,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,MAAM;QACX,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAqDD,uCAAuC;AACvC,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,wBAAwB,EAAE;QAClC,QAAQ,EAAE,oBAAoB,EAAE;QAChC,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC"}
|
package/dist/adt/crud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/E,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,sCAAsC;AACtC,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA4BrB;AAED,4BAA4B;AAC5B,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5G;
|
|
1
|
+
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/E,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,sCAAsC;AACtC,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA4BrB;AAED,4BAA4B;AAC5B,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5G;AAkBD,+BAA+B;AAC/B,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,SAAkB,EAC7B,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAOD,2DAA2D;AAC3D,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,iDAAiD;AACjD,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,4CAA4C;AAC5C,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/adt/crud.js
CHANGED
|
@@ -37,6 +37,20 @@ export async function lockObject(http, safety, objectUrl, accessMode = 'MODIFY')
|
|
|
37
37
|
export async function unlockObject(http, objectUrl, lockHandle) {
|
|
38
38
|
await http.post(`${objectUrl}?_action=UNLOCK&lockHandle=${encodeURIComponent(lockHandle)}`);
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Some vendor content types are versioned, and the server-side release
|
|
42
|
+
* determines which versions are accepted. DTEL is a concrete case: modern
|
|
43
|
+
* systems (SAP_BASIS ≥ 7.52) accept `…dataelements.v2+xml`, NW 7.50/7.51
|
|
44
|
+
* only accept `…dataelements.v1+xml` — same XML body, different MIME version
|
|
45
|
+
* suffix. On HTTP 415, retry once with the fallback.
|
|
46
|
+
*
|
|
47
|
+
* Kept as a narrow static map so a backport never falls back into an
|
|
48
|
+
* unintended retry loop for unrelated content types.
|
|
49
|
+
*/
|
|
50
|
+
const CONTENT_TYPE_FALLBACKS = {
|
|
51
|
+
'application/vnd.sap.adt.dataelements.v2+xml; charset=utf-8': 'application/vnd.sap.adt.dataelements.v1+xml; charset=utf-8',
|
|
52
|
+
'application/vnd.sap.adt.dataelements.v2+xml': 'application/vnd.sap.adt.dataelements.v1+xml',
|
|
53
|
+
};
|
|
40
54
|
/** Create a new ABAP object */
|
|
41
55
|
export async function createObject(http, safety, objectUrl, body, contentType = 'application/*', transport, packageName) {
|
|
42
56
|
checkOperation(safety, OperationType.Create, 'CreateObject');
|
|
@@ -48,8 +62,23 @@ export async function createObject(http, safety, objectUrl, body, contentType =
|
|
|
48
62
|
params.push(`_package=${encodeURIComponent(packageName)}`);
|
|
49
63
|
}
|
|
50
64
|
const url = params.length > 0 ? `${objectUrl}?${params.join('&')}` : objectUrl;
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
try {
|
|
66
|
+
const resp = await http.post(url, body, contentType);
|
|
67
|
+
return resp.body;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const fallback = CONTENT_TYPE_FALLBACKS[contentType];
|
|
71
|
+
if (fallback && isUnsupportedMediaTypeError(err)) {
|
|
72
|
+
const resp = await http.post(url, body, fallback);
|
|
73
|
+
return resp.body;
|
|
74
|
+
}
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function isUnsupportedMediaTypeError(err) {
|
|
79
|
+
if (!(err instanceof AdtApiError))
|
|
80
|
+
return false;
|
|
81
|
+
return err.statusCode === 415;
|
|
53
82
|
}
|
|
54
83
|
/** Update source code of an ABAP object (requires lock) */
|
|
55
84
|
export async function updateSource(http, safety, sourceUrl, source, lockHandle, transport) {
|
|
@@ -75,7 +104,17 @@ export async function updateObject(http, safety, objectUrl, body, lockHandle, co
|
|
|
75
104
|
if (params.length > 0) {
|
|
76
105
|
url += (url.includes('?') ? '&' : '?') + params.join('&');
|
|
77
106
|
}
|
|
78
|
-
|
|
107
|
+
try {
|
|
108
|
+
await http.put(url, body, contentType);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const fallback = CONTENT_TYPE_FALLBACKS[contentType];
|
|
112
|
+
if (fallback && isUnsupportedMediaTypeError(err)) {
|
|
113
|
+
await http.put(url, body, fallback);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
79
118
|
}
|
|
80
119
|
/** Delete an ABAP object (requires lock) */
|
|
81
120
|
export async function deleteObject(http, safety, objectUrl, lockHandle, transport) {
|
package/dist/adt/crud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAQ/E,sCAAsC;AACtC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAmB,EACnB,MAAoB,EACpB,SAAiB,EACjB,UAAU,GAAG,QAAQ;IAErB,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,4BAA4B,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;QACvG,wEAAwE;QACxE,8EAA8E;QAC9E,MAAM,EAAE,gGAAgG;KACzG,CAAC,CAAC;IAEH,kEAAkE;IAClE,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC;IAC/D,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IAC/E,MAAM,kCAAkC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClG,MAAM,6BAA6B,GAAG,kCAAkC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpF,IAAI,mBAAmB,KAAK,OAAO,IAAI,6BAA6B,KAAK,OAAO,EAAE,CAAC;QACjF,MAAM,IAAI,WAAW,CACnB,+NAA+N,EAC/N,GAAG,EACH,SAAS,CACV,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB;IAC3F,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,8BAA8B,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAmB,EACnB,MAAoB,EACpB,SAAiB,EACjB,IAAY,EACZ,WAAW,GAAG,eAAe,EAC7B,SAAkB,EAClB,WAAoB;IAEpB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,UAAU,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,YAAY,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/adt/crud.ts"],"names":[],"mappings":"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"}
|
package/dist/adt/errors.d.ts
CHANGED
|
@@ -26,11 +26,20 @@ export interface DdicDiagnostic {
|
|
|
26
26
|
text: string;
|
|
27
27
|
}
|
|
28
28
|
export interface SapErrorClassification {
|
|
29
|
-
category: 'lock-conflict' | 'enqueue-error' | 'authorization' | 'activation-dependency' | 'transport-issue' | 'object-exists' | 'method-not-supported';
|
|
29
|
+
category: 'lock-conflict' | 'enqueue-error' | 'authorization' | 'activation-dependency' | 'transport-issue' | 'object-exists' | 'method-not-supported' | 'icf-handler-not-bound';
|
|
30
30
|
hint: string;
|
|
31
31
|
transaction?: string;
|
|
32
32
|
details?: Record<string, string>;
|
|
33
33
|
}
|
|
34
|
+
export interface GctsErrorClassification {
|
|
35
|
+
exception?: string;
|
|
36
|
+
logMessage?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface AbapGitErrorClassification {
|
|
39
|
+
namespace?: string;
|
|
40
|
+
message?: string;
|
|
41
|
+
t100Key?: string;
|
|
42
|
+
}
|
|
34
43
|
/** HTTP-level API error from SAP ADT */
|
|
35
44
|
export declare class AdtApiError extends AdtError {
|
|
36
45
|
readonly statusCode: number;
|
|
@@ -88,6 +97,18 @@ export declare function extractLockOwner(text: string): {
|
|
|
88
97
|
} | undefined;
|
|
89
98
|
/** Classify SAP ADT errors into actionable domain categories with remediation hints. */
|
|
90
99
|
export declare function classifySapDomainError(statusCode: number, responseBody?: string): SapErrorClassification | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Parse gCTS JSON error payloads.
|
|
102
|
+
*
|
|
103
|
+
* Known shapes:
|
|
104
|
+
* - {"exception":"..."}
|
|
105
|
+
* - {"log":[{"severity":"ERROR","message":"..."}]}
|
|
106
|
+
*/
|
|
107
|
+
export declare function classifyGctsError(body: string): GctsErrorClassification;
|
|
108
|
+
/**
|
|
109
|
+
* Parse abapGit bridge/framework XML errors from /sap/bc/adt/abapgit/*.
|
|
110
|
+
*/
|
|
111
|
+
export declare function classifyAbapgitError(xmlBody: string): AbapGitErrorClassification;
|
|
91
112
|
/** Network-level error (DNS, connection refused, timeout) */
|
|
92
113
|
export declare class AdtNetworkError extends AdtError {
|
|
93
114
|
readonly cause?: Error | undefined;
|