@abapify/adt-contracts 0.4.15 → 0.4.18
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/{base-BfUrFNlD.d.mts → base-CkiVIDuJ.d.mts} +8 -209
- package/dist/base-CkiVIDuJ.d.mts.map +1 -0
- package/dist/{base-CJ5t6dbP.mjs → base-DXdI_HUi.mjs} +107 -213
- package/dist/{base-CJ5t6dbP.mjs.map → base-DXdI_HUi.mjs.map} +1 -1
- package/dist/base.d.mts +1 -1
- package/dist/base.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -3
- package/dist/{schemas-DjN7IPy_.d.mts → schemas-C9KXFrq3.d.mts} +1 -5
- package/dist/schemas-C9KXFrq3.d.mts.map +1 -0
- package/dist/schemas.d.mts +1 -1
- package/dist/schemas.mjs +2 -4
- package/dist/schemas.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/base-BfUrFNlD.d.mts.map +0 -1
- package/dist/schemas-DjN7IPy_.d.mts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-CJ5t6dbP.mjs","names":["http","configurationsSchema","configurationSchema","http","http","http","http","http","http","http","classesSchema","interfacesSchema","http","http","http","httpMethod","httpSchema","http","http","http","http","http","http","groups","contentType","accept","basePath","http","fmodulesSchema","domainSchema","dataelementWrapperSchema","basePath","contentType","accept","blueSourceSchema","basePath","blueSourceSchema","basePath","http","tabletypeSchema","ddlSourceSchema","dclSourceSchema","ddlxSourceSchema","blueSourceSchema","baseContract","blueSourceSchema","dtebSourceSchema","srvdSourceSchema","http","http","http","http","http","XML_CONTENT_TYPE","http","http","parseJsonOrRaw","http","http","jsonSchema","BASE","list","http","get","create","del","base","list","http","del","http","get","http","blueSourceSchema","servicebindingSchema","badiSchema","BASE","encodeKey","list","http","get","tiles","BASE","encodeKey","list","http","get","http","http","http","speciCreateClient"],"sources":["../src/helpers/text-schema.ts","../src/helpers/crud.ts","../src/adt/cts/transportrequests/valuehelp/attribute.ts","../src/adt/cts/transportrequests/valuehelp/target.ts","../src/adt/cts/transportrequests/valuehelp/ctsproject.ts","../src/adt/cts/transportrequests/valuehelp/object.ts","../src/adt/cts/transportrequests/valuehelp/index.ts","../src/adt/cts/transportrequests/reference.ts","../src/adt/cts/transportrequests/searchconfiguration/configurations.ts","../src/adt/cts/transportrequests/searchconfiguration/metadata.ts","../src/adt/cts/transportrequests/searchconfiguration/index.ts","../src/adt/cts/transportrequests/change-owner-schema.ts","../src/adt/cts/transportrequests/add-task-schema.ts","../src/adt/cts/transportrequests/useraction.ts","../src/adt/cts/transportrequests/index.ts","../src/adt/cts/transports.ts","../src/adt/cts/transportchecks.ts","../src/adt/cts/index.ts","../src/generated/adt/sap/bc/adt/atc/worklists.ts","../src/generated/adt/sap/bc/adt/atc/results.ts","../src/adt/atc/index.ts","../src/adt/aunit/index.ts","../src/adt/oo/classes.ts","../src/adt/oo/interfaces.ts","../src/adt/oo/classrun.ts","../src/adt/oo/index.ts","../src/adt/discovery/index.ts","../src/adt/packages/index.ts","../src/adt/core/http/sessions.ts","../src/adt/core/http/systeminformation.ts","../src/adt/core/http/index.ts","../src/adt/core/index.ts","../src/adt/repository/informationsystem/search.ts","../src/adt/repository/informationsystem/usagereferences.ts","../src/adt/repository/sourceversions.ts","../src/adt/repository/informationsystem/objectproperties.ts","../src/adt/repository/informationsystem/index.ts","../src/adt/repository/objectstructure.ts","../src/adt/repository/index.ts","../src/adt/programs/programs.ts","../src/adt/programs/includes.ts","../src/adt/programs/index.ts","../src/adt/functions/groups.ts","../src/adt/functions/fmodules.ts","../src/adt/functions/index.ts","../src/adt/ddic/domains.ts","../src/adt/ddic/dataelements.ts","../src/adt/ddic/structures.ts","../src/adt/ddic/tables.ts","../src/adt/ddic/tablesettings.ts","../src/adt/ddic/tabletypes.ts","../src/adt/ddic/ddl/sources.ts","../src/adt/ddic/ddl/index.ts","../src/adt/ddic/dcl/sources.ts","../src/adt/ddic/dcl/index.ts","../src/adt/ddic/ddlx/sources.ts","../src/adt/ddic/ddlx/index.ts","../src/adt/ddic/dsfd/sources.ts","../src/adt/ddic/dsfd/index.ts","../src/adt/ddic/dsfi/index.ts","../src/adt/ddic/dteb/sources.ts","../src/adt/ddic/dteb/index.ts","../src/adt/ddic/srvd/sources.ts","../src/adt/ddic/srvd/index.ts","../src/adt/ddic/index.ts","../src/adt/system/users.ts","../src/adt/system/security/pses.ts","../src/adt/system/index.ts","../src/adt/checkruns/index.ts","../src/adt/activation/index.ts","../src/adt/datapreview/schema.ts","../src/adt/datapreview/freestyle.ts","../src/adt/datapreview/index.ts","../src/adt/runtime/traces/coverage/request.ts","../src/adt/runtime/traces/coverage/measurements.ts","../src/adt/runtime/traces/coverage/statements.ts","../src/adt/runtime/traces/coverage/index.ts","../src/adt/runtime/schema.ts","../src/adt/runtime/traces/profile.ts","../src/adt/runtime/traces/index.ts","../src/adt/runtime/dumps.ts","../src/adt/runtime/index.ts","../src/adt/gcts/schema.ts","../src/adt/gcts/repository.ts","../src/adt/gcts/branches.ts","../src/adt/gcts/commits.ts","../src/adt/gcts/config.ts","../src/adt/gcts/index.ts","../src/adt/bo/behaviordefinitions.ts","../src/adt/bo/index.ts","../src/adt/businessservices/bindings.ts","../src/adt/businessservices/index.ts","../src/adt/enhancements/enhoxhh.ts","../src/adt/enhancements/index.ts","../src/adt/uifsa/schema.ts","../src/adt/uifsa/catalogs.ts","../src/adt/uifsa/groups.ts","../src/adt/uifsa/tiles.ts","../src/adt/uifsa/index.ts","../src/adt/codeassistance/schema.ts","../src/adt/codeassistance/completion.ts","../src/adt/codeassistance/index.ts","../src/adt/vit/wb/objectproperties.ts","../src/adt/vit/index.ts","../src/adt/index.ts","../src/base.ts"],"sourcesContent":["/**\n * Plain-text body schema helper\n *\n * Speci's REST client only forwards request bodies when the declared body is an\n * Inferrable<T> (has an `_infer` marker). Endpoints that send text/plain (e.g.\n * ABAP source code) need a minimal Serializable<string> wrapper so speci routes\n * the body through instead of silently dropping it.\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n/**\n * Serializable<string> for text/plain request/response bodies.\n *\n * `parse` coerces the raw response to string; `build` returns the string as-is.\n * The `_infer` marker is the key piece — speci checks for it with `'_infer' in value`\n * to decide whether the descriptor carries a body schema.\n */\nexport const textPlain = {\n parse: (x: unknown) => String(x),\n build: (x: string) => x,\n _infer: undefined as unknown as string,\n} satisfies Serializable<string>;\n\nexport type TextPlainSchema = typeof textPlain;\n","/**\n * CRUD Contract Helper\n *\n * Generates full CRUD contracts for ADT repository objects following the\n * standard SAP ADT URL template pattern:\n *\n * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action}\n *\n * @example\n * ```ts\n * import { crud } from '../helpers/crud';\n * import { classes } from '../schemas';\n *\n * export const classesContract = crud({\n * basePath: '/sap/bc/adt/oo/classes',\n * schema: classes,\n * contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n * });\n *\n * // Usage:\n * // classesContract.get('zcl_my_class')\n * // classesContract.post({ corrNr: 'DEVK900001' })\n * // classesContract.put('zcl_my_class', { lockHandle: '...' })\n * // classesContract.delete('zcl_my_class')\n * ```\n */\n\nimport { http } from '@abapify/speci/rest';\nimport type { Serializable, RestEndpointDescriptor } from '@abapify/speci/rest';\nimport { textPlain } from './text-schema';\n\n/**\n * Common ADT query parameters for CRUD operations\n */\nexport interface CrudQueryParams {\n /** Transport/correction number */\n corrNr?: string;\n /** Lock handle from LOCK action */\n lockHandle?: string;\n /** Object version (active/inactive) */\n version?: string;\n /** Access mode (MODIFY, SOURCE, etc.) */\n accessMode?: string;\n /** Action (LOCK, UNLOCK, ACTIVATE, etc.) */\n _action?: string;\n}\n\n// NOTE: SourceType and IncludeType are intentionally generic strings.\n// The specific valid values are defined by the caller (e.g., classes.ts)\n// based on the SAP XSD schema for each object type.\n\n/**\n * Query options for source/include PUT operations\n */\nexport interface SourcePutOptions {\n /** Lock handle from previous LOCK action */\n lockHandle?: string;\n /** Transport/correction number */\n corrNr?: string;\n}\n\n/**\n * Source operations contract\n */\nexport interface SourceContract {\n get: (\n name: string,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n}\n\n/**\n * Options for creating a CRUD contract\n */\nexport interface CrudOptions<S extends Serializable<unknown>> {\n /** Base path for the resource (e.g., '/sap/bc/adt/oo/classes') */\n basePath: string;\n /** Schema for parsing/building XML */\n schema: S;\n /** Content-Type header for POST/PUT (single specific version, e.g., 'application/vnd.sap.adt.oo.classes.v4+xml') */\n contentType: string;\n /** Accept header for GET (multi-version, newest first). Falls back to contentType if not provided. */\n accept?: string;\n /** Optional: Transform object name for URL (default: lowercase) */\n nameTransform?: (name: string) => string;\n /** Optional: Source endpoints to generate (e.g., ['main']) */\n sources?: readonly string[];\n /** Optional: Include endpoints to generate (e.g., ['definitions', 'implementations', 'testclasses']) */\n includes?: readonly string[];\n}\n\n/**\n * Options for lock operation\n */\nexport interface LockOptions {\n /** Transport/correction number */\n corrNr?: string;\n /** Access mode (default: MODIFY) */\n accessMode?: 'MODIFY' | 'SOURCE';\n}\n\n/**\n * Options for unlock operation\n */\nexport interface UnlockOptions {\n /** Lock handle from previous LOCK action */\n lockHandle: string;\n}\n\n/**\n * Options for objectstructure operation\n */\nexport interface ObjectStructureOptions {\n /** Object version (active/inactive) */\n version?: 'active' | 'inactive';\n /** Include short descriptions */\n withShortDescriptions?: boolean;\n}\n\n/**\n * Base CRUD contract type (always present)\n */\nexport interface CrudContractBase<S extends Serializable<unknown>> {\n /** The schema used for XML serialization/deserialization */\n readonly bodySchema: S;\n\n /** GET {basePath}/{name} - Retrieve object metadata */\n get: (\n name: string,\n options?: Pick<CrudQueryParams, 'version'>,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: S }>;\n\n /** POST {basePath} - Create new object */\n post: (\n options?: Pick<CrudQueryParams, 'corrNr'>,\n ) => RestEndpointDescriptor<'POST', string, S, { 200: S }>;\n\n /** PUT {basePath}/{name} - Update object */\n put: (\n name: string,\n options?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) => RestEndpointDescriptor<'PUT', string, S, { 200: S }>;\n\n /** DELETE {basePath}/{name} - Delete object */\n delete: (\n name: string,\n options?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) => RestEndpointDescriptor<'DELETE', string, never, { 204: undefined }>;\n\n /** POST {basePath}/{name}?_action=LOCK - Lock object for modification */\n lock: (\n name: string,\n options?: LockOptions,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n\n /** POST {basePath}/{name}?_action=UNLOCK - Unlock object */\n unlock: (\n name: string,\n options: UnlockOptions,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n\n /** GET {basePath}/{name}/objectstructure - Get object structure (includes, methods, etc.) */\n objectstructure: (\n name: string,\n options?: ObjectStructureOptions,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: undefined }>;\n}\n\n/**\n * Source operations (get/put for source code)\n */\nexport interface SourceOperations {\n get: (\n name: string,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n}\n\n/**\n * Source contract - nested under 'source' property\n * Generated when sources option is provided\n */\nexport type SourcesContract<Sources extends readonly string[]> = {\n [K in Sources[number]]: SourceOperations;\n};\n\n/**\n * Includes contract - nested under 'includes' property\n * Generated when includes option is provided\n */\nexport type IncludesContractSkeleton<Includes extends readonly string[]> = {\n /** Generic get/put for any include type */\n get: (\n name: string,\n includeType: Includes[number],\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n includeType: Includes[number],\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n} & {\n /** Shorthand accessors for specific includes */\n [K in Includes[number]]: SourceOperations;\n};\n\n/**\n * Full CRUD contract type with optional source and includes\n */\nexport type CrudContract<\n S extends Serializable<unknown>,\n Sources extends readonly string[] | undefined = undefined,\n Includes extends readonly string[] | undefined = undefined,\n> = CrudContractBase<S> &\n (Sources extends readonly string[]\n ? { source: SourcesContract<Sources> }\n : object) &\n (Includes extends readonly string[]\n ? { includes: IncludesContractSkeleton<Includes> }\n : object);\n\n/**\n * Create source operations for a given source type\n */\nfunction createSourceOperations(\n basePath: string,\n sourceType: string,\n nameTransform: (n: string) => string,\n): SourceOperations {\n return {\n get: (name: string) =>\n http.get(`${basePath}/${nameTransform(name)}/source/${sourceType}`, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n put: (name: string, options?: SourcePutOptions) =>\n http.put(`${basePath}/${nameTransform(name)}/source/${sourceType}`, {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n };\n}\n\n/**\n * Create include operations for a given include type\n */\nfunction createIncludeOperations(\n basePath: string,\n includeType: string,\n nameTransform: (n: string) => string,\n): SourceOperations {\n return {\n get: (name: string) =>\n http.get(`${basePath}/${nameTransform(name)}/includes/${includeType}`, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n put: (name: string, options?: SourcePutOptions) =>\n http.put(`${basePath}/${nameTransform(name)}/includes/${includeType}`, {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n };\n}\n\n/**\n * Create a full CRUD contract for an ADT repository object\n *\n * Follows the standard SAP ADT URL template pattern:\n * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action}\n *\n * @example Basic CRUD\n * ```ts\n * const packagesContract = crud({\n * basePath: '/sap/bc/adt/packages',\n * schema: packages,\n * contentType: 'application/vnd.sap.adt.packages.v1+xml',\n * });\n * ```\n *\n * @example With source code support\n * ```ts\n * const interfacesContract = crud({\n * basePath: '/sap/bc/adt/oo/interfaces',\n * schema: interfaces,\n * contentType: 'application/vnd.sap.adt.oo.interfaces.v5+xml',\n * sources: ['main'],\n * });\n * // interfacesContract.source.main.get('zif_my_interface')\n * ```\n *\n * @example With includes support (classes)\n * ```ts\n * const classesContract = crud({\n * basePath: '/sap/bc/adt/oo/classes',\n * schema: classes,\n * contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n * sources: ['main'],\n * includes: ['definitions', 'implementations', 'macros'],\n * });\n * // classesContract.source.main.get('zcl_my_class')\n * // classesContract.includes.definitions.get('zcl_my_class')\n * // classesContract.includes.get('zcl_my_class', 'implementations')\n * ```\n */\nexport function crud<\n S extends Serializable<unknown>,\n const Sources extends readonly string[] | undefined = undefined,\n const Includes extends readonly string[] | undefined = undefined,\n>(\n options: CrudOptions<S> & { sources?: Sources; includes?: Includes },\n): CrudContract<S, Sources, Includes> {\n const {\n basePath,\n schema,\n contentType,\n accept = contentType,\n nameTransform = (n) => n.toLowerCase(),\n sources,\n includes,\n } = options;\n\n return {\n /** Schema for XML serialization/deserialization */\n bodySchema: schema,\n\n /**\n * GET {basePath}/{name}\n * Retrieve object metadata\n */\n get: (name: string, queryOptions?: Pick<CrudQueryParams, 'version'>) =>\n http.get(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: schema },\n headers: { Accept: accept },\n query: queryOptions?.version\n ? { version: queryOptions.version }\n : undefined,\n }),\n\n /**\n * POST {basePath}\n * Create a new object\n */\n post: (queryOptions?: Pick<CrudQueryParams, 'corrNr'>) =>\n http.post(basePath, {\n body: schema,\n responses: { 200: schema },\n headers: {\n Accept: accept,\n 'Content-Type': contentType,\n },\n query: queryOptions?.corrNr\n ? { corrNr: queryOptions.corrNr }\n : undefined,\n }),\n\n /**\n * PUT {basePath}/{name}\n * Update object metadata\n */\n put: (\n name: string,\n queryOptions?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) =>\n http.put(`${basePath}/${nameTransform(name)}`, {\n body: schema,\n responses: { 200: schema },\n headers: {\n Accept: accept,\n 'Content-Type': contentType,\n },\n query: {\n ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}),\n ...(queryOptions?.lockHandle\n ? { lockHandle: queryOptions.lockHandle }\n : {}),\n },\n }),\n\n /**\n * DELETE {basePath}/{name}\n * Delete object\n */\n delete: (\n name: string,\n queryOptions?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) =>\n http.delete(`${basePath}/${nameTransform(name)}`, {\n responses: { 204: undefined },\n query: {\n ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}),\n ...(queryOptions?.lockHandle\n ? { lockHandle: queryOptions.lockHandle }\n : {}),\n },\n }),\n\n /**\n * POST {basePath}/{name}?_action=LOCK\n * Lock object for modification\n *\n * Response contains lock handle in XML format:\n * <asx:abap>...<DATA><LOCK_HANDLE>xxx</LOCK_HANDLE><CORRNR>yyy</CORRNR>...</DATA>...</asx:abap>\n */\n lock: (name: string, lockOptions?: LockOptions) =>\n http.post(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n Accept:\n 'application/*,application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result',\n },\n query: {\n _action: 'LOCK',\n accessMode: lockOptions?.accessMode ?? 'MODIFY',\n ...(lockOptions?.corrNr ? { corrNr: lockOptions.corrNr } : {}),\n },\n }),\n\n /**\n * POST {basePath}/{name}?_action=UNLOCK\n * Unlock object\n */\n unlock: (name: string, unlockOptions: UnlockOptions) =>\n http.post(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n },\n query: {\n _action: 'UNLOCK',\n accessMode: 'MODIFY',\n lockHandle: unlockOptions.lockHandle,\n },\n }),\n\n /**\n * GET {basePath}/{name}/objectstructure\n * Get object structure (includes, methods, attributes, etc.)\n */\n objectstructure: (\n name: string,\n structureOptions?: ObjectStructureOptions,\n ) =>\n http.get(`${basePath}/${nameTransform(name)}/objectstructure`, {\n responses: { 200: undefined },\n query: {\n ...(structureOptions?.version\n ? { version: structureOptions.version }\n : {}),\n ...(structureOptions?.withShortDescriptions !== undefined\n ? {\n withShortDescriptions: String(\n structureOptions.withShortDescriptions,\n ),\n }\n : {}),\n },\n }),\n\n // Conditionally add source operations\n ...(sources\n ? {\n source: Object.fromEntries(\n sources.map((sourceType) => [\n sourceType,\n createSourceOperations(basePath, sourceType, nameTransform),\n ]),\n ),\n }\n : {}),\n\n // Conditionally add includes operations\n ...(includes\n ? {\n includes: {\n // Generic get/put for any include type\n get: (name: string, includeType: string) =>\n http.get(\n `${basePath}/${nameTransform(name)}/includes/${includeType}`,\n {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n },\n ),\n put: (\n name: string,\n includeType: string,\n options?: SourcePutOptions,\n ) =>\n http.put(\n `${basePath}/${nameTransform(name)}/includes/${includeType}`,\n {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: 'text/plain',\n 'Content-Type': 'text/plain',\n },\n query: {\n ...(options?.lockHandle\n ? { lockHandle: options.lockHandle }\n : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n },\n ),\n // Shorthand accessors for each include type\n ...Object.fromEntries(\n includes.map((includeType) => [\n includeType,\n createIncludeOperations(basePath, includeType, nameTransform),\n ]),\n ),\n },\n }\n : {}),\n } as CrudContract<S, Sources, Includes>;\n}\n\n/**\n * Shorthand alias for crud()\n *\n * @example\n * ```ts\n * export const classesContract = repo('/sap/bc/adt/oo/classes', classes, 'application/vnd.sap.adt.oo.classes.v4+xml');\n * ```\n */\nexport function repo<S extends Serializable<unknown>>(\n basePath: string,\n schema: S,\n contentType: string,\n nameTransform?: (name: string) => string,\n accept?: string,\n): CrudContract<S> {\n return crud({ basePath, schema, contentType, accept, nameTransform });\n}\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/attribute\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const attribute = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/attribute{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/attribute', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/target\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const target = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/target{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/target', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/ctsproject\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const ctsproject = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/ctsproject{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/ctsproject', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/object\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const object = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/object/{field}{?maxItemCount}{&name}\n */\n get: (field: string, params?: { maxItemCount?: number; name?: string }) =>\n http.get(`/sap/bc/adt/cts/transportrequests/valuehelp/object/${field}`, {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp\n */\n\nimport { attribute } from './attribute';\nimport { target } from './target';\nimport { ctsproject } from './ctsproject';\nimport { object } from './object';\n\nexport const valuehelp = {\n attribute,\n target,\n ctsproject,\n object,\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/reference\n * @source transportmanagementref.json\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const reference = {\n get: () =>\n http.get('/sap/bc/adt/cts/transportrequests/reference', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration/configurations\n * @schema configurations.xsd, configuration.xsd\n */\n\nimport { http, contract } from '../../../../base';\nimport {\n configurations as configurationsSchema,\n configuration as configurationSchema,\n} from '../../../../schemas';\n\nexport const configurations = contract({\n /** GET list of search configurations */\n get: () =>\n http.get(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations',\n {\n responses: { 200: configurationsSchema },\n headers: { Accept: 'application/vnd.sap.adt.configurations.v1+xml' },\n },\n ),\n\n /** GET a specific configuration by ID */\n getById: (_configId: string) =>\n http.get(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations/${configId}',\n {\n responses: { 200: configurationSchema },\n headers: { Accept: 'application/vnd.sap.adt.configuration.v1+xml' },\n },\n ),\n\n /** PUT update a specific configuration by ID - body type inferred from schema\n * Note: If-Match header is automatically added by the adapter from cached ETag\n */\n put: (_configId: string) =>\n http.put(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations/${configId}',\n {\n responses: { 200: configurationSchema },\n headers: {\n 'Content-Type': 'application/vnd.sap.adt.configuration.v1+xml',\n Accept: 'application/vnd.sap.adt.configuration.v1+xml',\n },\n body: configurationSchema, // Body type inferred from schema - becomes second parameter!\n },\n ),\n});\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration/metadata\n * @schema configuration.xsd\n */\n\nimport { http, contract } from '../../../../base';\nimport { configuration } from '../../../../schemas';\n\nexport const metadata = contract({\n /** GET default search configuration metadata */\n get: () =>\n http.get('/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata', {\n responses: { 200: configuration },\n headers: {\n Accept: 'application/vnd.sap.adt.configuration.metadata.v1+xml',\n },\n }),\n});\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration\n */\n\nimport { configurations } from './configurations';\nimport { metadata } from './metadata';\n\nexport const searchconfiguration = {\n configurations,\n metadata,\n};\n","import type { Serializable } from '../../../base';\nimport { transportmanagment, type InferTypedSchema } from '../../../schemas';\n\nexport interface ChangeOwnerBody {\n root: {\n number: string;\n targetuser: string;\n useraction: 'changeowner';\n };\n}\n\ntype TransportManagementBody = InferTypedSchema<typeof transportmanagment>;\n\ntype ChangeOwnerRoot = ChangeOwnerBody['root'];\n\nfunction isChangeOwnerRoot(root: unknown): root is ChangeOwnerRoot {\n if (typeof root !== 'object' || root === null) return false;\n const { useraction, number, targetuser } = root as Record<string, unknown>;\n return (\n useraction === 'changeowner' &&\n typeof number === 'string' &&\n number.length > 0 &&\n typeof targetuser === 'string' &&\n targetuser.length > 0\n );\n}\n\n/**\n * Narrow request schema for the CTS change-owner action.\n *\n * SAP models these attributes on the broader transport-management root. This\n * wrapper keeps the call-site body narrow while delegating XML parsing and\n * serialization to that generated SAP schema.\n */\nexport const changeOwnerBodySchema: Serializable<ChangeOwnerBody> = {\n _infer: undefined as unknown as ChangeOwnerBody,\n parse: (raw: string): ChangeOwnerBody => {\n const parsed = transportmanagment.parse(raw);\n const root = parsed?.root;\n if (!isChangeOwnerRoot(root)) {\n throw new Error('Invalid CTS change-owner body');\n }\n return {\n root: {\n number: root.number,\n targetuser: root.targetuser,\n useraction: 'changeowner',\n },\n };\n },\n build: (body: ChangeOwnerBody): string =>\n transportmanagment.build(body as unknown as TransportManagementBody),\n};\n","import type { Serializable } from '../../../base';\nimport { transportmanagment, type InferTypedSchema } from '../../../schemas';\n\nexport interface AddTaskBody {\n root: {\n targetuser: string;\n };\n}\n\ntype TransportManagementBody = InferTypedSchema<typeof transportmanagment>;\n\n/** Narrow body used by SAP's hypermedia `newtask` relation. */\nexport const addTaskBodySchema: Serializable<AddTaskBody> = {\n _infer: undefined as unknown as AddTaskBody,\n parse: (raw: string): AddTaskBody => {\n const parsed = transportmanagment.parse(raw);\n const root = parsed?.root;\n if (!root || !root.targetuser) {\n throw new Error('Invalid CTS add-task body');\n }\n return { root: { targetuser: root.targetuser } };\n },\n build: (body: AddTaskBody): string =>\n transportmanagment.build(body as unknown as TransportManagementBody),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests - user-action body endpoints\n *\n * SAP ADT uses distinct lifecycle endpoints for release, changeowner, and\n * newrequest and newtask actions. This file exposes typed contracts for them.\n *\n * release → POST /{trkorr}/newreleasejobs (no body)\n * changeowner → PUT /{trkorr} (requires tm:number and tm:targetuser)\n * newtask → POST /{trkorr}/tasks (requires tm:targetuser)\n * newrequest → POST / (creates a new transport request)\n */\n\nimport { http } from '../../../base';\nimport {\n transportUseraction,\n transportmanagment,\n transportmanagmentSingle,\n} from '../../../schemas';\nimport { changeOwnerBodySchema } from './change-owner-schema';\nimport { addTaskBodySchema } from './add-task-schema';\n\nexport { changeOwnerBodySchema } from './change-owner-schema';\nexport type { ChangeOwnerBody } from './change-owner-schema';\nexport { addTaskBodySchema } from './add-task-schema';\nexport type { AddTaskBody } from './add-task-schema';\n\n/** Options for {@link useraction.reassign} */\nexport interface ReassignOptions {\n /** SAP user who should become the new owner */\n targetUser: string;\n /** Cascade the change to all modifiable tasks (default: false) */\n recursive?: boolean;\n}\n\nexport interface AddTaskOptions {\n /** SAP user who should own the new task. */\n owner: string;\n}\n\n/** Options for {@link useraction.create} (useraction=newrequest) */\nexport interface CreateRequestOptions {\n /** Transport short description */\n description: string;\n /** Transport type (default: K = workbench) */\n type?: string;\n /** Transport target system (default: LOCAL) */\n target?: string;\n /** CTS project (optional) */\n project?: string;\n /** SAP user who should own the created request / task */\n owner: string;\n}\n\nconst CONTENT_TYPE = 'application/vnd.sap.adt.transportorganizer.v1+xml';\n\nexport const useraction = {\n /**\n * Start and synchronously report a transport/task release job.\n */\n release: (trkorr: string) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}/newreleasejobs`, {\n responses: { 200: transportmanagment },\n headers: { Accept: CONTENT_TYPE },\n }),\n\n /**\n * PUT /{trkorr} with useraction=\"changeowner\".\n */\n reassign: (trkorr: string, _options: ReassignOptions) =>\n http.put(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: changeOwnerBodySchema,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n\n /** Create a modifiable task below an existing request. */\n addTask: (trkorr: string, _options: AddTaskOptions) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}/tasks`, {\n body: addTaskBodySchema,\n responses: { 200: transportmanagment },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n\n /**\n * POST / with useraction=\"newrequest\"\n *\n * Creates a brand-new transport request. Body carries the nested\n * tm:request / tm:task with desc / type / target / owner.\n */\n create: (_options: CreateRequestOptions) =>\n http.post('/sap/bc/adt/cts/transportrequests', {\n body: transportUseraction,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n};\n\nexport type UseractionContract = typeof useraction;\n","/**\n * /sap/bc/adt/cts/transportrequests\n * @source transportmanagement.json\n */\n\nimport { http } from '../../../base';\nimport {\n transportmanagment,\n transportmanagmentSingle,\n transportmanagmentCreate,\n type InferTypedSchema,\n} from '../../../schemas';\nimport { valuehelp } from './valuehelp';\nimport { reference } from './reference';\nimport { searchconfiguration } from './searchconfiguration';\nimport { useraction } from './useraction';\n\nexport { useraction, changeOwnerBodySchema } from './useraction';\nexport type {\n UseractionContract,\n ReassignOptions,\n CreateRequestOptions,\n ChangeOwnerBody,\n} from './useraction';\n\n/**\n * Transport response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for transport request data.\n * Inferred from the typed schema.\n */\nexport type TransportResponse = InferTypedSchema<\n typeof transportmanagmentSingle\n>;\n\n/** Re-export schema for consumers that need direct parsing */\nexport const transportrequests = {\n /** GET / - List transports */\n list: (params?: { targets?: string; configUri?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests', {\n query: params,\n responses: { 200: transportmanagment },\n headers: { Accept: '*/*' },\n }),\n\n /** GET /{trkorr} - Get single transport */\n get: (trkorr: string) =>\n http.get(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n responses: { 200: transportmanagmentSingle },\n headers: { Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml' },\n }),\n\n /** POST / - Create new transport (response has root/request structure like single) */\n create: () =>\n http.post('/sap/bc/adt/cts/transportrequests', {\n body: transportmanagmentCreate,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** POST /{trkorr} - Action on transport (release, etc.) */\n post: (trkorr: string) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: transportmanagment,\n responses: { 200: transportmanagment },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** PUT /{trkorr} - Update transport */\n put: (trkorr: string) =>\n http.put(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: transportmanagment,\n responses: { 200: transportmanagment },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** DELETE /{trkorr} - Delete transport */\n delete: (trkorr: string) =>\n http.delete(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n responses: { 204: undefined },\n }),\n\n reference,\n valuehelp,\n searchconfiguration,\n useraction,\n};\nexport { transportmanagmentSingle } from '../../../schemas';\n","/**\n * /sap/bc/adt/cts/transports/**\n * ADT CTS Transports Contract\n *\n * GET with _action=FIND - Search transports (undocumented but works)\n *\n * Uses manual ts-xsd schema from adt-schemas for proper XML parsing.\n */\n\nimport { http } from '@abapify/speci/rest';\nimport { transportfind } from '../../schemas';\n\n// ============================================================================\n// URL Parameter Enums\n// ============================================================================\n\n/**\n * Transport function codes (TRFUNCTION field)\n */\nexport const TransportFunction = {\n /** Workbench request - development objects */\n WORKBENCH: 'K',\n /** Customizing request - configuration */\n CUSTOMIZING: 'W',\n /** Transport of copies */\n TRANSPORT_OF_COPIES: 'T',\n /** Development/correction task */\n DEVELOPMENT_CORRECTION: 'S',\n /** Repair task */\n REPAIR: 'R',\n /** Unclassified task */\n UNCLASSIFIED: 'X',\n /** Customizing task */\n CUSTOMIZING_TASK: 'Q',\n /** Wildcard - all types */\n ALL: '*',\n} as const;\n\nexport type TransportFunctionCode =\n (typeof TransportFunction)[keyof typeof TransportFunction];\n\n/**\n * Transport status codes (TRSTATUS field) - for response parsing\n */\nexport const TransportStatus = {\n /** Modifiable - can be edited */\n MODIFIABLE: 'D',\n /** Release started - in progress */\n RELEASE_STARTED: 'O',\n /** Release in preparation */\n RELEASE_IN_PREPARATION: 'P',\n /** Released - locked, cannot be edited */\n RELEASED: 'R',\n /** Locked */\n LOCKED: 'L',\n} as const;\n\nexport type TransportStatusCode =\n (typeof TransportStatus)[keyof typeof TransportStatus];\n\n// ============================================================================\n// URL Parameters Interface\n// ============================================================================\n\n/**\n * Query parameters for transport find endpoint\n *\n * Note: This is the basic find endpoint (/sap/bc/adt/cts/transports?_action=FIND)\n * which only supports user and trfunction filters. For advanced filtering\n * (status, date range, etc.), use the discovery-based search endpoint.\n */\nexport interface TransportFindParams {\n /** Action - must be 'FIND' for search */\n _action: 'FIND';\n /** Owner filter - username or '*' for all */\n user: string;\n /** Transport function filter - use TransportFunction enum or '*' */\n trfunction: TransportFunctionCode | string;\n}\n\n// ============================================================================\n// Response Schema\n// ============================================================================\n\n/**\n * Single transport header from the response\n */\nexport interface CtsReqHeader {\n /** Transport number (e.g., TRLK921630) */\n TRKORR: string;\n /** Transport function code */\n TRFUNCTION: string;\n /** Transport status code */\n TRSTATUS: string;\n /** Target system (e.g., /SOD_ALL/) */\n TARSYSTEM: string;\n /** Owner username */\n AS4USER: string;\n /** Creation/modification date (YYYY-MM-DD) */\n AS4DATE: string;\n /** Creation/modification time (HH:MM:SS) */\n AS4TIME: string;\n /** Description text */\n AS4TEXT: string;\n /** Client number */\n CLIENT: string;\n /** Repository ID (usually empty) */\n REPOID?: string;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Normalize response to always return array of headers\n * Works with the parsed transportfind schema response\n */\nexport function normalizeTransportFindResponse(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response: any,\n): CtsReqHeader[] {\n // ts-xsd parses root element content directly: { version, values: { DATA: { CTS_REQ_HEADER: [...] } } }\n const headers = response?.values?.DATA?.CTS_REQ_HEADER;\n if (!headers) return [];\n return Array.isArray(headers) ? headers : [headers];\n}\n\n// ============================================================================\n// Contract\n// ============================================================================\n\nexport const transports = {\n /**\n * Search transports with filters\n *\n * GET /sap/bc/adt/cts/transports?_action=FIND&user=X&trfunction=*\n *\n * @example\n * // Find all modifiable workbench requests for current user\n * const result = await client.cts.transports.find({\n * _action: 'FIND',\n * user: 'PPLENKOV',\n * trfunction: '*',\n * });\n *\n * @example\n * // Find with status filter\n * const result = await client.cts.transports.find({\n * _action: 'FIND',\n * user: '*',\n * trfunction: 'K',\n * requestStatus: 'D', // Modifiable only\n * });\n */\n find: (params: TransportFindParams) =>\n http.get('/sap/bc/adt/cts/transports', {\n query: params,\n responses: { 200: transportfind },\n headers: { Accept: '*/*' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportchecks\n * @source transportchecks.json\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const transportchecks = {\n /**\n * GET /sap/bc/adt/cts/transportchecks\n */\n get: () =>\n http.get('/sap/bc/adt/cts/transportchecks', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * ADT CTS (Change and Transport System) Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/cts/transportrequests → cts.transportrequests\n * - /sap/bc/adt/cts/transports → cts.transports\n * - /sap/bc/adt/cts/transportchecks → cts.transportchecks\n *\n * Based on collections in: e2e/adt-codegen/generated/collections/sap/bc/adt/cts/\n */\n\nimport { transportrequests } from './transportrequests';\nimport { transports } from './transports';\nimport { transportchecks } from './transportchecks';\n\n// Re-export all types and helpers\nexport * from './transports';\nexport {\n type TransportResponse,\n transportmanagmentSingle,\n} from './transportrequests';\n\n// Explicit type to avoid TS7056 \"exceeds maximum length\" error\nexport const ctsContract: {\n transportrequests: typeof transportrequests;\n transports: typeof transports;\n transportchecks: typeof transportchecks;\n} = {\n transportrequests,\n transports,\n transportchecks,\n};\n\nexport type CtsContract = typeof ctsContract;\n","/**\n * ATC worklist\n *\n * Endpoint: /sap/bc/adt/atc/worklists\n * Category: atcworklists\n *\n * @generated - DO NOT EDIT MANUALLY\n */\n\nimport { http, contract } from '#base';\nimport { atcworklist } from '#schemas';\n\nexport const worklistsContract = contract({\n /**\n * GET ATC worklist\n */\n get: (\n worklistId: string,\n params?: {\n timestamp?: string;\n usedObjectSet?: string;\n includeExemptedFindings?: string;\n },\n ) =>\n http.get(`/sap/bc/adt/atc/worklists/${worklistId}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n /**\n * GET ATC worklist\n */\n objectset: (\n worklistId: string,\n objectSetName: string,\n params?: { timestamp?: string; includeExemptedFindings?: string },\n ) =>\n http.get(`/sap/bc/adt/atc/worklists/${worklistId}/${objectSetName}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n});\n\nexport type WorklistsContract = typeof worklistsContract;\n","/**\n * ATC results\n *\n * Endpoint: /sap/bc/adt/atc/results\n * Category: atcresults\n *\n * @generated - DO NOT EDIT MANUALLY\n */\n\nimport { http, contract } from '#base';\nimport { atcworklist } from '#schemas';\n\nexport const resultsContract = contract({\n /**\n * GET ATC results\n */\n active: (params?: { activeResult?: string; contactPerson?: string }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n activeforsysid: (params?: {\n activeResult?: string;\n contactPerson?: string;\n sysId?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n user: (params?: {\n createdBy?: string;\n ageMin?: string;\n ageMax?: string;\n contactPerson?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n central: (params?: {\n centralResult?: string;\n createdBy?: string;\n contactPerson?: string;\n ageMin?: string;\n ageMax?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n centralforsysid: (params?: {\n centralResult?: string;\n createdBy?: string;\n contactPerson?: string;\n ageMin?: string;\n ageMax?: string;\n sysId?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n displayid: (\n displayId: string,\n params?: {\n activeResult?: string;\n contactPerson?: string;\n includeExemptedFindings?: string;\n },\n ) =>\n http.get(`/sap/bc/adt/atc/results/${displayId}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n});\n\nexport type ResultsContract = typeof resultsContract;\n","/**\n * ADT ATC (ABAP Test Cockpit) Contracts\n *\n * Combines generated contracts with manually-defined endpoints not in discovery.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/atc/customizing → atc.customizing (manual - not in discovery)\n * - /sap/bc/adt/atc/runs → atc.runs (manual - POST with body)\n * - /sap/bc/adt/atc/results → atc.results (generated)\n * - /sap/bc/adt/atc/worklists → atc.worklists (generated + manual create)\n */\n\nimport { http, contract } from '../../base';\nimport { atcworklist, atc, atcRun } from '../../schemas';\n\n// Re-export generated contracts\nexport { worklistsContract } from '../../generated/adt/sap/bc/adt/atc/worklists';\nexport { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results';\n\n/**\n * /sap/bc/adt/atc/customizing\n * Get ATC customizing settings (check variants, exemption reasons, etc.)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\nconst customizing = contract({\n /**\n * GET /sap/bc/adt/atc/customizing\n */\n get: () =>\n http.get('/sap/bc/adt/atc/customizing', {\n responses: { 200: atc },\n headers: { Accept: 'application/xml' },\n }),\n});\n\n/**\n * /sap/bc/adt/atc/runs\n *\n * NOTE: POST endpoint with body - not in SAP discovery\n * @source atcruns.json\n */\nconst runs = contract({\n /**\n * POST /sap/bc/adt/atc/runs{?worklistId,clientWait}\n * Run ATC checks on objects specified in the request body\n */\n post: (params?: { worklistId?: string; clientWait?: boolean }) =>\n http.post('/sap/bc/adt/atc/runs', {\n query: params,\n body: atcRun,\n responses: { 200: atcworklist },\n headers: {\n Accept: 'application/xml',\n 'Content-Type': 'application/xml',\n },\n }),\n});\n\n/**\n * /sap/bc/adt/atc/worklists - Extended\n *\n * Adds POST (create) endpoint not in generated contract\n */\nconst worklistsExtended = contract({\n /**\n * POST /sap/bc/adt/atc/worklists{?checkVariant}\n * Create a new ATC worklist\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n create: (params?: { checkVariant?: string }) =>\n http.post('/sap/bc/adt/atc/worklists', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n});\n\n// Import generated contracts for combined export\nimport { worklistsContract } from '../../generated/adt/sap/bc/adt/atc/worklists';\nimport { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results';\n\n/**\n * Combined ATC contract\n *\n * Uses generated contracts where available, adds manual endpoints for:\n * - customizing (not in discovery)\n * - runs POST (not in discovery)\n * - worklists.create (not in discovery)\n */\nexport const atcContract = {\n customizing,\n runs,\n results: resultsContract,\n worklists: {\n ...worklistsContract,\n ...worklistsExtended,\n },\n};\n\n/** Type alias for the ATC contract */\nexport type AtcContract = typeof atcContract;\n","/**\n * ADT AUnit (ABAP Unit) Contracts\n *\n * Manually-defined endpoints for ABAP Unit test runs.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/abapunit/testruns → aunit.testruns (POST with body)\n */\n\nimport { http, contract } from '../../base';\nimport { aunitRun, aunitResult } from '../../schemas';\n\n/**\n * /sap/bc/adt/abapunit/testruns\n *\n * Run ABAP Unit tests on objects specified in the request body.\n *\n * NOTE: Not in SAP discovery - manually defined\n */\nconst testruns = contract({\n /**\n * POST /sap/bc/adt/abapunit/testruns\n * Execute ABAP Unit test run with a runConfiguration body\n *\n * @returns runResult with programs, test classes, methods, and alerts\n */\n post: () =>\n http.post('/sap/bc/adt/abapunit/testruns', {\n body: aunitRun,\n responses: { 200: aunitResult },\n headers: {\n Accept: 'application/vnd.sap.adt.abapunit.testruns.result.v2+xml',\n 'Content-Type':\n 'application/vnd.sap.adt.abapunit.testruns.config.v4+xml',\n },\n }),\n});\n\n/**\n * Combined AUnit contract\n */\nexport const aunitContract = {\n testruns,\n};\n\nexport type AunitContract = typeof aunitContract;\n\nexport { extractCoverageMeasurementId } from './coverage-link';\nexport type {\n CoverageLinkCandidate,\n CoverageLinkSource,\n} from './coverage-link';\n","/**\n * ADT OO Classes Contract\n *\n * Endpoint: /sap/bc/adt/oo/classes\n * Full CRUD operations for ABAP classes including source code management.\n *\n * Uses the crud() helper with sources and includes options for complete\n * class operations including metadata, source code, and class includes.\n */\n\nimport { crud } from '../../base';\nimport { classes as classesSchema, type InferTypedSchema } from '../../schemas';\n\n/**\n * Include types for ABAP classes\n * Based on AbapClassIncludeType from SAP XSD schema\n */\nexport type ClassIncludeType =\n | 'main'\n | 'definitions'\n | 'implementations'\n | 'macros'\n | 'testclasses'\n | 'localtypes';\n\n/**\n * Class response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for class metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type ClassResponse = InferTypedSchema<typeof classesSchema>;\n\n/**\n * /sap/bc/adt/oo/classes\n * Full CRUD operations for ABAP classes\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n * - Class includes: includes.{definitions,implementations,macros,testclasses,localtypes}.get/put\n */\nexport const classesContract = crud({\n basePath: '/sap/bc/adt/oo/classes',\n schema: classesSchema,\n contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n accept:\n 'application/vnd.sap.adt.oo.classes.v4+xml, application/vnd.sap.adt.oo.classes.v3+xml, application/vnd.sap.adt.oo.classes.v2+xml, application/vnd.sap.adt.oo.classes.v1+xml',\n sources: ['main'] as const,\n includes: [\n 'definitions',\n 'implementations',\n 'macros',\n 'testclasses',\n 'localtypes',\n ] as const,\n});\n\n/** Type alias for the classes contract */\nexport type ClassesContract = typeof classesContract;\n","/**\n * ADT OO Interfaces Contract\n *\n * Endpoint: /sap/bc/adt/oo/interfaces\n * Full CRUD operations for ABAP interfaces including source code management.\n *\n * Uses the crud() helper with sources option for complete\n * interface operations including metadata and source code.\n */\n\nimport { crud } from '../../base';\nimport {\n interfaces as interfacesSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Interface response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for interface metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type InterfaceResponse = InferTypedSchema<typeof interfacesSchema>;\n\n/**\n * /sap/bc/adt/oo/interfaces\n * Full CRUD operations for ABAP interfaces\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const interfacesContract = crud({\n basePath: '/sap/bc/adt/oo/interfaces',\n schema: interfacesSchema,\n contentType: 'application/vnd.sap.adt.oo.interfaces.v5+xml',\n accept:\n 'application/vnd.sap.adt.oo.interfaces.v5+xml, application/vnd.sap.adt.oo.interfaces.v4+xml, application/vnd.sap.adt.oo.interfaces.v3+xml, application/vnd.sap.adt.oo.interfaces.v2+xml, application/vnd.sap.adt.oo.interfaces+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the interfaces contract */\nexport type InterfacesContract = typeof interfacesContract;\n","/**\n * ADT OO Classrun Contract\n *\n * Endpoint: /sap/bc/adt/oo/classrun\n * Execute console application classes implementing IF_OO_ADT_CLASSRUN.\n */\n\nimport { http, contract } from '../../base';\n\n/**\n * /sap/bc/adt/oo/classrun\n * Execute console application classes (IF_OO_ADT_CLASSRUN)\n */\nexport const classrunContract = contract({\n /**\n * POST /sap/bc/adt/oo/classrun/{classname}{?profilerId}\n * Execute a class implementing IF_OO_ADT_CLASSRUN\n */\n post: (classname: string, params?: { profilerId?: string }) =>\n http.post(`/sap/bc/adt/oo/classrun/${classname.toLowerCase()}`, {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n});\n\nexport type ClassrunContract = typeof classrunContract;\n","/**\n * ADT OO (Object-Oriented) Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/oo/classes → oo.classes\n * - /sap/bc/adt/oo/interfaces → oo.interfaces\n * - /sap/bc/adt/oo/classrun → oo.classrun\n *\n * Supports full CRUD operations for ABAP classes and interfaces,\n * including source code management for class includes.\n */\n\n// Re-export subcontracts\nexport {\n classesContract,\n type ClassesContract,\n type ClassIncludeType,\n type ClassResponse,\n} from './classes';\nexport {\n interfacesContract,\n type InterfacesContract,\n type InterfaceResponse,\n} from './interfaces';\nexport { classrunContract, type ClassrunContract } from './classrun';\n\n// Import for aggregated contract\nimport { classesContract } from './classes';\nimport { interfacesContract } from './interfaces';\nimport { classrunContract } from './classrun';\n\n/**\n * OO Contract type definition\n * Explicit type to avoid TypeScript inference limits\n */\nexport interface OoContract {\n classes: typeof classesContract;\n interfaces: typeof interfacesContract;\n classrun: typeof classrunContract;\n}\n\nexport const ooContract: OoContract = {\n classes: classesContract,\n interfaces: interfacesContract,\n classrun: classrunContract,\n};\n","/**\n * ADT Discovery Contract\n *\n * Endpoint: GET /sap/bc/adt/discovery\n * Returns AtomPub service document describing available ADT services.\n */\n\nimport { http } from '../../base';\nimport { discovery, type InferTypedSchema } from '../../schemas';\n\n/**\n * Discovery response type - inferred from XSD schema\n */\nexport type DiscoveryResponse = InferTypedSchema<typeof discovery>;\n\nexport const discoveryContract = {\n /**\n * Get Discovery Information\n *\n * Returns the ADT service discovery document in AtomPub format.\n * This document describes all available ADT services, workspaces, and collections.\n *\n * @endpoint GET /sap/bc/adt/discovery\n * @returns AtomPub service document with workspace and collection information\n */\n getDiscovery: () =>\n http.get('/sap/bc/adt/discovery', {\n responses: { 200: discovery },\n headers: { Accept: 'application/atomsvc+xml' },\n }),\n};\n\nexport type DiscoveryContract = typeof discoveryContract;\n","/**\n * /sap/bc/adt/packages/**\n * ADT Packages Contract\n *\n * Full CRUD operations for ABAP packages (DEVC).\n *\n * Uses the crud() helper with packagesV1 schema.\n * Package names are case-sensitive (uppercase) — no lowercase transform.\n *\n * @example\n * const pkg = await client.adt.packages.get('ZABAPGIT_EXAMPLES');\n * console.log(pkg.package?.name, pkg.package?.attributes?.packageType);\n *\n * // Create a new package\n * await client.adt.packages.post({ corrNr: 'DEVK900001' });\n */\n\nimport { contract, http } from '../../base';\nimport { crud } from '../../helpers/crud';\nimport { packagesV1 } from '../../schemas';\n\nimport type { InferTypedSchema } from '../../schemas';\n\n/**\n * Package response type - inferred from packagesV1 schema\n * Use this type for package data throughout the codebase\n */\nexport type Package = InferTypedSchema<typeof packagesV1>;\n\nconst packageCrudContract = crud({\n basePath: '/sap/bc/adt/packages',\n schema: packagesV1,\n contentType: 'application/vnd.sap.adt.packages.v2+xml',\n accept:\n 'application/vnd.sap.adt.packages.v2+xml, application/vnd.sap.adt.packages.v1+xml',\n nameTransform: (n) => encodeURIComponent(n), // preserve case (packages are uppercase)\n});\n\n/**\n * Typed package operations which are not CRUD-shaped. The discovery document\n * advertises this as `/sap/bc/adt/packages/$tree{?packagename,type}`.\n */\nexport const packagesContract = contract({\n ...packageCrudContract,\n tree: (params: { packagename: string; type: 'sub' | 'super' }) =>\n http.get('/sap/bc/adt/packages/$tree', {\n query: params,\n responses: { 200: packagesV1 },\n headers: { Accept: 'application/vnd.sap.adt.packages.v2+xml' },\n }),\n});\n\nexport type PackagesContract = typeof packagesContract;\nexport type PackagesSchema = typeof packagesV1;\n","/**\n * SAP ADT Sessions Contract\n *\n * HTTP session management and CSRF token initialization.\n * Path: /sap/bc/adt/core/http/sessions\n */\n\nimport { http as httpMethod } from '../../../base';\nimport { http as httpSchema } from '../../../schemas';\n\nexport const sessionsContract = {\n /**\n * Get or create an HTTP session\n * Also initializes CSRF token for subsequent requests\n *\n * Uses x-sap-security-session: create to establish a proper security session.\n * All subsequent operations should use x-sap-security-session: use to stay\n * within the same security session (required for lock/unlock).\n *\n * @returns Session information with CSRF token and links\n */\n getSession: () =>\n httpMethod.get('/sap/bc/adt/core/http/sessions', {\n responses: {\n 200: httpSchema,\n },\n headers: {\n Accept: 'application/vnd.sap.adt.core.http.session.v3+xml',\n 'x-csrf-token': 'Fetch',\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'create',\n },\n }),\n};\n\nexport type SessionsContract = typeof sessionsContract;\n","/**\n * SAP ADT System Information Contract\n *\n * Returns system information including SAP release, client, user details.\n * Path: /sap/bc/adt/core/http/systeminformation\n */\n\nimport { http, contract } from '../../../base';\nimport { systeminformation } from '../../../schemas';\n\nexport const systeminformationContract = contract({\n /**\n * Get system information\n *\n * @returns System information (systemID, client, userName, etc.)\n */\n getSystemInfo: () =>\n http.get('/sap/bc/adt/core/http/systeminformation', {\n responses: {\n 200: systeminformation,\n },\n headers: {\n Accept: 'application/vnd.sap.adt.core.http.systeminformation.v1+json',\n },\n }),\n});\n\nexport type SystemInformationContract = typeof systeminformationContract;\n","/**\n * Core HTTP Contracts\n */\n\nexport * from './sessions';\nexport * from './systeminformation';\n\nimport { sessionsContract, type SessionsContract } from './sessions';\nimport {\n systeminformationContract,\n type SystemInformationContract,\n} from './systeminformation';\n\nexport interface HttpContract {\n sessions: SessionsContract;\n systeminformation: SystemInformationContract;\n}\n\nexport const httpContract: HttpContract = {\n sessions: sessionsContract,\n systeminformation: systeminformationContract,\n};\n","/**\n * Core Contracts\n */\n\nexport * from './http';\n\nimport { httpContract, type HttpContract } from './http';\n\nexport interface CoreContract {\n http: HttpContract;\n}\n\nexport const coreContract: CoreContract = {\n http: httpContract,\n};\n","/**\n * ADT Repository Information System - Search Contract\n *\n * ABAP object search operations.\n * Path: /sap/bc/adt/repository/informationsystem/search\n */\n\nimport { http } from '../../../base';\nimport { adtcore } from '../../../schemas';\n\nexport const searchContract = {\n /**\n * Quick search for ABAP objects\n *\n * @param query - Search query (supports wildcards like *)\n * @param maxResults - Maximum number of results (default: 50)\n * @param packageName - Filter by package name\n * @param objectType - Filter by object type (e.g., 'CLAS', 'INTF')\n * @returns Object references matching the search query (union of all adtcore element types)\n *\n * @example\n * // Search for classes starting with ZCL\n * const results = await client.repository.informationsystem.search.quickSearch({\n * query: 'zcl*',\n * maxResults: 10\n * });\n *\n * @example\n * // List all objects in a package\n * const results = await client.repository.informationsystem.search.quickSearch({\n * query: '*',\n * packageName: 'ZABAPGIT_EXAMPLES',\n * maxResults: 200\n * });\n */\n quickSearch: (options: {\n query: string;\n maxResults?: number;\n packageName?: string;\n objectType?: string;\n }) =>\n http.get('/sap/bc/adt/repository/informationsystem/search', {\n query: {\n operation: 'quickSearch',\n query: options.query,\n maxResults: options.maxResults || 50,\n ...(options.packageName && { packageName: options.packageName }),\n ...(options.objectType && { objectType: options.objectType }),\n },\n responses: {\n 200: adtcore,\n },\n headers: {\n Accept: 'application/xml',\n },\n }),\n};\n\nexport type SearchContract = typeof searchContract;\n","/**\n * ADT Repository Information System – Usage References (Where-Used List)\n *\n * The SAP ADT \"where-used\" service is NOT a simple GET — it is a two-step\n * POST flow discovered via sapcli (`sap/adt/whereused.py`) and confirmed\n * against a real TRL ABAP trial system:\n *\n * 1. POST /sap/bc/adt/repository/informationsystem/usageReferences/scope\n * + query: uri=<objectUri>&version=active\n * + Content-Type: application/vnd.sap.adt.repository.usagereferences.scope.request.v1+xml\n * + Accept: application/vnd.sap.adt.repository.usagereferences.scope.response.v1+xml\n * + body: <usagereferences:usageScopeRequest>…</>\n * → returns a <usagereferences:usageScopeResult> containing the\n * backend-chosen object types, grade flags and an opaque `payload`\n * blob (gzip-encoded) that must be echoed back in step 2.\n *\n * 2. POST /sap/bc/adt/repository/informationsystem/usageReferences\n * + query: uri=<objectUri>&version=active\n * + Content-Type: application/vnd.sap.adt.repository.usagereferences.request.v1+xml\n * + Accept: application/vnd.sap.adt.repository.usagereferences.result.v1+xml\n * + body: <usagereferences:usageReferenceRequest>\n * <usagereferences:affectedObjects/>\n * <usagereferences:scope>…copy from step 1 result…</>\n * </>\n * → returns a <usagereferences:usageReferenceResult> with all hits.\n *\n * Body/response are passed as plain-text XML because the usagereferences\n * namespace is not yet represented as a typed `adt-schemas` XSD. Callers\n * parse the response themselves (see `find-references` MCP tool).\n */\n\nimport { http, contract } from '../../../base';\nimport { textPlain } from '../../../helpers/text-schema';\n\n/** Vendor MIME types — must match real SAP verbatim. */\nexport const SCOPE_REQUEST_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.scope.request.v1+xml';\nexport const SCOPE_RESPONSE_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.scope.response.v1+xml';\nexport const SEARCH_REQUEST_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.request.v1+xml';\nexport const SEARCH_RESPONSE_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.result.v1+xml';\n\n// XML namespace URI per SAP ADT / W3C XML Namespaces spec — an opaque\n// identifier, not a network endpoint. Must match SAP wire format exactly.\n// https://www.w3.org/TR/xml-names/\nexport const USAGEREFS_NAMESPACE = 'http://www.sap.com/adt/ris/usageReferences'; // NOSONAR: XML namespace identifier (not a URL)\n\n/**\n * Build the XML body for the step-1 scope request. sapcli always sends\n * an empty `<affectedObjects/>`; the backend doesn't inspect its content\n * and populates the result from the URI query parameter.\n */\nexport function buildUsageScopeRequestXml(): string {\n return (\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' +\n `<usagereferences:usageScopeRequest xmlns:usagereferences=\"${USAGEREFS_NAMESPACE}\">\\n` +\n ' <usagereferences:affectedObjects/>\\n' +\n '</usagereferences:usageScopeRequest>'\n );\n}\n\n/**\n * Build the XML body for the step-2 search request by wrapping the raw\n * step-1 scope-result XML as a `<usagereferences:scope>` element inside\n * a `<usageReferenceRequest>`.\n *\n * We deliberately do string surgery instead of DOM manipulation because\n * the `payload` element contains base64-gzip content we must not perturb.\n */\nexport function buildUsageReferenceRequestXml(scopeResultXml: string): string {\n // Strip the XML prolog and outer usageScopeResult tags, re-tag as <scope>.\n // Use indexOf-based slicing for the prolog (linear, no regex backtracking).\n let noProlog = scopeResultXml;\n if (noProlog.startsWith('<?xml')) {\n const prologEnd = noProlog.indexOf('?>');\n if (prologEnd !== -1) {\n noProlog = noProlog.slice(prologEnd + 2).replace(/^\\s+/, '');\n }\n }\n const scopeElement = noProlog.replaceAll(\n /usagereferences:usageScopeResult/g,\n 'usagereferences:scope',\n );\n\n return (\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' +\n `<usagereferences:usageReferenceRequest xmlns:usagereferences=\"${USAGEREFS_NAMESPACE}\">\\n` +\n ' <usagereferences:affectedObjects/>\\n' +\n ` ${scopeElement}\\n` +\n '</usagereferences:usageReferenceRequest>'\n );\n}\n\n/**\n * Step 1: fetch the default scope for a given object URI.\n *\n * Typed body/response are plain XML strings — the contract provides\n * URL/header/method shape, callers provide the marshalled body via\n * {@link buildUsageScopeRequestXml}.\n */\nconst scope = contract({\n post: (params: { uri: string; version?: string }) =>\n http.post(\n '/sap/bc/adt/repository/informationsystem/usageReferences/scope',\n {\n query: {\n uri: params.uri,\n version: params.version ?? 'active',\n },\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: SCOPE_RESPONSE_MIME,\n 'Content-Type': SCOPE_REQUEST_MIME,\n },\n },\n ),\n});\n\n/**\n * Step 2: execute the where-used search using the scope blob from step 1.\n */\nconst search = contract({\n post: (params: { uri: string; version?: string }) =>\n http.post('/sap/bc/adt/repository/informationsystem/usageReferences', {\n query: {\n uri: params.uri,\n version: params.version ?? 'active',\n },\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: SEARCH_RESPONSE_MIME,\n 'Content-Type': SEARCH_REQUEST_MIME,\n },\n }),\n});\n\nexport const usageReferencesContract = {\n scope,\n search,\n};\n\nexport type UsageReferencesContract = typeof usageReferencesContract;\n","/**\n * ADT Repository source-history contracts.\n *\n * Both operations follow URIs supplied by SAP ADT responses. They deliberately\n * do not construct version paths from an object URI.\n */\n\nimport { contract, http } from '../../base';\nimport { atomFeed } from '../../schemas';\n\nconst ADT_ORIGIN = 'https://adt.invalid';\nconst ADT_PATH = '/sap/bc/adt';\nconst INVALID_URI_MESSAGE = 'Expected an ADT-relative URI under /sap/bc/adt';\n\n/**\n * Guard an opaque ADT URI supplied by SAP before we turn it into an\n * authenticated request. Other contracts which accept SAP-discovered URIs\n * share this boundary rather than reimplementing a slightly different URL\n * policy.\n */\nexport function assertAdtRelativeUri(uri: string): void {\n let parsed: URL;\n\n try {\n parsed = new URL(uri, ADT_ORIGIN);\n } catch {\n throw new TypeError(INVALID_URI_MESSAGE);\n }\n\n const isRootRelative = uri.startsWith('/') && !uri.startsWith('//');\n const isAdtPath =\n parsed.pathname === ADT_PATH || parsed.pathname.startsWith(`${ADT_PATH}/`);\n\n if (\n uri !== uri.trim() ||\n !isRootRelative ||\n parsed.origin !== ADT_ORIGIN ||\n !isAdtPath ||\n parsed.hash\n ) {\n throw new TypeError(INVALID_URI_MESSAGE);\n }\n}\n\nexport const sourceversionsContract = contract({\n list: (params: { versionsUri: string }) => {\n assertAdtRelativeUri(params.versionsUri);\n\n return http.get(params.versionsUri, {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n });\n },\n\n get: (params: { sourceUri: string }) => {\n assertAdtRelativeUri(params.sourceUri);\n\n return http.get(params.sourceUri, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n });\n },\n});\n\nexport type SourceversionsContract = typeof sourceversionsContract;\n","/**\n * ADT Repository Information System — object properties.\n *\n * SAP supplies the canonical object URI through quick search or object\n * metadata. This endpoint enriches it with generic facets such as package\n * and application component; it does not construct an object-specific URL.\n */\n\nimport { http } from '../../../base';\nimport { objectProperties } from '../../../schemas';\nimport { assertAdtRelativeUri } from '../sourceversions';\n\nexport const OBJECT_PROPERTIES_RESULT_MIME =\n 'application/vnd.sap.adt.repository.objproperties.result.v1+xml';\n\nexport const objectPropertiesContract = {\n values: (params: { uri: string; facets?: string[] }) => {\n assertAdtRelativeUri(params.uri);\n\n const facets = [...new Set(params.facets ?? [])].filter(\n (facet) => facet.trim().length > 0,\n );\n\n return http.get(\n '/sap/bc/adt/repository/informationsystem/objectproperties/values',\n {\n query: {\n uri: params.uri,\n ...(facets.length > 0 ? { facet: facets } : {}),\n },\n responses: { 200: objectProperties },\n headers: { Accept: OBJECT_PROPERTIES_RESULT_MIME },\n },\n );\n },\n};\n\nexport type ObjectPropertiesContract = typeof objectPropertiesContract;\n","/**\n * Repository Information System Contracts\n */\n\nexport * from './search';\nexport * from './usagereferences';\nexport * from './objectproperties';\n\nimport { searchContract, type SearchContract } from './search';\nimport {\n usageReferencesContract,\n type UsageReferencesContract,\n} from './usagereferences';\nimport {\n objectPropertiesContract,\n type ObjectPropertiesContract,\n} from './objectproperties';\n\nexport interface InformationSystemContract {\n search: SearchContract;\n usageReferences: UsageReferencesContract;\n objectProperties: ObjectPropertiesContract;\n}\n\nexport const informationsystemContract: InformationSystemContract = {\n search: searchContract,\n usageReferences: usageReferencesContract,\n objectProperties: objectPropertiesContract,\n};\n","/**\n * ADT Repository – generic Object Structure endpoint.\n *\n * Most typed object contracts (`programs`, `classes`, …) already expose\n * their own `.objectstructure()` method via the CRUD helper. This\n * contract handles the *generic* case used by the workbench outline\n * CLI / MCP surfaces: an arbitrary object URI whose type does not have\n * a dedicated typed contract (e.g. DOMA, DTEL, DEVC, BDEF, SRVD, …).\n *\n * ADT endpoint:\n * GET {objectUri}/objectstructure?version=<active|inactive>\n *\n * The response shape varies wildly between object types, so the\n * returned type is `unknown` — callers handle downstream. Keeping this\n * as a typed contract (instead of a raw `client.fetch()` call) ensures\n * the generic outline path still goes through the contract layer.\n */\n\nimport { http, contract } from '../../base';\n\nexport const objectstructureContract = contract({\n get: (params: { objectUri: string; version?: 'active' | 'inactive' }) =>\n http.get(`${params.objectUri}/objectstructure`, {\n query: {\n ...(params.version ? { version: params.version } : {}),\n },\n responses: { 200: undefined },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type ObjectstructureContract = typeof objectstructureContract;\n","/**\n * Repository Contracts\n */\n\nexport * from './informationsystem';\nexport * from './objectstructure';\nexport * from './sourceversions';\n\nimport {\n informationsystemContract,\n type InformationSystemContract,\n} from './informationsystem';\nimport {\n objectstructureContract,\n type ObjectstructureContract,\n} from './objectstructure';\nimport {\n sourceversionsContract,\n type SourceversionsContract,\n} from './sourceversions';\n\nexport interface RepositoryContract {\n informationsystem: InformationSystemContract;\n objectstructure: ObjectstructureContract;\n sourceversions: SourceversionsContract;\n}\n\nexport const repositoryContract: RepositoryContract = {\n informationsystem: informationsystemContract,\n objectstructure: objectstructureContract,\n sourceversions: sourceversionsContract,\n};\n","/**\n * ADT Programs Contract\n *\n * Endpoint: /sap/bc/adt/programs/programs\n * Full CRUD operations for ABAP programs including source code management.\n */\n\nimport { crud } from '../../base';\nimport { programs, type InferTypedSchema } from '../../schemas';\n\n/**\n * Program response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for program metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type ProgramResponse = InferTypedSchema<typeof programs>;\n\n/**\n * /sap/bc/adt/programs/programs\n * Full CRUD operations for ABAP programs\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const programsContract = crud({\n basePath: '/sap/bc/adt/programs/programs',\n schema: programs,\n contentType: 'application/vnd.sap.adt.programs.programs.v2+xml',\n accept:\n 'application/vnd.sap.adt.programs.programs.v2+xml, application/vnd.sap.adt.programs.programs.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the programs contract */\nexport type ProgramsContract = typeof programsContract;\n","/**\n * ADT Program Includes Contract\n *\n * Endpoint: /sap/bc/adt/programs/includes\n * Full CRUD operations for ABAP program includes (PROG/I) including source\n * code management.\n *\n * Mirrors the shape of `programs.ts` but targets the `/programs/includes`\n * URL space and the `include:abapInclude` XML payload.\n */\n\nimport { crud } from '../../base';\nimport { includes, type InferTypedSchema } from '../../schemas';\n\n/**\n * Include response type - exported for consumers (ADK, MCP, etc.).\n *\n * Uses the pre-generated type from adt-schemas. This is the canonical\n * type for include metadata (wraps `{ abapInclude: ... }`).\n */\nexport type IncludeResponse = InferTypedSchema<typeof includes>;\n\n/**\n * /sap/bc/adt/programs/includes\n * Full CRUD operations for ABAP program includes\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n *\n * Content types follow the same \"v2 preferred, v1 fallback\" pattern SAP\n * uses for includes (observed from real responses; matches sapcli's\n * `sap.adt.programs.Include` OBJTYPE).\n */\nexport const includesContract = crud({\n basePath: '/sap/bc/adt/programs/includes',\n schema: includes,\n contentType: 'application/vnd.sap.adt.programs.includes.v2+xml',\n accept:\n 'application/vnd.sap.adt.programs.includes.v2+xml, application/vnd.sap.adt.programs.includes.v1+xml, application/vnd.sap.adt.programs.includes+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the includes contract */\nexport type IncludesContract = typeof includesContract;\n","/**\n * ADT Programs Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/programs/programs → programs.programs\n * - /sap/bc/adt/programs/includes → programs.includes\n */\n\nexport {\n programsContract,\n type ProgramsContract,\n type ProgramResponse,\n} from './programs';\n\nexport {\n includesContract,\n type IncludesContract,\n type IncludeResponse,\n} from './includes';\n\nimport { programsContract } from './programs';\nimport { includesContract } from './includes';\n\n/**\n * Programs Contract type definition\n */\nexport interface ProgramsModuleContract {\n programs: typeof programsContract;\n includes: typeof includesContract;\n}\n\nexport const programsModuleContract: ProgramsModuleContract = {\n programs: programsContract,\n includes: includesContract,\n};\n","/**\n * ADT Functions Groups Contract\n *\n * Endpoint: /sap/bc/adt/functions/groups\n * Full CRUD operations for ABAP function groups including source code management.\n */\n\nimport { crud } from '../../base';\nimport { groups, type InferTypedSchema } from '../../schemas';\n\n/**\n * Function group response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for function group metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type FunctionGroupResponse = InferTypedSchema<typeof groups>;\n\n/**\n * /sap/bc/adt/functions/groups\n * Full CRUD operations for ABAP function groups\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const functionGroupsContract = crud({\n basePath: '/sap/bc/adt/functions/groups',\n schema: groups,\n contentType: 'application/vnd.sap.adt.functions.groups.v3+xml',\n accept:\n 'application/vnd.sap.adt.functions.groups.v3+xml, application/vnd.sap.adt.functions.groups.v2+xml, application/vnd.sap.adt.functions.groups.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the function groups contract */\nexport type FunctionGroupsContract = typeof functionGroupsContract;\n","/**\n * ADT Function Modules Contract\n *\n * Endpoint: /sap/bc/adt/functions/groups/{groupName}/fmodules/{fmName}\n * Sub-resource of function groups.\n *\n * Function modules are child objects of function groups. They have their own\n * lock lifecycle, source code, and metadata but are accessed through the\n * parent group's URL path.\n */\n\nimport { http, contract } from '../../base';\nimport { textPlain } from '../../helpers/text-schema';\nimport {\n fmodules as fmodulesSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Function module response type - exported for consumers (ADK, etc.)\n */\nexport type FunctionModuleResponse = InferTypedSchema<typeof fmodulesSchema>;\n\nconst contentType = 'application/vnd.sap.adt.functions.fmodules.v3+xml';\nconst accept =\n 'application/vnd.sap.adt.functions.fmodules.v3+xml, application/vnd.sap.adt.functions.fmodules.v2+xml, application/vnd.sap.adt.functions.fmodules.v1+xml';\n\n// Base path with speci path parameter (NOT a JS template literal!)\n// eslint-disable-next-line no-template-curly-in-string\nconst basePath = '/sap/bc/adt/functions/groups/${groupName}/fmodules';\n\n/**\n * /sap/bc/adt/functions/groups/{groupName}/fmodules\n * CRUD operations for function modules within a function group\n */\nexport const functionModulesContract = contract({\n /** GET .../fmodules/{fmName} - Get function module metadata */\n // eslint-disable-next-line no-template-curly-in-string\n get: (_groupName: string, _fmName: string) =>\n http.get(basePath + '/${fmName}', {\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept },\n }),\n\n /** POST .../fmodules - Create function module */\n post: (groupName: string, queryOptions?: { corrNr?: string }) =>\n http.post(basePath, {\n body: fmodulesSchema,\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept, 'Content-Type': contentType },\n query: queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : undefined,\n }),\n\n /** PUT .../fmodules/{fmName} - Update function module metadata */\n // eslint-disable-next-line no-template-curly-in-string\n put: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.put(basePath + '/${fmName}', {\n body: fmodulesSchema,\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept, 'Content-Type': contentType },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** DELETE .../fmodules/{fmName} - Delete function module */\n // eslint-disable-next-line no-template-curly-in-string\n delete: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.delete(basePath + '/${fmName}', {\n responses: { 204: undefined },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** POST .../fmodules/{fmName}?_action=LOCK - Lock function module */\n // eslint-disable-next-line no-template-curly-in-string\n lock: (\n groupName: string,\n fmName: string,\n options?: { corrNr?: string; accessMode?: 'MODIFY' | 'SOURCE' },\n ) =>\n http.post(basePath + '/${fmName}', {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n Accept:\n 'application/*,application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result',\n },\n query: {\n _action: 'LOCK',\n accessMode: options?.accessMode ?? 'MODIFY',\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** POST .../fmodules/{fmName}?_action=UNLOCK - Unlock function module */\n // eslint-disable-next-line no-template-curly-in-string\n unlock: (\n groupName: string,\n fmName: string,\n options: { lockHandle: string },\n ) =>\n http.post(basePath + '/${fmName}', {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n },\n query: {\n _action: 'UNLOCK',\n accessMode: 'MODIFY',\n lockHandle: options.lockHandle,\n },\n }),\n\n /** Source code operations */\n source: {\n main: {\n /** GET .../fmodules/{fmName}/source/main - Get source code */\n // eslint-disable-next-line no-template-curly-in-string\n get: (_groupName: string, _fmName: string) =>\n http.get(basePath + '/${fmName}/source/main', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n\n /** PUT .../fmodules/{fmName}/source/main - Update source code */\n // eslint-disable-next-line no-template-curly-in-string\n put: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.put(basePath + '/${fmName}/source/main', {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n },\n },\n});\n\nexport type FunctionModulesContract = typeof functionModulesContract;\n","/**\n * ADT Functions Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/functions/groups → functions.groups\n * - /sap/bc/adt/functions/groups/{group}/fmodules → functions.groups.fmodules\n */\n\nexport {\n functionGroupsContract,\n type FunctionGroupsContract,\n type FunctionGroupResponse,\n} from './groups';\n\nexport {\n functionModulesContract,\n type FunctionModulesContract,\n type FunctionModuleResponse,\n} from './fmodules';\n\nimport { functionGroupsContract } from './groups';\nimport { functionModulesContract } from './fmodules';\n\n/**\n * Functions Contract type definition\n *\n * Function modules are nested under groups following the SAP URL pattern:\n * /sap/bc/adt/functions/groups/{groupName}/fmodules/{fmName}\n */\nexport interface FunctionsContract {\n groups: typeof functionGroupsContract & {\n fmodules: typeof functionModulesContract;\n };\n}\n\nexport const functionsContract: FunctionsContract = {\n groups: {\n ...functionGroupsContract,\n fmodules: functionModulesContract,\n },\n};\n","/**\n * DDIC Domain Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/domains\n * Content-Type: application/vnd.sap.adt.domains.v2+xml\n * Object type: DOMA/DD (domadd)\n */\n\nimport { crud } from '../../helpers/crud';\nimport { domain as domainSchema, type InferTypedSchema } from '../../schemas';\n\n/**\n * Domain response type - exported for consumers (ADK, etc.)\n */\nexport type DomainResponse = InferTypedSchema<typeof domainSchema>;\n\nexport type DomainsContract = typeof domainsContract;\n\nexport const domainsContract = crud({\n basePath: '/sap/bc/adt/ddic/domains',\n schema: domainSchema,\n contentType: 'application/vnd.sap.adt.domains.v2+xml',\n accept:\n 'application/vnd.sap.adt.domains.v2+xml, application/vnd.sap.adt.domains.v1+xml',\n});\n","/**\n * DDIC Data Element Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/dataelements\n * Content-Type: application/vnd.sap.adt.dataelements.v2+xml\n * Object type: DTEL/DE (dtelde)\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n dataelementWrapper as dataelementWrapperSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Data Element response type - exported for consumers (ADK, etc.)\n *\n * Uses the custom wrapper schema because SAP wraps the inner\n * dtel:dataElement content in a blue:wbobj root element\n * (namespace http://www.sap.com/wbobj/dictionary/dtel).\n */\nexport type DataElementResponse = InferTypedSchema<\n typeof dataelementWrapperSchema\n>;\n\nexport type DataelementsContract = typeof dataelementsContract;\n\nexport const dataelementsContract = crud({\n basePath: '/sap/bc/adt/ddic/dataelements',\n schema: dataelementWrapperSchema,\n contentType: 'application/vnd.sap.adt.dataelements.v2+xml',\n accept:\n 'application/vnd.sap.adt.dataelements.v2+xml, application/vnd.sap.adt.dataelements.v1+xml',\n});\n","/**\n * DDIC Structure Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/structures\n * Content-Type: application/vnd.sap.adt.structures.v2+xml\n * Object type: TABL/DS (tablds)\n *\n * Uses the custom blueSource wrapper schema because SAP wraps\n * structure responses in a blue:blueSource root element\n * (namespace http://www.sap.com/wbobj/blue) extending AbapSourceMainObject.\n */\n\nimport { crud } from '../../helpers/crud';\nimport { http } from '@abapify/speci/rest';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Structure response type - exported for consumers (ADK, etc.)\n */\nexport type StructureResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport type StructuresContract = typeof structuresContract;\n\nconst basePath = '/sap/bc/adt/ddic/structures';\nconst contentType = 'application/vnd.sap.adt.structures.v2+xml';\nconst accept =\n 'application/vnd.sap.adt.structures.v2+xml, application/vnd.sap.adt.structures.v1+xml';\n\nexport const structuresContract = {\n ...crud({\n basePath,\n schema: blueSourceSchema,\n contentType,\n accept,\n sources: ['main'] as const,\n }),\n\n objectstructure: (name: string, options?: { version?: string }) =>\n http.get(`${basePath}/${name.toLowerCase()}/objectstructure`, {\n responses: { 200: undefined },\n query: options?.version ? { version: options.version } : undefined,\n }),\n};\n","/**\n * DDIC Database Table Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/tables\n * Content-Type: application/vnd.sap.adt.tables.v2+xml\n * Object type: TABL/DT (tabldt)\n *\n * Uses the custom blueSource wrapper schema because SAP wraps\n * TABL responses in a blue:blueSource root element\n * (namespace http://www.sap.com/wbobj/blue) extending AbapSourceMainObject.\n */\n\nimport { crud } from '../../helpers/crud';\nimport { http } from '@abapify/speci/rest';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Table response type - exported for consumers (ADK, etc.)\n */\nexport type TableResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport type TablesContract = typeof tablesContract;\n\nconst basePath = '/sap/bc/adt/ddic/tables';\nconst contentType = 'application/vnd.sap.adt.tables.v2+xml';\nconst accept =\n 'application/vnd.sap.adt.blues.v1+xml, application/vnd.sap.adt.tables.v2+xml';\n\nexport const tablesContract = {\n ...crud({\n basePath,\n schema: blueSourceSchema,\n contentType,\n accept,\n sources: ['main'] as const,\n }),\n\n objectstructure: (name: string, options?: { version?: string }) =>\n http.get(`${basePath}/${name.toLowerCase()}/objectstructure`, {\n responses: { 200: undefined },\n query: options?.version ? { version: options.version } : undefined,\n }),\n};\n","/**\n * DDIC Database Table Settings Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/db/settings/{name}\n * Content-Type: application/vnd.sap.adt.table.settings.v2+xml\n *\n * Returns the technical DD09L settings for a database table as an XML\n * document. ADK currently consumes this as raw text, so the contract is\n * typed as a plain-text endpoint.\n */\n\nimport { http, contract } from '../../base';\n\nconst basePath = '/sap/bc/adt/ddic/db/settings';\n\nexport const tablesettingsContract = contract({\n /** GET /sap/bc/adt/ddic/db/settings/{name} - Retrieve table settings XML */\n get: (name: string) =>\n http.get(`${basePath}/${name.toLowerCase()}`, {\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: 'application/vnd.sap.adt.table.settings.v2+xml',\n },\n }),\n});\n\nexport type TableSettingsContract = typeof tablesettingsContract;\n","/**\n * DDIC Table Type Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/tabletypes\n * Content-Type: application/vnd.sap.adt.tabletype.v1+xml\n * Object type: TTYP/TT\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n tabletype as tabletypeSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Table Type response type - exported for consumers (ADK, etc.)\n */\nexport type TableTypeResponse = InferTypedSchema<typeof tabletypeSchema>;\n\nexport type TabletypesContract = typeof tabletypesContract;\n\nexport const tabletypesContract = crud({\n basePath: '/sap/bc/adt/ddic/tabletypes',\n schema: tabletypeSchema,\n contentType: 'application/vnd.sap.adt.tabletype.v1+xml',\n accept: 'application/vnd.sap.adt.tabletype.v1+xml',\n});\n","/**\n * ADT CDS DDL Source Contract\n *\n * Endpoint: /sap/bc/adt/ddic/ddl/sources\n * Content-Type: application/vnd.sap.adt.ddlSource+xml\n * Object type: DDLS\n *\n * CDS Data Definition sources — the SAP endpoint for CDS views / data\n * definitions. The metadata document lives at `{basePath}/{name}` and\n * the source text at `{basePath}/{name}/source/main`.\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n ddlSource as ddlSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DdlSourceResponse = InferTypedSchema<typeof ddlSourceSchema>;\n\nexport const ddlSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/ddl/sources',\n schema: ddlSourceSchema,\n contentType: 'application/vnd.sap.adt.ddlSource+xml',\n accept: 'application/vnd.sap.adt.ddlSource+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type DdlSourcesContract = typeof ddlSourcesContract;\n","/**\n * ADT CDS DDL Sources module\n */\n\nexport {\n ddlSourcesContract,\n type DdlSourcesContract,\n type DdlSourceResponse,\n} from './sources';\n\nimport { ddlSourcesContract } from './sources';\n\nexport interface DdlContract {\n sources: typeof ddlSourcesContract;\n}\n\nexport const ddlContract: DdlContract = {\n sources: ddlSourcesContract,\n};\n","/**\n * ADT CDS DCL (Access Control) Source Contract\n *\n * Endpoint: /sap/bc/adt/acm/dcl/sources\n * (Note: the SAP endpoint for DCL sources lives under `acm/dcl`, not\n * `ddic/dcl`. The contract is exported under `ddic.dcl` for API\n * parity with the ADK and the sibling DDL contract.)\n * Content-Type: application/vnd.sap.adt.dclSource+xml\n * Object type: DCLS\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n dclSource as dclSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DclSourceResponse = InferTypedSchema<typeof dclSourceSchema>;\n\nexport const dclSourcesContract = crud({\n basePath: '/sap/bc/adt/acm/dcl/sources',\n schema: dclSourceSchema,\n contentType: 'application/vnd.sap.adt.dclSource+xml',\n accept: 'application/vnd.sap.adt.dclSource+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type DclSourcesContract = typeof dclSourcesContract;\n","/**\n * ADT CDS DCL (Access Control) Sources module\n */\n\nexport {\n dclSourcesContract,\n type DclSourcesContract,\n type DclSourceResponse,\n} from './sources';\n\nimport { dclSourcesContract } from './sources';\n\nexport interface DclContract {\n sources: typeof dclSourcesContract;\n}\n\nexport const dclContract: DclContract = {\n sources: dclSourcesContract,\n};\n","import { crud } from '../../../helpers/crud';\nimport {\n ddlxSource as ddlxSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DdlxSourceResponse = InferTypedSchema<typeof ddlxSourceSchema>;\nexport const ddlxSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/ddlx/sources',\n schema: ddlxSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.ddlx.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.ddlx.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { ddlxSourcesContract, type DdlxSourceResponse } from './sources';\nimport { ddlxSourcesContract } from './sources';\nexport const ddlxContract = { sources: ddlxSourcesContract };\n","import { crud } from '../../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DsfdSourceResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport const dsfdSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/dsfd/sources',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { dsfdSourcesContract, type DsfdSourceResponse } from './sources';\n\nimport { dsfdSourcesContract } from './sources';\n\nexport const dsfdContract = { sources: dsfdSourcesContract };\n","import { http } from '@abapify/speci/rest';\nimport type { Serializable } from '@abapify/speci/rest';\nimport { crud } from '../../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport interface DsfiDefinition {\n formatVersion: '1';\n header: {\n description: string;\n originalLanguage: string;\n abapLanguageVersion?: string;\n };\n scalarFunctionName: string;\n engine: 'analyticalEngine' | 'sqlEngine';\n sqlProperties?: {\n amdpReference: string;\n autoExposedInSqlServices?: boolean;\n };\n}\n\nexport const dsfiDefinitionSchema: Serializable<DsfiDefinition> = {\n _infer: undefined as unknown as DsfiDefinition,\n parse: (raw) => JSON.parse(raw) as DsfiDefinition,\n build: (value) => JSON.stringify(value),\n};\n\nconst baseContract = crud({\n basePath: '/sap/bc/adt/ddic/dsfi',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n});\n\nexport type DsfiResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport const dsfiContract = {\n ...baseContract,\n source: {\n main: {\n get: (name: string) =>\n http.get(\n `/sap/bc/adt/ddic/dsfi/${encodeURIComponent(name.toLowerCase())}/source/main`,\n {\n responses: { 200: dsfiDefinitionSchema },\n headers: { Accept: 'application/json' },\n },\n ),\n },\n },\n};\n","import { crud } from '../../../helpers/crud';\nimport {\n dtebSource as dtebSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DtebSourceResponse = InferTypedSchema<typeof dtebSourceSchema>;\n\nexport const dtebSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/dteb/sources',\n schema: dtebSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.dteb.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.dteb.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { dtebSourcesContract, type DtebSourceResponse } from './sources';\n\nimport { dtebSourcesContract } from './sources';\n\nexport const dtebContract = { sources: dtebSourcesContract };\n","/**\n * ADT RAP Service Definition (SRVD) Source Contract\n *\n * Endpoint: /sap/bc/adt/ddic/srvd/sources\n * Content-Type: application/vnd.sap.adt.ddic.srvd.v1+xml\n * Object type: SRVD/SRV\n *\n * RAP Service Definition — CDS-like source that exposes CDS root\n * entities/behaviors via OData. Mirrors the DDL sources shape: metadata\n * document at `{basePath}/{name}`, source text (`.asrvd`) at\n * `{basePath}/{name}/source/main`.\n *\n * Reference: abapGit handler zcl_abapgit_object_srvd.\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n srvdSource as srvdSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type SrvdSourceResponse = InferTypedSchema<typeof srvdSourceSchema>;\n\nexport const srvdSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/srvd/sources',\n schema: srvdSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.srvd.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.srvd.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type SrvdSourcesContract = typeof srvdSourcesContract;\n","/**\n * ADT RAP Service Definition module\n */\n\nexport {\n srvdSourcesContract,\n type SrvdSourcesContract,\n type SrvdSourceResponse,\n} from './sources';\n\nimport { srvdSourcesContract } from './sources';\n\nexport interface SrvdContract {\n sources: typeof srvdSourcesContract;\n}\n\nexport const srvdContract: SrvdContract = {\n sources: srvdSourcesContract,\n};\n","/**\n * DDIC (Data Dictionary) Contracts\n *\n * Covers all DDIC object types:\n * - Domains (DOMA)\n * - Data Elements (DTEL)\n * - Structures (TABL/DS)\n * - Database Tables (TABL/DT)\n * - Table Types (TTYP)\n */\n\nexport {\n domainsContract,\n type DomainsContract,\n type DomainResponse,\n} from './domains';\nexport {\n dataelementsContract,\n type DataelementsContract,\n type DataElementResponse,\n} from './dataelements';\nexport {\n structuresContract,\n type StructuresContract,\n type StructureResponse,\n} from './structures';\nexport {\n tablesContract,\n type TablesContract,\n type TableResponse,\n} from './tables';\nexport {\n tablesettingsContract,\n type TableSettingsContract,\n} from './tablesettings';\nexport {\n tabletypesContract,\n type TabletypesContract,\n type TableTypeResponse,\n} from './tabletypes';\nexport {\n ddlContract,\n ddlSourcesContract,\n type DdlContract,\n type DdlSourcesContract,\n type DdlSourceResponse,\n} from './ddl';\nexport {\n dclContract,\n dclSourcesContract,\n type DclContract,\n type DclSourcesContract,\n type DclSourceResponse,\n} from './dcl';\nexport {\n ddlxContract,\n ddlxSourcesContract,\n type DdlxSourceResponse,\n} from './ddlx';\nexport {\n dsfdContract,\n dsfdSourcesContract,\n type DsfdSourceResponse,\n} from './dsfd';\nexport { dsfiContract, type DsfiDefinition, type DsfiResponse } from './dsfi';\nexport {\n dtebContract,\n dtebSourcesContract,\n type DtebSourceResponse,\n} from './dteb';\nexport {\n srvdContract,\n srvdSourcesContract,\n type SrvdContract,\n type SrvdSourcesContract,\n type SrvdSourceResponse,\n} from './srvd';\n\nimport { domainsContract } from './domains';\nimport { dataelementsContract } from './dataelements';\nimport { structuresContract } from './structures';\nimport { tablesContract } from './tables';\nimport { tablesettingsContract } from './tablesettings';\nimport { tabletypesContract } from './tabletypes';\nimport { ddlContract } from './ddl';\nimport { dclContract } from './dcl';\nimport { ddlxContract } from './ddlx';\nimport { dsfdContract } from './dsfd';\nimport { dsfiContract } from './dsfi';\nimport { dtebContract } from './dteb';\nimport { srvdContract } from './srvd';\n\nexport interface DdicContract {\n domains: typeof domainsContract;\n dataelements: typeof dataelementsContract;\n structures: typeof structuresContract;\n tables: typeof tablesContract;\n tablesettings: typeof tablesettingsContract;\n tabletypes: typeof tabletypesContract;\n ddl: typeof ddlContract;\n dcl: typeof dclContract;\n ddlx: typeof ddlxContract;\n dsfd: typeof dsfdContract;\n dsfi: typeof dsfiContract;\n dteb: typeof dtebContract;\n srvd: typeof srvdContract;\n}\n\nexport const ddicContract: DdicContract = {\n domains: domainsContract,\n dataelements: dataelementsContract,\n structures: structuresContract,\n tables: tablesContract,\n tablesettings: tablesettingsContract,\n tabletypes: tabletypesContract,\n ddl: ddlContract,\n dcl: dclContract,\n ddlx: ddlxContract,\n dsfd: dsfdContract,\n dsfi: dsfiContract,\n dteb: dtebContract,\n srvd: srvdContract,\n};\n","/**\n * ADT System Users Contract\n *\n * User lookup and search operations.\n * Path: /sap/bc/adt/system/users\n */\n\nimport { http } from '../../base';\nimport { atomFeed } from '../../schemas';\n\nexport const usersContract = {\n /**\n * Search for users by query string\n *\n * @param options.querystring - Search query (supports wildcards like *)\n * @param options.maxcount - Maximum number of results\n * @returns Atom feed with matching user entries (id = username, title = full name)\n *\n * @example\n * const results = await client.system.users.search({ querystring: 'DEV*', maxcount: 10 });\n */\n search: (options: { querystring: string; maxcount?: number }) =>\n http.get('/sap/bc/adt/system/users', {\n query: {\n querystring: options.querystring,\n ...(options.maxcount !== undefined && { maxcount: options.maxcount }),\n },\n responses: {\n 200: atomFeed,\n },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n },\n }),\n\n /**\n * Get a specific user by username\n *\n * @param username - SAP username (e.g., 'DEVELOPER')\n * @returns Atom feed with a single user entry\n *\n * @example\n * const user = await client.system.users.get('DEVELOPER');\n */\n get: (username: string) =>\n http.get(`/sap/bc/adt/system/users/${encodeURIComponent(username)}`, {\n responses: {\n 200: atomFeed,\n },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n },\n }),\n};\n\nexport type UsersContract = typeof usersContract;\n","/**\n * ADT System Security / STRUST Contracts\n *\n * Contract surface for SAP STRUST (SSL Personal Security Environment)\n * over the ADT REST API. Paths under `/sap/bc/adt/system/security/pses`.\n *\n * NOTE: sapcli (jfilak/sapcli) drives STRUST via RFC function modules\n * (`sap/rfc/strust.py`), not ADT. The paths below follow the\n * `/sap/bc/adt/system/...` convention used elsewhere in the SAP ADT\n * REST surface (see `system/users`). See the accompanying TODO-synthetic\n * fixtures in `@abapify/adt-fixtures` — replace with real captures when\n * available.\n */\n\nimport { http } from '../../../base';\nimport { atomFeed } from '../../../schemas';\n\n/**\n * Inferrable schema wrapper for a PEM (plain-text) request body.\n * Makes `uploadCertificate` accept a `pem: string` argument at the client\n * call-site — speci's `BuildParams` only appends a body parameter when\n * the body is marked Inferrable via the `_infer` tag.\n */\nconst pemBody = { _infer: undefined as unknown as string } as const;\n\n/** Options for {@link psesContract.uploadCertificate}. */\nexport interface UploadCertificateOptions {\n /** PEM-encoded certificate (may contain multiple concatenated certs). */\n pem: string;\n}\n\nexport const psesContract = {\n /**\n * List all Personal Security Environments (identities).\n *\n * `GET /sap/bc/adt/system/security/pses`\n */\n list: () =>\n http.get('/sap/bc/adt/system/security/pses', {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n }),\n\n /**\n * Get a single PSE identified by `{context}/{applic}`.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}`\n */\n get: (context: string, applic: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}`,\n {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n },\n ),\n\n /**\n * List certificates inside a PSE.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}/certificates`\n */\n listCertificates: (context: string, applic: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates`,\n {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n },\n ),\n\n /**\n * Fetch the PEM of a single certificate in a PSE.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}/certificates/{id}`\n */\n getCertificate: (context: string, applic: string, id: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates/${encodeURIComponent(id)}`,\n {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/x-pem-file' },\n },\n ),\n\n /**\n * Upload a PEM certificate into a PSE. The body is the PEM text.\n *\n * `POST /sap/bc/adt/system/security/pses/{context}/{applic}/certificates`\n */\n uploadCertificate: (context: string, applic: string) =>\n http.post(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates`,\n {\n body: pemBody,\n responses: { 200: atomFeed },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n 'Content-Type': 'application/x-pem-file',\n },\n },\n ),\n\n /**\n * Delete a certificate from a PSE.\n *\n * `DELETE /sap/bc/adt/system/security/pses/{context}/{applic}/certificates/{id}`\n */\n deleteCertificate: (context: string, applic: string, id: string) =>\n http.delete(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates/${encodeURIComponent(id)}`,\n {\n responses: { 204: undefined },\n },\n ),\n};\n\nexport type PsesContract = typeof psesContract;\n","/**\n * ADT System Contracts - Aggregated\n */\n\nexport * from './users';\nexport * from './security/pses';\n\nimport { usersContract, type UsersContract } from './users';\nimport { psesContract, type PsesContract } from './security/pses';\n\nexport interface SystemSecurityContract {\n pses: PsesContract;\n}\n\nexport interface SystemContract {\n users: UsersContract;\n security: SystemSecurityContract;\n}\n\nexport const systemContract: SystemContract = {\n users: usersContract,\n security: {\n pses: psesContract,\n },\n};\n","/**\n * ADT Checkruns Contract\n *\n * Manually-defined endpoint for ABAP syntax check runs.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/checkruns → checkruns.checkObjects (POST with body)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n\nimport { http, contract } from '../../base';\nimport { checkrun } from '../../schemas';\n\n/**\n * /sap/bc/adt/checkruns\n *\n * Run a syntax/check-run on a list of ABAP objects.\n * Request body: checkObjectList (chkrun:CheckObjectList)\n * Response: checkRunReports (chkrun:CheckReportList)\n */\nconst checkObjects = contract({\n /**\n * POST /sap/bc/adt/checkruns\n * Submit a checkObjectList and receive checkRunReports.\n *\n * Both request and response use the same `checkrun` schema (union discriminated\n * by the root element: `checkObjectList` for requests, `checkRunReports` for responses).\n */\n post: () =>\n http.post('/sap/bc/adt/checkruns', {\n body: checkrun,\n responses: { 200: checkrun },\n headers: {\n Accept: 'application/vnd.sap.adt.checkmessages+xml',\n 'Content-Type': 'application/vnd.sap.adt.checkobjects+xml',\n },\n }),\n});\n\n/**\n * Combined Checkruns contract\n */\nexport const checkrunsContract = {\n checkObjects,\n};\n\nexport type CheckrunsContract = typeof checkrunsContract;\n","/**\n * ADT Activation Contract\n *\n * Manually-defined endpoint for ABAP object activation.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/activation → activation.activate (POST with body)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n\nimport { http, contract } from '../../base';\nimport { adtcore } from '../../schemas';\n\n/**\n * /sap/bc/adt/activation\n *\n * Activate one or more ABAP objects.\n * Request body: adtcore:objectReferences (AdtcoreSchema variant)\n */\nconst activate = contract({\n /**\n * POST /sap/bc/adt/activation{?method,preauditRequested}\n *\n * Submit an objectReferences body to activate the listed objects.\n * The `method` query param selects the action (default: \"activate\").\n * The response XML is not strictly typed here – callers may ignore it.\n */\n post: (params?: { method?: string; preauditRequested?: boolean }) =>\n http.post('/sap/bc/adt/activation', {\n query: params,\n body: adtcore,\n responses: { 200: adtcore },\n headers: {\n Accept: 'application/xml',\n 'Content-Type': 'application/xml',\n },\n }),\n});\n\n/**\n * Combined Activation contract\n */\nexport const activationContract = {\n activate,\n};\n\nexport type ActivationContract = typeof activationContract;\n","/**\n * Data Preview response schema (hand-built JSON schema)\n *\n * The SAP ADT data preview freestyle endpoint returns JSON of the shape:\n *\n * {\n * totalRows: number,\n * isHanaAnalyticalView: boolean,\n * executedQueryString: string,\n * queryExecutionTime: number,\n * dataPreview: {\n * columns: Array<{\n * metadata: { name, type, length, description, keyAttribute, ... },\n * dataPreviewContent: Array<string | null>,\n * }>,\n * },\n * }\n *\n * For robustness across SAP releases the schema accepts an arbitrary object\n * shape (index signature) and only strongly types the fields we actually\n * consume in the CLI / ADK layers.\n */\nimport type { Serializable } from '@abapify/speci/rest';\n\n/** Column metadata block in a data-preview response */\nexport interface DataPreviewColumnMetadata {\n name?: string;\n type?: string;\n length?: number | string;\n description?: string;\n /** Some SAP releases use isKey / keyAttribute / key interchangeably */\n isKey?: boolean;\n keyAttribute?: boolean;\n [extra: string]: unknown;\n}\n\n/** One column entry including both metadata and the column's values */\nexport interface DataPreviewColumn {\n metadata?: DataPreviewColumnMetadata;\n /** Column values, one entry per row in document order */\n dataPreviewContent?: Array<string | null>;\n [extra: string]: unknown;\n}\n\n/** dataPreview wrapper */\nexport interface DataPreviewPayload {\n columns?: DataPreviewColumn[];\n [extra: string]: unknown;\n}\n\n/** Full freestyle response body */\nexport interface DataPreviewFreestyleResponse {\n totalRows?: number;\n isHanaAnalyticalView?: boolean;\n executedQueryString?: string;\n queryExecutionTime?: number;\n dataPreview?: DataPreviewPayload;\n [extra: string]: unknown;\n}\n\n/**\n * Hand-built Serializable schema for the data preview freestyle response.\n *\n * Shape mirrors the ts-xsd `TypedSchema` pattern so it plugs into speci's\n * `Inferrable`/`Serializable` type inference (`_infer`, `parse`, `build`).\n *\n * The adapter calls `schema.parse(raw)` / `schema.build(data)`, so we keep\n * both sides as plain JSON (de)serialisation.\n */\nexport const dataPreviewFreestyleResponseSchema: Serializable<DataPreviewFreestyleResponse> =\n {\n _infer: undefined as unknown as DataPreviewFreestyleResponse,\n parse: (raw: string): DataPreviewFreestyleResponse => {\n if (raw == null || raw === '') return {};\n return JSON.parse(raw) as DataPreviewFreestyleResponse;\n },\n build: (data: DataPreviewFreestyleResponse): string => JSON.stringify(data),\n };\n\n/**\n * Request-body schema: the endpoint accepts a raw SQL SELECT string as\n * `text/plain`. We still model it as a Serializable so speci correctly\n * infers the `string` body parameter at the client call site.\n */\nexport const dataPreviewFreestyleRequestSchema: Serializable<string> = {\n _infer: undefined as unknown as string,\n parse: (raw: string): string => raw,\n build: (data: string): string => data,\n};\n","/**\n * /sap/bc/adt/datapreview/freestyle\n *\n * Executes an ABAP Open SQL SELECT statement and returns the result set as\n * JSON. Mirrors sapcli's `datapreview osql` command and the adt CLI\n * `datapreview osql` command.\n *\n * POST /sap/bc/adt/datapreview/freestyle?rowCount=<n>&outputFormat=json[&noaging=true]\n * Content-Type: text/plain\n * Accept: application/json\n * Body: raw ABAP SQL SELECT statement\n */\n\nimport { http } from '../../base';\nimport {\n dataPreviewFreestyleRequestSchema,\n dataPreviewFreestyleResponseSchema,\n} from './schema';\n/** Query parameters for `POST /datapreview/freestyle` */\nexport interface FreestyleQuery {\n /** Maximum number of rows to return (ADT default: 100) */\n rowCount?: number;\n /** Output format - always `json` for this contract */\n outputFormat?: 'json' | 'xml';\n /** Disable SAP aging (bypass browser cache flag) */\n noaging?: boolean;\n}\n\nexport const freestyle = {\n /** POST /datapreview/freestyle - execute a free-style SQL query */\n post: (query?: FreestyleQuery) =>\n http.post('/sap/bc/adt/datapreview/freestyle', {\n body: dataPreviewFreestyleRequestSchema,\n responses: { 200: dataPreviewFreestyleResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'text/plain',\n },\n query: {\n outputFormat: query?.outputFormat ?? 'json',\n ...(query?.rowCount != null ? { rowCount: query.rowCount } : {}),\n ...(query?.noaging ? { noaging: true } : {}),\n },\n }),\n};\n\nexport type FreestyleContract = typeof freestyle;\nexport {\n dataPreviewFreestyleResponseSchema,\n dataPreviewFreestyleRequestSchema,\n} from './schema';\nexport type { DataPreviewFreestyleResponse } from './schema';\n","/**\n * /sap/bc/adt/datapreview\n *\n * ADT Data Preview endpoints (ABAP SQL execution, value helps, etc.)\n */\n\nimport { freestyle, type FreestyleContract } from './freestyle';\n\nexport { freestyle, type FreestyleContract } from './freestyle';\nexport type {\n DataPreviewFreestyleResponse,\n DataPreviewColumn,\n DataPreviewColumnMetadata,\n DataPreviewPayload,\n} from './schema';\n\nexport interface DatapreviewContract {\n freestyle: FreestyleContract;\n}\n\nexport const datapreviewContract: DatapreviewContract = {\n freestyle,\n};\n","import type { Serializable } from '@abapify/speci/rest';\n\nconst COVERAGE_NAMESPACE = 'http://www.sap.com/adt/cov';\nconst ADT_CORE_NAMESPACE = 'http://www.sap.com/adt/core';\nconst STATEMENTS_RELATION =\n 'http://www.sap.com/adt/relations/runtime/traces/coverage/results/statements';\n\nexport const coverageXmlBody = {\n parse: (value: unknown) => String(value),\n build: (value: string) => value,\n _infer: undefined as unknown as string,\n} satisfies Serializable<string>;\n\nfunction escapeXmlAttribute(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('\"', '"')\n .replaceAll('<', '<')\n .replaceAll('>', '>');\n}\n\nexport function buildCoverageQuery(objectUris: string[]): string {\n const objectReferences = objectUris\n .map(\n (uri) =>\n `<adtcore:objectReference adtcore:uri=\"${escapeXmlAttribute(uri)}\"/>`,\n )\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cov:query xmlns:cov=\"${COVERAGE_NAMESPACE}\">\n<adtcore:objectSets xmlns:adtcore=\"${ADT_CORE_NAMESPACE}\">\n<objectSet kind=\"inclusive\">\n<adtcore:objectReferences>\n${objectReferences}\n</adtcore:objectReferences>\n</objectSet>\n</adtcore:objectSets>\n</cov:query>`;\n}\n\nfunction takeUnseenRecord(\n value: unknown,\n seenValues: Set<unknown>,\n): Record<string, unknown> | undefined {\n if (!value || typeof value !== 'object' || seenValues.has(value)) return;\n seenValues.add(value);\n return value as Record<string, unknown>;\n}\n\nfunction takeStatementUri(\n record: Record<string, unknown>,\n seenUris: Set<string>,\n): string | undefined {\n const { rel, href } = record;\n if (\n rel !== STATEMENTS_RELATION ||\n typeof href !== 'string' ||\n seenUris.has(href)\n ) {\n return;\n }\n seenUris.add(href);\n return href;\n}\n\nfunction enqueueChildObjects(\n record: Record<string, unknown>,\n queue: unknown[],\n): void {\n for (const child of Object.values(record)) {\n if (Array.isArray(child)) {\n queue.push(...child);\n continue;\n }\n if (child && typeof child === 'object') queue.push(child);\n }\n}\n\nexport function extractCoverageStatementUris(value: unknown): string[] {\n const statementUris: string[] = [];\n const seenUris = new Set<string>();\n const seenValues = new Set<unknown>();\n const queue: unknown[] = [value];\n\n while (queue.length > 0) {\n const record = takeUnseenRecord(queue.shift(), seenValues);\n if (!record) continue;\n const statementUri = takeStatementUri(record, seenUris);\n if (statementUri) statementUris.push(statementUri);\n enqueueChildObjects(record, queue);\n }\n\n return statementUris;\n}\n\nexport function buildStatementsBulkRequest(statementUris: string[]): string {\n const requests = statementUris\n .map((uri) => `<statementsRequest get=\"${escapeXmlAttribute(uri)}\"/>`)\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cov:statementsBulkRequest xmlns:cov=\"${COVERAGE_NAMESPACE}\">\n${requests}\n</cov:statementsBulkRequest>`;\n}\n","/**\n * /sap/bc/adt/runtime/traces/coverage/measurements/{id}\n *\n * POST returns the ABAP coverage tree (cov:result) for a previously\n * created measurement. Used as the second step of the aunit → coverage\n * flow: aunit run → atom:link to measurement → POST this endpoint.\n *\n * Content-Type: application/xml\n * Accept: application/xml\n */\n\nimport { http, contract } from '../../../../base';\nimport { acoverageResult } from '../../../../schemas';\nimport { coverageXmlBody } from './request';\n\nconst XML_CONTENT_TYPE = 'application/xml';\n\nexport const measurements = contract({\n /**\n * POST /sap/bc/adt/runtime/traces/coverage/measurements/{identifier}\n * ?withAdditionalTypeInfo=true\n *\n * Returns the coverage tree rooted at ADT_ROOT_NODE with coverage\n * totals (branch/procedure/statement) for each object reference.\n */\n post: (identifier: string) =>\n http.post(\n `/sap/bc/adt/runtime/traces/coverage/measurements/${identifier}`,\n {\n query: { withAdditionalTypeInfo: true },\n body: coverageXmlBody,\n responses: { 200: acoverageResult },\n headers: {\n Accept: XML_CONTENT_TYPE,\n 'Content-Type': 'application/xml',\n },\n },\n ),\n});\n\nexport type MeasurementsContract = typeof measurements;\n","/**\n * /sap/bc/adt/runtime/traces/coverage/results/{id}/statements\n *\n * POST returns the cov:statementsBulkResponse with per-method statement\n * / branch / procedure coverage details.\n *\n * Content-Type: application/xml\n * Accept: application/xml\n */\n\nimport { http, contract } from '../../../../base';\nimport { acoverageStatements } from '../../../../schemas';\nimport { coverageXmlBody } from './request';\n\nconst XML_CONTENT_TYPE = 'application/xml';\n\nexport const statements = contract({\n /**\n * POST /sap/bc/adt/runtime/traces/coverage/results/{identifier}/statements\n */\n post: (identifier: string) =>\n http.post(\n `/sap/bc/adt/runtime/traces/coverage/results/${identifier}/statements`,\n {\n body: coverageXmlBody,\n responses: { 200: acoverageStatements },\n headers: {\n Accept: XML_CONTENT_TYPE,\n 'Content-Type': 'application/xml',\n },\n },\n ),\n});\n\nexport type StatementsContract = typeof statements;\n","/**\n * /sap/bc/adt/runtime/traces/coverage\n *\n * ABAP Coverage endpoints. Used as a follow-up to ABAP Unit runs that\n * request coverage — the aunit runResult contains an atom:link pointing\n * to a measurement ID which is then POSTed here.\n */\n\nimport { measurements, type MeasurementsContract } from './measurements';\nimport { statements, type StatementsContract } from './statements';\n\nexport { measurements } from './measurements';\nexport { statements } from './statements';\nexport {\n buildCoverageQuery,\n buildStatementsBulkRequest,\n coverageXmlBody,\n extractCoverageStatementUris,\n} from './request';\nexport type { MeasurementsContract } from './measurements';\nexport type { StatementsContract } from './statements';\n\nexport interface CoverageContract {\n measurements: MeasurementsContract;\n statements: StatementsContract;\n}\n\nexport const coverageContract: CoverageContract = {\n measurements,\n statements,\n};\n","import type { Serializable } from '@abapify/speci/rest';\n\nexport interface RuntimeDumpSummary {\n id?: string;\n type?: string;\n program?: string;\n user?: string;\n timestamp?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeDumpListResponse {\n dumps?: RuntimeDumpSummary[];\n [extra: string]: unknown;\n}\n\nexport interface RuntimeDumpDetailResponse {\n id?: string;\n text?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceSummary {\n id?: string;\n user?: string;\n program?: string;\n timestamp?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceListResponse {\n traces?: RuntimeTraceSummary[];\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceDetailResponse {\n id?: string;\n entries?: unknown[];\n [extra: string]: unknown;\n}\n\nfunction parseJsonOrRaw<T extends Record<string, unknown>>(raw: string): T {\n if (!raw) {\n return {} as unknown as T;\n }\n\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as T;\n }\n\n return {\n raw,\n } as unknown as T;\n}\n\nfunction buildJson<T>(value: T): string {\n return JSON.stringify(value);\n}\n\nexport const runtimeDumpListSchema: Serializable<RuntimeDumpListResponse> = {\n _infer: undefined as unknown as RuntimeDumpListResponse,\n parse: (raw: string): RuntimeDumpListResponse =>\n parseJsonOrRaw<RuntimeDumpListResponse>(raw),\n build: (value: RuntimeDumpListResponse): string => buildJson(value),\n};\n\nexport const runtimeDumpDetailSchema: Serializable<RuntimeDumpDetailResponse> =\n {\n _infer: undefined as unknown as RuntimeDumpDetailResponse,\n parse: (raw: string): RuntimeDumpDetailResponse =>\n parseJsonOrRaw<RuntimeDumpDetailResponse>(raw),\n build: (value: RuntimeDumpDetailResponse): string => buildJson(value),\n };\n\nexport const runtimeTraceListSchema: Serializable<RuntimeTraceListResponse> = {\n _infer: undefined as unknown as RuntimeTraceListResponse,\n parse: (raw: string): RuntimeTraceListResponse =>\n parseJsonOrRaw<RuntimeTraceListResponse>(raw),\n build: (value: RuntimeTraceListResponse): string => buildJson(value),\n};\n\nexport const runtimeTraceDetailSchema: Serializable<RuntimeTraceDetailResponse> =\n {\n _infer: undefined as unknown as RuntimeTraceDetailResponse,\n parse: (raw: string): RuntimeTraceDetailResponse =>\n parseJsonOrRaw<RuntimeTraceDetailResponse>(raw),\n build: (value: RuntimeTraceDetailResponse): string => buildJson(value),\n };\n","/**\n * /sap/bc/adt/runtime/traces\n *\n * Runtime trace list and detail endpoints used by diagnostics tooling.\n */\n\nimport { contract, http } from '../../../base';\nimport { runtimeTraceDetailSchema, runtimeTraceListSchema } from '../schema';\n\nexport const profile = contract({\n list: () =>\n http.get('/sap/bc/adt/runtime/traces', {\n responses: { 200: runtimeTraceListSchema },\n headers: { Accept: 'application/json' },\n }),\n hitlist: (id: string) =>\n http.get(`/sap/bc/adt/runtime/traces/${id}/hitlist`, {\n responses: { 200: runtimeTraceDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n dbAccesses: (id: string) =>\n http.get(`/sap/bc/adt/runtime/traces/${id}/dbaccesses`, {\n responses: { 200: runtimeTraceDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type RuntimeTraceProfileContract = typeof profile;\n","/**\n * /sap/bc/adt/runtime/traces\n *\n * Runtime trace endpoints (currently only ABAP coverage).\n */\n\nimport { coverageContract, type CoverageContract } from './coverage';\nimport { profile, type RuntimeTraceProfileContract } from './profile';\n\nexport * from './coverage';\nexport * from './profile';\n\nexport interface TracesContract {\n coverage: CoverageContract;\n profile: RuntimeTraceProfileContract;\n}\n\nexport const tracesContract: TracesContract = {\n coverage: coverageContract,\n profile,\n};\n","/**\n * /sap/bc/adt/runtime/dumps\n *\n * Short dump listing and details.\n */\n\nimport { contract, http } from '../../base';\nimport { runtimeDumpDetailSchema, runtimeDumpListSchema } from './schema';\n\nexport interface RuntimeDumpsQuery {\n user?: string;\n maxResults?: number;\n}\n\nexport const dumps = contract({\n list: (query?: RuntimeDumpsQuery) =>\n http.get('/sap/bc/adt/runtime/dumps', {\n responses: { 200: runtimeDumpListSchema },\n headers: { Accept: 'application/json' },\n query: {\n ...(query?.user ? { user: query.user } : {}),\n ...(query?.maxResults != null ? { maxResults: query.maxResults } : {}),\n },\n }),\n get: (id: string) =>\n http.get(`/sap/bc/adt/runtime/dumps/${id}`, {\n responses: { 200: runtimeDumpDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type RuntimeDumpsContract = typeof dumps;\n","/**\n * /sap/bc/adt/runtime\n *\n * ABAP runtime endpoints (traces, coverage, …).\n */\n\nimport { tracesContract, type TracesContract } from './traces';\nimport { dumps, type RuntimeDumpsContract } from './dumps';\n\nexport * from './traces';\nexport * from './dumps';\nexport * from './schema';\n\nexport interface RuntimeContract {\n traces: TracesContract;\n dumps: RuntimeDumpsContract;\n}\n\nexport const runtimeContract: RuntimeContract = {\n traces: tracesContract,\n dumps,\n};\n","/**\n * gCTS (git-enabled CTS) JSON schemas.\n *\n * gCTS lives under `/sap/bc/cts_abapvcs/` — a separate REST surface from\n * `/sap/bc/adt/`. All responses are JSON. Schemas are hand-built\n * `Serializable<T>` values matching speci's `_infer` marker pattern (same as\n * `adt-contracts/src/adt/datapreview/schema.ts`). No XSDs involved.\n *\n * Shapes derived from:\n * - /tmp/sapcli-ref/sapcli/sap/rest/gcts/remote_repo.py\n * - /tmp/sapcli-ref/sapcli/test/unit/test_sap_rest_gcts.py\n * - /tmp/sapcli-ref/sapcli/test/unit/fixtures_sap_rest_gcts.py\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n// ── Primitives ─────────────────────────────────────────────────────────────\n\nexport interface GctsConfigEntry {\n key: string;\n value?: string;\n category?: string;\n changedAt?: string;\n changedBy?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsRepository {\n rid: string;\n name?: string;\n role?: 'SOURCE' | 'TARGET' | (string & {});\n type?: 'GIT' | 'GITHUB' | (string & {});\n vsid?: string;\n status?: string;\n branch?: string;\n currentCommit?: string;\n url?: string;\n connection?: string;\n config?: GctsConfigEntry[];\n [extra: string]: unknown;\n}\n\nexport interface GctsBranch {\n name: string;\n type?: 'active' | 'local' | 'remote' | (string & {});\n isSymbolic?: boolean;\n isPeeled?: boolean;\n ref?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommit {\n id: string;\n author?: string;\n authorMail?: string;\n date?: string;\n message?: string;\n description?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsRepoObject {\n pgmid?: string;\n type?: string;\n object?: string;\n description?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommitObjectRef {\n /** Transport number, package name, or object key (depends on `type`). */\n object: string;\n /** `TRANSPORT` | `FULL_PACKAGE` | object pgmid */\n type: string;\n}\n\n// ── Request bodies ─────────────────────────────────────────────────────────\n\nexport interface GctsCreateRepositoryRequest {\n repository: string;\n data: GctsRepository;\n}\n\nexport interface GctsSetConfigRequest {\n key: string;\n value: string;\n}\n\nexport interface GctsCreateBranchRequest {\n branch: string;\n type?: 'local' | 'global';\n isSymbolic?: boolean;\n isPeeled?: boolean;\n}\n\nexport interface GctsCommitRequest {\n message: string;\n /** Always serialised as lowercase string by gCTS (\"true\"/\"false\"). */\n autoPush?: 'true' | 'false' | boolean;\n objects: GctsCommitObjectRef[];\n description?: string;\n}\n\n// ── Responses ──────────────────────────────────────────────────────────────\n\nexport interface GctsRepositoriesResponse {\n result?: GctsRepository[];\n [extra: string]: unknown;\n}\n\nexport interface GctsRepositoryEnvelope {\n /** GET /repository/<id> — repo under `result`. */\n result?: GctsRepository;\n /** POST /repository (create) — repo under `repository`. */\n repository?: GctsRepository;\n [extra: string]: unknown;\n}\n\nexport interface GctsBranchesResponse {\n branches?: GctsBranch[];\n [extra: string]: unknown;\n}\n\nexport interface GctsCreateBranchResponse {\n branch?: GctsBranch;\n [extra: string]: unknown;\n}\n\nexport interface GctsLogResponse {\n commits?: GctsCommit[];\n [extra: string]: unknown;\n}\n\nexport interface GctsPullResponse {\n fromCommit?: string;\n toCommit?: string;\n history?: {\n fromCommit?: string;\n toCommit?: string;\n type?: string;\n [extra: string]: unknown;\n };\n [extra: string]: unknown;\n}\n\nexport interface GctsObjectsResponse {\n objects?: GctsRepoObject[];\n [extra: string]: unknown;\n}\n\nexport interface GctsConfigResponse {\n result?: GctsConfigEntry;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommitResponse {\n /** SAP returns varying shapes; keep permissive. */\n [extra: string]: unknown;\n}\n\nexport interface GctsErrorResponse {\n exception?: string;\n log?: Array<{ message?: string; [extra: string]: unknown }>;\n [extra: string]: unknown;\n}\n\n// ── Schema helper ──────────────────────────────────────────────────────────\n\nfunction jsonSchema<T>(): Serializable<T> {\n return {\n _infer: undefined as unknown as T,\n parse: (raw: string): T => {\n if (raw == null || raw === '') return {} as T;\n return JSON.parse(raw) as T;\n },\n build: (data: T): string => JSON.stringify(data),\n };\n}\n\n// ── Exported schemas ───────────────────────────────────────────────────────\n\nexport const gctsRepositoriesSchema = jsonSchema<GctsRepositoriesResponse>();\nexport const gctsRepositorySchema = jsonSchema<GctsRepositoryEnvelope>();\nexport const gctsCreateRepositoryBodySchema =\n jsonSchema<GctsCreateRepositoryRequest>();\nexport const gctsSetItemBodySchema = jsonSchema<Record<string, unknown>>();\nexport const gctsBranchesSchema = jsonSchema<GctsBranchesResponse>();\nexport const gctsCreateBranchBodySchema = jsonSchema<GctsCreateBranchRequest>();\nexport const gctsCreateBranchResponseSchema =\n jsonSchema<GctsCreateBranchResponse>();\nexport const gctsSetConfigBodySchema = jsonSchema<GctsSetConfigRequest>();\nexport const gctsConfigSchema = jsonSchema<GctsConfigResponse>();\nexport const gctsLogSchema = jsonSchema<GctsLogResponse>();\nexport const gctsPullSchema = jsonSchema<GctsPullResponse>();\nexport const gctsObjectsSchema = jsonSchema<GctsObjectsResponse>();\nexport const gctsCommitBodySchema = jsonSchema<GctsCommitRequest>();\nexport const gctsCommitResponseSchema = jsonSchema<GctsCommitResponse>();\nexport const gctsGenericOkSchema = jsonSchema<Record<string, unknown>>();\n","/**\n * /sap/bc/cts_abapvcs/repository/**\n *\n * gCTS repository endpoints. Shapes mirror sapcli's\n * `Repository` / `simple.fetch_repos` behaviour.\n */\n\nimport { http } from '../../base';\nimport {\n gctsRepositoriesSchema,\n gctsRepositorySchema,\n gctsCreateRepositoryBodySchema,\n gctsSetItemBodySchema,\n gctsGenericOkSchema,\n gctsLogSchema,\n gctsPullSchema,\n gctsObjectsSchema,\n} from './schema';\n\nconst BASE = '/sap/bc/cts_abapvcs/repository';\n\n/** List all repositories (GET /repository). */\nconst list = () =>\n http.get(BASE, {\n responses: { 200: gctsRepositoriesSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single repository (GET /repository/<rid>). */\nconst get = (rid: string) =>\n http.get(`${BASE}/${rid}`, {\n responses: { 200: gctsRepositorySchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Create a new repository (POST /repository). */\nconst create = () =>\n http.post(BASE, {\n body: gctsCreateRepositoryBodySchema,\n responses: { 201: gctsRepositorySchema, 200: gctsRepositorySchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\n/** Delete a repository (DELETE /repository/<rid>). */\nconst del = (rid: string) =>\n http.delete(`${BASE}/${rid}`, {\n responses: { 200: gctsGenericOkSchema, 204: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Clone (POST /repository/<rid>/clone). */\nconst clone = (rid: string) =>\n http.post(`${BASE}/${rid}/clone`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Pull (GET /repository/<rid>/pullByCommit). */\nconst pull = (rid: string) =>\n http.get(`${BASE}/${rid}/pullByCommit`, {\n responses: { 200: gctsPullSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Push (GET /repository/<rid>/push) — gCTS uses GET, not POST. */\nconst push = (rid: string) =>\n http.get(`${BASE}/${rid}/push`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Checkout (GET /repository/<rid>/branches/<currentBranch>/switch?branch=X).\n * Caller must supply both the *current* branch (path) and the *target* branch\n * (query) — mirrors sapcli's `Repository.checkout`.\n */\nconst checkout = (rid: string, currentBranch: string, targetBranch: string) =>\n http.get(`${BASE}/${rid}/branches/${currentBranch}/switch`, {\n query: { branch: targetBranch },\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Commit history (GET /repository/<rid>/getCommit). */\nconst log = (rid: string) =>\n http.get(`${BASE}/${rid}/getCommit`, {\n responses: { 200: gctsLogSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Object list (GET /repository/<rid>/getObjects). */\nconst objects = (rid: string) =>\n http.get(`${BASE}/${rid}/getObjects`, {\n responses: { 200: gctsObjectsSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Set a repository property (POST /repository/<rid>).\n * Body is `{ <property>: <value> }`, e.g. `{ role: 'TARGET' }` or\n * `{ url: 'https://…' }`.\n */\nconst setItem = (rid: string) =>\n http.post(`${BASE}/${rid}`, {\n body: gctsSetItemBodySchema,\n responses: { 200: gctsGenericOkSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nexport const repository = {\n list,\n get,\n create,\n delete: del,\n clone,\n pull,\n push,\n checkout,\n log,\n objects,\n setItem,\n};\n\nexport type RepositoryContract = typeof repository;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/branches\n *\n * Branch management endpoints.\n */\n\nimport { http } from '../../base';\nimport {\n gctsBranchesSchema,\n gctsCreateBranchBodySchema,\n gctsCreateBranchResponseSchema,\n gctsGenericOkSchema,\n} from './schema';\n\nconst base = (rid: string) => `/sap/bc/cts_abapvcs/repository/${rid}/branches`;\n\nconst list = (rid: string) =>\n http.get(base(rid), {\n responses: { 200: gctsBranchesSchema },\n headers: { Accept: 'application/json' },\n });\n\nconst create = (rid: string) =>\n http.post(base(rid), {\n body: gctsCreateBranchBodySchema,\n responses: { 200: gctsCreateBranchResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nconst del = (rid: string, name: string) =>\n http.delete(`${base(rid)}/${name}`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Switch branches (GET /repository/<rid>/branches/<current>/switch?branch=X).\n * Alias of `repository.checkout` — exposed here for discoverability when\n * working with the `branches` sub-surface.\n */\nconst switchBranch = (rid: string, currentBranch: string, target: string) =>\n http.get(`${base(rid)}/${currentBranch}/switch`, {\n query: { branch: target },\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const branches = {\n list,\n create,\n delete: del,\n switch: switchBranch,\n};\n\nexport type BranchesContract = typeof branches;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/commit\n *\n * Commit endpoint. Shapes mirror sapcli's\n * `Repository.commit` / `commit_package` / `commit_transport`.\n */\n\nimport { http } from '../../base';\nimport { gctsCommitBodySchema, gctsCommitResponseSchema } from './schema';\n\nconst commit = (rid: string) =>\n http.post(`/sap/bc/cts_abapvcs/repository/${rid}/commit`, {\n body: gctsCommitBodySchema,\n responses: { 200: gctsCommitResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nexport const commits = {\n commit,\n};\n\nexport type CommitsContract = typeof commits;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/config\n *\n * Repository configuration endpoints (key/value pairs).\n */\n\nimport { http } from '../../base';\nimport {\n gctsConfigSchema,\n gctsSetConfigBodySchema,\n gctsGenericOkSchema,\n} from './schema';\n\nconst base = (rid: string) => `/sap/bc/cts_abapvcs/repository/${rid}/config`;\n\n/** GET single config value: /repository/<rid>/config/<key>. */\nconst get = (rid: string, key: string) =>\n http.get(`${base(rid)}/${key}`, {\n responses: { 200: gctsConfigSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** POST /repository/<rid>/config — body `{ key, value }`. */\nconst set = (rid: string) =>\n http.post(base(rid), {\n body: gctsSetConfigBodySchema,\n responses: { 200: gctsGenericOkSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\n/** DELETE /repository/<rid>/config/<key>. */\nconst del = (rid: string, key: string) =>\n http.delete(`${base(rid)}/${key}`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const config = {\n get,\n set,\n delete: del,\n};\n\nexport type ConfigContract = typeof config;\n","/**\n * /sap/bc/cts_abapvcs — gCTS (git-enabled CTS) contracts.\n *\n * Separate REST surface from /sap/bc/adt. Exposed as `client.adt.gcts.*`\n * for parity with sapcli's `sap gcts` CLI surface.\n */\n\nimport {\n repository,\n type RepositoryContract as GctsRepositoryContract,\n} from './repository';\nimport {\n branches,\n type BranchesContract as GctsBranchesContract,\n} from './branches';\nimport {\n commits,\n type CommitsContract as GctsCommitsContract,\n} from './commits';\nimport { config, type ConfigContract as GctsConfigContract } from './config';\n\n// Re-export schema types only. The individual sub-namespaces\n// (repository/branches/commits/config) are accessed through the\n// `gctsContract` tree below to avoid collisions with the top-level\n// `repository` / `packages` namespaces in `adt/index.ts`.\nexport * from './schema';\nexport interface GctsContract {\n repository: GctsRepositoryContract;\n branches: GctsBranchesContract;\n commits: GctsCommitsContract;\n config: GctsConfigContract;\n}\n\nexport const gctsContract: GctsContract = {\n repository,\n branches,\n commits,\n config,\n};\nexport type { RepositoryContract as GctsRepositoryContract } from './repository';\nexport type { BranchesContract as GctsBranchesContract } from './branches';\nexport type { CommitsContract as GctsCommitsContract } from './commits';\nexport type { ConfigContract as GctsConfigContract } from './config';\n","/**\n * ADT Behavior Definition (BDEF) Contract\n *\n * Endpoint: /sap/bc/adt/bo/behaviordefinitions/{name}\n * /sap/bc/adt/bo/behaviordefinitions/{name}/source/main\n *\n * Object type: BDEF/BDO\n * Content-Type: application/vnd.sap.adt.blues.v1+xml\n *\n * SAP wraps BDEF metadata in the shared `blue:blueSource` wrapper\n * (namespace http://www.sap.com/wbobj/blue) that extends\n * abapsource:AbapSourceMainObject — the same envelope used by\n * DDIC TABL/Structure responses. The BDEF source (`.abdl`) is\n * served as text/plain via `source/main`.\n *\n * Reference: sapcli `sap/adt/objects.py` (class BehaviorDefinition).\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * BDEF response type — re-used `blueSource` wrapper (same as TABL/STRUCT).\n * Consumers (ADK, MCP, CLI) import this alias instead of blueSource\n * to make the intent explicit.\n */\nexport type BehaviorDefinitionResponse = InferTypedSchema<\n typeof blueSourceSchema\n>;\n\n/**\n * /sap/bc/adt/bo/behaviordefinitions\n * Full CRUD operations for ABAP Behavior Definitions (RAP).\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put (text/plain .abdl)\n */\nexport const behaviordefinitionsContract = crud({\n basePath: '/sap/bc/adt/bo/behaviordefinitions',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\n/** Type alias for the BDEF contract */\nexport type BehaviordefinitionsContract = typeof behaviordefinitionsContract;\n","/**\n * ADT Business Object (BO) Contracts\n *\n * Namespace: /sap/bc/adt/bo/...\n *\n * Currently hosts:\n * - /sap/bc/adt/bo/behaviordefinitions (BDEF — RAP behavior definition)\n */\n\nexport {\n behaviordefinitionsContract,\n type BehaviordefinitionsContract,\n type BehaviorDefinitionResponse,\n} from './behaviordefinitions';\n\nimport { behaviordefinitionsContract } from './behaviordefinitions';\n\n/**\n * BO Contract type definition\n */\nexport interface BoContract {\n behaviordefinitions: typeof behaviordefinitionsContract;\n}\n\nexport const boContract: BoContract = {\n behaviordefinitions: behaviordefinitionsContract,\n};\n","/**\n * ADT RAP Service Binding (SRVB) Contract\n *\n * Endpoint: /sap/bc/adt/businessservices/bindings\n * Content-Type: application/vnd.sap.adt.businessservices.servicebinding.v2+xml\n * Object type: SRVB/SVB\n *\n * RAP Service Binding — binds a Service Definition (SRVD) to a runtime\n * protocol (OData V2/V4, INA, SQL). Unlike BDEF/SRVD, SRVB is **metadata\n * only** — there is no `.abdl`/`.asrvd`-style source text. The binding\n * XML carries the service + protocol references.\n *\n * Extra operations vs plain `crud()`:\n * - publish → POST {basePath}/{name}/publishedstates\n * - unpublish → DELETE {basePath}/{name}/publishedstates\n *\n * Reference: abapGit handler zcl_abapgit_object_srvb.\n */\n\nimport { http } from '@abapify/speci/rest';\nimport type { RestEndpointDescriptor } from '@abapify/speci/rest';\nimport { crud, type CrudContract } from '../../helpers/crud';\nimport {\n servicebinding as servicebindingSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\nexport type ServiceBindingResponse = InferTypedSchema<\n typeof servicebindingSchema\n>;\n\nconst basePath = '/sap/bc/adt/businessservices/bindings';\nconst nameTransform = (n: string) => encodeURIComponent(n.toLowerCase());\n\nconst baseContract = crud({\n basePath,\n schema: servicebindingSchema,\n contentType: 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml',\n accept: 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml',\n nameTransform,\n});\n\n/**\n * Publish/unpublish extension for SRVB.\n *\n * - publish: POST {basePath}/{name}/publishedstates\n * Activates the binding in the SAP Gateway.\n * - unpublish: DELETE {basePath}/{name}/publishedstates\n * Deactivates the binding.\n */\nexport const bindingsContract: CrudContract<typeof servicebindingSchema> & {\n publish: (\n name: string,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n unpublish: (\n name: string,\n ) => RestEndpointDescriptor<'DELETE', string, never, { 204: undefined }>;\n} = {\n ...baseContract,\n publish: (name: string) =>\n http.post(`${basePath}/${nameTransform(name)}/publishedstates`, {\n responses: { 200: undefined },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n }),\n unpublish: (name: string) =>\n http.delete(`${basePath}/${nameTransform(name)}/publishedstates`, {\n responses: { 204: undefined },\n headers: { Accept: 'application/json' },\n }),\n};\n\nexport type BindingsContract = typeof bindingsContract;\n","/**\n * ADT Business Services Contracts\n *\n * Namespace: /sap/bc/adt/businessservices/...\n *\n * Currently hosts:\n * - /sap/bc/adt/businessservices/bindings (SRVB — RAP service binding)\n */\n\nexport {\n bindingsContract,\n type BindingsContract,\n type ServiceBindingResponse,\n} from './bindings';\n\nimport { bindingsContract } from './bindings';\n\n/**\n * Business Services Contract type definition\n */\nexport interface BusinessservicesContract {\n bindings: typeof bindingsContract;\n}\n\nexport const businessservicesContract: BusinessservicesContract = {\n bindings: bindingsContract,\n};\n","/**\n * ADT BAdI / Enhancement Implementation (ENHO) Contract\n *\n * Endpoints:\n * /sap/bc/adt/enhancements/enhoxhh/{name}\n * /sap/bc/adt/enhancements/enhoxhh/{name}/source/main\n *\n * Object type: ENHO/XHH (enhancement implementation, BAdI container)\n * Content-Type: application/vnd.sap.adt.enhancements.enhoxhh.v1+xml\n *\n * SAP wraps the enhancement implementation in an\n * `enh:enhancementImplementation` element extending\n * `adtcore:AdtMainObject`. The BAdI implementations themselves live\n * inside the text payload served via `source/main`.\n *\n * The full XSD at `packages/adt-schemas/.xsd/sap/enhancements.xsd`\n * models the heavyweight emf tree (sourceCodePlugin, BAdI entries,\n * etc.). For CLI / MCP use we only need the AdtMainObject envelope —\n * same pattern as bdef's `blueSource` wrapper.\n *\n * sapcli reference: `sap/cli/badi.py`. In sapcli, `sap badi` lists the\n * BAdIs carried by a given Enhancement Implementation name (`-i` flag).\n */\n\nimport { crud } from '../../helpers/crud';\nimport { badi as badiSchema, type InferTypedSchema } from '../../schemas';\n\n/** BAdI (ENHO) GET response shape. */\nexport type BadiResponse = InferTypedSchema<typeof badiSchema>;\n\n/**\n * /sap/bc/adt/enhancements/enhoxhh\n *\n * CRUD + lock/unlock + source/main (`/source/main` text body).\n */\nexport const enhoxhhContract = crud({\n basePath: '/sap/bc/adt/enhancements/enhoxhh',\n schema: badiSchema,\n contentType: 'application/vnd.sap.adt.enhancements.enhoxhh.v1+xml',\n accept: 'application/vnd.sap.adt.enhancements.enhoxhh.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the BAdI/ENHO contract */\nexport type EnhoxhhContract = typeof enhoxhhContract;\n","/**\n * ADT Enhancement Framework Contracts\n *\n * Namespace: /sap/bc/adt/enhancements/...\n *\n * Currently hosts:\n * - /sap/bc/adt/enhancements/enhoxhh (ENHO/XHH — BAdI impl container)\n *\n * Other enhancement sub-types (enhoxh, enhoxhb, enhsxs, enhsxsb) are\n * documented in the discovery service but not yet modelled — add as\n * demand arises.\n */\n\nexport {\n enhoxhhContract,\n type EnhoxhhContract,\n type BadiResponse,\n} from './enhoxhh';\n\nimport { enhoxhhContract } from './enhoxhh';\n\n/** Enhancement-area contract shape. */\nexport interface EnhancementsContract {\n enhoxhh: typeof enhoxhhContract;\n}\n\nexport const enhancementsContract: EnhancementsContract = {\n enhoxhh: enhoxhhContract,\n};\n","/**\n * Fiori Launchpad (FLP) — JSON schemas for the Page Builder OData surface.\n *\n * IMPORTANT: Unlike most contracts in this package, FLP is NOT served from\n * `/sap/bc/adt/*`. The epic E14 originally pointed at `/sap/bc/adt/uifsa/`,\n * but probing BTP Trial shows that namespace does not exist. The real FLP\n * inventory endpoints live on the OData service\n * `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/` (and the customizing twin\n * `PAGE_BUILDER_CUST/`). sapcli's `sap/flp/service.py` uses the same\n * OData service via pyodata — we follow that precedent.\n *\n * To make OData JSON responses play nicely with the existing adapter we\n * request `?$format=json`. The server wraps all feeds in `{ d: { results: [] } }`\n * and single entities in `{ d: {…} }`.\n *\n * Shapes are intentionally permissive (extra keys ignored, most fields\n * optional) because the Page Builder service returns a lot of navigation\n * `__deferred` links and internal metadata that consumers don't care about.\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n// ── Primitives ─────────────────────────────────────────────────────────────\n\n/** An OData `Catalogs` entity — one FLP catalog. */\nexport interface FlpCatalog {\n id?: string;\n type?: string;\n domainId?: string;\n title?: string;\n systemAlias?: string;\n originalLanguage?: string;\n scope?: string;\n /** SAP returns this as a zero-padded string (\"0001\"), not a number. */\n chipCount?: string;\n isReadOnly?: string;\n outdated?: string;\n [extra: string]: unknown;\n}\n\n/** An OData `Pages` entity — a launchpad group / page. */\nexport interface FlpGroup {\n id?: string;\n title?: string;\n catalogId?: string;\n layout?: string;\n originalLanguage?: string;\n isCatalogPage?: string;\n chipInstanceCount?: string;\n isPersLocked?: string;\n isReadOnly?: string;\n scope?: string;\n /** SAP serialises dates as `/Date(<ms>)/`. */\n updated?: string;\n outdated?: string;\n [extra: string]: unknown;\n}\n\n/** An OData `Chips` entity — a tile definition or instance. */\nexport interface FlpTile {\n id?: string;\n title?: string;\n description?: string;\n configuration?: string;\n url?: string;\n baseChipId?: string;\n catalogId?: string;\n catalogPageChipInstanceId?: string;\n referenceChipId?: string;\n isReadOnly?: string;\n [extra: string]: unknown;\n}\n\n// ── OData envelope types ───────────────────────────────────────────────────\n\n/** OData v2 feed: `{ d: { results: T[] } }`. */\nexport interface ODataFeed<T> {\n d?: {\n results?: T[];\n [extra: string]: unknown;\n };\n [extra: string]: unknown;\n}\n\n/** OData v2 single entity: `{ d: T }`. */\nexport interface ODataEntity<T> {\n d?: T;\n [extra: string]: unknown;\n}\n\nexport type FlpCatalogListResponse = ODataFeed<FlpCatalog>;\nexport type FlpCatalogResponse = ODataEntity<FlpCatalog>;\nexport type FlpGroupListResponse = ODataFeed<FlpGroup>;\nexport type FlpGroupResponse = ODataEntity<FlpGroup>;\nexport type FlpTileListResponse = ODataFeed<FlpTile>;\nexport type FlpTileResponse = ODataEntity<FlpTile>;\n\n// ── Schema helpers ─────────────────────────────────────────────────────────\n\nfunction jsonSchema<T>(): Serializable<T> {\n return {\n _infer: undefined as unknown as T,\n parse: (raw: string): T => {\n if (raw == null || raw === '') return {} as T;\n return JSON.parse(raw) as T;\n },\n build: (data: T): string => JSON.stringify(data),\n };\n}\n\n// ── Exported schemas ───────────────────────────────────────────────────────\n\nexport const flpCatalogListSchema = jsonSchema<FlpCatalogListResponse>();\nexport const flpCatalogSchema = jsonSchema<FlpCatalogResponse>();\nexport const flpGroupListSchema = jsonSchema<FlpGroupListResponse>();\nexport const flpGroupSchema = jsonSchema<FlpGroupResponse>();\nexport const flpTileListSchema = jsonSchema<FlpTileListResponse>();\nexport const flpTileSchema = jsonSchema<FlpTileResponse>();\n\n// ── Result normalisers ─────────────────────────────────────────────────────\n\n/** Extract `d.results` from an OData feed response. */\nexport function normalizeOdataFeed<T>(response: ODataFeed<T>): T[] {\n return response?.d?.results ?? [];\n}\n\n/** Extract `d` from an OData single-entity response. */\nexport function normalizeOdataEntity<T>(\n response: ODataEntity<T>,\n): T | undefined {\n return response?.d;\n}\n","/**\n * Fiori Launchpad catalogs — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Catalogs`.\n *\n * Read-only in v1 (E14 scope). Create/delete are handled by\n * `sap/flp/service.py` in sapcli but are out of scope here.\n */\n\nimport { http } from '../../base';\nimport {\n flpCatalogListSchema,\n flpCatalogSchema,\n flpTileListSchema,\n} from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Catalogs';\n\n/** Encode an OData entity key for use in the URL segment `Catalogs('<id>')`. */\nfunction encodeKey(id: string): string {\n // SAP OData v2 requires single quotes around string keys and percent-\n // encoding of unsafe characters. `encodeURIComponent` handles the rest.\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all catalogs. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpCatalogListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single catalog by its ID (e.g. `X-SAP-UI2-CATALOGPAGE:SAP_A4C…`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpCatalogSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** List tiles (chips) that belong to a specific catalog. */\nconst tiles = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})/Chips`, {\n query: { $format: 'json' },\n responses: { 200: flpTileListSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const catalogs = {\n list,\n get,\n tiles,\n};\n\nexport type CatalogsContract = typeof catalogs;\n","/**\n * Fiori Launchpad groups / pages — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Pages`.\n *\n * Read-only in v1 (E14 scope).\n */\n\nimport { http } from '../../base';\nimport { flpGroupListSchema, flpGroupSchema } from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Pages';\n\nfunction encodeKey(id: string): string {\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all pages / groups. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpGroupListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single page / group by ID (e.g. `/UI2/SAMPLE_PAGE`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpGroupSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const groups = {\n list,\n get,\n};\n\nexport type GroupsContract = typeof groups;\n","/**\n * Fiori Launchpad tiles (CHIPs) — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Chips`.\n *\n * A \"tile\" in FLP is actually a CHIP (Collaborative Human Interface Part)\n * instance attached to a catalog / page. The Page Builder OData service\n * exposes them through the `Chips` entity set.\n *\n * Read-only in v1 (E14 scope).\n */\n\nimport { http } from '../../base';\nimport { flpTileListSchema, flpTileSchema } from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Chips';\n\nfunction encodeKey(id: string): string {\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all tiles known to the system. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpTileListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single tile by its CHIP ID (e.g. `X-SAP-UI2-CHIP:/UI2/STATIC_APPLAUNCHER`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpTileSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const tiles = {\n list,\n get,\n};\n\nexport type TilesContract = typeof tiles;\n","/**\n * FLP (Fiori Launchpad) contracts — `client.adt.flp.*`.\n *\n * NOTE: The directory is named `uifsa` to match the epic spec\n * (E14 pointed at `/sap/bc/adt/uifsa/`), but the actual endpoints\n * live on the Page Builder OData service (`/sap/opu/odata/UI2/\n * PAGE_BUILDER_PERS/`). The namespace on the client is `flp` —\n * matching sapcli's user-facing command name.\n */\n\nimport { catalogs, type CatalogsContract } from './catalogs';\nimport { groups, type GroupsContract } from './groups';\nimport { tiles, type TilesContract } from './tiles';\n\nexport * from './schema';\nexport interface FlpContract {\n catalogs: CatalogsContract;\n groups: GroupsContract;\n tiles: TilesContract;\n}\n\nexport const flpContract: FlpContract = {\n catalogs,\n groups,\n tiles,\n};\nexport type { GroupsContract } from './groups';\nexport type { TilesContract } from './tiles';\nexport type { CatalogsContract } from './catalogs';\n","import type { Serializable } from '@abapify/speci/rest';\n\nexport interface CompletionProposal {\n id?: string;\n kind?: string;\n label?: string;\n insertText?: string;\n [extra: string]: unknown;\n}\n\nexport interface CompletionResponse {\n proposals?: CompletionProposal[];\n [extra: string]: unknown;\n}\n\nexport interface CompletionQuery {\n uri: string;\n line: number;\n column: number;\n}\n\nexport interface CompletionRequestBody {\n source?: string;\n}\n\nfunction parseJsonOrRaw(raw: string): CompletionResponse {\n if (!raw) return {};\n\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as CompletionResponse;\n }\n\n return {\n raw,\n };\n}\n\nexport const completionResponseSchema: Serializable<CompletionResponse> = {\n _infer: undefined as unknown as CompletionResponse,\n parse: parseJsonOrRaw,\n build: (value: CompletionResponse): string => JSON.stringify(value),\n};\n\nexport const completionRequestSchema: Serializable<CompletionRequestBody> = {\n _infer: undefined as unknown as CompletionRequestBody,\n parse: (raw: string): CompletionRequestBody => {\n if (!raw) return {};\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as CompletionRequestBody;\n }\n\n return {\n source: raw,\n };\n },\n build: (value: CompletionRequestBody): string => JSON.stringify(value),\n};\n","/**\n * /sap/bc/adt/codeassistance/completion\n */\n\nimport { contract, http } from '../../base';\nimport {\n completionRequestSchema,\n completionResponseSchema,\n type CompletionQuery,\n} from './schema';\n\nexport const completion = contract({\n post: (query: CompletionQuery) =>\n http.post('/sap/bc/adt/codeassistance/completion', {\n body: completionRequestSchema,\n responses: { 200: completionResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n query,\n }),\n});\n\nexport type CompletionContract = typeof completion;\n","import { completion, type CompletionContract } from './completion';\n\nexport * from './completion';\nexport * from './schema';\n\nexport interface CodeassistanceContract {\n completion: CompletionContract;\n}\n\nexport const codeassistanceContract: CodeassistanceContract = {\n completion,\n};\n","/**\n * ADT vit/wb — Basic Object Properties (classic Workbench metadata).\n *\n * Endpoint template (from ADT discovery):\n * GET /sap/bc/adt/vit/wb/object_type/{type}/object_name/{name}\n *\n * Accept: application/vnd.sap.adt.basic.object.properties+xml\n * Response: adtcore:mainObject\n *\n * Classic BAdI uses vit types:\n * sxsdxd — BAdI definition (repository type SXSD/XD)\n * sxcixi — BAdI implementation (repository type SXCI/XI)\n */\n\nimport { contract, http } from '../../../base';\nimport { adtcore, type InferTypedSchema } from '../../../schemas';\n\nexport const BASIC_OBJECT_PROPERTIES_MIME =\n 'application/vnd.sap.adt.basic.object.properties+xml';\n\n/** vit/wb object_type segment for classic BAdI definitions. */\nexport const CLASSIC_BADI_DEFINITION_VIT_TYPE = 'sxsdxd';\n\n/** vit/wb object_type segment for classic BAdI implementations. */\nexport const CLASSIC_BADI_IMPLEMENTATION_VIT_TYPE = 'sxcixi';\n\nexport type BasicObjectPropertiesResponse = InferTypedSchema<typeof adtcore>;\n\nfunction objectPropertiesPath(vitType: string, objectName: string): string {\n const normalizedType = vitType.trim().toLowerCase();\n const normalizedName = objectName.trim().toLowerCase();\n return `/sap/bc/adt/vit/wb/object_type/${encodeURIComponent(normalizedType)}/object_name/${encodeURIComponent(normalizedName)}`;\n}\n\nfunction getByVitType(vitType: string) {\n return (objectName: string) =>\n http.get(objectPropertiesPath(vitType, objectName), {\n responses: { 200: adtcore },\n headers: { Accept: BASIC_OBJECT_PROPERTIES_MIME },\n });\n}\n\n/**\n * /sap/bc/adt/vit/wb/object_type/{type}/object_name/{name}\n */\nexport const vitWbObjectPropertiesContract = contract({\n /** Generic read for any vit/wb object_type segment. */\n get: (params: { vitType: string; objectName: string }) =>\n http.get(objectPropertiesPath(params.vitType, params.objectName), {\n responses: { 200: adtcore },\n headers: { Accept: BASIC_OBJECT_PROPERTIES_MIME },\n }),\n\n /** Classic BAdI definition (SXSD/XD). */\n getDefinition: getByVitType(CLASSIC_BADI_DEFINITION_VIT_TYPE),\n\n /** Classic BAdI implementation (SXCI/XI). */\n getImplementation: getByVitType(CLASSIC_BADI_IMPLEMENTATION_VIT_TYPE),\n});\n\nexport type VitWbObjectPropertiesContract =\n typeof vitWbObjectPropertiesContract;\n","/**\n * ADT vit (Virtual Integration Technology) contracts.\n */\n\nexport * from './wb/objectproperties';\n\nimport {\n vitWbObjectPropertiesContract,\n type VitWbObjectPropertiesContract,\n} from './wb/objectproperties';\n\nexport interface VitContract {\n wb: {\n objectProperties: VitWbObjectPropertiesContract;\n };\n}\n\nexport const vitContract: VitContract = {\n wb: {\n objectProperties: vitWbObjectPropertiesContract,\n },\n};\n","/**\n * ADT Contracts - Aggregated\n */\n\nexport * from './cts';\nexport * from './atc';\nexport * from './aunit';\nexport * from './oo';\nexport * from './discovery';\nexport * from './packages';\nexport * from './core';\nexport * from './repository';\nexport * from './programs';\nexport * from './functions';\nexport * from './ddic';\nexport * from './system';\nexport * from './checkruns';\nexport * from './activation';\nexport * from './datapreview';\nexport * from './runtime';\nexport * from './gcts';\nexport * from './bo';\nexport * from './businessservices';\nexport * from './enhancements';\nexport * from './uifsa';\nexport * from './codeassistance';\nexport * from './vit';\n\n/**\n * Complete ADT Contract\n */\nimport { ctsContract, type CtsContract } from './cts';\nimport { atcContract, type AtcContract } from './atc';\nimport { aunitContract, type AunitContract } from './aunit';\nimport { ooContract, type OoContract } from './oo';\nimport { discoveryContract, type DiscoveryContract } from './discovery';\nimport { packagesContract, type PackagesContract } from './packages';\nimport { coreContract, type CoreContract } from './core';\nimport { repositoryContract, type RepositoryContract } from './repository';\nimport {\n programsModuleContract,\n type ProgramsModuleContract,\n} from './programs';\nimport { functionsContract, type FunctionsContract } from './functions';\nimport { ddicContract, type DdicContract } from './ddic';\nimport { systemContract, type SystemContract } from './system';\nimport { checkrunsContract, type CheckrunsContract } from './checkruns';\nimport { activationContract, type ActivationContract } from './activation';\nimport { datapreviewContract, type DatapreviewContract } from './datapreview';\nimport { runtimeContract, type RuntimeContract } from './runtime';\nimport { gctsContract, type GctsContract } from './gcts';\nimport { boContract, type BoContract } from './bo';\nimport {\n businessservicesContract,\n type BusinessservicesContract,\n} from './businessservices';\nimport {\n enhancementsContract,\n type EnhancementsContract,\n} from './enhancements';\nimport { flpContract, type FlpContract } from './uifsa';\nimport {\n codeassistanceContract,\n type CodeassistanceContract,\n} from './codeassistance';\nimport { vitContract, type VitContract } from './vit';\n\n/**\n * Explicit type to avoid TS7056 \"inferred type exceeds maximum length\"\n */\nexport interface AdtContract {\n cts: CtsContract;\n atc: AtcContract;\n aunit: AunitContract;\n oo: OoContract;\n discovery: DiscoveryContract;\n packages: PackagesContract;\n core: CoreContract;\n repository: RepositoryContract;\n programs: ProgramsModuleContract;\n functions: FunctionsContract;\n ddic: DdicContract;\n system: SystemContract;\n checkruns: CheckrunsContract;\n activation: ActivationContract;\n datapreview: DatapreviewContract;\n runtime: RuntimeContract;\n gcts: GctsContract;\n bo: BoContract;\n businessservices: BusinessservicesContract;\n enhancements: EnhancementsContract;\n flp: FlpContract;\n codeassistance: CodeassistanceContract;\n vit: VitContract;\n}\n\nexport const adtContract: AdtContract = {\n cts: ctsContract,\n atc: atcContract,\n aunit: aunitContract,\n oo: ooContract,\n discovery: discoveryContract,\n packages: packagesContract,\n core: coreContract,\n repository: repositoryContract,\n programs: programsModuleContract,\n functions: functionsContract,\n ddic: ddicContract,\n system: systemContract,\n checkruns: checkrunsContract,\n activation: activationContract,\n datapreview: datapreviewContract,\n runtime: runtimeContract,\n gcts: gctsContract,\n bo: boContract,\n businessservices: businessservicesContract,\n enhancements: enhancementsContract,\n flp: flpContract,\n codeassistance: codeassistanceContract,\n vit: vitContract,\n};\n\n// Import RestClient from base for client type definition\nimport type { RestClient } from '../base';\n\n/**\n * Type for the ADT client instance\n * Use this when you need to type a variable holding the client\n */\nexport type AdtClientType = RestClient<AdtContract>;\n","/**\n * Base contract utilities\n *\n * Re-exports speci utilities for contract definitions and client creation.\n *\n * This module serves as the abstraction boundary - consumers (like adt-client)\n * should import from here, not directly from speci. This allows swapping the\n * underlying implementation (e.g., speci → ts-rest) without impacting consumers.\n *\n * Schemas from ./schemas are already speci-compatible\n * (they have parse/build methods), so no wrapping is needed.\n */\n\n// Contract definition utilities\nexport { http, type RestContract } from '@abapify/speci/rest';\n\n// CRUD helper for repository objects\n// Note: SourceType and IncludeType were removed - crud() now accepts generic strings\n// and callers define valid values based on SAP XSD schema for each object type\nexport {\n crud,\n repo,\n type CrudOptions,\n type CrudContract,\n type CrudContractBase,\n type CrudQueryParams,\n type LockOptions,\n type UnlockOptions,\n type ObjectStructureOptions,\n type SourcePutOptions,\n type SourceOperations,\n type SourcesContract,\n type IncludesContractSkeleton,\n} from './helpers/crud';\n\n// Client creation utilities (for consumers like adt-client)\nimport {\n createClient as speciCreateClient,\n type HttpAdapter,\n} from '@abapify/speci/rest';\n\n// Import contract and type for client creation\nimport { adtContract, type AdtContract } from './adt';\n\n/**\n * Create a typed ADT REST client.\n *\n * Contract is already known - just pass adapter options.\n */\nexport function createAdtClient(options: {\n baseUrl: string;\n adapter: HttpAdapter;\n}): RestClient<AdtContract> {\n return speciCreateClient(adtContract, options);\n}\n\n// Types needed by HTTP adapter implementations\nexport type {\n HttpAdapter,\n HttpRequestOptions,\n RestClient,\n Serializable,\n RestEndpointDescriptor,\n} from '@abapify/speci/rest';\n\n// Type utilities for extracting types from contracts\nexport type {\n ExtractResponse,\n InferSuccessResponse,\n} from '@abapify/speci/rest';\n\n// Import RestClient for use in return type\nimport type { RestClient } from '@abapify/speci/rest';\n\n/**\n * Identity function for contract definitions.\n *\n * Schemas from ./schemas are already speci-compatible,\n * so this is just a pass-through for type safety and documentation.\n *\n * @example\n * ```ts\n * import { configurations } from './schemas';\n * import { contract, http } from '../base';\n *\n * export const myContract = contract({\n * get: () => http.get('/endpoint', {\n * responses: { 200: configurations },\n * }),\n * });\n * // Type is automatically inferred from configurations.parse() return type\n * ```\n */\nexport function contract<T extends Record<string, any>>(definition: T): T {\n return definition;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-DXdI_HUi.mjs","names":["http","configurationsSchema","configurationSchema","http","http","http","http","http","http","http","classesSchema","interfacesSchema","http","http","http","httpMethod","httpSchema","http","http","http","http","http","http","groups","contentType","accept","basePath","http","fmodulesSchema","domainSchema","dataelementWrapperSchema","basePath","contentType","accept","blueSourceSchema","basePath","blueSourceSchema","basePath","http","tabletypeSchema","ddlSourceSchema","dclSourceSchema","ddlxSourceSchema","blueSourceSchema","baseContract","blueSourceSchema","dtebSourceSchema","srvdSourceSchema","http","http","http","http","http","XML_CONTENT_TYPE","http","http","parseJsonOrRaw","http","http","jsonSchema","BASE","list","http","get","create","del","base","list","http","del","http","get","http","blueSourceSchema","servicebindingSchema","badiSchema","BASE","encodeKey","list","http","get","tiles","BASE","encodeKey","list","http","get","http","http","http","speciCreateClient"],"sources":["../src/helpers/text-schema.ts","../src/helpers/crud.ts","../src/adt/cts/transportrequests/valuehelp/attribute.ts","../src/adt/cts/transportrequests/valuehelp/target.ts","../src/adt/cts/transportrequests/valuehelp/ctsproject.ts","../src/adt/cts/transportrequests/valuehelp/object.ts","../src/adt/cts/transportrequests/valuehelp/index.ts","../src/adt/cts/transportrequests/reference.ts","../src/adt/cts/transportrequests/searchconfiguration/configurations.ts","../src/adt/cts/transportrequests/searchconfiguration/metadata.ts","../src/adt/cts/transportrequests/searchconfiguration/index.ts","../src/adt/cts/transportrequests/change-owner-schema.ts","../src/adt/cts/transportrequests/add-task-schema.ts","../src/adt/cts/transportrequests/useraction.ts","../src/adt/cts/transportrequests/index.ts","../src/adt/cts/transports.ts","../src/adt/cts/transportchecks.ts","../src/adt/cts/index.ts","../src/generated/adt/sap/bc/adt/atc/worklists.ts","../src/generated/adt/sap/bc/adt/atc/results.ts","../src/adt/atc/index.ts","../src/adt/aunit/index.ts","../src/adt/oo/classes.ts","../src/adt/oo/interfaces.ts","../src/adt/oo/classrun.ts","../src/adt/oo/index.ts","../src/adt/discovery/index.ts","../src/adt/packages/index.ts","../src/adt/core/http/sessions.ts","../src/adt/core/http/systeminformation.ts","../src/adt/core/http/index.ts","../src/adt/core/index.ts","../src/adt/repository/informationsystem/search.ts","../src/adt/repository/informationsystem/usagereferences.ts","../src/adt/repository/sourceversions.ts","../src/adt/repository/informationsystem/objectproperties.ts","../src/adt/repository/informationsystem/index.ts","../src/adt/repository/objectstructure.ts","../src/adt/repository/index.ts","../src/adt/programs/programs.ts","../src/adt/programs/includes.ts","../src/adt/programs/index.ts","../src/adt/functions/groups.ts","../src/adt/functions/fmodules.ts","../src/adt/functions/index.ts","../src/adt/ddic/domains.ts","../src/adt/ddic/dataelements.ts","../src/adt/ddic/structures.ts","../src/adt/ddic/tables.ts","../src/adt/ddic/tablesettings.ts","../src/adt/ddic/tabletypes.ts","../src/adt/ddic/ddl/sources.ts","../src/adt/ddic/ddl/index.ts","../src/adt/ddic/dcl/sources.ts","../src/adt/ddic/dcl/index.ts","../src/adt/ddic/ddlx/sources.ts","../src/adt/ddic/ddlx/index.ts","../src/adt/ddic/dsfd/sources.ts","../src/adt/ddic/dsfd/index.ts","../src/adt/ddic/dsfi/index.ts","../src/adt/ddic/dteb/sources.ts","../src/adt/ddic/dteb/index.ts","../src/adt/ddic/srvd/sources.ts","../src/adt/ddic/srvd/index.ts","../src/adt/ddic/index.ts","../src/adt/system/users.ts","../src/adt/system/security/pses.ts","../src/adt/system/index.ts","../src/adt/checkruns/index.ts","../src/adt/activation/index.ts","../src/adt/datapreview/schema.ts","../src/adt/datapreview/freestyle.ts","../src/adt/datapreview/index.ts","../src/adt/runtime/traces/coverage/request.ts","../src/adt/runtime/traces/coverage/measurements.ts","../src/adt/runtime/traces/coverage/statements.ts","../src/adt/runtime/traces/coverage/index.ts","../src/adt/runtime/schema.ts","../src/adt/runtime/traces/profile.ts","../src/adt/runtime/traces/index.ts","../src/adt/runtime/dumps.ts","../src/adt/runtime/index.ts","../src/adt/gcts/schema.ts","../src/adt/gcts/repository.ts","../src/adt/gcts/branches.ts","../src/adt/gcts/commits.ts","../src/adt/gcts/config.ts","../src/adt/gcts/index.ts","../src/adt/bo/behaviordefinitions.ts","../src/adt/bo/index.ts","../src/adt/businessservices/bindings.ts","../src/adt/businessservices/index.ts","../src/adt/enhancements/enhoxhh.ts","../src/adt/enhancements/index.ts","../src/adt/uifsa/schema.ts","../src/adt/uifsa/catalogs.ts","../src/adt/uifsa/groups.ts","../src/adt/uifsa/tiles.ts","../src/adt/uifsa/index.ts","../src/adt/codeassistance/schema.ts","../src/adt/codeassistance/completion.ts","../src/adt/codeassistance/index.ts","../src/adt/vit/wb/objectproperties.ts","../src/adt/vit/index.ts","../src/adt/index.ts","../src/base.ts"],"sourcesContent":["/**\n * Plain-text body schema helper\n *\n * Speci's REST client only forwards request bodies when the declared body is an\n * Inferrable<T> (has an `_infer` marker). Endpoints that send text/plain (e.g.\n * ABAP source code) need a minimal Serializable<string> wrapper so speci routes\n * the body through instead of silently dropping it.\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n/**\n * Serializable<string> for text/plain request/response bodies.\n *\n * `parse` coerces the raw response to string; `build` returns the string as-is.\n * The `_infer` marker is the key piece — speci checks for it with `'_infer' in value`\n * to decide whether the descriptor carries a body schema.\n */\nexport const textPlain = {\n parse: (x: unknown) => String(x),\n build: (x: string) => x,\n _infer: undefined as unknown as string,\n} satisfies Serializable<string>;\n\nexport type TextPlainSchema = typeof textPlain;\n","/**\n * CRUD Contract Helper\n *\n * Generates full CRUD contracts for ADT repository objects following the\n * standard SAP ADT URL template pattern:\n *\n * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action}\n *\n * @example\n * ```ts\n * import { crud } from '../helpers/crud';\n * import { classes } from '../schemas';\n *\n * export const classesContract = crud({\n * basePath: '/sap/bc/adt/oo/classes',\n * schema: classes,\n * contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n * });\n *\n * // Usage:\n * // classesContract.get('zcl_my_class')\n * // classesContract.post({ corrNr: 'DEVK900001' })\n * // classesContract.put('zcl_my_class', { lockHandle: '...' })\n * // classesContract.delete('zcl_my_class')\n * ```\n */\n\nimport { http } from '@abapify/speci/rest';\nimport type { Serializable, RestEndpointDescriptor } from '@abapify/speci/rest';\nimport { textPlain } from './text-schema';\n\n/**\n * Common ADT query parameters for CRUD operations\n */\nexport interface CrudQueryParams {\n /** Transport/correction number */\n corrNr?: string;\n /** Lock handle from LOCK action */\n lockHandle?: string;\n /** Object version (active/inactive) */\n version?: string;\n /** Access mode (MODIFY, SOURCE, etc.) */\n accessMode?: string;\n /** Action (LOCK, UNLOCK, ACTIVATE, etc.) */\n _action?: string;\n}\n\n// NOTE: SourceType and IncludeType are intentionally generic strings.\n// The specific valid values are defined by the caller (e.g., classes.ts)\n// based on the SAP XSD schema for each object type.\n\n/**\n * Query options for source/include PUT operations\n */\nexport interface SourcePutOptions {\n /** Lock handle from previous LOCK action */\n lockHandle?: string;\n /** Transport/correction number */\n corrNr?: string;\n}\n\n/**\n * Source operations contract\n */\nexport interface SourceContract {\n get: (\n name: string,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n}\n\n/**\n * Options for creating a CRUD contract\n */\nexport interface CrudOptions<S extends Serializable<unknown>> {\n /** Base path for the resource (e.g., '/sap/bc/adt/oo/classes') */\n basePath: string;\n /** Schema for parsing/building XML */\n schema: S;\n /** Content-Type header for POST/PUT (single specific version, e.g., 'application/vnd.sap.adt.oo.classes.v4+xml') */\n contentType: string;\n /** Accept header for GET (multi-version, newest first). Falls back to contentType if not provided. */\n accept?: string;\n /** Optional: Transform object name for URL (default: lowercase) */\n nameTransform?: (name: string) => string;\n /** Optional: Source endpoints to generate (e.g., ['main']) */\n sources?: readonly string[];\n /** Optional: Include endpoints to generate (e.g., ['definitions', 'implementations', 'testclasses']) */\n includes?: readonly string[];\n}\n\n/**\n * Options for lock operation\n */\nexport interface LockOptions {\n /** Transport/correction number */\n corrNr?: string;\n /** Access mode (default: MODIFY) */\n accessMode?: 'MODIFY' | 'SOURCE';\n}\n\n/**\n * Options for unlock operation\n */\nexport interface UnlockOptions {\n /** Lock handle from previous LOCK action */\n lockHandle: string;\n}\n\n/**\n * Options for objectstructure operation\n */\nexport interface ObjectStructureOptions {\n /** Object version (active/inactive) */\n version?: 'active' | 'inactive';\n /** Include short descriptions */\n withShortDescriptions?: boolean;\n}\n\n/**\n * Base CRUD contract type (always present)\n */\nexport interface CrudContractBase<S extends Serializable<unknown>> {\n /** The schema used for XML serialization/deserialization */\n readonly bodySchema: S;\n\n /** GET {basePath}/{name} - Retrieve object metadata */\n get: (\n name: string,\n options?: Pick<CrudQueryParams, 'version'>,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: S }>;\n\n /** POST {basePath} - Create new object */\n post: (\n options?: Pick<CrudQueryParams, 'corrNr'>,\n ) => RestEndpointDescriptor<'POST', string, S, { 200: S }>;\n\n /** PUT {basePath}/{name} - Update object */\n put: (\n name: string,\n options?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) => RestEndpointDescriptor<'PUT', string, S, { 200: S }>;\n\n /** DELETE {basePath}/{name} - Delete object */\n delete: (\n name: string,\n options?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) => RestEndpointDescriptor<'DELETE', string, never, { 204: undefined }>;\n\n /** POST {basePath}/{name}?_action=LOCK - Lock object for modification */\n lock: (\n name: string,\n options?: LockOptions,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n\n /** POST {basePath}/{name}?_action=UNLOCK - Unlock object */\n unlock: (\n name: string,\n options: UnlockOptions,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n\n /** GET {basePath}/{name}/objectstructure - Get object structure (includes, methods, etc.) */\n objectstructure: (\n name: string,\n options?: ObjectStructureOptions,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: undefined }>;\n}\n\n/**\n * Source operations (get/put for source code)\n */\nexport interface SourceOperations {\n get: (\n name: string,\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n}\n\n/**\n * Source contract - nested under 'source' property\n * Generated when sources option is provided\n */\nexport type SourcesContract<Sources extends readonly string[]> = {\n [K in Sources[number]]: SourceOperations;\n};\n\n/**\n * Includes contract - nested under 'includes' property\n * Generated when includes option is provided\n */\nexport type IncludesContractSkeleton<Includes extends readonly string[]> = {\n /** Generic get/put for any include type */\n get: (\n name: string,\n includeType: Includes[number],\n ) => RestEndpointDescriptor<'GET', string, never, { 200: string }>;\n put: (\n name: string,\n includeType: Includes[number],\n options?: SourcePutOptions,\n ) => RestEndpointDescriptor<\n 'PUT',\n string,\n Serializable<string>,\n { 200: string }\n >;\n} & {\n /** Shorthand accessors for specific includes */\n [K in Includes[number]]: SourceOperations;\n};\n\n/**\n * Full CRUD contract type with optional source and includes\n */\nexport type CrudContract<\n S extends Serializable<unknown>,\n Sources extends readonly string[] | undefined = undefined,\n Includes extends readonly string[] | undefined = undefined,\n> = CrudContractBase<S> &\n (Sources extends readonly string[]\n ? { source: SourcesContract<Sources> }\n : object) &\n (Includes extends readonly string[]\n ? { includes: IncludesContractSkeleton<Includes> }\n : object);\n\n/**\n * Create source operations for a given source type\n */\nfunction createSourceOperations(\n basePath: string,\n sourceType: string,\n nameTransform: (n: string) => string,\n): SourceOperations {\n return {\n get: (name: string) =>\n http.get(`${basePath}/${nameTransform(name)}/source/${sourceType}`, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n put: (name: string, options?: SourcePutOptions) =>\n http.put(`${basePath}/${nameTransform(name)}/source/${sourceType}`, {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n };\n}\n\n/**\n * Create include operations for a given include type\n */\nfunction createIncludeOperations(\n basePath: string,\n includeType: string,\n nameTransform: (n: string) => string,\n): SourceOperations {\n return {\n get: (name: string) =>\n http.get(`${basePath}/${nameTransform(name)}/includes/${includeType}`, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n put: (name: string, options?: SourcePutOptions) =>\n http.put(`${basePath}/${nameTransform(name)}/includes/${includeType}`, {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n };\n}\n\n/**\n * Create a full CRUD contract for an ADT repository object\n *\n * Follows the standard SAP ADT URL template pattern:\n * {basePath}/{object_name}{?corrNr,lockHandle,version,accessMode,_action}\n *\n * @example Basic CRUD\n * ```ts\n * const packagesContract = crud({\n * basePath: '/sap/bc/adt/packages',\n * schema: packages,\n * contentType: 'application/vnd.sap.adt.packages.v1+xml',\n * });\n * ```\n *\n * @example With source code support\n * ```ts\n * const interfacesContract = crud({\n * basePath: '/sap/bc/adt/oo/interfaces',\n * schema: interfaces,\n * contentType: 'application/vnd.sap.adt.oo.interfaces.v5+xml',\n * sources: ['main'],\n * });\n * // interfacesContract.source.main.get('zif_my_interface')\n * ```\n *\n * @example With includes support (classes)\n * ```ts\n * const classesContract = crud({\n * basePath: '/sap/bc/adt/oo/classes',\n * schema: classes,\n * contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n * sources: ['main'],\n * includes: ['definitions', 'implementations', 'macros'],\n * });\n * // classesContract.source.main.get('zcl_my_class')\n * // classesContract.includes.definitions.get('zcl_my_class')\n * // classesContract.includes.get('zcl_my_class', 'implementations')\n * ```\n */\nexport function crud<\n S extends Serializable<unknown>,\n const Sources extends readonly string[] | undefined = undefined,\n const Includes extends readonly string[] | undefined = undefined,\n>(\n options: CrudOptions<S> & { sources?: Sources; includes?: Includes },\n): CrudContract<S, Sources, Includes> {\n const {\n basePath,\n schema,\n contentType,\n accept = contentType,\n nameTransform = (n) => n.toLowerCase(),\n sources,\n includes,\n } = options;\n\n return {\n /** Schema for XML serialization/deserialization */\n bodySchema: schema,\n\n /**\n * GET {basePath}/{name}\n * Retrieve object metadata\n */\n get: (name: string, queryOptions?: Pick<CrudQueryParams, 'version'>) =>\n http.get(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: schema },\n headers: { Accept: accept },\n query: queryOptions?.version\n ? { version: queryOptions.version }\n : undefined,\n }),\n\n /**\n * POST {basePath}\n * Create a new object\n */\n post: (queryOptions?: Pick<CrudQueryParams, 'corrNr'>) =>\n http.post(basePath, {\n body: schema,\n responses: { 200: schema },\n headers: {\n Accept: accept,\n 'Content-Type': contentType,\n },\n query: queryOptions?.corrNr\n ? { corrNr: queryOptions.corrNr }\n : undefined,\n }),\n\n /**\n * PUT {basePath}/{name}\n * Update object metadata\n */\n put: (\n name: string,\n queryOptions?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) =>\n http.put(`${basePath}/${nameTransform(name)}`, {\n body: schema,\n responses: { 200: schema },\n headers: {\n Accept: accept,\n 'Content-Type': contentType,\n },\n query: {\n ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}),\n ...(queryOptions?.lockHandle\n ? { lockHandle: queryOptions.lockHandle }\n : {}),\n },\n }),\n\n /**\n * DELETE {basePath}/{name}\n * Delete object\n */\n delete: (\n name: string,\n queryOptions?: Pick<CrudQueryParams, 'corrNr' | 'lockHandle'>,\n ) =>\n http.delete(`${basePath}/${nameTransform(name)}`, {\n responses: { 204: undefined },\n query: {\n ...(queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : {}),\n ...(queryOptions?.lockHandle\n ? { lockHandle: queryOptions.lockHandle }\n : {}),\n },\n }),\n\n /**\n * POST {basePath}/{name}?_action=LOCK\n * Lock object for modification\n *\n * Response contains lock handle in XML format:\n * <asx:abap>...<DATA><LOCK_HANDLE>xxx</LOCK_HANDLE><CORRNR>yyy</CORRNR>...</DATA>...</asx:abap>\n */\n lock: (name: string, lockOptions?: LockOptions) =>\n http.post(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n Accept:\n 'application/*,application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result',\n },\n query: {\n _action: 'LOCK',\n accessMode: lockOptions?.accessMode ?? 'MODIFY',\n ...(lockOptions?.corrNr ? { corrNr: lockOptions.corrNr } : {}),\n },\n }),\n\n /**\n * POST {basePath}/{name}?_action=UNLOCK\n * Unlock object\n */\n unlock: (name: string, unlockOptions: UnlockOptions) =>\n http.post(`${basePath}/${nameTransform(name)}`, {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n },\n query: {\n _action: 'UNLOCK',\n accessMode: 'MODIFY',\n lockHandle: unlockOptions.lockHandle,\n },\n }),\n\n /**\n * GET {basePath}/{name}/objectstructure\n * Get object structure (includes, methods, attributes, etc.)\n */\n objectstructure: (\n name: string,\n structureOptions?: ObjectStructureOptions,\n ) =>\n http.get(`${basePath}/${nameTransform(name)}/objectstructure`, {\n responses: { 200: undefined },\n query: {\n ...(structureOptions?.version\n ? { version: structureOptions.version }\n : {}),\n ...(structureOptions?.withShortDescriptions !== undefined\n ? {\n withShortDescriptions: String(\n structureOptions.withShortDescriptions,\n ),\n }\n : {}),\n },\n }),\n\n // Conditionally add source operations\n ...(sources\n ? {\n source: Object.fromEntries(\n sources.map((sourceType) => [\n sourceType,\n createSourceOperations(basePath, sourceType, nameTransform),\n ]),\n ),\n }\n : {}),\n\n // Conditionally add includes operations\n ...(includes\n ? {\n includes: {\n // Generic get/put for any include type\n get: (name: string, includeType: string) =>\n http.get(\n `${basePath}/${nameTransform(name)}/includes/${includeType}`,\n {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n },\n ),\n put: (\n name: string,\n includeType: string,\n options?: SourcePutOptions,\n ) =>\n http.put(\n `${basePath}/${nameTransform(name)}/includes/${includeType}`,\n {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: 'text/plain',\n 'Content-Type': 'text/plain',\n },\n query: {\n ...(options?.lockHandle\n ? { lockHandle: options.lockHandle }\n : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n },\n ),\n // Shorthand accessors for each include type\n ...Object.fromEntries(\n includes.map((includeType) => [\n includeType,\n createIncludeOperations(basePath, includeType, nameTransform),\n ]),\n ),\n },\n }\n : {}),\n } as CrudContract<S, Sources, Includes>;\n}\n\n/**\n * Shorthand alias for crud()\n *\n * @example\n * ```ts\n * export const classesContract = repo('/sap/bc/adt/oo/classes', classes, 'application/vnd.sap.adt.oo.classes.v4+xml');\n * ```\n */\nexport function repo<S extends Serializable<unknown>>(\n basePath: string,\n schema: S,\n contentType: string,\n nameTransform?: (name: string) => string,\n accept?: string,\n): CrudContract<S> {\n return crud({ basePath, schema, contentType, accept, nameTransform });\n}\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/attribute\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const attribute = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/attribute{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/attribute', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/target\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const target = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/target{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/target', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/ctsproject\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const ctsproject = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/ctsproject{?maxItemCount}{&name}\n */\n get: (params?: { maxItemCount?: number; name?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests/valuehelp/ctsproject', {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp/object\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const object = {\n /**\n * GET /sap/bc/adt/cts/transportrequests/valuehelp/object/{field}{?maxItemCount}{&name}\n */\n get: (field: string, params?: { maxItemCount?: number; name?: string }) =>\n http.get(`/sap/bc/adt/cts/transportrequests/valuehelp/object/${field}`, {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/valuehelp\n */\n\nimport { attribute } from './attribute';\nimport { target } from './target';\nimport { ctsproject } from './ctsproject';\nimport { object } from './object';\n\nexport const valuehelp = {\n attribute,\n target,\n ctsproject,\n object,\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/reference\n * @source transportmanagementref.json\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const reference = {\n get: () =>\n http.get('/sap/bc/adt/cts/transportrequests/reference', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration/configurations\n * @schema configurations.xsd, configuration.xsd\n */\n\nimport { http, contract } from '../../../../base';\nimport {\n configurations as configurationsSchema,\n configuration as configurationSchema,\n} from '../../../../schemas';\n\nexport const configurations = contract({\n /** GET list of search configurations */\n get: () =>\n http.get(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations',\n {\n responses: { 200: configurationsSchema },\n headers: { Accept: 'application/vnd.sap.adt.configurations.v1+xml' },\n },\n ),\n\n /** GET a specific configuration by ID */\n getById: (_configId: string) =>\n http.get(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations/${configId}',\n {\n responses: { 200: configurationSchema },\n headers: { Accept: 'application/vnd.sap.adt.configuration.v1+xml' },\n },\n ),\n\n /** PUT update a specific configuration by ID - body type inferred from schema\n * Note: If-Match header is automatically added by the adapter from cached ETag\n */\n put: (_configId: string) =>\n http.put(\n '/sap/bc/adt/cts/transportrequests/searchconfiguration/configurations/${configId}',\n {\n responses: { 200: configurationSchema },\n headers: {\n 'Content-Type': 'application/vnd.sap.adt.configuration.v1+xml',\n Accept: 'application/vnd.sap.adt.configuration.v1+xml',\n },\n body: configurationSchema, // Body type inferred from schema - becomes second parameter!\n },\n ),\n});\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration/metadata\n * @schema configuration.xsd\n */\n\nimport { http, contract } from '../../../../base';\nimport { configuration } from '../../../../schemas';\n\nexport const metadata = contract({\n /** GET default search configuration metadata */\n get: () =>\n http.get('/sap/bc/adt/cts/transportrequests/searchconfiguration/metadata', {\n responses: { 200: configuration },\n headers: {\n Accept: 'application/vnd.sap.adt.configuration.metadata.v1+xml',\n },\n }),\n});\n","/**\n * /sap/bc/adt/cts/transportrequests/searchconfiguration\n */\n\nimport { configurations } from './configurations';\nimport { metadata } from './metadata';\n\nexport const searchconfiguration = {\n configurations,\n metadata,\n};\n","import type { Serializable } from '../../../base';\nimport { transportmanagment, type InferTypedSchema } from '../../../schemas';\n\nexport interface ChangeOwnerBody {\n root: {\n number: string;\n targetuser: string;\n useraction: 'changeowner';\n };\n}\n\ntype TransportManagementBody = InferTypedSchema<typeof transportmanagment>;\n\ntype ChangeOwnerRoot = ChangeOwnerBody['root'];\n\nfunction isChangeOwnerRoot(root: unknown): root is ChangeOwnerRoot {\n if (typeof root !== 'object' || root === null) return false;\n const { useraction, number, targetuser } = root as Record<string, unknown>;\n return (\n useraction === 'changeowner' &&\n typeof number === 'string' &&\n number.length > 0 &&\n typeof targetuser === 'string' &&\n targetuser.length > 0\n );\n}\n\n/**\n * Narrow request schema for the CTS change-owner action.\n *\n * SAP models these attributes on the broader transport-management root. This\n * wrapper keeps the call-site body narrow while delegating XML parsing and\n * serialization to that generated SAP schema.\n */\nexport const changeOwnerBodySchema: Serializable<ChangeOwnerBody> = {\n _infer: undefined as unknown as ChangeOwnerBody,\n parse: (raw: string): ChangeOwnerBody => {\n const parsed = transportmanagment.parse(raw);\n const root = parsed?.root;\n if (!isChangeOwnerRoot(root)) {\n throw new Error('Invalid CTS change-owner body');\n }\n return {\n root: {\n number: root.number,\n targetuser: root.targetuser,\n useraction: 'changeowner',\n },\n };\n },\n build: (body: ChangeOwnerBody): string =>\n transportmanagment.build(body as unknown as TransportManagementBody),\n};\n","import type { Serializable } from '../../../base';\nimport { transportmanagment, type InferTypedSchema } from '../../../schemas';\n\nexport interface AddTaskBody {\n root: {\n targetuser: string;\n };\n}\n\ntype TransportManagementBody = InferTypedSchema<typeof transportmanagment>;\n\n/** Narrow body used by SAP's hypermedia `newtask` relation. */\nexport const addTaskBodySchema: Serializable<AddTaskBody> = {\n _infer: undefined as unknown as AddTaskBody,\n parse: (raw: string): AddTaskBody => {\n const parsed = transportmanagment.parse(raw);\n const root = parsed?.root;\n if (!root || !root.targetuser) {\n throw new Error('Invalid CTS add-task body');\n }\n return { root: { targetuser: root.targetuser } };\n },\n build: (body: AddTaskBody): string =>\n transportmanagment.build(body as unknown as TransportManagementBody),\n};\n","/**\n * /sap/bc/adt/cts/transportrequests - user-action body endpoints\n *\n * SAP ADT uses distinct lifecycle endpoints for release, changeowner, and\n * newrequest and newtask actions. This file exposes typed contracts for them.\n *\n * release → POST /{trkorr}/newreleasejobs (no body)\n * changeowner → PUT /{trkorr} (requires tm:number and tm:targetuser)\n * newtask → POST /{trkorr}/tasks (requires tm:targetuser)\n * newrequest → POST / (creates a new transport request)\n */\n\nimport { http } from '../../../base';\nimport {\n transportUseraction,\n transportmanagment,\n transportmanagmentSingle,\n} from '../../../schemas';\nimport { changeOwnerBodySchema } from './change-owner-schema';\nimport { addTaskBodySchema } from './add-task-schema';\n\nexport { changeOwnerBodySchema } from './change-owner-schema';\nexport type { ChangeOwnerBody } from './change-owner-schema';\nexport { addTaskBodySchema } from './add-task-schema';\nexport type { AddTaskBody } from './add-task-schema';\n\n/** Options for {@link useraction.reassign} */\nexport interface ReassignOptions {\n /** SAP user who should become the new owner */\n targetUser: string;\n /** Cascade the change to all modifiable tasks (default: false) */\n recursive?: boolean;\n}\n\nexport interface AddTaskOptions {\n /** SAP user who should own the new task. */\n owner: string;\n}\n\n/** Options for {@link useraction.create} (useraction=newrequest) */\nexport interface CreateRequestOptions {\n /** Transport short description */\n description: string;\n /** Transport type (default: K = workbench) */\n type?: string;\n /** Transport target system (default: LOCAL) */\n target?: string;\n /** CTS project (optional) */\n project?: string;\n /** SAP user who should own the created request / task */\n owner: string;\n}\n\nconst CONTENT_TYPE = 'application/vnd.sap.adt.transportorganizer.v1+xml';\n\nexport const useraction = {\n /**\n * Start and synchronously report a transport/task release job.\n */\n release: (trkorr: string) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}/newreleasejobs`, {\n responses: { 200: transportmanagment },\n headers: { Accept: CONTENT_TYPE },\n }),\n\n /**\n * PUT /{trkorr} with useraction=\"changeowner\".\n */\n reassign: (trkorr: string, _options: ReassignOptions) =>\n http.put(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: changeOwnerBodySchema,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n\n /** Create a modifiable task below an existing request. */\n addTask: (trkorr: string, _options: AddTaskOptions) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}/tasks`, {\n body: addTaskBodySchema,\n responses: { 200: transportmanagment },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n\n /**\n * POST / with useraction=\"newrequest\"\n *\n * Creates a brand-new transport request. Body carries the nested\n * tm:request / tm:task with desc / type / target / owner.\n */\n create: (_options: CreateRequestOptions) =>\n http.post('/sap/bc/adt/cts/transportrequests', {\n body: transportUseraction,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: CONTENT_TYPE,\n 'Content-Type': CONTENT_TYPE,\n },\n }),\n};\n\nexport type UseractionContract = typeof useraction;\n","/**\n * /sap/bc/adt/cts/transportrequests\n * @source transportmanagement.json\n */\n\nimport { http } from '../../../base';\nimport {\n transportmanagment,\n transportmanagmentSingle,\n transportmanagmentCreate,\n type InferTypedSchema,\n} from '../../../schemas';\nimport { valuehelp } from './valuehelp';\nimport { reference } from './reference';\nimport { searchconfiguration } from './searchconfiguration';\nimport { useraction } from './useraction';\n\nexport { useraction, changeOwnerBodySchema } from './useraction';\nexport type {\n UseractionContract,\n ReassignOptions,\n CreateRequestOptions,\n ChangeOwnerBody,\n} from './useraction';\n\n/**\n * Transport response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for transport request data.\n * Inferred from the typed schema.\n */\nexport type TransportResponse = InferTypedSchema<\n typeof transportmanagmentSingle\n>;\n\n/** Re-export schema for consumers that need direct parsing */\nexport const transportrequests = {\n /** GET / - List transports */\n list: (params?: { targets?: string; configUri?: string }) =>\n http.get('/sap/bc/adt/cts/transportrequests', {\n query: params,\n responses: { 200: transportmanagment },\n headers: { Accept: '*/*' },\n }),\n\n /** GET /{trkorr} - Get single transport */\n get: (trkorr: string) =>\n http.get(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n responses: { 200: transportmanagmentSingle },\n headers: { Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml' },\n }),\n\n /** POST / - Create new transport (response has root/request structure like single) */\n create: () =>\n http.post('/sap/bc/adt/cts/transportrequests', {\n body: transportmanagmentCreate,\n responses: { 200: transportmanagmentSingle },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** POST /{trkorr} - Action on transport (release, etc.) */\n post: (trkorr: string) =>\n http.post(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: transportmanagment,\n responses: { 200: transportmanagment },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** PUT /{trkorr} - Update transport */\n put: (trkorr: string) =>\n http.put(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n body: transportmanagment,\n responses: { 200: transportmanagment },\n headers: {\n Accept: 'application/vnd.sap.adt.transportorganizer.v1+xml',\n 'Content-Type': 'application/xml',\n },\n }),\n\n /** DELETE /{trkorr} - Delete transport */\n delete: (trkorr: string) =>\n http.delete(`/sap/bc/adt/cts/transportrequests/${trkorr}`, {\n responses: { 204: undefined },\n }),\n\n reference,\n valuehelp,\n searchconfiguration,\n useraction,\n};\nexport { transportmanagmentSingle } from '../../../schemas';\n","/**\n * /sap/bc/adt/cts/transports/**\n * ADT CTS Transports Contract\n *\n * GET with _action=FIND - Search transports (undocumented but works)\n *\n * Uses manual ts-xsd schema from adt-schemas for proper XML parsing.\n */\n\nimport { http } from '@abapify/speci/rest';\nimport { transportfind } from '../../schemas';\n\n// ============================================================================\n// URL Parameter Enums\n// ============================================================================\n\n/**\n * Transport function codes (TRFUNCTION field)\n */\nexport const TransportFunction = {\n /** Workbench request - development objects */\n WORKBENCH: 'K',\n /** Customizing request - configuration */\n CUSTOMIZING: 'W',\n /** Transport of copies */\n TRANSPORT_OF_COPIES: 'T',\n /** Development/correction task */\n DEVELOPMENT_CORRECTION: 'S',\n /** Repair task */\n REPAIR: 'R',\n /** Unclassified task */\n UNCLASSIFIED: 'X',\n /** Customizing task */\n CUSTOMIZING_TASK: 'Q',\n /** Wildcard - all types */\n ALL: '*',\n} as const;\n\nexport type TransportFunctionCode =\n (typeof TransportFunction)[keyof typeof TransportFunction];\n\n/**\n * Transport status codes (TRSTATUS field) - for response parsing\n */\nexport const TransportStatus = {\n /** Modifiable - can be edited */\n MODIFIABLE: 'D',\n /** Release started - in progress */\n RELEASE_STARTED: 'O',\n /** Release in preparation */\n RELEASE_IN_PREPARATION: 'P',\n /** Released - locked, cannot be edited */\n RELEASED: 'R',\n /** Locked */\n LOCKED: 'L',\n} as const;\n\nexport type TransportStatusCode =\n (typeof TransportStatus)[keyof typeof TransportStatus];\n\n// ============================================================================\n// URL Parameters Interface\n// ============================================================================\n\n/**\n * Query parameters for transport find endpoint\n *\n * Note: This is the basic find endpoint (/sap/bc/adt/cts/transports?_action=FIND)\n * which only supports user and trfunction filters. For advanced filtering\n * (status, date range, etc.), use the discovery-based search endpoint.\n */\nexport interface TransportFindParams {\n /** Action - must be 'FIND' for search */\n _action: 'FIND';\n /** Owner filter - username or '*' for all */\n user: string;\n /** Transport function filter - use TransportFunction enum or '*' */\n trfunction: TransportFunctionCode | string;\n}\n\n// ============================================================================\n// Response Schema\n// ============================================================================\n\n/**\n * Single transport header from the response\n */\nexport interface CtsReqHeader {\n /** Transport number (e.g., TRLK921630) */\n TRKORR: string;\n /** Transport function code */\n TRFUNCTION: string;\n /** Transport status code */\n TRSTATUS: string;\n /** Target system (e.g., /SOD_ALL/) */\n TARSYSTEM: string;\n /** Owner username */\n AS4USER: string;\n /** Creation/modification date (YYYY-MM-DD) */\n AS4DATE: string;\n /** Creation/modification time (HH:MM:SS) */\n AS4TIME: string;\n /** Description text */\n AS4TEXT: string;\n /** Client number */\n CLIENT: string;\n /** Repository ID (usually empty) */\n REPOID?: string;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Normalize response to always return array of headers\n * Works with the parsed transportfind schema response\n */\nexport function normalizeTransportFindResponse(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response: any,\n): CtsReqHeader[] {\n // ts-xsd parses root element content directly: { version, values: { DATA: { CTS_REQ_HEADER: [...] } } }\n const headers = response?.values?.DATA?.CTS_REQ_HEADER;\n if (!headers) return [];\n return Array.isArray(headers) ? headers : [headers];\n}\n\n// ============================================================================\n// Contract\n// ============================================================================\n\nexport const transports = {\n /**\n * Search transports with filters\n *\n * GET /sap/bc/adt/cts/transports?_action=FIND&user=X&trfunction=*\n *\n * @example\n * // Find all modifiable workbench requests for current user\n * const result = await client.cts.transports.find({\n * _action: 'FIND',\n * user: 'PPLENKOV',\n * trfunction: '*',\n * });\n *\n * @example\n * // Find with status filter\n * const result = await client.cts.transports.find({\n * _action: 'FIND',\n * user: '*',\n * trfunction: 'K',\n * requestStatus: 'D', // Modifiable only\n * });\n */\n find: (params: TransportFindParams) =>\n http.get('/sap/bc/adt/cts/transports', {\n query: params,\n responses: { 200: transportfind },\n headers: { Accept: '*/*' },\n }),\n};\n","/**\n * /sap/bc/adt/cts/transportchecks\n * @source transportchecks.json\n */\n\nimport { http } from '@abapify/speci/rest';\n\nexport const transportchecks = {\n /**\n * GET /sap/bc/adt/cts/transportchecks\n */\n get: () =>\n http.get('/sap/bc/adt/cts/transportchecks', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/xml' },\n }),\n};\n","/**\n * ADT CTS (Change and Transport System) Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/cts/transportrequests → cts.transportrequests\n * - /sap/bc/adt/cts/transports → cts.transports\n * - /sap/bc/adt/cts/transportchecks → cts.transportchecks\n *\n * Based on collections in: e2e/adt-codegen/generated/collections/sap/bc/adt/cts/\n */\n\nimport { transportrequests } from './transportrequests';\nimport { transports } from './transports';\nimport { transportchecks } from './transportchecks';\n\n// Re-export all types and helpers\nexport * from './transports';\nexport {\n type TransportResponse,\n transportmanagmentSingle,\n} from './transportrequests';\n\n// Explicit type to avoid TS7056 \"exceeds maximum length\" error\nexport const ctsContract: {\n transportrequests: typeof transportrequests;\n transports: typeof transports;\n transportchecks: typeof transportchecks;\n} = {\n transportrequests,\n transports,\n transportchecks,\n};\n\nexport type CtsContract = typeof ctsContract;\n","/**\n * ATC worklist\n *\n * Endpoint: /sap/bc/adt/atc/worklists\n * Category: atcworklists\n *\n * @generated - DO NOT EDIT MANUALLY\n */\n\nimport { http, contract } from '#base';\nimport { atcworklist } from '#schemas';\n\nexport const worklistsContract = contract({\n /**\n * GET ATC worklist\n */\n get: (\n worklistId: string,\n params?: {\n timestamp?: string;\n usedObjectSet?: string;\n includeExemptedFindings?: string;\n },\n ) =>\n http.get(`/sap/bc/adt/atc/worklists/${worklistId}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n /**\n * GET ATC worklist\n */\n objectset: (\n worklistId: string,\n objectSetName: string,\n params?: { timestamp?: string; includeExemptedFindings?: string },\n ) =>\n http.get(`/sap/bc/adt/atc/worklists/${worklistId}/${objectSetName}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n});\n\nexport type WorklistsContract = typeof worklistsContract;\n","/**\n * ATC results\n *\n * Endpoint: /sap/bc/adt/atc/results\n * Category: atcresults\n *\n * @generated - DO NOT EDIT MANUALLY\n */\n\nimport { http, contract } from '#base';\nimport { atcworklist } from '#schemas';\n\nexport const resultsContract = contract({\n /**\n * GET ATC results\n */\n active: (params?: { activeResult?: string; contactPerson?: string }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n activeforsysid: (params?: {\n activeResult?: string;\n contactPerson?: string;\n sysId?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n user: (params?: {\n createdBy?: string;\n ageMin?: string;\n ageMax?: string;\n contactPerson?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n central: (params?: {\n centralResult?: string;\n createdBy?: string;\n contactPerson?: string;\n ageMin?: string;\n ageMax?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n centralforsysid: (params?: {\n centralResult?: string;\n createdBy?: string;\n contactPerson?: string;\n ageMin?: string;\n ageMax?: string;\n sysId?: string;\n }) =>\n http.get('/sap/bc/adt/atc/results', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n /**\n * GET ATC results\n */\n displayid: (\n displayId: string,\n params?: {\n activeResult?: string;\n contactPerson?: string;\n includeExemptedFindings?: string;\n },\n ) =>\n http.get(`/sap/bc/adt/atc/results/${displayId}`, {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: 'application/xml' },\n }),\n});\n\nexport type ResultsContract = typeof resultsContract;\n","/**\n * ADT ATC (ABAP Test Cockpit) Contracts\n *\n * Combines generated contracts with manually-defined endpoints not in discovery.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/atc/customizing → atc.customizing (manual - not in discovery)\n * - /sap/bc/adt/atc/runs → atc.runs (manual - POST with body)\n * - /sap/bc/adt/atc/results → atc.results (generated)\n * - /sap/bc/adt/atc/worklists → atc.worklists (generated + manual create)\n */\n\nimport { http, contract } from '../../base';\nimport { atcworklist, atc, atcRun } from '../../schemas';\n\n// Re-export generated contracts\nexport { worklistsContract } from '../../generated/adt/sap/bc/adt/atc/worklists';\nexport { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results';\n\n/**\n * /sap/bc/adt/atc/customizing\n * Get ATC customizing settings (check variants, exemption reasons, etc.)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\nconst customizing = contract({\n /**\n * GET /sap/bc/adt/atc/customizing\n */\n get: () =>\n http.get('/sap/bc/adt/atc/customizing', {\n responses: { 200: atc },\n headers: { Accept: 'application/xml' },\n }),\n});\n\n/**\n * /sap/bc/adt/atc/runs\n *\n * NOTE: POST endpoint with body - not in SAP discovery\n * @source atcruns.json\n */\nconst runs = contract({\n /**\n * POST /sap/bc/adt/atc/runs{?worklistId,clientWait}\n * Run ATC checks on objects specified in the request body\n */\n post: (params?: { worklistId?: string; clientWait?: boolean }) =>\n http.post('/sap/bc/adt/atc/runs', {\n query: params,\n body: atcRun,\n responses: { 200: atcworklist },\n headers: {\n Accept: 'application/xml',\n 'Content-Type': 'application/xml',\n },\n }),\n});\n\n/**\n * /sap/bc/adt/atc/worklists - Extended\n *\n * Adds POST (create) endpoint not in generated contract\n */\nconst worklistsExtended = contract({\n /**\n * POST /sap/bc/adt/atc/worklists{?checkVariant}\n * Create a new ATC worklist\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n create: (params?: { checkVariant?: string }) =>\n http.post('/sap/bc/adt/atc/worklists', {\n query: params,\n responses: { 200: atcworklist },\n headers: { Accept: '*/*' },\n }),\n});\n\n// Import generated contracts for combined export\nimport { worklistsContract } from '../../generated/adt/sap/bc/adt/atc/worklists';\nimport { resultsContract } from '../../generated/adt/sap/bc/adt/atc/results';\n\n/**\n * Combined ATC contract\n *\n * Uses generated contracts where available, adds manual endpoints for:\n * - customizing (not in discovery)\n * - runs POST (not in discovery)\n * - worklists.create (not in discovery)\n */\nexport const atcContract = {\n customizing,\n runs,\n results: resultsContract,\n worklists: {\n ...worklistsContract,\n ...worklistsExtended,\n },\n};\n\n/** Type alias for the ATC contract */\nexport type AtcContract = typeof atcContract;\n","/**\n * ADT AUnit (ABAP Unit) Contracts\n *\n * Manually-defined endpoints for ABAP Unit test runs.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/abapunit/testruns → aunit.testruns (POST with body)\n */\n\nimport { http, contract } from '../../base';\nimport { aunitRun, aunitResult } from '../../schemas';\n\n/**\n * /sap/bc/adt/abapunit/testruns\n *\n * Run ABAP Unit tests on objects specified in the request body.\n *\n * NOTE: Not in SAP discovery - manually defined\n */\nconst testruns = contract({\n /**\n * POST /sap/bc/adt/abapunit/testruns\n * Execute ABAP Unit test run with a runConfiguration body\n *\n * @returns runResult with programs, test classes, methods, and alerts\n */\n post: () =>\n http.post('/sap/bc/adt/abapunit/testruns', {\n body: aunitRun,\n responses: { 200: aunitResult },\n headers: {\n Accept: 'application/vnd.sap.adt.abapunit.testruns.result.v2+xml',\n 'Content-Type':\n 'application/vnd.sap.adt.abapunit.testruns.config.v4+xml',\n },\n }),\n});\n\n/**\n * Combined AUnit contract\n */\nexport const aunitContract = {\n testruns,\n};\n\nexport type AunitContract = typeof aunitContract;\n\nexport { extractCoverageMeasurementId } from './coverage-link';\nexport type {\n CoverageLinkCandidate,\n CoverageLinkSource,\n} from './coverage-link';\n","/**\n * ADT OO Classes Contract\n *\n * Endpoint: /sap/bc/adt/oo/classes\n * Full CRUD operations for ABAP classes including source code management.\n *\n * Uses the crud() helper with sources and includes options for complete\n * class operations including metadata, source code, and class includes.\n */\n\nimport { crud } from '../../base';\nimport { classes as classesSchema, type InferTypedSchema } from '../../schemas';\n\n/**\n * Include types for ABAP classes\n * Based on AbapClassIncludeType from SAP XSD schema\n */\nexport type ClassIncludeType =\n | 'main'\n | 'definitions'\n | 'implementations'\n | 'macros'\n | 'testclasses'\n | 'localtypes';\n\n/**\n * Class response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for class metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type ClassResponse = InferTypedSchema<typeof classesSchema>;\n\n/**\n * /sap/bc/adt/oo/classes\n * Full CRUD operations for ABAP classes\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n * - Class includes: includes.{definitions,implementations,macros,testclasses,localtypes}.get/put\n */\nexport const classesContract = crud({\n basePath: '/sap/bc/adt/oo/classes',\n schema: classesSchema,\n contentType: 'application/vnd.sap.adt.oo.classes.v4+xml',\n accept:\n 'application/vnd.sap.adt.oo.classes.v4+xml, application/vnd.sap.adt.oo.classes.v3+xml, application/vnd.sap.adt.oo.classes.v2+xml, application/vnd.sap.adt.oo.classes.v1+xml',\n sources: ['main'] as const,\n includes: [\n 'definitions',\n 'implementations',\n 'macros',\n 'testclasses',\n 'localtypes',\n ] as const,\n});\n\n/** Type alias for the classes contract */\nexport type ClassesContract = typeof classesContract;\n","/**\n * ADT OO Interfaces Contract\n *\n * Endpoint: /sap/bc/adt/oo/interfaces\n * Full CRUD operations for ABAP interfaces including source code management.\n *\n * Uses the crud() helper with sources option for complete\n * interface operations including metadata and source code.\n */\n\nimport { crud } from '../../base';\nimport {\n interfaces as interfacesSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Interface response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for interface metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type InterfaceResponse = InferTypedSchema<typeof interfacesSchema>;\n\n/**\n * /sap/bc/adt/oo/interfaces\n * Full CRUD operations for ABAP interfaces\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const interfacesContract = crud({\n basePath: '/sap/bc/adt/oo/interfaces',\n schema: interfacesSchema,\n contentType: 'application/vnd.sap.adt.oo.interfaces.v5+xml',\n accept:\n 'application/vnd.sap.adt.oo.interfaces.v5+xml, application/vnd.sap.adt.oo.interfaces.v4+xml, application/vnd.sap.adt.oo.interfaces.v3+xml, application/vnd.sap.adt.oo.interfaces.v2+xml, application/vnd.sap.adt.oo.interfaces+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the interfaces contract */\nexport type InterfacesContract = typeof interfacesContract;\n","/**\n * ADT OO Classrun Contract\n *\n * Endpoint: /sap/bc/adt/oo/classrun\n * Execute console application classes implementing IF_OO_ADT_CLASSRUN.\n */\n\nimport { http, contract } from '../../base';\n\n/**\n * /sap/bc/adt/oo/classrun\n * Execute console application classes (IF_OO_ADT_CLASSRUN)\n */\nexport const classrunContract = contract({\n /**\n * POST /sap/bc/adt/oo/classrun/{classname}{?profilerId}\n * Execute a class implementing IF_OO_ADT_CLASSRUN\n */\n post: (classname: string, params?: { profilerId?: string }) =>\n http.post(`/sap/bc/adt/oo/classrun/${classname.toLowerCase()}`, {\n query: params,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n});\n\nexport type ClassrunContract = typeof classrunContract;\n","/**\n * ADT OO (Object-Oriented) Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/oo/classes → oo.classes\n * - /sap/bc/adt/oo/interfaces → oo.interfaces\n * - /sap/bc/adt/oo/classrun → oo.classrun\n *\n * Supports full CRUD operations for ABAP classes and interfaces,\n * including source code management for class includes.\n */\n\n// Re-export subcontracts\nexport {\n classesContract,\n type ClassesContract,\n type ClassIncludeType,\n type ClassResponse,\n} from './classes';\nexport {\n interfacesContract,\n type InterfacesContract,\n type InterfaceResponse,\n} from './interfaces';\nexport { classrunContract, type ClassrunContract } from './classrun';\n\n// Import for aggregated contract\nimport { classesContract } from './classes';\nimport { interfacesContract } from './interfaces';\nimport { classrunContract } from './classrun';\n\n/**\n * OO Contract type definition\n * Explicit type to avoid TypeScript inference limits\n */\nexport interface OoContract {\n classes: typeof classesContract;\n interfaces: typeof interfacesContract;\n classrun: typeof classrunContract;\n}\n\nexport const ooContract: OoContract = {\n classes: classesContract,\n interfaces: interfacesContract,\n classrun: classrunContract,\n};\n","/**\n * ADT Discovery Contract\n *\n * Endpoint: GET /sap/bc/adt/discovery\n * Returns AtomPub service document describing available ADT services.\n */\n\nimport { http } from '../../base';\nimport { discovery, type InferTypedSchema } from '../../schemas';\n\n/**\n * Discovery response type - inferred from XSD schema\n */\nexport type DiscoveryResponse = InferTypedSchema<typeof discovery>;\n\nexport const discoveryContract = {\n /**\n * Get Discovery Information\n *\n * Returns the ADT service discovery document in AtomPub format.\n * This document describes all available ADT services, workspaces, and collections.\n *\n * @endpoint GET /sap/bc/adt/discovery\n * @returns AtomPub service document with workspace and collection information\n */\n getDiscovery: () =>\n http.get('/sap/bc/adt/discovery', {\n responses: { 200: discovery },\n headers: { Accept: 'application/atomsvc+xml' },\n }),\n};\n\nexport type DiscoveryContract = typeof discoveryContract;\n","/**\n * /sap/bc/adt/packages/**\n * ADT Packages Contract\n *\n * Full CRUD operations for ABAP packages (DEVC).\n *\n * Uses the crud() helper with packagesV1 schema.\n * Package names are case-sensitive (uppercase) — no lowercase transform.\n *\n * @example\n * const pkg = await client.adt.packages.get('ZABAPGIT_EXAMPLES');\n * console.log(pkg.package?.name, pkg.package?.attributes?.packageType);\n *\n * // Create a new package\n * await client.adt.packages.post({ corrNr: 'DEVK900001' });\n */\n\nimport { contract, http } from '../../base';\nimport { crud } from '../../helpers/crud';\nimport { packagesV1 } from '../../schemas';\n\nimport type { InferTypedSchema } from '../../schemas';\n\n/**\n * Package response type - inferred from packagesV1 schema\n * Use this type for package data throughout the codebase\n */\nexport type Package = InferTypedSchema<typeof packagesV1>;\n\nconst packageCrudContract = crud({\n basePath: '/sap/bc/adt/packages',\n schema: packagesV1,\n contentType: 'application/vnd.sap.adt.packages.v2+xml',\n accept:\n 'application/vnd.sap.adt.packages.v2+xml, application/vnd.sap.adt.packages.v1+xml',\n nameTransform: (n) => encodeURIComponent(n), // preserve case (packages are uppercase)\n});\n\n/**\n * Typed package operations which are not CRUD-shaped. The discovery document\n * advertises this as `/sap/bc/adt/packages/$tree{?packagename,type}`.\n */\nexport const packagesContract = contract({\n ...packageCrudContract,\n tree: (params: { packagename: string; type: 'sub' | 'super' }) =>\n http.get('/sap/bc/adt/packages/$tree', {\n query: params,\n responses: { 200: packagesV1 },\n headers: { Accept: 'application/vnd.sap.adt.packages.v2+xml' },\n }),\n});\n\nexport type PackagesContract = typeof packagesContract;\nexport type PackagesSchema = typeof packagesV1;\n","/**\n * SAP ADT Sessions Contract\n *\n * HTTP session management and CSRF token initialization.\n * Path: /sap/bc/adt/core/http/sessions\n */\n\nimport { http as httpMethod } from '../../../base';\nimport { http as httpSchema } from '../../../schemas';\n\nexport const sessionsContract = {\n /**\n * Get or create an HTTP session\n * Also initializes CSRF token for subsequent requests\n *\n * Uses x-sap-security-session: create to establish a proper security session.\n * All subsequent operations should use x-sap-security-session: use to stay\n * within the same security session (required for lock/unlock).\n *\n * @returns Session information with CSRF token and links\n */\n getSession: () =>\n httpMethod.get('/sap/bc/adt/core/http/sessions', {\n responses: {\n 200: httpSchema,\n },\n headers: {\n Accept: 'application/vnd.sap.adt.core.http.session.v3+xml',\n 'x-csrf-token': 'Fetch',\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'create',\n },\n }),\n};\n\nexport type SessionsContract = typeof sessionsContract;\n","/**\n * SAP ADT System Information Contract\n *\n * Returns system information including SAP release, client, user details.\n * Path: /sap/bc/adt/core/http/systeminformation\n */\n\nimport { http, contract } from '../../../base';\nimport { systeminformation } from '../../../schemas';\n\nexport const systeminformationContract = contract({\n /**\n * Get system information\n *\n * @returns System information (systemID, client, userName, etc.)\n */\n getSystemInfo: () =>\n http.get('/sap/bc/adt/core/http/systeminformation', {\n responses: {\n 200: systeminformation,\n },\n headers: {\n Accept: 'application/vnd.sap.adt.core.http.systeminformation.v1+json',\n },\n }),\n});\n\nexport type SystemInformationContract = typeof systeminformationContract;\n","/**\n * Core HTTP Contracts\n */\n\nexport * from './sessions';\nexport * from './systeminformation';\n\nimport { sessionsContract, type SessionsContract } from './sessions';\nimport {\n systeminformationContract,\n type SystemInformationContract,\n} from './systeminformation';\n\nexport interface HttpContract {\n sessions: SessionsContract;\n systeminformation: SystemInformationContract;\n}\n\nexport const httpContract: HttpContract = {\n sessions: sessionsContract,\n systeminformation: systeminformationContract,\n};\n","/**\n * Core Contracts\n */\n\nexport * from './http';\n\nimport { httpContract, type HttpContract } from './http';\n\nexport interface CoreContract {\n http: HttpContract;\n}\n\nexport const coreContract: CoreContract = {\n http: httpContract,\n};\n","/**\n * ADT Repository Information System - Search Contract\n *\n * ABAP object search operations.\n * Path: /sap/bc/adt/repository/informationsystem/search\n */\n\nimport { http } from '../../../base';\nimport { adtcore } from '../../../schemas';\n\nexport const searchContract = {\n /**\n * Quick search for ABAP objects\n *\n * @param query - Search query (supports wildcards like *)\n * @param maxResults - Maximum number of results (default: 50)\n * @param packageName - Filter by package name\n * @param objectType - Filter by object type (e.g., 'CLAS', 'INTF')\n * @returns Object references matching the search query (union of all adtcore element types)\n *\n * @example\n * // Search for classes starting with ZCL\n * const results = await client.repository.informationsystem.search.quickSearch({\n * query: 'zcl*',\n * maxResults: 10\n * });\n *\n * @example\n * // List all objects in a package\n * const results = await client.repository.informationsystem.search.quickSearch({\n * query: '*',\n * packageName: 'ZABAPGIT_EXAMPLES',\n * maxResults: 200\n * });\n */\n quickSearch: (options: {\n query: string;\n maxResults?: number;\n packageName?: string;\n objectType?: string;\n }) =>\n http.get('/sap/bc/adt/repository/informationsystem/search', {\n query: {\n operation: 'quickSearch',\n query: options.query,\n maxResults: options.maxResults || 50,\n ...(options.packageName && { packageName: options.packageName }),\n ...(options.objectType && { objectType: options.objectType }),\n },\n responses: {\n 200: adtcore,\n },\n headers: {\n Accept: 'application/xml',\n },\n }),\n};\n\nexport type SearchContract = typeof searchContract;\n","/**\n * ADT Repository Information System – Usage References (Where-Used List)\n *\n * The SAP ADT \"where-used\" service is NOT a simple GET — it is a two-step\n * POST flow discovered via sapcli (`sap/adt/whereused.py`) and confirmed\n * against a real TRL ABAP trial system:\n *\n * 1. POST /sap/bc/adt/repository/informationsystem/usageReferences/scope\n * + query: uri=<objectUri>&version=active\n * + Content-Type: application/vnd.sap.adt.repository.usagereferences.scope.request.v1+xml\n * + Accept: application/vnd.sap.adt.repository.usagereferences.scope.response.v1+xml\n * + body: <usagereferences:usageScopeRequest>…</>\n * → returns a <usagereferences:usageScopeResult> containing the\n * backend-chosen object types, grade flags and an opaque `payload`\n * blob (gzip-encoded) that must be echoed back in step 2.\n *\n * 2. POST /sap/bc/adt/repository/informationsystem/usageReferences\n * + query: uri=<objectUri>&version=active\n * + Content-Type: application/vnd.sap.adt.repository.usagereferences.request.v1+xml\n * + Accept: application/vnd.sap.adt.repository.usagereferences.result.v1+xml\n * + body: <usagereferences:usageReferenceRequest>\n * <usagereferences:affectedObjects/>\n * <usagereferences:scope>…copy from step 1 result…</>\n * </>\n * → returns a <usagereferences:usageReferenceResult> with all hits.\n *\n * Body/response are passed as plain-text XML because the usagereferences\n * namespace is not yet represented as a typed `adt-schemas` XSD. Callers\n * parse the response themselves (see `find-references` MCP tool).\n */\n\nimport { http, contract } from '../../../base';\nimport { textPlain } from '../../../helpers/text-schema';\n\n/** Vendor MIME types — must match real SAP verbatim. */\nexport const SCOPE_REQUEST_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.scope.request.v1+xml';\nexport const SCOPE_RESPONSE_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.scope.response.v1+xml';\nexport const SEARCH_REQUEST_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.request.v1+xml';\nexport const SEARCH_RESPONSE_MIME =\n 'application/vnd.sap.adt.repository.usagereferences.result.v1+xml';\n\n// XML namespace URI per SAP ADT / W3C XML Namespaces spec — an opaque\n// identifier, not a network endpoint. Must match SAP wire format exactly.\n// https://www.w3.org/TR/xml-names/\nexport const USAGEREFS_NAMESPACE = 'http://www.sap.com/adt/ris/usageReferences'; // NOSONAR: XML namespace identifier (not a URL)\n\n/**\n * Build the XML body for the step-1 scope request. sapcli always sends\n * an empty `<affectedObjects/>`; the backend doesn't inspect its content\n * and populates the result from the URI query parameter.\n */\nexport function buildUsageScopeRequestXml(): string {\n return (\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' +\n `<usagereferences:usageScopeRequest xmlns:usagereferences=\"${USAGEREFS_NAMESPACE}\">\\n` +\n ' <usagereferences:affectedObjects/>\\n' +\n '</usagereferences:usageScopeRequest>'\n );\n}\n\n/**\n * Build the XML body for the step-2 search request by wrapping the raw\n * step-1 scope-result XML as a `<usagereferences:scope>` element inside\n * a `<usageReferenceRequest>`.\n *\n * We deliberately do string surgery instead of DOM manipulation because\n * the `payload` element contains base64-gzip content we must not perturb.\n */\nexport function buildUsageReferenceRequestXml(scopeResultXml: string): string {\n // Strip the XML prolog and outer usageScopeResult tags, re-tag as <scope>.\n // Use indexOf-based slicing for the prolog (linear, no regex backtracking).\n let noProlog = scopeResultXml;\n if (noProlog.startsWith('<?xml')) {\n const prologEnd = noProlog.indexOf('?>');\n if (prologEnd !== -1) {\n noProlog = noProlog.slice(prologEnd + 2).replace(/^\\s+/, '');\n }\n }\n const scopeElement = noProlog.replaceAll(\n /usagereferences:usageScopeResult/g,\n 'usagereferences:scope',\n );\n\n return (\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n' +\n `<usagereferences:usageReferenceRequest xmlns:usagereferences=\"${USAGEREFS_NAMESPACE}\">\\n` +\n ' <usagereferences:affectedObjects/>\\n' +\n ` ${scopeElement}\\n` +\n '</usagereferences:usageReferenceRequest>'\n );\n}\n\n/**\n * Step 1: fetch the default scope for a given object URI.\n *\n * Typed body/response are plain XML strings — the contract provides\n * URL/header/method shape, callers provide the marshalled body via\n * {@link buildUsageScopeRequestXml}.\n */\nconst scope = contract({\n post: (params: { uri: string; version?: string }) =>\n http.post(\n '/sap/bc/adt/repository/informationsystem/usageReferences/scope',\n {\n query: {\n uri: params.uri,\n version: params.version ?? 'active',\n },\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: SCOPE_RESPONSE_MIME,\n 'Content-Type': SCOPE_REQUEST_MIME,\n },\n },\n ),\n});\n\n/**\n * Step 2: execute the where-used search using the scope blob from step 1.\n */\nconst search = contract({\n post: (params: { uri: string; version?: string }) =>\n http.post('/sap/bc/adt/repository/informationsystem/usageReferences', {\n query: {\n uri: params.uri,\n version: params.version ?? 'active',\n },\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: SEARCH_RESPONSE_MIME,\n 'Content-Type': SEARCH_REQUEST_MIME,\n },\n }),\n});\n\nexport const usageReferencesContract = {\n scope,\n search,\n};\n\nexport type UsageReferencesContract = typeof usageReferencesContract;\n","/**\n * ADT Repository source-history contracts.\n *\n * Both operations follow URIs supplied by SAP ADT responses. They deliberately\n * do not construct version paths from an object URI.\n */\n\nimport { contract, http } from '../../base';\nimport { atomFeed } from '../../schemas';\n\nconst ADT_ORIGIN = 'https://adt.invalid';\nconst ADT_PATH = '/sap/bc/adt';\nconst INVALID_URI_MESSAGE = 'Expected an ADT-relative URI under /sap/bc/adt';\n\n/**\n * Guard an opaque ADT URI supplied by SAP before we turn it into an\n * authenticated request. Other contracts which accept SAP-discovered URIs\n * share this boundary rather than reimplementing a slightly different URL\n * policy.\n */\nexport function assertAdtRelativeUri(uri: string): void {\n let parsed: URL;\n\n try {\n parsed = new URL(uri, ADT_ORIGIN);\n } catch {\n throw new TypeError(INVALID_URI_MESSAGE);\n }\n\n const isRootRelative = uri.startsWith('/') && !uri.startsWith('//');\n const isAdtPath =\n parsed.pathname === ADT_PATH || parsed.pathname.startsWith(`${ADT_PATH}/`);\n\n if (\n uri !== uri.trim() ||\n !isRootRelative ||\n parsed.origin !== ADT_ORIGIN ||\n !isAdtPath ||\n parsed.hash\n ) {\n throw new TypeError(INVALID_URI_MESSAGE);\n }\n}\n\nexport const sourceversionsContract = contract({\n list: (params: { versionsUri: string }) => {\n assertAdtRelativeUri(params.versionsUri);\n\n return http.get(params.versionsUri, {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n });\n },\n\n get: (params: { sourceUri: string }) => {\n assertAdtRelativeUri(params.sourceUri);\n\n return http.get(params.sourceUri, {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n });\n },\n});\n\nexport type SourceversionsContract = typeof sourceversionsContract;\n","/**\n * ADT Repository Information System — object properties.\n *\n * SAP supplies the canonical object URI through quick search or object\n * metadata. This endpoint enriches it with generic facets such as package\n * and application component; it does not construct an object-specific URL.\n */\n\nimport { http } from '../../../base';\nimport { objectProperties } from '../../../schemas';\nimport { assertAdtRelativeUri } from '../sourceversions';\n\nexport const OBJECT_PROPERTIES_RESULT_MIME =\n 'application/vnd.sap.adt.repository.objproperties.result.v1+xml';\n\nexport const objectPropertiesContract = {\n values: (params: { uri: string; facets?: string[] }) => {\n assertAdtRelativeUri(params.uri);\n\n const facets = [...new Set(params.facets ?? [])].filter(\n (facet) => facet.trim().length > 0,\n );\n\n return http.get(\n '/sap/bc/adt/repository/informationsystem/objectproperties/values',\n {\n query: {\n uri: params.uri,\n ...(facets.length > 0 ? { facet: facets } : {}),\n },\n responses: { 200: objectProperties },\n headers: { Accept: OBJECT_PROPERTIES_RESULT_MIME },\n },\n );\n },\n};\n\nexport type ObjectPropertiesContract = typeof objectPropertiesContract;\n","/**\n * Repository Information System Contracts\n */\n\nexport * from './search';\nexport * from './usagereferences';\nexport * from './objectproperties';\n\nimport { searchContract, type SearchContract } from './search';\nimport {\n usageReferencesContract,\n type UsageReferencesContract,\n} from './usagereferences';\nimport {\n objectPropertiesContract,\n type ObjectPropertiesContract,\n} from './objectproperties';\n\nexport interface InformationSystemContract {\n search: SearchContract;\n usageReferences: UsageReferencesContract;\n objectProperties: ObjectPropertiesContract;\n}\n\nexport const informationsystemContract: InformationSystemContract = {\n search: searchContract,\n usageReferences: usageReferencesContract,\n objectProperties: objectPropertiesContract,\n};\n","/**\n * ADT Repository – generic Object Structure endpoint.\n *\n * Most typed object contracts (`programs`, `classes`, …) already expose\n * their own `.objectstructure()` method via the CRUD helper. This\n * contract handles the *generic* case used by the workbench outline\n * CLI / MCP surfaces: an arbitrary object URI whose type does not have\n * a dedicated typed contract (e.g. DOMA, DTEL, DEVC, BDEF, SRVD, …).\n *\n * ADT endpoint:\n * GET {objectUri}/objectstructure?version=<active|inactive>\n *\n * The response shape varies wildly between object types, so the\n * returned type is `unknown` — callers handle downstream. Keeping this\n * as a typed contract (instead of a raw `client.fetch()` call) ensures\n * the generic outline path still goes through the contract layer.\n */\n\nimport { http, contract } from '../../base';\n\nexport const objectstructureContract = contract({\n get: (params: { objectUri: string; version?: 'active' | 'inactive' }) =>\n http.get(`${params.objectUri}/objectstructure`, {\n query: {\n ...(params.version ? { version: params.version } : {}),\n },\n responses: { 200: undefined },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type ObjectstructureContract = typeof objectstructureContract;\n","/**\n * Repository Contracts\n */\n\nexport * from './informationsystem';\nexport * from './objectstructure';\nexport * from './sourceversions';\n\nimport {\n informationsystemContract,\n type InformationSystemContract,\n} from './informationsystem';\nimport {\n objectstructureContract,\n type ObjectstructureContract,\n} from './objectstructure';\nimport {\n sourceversionsContract,\n type SourceversionsContract,\n} from './sourceversions';\n\nexport interface RepositoryContract {\n informationsystem: InformationSystemContract;\n objectstructure: ObjectstructureContract;\n sourceversions: SourceversionsContract;\n}\n\nexport const repositoryContract: RepositoryContract = {\n informationsystem: informationsystemContract,\n objectstructure: objectstructureContract,\n sourceversions: sourceversionsContract,\n};\n","/**\n * ADT Programs Contract\n *\n * Endpoint: /sap/bc/adt/programs/programs\n * Full CRUD operations for ABAP programs including source code management.\n */\n\nimport { crud } from '../../base';\nimport { programs, type InferTypedSchema } from '../../schemas';\n\n/**\n * Program response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for program metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type ProgramResponse = InferTypedSchema<typeof programs>;\n\n/**\n * /sap/bc/adt/programs/programs\n * Full CRUD operations for ABAP programs\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const programsContract = crud({\n basePath: '/sap/bc/adt/programs/programs',\n schema: programs,\n contentType: 'application/vnd.sap.adt.programs.programs.v2+xml',\n accept:\n 'application/vnd.sap.adt.programs.programs.v2+xml, application/vnd.sap.adt.programs.programs.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the programs contract */\nexport type ProgramsContract = typeof programsContract;\n","/**\n * ADT Program Includes Contract\n *\n * Endpoint: /sap/bc/adt/programs/includes\n * Full CRUD operations for ABAP program includes (PROG/I) including source\n * code management.\n *\n * Mirrors the shape of `programs.ts` but targets the `/programs/includes`\n * URL space and the `include:abapInclude` XML payload.\n */\n\nimport { crud } from '../../base';\nimport { includes, type InferTypedSchema } from '../../schemas';\n\n/**\n * Include response type - exported for consumers (ADK, MCP, etc.).\n *\n * Uses the pre-generated type from adt-schemas. This is the canonical\n * type for include metadata (wraps `{ abapInclude: ... }`).\n */\nexport type IncludeResponse = InferTypedSchema<typeof includes>;\n\n/**\n * /sap/bc/adt/programs/includes\n * Full CRUD operations for ABAP program includes\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n *\n * Content types follow the same \"v2 preferred, v1 fallback\" pattern SAP\n * uses for includes (observed from real responses; matches sapcli's\n * `sap.adt.programs.Include` OBJTYPE).\n */\nexport const includesContract = crud({\n basePath: '/sap/bc/adt/programs/includes',\n schema: includes,\n contentType: 'application/vnd.sap.adt.programs.includes.v2+xml',\n accept:\n 'application/vnd.sap.adt.programs.includes.v2+xml, application/vnd.sap.adt.programs.includes.v1+xml, application/vnd.sap.adt.programs.includes+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the includes contract */\nexport type IncludesContract = typeof includesContract;\n","/**\n * ADT Programs Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/programs/programs → programs.programs\n * - /sap/bc/adt/programs/includes → programs.includes\n */\n\nexport {\n programsContract,\n type ProgramsContract,\n type ProgramResponse,\n} from './programs';\n\nexport {\n includesContract,\n type IncludesContract,\n type IncludeResponse,\n} from './includes';\n\nimport { programsContract } from './programs';\nimport { includesContract } from './includes';\n\n/**\n * Programs Contract type definition\n */\nexport interface ProgramsModuleContract {\n programs: typeof programsContract;\n includes: typeof includesContract;\n}\n\nexport const programsModuleContract: ProgramsModuleContract = {\n programs: programsContract,\n includes: includesContract,\n};\n","/**\n * ADT Functions Groups Contract\n *\n * Endpoint: /sap/bc/adt/functions/groups\n * Full CRUD operations for ABAP function groups including source code management.\n */\n\nimport { crud } from '../../base';\nimport { groups, type InferTypedSchema } from '../../schemas';\n\n/**\n * Function group response type - exported for consumers (ADK, etc.)\n *\n * This is the canonical type for function group metadata.\n * Uses pre-generated type from adt-schemas.\n */\nexport type FunctionGroupResponse = InferTypedSchema<typeof groups>;\n\n/**\n * /sap/bc/adt/functions/groups\n * Full CRUD operations for ABAP function groups\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put\n */\nexport const functionGroupsContract = crud({\n basePath: '/sap/bc/adt/functions/groups',\n schema: groups,\n contentType: 'application/vnd.sap.adt.functions.groups.v3+xml',\n accept:\n 'application/vnd.sap.adt.functions.groups.v3+xml, application/vnd.sap.adt.functions.groups.v2+xml, application/vnd.sap.adt.functions.groups.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the function groups contract */\nexport type FunctionGroupsContract = typeof functionGroupsContract;\n","/**\n * ADT Function Modules Contract\n *\n * Endpoint: /sap/bc/adt/functions/groups/{groupName}/fmodules/{fmName}\n * Sub-resource of function groups.\n *\n * Function modules are child objects of function groups. They have their own\n * lock lifecycle, source code, and metadata but are accessed through the\n * parent group's URL path.\n */\n\nimport { http, contract } from '../../base';\nimport { textPlain } from '../../helpers/text-schema';\nimport {\n fmodules as fmodulesSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Function module response type - exported for consumers (ADK, etc.)\n */\nexport type FunctionModuleResponse = InferTypedSchema<typeof fmodulesSchema>;\n\nconst contentType = 'application/vnd.sap.adt.functions.fmodules.v3+xml';\nconst accept =\n 'application/vnd.sap.adt.functions.fmodules.v3+xml, application/vnd.sap.adt.functions.fmodules.v2+xml, application/vnd.sap.adt.functions.fmodules.v1+xml';\n\n// Base path with speci path parameter (NOT a JS template literal!)\n// eslint-disable-next-line no-template-curly-in-string\nconst basePath = '/sap/bc/adt/functions/groups/${groupName}/fmodules';\n\n/**\n * /sap/bc/adt/functions/groups/{groupName}/fmodules\n * CRUD operations for function modules within a function group\n */\nexport const functionModulesContract = contract({\n /** GET .../fmodules/{fmName} - Get function module metadata */\n // eslint-disable-next-line no-template-curly-in-string\n get: (_groupName: string, _fmName: string) =>\n http.get(basePath + '/${fmName}', {\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept },\n }),\n\n /** POST .../fmodules - Create function module */\n post: (groupName: string, queryOptions?: { corrNr?: string }) =>\n http.post(basePath, {\n body: fmodulesSchema,\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept, 'Content-Type': contentType },\n query: queryOptions?.corrNr ? { corrNr: queryOptions.corrNr } : undefined,\n }),\n\n /** PUT .../fmodules/{fmName} - Update function module metadata */\n // eslint-disable-next-line no-template-curly-in-string\n put: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.put(basePath + '/${fmName}', {\n body: fmodulesSchema,\n responses: { 200: fmodulesSchema },\n headers: { Accept: accept, 'Content-Type': contentType },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** DELETE .../fmodules/{fmName} - Delete function module */\n // eslint-disable-next-line no-template-curly-in-string\n delete: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.delete(basePath + '/${fmName}', {\n responses: { 204: undefined },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** POST .../fmodules/{fmName}?_action=LOCK - Lock function module */\n // eslint-disable-next-line no-template-curly-in-string\n lock: (\n groupName: string,\n fmName: string,\n options?: { corrNr?: string; accessMode?: 'MODIFY' | 'SOURCE' },\n ) =>\n http.post(basePath + '/${fmName}', {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n Accept:\n 'application/*,application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result',\n },\n query: {\n _action: 'LOCK',\n accessMode: options?.accessMode ?? 'MODIFY',\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n\n /** POST .../fmodules/{fmName}?_action=UNLOCK - Unlock function module */\n // eslint-disable-next-line no-template-curly-in-string\n unlock: (\n groupName: string,\n fmName: string,\n options: { lockHandle: string },\n ) =>\n http.post(basePath + '/${fmName}', {\n responses: { 200: undefined },\n headers: {\n 'X-sap-adt-sessiontype': 'stateful',\n 'x-sap-security-session': 'use',\n },\n query: {\n _action: 'UNLOCK',\n accessMode: 'MODIFY',\n lockHandle: options.lockHandle,\n },\n }),\n\n /** Source code operations */\n source: {\n main: {\n /** GET .../fmodules/{fmName}/source/main - Get source code */\n // eslint-disable-next-line no-template-curly-in-string\n get: (_groupName: string, _fmName: string) =>\n http.get(basePath + '/${fmName}/source/main', {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain' },\n }),\n\n /** PUT .../fmodules/{fmName}/source/main - Update source code */\n // eslint-disable-next-line no-template-curly-in-string\n put: (\n groupName: string,\n fmName: string,\n options?: { lockHandle?: string; corrNr?: string },\n ) =>\n http.put(basePath + '/${fmName}/source/main', {\n body: textPlain,\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'text/plain', 'Content-Type': 'text/plain' },\n query: {\n ...(options?.lockHandle ? { lockHandle: options.lockHandle } : {}),\n ...(options?.corrNr ? { corrNr: options.corrNr } : {}),\n },\n }),\n },\n },\n});\n\nexport type FunctionModulesContract = typeof functionModulesContract;\n","/**\n * ADT Functions Contracts\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/functions/groups → functions.groups\n * - /sap/bc/adt/functions/groups/{group}/fmodules → functions.groups.fmodules\n */\n\nexport {\n functionGroupsContract,\n type FunctionGroupsContract,\n type FunctionGroupResponse,\n} from './groups';\n\nexport {\n functionModulesContract,\n type FunctionModulesContract,\n type FunctionModuleResponse,\n} from './fmodules';\n\nimport { functionGroupsContract } from './groups';\nimport { functionModulesContract } from './fmodules';\n\n/**\n * Functions Contract type definition\n *\n * Function modules are nested under groups following the SAP URL pattern:\n * /sap/bc/adt/functions/groups/{groupName}/fmodules/{fmName}\n */\nexport interface FunctionsContract {\n groups: typeof functionGroupsContract & {\n fmodules: typeof functionModulesContract;\n };\n}\n\nexport const functionsContract: FunctionsContract = {\n groups: {\n ...functionGroupsContract,\n fmodules: functionModulesContract,\n },\n};\n","/**\n * DDIC Domain Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/domains\n * Content-Type: application/vnd.sap.adt.domains.v2+xml\n * Object type: DOMA/DD (domadd)\n */\n\nimport { crud } from '../../helpers/crud';\nimport { domain as domainSchema, type InferTypedSchema } from '../../schemas';\n\n/**\n * Domain response type - exported for consumers (ADK, etc.)\n */\nexport type DomainResponse = InferTypedSchema<typeof domainSchema>;\n\nexport type DomainsContract = typeof domainsContract;\n\nexport const domainsContract = crud({\n basePath: '/sap/bc/adt/ddic/domains',\n schema: domainSchema,\n contentType: 'application/vnd.sap.adt.domains.v2+xml',\n accept:\n 'application/vnd.sap.adt.domains.v2+xml, application/vnd.sap.adt.domains.v1+xml',\n});\n","/**\n * DDIC Data Element Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/dataelements\n * Content-Type: application/vnd.sap.adt.dataelements.v2+xml\n * Object type: DTEL/DE (dtelde)\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n dataelementWrapper as dataelementWrapperSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Data Element response type - exported for consumers (ADK, etc.)\n *\n * Uses the custom wrapper schema because SAP wraps the inner\n * dtel:dataElement content in a blue:wbobj root element\n * (namespace http://www.sap.com/wbobj/dictionary/dtel).\n */\nexport type DataElementResponse = InferTypedSchema<\n typeof dataelementWrapperSchema\n>;\n\nexport type DataelementsContract = typeof dataelementsContract;\n\nexport const dataelementsContract = crud({\n basePath: '/sap/bc/adt/ddic/dataelements',\n schema: dataelementWrapperSchema,\n contentType: 'application/vnd.sap.adt.dataelements.v2+xml',\n accept:\n 'application/vnd.sap.adt.dataelements.v2+xml, application/vnd.sap.adt.dataelements.v1+xml',\n});\n","/**\n * DDIC Structure Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/structures\n * Content-Type: application/vnd.sap.adt.structures.v2+xml\n * Object type: TABL/DS (tablds)\n *\n * Uses the custom blueSource wrapper schema because SAP wraps\n * structure responses in a blue:blueSource root element\n * (namespace http://www.sap.com/wbobj/blue) extending AbapSourceMainObject.\n */\n\nimport { crud } from '../../helpers/crud';\nimport { http } from '@abapify/speci/rest';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Structure response type - exported for consumers (ADK, etc.)\n */\nexport type StructureResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport type StructuresContract = typeof structuresContract;\n\nconst basePath = '/sap/bc/adt/ddic/structures';\nconst contentType = 'application/vnd.sap.adt.structures.v2+xml';\nconst accept =\n 'application/vnd.sap.adt.structures.v2+xml, application/vnd.sap.adt.structures.v1+xml';\n\nexport const structuresContract = {\n ...crud({\n basePath,\n schema: blueSourceSchema,\n contentType,\n accept,\n sources: ['main'] as const,\n }),\n\n objectstructure: (name: string, options?: { version?: string }) =>\n http.get(`${basePath}/${name.toLowerCase()}/objectstructure`, {\n responses: { 200: undefined },\n query: options?.version ? { version: options.version } : undefined,\n }),\n};\n","/**\n * DDIC Database Table Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/tables\n * Content-Type: application/vnd.sap.adt.tables.v2+xml\n * Object type: TABL/DT (tabldt)\n *\n * Uses the custom blueSource wrapper schema because SAP wraps\n * TABL responses in a blue:blueSource root element\n * (namespace http://www.sap.com/wbobj/blue) extending AbapSourceMainObject.\n */\n\nimport { crud } from '../../helpers/crud';\nimport { http } from '@abapify/speci/rest';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Table response type - exported for consumers (ADK, etc.)\n */\nexport type TableResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport type TablesContract = typeof tablesContract;\n\nconst basePath = '/sap/bc/adt/ddic/tables';\nconst contentType = 'application/vnd.sap.adt.tables.v2+xml';\nconst accept =\n 'application/vnd.sap.adt.blues.v1+xml, application/vnd.sap.adt.tables.v2+xml';\n\nexport const tablesContract = {\n ...crud({\n basePath,\n schema: blueSourceSchema,\n contentType,\n accept,\n sources: ['main'] as const,\n }),\n\n objectstructure: (name: string, options?: { version?: string }) =>\n http.get(`${basePath}/${name.toLowerCase()}/objectstructure`, {\n responses: { 200: undefined },\n query: options?.version ? { version: options.version } : undefined,\n }),\n};\n","/**\n * DDIC Database Table Settings Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/db/settings/{name}\n * Content-Type: application/vnd.sap.adt.table.settings.v2+xml\n *\n * Returns the technical DD09L settings for a database table as an XML\n * document. ADK currently consumes this as raw text, so the contract is\n * typed as a plain-text endpoint.\n */\n\nimport { http, contract } from '../../base';\n\nconst basePath = '/sap/bc/adt/ddic/db/settings';\n\nexport const tablesettingsContract = contract({\n /** GET /sap/bc/adt/ddic/db/settings/{name} - Retrieve table settings XML */\n get: (name: string) =>\n http.get(`${basePath}/${name.toLowerCase()}`, {\n responses: { 200: undefined as unknown as string },\n headers: {\n Accept: 'application/vnd.sap.adt.table.settings.v2+xml',\n },\n }),\n});\n\nexport type TableSettingsContract = typeof tablesettingsContract;\n","/**\n * DDIC Table Type Contract\n *\n * ADT endpoint: /sap/bc/adt/ddic/tabletypes\n * Content-Type: application/vnd.sap.adt.tabletype.v1+xml\n * Object type: TTYP/TT\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n tabletype as tabletypeSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * Table Type response type - exported for consumers (ADK, etc.)\n */\nexport type TableTypeResponse = InferTypedSchema<typeof tabletypeSchema>;\n\nexport type TabletypesContract = typeof tabletypesContract;\n\nexport const tabletypesContract = crud({\n basePath: '/sap/bc/adt/ddic/tabletypes',\n schema: tabletypeSchema,\n contentType: 'application/vnd.sap.adt.tabletype.v1+xml',\n accept: 'application/vnd.sap.adt.tabletype.v1+xml',\n});\n","/**\n * ADT CDS DDL Source Contract\n *\n * Endpoint: /sap/bc/adt/ddic/ddl/sources\n * Content-Type: application/vnd.sap.adt.ddlSource+xml\n * Object type: DDLS\n *\n * CDS Data Definition sources — the SAP endpoint for CDS views / data\n * definitions. The metadata document lives at `{basePath}/{name}` and\n * the source text at `{basePath}/{name}/source/main`.\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n ddlSource as ddlSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DdlSourceResponse = InferTypedSchema<typeof ddlSourceSchema>;\n\nexport const ddlSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/ddl/sources',\n schema: ddlSourceSchema,\n contentType: 'application/vnd.sap.adt.ddlSource+xml',\n accept: 'application/vnd.sap.adt.ddlSource+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type DdlSourcesContract = typeof ddlSourcesContract;\n","/**\n * ADT CDS DDL Sources module\n */\n\nexport {\n ddlSourcesContract,\n type DdlSourcesContract,\n type DdlSourceResponse,\n} from './sources';\n\nimport { ddlSourcesContract } from './sources';\n\nexport interface DdlContract {\n sources: typeof ddlSourcesContract;\n}\n\nexport const ddlContract: DdlContract = {\n sources: ddlSourcesContract,\n};\n","/**\n * ADT CDS DCL (Access Control) Source Contract\n *\n * Endpoint: /sap/bc/adt/acm/dcl/sources\n * (Note: the SAP endpoint for DCL sources lives under `acm/dcl`, not\n * `ddic/dcl`. The contract is exported under `ddic.dcl` for API\n * parity with the ADK and the sibling DDL contract.)\n * Content-Type: application/vnd.sap.adt.dclSource+xml\n * Object type: DCLS\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n dclSource as dclSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DclSourceResponse = InferTypedSchema<typeof dclSourceSchema>;\n\nexport const dclSourcesContract = crud({\n basePath: '/sap/bc/adt/acm/dcl/sources',\n schema: dclSourceSchema,\n contentType: 'application/vnd.sap.adt.dclSource+xml',\n accept: 'application/vnd.sap.adt.dclSource+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type DclSourcesContract = typeof dclSourcesContract;\n","/**\n * ADT CDS DCL (Access Control) Sources module\n */\n\nexport {\n dclSourcesContract,\n type DclSourcesContract,\n type DclSourceResponse,\n} from './sources';\n\nimport { dclSourcesContract } from './sources';\n\nexport interface DclContract {\n sources: typeof dclSourcesContract;\n}\n\nexport const dclContract: DclContract = {\n sources: dclSourcesContract,\n};\n","import { crud } from '../../../helpers/crud';\nimport {\n ddlxSource as ddlxSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DdlxSourceResponse = InferTypedSchema<typeof ddlxSourceSchema>;\nexport const ddlxSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/ddlx/sources',\n schema: ddlxSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.ddlx.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.ddlx.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { ddlxSourcesContract, type DdlxSourceResponse } from './sources';\nimport { ddlxSourcesContract } from './sources';\nexport const ddlxContract = { sources: ddlxSourcesContract };\n","import { crud } from '../../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DsfdSourceResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport const dsfdSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/dsfd/sources',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { dsfdSourcesContract, type DsfdSourceResponse } from './sources';\n\nimport { dsfdSourcesContract } from './sources';\n\nexport const dsfdContract = { sources: dsfdSourcesContract };\n","import { http } from '@abapify/speci/rest';\nimport type { Serializable } from '@abapify/speci/rest';\nimport { crud } from '../../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport interface DsfiDefinition {\n formatVersion: '1';\n header: {\n description: string;\n originalLanguage: string;\n abapLanguageVersion?: string;\n };\n scalarFunctionName: string;\n engine: 'analyticalEngine' | 'sqlEngine';\n sqlProperties?: {\n amdpReference: string;\n autoExposedInSqlServices?: boolean;\n };\n}\n\nexport const dsfiDefinitionSchema: Serializable<DsfiDefinition> = {\n _infer: undefined as unknown as DsfiDefinition,\n parse: (raw) => JSON.parse(raw) as DsfiDefinition,\n build: (value) => JSON.stringify(value),\n};\n\nconst baseContract = crud({\n basePath: '/sap/bc/adt/ddic/dsfi',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n});\n\nexport type DsfiResponse = InferTypedSchema<typeof blueSourceSchema>;\n\nexport const dsfiContract = {\n ...baseContract,\n source: {\n main: {\n get: (name: string) =>\n http.get(\n `/sap/bc/adt/ddic/dsfi/${encodeURIComponent(name.toLowerCase())}/source/main`,\n {\n responses: { 200: dsfiDefinitionSchema },\n headers: { Accept: 'application/json' },\n },\n ),\n },\n },\n};\n","import { crud } from '../../../helpers/crud';\nimport {\n dtebSource as dtebSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type DtebSourceResponse = InferTypedSchema<typeof dtebSourceSchema>;\n\nexport const dtebSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/dteb/sources',\n schema: dtebSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.dteb.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.dteb.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n","export { dtebSourcesContract, type DtebSourceResponse } from './sources';\n\nimport { dtebSourcesContract } from './sources';\n\nexport const dtebContract = { sources: dtebSourcesContract };\n","/**\n * ADT RAP Service Definition (SRVD) Source Contract\n *\n * Endpoint: /sap/bc/adt/ddic/srvd/sources\n * Content-Type: application/vnd.sap.adt.ddic.srvd.v1+xml\n * Object type: SRVD/SRV\n *\n * RAP Service Definition — CDS-like source that exposes CDS root\n * entities/behaviors via OData. Mirrors the DDL sources shape: metadata\n * document at `{basePath}/{name}`, source text (`.asrvd`) at\n * `{basePath}/{name}/source/main`.\n *\n * Reference: abapGit handler zcl_abapgit_object_srvd.\n */\n\nimport { crud } from '../../../helpers/crud';\nimport {\n srvdSource as srvdSourceSchema,\n type InferTypedSchema,\n} from '../../../schemas';\n\nexport type SrvdSourceResponse = InferTypedSchema<typeof srvdSourceSchema>;\n\nexport const srvdSourcesContract = crud({\n basePath: '/sap/bc/adt/ddic/srvd/sources',\n schema: srvdSourceSchema,\n contentType: 'application/vnd.sap.adt.ddic.srvd.v1+xml',\n accept: 'application/vnd.sap.adt.ddic.srvd.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\nexport type SrvdSourcesContract = typeof srvdSourcesContract;\n","/**\n * ADT RAP Service Definition module\n */\n\nexport {\n srvdSourcesContract,\n type SrvdSourcesContract,\n type SrvdSourceResponse,\n} from './sources';\n\nimport { srvdSourcesContract } from './sources';\n\nexport interface SrvdContract {\n sources: typeof srvdSourcesContract;\n}\n\nexport const srvdContract: SrvdContract = {\n sources: srvdSourcesContract,\n};\n","/**\n * DDIC (Data Dictionary) Contracts\n *\n * Covers all DDIC object types:\n * - Domains (DOMA)\n * - Data Elements (DTEL)\n * - Structures (TABL/DS)\n * - Database Tables (TABL/DT)\n * - Table Types (TTYP)\n */\n\nexport {\n domainsContract,\n type DomainsContract,\n type DomainResponse,\n} from './domains';\nexport {\n dataelementsContract,\n type DataelementsContract,\n type DataElementResponse,\n} from './dataelements';\nexport {\n structuresContract,\n type StructuresContract,\n type StructureResponse,\n} from './structures';\nexport {\n tablesContract,\n type TablesContract,\n type TableResponse,\n} from './tables';\nexport {\n tablesettingsContract,\n type TableSettingsContract,\n} from './tablesettings';\nexport {\n tabletypesContract,\n type TabletypesContract,\n type TableTypeResponse,\n} from './tabletypes';\nexport {\n ddlContract,\n ddlSourcesContract,\n type DdlContract,\n type DdlSourcesContract,\n type DdlSourceResponse,\n} from './ddl';\nexport {\n dclContract,\n dclSourcesContract,\n type DclContract,\n type DclSourcesContract,\n type DclSourceResponse,\n} from './dcl';\nexport {\n ddlxContract,\n ddlxSourcesContract,\n type DdlxSourceResponse,\n} from './ddlx';\nexport {\n dsfdContract,\n dsfdSourcesContract,\n type DsfdSourceResponse,\n} from './dsfd';\nexport { dsfiContract, type DsfiDefinition, type DsfiResponse } from './dsfi';\nexport {\n dtebContract,\n dtebSourcesContract,\n type DtebSourceResponse,\n} from './dteb';\nexport {\n srvdContract,\n srvdSourcesContract,\n type SrvdContract,\n type SrvdSourcesContract,\n type SrvdSourceResponse,\n} from './srvd';\n\nimport { domainsContract } from './domains';\nimport { dataelementsContract } from './dataelements';\nimport { structuresContract } from './structures';\nimport { tablesContract } from './tables';\nimport { tablesettingsContract } from './tablesettings';\nimport { tabletypesContract } from './tabletypes';\nimport { ddlContract } from './ddl';\nimport { dclContract } from './dcl';\nimport { ddlxContract } from './ddlx';\nimport { dsfdContract } from './dsfd';\nimport { dsfiContract } from './dsfi';\nimport { dtebContract } from './dteb';\nimport { srvdContract } from './srvd';\n\nexport interface DdicContract {\n domains: typeof domainsContract;\n dataelements: typeof dataelementsContract;\n structures: typeof structuresContract;\n tables: typeof tablesContract;\n tablesettings: typeof tablesettingsContract;\n tabletypes: typeof tabletypesContract;\n ddl: typeof ddlContract;\n dcl: typeof dclContract;\n ddlx: typeof ddlxContract;\n dsfd: typeof dsfdContract;\n dsfi: typeof dsfiContract;\n dteb: typeof dtebContract;\n srvd: typeof srvdContract;\n}\n\nexport const ddicContract: DdicContract = {\n domains: domainsContract,\n dataelements: dataelementsContract,\n structures: structuresContract,\n tables: tablesContract,\n tablesettings: tablesettingsContract,\n tabletypes: tabletypesContract,\n ddl: ddlContract,\n dcl: dclContract,\n ddlx: ddlxContract,\n dsfd: dsfdContract,\n dsfi: dsfiContract,\n dteb: dtebContract,\n srvd: srvdContract,\n};\n","/**\n * ADT System Users Contract\n *\n * User lookup and search operations.\n * Path: /sap/bc/adt/system/users\n */\n\nimport { http } from '../../base';\nimport { atomFeed } from '../../schemas';\n\nexport const usersContract = {\n /**\n * Search for users by query string\n *\n * @param options.querystring - Search query (supports wildcards like *)\n * @param options.maxcount - Maximum number of results\n * @returns Atom feed with matching user entries (id = username, title = full name)\n *\n * @example\n * const results = await client.system.users.search({ querystring: 'DEV*', maxcount: 10 });\n */\n search: (options: { querystring: string; maxcount?: number }) =>\n http.get('/sap/bc/adt/system/users', {\n query: {\n querystring: options.querystring,\n ...(options.maxcount !== undefined && { maxcount: options.maxcount }),\n },\n responses: {\n 200: atomFeed,\n },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n },\n }),\n\n /**\n * Get a specific user by username\n *\n * @param username - SAP username (e.g., 'DEVELOPER')\n * @returns Atom feed with a single user entry\n *\n * @example\n * const user = await client.system.users.get('DEVELOPER');\n */\n get: (username: string) =>\n http.get(`/sap/bc/adt/system/users/${encodeURIComponent(username)}`, {\n responses: {\n 200: atomFeed,\n },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n },\n }),\n};\n\nexport type UsersContract = typeof usersContract;\n","/**\n * ADT System Security / STRUST Contracts\n *\n * Contract surface for SAP STRUST (SSL Personal Security Environment)\n * over the ADT REST API. Paths under `/sap/bc/adt/system/security/pses`.\n *\n * NOTE: sapcli (jfilak/sapcli) drives STRUST via RFC function modules\n * (`sap/rfc/strust.py`), not ADT. The paths below follow the\n * `/sap/bc/adt/system/...` convention used elsewhere in the SAP ADT\n * REST surface (see `system/users`). See the accompanying TODO-synthetic\n * fixtures in `@abapify/adt-fixtures` — replace with real captures when\n * available.\n */\n\nimport { http } from '../../../base';\nimport { atomFeed } from '../../../schemas';\n\n/**\n * Inferrable schema wrapper for a PEM (plain-text) request body.\n * Makes `uploadCertificate` accept a `pem: string` argument at the client\n * call-site — speci's `BuildParams` only appends a body parameter when\n * the body is marked Inferrable via the `_infer` tag.\n */\nconst pemBody = { _infer: undefined as unknown as string } as const;\n\n/** Options for {@link psesContract.uploadCertificate}. */\nexport interface UploadCertificateOptions {\n /** PEM-encoded certificate (may contain multiple concatenated certs). */\n pem: string;\n}\n\nexport const psesContract = {\n /**\n * List all Personal Security Environments (identities).\n *\n * `GET /sap/bc/adt/system/security/pses`\n */\n list: () =>\n http.get('/sap/bc/adt/system/security/pses', {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n }),\n\n /**\n * Get a single PSE identified by `{context}/{applic}`.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}`\n */\n get: (context: string, applic: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}`,\n {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n },\n ),\n\n /**\n * List certificates inside a PSE.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}/certificates`\n */\n listCertificates: (context: string, applic: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates`,\n {\n responses: { 200: atomFeed },\n headers: { Accept: 'application/atom+xml;type=feed' },\n },\n ),\n\n /**\n * Fetch the PEM of a single certificate in a PSE.\n *\n * `GET /sap/bc/adt/system/security/pses/{context}/{applic}/certificates/{id}`\n */\n getCertificate: (context: string, applic: string, id: string) =>\n http.get(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates/${encodeURIComponent(id)}`,\n {\n responses: { 200: undefined as unknown as string },\n headers: { Accept: 'application/x-pem-file' },\n },\n ),\n\n /**\n * Upload a PEM certificate into a PSE. The body is the PEM text.\n *\n * `POST /sap/bc/adt/system/security/pses/{context}/{applic}/certificates`\n */\n uploadCertificate: (context: string, applic: string) =>\n http.post(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates`,\n {\n body: pemBody,\n responses: { 200: atomFeed },\n headers: {\n Accept: 'application/atom+xml;type=feed',\n 'Content-Type': 'application/x-pem-file',\n },\n },\n ),\n\n /**\n * Delete a certificate from a PSE.\n *\n * `DELETE /sap/bc/adt/system/security/pses/{context}/{applic}/certificates/{id}`\n */\n deleteCertificate: (context: string, applic: string, id: string) =>\n http.delete(\n `/sap/bc/adt/system/security/pses/${encodeURIComponent(\n context,\n )}/${encodeURIComponent(applic)}/certificates/${encodeURIComponent(id)}`,\n {\n responses: { 204: undefined },\n },\n ),\n};\n\nexport type PsesContract = typeof psesContract;\n","/**\n * ADT System Contracts - Aggregated\n */\n\nexport * from './users';\nexport * from './security/pses';\n\nimport { usersContract, type UsersContract } from './users';\nimport { psesContract, type PsesContract } from './security/pses';\n\nexport interface SystemSecurityContract {\n pses: PsesContract;\n}\n\nexport interface SystemContract {\n users: UsersContract;\n security: SystemSecurityContract;\n}\n\nexport const systemContract: SystemContract = {\n users: usersContract,\n security: {\n pses: psesContract,\n },\n};\n","/**\n * ADT Checkruns Contract\n *\n * Manually-defined endpoint for ABAP syntax check runs.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/checkruns → checkruns.checkObjects (POST with body)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n\nimport { http, contract } from '../../base';\nimport { checkrun } from '../../schemas';\n\n/**\n * /sap/bc/adt/checkruns\n *\n * Run a syntax/check-run on a list of ABAP objects.\n * Request body: checkObjectList (chkrun:CheckObjectList)\n * Response: checkRunReports (chkrun:CheckReportList)\n */\nconst checkObjects = contract({\n /**\n * POST /sap/bc/adt/checkruns\n * Submit a checkObjectList and receive checkRunReports.\n *\n * Both request and response use the same `checkrun` schema (union discriminated\n * by the root element: `checkObjectList` for requests, `checkRunReports` for responses).\n */\n post: () =>\n http.post('/sap/bc/adt/checkruns', {\n body: checkrun,\n responses: { 200: checkrun },\n headers: {\n Accept: 'application/vnd.sap.adt.checkmessages+xml',\n 'Content-Type': 'application/vnd.sap.adt.checkobjects+xml',\n },\n }),\n});\n\n/**\n * Combined Checkruns contract\n */\nexport const checkrunsContract = {\n checkObjects,\n};\n\nexport type CheckrunsContract = typeof checkrunsContract;\n","/**\n * ADT Activation Contract\n *\n * Manually-defined endpoint for ABAP object activation.\n *\n * Structure mirrors URL tree:\n * - /sap/bc/adt/activation → activation.activate (POST with body)\n *\n * NOTE: Not in SAP discovery - manually defined\n */\n\nimport { http, contract } from '../../base';\nimport { adtcore } from '../../schemas';\n\n/**\n * /sap/bc/adt/activation\n *\n * Activate one or more ABAP objects.\n * Request body: adtcore:objectReferences (AdtcoreSchema variant)\n */\nconst activate = contract({\n /**\n * POST /sap/bc/adt/activation{?method,preauditRequested}\n *\n * Submit an objectReferences body to activate the listed objects.\n * The `method` query param selects the action (default: \"activate\").\n * The response XML is not strictly typed here – callers may ignore it.\n */\n post: (params?: { method?: string; preauditRequested?: boolean }) =>\n http.post('/sap/bc/adt/activation', {\n query: params,\n body: adtcore,\n responses: { 200: adtcore },\n headers: {\n Accept: 'application/xml',\n 'Content-Type': 'application/xml',\n },\n }),\n});\n\n/**\n * Combined Activation contract\n */\nexport const activationContract = {\n activate,\n};\n\nexport type ActivationContract = typeof activationContract;\n","/**\n * Data Preview response schema (hand-built JSON schema)\n *\n * The SAP ADT data preview freestyle endpoint returns JSON of the shape:\n *\n * {\n * totalRows: number,\n * isHanaAnalyticalView: boolean,\n * executedQueryString: string,\n * queryExecutionTime: number,\n * dataPreview: {\n * columns: Array<{\n * metadata: { name, type, length, description, keyAttribute, ... },\n * dataPreviewContent: Array<string | null>,\n * }>,\n * },\n * }\n *\n * For robustness across SAP releases the schema accepts an arbitrary object\n * shape (index signature) and only strongly types the fields we actually\n * consume in the CLI / ADK layers.\n */\nimport type { Serializable } from '@abapify/speci/rest';\n\n/** Column metadata block in a data-preview response */\nexport interface DataPreviewColumnMetadata {\n name?: string;\n type?: string;\n length?: number | string;\n description?: string;\n /** Some SAP releases use isKey / keyAttribute / key interchangeably */\n isKey?: boolean;\n keyAttribute?: boolean;\n [extra: string]: unknown;\n}\n\n/** One column entry including both metadata and the column's values */\nexport interface DataPreviewColumn {\n metadata?: DataPreviewColumnMetadata;\n /** Column values, one entry per row in document order */\n dataPreviewContent?: Array<string | null>;\n [extra: string]: unknown;\n}\n\n/** dataPreview wrapper */\nexport interface DataPreviewPayload {\n columns?: DataPreviewColumn[];\n [extra: string]: unknown;\n}\n\n/** Full freestyle response body */\nexport interface DataPreviewFreestyleResponse {\n totalRows?: number;\n isHanaAnalyticalView?: boolean;\n executedQueryString?: string;\n queryExecutionTime?: number;\n dataPreview?: DataPreviewPayload;\n [extra: string]: unknown;\n}\n\n/**\n * Hand-built Serializable schema for the data preview freestyle response.\n *\n * Shape mirrors the ts-xsd `TypedSchema` pattern so it plugs into speci's\n * `Inferrable`/`Serializable` type inference (`_infer`, `parse`, `build`).\n *\n * The adapter calls `schema.parse(raw)` / `schema.build(data)`, so we keep\n * both sides as plain JSON (de)serialisation.\n */\nexport const dataPreviewFreestyleResponseSchema: Serializable<DataPreviewFreestyleResponse> =\n {\n _infer: undefined as unknown as DataPreviewFreestyleResponse,\n parse: (raw: string): DataPreviewFreestyleResponse => {\n if (raw == null || raw === '') return {};\n return JSON.parse(raw) as DataPreviewFreestyleResponse;\n },\n build: (data: DataPreviewFreestyleResponse): string => JSON.stringify(data),\n };\n\n/**\n * Request-body schema: the endpoint accepts a raw SQL SELECT string as\n * `text/plain`. We still model it as a Serializable so speci correctly\n * infers the `string` body parameter at the client call site.\n */\nexport const dataPreviewFreestyleRequestSchema: Serializable<string> = {\n _infer: undefined as unknown as string,\n parse: (raw: string): string => raw,\n build: (data: string): string => data,\n};\n","/**\n * /sap/bc/adt/datapreview/freestyle\n *\n * Executes an ABAP Open SQL SELECT statement and returns the result set as\n * JSON. Mirrors sapcli's `datapreview osql` command and the adt CLI\n * `datapreview osql` command.\n *\n * POST /sap/bc/adt/datapreview/freestyle?rowCount=<n>&outputFormat=json[&noaging=true]\n * Content-Type: text/plain\n * Accept: application/json\n * Body: raw ABAP SQL SELECT statement\n */\n\nimport { http } from '../../base';\nimport {\n dataPreviewFreestyleRequestSchema,\n dataPreviewFreestyleResponseSchema,\n} from './schema';\n/** Query parameters for `POST /datapreview/freestyle` */\nexport interface FreestyleQuery {\n /** Maximum number of rows to return (ADT default: 100) */\n rowCount?: number;\n /** Output format - always `json` for this contract */\n outputFormat?: 'json' | 'xml';\n /** Disable SAP aging (bypass browser cache flag) */\n noaging?: boolean;\n}\n\nexport const freestyle = {\n /** POST /datapreview/freestyle - execute a free-style SQL query */\n post: (query?: FreestyleQuery) =>\n http.post('/sap/bc/adt/datapreview/freestyle', {\n body: dataPreviewFreestyleRequestSchema,\n responses: { 200: dataPreviewFreestyleResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'text/plain',\n },\n query: {\n outputFormat: query?.outputFormat ?? 'json',\n ...(query?.rowCount != null ? { rowCount: query.rowCount } : {}),\n ...(query?.noaging ? { noaging: true } : {}),\n },\n }),\n};\n\nexport type FreestyleContract = typeof freestyle;\nexport {\n dataPreviewFreestyleResponseSchema,\n dataPreviewFreestyleRequestSchema,\n} from './schema';\nexport type { DataPreviewFreestyleResponse } from './schema';\n","/**\n * /sap/bc/adt/datapreview\n *\n * ADT Data Preview endpoints (ABAP SQL execution, value helps, etc.)\n */\n\nimport { freestyle, type FreestyleContract } from './freestyle';\n\nexport { freestyle, type FreestyleContract } from './freestyle';\nexport type {\n DataPreviewFreestyleResponse,\n DataPreviewColumn,\n DataPreviewColumnMetadata,\n DataPreviewPayload,\n} from './schema';\n\nexport interface DatapreviewContract {\n freestyle: FreestyleContract;\n}\n\nexport const datapreviewContract: DatapreviewContract = {\n freestyle,\n};\n","import type { Serializable } from '@abapify/speci/rest';\n\nconst COVERAGE_NAMESPACE = 'http://www.sap.com/adt/cov';\nconst ADT_CORE_NAMESPACE = 'http://www.sap.com/adt/core';\nconst STATEMENTS_RELATION =\n 'http://www.sap.com/adt/relations/runtime/traces/coverage/results/statements';\n\nexport const coverageXmlBody = {\n parse: (value: unknown) => String(value),\n build: (value: string) => value,\n _infer: undefined as unknown as string,\n} satisfies Serializable<string>;\n\nfunction escapeXmlAttribute(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('\"', '"')\n .replaceAll('<', '<')\n .replaceAll('>', '>');\n}\n\nexport function buildCoverageQuery(objectUris: string[]): string {\n const objectReferences = objectUris\n .map(\n (uri) =>\n `<adtcore:objectReference adtcore:uri=\"${escapeXmlAttribute(uri)}\"/>`,\n )\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cov:query xmlns:cov=\"${COVERAGE_NAMESPACE}\">\n<adtcore:objectSets xmlns:adtcore=\"${ADT_CORE_NAMESPACE}\">\n<objectSet kind=\"inclusive\">\n<adtcore:objectReferences>\n${objectReferences}\n</adtcore:objectReferences>\n</objectSet>\n</adtcore:objectSets>\n</cov:query>`;\n}\n\nfunction takeUnseenRecord(\n value: unknown,\n seenValues: Set<unknown>,\n): Record<string, unknown> | undefined {\n if (!value || typeof value !== 'object' || seenValues.has(value)) return;\n seenValues.add(value);\n return value as Record<string, unknown>;\n}\n\nfunction takeStatementUri(\n record: Record<string, unknown>,\n seenUris: Set<string>,\n): string | undefined {\n const { rel, href } = record;\n if (\n rel !== STATEMENTS_RELATION ||\n typeof href !== 'string' ||\n seenUris.has(href)\n ) {\n return;\n }\n seenUris.add(href);\n return href;\n}\n\nfunction enqueueChildObjects(\n record: Record<string, unknown>,\n queue: unknown[],\n): void {\n for (const child of Object.values(record)) {\n if (Array.isArray(child)) {\n queue.push(...child);\n continue;\n }\n if (child && typeof child === 'object') queue.push(child);\n }\n}\n\nexport function extractCoverageStatementUris(value: unknown): string[] {\n const statementUris: string[] = [];\n const seenUris = new Set<string>();\n const seenValues = new Set<unknown>();\n const queue: unknown[] = [value];\n\n while (queue.length > 0) {\n const record = takeUnseenRecord(queue.shift(), seenValues);\n if (!record) continue;\n const statementUri = takeStatementUri(record, seenUris);\n if (statementUri) statementUris.push(statementUri);\n enqueueChildObjects(record, queue);\n }\n\n return statementUris;\n}\n\nexport function buildStatementsBulkRequest(statementUris: string[]): string {\n const requests = statementUris\n .map((uri) => `<statementsRequest get=\"${escapeXmlAttribute(uri)}\"/>`)\n .join('\\n');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cov:statementsBulkRequest xmlns:cov=\"${COVERAGE_NAMESPACE}\">\n${requests}\n</cov:statementsBulkRequest>`;\n}\n","/**\n * /sap/bc/adt/runtime/traces/coverage/measurements/{id}\n *\n * POST returns the ABAP coverage tree (cov:result) for a previously\n * created measurement. Used as the second step of the aunit → coverage\n * flow: aunit run → atom:link to measurement → POST this endpoint.\n *\n * Content-Type: application/xml\n * Accept: application/xml\n */\n\nimport { http, contract } from '../../../../base';\nimport { acoverageResult } from '../../../../schemas';\nimport { coverageXmlBody } from './request';\n\nconst XML_CONTENT_TYPE = 'application/xml';\n\nexport const measurements = contract({\n /**\n * POST /sap/bc/adt/runtime/traces/coverage/measurements/{identifier}\n * ?withAdditionalTypeInfo=true\n *\n * Returns the coverage tree rooted at ADT_ROOT_NODE with coverage\n * totals (branch/procedure/statement) for each object reference.\n */\n post: (identifier: string) =>\n http.post(\n `/sap/bc/adt/runtime/traces/coverage/measurements/${identifier}`,\n {\n query: { withAdditionalTypeInfo: true },\n body: coverageXmlBody,\n responses: { 200: acoverageResult },\n headers: {\n Accept: XML_CONTENT_TYPE,\n 'Content-Type': 'application/xml',\n },\n },\n ),\n});\n\nexport type MeasurementsContract = typeof measurements;\n","/**\n * /sap/bc/adt/runtime/traces/coverage/results/{id}/statements\n *\n * POST returns the cov:statementsBulkResponse with per-method statement\n * / branch / procedure coverage details.\n *\n * Content-Type: application/xml\n * Accept: application/xml\n */\n\nimport { http, contract } from '../../../../base';\nimport { acoverageStatements } from '../../../../schemas';\nimport { coverageXmlBody } from './request';\n\nconst XML_CONTENT_TYPE = 'application/xml';\n\nexport const statements = contract({\n /**\n * POST /sap/bc/adt/runtime/traces/coverage/results/{identifier}/statements\n */\n post: (identifier: string) =>\n http.post(\n `/sap/bc/adt/runtime/traces/coverage/results/${identifier}/statements`,\n {\n body: coverageXmlBody,\n responses: { 200: acoverageStatements },\n headers: {\n Accept: XML_CONTENT_TYPE,\n 'Content-Type': 'application/xml',\n },\n },\n ),\n});\n\nexport type StatementsContract = typeof statements;\n","/**\n * /sap/bc/adt/runtime/traces/coverage\n *\n * ABAP Coverage endpoints. Used as a follow-up to ABAP Unit runs that\n * request coverage — the aunit runResult contains an atom:link pointing\n * to a measurement ID which is then POSTed here.\n */\n\nimport { measurements, type MeasurementsContract } from './measurements';\nimport { statements, type StatementsContract } from './statements';\n\nexport { measurements } from './measurements';\nexport { statements } from './statements';\nexport {\n buildCoverageQuery,\n buildStatementsBulkRequest,\n coverageXmlBody,\n extractCoverageStatementUris,\n} from './request';\nexport type { MeasurementsContract } from './measurements';\nexport type { StatementsContract } from './statements';\n\nexport interface CoverageContract {\n measurements: MeasurementsContract;\n statements: StatementsContract;\n}\n\nexport const coverageContract: CoverageContract = {\n measurements,\n statements,\n};\n","import type { Serializable } from '@abapify/speci/rest';\n\nexport interface RuntimeDumpSummary {\n id?: string;\n type?: string;\n program?: string;\n user?: string;\n timestamp?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeDumpListResponse {\n dumps?: RuntimeDumpSummary[];\n [extra: string]: unknown;\n}\n\nexport interface RuntimeDumpDetailResponse {\n id?: string;\n text?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceSummary {\n id?: string;\n user?: string;\n program?: string;\n timestamp?: string;\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceListResponse {\n traces?: RuntimeTraceSummary[];\n [extra: string]: unknown;\n}\n\nexport interface RuntimeTraceDetailResponse {\n id?: string;\n entries?: unknown[];\n [extra: string]: unknown;\n}\n\nfunction parseJsonOrRaw<T extends Record<string, unknown>>(raw: string): T {\n if (!raw) {\n return {} as unknown as T;\n }\n\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as T;\n }\n\n return {\n raw,\n } as unknown as T;\n}\n\nfunction buildJson<T>(value: T): string {\n return JSON.stringify(value);\n}\n\nexport const runtimeDumpListSchema: Serializable<RuntimeDumpListResponse> = {\n _infer: undefined as unknown as RuntimeDumpListResponse,\n parse: (raw: string): RuntimeDumpListResponse =>\n parseJsonOrRaw<RuntimeDumpListResponse>(raw),\n build: (value: RuntimeDumpListResponse): string => buildJson(value),\n};\n\nexport const runtimeDumpDetailSchema: Serializable<RuntimeDumpDetailResponse> =\n {\n _infer: undefined as unknown as RuntimeDumpDetailResponse,\n parse: (raw: string): RuntimeDumpDetailResponse =>\n parseJsonOrRaw<RuntimeDumpDetailResponse>(raw),\n build: (value: RuntimeDumpDetailResponse): string => buildJson(value),\n };\n\nexport const runtimeTraceListSchema: Serializable<RuntimeTraceListResponse> = {\n _infer: undefined as unknown as RuntimeTraceListResponse,\n parse: (raw: string): RuntimeTraceListResponse =>\n parseJsonOrRaw<RuntimeTraceListResponse>(raw),\n build: (value: RuntimeTraceListResponse): string => buildJson(value),\n};\n\nexport const runtimeTraceDetailSchema: Serializable<RuntimeTraceDetailResponse> =\n {\n _infer: undefined as unknown as RuntimeTraceDetailResponse,\n parse: (raw: string): RuntimeTraceDetailResponse =>\n parseJsonOrRaw<RuntimeTraceDetailResponse>(raw),\n build: (value: RuntimeTraceDetailResponse): string => buildJson(value),\n };\n","/**\n * /sap/bc/adt/runtime/traces\n *\n * Runtime trace list and detail endpoints used by diagnostics tooling.\n */\n\nimport { contract, http } from '../../../base';\nimport { runtimeTraceDetailSchema, runtimeTraceListSchema } from '../schema';\n\nexport const profile = contract({\n list: () =>\n http.get('/sap/bc/adt/runtime/traces', {\n responses: { 200: runtimeTraceListSchema },\n headers: { Accept: 'application/json' },\n }),\n hitlist: (id: string) =>\n http.get(`/sap/bc/adt/runtime/traces/${id}/hitlist`, {\n responses: { 200: runtimeTraceDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n dbAccesses: (id: string) =>\n http.get(`/sap/bc/adt/runtime/traces/${id}/dbaccesses`, {\n responses: { 200: runtimeTraceDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type RuntimeTraceProfileContract = typeof profile;\n","/**\n * /sap/bc/adt/runtime/traces\n *\n * Runtime trace endpoints (currently only ABAP coverage).\n */\n\nimport { coverageContract, type CoverageContract } from './coverage';\nimport { profile, type RuntimeTraceProfileContract } from './profile';\n\nexport * from './coverage';\nexport * from './profile';\n\nexport interface TracesContract {\n coverage: CoverageContract;\n profile: RuntimeTraceProfileContract;\n}\n\nexport const tracesContract: TracesContract = {\n coverage: coverageContract,\n profile,\n};\n","/**\n * /sap/bc/adt/runtime/dumps\n *\n * Short dump listing and details.\n */\n\nimport { contract, http } from '../../base';\nimport { runtimeDumpDetailSchema, runtimeDumpListSchema } from './schema';\n\nexport interface RuntimeDumpsQuery {\n user?: string;\n maxResults?: number;\n}\n\nexport const dumps = contract({\n list: (query?: RuntimeDumpsQuery) =>\n http.get('/sap/bc/adt/runtime/dumps', {\n responses: { 200: runtimeDumpListSchema },\n headers: { Accept: 'application/json' },\n query: {\n ...(query?.user ? { user: query.user } : {}),\n ...(query?.maxResults != null ? { maxResults: query.maxResults } : {}),\n },\n }),\n get: (id: string) =>\n http.get(`/sap/bc/adt/runtime/dumps/${id}`, {\n responses: { 200: runtimeDumpDetailSchema },\n headers: { Accept: 'application/json' },\n }),\n});\n\nexport type RuntimeDumpsContract = typeof dumps;\n","/**\n * /sap/bc/adt/runtime\n *\n * ABAP runtime endpoints (traces, coverage, …).\n */\n\nimport { tracesContract, type TracesContract } from './traces';\nimport { dumps, type RuntimeDumpsContract } from './dumps';\n\nexport * from './traces';\nexport * from './dumps';\nexport * from './schema';\n\nexport interface RuntimeContract {\n traces: TracesContract;\n dumps: RuntimeDumpsContract;\n}\n\nexport const runtimeContract: RuntimeContract = {\n traces: tracesContract,\n dumps,\n};\n","/**\n * gCTS (git-enabled CTS) JSON schemas.\n *\n * gCTS lives under `/sap/bc/cts_abapvcs/` — a separate REST surface from\n * `/sap/bc/adt/`. All responses are JSON. Schemas are hand-built\n * `Serializable<T>` values matching speci's `_infer` marker pattern (same as\n * `adt-contracts/src/adt/datapreview/schema.ts`). No XSDs involved.\n *\n * Shapes derived from:\n * - /tmp/sapcli-ref/sapcli/sap/rest/gcts/remote_repo.py\n * - /tmp/sapcli-ref/sapcli/test/unit/test_sap_rest_gcts.py\n * - /tmp/sapcli-ref/sapcli/test/unit/fixtures_sap_rest_gcts.py\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n// ── Primitives ─────────────────────────────────────────────────────────────\n\nexport interface GctsConfigEntry {\n key: string;\n value?: string;\n category?: string;\n changedAt?: string;\n changedBy?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsRepository {\n rid: string;\n name?: string;\n role?: 'SOURCE' | 'TARGET' | (string & {});\n type?: 'GIT' | 'GITHUB' | (string & {});\n vsid?: string;\n status?: string;\n branch?: string;\n currentCommit?: string;\n url?: string;\n connection?: string;\n config?: GctsConfigEntry[];\n [extra: string]: unknown;\n}\n\nexport interface GctsBranch {\n name: string;\n type?: 'active' | 'local' | 'remote' | (string & {});\n isSymbolic?: boolean;\n isPeeled?: boolean;\n ref?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommit {\n id: string;\n author?: string;\n authorMail?: string;\n date?: string;\n message?: string;\n description?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsRepoObject {\n pgmid?: string;\n type?: string;\n object?: string;\n description?: string;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommitObjectRef {\n /** Transport number, package name, or object key (depends on `type`). */\n object: string;\n /** `TRANSPORT` | `FULL_PACKAGE` | object pgmid */\n type: string;\n}\n\n// ── Request bodies ─────────────────────────────────────────────────────────\n\nexport interface GctsCreateRepositoryRequest {\n repository: string;\n data: GctsRepository;\n}\n\nexport interface GctsSetConfigRequest {\n key: string;\n value: string;\n}\n\nexport interface GctsCreateBranchRequest {\n branch: string;\n type?: 'local' | 'global';\n isSymbolic?: boolean;\n isPeeled?: boolean;\n}\n\nexport interface GctsCommitRequest {\n message: string;\n /** Always serialised as lowercase string by gCTS (\"true\"/\"false\"). */\n autoPush?: 'true' | 'false' | boolean;\n objects: GctsCommitObjectRef[];\n description?: string;\n}\n\n// ── Responses ──────────────────────────────────────────────────────────────\n\nexport interface GctsRepositoriesResponse {\n result?: GctsRepository[];\n [extra: string]: unknown;\n}\n\nexport interface GctsRepositoryEnvelope {\n /** GET /repository/<id> — repo under `result`. */\n result?: GctsRepository;\n /** POST /repository (create) — repo under `repository`. */\n repository?: GctsRepository;\n [extra: string]: unknown;\n}\n\nexport interface GctsBranchesResponse {\n branches?: GctsBranch[];\n [extra: string]: unknown;\n}\n\nexport interface GctsCreateBranchResponse {\n branch?: GctsBranch;\n [extra: string]: unknown;\n}\n\nexport interface GctsLogResponse {\n commits?: GctsCommit[];\n [extra: string]: unknown;\n}\n\nexport interface GctsPullResponse {\n fromCommit?: string;\n toCommit?: string;\n history?: {\n fromCommit?: string;\n toCommit?: string;\n type?: string;\n [extra: string]: unknown;\n };\n [extra: string]: unknown;\n}\n\nexport interface GctsObjectsResponse {\n objects?: GctsRepoObject[];\n [extra: string]: unknown;\n}\n\nexport interface GctsConfigResponse {\n result?: GctsConfigEntry;\n [extra: string]: unknown;\n}\n\nexport interface GctsCommitResponse {\n /** SAP returns varying shapes; keep permissive. */\n [extra: string]: unknown;\n}\n\nexport interface GctsErrorResponse {\n exception?: string;\n log?: Array<{ message?: string; [extra: string]: unknown }>;\n [extra: string]: unknown;\n}\n\n// ── Schema helper ──────────────────────────────────────────────────────────\n\nfunction jsonSchema<T>(): Serializable<T> {\n return {\n _infer: undefined as unknown as T,\n parse: (raw: string): T => {\n if (raw == null || raw === '') return {} as T;\n return JSON.parse(raw) as T;\n },\n build: (data: T): string => JSON.stringify(data),\n };\n}\n\n// ── Exported schemas ───────────────────────────────────────────────────────\n\nexport const gctsRepositoriesSchema = jsonSchema<GctsRepositoriesResponse>();\nexport const gctsRepositorySchema = jsonSchema<GctsRepositoryEnvelope>();\nexport const gctsCreateRepositoryBodySchema =\n jsonSchema<GctsCreateRepositoryRequest>();\nexport const gctsSetItemBodySchema = jsonSchema<Record<string, unknown>>();\nexport const gctsBranchesSchema = jsonSchema<GctsBranchesResponse>();\nexport const gctsCreateBranchBodySchema = jsonSchema<GctsCreateBranchRequest>();\nexport const gctsCreateBranchResponseSchema =\n jsonSchema<GctsCreateBranchResponse>();\nexport const gctsSetConfigBodySchema = jsonSchema<GctsSetConfigRequest>();\nexport const gctsConfigSchema = jsonSchema<GctsConfigResponse>();\nexport const gctsLogSchema = jsonSchema<GctsLogResponse>();\nexport const gctsPullSchema = jsonSchema<GctsPullResponse>();\nexport const gctsObjectsSchema = jsonSchema<GctsObjectsResponse>();\nexport const gctsCommitBodySchema = jsonSchema<GctsCommitRequest>();\nexport const gctsCommitResponseSchema = jsonSchema<GctsCommitResponse>();\nexport const gctsGenericOkSchema = jsonSchema<Record<string, unknown>>();\n","/**\n * /sap/bc/cts_abapvcs/repository/**\n *\n * gCTS repository endpoints. Shapes mirror sapcli's\n * `Repository` / `simple.fetch_repos` behaviour.\n */\n\nimport { http } from '../../base';\nimport {\n gctsRepositoriesSchema,\n gctsRepositorySchema,\n gctsCreateRepositoryBodySchema,\n gctsSetItemBodySchema,\n gctsGenericOkSchema,\n gctsLogSchema,\n gctsPullSchema,\n gctsObjectsSchema,\n} from './schema';\n\nconst BASE = '/sap/bc/cts_abapvcs/repository';\n\n/** List all repositories (GET /repository). */\nconst list = () =>\n http.get(BASE, {\n responses: { 200: gctsRepositoriesSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single repository (GET /repository/<rid>). */\nconst get = (rid: string) =>\n http.get(`${BASE}/${rid}`, {\n responses: { 200: gctsRepositorySchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Create a new repository (POST /repository). */\nconst create = () =>\n http.post(BASE, {\n body: gctsCreateRepositoryBodySchema,\n responses: { 201: gctsRepositorySchema, 200: gctsRepositorySchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\n/** Delete a repository (DELETE /repository/<rid>). */\nconst del = (rid: string) =>\n http.delete(`${BASE}/${rid}`, {\n responses: { 200: gctsGenericOkSchema, 204: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Clone (POST /repository/<rid>/clone). */\nconst clone = (rid: string) =>\n http.post(`${BASE}/${rid}/clone`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Pull (GET /repository/<rid>/pullByCommit). */\nconst pull = (rid: string) =>\n http.get(`${BASE}/${rid}/pullByCommit`, {\n responses: { 200: gctsPullSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Push (GET /repository/<rid>/push) — gCTS uses GET, not POST. */\nconst push = (rid: string) =>\n http.get(`${BASE}/${rid}/push`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Checkout (GET /repository/<rid>/branches/<currentBranch>/switch?branch=X).\n * Caller must supply both the *current* branch (path) and the *target* branch\n * (query) — mirrors sapcli's `Repository.checkout`.\n */\nconst checkout = (rid: string, currentBranch: string, targetBranch: string) =>\n http.get(`${BASE}/${rid}/branches/${currentBranch}/switch`, {\n query: { branch: targetBranch },\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Commit history (GET /repository/<rid>/getCommit). */\nconst log = (rid: string) =>\n http.get(`${BASE}/${rid}/getCommit`, {\n responses: { 200: gctsLogSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Object list (GET /repository/<rid>/getObjects). */\nconst objects = (rid: string) =>\n http.get(`${BASE}/${rid}/getObjects`, {\n responses: { 200: gctsObjectsSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Set a repository property (POST /repository/<rid>).\n * Body is `{ <property>: <value> }`, e.g. `{ role: 'TARGET' }` or\n * `{ url: 'https://…' }`.\n */\nconst setItem = (rid: string) =>\n http.post(`${BASE}/${rid}`, {\n body: gctsSetItemBodySchema,\n responses: { 200: gctsGenericOkSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nexport const repository = {\n list,\n get,\n create,\n delete: del,\n clone,\n pull,\n push,\n checkout,\n log,\n objects,\n setItem,\n};\n\nexport type RepositoryContract = typeof repository;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/branches\n *\n * Branch management endpoints.\n */\n\nimport { http } from '../../base';\nimport {\n gctsBranchesSchema,\n gctsCreateBranchBodySchema,\n gctsCreateBranchResponseSchema,\n gctsGenericOkSchema,\n} from './schema';\n\nconst base = (rid: string) => `/sap/bc/cts_abapvcs/repository/${rid}/branches`;\n\nconst list = (rid: string) =>\n http.get(base(rid), {\n responses: { 200: gctsBranchesSchema },\n headers: { Accept: 'application/json' },\n });\n\nconst create = (rid: string) =>\n http.post(base(rid), {\n body: gctsCreateBranchBodySchema,\n responses: { 200: gctsCreateBranchResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nconst del = (rid: string, name: string) =>\n http.delete(`${base(rid)}/${name}`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\n/**\n * Switch branches (GET /repository/<rid>/branches/<current>/switch?branch=X).\n * Alias of `repository.checkout` — exposed here for discoverability when\n * working with the `branches` sub-surface.\n */\nconst switchBranch = (rid: string, currentBranch: string, target: string) =>\n http.get(`${base(rid)}/${currentBranch}/switch`, {\n query: { branch: target },\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const branches = {\n list,\n create,\n delete: del,\n switch: switchBranch,\n};\n\nexport type BranchesContract = typeof branches;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/commit\n *\n * Commit endpoint. Shapes mirror sapcli's\n * `Repository.commit` / `commit_package` / `commit_transport`.\n */\n\nimport { http } from '../../base';\nimport { gctsCommitBodySchema, gctsCommitResponseSchema } from './schema';\n\nconst commit = (rid: string) =>\n http.post(`/sap/bc/cts_abapvcs/repository/${rid}/commit`, {\n body: gctsCommitBodySchema,\n responses: { 200: gctsCommitResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\nexport const commits = {\n commit,\n};\n\nexport type CommitsContract = typeof commits;\n","/**\n * /sap/bc/cts_abapvcs/repository/<rid>/config\n *\n * Repository configuration endpoints (key/value pairs).\n */\n\nimport { http } from '../../base';\nimport {\n gctsConfigSchema,\n gctsSetConfigBodySchema,\n gctsGenericOkSchema,\n} from './schema';\n\nconst base = (rid: string) => `/sap/bc/cts_abapvcs/repository/${rid}/config`;\n\n/** GET single config value: /repository/<rid>/config/<key>. */\nconst get = (rid: string, key: string) =>\n http.get(`${base(rid)}/${key}`, {\n responses: { 200: gctsConfigSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** POST /repository/<rid>/config — body `{ key, value }`. */\nconst set = (rid: string) =>\n http.post(base(rid), {\n body: gctsSetConfigBodySchema,\n responses: { 200: gctsGenericOkSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n });\n\n/** DELETE /repository/<rid>/config/<key>. */\nconst del = (rid: string, key: string) =>\n http.delete(`${base(rid)}/${key}`, {\n responses: { 200: gctsGenericOkSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const config = {\n get,\n set,\n delete: del,\n};\n\nexport type ConfigContract = typeof config;\n","/**\n * /sap/bc/cts_abapvcs — gCTS (git-enabled CTS) contracts.\n *\n * Separate REST surface from /sap/bc/adt. Exposed as `client.adt.gcts.*`\n * for parity with sapcli's `sap gcts` CLI surface.\n */\n\nimport {\n repository,\n type RepositoryContract as GctsRepositoryContract,\n} from './repository';\nimport {\n branches,\n type BranchesContract as GctsBranchesContract,\n} from './branches';\nimport {\n commits,\n type CommitsContract as GctsCommitsContract,\n} from './commits';\nimport { config, type ConfigContract as GctsConfigContract } from './config';\n\n// Re-export schema types only. The individual sub-namespaces\n// (repository/branches/commits/config) are accessed through the\n// `gctsContract` tree below to avoid collisions with the top-level\n// `repository` / `packages` namespaces in `adt/index.ts`.\nexport * from './schema';\nexport interface GctsContract {\n repository: GctsRepositoryContract;\n branches: GctsBranchesContract;\n commits: GctsCommitsContract;\n config: GctsConfigContract;\n}\n\nexport const gctsContract: GctsContract = {\n repository,\n branches,\n commits,\n config,\n};\nexport type { RepositoryContract as GctsRepositoryContract } from './repository';\nexport type { BranchesContract as GctsBranchesContract } from './branches';\nexport type { CommitsContract as GctsCommitsContract } from './commits';\nexport type { ConfigContract as GctsConfigContract } from './config';\n","/**\n * ADT Behavior Definition (BDEF) Contract\n *\n * Endpoint: /sap/bc/adt/bo/behaviordefinitions/{name}\n * /sap/bc/adt/bo/behaviordefinitions/{name}/source/main\n *\n * Object type: BDEF/BDO\n * Content-Type: application/vnd.sap.adt.blues.v1+xml\n *\n * SAP wraps BDEF metadata in the shared `blue:blueSource` wrapper\n * (namespace http://www.sap.com/wbobj/blue) that extends\n * abapsource:AbapSourceMainObject — the same envelope used by\n * DDIC TABL/Structure responses. The BDEF source (`.abdl`) is\n * served as text/plain via `source/main`.\n *\n * Reference: sapcli `sap/adt/objects.py` (class BehaviorDefinition).\n */\n\nimport { crud } from '../../helpers/crud';\nimport {\n blueSource as blueSourceSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\n/**\n * BDEF response type — re-used `blueSource` wrapper (same as TABL/STRUCT).\n * Consumers (ADK, MCP, CLI) import this alias instead of blueSource\n * to make the intent explicit.\n */\nexport type BehaviorDefinitionResponse = InferTypedSchema<\n typeof blueSourceSchema\n>;\n\n/**\n * /sap/bc/adt/bo/behaviordefinitions\n * Full CRUD operations for ABAP Behavior Definitions (RAP).\n *\n * Includes:\n * - Basic CRUD: get, post, put, delete\n * - Lock/Unlock: lock, unlock\n * - Object structure: objectstructure\n * - Source code: source.main.get/put (text/plain .abdl)\n */\nexport const behaviordefinitionsContract = crud({\n basePath: '/sap/bc/adt/bo/behaviordefinitions',\n schema: blueSourceSchema,\n contentType: 'application/vnd.sap.adt.blues.v1+xml',\n accept: 'application/vnd.sap.adt.blues.v1+xml',\n nameTransform: (name) => encodeURIComponent(name.toLowerCase()),\n sources: ['main'] as const,\n});\n\n/** Type alias for the BDEF contract */\nexport type BehaviordefinitionsContract = typeof behaviordefinitionsContract;\n","/**\n * ADT Business Object (BO) Contracts\n *\n * Namespace: /sap/bc/adt/bo/...\n *\n * Currently hosts:\n * - /sap/bc/adt/bo/behaviordefinitions (BDEF — RAP behavior definition)\n */\n\nexport {\n behaviordefinitionsContract,\n type BehaviordefinitionsContract,\n type BehaviorDefinitionResponse,\n} from './behaviordefinitions';\n\nimport { behaviordefinitionsContract } from './behaviordefinitions';\n\n/**\n * BO Contract type definition\n */\nexport interface BoContract {\n behaviordefinitions: typeof behaviordefinitionsContract;\n}\n\nexport const boContract: BoContract = {\n behaviordefinitions: behaviordefinitionsContract,\n};\n","/**\n * ADT RAP Service Binding (SRVB) Contract\n *\n * Endpoint: /sap/bc/adt/businessservices/bindings\n * Content-Type: application/vnd.sap.adt.businessservices.servicebinding.v2+xml\n * Object type: SRVB/SVB\n *\n * RAP Service Binding — binds a Service Definition (SRVD) to a runtime\n * protocol (OData V2/V4, INA, SQL). Unlike BDEF/SRVD, SRVB is **metadata\n * only** — there is no `.abdl`/`.asrvd`-style source text. The binding\n * XML carries the service + protocol references.\n *\n * Extra operations vs plain `crud()`:\n * - publish → POST {basePath}/{name}/publishedstates\n * - unpublish → DELETE {basePath}/{name}/publishedstates\n *\n * Reference: abapGit handler zcl_abapgit_object_srvb.\n */\n\nimport { http } from '@abapify/speci/rest';\nimport type { RestEndpointDescriptor } from '@abapify/speci/rest';\nimport { crud, type CrudContract } from '../../helpers/crud';\nimport {\n servicebinding as servicebindingSchema,\n type InferTypedSchema,\n} from '../../schemas';\n\nexport type ServiceBindingResponse = InferTypedSchema<\n typeof servicebindingSchema\n>;\n\nconst basePath = '/sap/bc/adt/businessservices/bindings';\nconst nameTransform = (n: string) => encodeURIComponent(n.toLowerCase());\n\nconst baseContract = crud({\n basePath,\n schema: servicebindingSchema,\n contentType: 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml',\n accept: 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml',\n nameTransform,\n});\n\n/**\n * Publish/unpublish extension for SRVB.\n *\n * - publish: POST {basePath}/{name}/publishedstates\n * Activates the binding in the SAP Gateway.\n * - unpublish: DELETE {basePath}/{name}/publishedstates\n * Deactivates the binding.\n */\nexport const bindingsContract: CrudContract<typeof servicebindingSchema> & {\n publish: (\n name: string,\n ) => RestEndpointDescriptor<'POST', string, never, { 200: undefined }>;\n unpublish: (\n name: string,\n ) => RestEndpointDescriptor<'DELETE', string, never, { 204: undefined }>;\n} = {\n ...baseContract,\n publish: (name: string) =>\n http.post(`${basePath}/${nameTransform(name)}/publishedstates`, {\n responses: { 200: undefined },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n }),\n unpublish: (name: string) =>\n http.delete(`${basePath}/${nameTransform(name)}/publishedstates`, {\n responses: { 204: undefined },\n headers: { Accept: 'application/json' },\n }),\n};\n\nexport type BindingsContract = typeof bindingsContract;\n","/**\n * ADT Business Services Contracts\n *\n * Namespace: /sap/bc/adt/businessservices/...\n *\n * Currently hosts:\n * - /sap/bc/adt/businessservices/bindings (SRVB — RAP service binding)\n */\n\nexport {\n bindingsContract,\n type BindingsContract,\n type ServiceBindingResponse,\n} from './bindings';\n\nimport { bindingsContract } from './bindings';\n\n/**\n * Business Services Contract type definition\n */\nexport interface BusinessservicesContract {\n bindings: typeof bindingsContract;\n}\n\nexport const businessservicesContract: BusinessservicesContract = {\n bindings: bindingsContract,\n};\n","/**\n * ADT BAdI / Enhancement Implementation (ENHO) Contract\n *\n * Endpoints:\n * /sap/bc/adt/enhancements/enhoxhh/{name}\n * /sap/bc/adt/enhancements/enhoxhh/{name}/source/main\n *\n * Object type: ENHO/XHH (enhancement implementation, BAdI container)\n * Content-Type: application/vnd.sap.adt.enhancements.enhoxhh.v1+xml\n *\n * SAP wraps the enhancement implementation in an\n * `enh:enhancementImplementation` element extending\n * `adtcore:AdtMainObject`. The BAdI implementations themselves live\n * inside the text payload served via `source/main`.\n *\n * The full XSD at `packages/adt-schemas/.xsd/sap/enhancements.xsd`\n * models the heavyweight emf tree (sourceCodePlugin, BAdI entries,\n * etc.). For CLI / MCP use we only need the AdtMainObject envelope —\n * same pattern as bdef's `blueSource` wrapper.\n *\n * sapcli reference: `sap/cli/badi.py`. In sapcli, `sap badi` lists the\n * BAdIs carried by a given Enhancement Implementation name (`-i` flag).\n */\n\nimport { crud } from '../../helpers/crud';\nimport { badi as badiSchema, type InferTypedSchema } from '../../schemas';\n\n/** BAdI (ENHO) GET response shape. */\nexport type BadiResponse = InferTypedSchema<typeof badiSchema>;\n\n/**\n * /sap/bc/adt/enhancements/enhoxhh\n *\n * CRUD + lock/unlock + source/main (`/source/main` text body).\n */\nexport const enhoxhhContract = crud({\n basePath: '/sap/bc/adt/enhancements/enhoxhh',\n schema: badiSchema,\n contentType: 'application/vnd.sap.adt.enhancements.enhoxhh.v1+xml',\n accept: 'application/vnd.sap.adt.enhancements.enhoxhh.v1+xml',\n sources: ['main'] as const,\n});\n\n/** Type alias for the BAdI/ENHO contract */\nexport type EnhoxhhContract = typeof enhoxhhContract;\n","/**\n * ADT Enhancement Framework Contracts\n *\n * Namespace: /sap/bc/adt/enhancements/...\n *\n * Currently hosts:\n * - /sap/bc/adt/enhancements/enhoxhh (ENHO/XHH — BAdI impl container)\n *\n * Other enhancement sub-types (enhoxh, enhoxhb, enhsxs, enhsxsb) are\n * documented in the discovery service but not yet modelled — add as\n * demand arises.\n */\n\nexport {\n enhoxhhContract,\n type EnhoxhhContract,\n type BadiResponse,\n} from './enhoxhh';\n\nimport { enhoxhhContract } from './enhoxhh';\n\n/** Enhancement-area contract shape. */\nexport interface EnhancementsContract {\n enhoxhh: typeof enhoxhhContract;\n}\n\nexport const enhancementsContract: EnhancementsContract = {\n enhoxhh: enhoxhhContract,\n};\n","/**\n * Fiori Launchpad (FLP) — JSON schemas for the Page Builder OData surface.\n *\n * IMPORTANT: Unlike most contracts in this package, FLP is NOT served from\n * `/sap/bc/adt/*`. The epic E14 originally pointed at `/sap/bc/adt/uifsa/`,\n * but probing BTP Trial shows that namespace does not exist. The real FLP\n * inventory endpoints live on the OData service\n * `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/` (and the customizing twin\n * `PAGE_BUILDER_CUST/`). sapcli's `sap/flp/service.py` uses the same\n * OData service via pyodata — we follow that precedent.\n *\n * To make OData JSON responses play nicely with the existing adapter we\n * request `?$format=json`. The server wraps all feeds in `{ d: { results: [] } }`\n * and single entities in `{ d: {…} }`.\n *\n * Shapes are intentionally permissive (extra keys ignored, most fields\n * optional) because the Page Builder service returns a lot of navigation\n * `__deferred` links and internal metadata that consumers don't care about.\n */\n\nimport type { Serializable } from '@abapify/speci/rest';\n\n// ── Primitives ─────────────────────────────────────────────────────────────\n\n/** An OData `Catalogs` entity — one FLP catalog. */\nexport interface FlpCatalog {\n id?: string;\n type?: string;\n domainId?: string;\n title?: string;\n systemAlias?: string;\n originalLanguage?: string;\n scope?: string;\n /** SAP returns this as a zero-padded string (\"0001\"), not a number. */\n chipCount?: string;\n isReadOnly?: string;\n outdated?: string;\n [extra: string]: unknown;\n}\n\n/** An OData `Pages` entity — a launchpad group / page. */\nexport interface FlpGroup {\n id?: string;\n title?: string;\n catalogId?: string;\n layout?: string;\n originalLanguage?: string;\n isCatalogPage?: string;\n chipInstanceCount?: string;\n isPersLocked?: string;\n isReadOnly?: string;\n scope?: string;\n /** SAP serialises dates as `/Date(<ms>)/`. */\n updated?: string;\n outdated?: string;\n [extra: string]: unknown;\n}\n\n/** An OData `Chips` entity — a tile definition or instance. */\nexport interface FlpTile {\n id?: string;\n title?: string;\n description?: string;\n configuration?: string;\n url?: string;\n baseChipId?: string;\n catalogId?: string;\n catalogPageChipInstanceId?: string;\n referenceChipId?: string;\n isReadOnly?: string;\n [extra: string]: unknown;\n}\n\n// ── OData envelope types ───────────────────────────────────────────────────\n\n/** OData v2 feed: `{ d: { results: T[] } }`. */\nexport interface ODataFeed<T> {\n d?: {\n results?: T[];\n [extra: string]: unknown;\n };\n [extra: string]: unknown;\n}\n\n/** OData v2 single entity: `{ d: T }`. */\nexport interface ODataEntity<T> {\n d?: T;\n [extra: string]: unknown;\n}\n\nexport type FlpCatalogListResponse = ODataFeed<FlpCatalog>;\nexport type FlpCatalogResponse = ODataEntity<FlpCatalog>;\nexport type FlpGroupListResponse = ODataFeed<FlpGroup>;\nexport type FlpGroupResponse = ODataEntity<FlpGroup>;\nexport type FlpTileListResponse = ODataFeed<FlpTile>;\nexport type FlpTileResponse = ODataEntity<FlpTile>;\n\n// ── Schema helpers ─────────────────────────────────────────────────────────\n\nfunction jsonSchema<T>(): Serializable<T> {\n return {\n _infer: undefined as unknown as T,\n parse: (raw: string): T => {\n if (raw == null || raw === '') return {} as T;\n return JSON.parse(raw) as T;\n },\n build: (data: T): string => JSON.stringify(data),\n };\n}\n\n// ── Exported schemas ───────────────────────────────────────────────────────\n\nexport const flpCatalogListSchema = jsonSchema<FlpCatalogListResponse>();\nexport const flpCatalogSchema = jsonSchema<FlpCatalogResponse>();\nexport const flpGroupListSchema = jsonSchema<FlpGroupListResponse>();\nexport const flpGroupSchema = jsonSchema<FlpGroupResponse>();\nexport const flpTileListSchema = jsonSchema<FlpTileListResponse>();\nexport const flpTileSchema = jsonSchema<FlpTileResponse>();\n\n// ── Result normalisers ─────────────────────────────────────────────────────\n\n/** Extract `d.results` from an OData feed response. */\nexport function normalizeOdataFeed<T>(response: ODataFeed<T>): T[] {\n return response?.d?.results ?? [];\n}\n\n/** Extract `d` from an OData single-entity response. */\nexport function normalizeOdataEntity<T>(\n response: ODataEntity<T>,\n): T | undefined {\n return response?.d;\n}\n","/**\n * Fiori Launchpad catalogs — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Catalogs`.\n *\n * Read-only in v1 (E14 scope). Create/delete are handled by\n * `sap/flp/service.py` in sapcli but are out of scope here.\n */\n\nimport { http } from '../../base';\nimport {\n flpCatalogListSchema,\n flpCatalogSchema,\n flpTileListSchema,\n} from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Catalogs';\n\n/** Encode an OData entity key for use in the URL segment `Catalogs('<id>')`. */\nfunction encodeKey(id: string): string {\n // SAP OData v2 requires single quotes around string keys and percent-\n // encoding of unsafe characters. `encodeURIComponent` handles the rest.\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all catalogs. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpCatalogListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single catalog by its ID (e.g. `X-SAP-UI2-CATALOGPAGE:SAP_A4C…`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpCatalogSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** List tiles (chips) that belong to a specific catalog. */\nconst tiles = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})/Chips`, {\n query: { $format: 'json' },\n responses: { 200: flpTileListSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const catalogs = {\n list,\n get,\n tiles,\n};\n\nexport type CatalogsContract = typeof catalogs;\n","/**\n * Fiori Launchpad groups / pages — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Pages`.\n *\n * Read-only in v1 (E14 scope).\n */\n\nimport { http } from '../../base';\nimport { flpGroupListSchema, flpGroupSchema } from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Pages';\n\nfunction encodeKey(id: string): string {\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all pages / groups. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpGroupListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single page / group by ID (e.g. `/UI2/SAMPLE_PAGE`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpGroupSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const groups = {\n list,\n get,\n};\n\nexport type GroupsContract = typeof groups;\n","/**\n * Fiori Launchpad tiles (CHIPs) — `/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Chips`.\n *\n * A \"tile\" in FLP is actually a CHIP (Collaborative Human Interface Part)\n * instance attached to a catalog / page. The Page Builder OData service\n * exposes them through the `Chips` entity set.\n *\n * Read-only in v1 (E14 scope).\n */\n\nimport { http } from '../../base';\nimport { flpTileListSchema, flpTileSchema } from './schema';\n\nconst BASE = '/sap/opu/odata/UI2/PAGE_BUILDER_PERS/Chips';\n\nfunction encodeKey(id: string): string {\n return `'${encodeURIComponent(id)}'`;\n}\n\n/** List all tiles known to the system. */\nconst list = () =>\n http.get(BASE, {\n query: { $format: 'json' },\n responses: { 200: flpTileListSchema },\n headers: { Accept: 'application/json' },\n });\n\n/** Get a single tile by its CHIP ID (e.g. `X-SAP-UI2-CHIP:/UI2/STATIC_APPLAUNCHER`). */\nconst get = (id: string) =>\n http.get(`${BASE}(${encodeKey(id)})`, {\n query: { $format: 'json' },\n responses: { 200: flpTileSchema },\n headers: { Accept: 'application/json' },\n });\n\nexport const tiles = {\n list,\n get,\n};\n\nexport type TilesContract = typeof tiles;\n","/**\n * FLP (Fiori Launchpad) contracts — `client.adt.flp.*`.\n *\n * NOTE: The directory is named `uifsa` to match the epic spec\n * (E14 pointed at `/sap/bc/adt/uifsa/`), but the actual endpoints\n * live on the Page Builder OData service (`/sap/opu/odata/UI2/\n * PAGE_BUILDER_PERS/`). The namespace on the client is `flp` —\n * matching sapcli's user-facing command name.\n */\n\nimport { catalogs, type CatalogsContract } from './catalogs';\nimport { groups, type GroupsContract } from './groups';\nimport { tiles, type TilesContract } from './tiles';\n\nexport * from './schema';\nexport interface FlpContract {\n catalogs: CatalogsContract;\n groups: GroupsContract;\n tiles: TilesContract;\n}\n\nexport const flpContract: FlpContract = {\n catalogs,\n groups,\n tiles,\n};\nexport type { GroupsContract } from './groups';\nexport type { TilesContract } from './tiles';\nexport type { CatalogsContract } from './catalogs';\n","import type { Serializable } from '@abapify/speci/rest';\n\nexport interface CompletionProposal {\n id?: string;\n kind?: string;\n label?: string;\n insertText?: string;\n [extra: string]: unknown;\n}\n\nexport interface CompletionResponse {\n proposals?: CompletionProposal[];\n [extra: string]: unknown;\n}\n\nexport interface CompletionQuery {\n uri: string;\n line: number;\n column: number;\n}\n\nexport interface CompletionRequestBody {\n source?: string;\n}\n\nfunction parseJsonOrRaw(raw: string): CompletionResponse {\n if (!raw) return {};\n\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as CompletionResponse;\n }\n\n return {\n raw,\n };\n}\n\nexport const completionResponseSchema: Serializable<CompletionResponse> = {\n _infer: undefined as unknown as CompletionResponse,\n parse: parseJsonOrRaw,\n build: (value: CompletionResponse): string => JSON.stringify(value),\n};\n\nexport const completionRequestSchema: Serializable<CompletionRequestBody> = {\n _infer: undefined as unknown as CompletionRequestBody,\n parse: (raw: string): CompletionRequestBody => {\n if (!raw) return {};\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as CompletionRequestBody;\n }\n\n return {\n source: raw,\n };\n },\n build: (value: CompletionRequestBody): string => JSON.stringify(value),\n};\n","/**\n * /sap/bc/adt/codeassistance/completion\n */\n\nimport { contract, http } from '../../base';\nimport {\n completionRequestSchema,\n completionResponseSchema,\n type CompletionQuery,\n} from './schema';\n\nexport const completion = contract({\n post: (query: CompletionQuery) =>\n http.post('/sap/bc/adt/codeassistance/completion', {\n body: completionRequestSchema,\n responses: { 200: completionResponseSchema },\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n query,\n }),\n});\n\nexport type CompletionContract = typeof completion;\n","import { completion, type CompletionContract } from './completion';\n\nexport * from './completion';\nexport * from './schema';\n\nexport interface CodeassistanceContract {\n completion: CompletionContract;\n}\n\nexport const codeassistanceContract: CodeassistanceContract = {\n completion,\n};\n","/**\n * ADT vit/wb — Basic Object Properties (classic Workbench metadata).\n *\n * Endpoint template (from ADT discovery):\n * GET /sap/bc/adt/vit/wb/object_type/{type}/object_name/{name}\n *\n * Accept: application/vnd.sap.adt.basic.object.properties+xml\n * Response: adtcore:mainObject\n *\n * Classic BAdI uses vit types:\n * sxsdxd — BAdI definition (repository type SXSD/XD)\n * sxcixi — BAdI implementation (repository type SXCI/XI)\n */\n\nimport { contract, http } from '../../../base';\nimport { adtcore, type InferTypedSchema } from '../../../schemas';\n\nexport const BASIC_OBJECT_PROPERTIES_MIME =\n 'application/vnd.sap.adt.basic.object.properties+xml';\n\n/** vit/wb object_type segment for classic BAdI definitions. */\nexport const CLASSIC_BADI_DEFINITION_VIT_TYPE = 'sxsdxd';\n\n/** vit/wb object_type segment for classic BAdI implementations. */\nexport const CLASSIC_BADI_IMPLEMENTATION_VIT_TYPE = 'sxcixi';\n\nexport type BasicObjectPropertiesResponse = InferTypedSchema<typeof adtcore>;\n\nfunction objectPropertiesPath(vitType: string, objectName: string): string {\n const normalizedType = vitType.trim().toLowerCase();\n const normalizedName = objectName.trim().toLowerCase();\n return `/sap/bc/adt/vit/wb/object_type/${encodeURIComponent(normalizedType)}/object_name/${encodeURIComponent(normalizedName)}`;\n}\n\nfunction getByVitType(vitType: string) {\n return (objectName: string) =>\n http.get(objectPropertiesPath(vitType, objectName), {\n responses: { 200: adtcore },\n headers: { Accept: BASIC_OBJECT_PROPERTIES_MIME },\n });\n}\n\n/**\n * /sap/bc/adt/vit/wb/object_type/{type}/object_name/{name}\n */\nexport const vitWbObjectPropertiesContract = contract({\n /** Generic read for any vit/wb object_type segment. */\n get: (params: { vitType: string; objectName: string }) =>\n http.get(objectPropertiesPath(params.vitType, params.objectName), {\n responses: { 200: adtcore },\n headers: { Accept: BASIC_OBJECT_PROPERTIES_MIME },\n }),\n\n /** Classic BAdI definition (SXSD/XD). */\n getDefinition: getByVitType(CLASSIC_BADI_DEFINITION_VIT_TYPE),\n\n /** Classic BAdI implementation (SXCI/XI). */\n getImplementation: getByVitType(CLASSIC_BADI_IMPLEMENTATION_VIT_TYPE),\n});\n\nexport type VitWbObjectPropertiesContract =\n typeof vitWbObjectPropertiesContract;\n","/**\n * ADT vit (Virtual Integration Technology) contracts.\n */\n\nexport * from './wb/objectproperties';\n\nimport {\n vitWbObjectPropertiesContract,\n type VitWbObjectPropertiesContract,\n} from './wb/objectproperties';\n\nexport interface VitContract {\n wb: {\n objectProperties: VitWbObjectPropertiesContract;\n };\n}\n\nexport const vitContract: VitContract = {\n wb: {\n objectProperties: vitWbObjectPropertiesContract,\n },\n};\n","/**\n * ADT Contracts - Aggregated\n */\n\nexport * from './cts';\nexport * from './atc';\nexport * from './aunit';\nexport * from './oo';\nexport * from './discovery';\nexport * from './packages';\nexport * from './core';\nexport * from './repository';\nexport * from './programs';\nexport * from './functions';\nexport * from './ddic';\nexport * from './system';\nexport * from './checkruns';\nexport * from './activation';\nexport * from './datapreview';\nexport * from './runtime';\nexport * from './gcts';\nexport * from './bo';\nexport * from './businessservices';\nexport * from './enhancements';\nexport * from './uifsa';\nexport * from './codeassistance';\nexport * from './vit';\n\n/**\n * Complete ADT Contract\n */\nimport { ctsContract, type CtsContract } from './cts';\nimport { atcContract, type AtcContract } from './atc';\nimport { aunitContract, type AunitContract } from './aunit';\nimport { ooContract, type OoContract } from './oo';\nimport { discoveryContract, type DiscoveryContract } from './discovery';\nimport { packagesContract, type PackagesContract } from './packages';\nimport { coreContract, type CoreContract } from './core';\nimport { repositoryContract, type RepositoryContract } from './repository';\nimport {\n programsModuleContract,\n type ProgramsModuleContract,\n} from './programs';\nimport { functionsContract, type FunctionsContract } from './functions';\nimport { ddicContract, type DdicContract } from './ddic';\nimport { systemContract, type SystemContract } from './system';\nimport { checkrunsContract, type CheckrunsContract } from './checkruns';\nimport { activationContract, type ActivationContract } from './activation';\nimport { datapreviewContract, type DatapreviewContract } from './datapreview';\nimport { runtimeContract, type RuntimeContract } from './runtime';\nimport { gctsContract, type GctsContract } from './gcts';\nimport { boContract, type BoContract } from './bo';\nimport {\n businessservicesContract,\n type BusinessservicesContract,\n} from './businessservices';\nimport {\n enhancementsContract,\n type EnhancementsContract,\n} from './enhancements';\nimport { flpContract, type FlpContract } from './uifsa';\nimport {\n codeassistanceContract,\n type CodeassistanceContract,\n} from './codeassistance';\nimport { vitContract, type VitContract } from './vit';\n\n/**\n * Explicit type to avoid TS7056 \"inferred type exceeds maximum length\"\n */\nexport interface AdtContract {\n cts: CtsContract;\n atc: AtcContract;\n aunit: AunitContract;\n oo: OoContract;\n discovery: DiscoveryContract;\n packages: PackagesContract;\n core: CoreContract;\n repository: RepositoryContract;\n programs: ProgramsModuleContract;\n functions: FunctionsContract;\n ddic: DdicContract;\n system: SystemContract;\n checkruns: CheckrunsContract;\n activation: ActivationContract;\n datapreview: DatapreviewContract;\n runtime: RuntimeContract;\n gcts: GctsContract;\n bo: BoContract;\n businessservices: BusinessservicesContract;\n enhancements: EnhancementsContract;\n flp: FlpContract;\n codeassistance: CodeassistanceContract;\n vit: VitContract;\n}\n\nexport const adtContract: AdtContract = {\n cts: ctsContract,\n atc: atcContract,\n aunit: aunitContract,\n oo: ooContract,\n discovery: discoveryContract,\n packages: packagesContract,\n core: coreContract,\n repository: repositoryContract,\n programs: programsModuleContract,\n functions: functionsContract,\n ddic: ddicContract,\n system: systemContract,\n checkruns: checkrunsContract,\n activation: activationContract,\n datapreview: datapreviewContract,\n runtime: runtimeContract,\n gcts: gctsContract,\n bo: boContract,\n businessservices: businessservicesContract,\n enhancements: enhancementsContract,\n flp: flpContract,\n codeassistance: codeassistanceContract,\n vit: vitContract,\n};\n\n// Import RestClient from base for client type definition\nimport type { RestClient } from '../base';\n\n/**\n * Type for the ADT client instance\n * Use this when you need to type a variable holding the client\n */\nexport type AdtClientType = RestClient<AdtContract>;\n","/**\n * Base contract utilities\n *\n * Re-exports speci utilities for contract definitions and client creation.\n *\n * This module serves as the abstraction boundary - consumers (like adt-client)\n * should import from here, not directly from speci. This allows swapping the\n * underlying implementation (e.g., speci → ts-rest) without impacting consumers.\n *\n * Schemas from ./schemas are already speci-compatible\n * (they have parse/build methods), so no wrapping is needed.\n */\n\n// Contract definition utilities\nexport { http, type RestContract } from '@abapify/speci/rest';\n\n// CRUD helper for repository objects\n// Note: SourceType and IncludeType were removed - crud() now accepts generic strings\n// and callers define valid values based on SAP XSD schema for each object type\nexport {\n crud,\n repo,\n type CrudOptions,\n type CrudContract,\n type CrudContractBase,\n type CrudQueryParams,\n type LockOptions,\n type UnlockOptions,\n type ObjectStructureOptions,\n type SourcePutOptions,\n type SourceOperations,\n type SourcesContract,\n type IncludesContractSkeleton,\n} from './helpers/crud';\n\n// Client creation utilities (for consumers like adt-client)\nimport {\n createClient as speciCreateClient,\n type HttpAdapter,\n} from '@abapify/speci/rest';\n\n// Import contract and type for client creation\nimport { adtContract, type AdtContract } from './adt';\n\n/**\n * Create a typed ADT REST client.\n *\n * Contract is already known - just pass adapter options.\n */\nexport function createAdtClient(options: {\n baseUrl: string;\n adapter: HttpAdapter;\n}): RestClient<AdtContract> {\n return speciCreateClient(adtContract, options);\n}\n\n// Types needed by HTTP adapter implementations\nexport type {\n HttpAdapter,\n HttpRequestOptions,\n RestClient,\n Serializable,\n RestEndpointDescriptor,\n} from '@abapify/speci/rest';\n\n// Type utilities for extracting types from contracts\nexport type {\n ExtractResponse,\n InferSuccessResponse,\n} from '@abapify/speci/rest';\n\n// Import RestClient for use in return type\nimport type { RestClient } from '@abapify/speci/rest';\n\n/**\n * Identity function for contract definitions.\n *\n * Schemas from ./schemas are already speci-compatible,\n * so this is just a pass-through for type safety and documentation.\n *\n * @example\n * ```ts\n * import { configurations } from './schemas';\n * import { contract, http } from '../base';\n *\n * export const myContract = contract({\n * get: () => http.get('/endpoint', {\n * responses: { 200: configurations },\n * }),\n * });\n * // Type is automatically inferred from configurations.parse() return type\n * ```\n */\nexport function contract<T extends Record<string, any>>(definition: T): T {\n return definition;\n}\n"],"mappings":"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"}
|