@mcp-abap-adt/core 4.4.1 → 4.4.2
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/CHANGELOG.md +5 -0
- package/dist/handlers/class/high/handleUpdateClass.d.ts.map +1 -1
- package/dist/handlers/class/high/handleUpdateClass.js +60 -71
- package/dist/handlers/class/high/handleUpdateClass.js.map +1 -1
- package/dist/handlers/data_element/high/handleUpdateDataElement.js +19 -19
- package/dist/handlers/data_element/high/handleUpdateDataElement.js.map +1 -1
- package/dist/handlers/domain/high/handleUpdateDomain.d.ts.map +1 -1
- package/dist/handlers/domain/high/handleUpdateDomain.js +18 -18
- package/dist/handlers/domain/high/handleUpdateDomain.js.map +1 -1
- package/dist/handlers/interface/high/handleUpdateInterface.d.ts.map +1 -1
- package/dist/handlers/interface/high/handleUpdateInterface.js +33 -36
- package/dist/handlers/interface/high/handleUpdateInterface.js.map +1 -1
- package/dist/handlers/program/high/handleUpdateProgram.d.ts.map +1 -1
- package/dist/handlers/program/high/handleUpdateProgram.js +103 -112
- package/dist/handlers/program/high/handleUpdateProgram.js.map +1 -1
- package/dist/handlers/service_definition/high/handleUpdateServiceDefinition.d.ts.map +1 -1
- package/dist/handlers/service_definition/high/handleUpdateServiceDefinition.js +22 -24
- package/dist/handlers/service_definition/high/handleUpdateServiceDefinition.js.map +1 -1
- package/dist/handlers/structure/high/handleUpdateStructure.js +37 -40
- package/dist/handlers/structure/high/handleUpdateStructure.js.map +1 -1
- package/dist/handlers/table/high/handleUpdateTable.js +35 -36
- package/dist/handlers/table/high/handleUpdateTable.js.map +1 -1
- package/dist/handlers/view/high/handleUpdateView.d.ts.map +1 -1
- package/dist/handlers/view/high/handleUpdateView.js +97 -106
- package/dist/handlers/view/high/handleUpdateView.js.map +1 -1
- package/docs/superpowers/plans/2026-03-26-guaranteed-unlock.md +220 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUpdateTable.js","sourceRoot":"","sources":["../../../../src/handlers/table/high/handleUpdateTable.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAyDH,8CAmPC;AA1SD,qDAA4C;AAC5C,kDAAuD;AAEvD,8CAK4B;AAEf,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,aAAa;IACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAU;IAC1C,WAAW,EACT,6MAA6M;IAC/M,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,iEAAiE;aACpE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,0OAA0O;aAC7O;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mGAAmG;aACtG;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,oDAAoD;aAClE;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;KACrC;CACO,CAAC;AASX;;;;;GAKG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,IAAqB;IAErB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,EACJ,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,QAAQ,GAAG,IAAI,GAChB,GAAG,IAAuB,CAAC;QAE5B,aAAa;QACb,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAA,oBAAY,EAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,EAAE,IAAI,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,+CAA+C;YAC/C,4EAA4E;YAC5E,mDAAmD;YACnD,+DAA+D;YAC/D,yFAAyF;YACzF,MAAM,EAAE,KAAK,CACX,+DAA+D,SAAS,EAAE,CAC3E,CAAC;QACJ,CAAC;QAAC,OAAO,eAAoB,EAAE,CAAC;YAC9B,MAAM,YAAY,GAChB,eAAe,YAAY,KAAK;gBAC9B,CAAC,CAAC,eAAe,CAAC,OAAO;gBACzB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC9B,MAAM,EAAE,KAAK,CACX,8CAA8C,YAAY,EAAE,CAC7D,CAAC;YACF,OAAO,IAAA,oBAAY,EACjB,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,gBAAgB;YAChB,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAC;YAE3C,8HAA8H;YAC9H,mEAAmE;YACnE,MAAM,cAAc,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,mCAAmC;YAC9E,IAAI,gBAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"handleUpdateTable.js","sourceRoot":"","sources":["../../../../src/handlers/table/high/handleUpdateTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUpdateView.d.ts","sourceRoot":"","sources":["../../../../src/handlers/view/high/handleUpdateView.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AASX,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG;;;;;;
|
|
1
|
+
{"version":3,"file":"handleUpdateView.d.ts","sourceRoot":"","sources":["../../../../src/handlers/view/high/handleUpdateView.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASvE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AASX,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG;;;;;;GAgO1E"}
|
|
@@ -59,11 +59,11 @@ async function handleUpdateView(context, params) {
|
|
|
59
59
|
const client = (0, clients_1.createAdtClient)(connection);
|
|
60
60
|
const shouldActivate = args.activate === true;
|
|
61
61
|
let lockHandle;
|
|
62
|
-
// Lock
|
|
63
|
-
logger?.debug(`Locking view: ${viewName}`);
|
|
64
|
-
lockHandle = await client.getView().lock({ viewName });
|
|
65
|
-
logger?.debug(`View locked: ${viewName} (handle=${lockHandle ? `${lockHandle.substring(0, 8)}...` : 'none'})`);
|
|
66
62
|
try {
|
|
63
|
+
// Lock
|
|
64
|
+
logger?.debug(`Locking view: ${viewName}`);
|
|
65
|
+
lockHandle = await client.getView().lock({ viewName });
|
|
66
|
+
logger?.debug(`View locked: ${viewName} (handle=${lockHandle ? `${lockHandle.substring(0, 8)}...` : 'none'})`);
|
|
67
67
|
// Check new code BEFORE update
|
|
68
68
|
logger?.debug(`Checking new DDL code before update: ${viewName}`);
|
|
69
69
|
let checkNewCodePassed = false;
|
|
@@ -99,127 +99,118 @@ async function handleUpdateView(context, params) {
|
|
|
99
99
|
else {
|
|
100
100
|
logger?.warn(`Skipping update - new code check failed: ${viewName}`);
|
|
101
101
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
logger?.info(`View unlocked: ${viewName}`);
|
|
106
|
-
// Check inactive version (after unlock)
|
|
107
|
-
logger?.debug(`Checking inactive version: ${viewName}`);
|
|
108
|
-
try {
|
|
109
|
-
await (0, utils_1.safeCheckOperation)(() => client
|
|
110
|
-
.getView()
|
|
111
|
-
.check({ viewName, ddlSource: args.ddl_source }, 'inactive'), viewName, {
|
|
112
|
-
debug: (message) => logger?.debug(message),
|
|
113
|
-
});
|
|
114
|
-
logger?.debug(`Inactive version check completed: ${viewName}`);
|
|
115
|
-
}
|
|
116
|
-
catch (checkError) {
|
|
117
|
-
if (checkError.isAlreadyChecked) {
|
|
118
|
-
logger?.debug(`View ${viewName} was already checked - continuing`);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
logger?.warn(`Inactive version check had issues: ${viewName} - ${checkError instanceof Error ? checkError.message : String(checkError)}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Activate if requested
|
|
125
|
-
let activateResponse;
|
|
126
|
-
if (shouldActivate) {
|
|
127
|
-
logger?.debug(`Activating view: ${viewName}`);
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
if (lockHandle) {
|
|
128
105
|
try {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
logger?.info(`View
|
|
106
|
+
logger?.debug(`Unlocking view: ${viewName}`);
|
|
107
|
+
await client.getView().unlock({ viewName }, lockHandle);
|
|
108
|
+
logger?.info(`View unlocked: ${viewName}`);
|
|
132
109
|
}
|
|
133
|
-
catch (
|
|
134
|
-
logger?.
|
|
135
|
-
throw new Error(`Activation failed: ${activationError instanceof Error ? activationError.message : String(activationError)}`);
|
|
110
|
+
catch (unlockError) {
|
|
111
|
+
logger?.warn(`Failed to unlock view ${viewName}: ${unlockError?.message || unlockError}`);
|
|
136
112
|
}
|
|
137
113
|
}
|
|
138
|
-
|
|
139
|
-
|
|
114
|
+
}
|
|
115
|
+
// Check inactive version (after unlock)
|
|
116
|
+
logger?.debug(`Checking inactive version: ${viewName}`);
|
|
117
|
+
try {
|
|
118
|
+
await (0, utils_1.safeCheckOperation)(() => client
|
|
119
|
+
.getView()
|
|
120
|
+
.check({ viewName, ddlSource: args.ddl_source }, 'inactive'), viewName, {
|
|
121
|
+
debug: (message) => logger?.debug(message),
|
|
122
|
+
});
|
|
123
|
+
logger?.debug(`Inactive version check completed: ${viewName}`);
|
|
124
|
+
}
|
|
125
|
+
catch (checkError) {
|
|
126
|
+
if (checkError.isAlreadyChecked) {
|
|
127
|
+
logger?.debug(`View ${viewName} was already checked - continuing`);
|
|
140
128
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (shouldActivate && activateResponse) {
|
|
144
|
-
if (typeof activateResponse.data === 'string' &&
|
|
145
|
-
activateResponse.data.includes('<chkl:messages')) {
|
|
146
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
147
|
-
ignoreAttributes: false,
|
|
148
|
-
attributeNamePrefix: '@_',
|
|
149
|
-
});
|
|
150
|
-
const result = parser.parse(activateResponse.data);
|
|
151
|
-
const messages = result?.['chkl:messages']?.msg;
|
|
152
|
-
if (messages) {
|
|
153
|
-
const msgArray = Array.isArray(messages) ? messages : [messages];
|
|
154
|
-
activationWarnings = msgArray.map((msg) => `${msg['@_type']}: ${msg.shortText?.txt || 'Unknown'}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
129
|
+
else {
|
|
130
|
+
logger?.warn(`Inactive version check had issues: ${viewName} - ${checkError instanceof Error ? checkError.message : String(checkError)}`);
|
|
157
131
|
}
|
|
158
|
-
logger?.info(`UpdateView completed successfully: ${viewName}`);
|
|
159
|
-
const result = {
|
|
160
|
-
success: true,
|
|
161
|
-
view_name: viewName,
|
|
162
|
-
type: 'DDLS',
|
|
163
|
-
activated: shouldActivate,
|
|
164
|
-
message: `View ${viewName} updated${shouldActivate ? ' and activated' : ''} successfully`,
|
|
165
|
-
uri: `/sap/bc/adt/ddic/ddl/sources/${(0, utils_1.encodeSapObjectName)(viewName).toLowerCase()}`,
|
|
166
|
-
steps_completed: [
|
|
167
|
-
'lock',
|
|
168
|
-
'check_new_code',
|
|
169
|
-
'update',
|
|
170
|
-
'unlock',
|
|
171
|
-
'check_inactive',
|
|
172
|
-
...(shouldActivate ? ['activate'] : []),
|
|
173
|
-
],
|
|
174
|
-
activation_warnings: activationWarnings.length > 0 ? activationWarnings : undefined,
|
|
175
|
-
};
|
|
176
|
-
return (0, utils_1.return_response)({
|
|
177
|
-
data: JSON.stringify(result, null, 2),
|
|
178
|
-
status: 200,
|
|
179
|
-
statusText: 'OK',
|
|
180
|
-
headers: {},
|
|
181
|
-
config: {},
|
|
182
|
-
});
|
|
183
132
|
}
|
|
184
|
-
|
|
185
|
-
|
|
133
|
+
// Activate if requested
|
|
134
|
+
let activateResponse;
|
|
135
|
+
if (shouldActivate) {
|
|
136
|
+
logger?.debug(`Activating view: ${viewName}`);
|
|
186
137
|
try {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
logger?.warn(`Unlocked view after error: ${viewName}`);
|
|
191
|
-
}
|
|
138
|
+
const activateState = await client.getView().activate({ viewName });
|
|
139
|
+
activateResponse = activateState.activateResult;
|
|
140
|
+
logger?.info(`View activated: ${viewName}`);
|
|
192
141
|
}
|
|
193
|
-
catch (
|
|
194
|
-
logger?.error(`
|
|
142
|
+
catch (activationError) {
|
|
143
|
+
logger?.error(`Activation failed: ${viewName} - ${activationError instanceof Error ? activationError.message : String(activationError)}`);
|
|
144
|
+
throw new Error(`Activation failed: ${activationError instanceof Error ? activationError.message : String(activationError)}`);
|
|
195
145
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
logger?.debug(`Skipping activation for: ${viewName}`);
|
|
149
|
+
}
|
|
150
|
+
// Parse activation warnings if activation was performed
|
|
151
|
+
let activationWarnings = [];
|
|
152
|
+
if (shouldActivate && activateResponse) {
|
|
153
|
+
if (typeof activateResponse.data === 'string' &&
|
|
154
|
+
activateResponse.data.includes('<chkl:messages')) {
|
|
202
155
|
const parser = new fast_xml_parser_1.XMLParser({
|
|
203
156
|
ignoreAttributes: false,
|
|
204
157
|
attributeNamePrefix: '@_',
|
|
205
158
|
});
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (errorMsg) {
|
|
212
|
-
errorMessage = `SAP Error: ${errorMsg}`;
|
|
159
|
+
const result = parser.parse(activateResponse.data);
|
|
160
|
+
const messages = result?.['chkl:messages']?.msg;
|
|
161
|
+
if (messages) {
|
|
162
|
+
const msgArray = Array.isArray(messages) ? messages : [messages];
|
|
163
|
+
activationWarnings = msgArray.map((msg) => `${msg['@_type']}: ${msg.shortText?.txt || 'Unknown'}`);
|
|
213
164
|
}
|
|
214
165
|
}
|
|
215
|
-
catch {
|
|
216
|
-
// ignore parse errors
|
|
217
|
-
}
|
|
218
|
-
return (0, utils_1.return_error)(new Error(errorMessage));
|
|
219
166
|
}
|
|
167
|
+
logger?.info(`UpdateView completed successfully: ${viewName}`);
|
|
168
|
+
const result = {
|
|
169
|
+
success: true,
|
|
170
|
+
view_name: viewName,
|
|
171
|
+
type: 'DDLS',
|
|
172
|
+
activated: shouldActivate,
|
|
173
|
+
message: `View ${viewName} updated${shouldActivate ? ' and activated' : ''} successfully`,
|
|
174
|
+
uri: `/sap/bc/adt/ddic/ddl/sources/${(0, utils_1.encodeSapObjectName)(viewName).toLowerCase()}`,
|
|
175
|
+
steps_completed: [
|
|
176
|
+
'lock',
|
|
177
|
+
'check_new_code',
|
|
178
|
+
'update',
|
|
179
|
+
'unlock',
|
|
180
|
+
'check_inactive',
|
|
181
|
+
...(shouldActivate ? ['activate'] : []),
|
|
182
|
+
],
|
|
183
|
+
activation_warnings: activationWarnings.length > 0 ? activationWarnings : undefined,
|
|
184
|
+
};
|
|
185
|
+
return (0, utils_1.return_response)({
|
|
186
|
+
data: JSON.stringify(result, null, 2),
|
|
187
|
+
status: 200,
|
|
188
|
+
statusText: 'OK',
|
|
189
|
+
headers: {},
|
|
190
|
+
config: {},
|
|
191
|
+
});
|
|
220
192
|
}
|
|
221
193
|
catch (error) {
|
|
222
|
-
|
|
194
|
+
// Parse error message
|
|
195
|
+
let errorMessage = error instanceof Error ? error.message : String(error);
|
|
196
|
+
// Attempt to parse ADT XML error
|
|
197
|
+
try {
|
|
198
|
+
const parser = new fast_xml_parser_1.XMLParser({
|
|
199
|
+
ignoreAttributes: false,
|
|
200
|
+
attributeNamePrefix: '@_',
|
|
201
|
+
});
|
|
202
|
+
const errorData = error?.response?.data
|
|
203
|
+
? parser.parse(error.response.data)
|
|
204
|
+
: null;
|
|
205
|
+
const errorMsg = errorData?.['exc:exception']?.message?.['#text'] ||
|
|
206
|
+
errorData?.['exc:exception']?.message;
|
|
207
|
+
if (errorMsg) {
|
|
208
|
+
errorMessage = `SAP Error: ${errorMsg}`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// ignore parse errors
|
|
213
|
+
}
|
|
223
214
|
logger?.error(`Error updating view ${viewName}: ${errorMessage}`);
|
|
224
215
|
return (0, utils_1.return_error)(new Error(errorMessage));
|
|
225
216
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleUpdateView.js","sourceRoot":"","sources":["../../../../src/handlers/view/high/handleUpdateView.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA+CH,
|
|
1
|
+
{"version":3,"file":"handleUpdateView.js","sourceRoot":"","sources":["../../../../src/handlers/view/high/handleUpdateView.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Guaranteed Unlock on Error — Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Replace try-catch unlock-on-error with try-finally in all update handlers to guarantee unlock regardless of error path.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Move lock() inside the same try block that has the finally-unlock. Use the existing safe pattern from `handleUpdateFunctionGroup.ts` and `handleUpdateFunctionModule.ts` as reference. Activate stays AFTER the finally block (after unlock).
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** TypeScript, existing ADT client methods
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Reference Pattern (from handleUpdateFunctionModule.ts)
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
let lockHandle: string | undefined;
|
|
17
|
+
try {
|
|
18
|
+
lockHandle = await client.getXxx().lock({ ... });
|
|
19
|
+
// ... check, update, etc.
|
|
20
|
+
} finally {
|
|
21
|
+
if (lockHandle) {
|
|
22
|
+
try {
|
|
23
|
+
await client.getXxx().unlock({ ... }, lockHandle);
|
|
24
|
+
} catch (unlockError: any) {
|
|
25
|
+
logger?.warn(`Failed to unlock after error: ${unlockError?.message || unlockError}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// activate AFTER finally (unlock already done)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Key transformation
|
|
33
|
+
|
|
34
|
+
**Before (vulnerable):**
|
|
35
|
+
```typescript
|
|
36
|
+
lockHandle = await client.getXxx().lock({ ... }); // OUTSIDE try
|
|
37
|
+
try {
|
|
38
|
+
// check → update → unlock (happy path)
|
|
39
|
+
} catch (workflowError) {
|
|
40
|
+
// unlock-on-error (catch only)
|
|
41
|
+
if (lockHandle) await client.getXxx().unlock({ ... }, lockHandle);
|
|
42
|
+
throw workflowError;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**After (safe):**
|
|
47
|
+
```typescript
|
|
48
|
+
let lockHandle: string | undefined;
|
|
49
|
+
try {
|
|
50
|
+
lockHandle = await client.getXxx().lock({ ... });
|
|
51
|
+
// check → update (NO unlock in happy path — finally handles it)
|
|
52
|
+
} finally {
|
|
53
|
+
if (lockHandle) {
|
|
54
|
+
try {
|
|
55
|
+
await client.getXxx().unlock({ ... }, lockHandle);
|
|
56
|
+
logger?.info(`Unlocked: ${objectName}`);
|
|
57
|
+
} catch (unlockError: any) {
|
|
58
|
+
logger?.warn(`Failed to unlock ${objectName}: ${unlockError?.message || unlockError}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// check inactive + activate AFTER finally
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Important:** Remove the explicit `unlock()` call from the happy path — `finally` handles both happy and error paths. Check-inactive and activate move AFTER the finally block since they don't need the lock.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Vulnerable Handlers (9 files)
|
|
70
|
+
|
|
71
|
+
### Task 1: handleUpdateProgram.ts
|
|
72
|
+
|
|
73
|
+
**Files:**
|
|
74
|
+
- Modify: `src/handlers/program/high/handleUpdateProgram.ts`
|
|
75
|
+
|
|
76
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
77
|
+
|
|
78
|
+
Move `lock()` (line 111) inside the inner try. Replace inner `try { ... } catch (workflowError) { unlock; }` with `try { ... } finally { unlock; }`. Remove explicit `unlock()` from happy path (line 167). Move check-inactive (lines 171-191) and activate (lines 194-212) after the finally block.
|
|
79
|
+
|
|
80
|
+
- [ ] **Step 2: Verify build**
|
|
81
|
+
|
|
82
|
+
Run: `npx tsc --noEmit`
|
|
83
|
+
Expected: no errors
|
|
84
|
+
|
|
85
|
+
- [ ] **Step 3: Commit**
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
git commit -m "fix(UpdateProgram): guarantee unlock via try-finally (#22)"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Task 2: handleUpdateClass.ts
|
|
92
|
+
|
|
93
|
+
**Files:**
|
|
94
|
+
- Modify: `src/handlers/class/high/handleUpdateClass.ts`
|
|
95
|
+
|
|
96
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
97
|
+
|
|
98
|
+
Same transformation: lock inside try, finally for unlock, remove happy-path unlock, move check-inactive + activate after finally.
|
|
99
|
+
|
|
100
|
+
- [ ] **Step 2: Verify build**
|
|
101
|
+
|
|
102
|
+
Run: `npx tsc --noEmit`
|
|
103
|
+
|
|
104
|
+
- [ ] **Step 3: Commit**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
git commit -m "fix(UpdateClass): guarantee unlock via try-finally (#22)"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Task 3: handleUpdateInterface.ts
|
|
111
|
+
|
|
112
|
+
**Files:**
|
|
113
|
+
- Modify: `src/handlers/interface/high/handleUpdateInterface.ts`
|
|
114
|
+
|
|
115
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
116
|
+
- [ ] **Step 2: Verify build**
|
|
117
|
+
- [ ] **Step 3: Commit**
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
git commit -m "fix(UpdateInterface): guarantee unlock via try-finally (#22)"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Task 4: handleUpdateView.ts
|
|
124
|
+
|
|
125
|
+
**Files:**
|
|
126
|
+
- Modify: `src/handlers/view/high/handleUpdateView.ts`
|
|
127
|
+
|
|
128
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
129
|
+
- [ ] **Step 2: Verify build**
|
|
130
|
+
- [ ] **Step 3: Commit**
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git commit -m "fix(UpdateView): guarantee unlock via try-finally (#22)"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Task 5: handleUpdateTable.ts
|
|
137
|
+
|
|
138
|
+
**Files:**
|
|
139
|
+
- Modify: `src/handlers/table/high/handleUpdateTable.ts`
|
|
140
|
+
|
|
141
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
142
|
+
- [ ] **Step 2: Verify build**
|
|
143
|
+
- [ ] **Step 3: Commit**
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git commit -m "fix(UpdateTable): guarantee unlock via try-finally (#22)"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Task 6: handleUpdateStructure.ts
|
|
150
|
+
|
|
151
|
+
**Files:**
|
|
152
|
+
- Modify: `src/handlers/structure/high/handleUpdateStructure.ts`
|
|
153
|
+
|
|
154
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
155
|
+
- [ ] **Step 2: Verify build**
|
|
156
|
+
- [ ] **Step 3: Commit**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
git commit -m "fix(UpdateStructure): guarantee unlock via try-finally (#22)"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Task 7: handleUpdateDomain.ts
|
|
163
|
+
|
|
164
|
+
**Files:**
|
|
165
|
+
- Modify: `src/handlers/domain/high/handleUpdateDomain.ts`
|
|
166
|
+
|
|
167
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
168
|
+
- [ ] **Step 2: Verify build**
|
|
169
|
+
- [ ] **Step 3: Commit**
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
git commit -m "fix(UpdateDomain): guarantee unlock via try-finally (#22)"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Task 8: handleUpdateServiceDefinition.ts
|
|
176
|
+
|
|
177
|
+
**Files:**
|
|
178
|
+
- Modify: `src/handlers/service_definition/high/handleUpdateServiceDefinition.ts`
|
|
179
|
+
|
|
180
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
181
|
+
- [ ] **Step 2: Verify build**
|
|
182
|
+
- [ ] **Step 3: Commit**
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git commit -m "fix(UpdateServiceDefinition): guarantee unlock via try-finally (#22)"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Task 9: handleUpdateDataElement.ts
|
|
189
|
+
|
|
190
|
+
**Files:**
|
|
191
|
+
- Modify: `src/handlers/data_element/high/handleUpdateDataElement.ts`
|
|
192
|
+
|
|
193
|
+
- [ ] **Step 1: Refactor lock/unlock to try-finally**
|
|
194
|
+
- [ ] **Step 2: Verify build**
|
|
195
|
+
- [ ] **Step 3: Commit**
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
git commit -m "fix(UpdateDataElement): guarantee unlock via try-finally (#22)"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Task 10: Final verification
|
|
202
|
+
|
|
203
|
+
- [ ] **Step 1: Full build check**
|
|
204
|
+
|
|
205
|
+
Run: `npx tsc --noEmit`
|
|
206
|
+
|
|
207
|
+
- [ ] **Step 2: Squash into single commit**
|
|
208
|
+
|
|
209
|
+
Squash all 9 fix commits into one:
|
|
210
|
+
```bash
|
|
211
|
+
git commit -m "fix: guarantee unlock via try-finally in all update handlers (#22)"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
- [ ] **Step 3: Update CHANGELOG.md**
|
|
215
|
+
|
|
216
|
+
Add entry under `[Unreleased]`:
|
|
217
|
+
```markdown
|
|
218
|
+
### Fixed
|
|
219
|
+
- Guarantee unlock via `try-finally` in all update handlers — prevents locked objects when errors occur between lock and unlock (#22). Affected: UpdateProgram, UpdateClass, UpdateInterface, UpdateView, UpdateTable, UpdateStructure, UpdateDomain, UpdateServiceDefinition, UpdateDataElement.
|
|
220
|
+
```
|