The following section provides a sample code for a Before Delete Property worker.
export default async (
context: PlatformContext,
data: BeforePropertyDeleteRequest
): Promise<BeforePropertyDeleteResponse> => {
let status: BeforePropertyDeleteStatus =
BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_UNSPECIFIED;
try {
// The in-browser HTTP client facilitates making calls to the JFrog 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) {
status = BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_PROCEED;
console.log("Artifactory ping success");
} else {
status = BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_WARN;
console.warn(
`Request is successful but returned status other than 200. Status code : ${res.status}`
);
}
} catch (error) {
// The platformHttp client throws PlatformHttpClientError if the HTTP request status is 400 or higher
status = BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_STOP;
console.error(
`Request failed with status code ${
error.status || "<none>"
} caused by : ${error.message}`
);
}
return {
message: "proceed",
status,
};
};
Input Parameters
context
Provides baseUrl, token, and clients to communicate with the JFrog Platform (for more information, see PlatformContext).
data
The request with delete details sent by Artifactory.
For Artifactory Versions before 7.123
{
"metadata": { // Object containing metadata about the artifact
"repoPath": { // Information about the current path of the artifact in the repository
"key": "local-repo", // Unique key 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 to trust server checksums for artifact validation
"servletContextUrl": "https://jpd.jfrog.io/artifactory", // URL for accessing the servlet context in Artifactory
"skipJarIndexing": false, // Indicates whether to skip indexing for JAR files (false means indexing will occur)
"disableRedirect": false, // Indicates whether HTTP redirects should be disabled
"repoType": 1 // Numeric identifier representing the type of repository (1 typically denotes a local repository)
},
"userContext": { // Object containing information about the user making the request
"id": "id", // Unique identifier for the user
"isToken": false, // Indicates whether the user is authenticated using a token (false means they are not)
"realm": "realm" // Realm for user authentication context
},
"itemInfo": { // Object containing information about the specific item (artifact)
"repoPath": { // Information about the current path of the item in the repository
"key": "local-repo", // Unique key identifier for the repository
"path": "folder/subfolder/my-file", // Path to the specific item in 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)
},
"name": "my-artifact", // Name of the item (artifact) being referenced
"created": 1, // Timestamp indicating when the item was created (assumed to be Unix timestamp)
"lastModified": 0 // Timestamp of the last modification (0 indicates no modification)
},
"name": "property-name" // Name of the property being referenced or set
}
For Artifactory Versions from 7.123
{
"metadata": { // Object containing metadata about the artifact
"repoPath": { // Information about the current path of the artifact in the repository
"key": "local-repo", // Unique key 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)
},
"lastModified": 0, // Timestamp of the last modification (0 indicates it has not been modified)
"repoType": 1 // Numeric identifier representing the type of repository (1 typically denotes a local repository)
},
"userContext": { // Object containing information about the user making the request
"id": "id", // Unique identifier for the user
"isToken": false, // Indicates whether the user is authenticated using a token (false means they are not)
"realm": "realm" // Realm for user authentication context
},
"itemInfo": { // Object containing information about the specific item (artifact)
"repoPath": { // Information about the current path of the item in the repository
"key": "local-repo", // Unique key identifier for the repository
"path": "folder/subfolder/my-file", // Path to the specific item in 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)
},
"name": "my-artifact", // Name of the item (artifact) being referenced
"created": 1, // Timestamp indicating when the item was created (assumed to be Unix timestamp)
"lastModified": 0 // Timestamp of the last modification (0 indicates no modification)
},
"name": "property-name" // Name of the property being referenced or set
}
Response
{
"message": "proceed", // Message to print to the log, in case of an error, it will be printed as a warning
"status": "proceed" // The instruction of how to proceed
}
message and status : These are mandatory fields.
Possible Statuses
BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_PROCEED- The worker allows Artifactory to proceed with deleting a property.BeforePropertyDeleteStatus.BEFORE_PROPERTY_DELETE_STOP- The worker does not allow Artifactory to delete a property.BeforePropertyDeleteStatus.BEFORE_PROPERTY_Delete_WARN- The worker provides a warning before Artifactory can proceed with deleting a property.