The following section provides a sample code for an After Delete worker.
export default async (context: PlatformContext, data: AfterDeleteRequest): Promise<AfterDeleteResponse> => { try { // The HTTP client facilitates calls to the JFrog Platform REST APIs //To call an external endpoint, use 'await context.clients.axios.get("https://foo.com")' const res = await context.clients.platformHttp.get('/artifactory/api/v1/system/readiness'); // You should reach this part if the HTTP request status is successful (HTTP Status 399 or lower) if (res.status === 200) { console.log("Artifactory ping success"); } else { console.warn(`Request was successful and returned status code : ${res.status}`); } } catch(error) { // The platformHttp client throws PlatformHttpClientError if the HTTP request status is 400 or higher console.error(`Request failed with status code ${error.status || '<none>'} caused by : ${error.message}`) } return { message: 'proceed', modifiedRepoPath: data.metadata.repoPath } }
Input Parameters
context
Provides baseUrl, token, and clients to communicate with the JFrog Platform (for more information, see PlatformContext).
data
The request with deleted details sent by Artifactory.
{ "metadata": { // Object containing metadata about the artifact "repoPath": { // Information about the repository path for the artifact "key": "local-repo", // Unique identifier for the repository "path": "folder/subfolder/my-file", // Path to the specific file within the repository "id": "local-repo:folder/subfolder/my-file", // Unique identifier combining the repository key and path "isRoot": false, // Indicates if the path is a root directory (false means it is nested) "isFolder": false // Indicates if the path is a folder (false means it is a file) }, "contentLength": 100, // Length of the content in bytes "lastModified": 0, // Timestamp of the last modification (0 indicates it has not been modified) "trustServerChecksums": false, // Indicates whether server checksums should be trusted "servletContextUrl": "servlet.com", // URL of the servlet context for accessing the artifact "skipJarIndexing": false, // Indicates whether to skip indexing for JAR files "disableRedirect": false, // Indicates whether HTTP redirects should be disabled "repoType": 1 // Numeric identifier representing the repository type (e.g., local, remote, virtual) }, "headers": { // HTTP headers for the request "Content-Type": { // Content-Type header to specify the type of content being sent "value": [ // Array of values for the Content-Type header "text/plain" // Indicates that the content type is plain text ] }, "Accept": { // Accept header to specify the expected response format "value": [ // Array of values for the Accept header "application/json" // Indicates that the expected response format is JSON ] } }, "userContext": { // Context information about the user making the request "id": "id", // Unique identifier for the user "isToken": false, // Indicates if the user is authenticated using a token "realm": "realm" // Realm for user authentication context } }
Response
{ "data": { // Main data object containing the response information "message": "proceed", // Message to print to the log. If there is an error it will be printed as a warning. "modifiedRepoPath": { // Object containing details about the modified repository path "key": "local-repo", // Unique key identifier for the repository "path": "folder/subfolder/my-file", // Path to the modified file within the repository "id": "local-repo:folder/subfolder/my-file", // Unique identifier combining the repo key and path "isRoot": false, // Indicates whether the path is a root directory (false means it is not the root) "isFolder": false // Indicates whether the path is a folder (false means it is a file) } }, "executionStatus": "STATUS_SUCCESS" // Status indicating that the execution was successful }
message : This is a mandatory field.