npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

exframe-job

v4.4.5

Published

Creates Jobs to be handled by exframe-workflow

Downloads

466

Readme

exframe-job

A module for jobs and job items while integrating with exframe-workflow to execute job items.

Usage

const { createJob, applyBlockTasks, queryJobItems, updateJobItemStatus } = initialize({ workflow, dbClient });

Initialize Arguments

  • workflow - Required. The workflow instance created by the consuming service to be passed into the module.

  • dbClient - Required. The database client using to store jobs and jobItems

Methods

createJob

Creates Jobs and Job items in the database and returns the job and jobItems.

Example

const { job } = await createJob(context, { jobData });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobData and jobItemData
  • options.jobData object Required. The job type

Example Arguments

/*
"jobData": {
    "type":"BOB Endorsement",
    "data": {
        "someField": "some field for metadata on the job"
    }
}
*/

Returns a Promise that resolves with an object containing the job.

Example Response

/*
{
  "job": {
    "_id": "611d07b04d04e62070ed0eb4",
    "type": "BOB Endorsement",
    "status": "Pending",
    "data": {
        "someField": "some field for metadata on the job"
    }
    "createdBy": {
      "_id": "611d07a84d04e62070ed0e50",
      "userName": "TESTUSER",
      "userId": "eD1wfj9HGr"
    },
    "updatedBy": {
      "_id": "611d07a84d04e62070ed0e51",
      "userName": "TESTUSER",
      "userId": "eD1wfj9HGr"
    },
    "createdAt": "2021-08-18T13:14:16.227Z",
    "updatedAt": "2021-08-18T13:14:16.227Z",
    "__v": 0
  }
}
 */

createJobItems

Creates Job items in the database and returns the jobItems that are created.

Example

const { job, jobItems } = await createJobItems(context, { jobId, jobItemData });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobData
  • options.jobId string Required. The jobId
  • options.jobItemData array Required. The array of job items

Example Arguments

/*
{
"jobId": "611d07b14d04e62070ed0eb8",
"jobItemData": [
    {
      "agencyCodeFrom": 643,
      "agencyCodeTo": 295,
      "agentCodeFrom": 584,
      "agentCodeTo": 677,
      "policyNumber": "54-2444157-01",
      "agencyNameTo": "Joe - Smith",
      "agentNameTo": "Steve Adams",
      "agencyNameFrom": "John - Jacobs",
      "agentNameFrom": "Marion Miller",
      "transactionType": "BOB Endorsement"
    }
]
}
*/

Returns a Promise that resolves with an array containing jobItems.

Example Response

/*
{
  "jobItems": [
    {
      "_id": "611d07b14d04e62070ed0eb8",
      "jobId": "611d07b04d04e62070ed0eb4",
      "data": {
        "agencyCodeFrom": 643,
        "agencyCodeTo": 295,
        "agentCodeFrom": 584,
        "agentCodeTo": 677,
        "policyNumber": "54-2444157-01",
        "agencyNameTo": "Joe - Fisher",
        "agentNameTo": "Henry Adams",
        "agencyNameFrom": "Jake - Jacobs",
        "agentNameFrom": "Mac Brown",
        "transactionType": "BOB Endorsement"
      },
      "status": "Pending",
      "createdBy": {
        "_id": "611d07b14d04e62070ed0eb9",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "updatedBy": {
        "_id": "611d07b14d04e62070ed0eba",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "createdAt": "2021-08-18T13:14:24.998Z",
      "updatedAt": "2021-08-18T13:14:24.998Z",
      "__v": 0
    }
  ]
}
 */

queryJobAndJobItems

Queries Job and Job Items by passing in a filter defined by the service making the request.

Example

const jobItemResult = await queryJobAndJobItems(context, { filter, options });

Arguments:

  • context object Required. Context object containing the user and log object
  • filter object Required. object containing params to be passed into the filter match
  • options object object containing paging options
  • options.page integer number to indicate current page
  • options.pageSize integer number to indicate limit of results for each page
  • options.sortDirection string to specify sort direction on desc for descending order and asc for ascending order
  • options.sortField string to specify field to sort by

Example Arguments

/*
filter: { _id: ObjectId('61b0c698fdb2830061266d1f'), 'data.someProperty': '2021120899', 'createdBy.userName': 'TESTUSER' },
options:  { page: 1, pageSize: 25, sortField: 'updatedAt', sortDirection: 'desc'}

*/

Returns a Promise that resolves with an array containing the job and jobItems.

Example Response

/*
[
 {
    "_id" : "61b0c698fdb2830061266d1f",
    "data" : {
        "date" : "2021-12-08T14:52:07.157Z",
        "description" : "Payment Received",
        "someProperty" : "2021120899",
        "type" : "Electronic Deposit"
    },
    "createdBy" : {
        "_id" : "61b0c698fdb2830061266d20",
        "userName" : "TESTUSER",
        "userId" : "N4x5qctjvP"
    },
    "updatedBy" : {
        "_id" : "61b0c698fdb2830061266d21",
        "userName" : "TESTUSER",
        "userId" : "N4x5qctjvP"
    },
    "createdAt" : "2021-12-08T14:52:08.324Z",
    "updatedAt" : "2021-12-08T14:52:08.324Z",
    "jobItems" : [ 
        {
            "_id" : "61b0c698fdb2830061266d24",
            "jobId" : "61b0c698fdb2830061266d1f",
            "data" : {
                "date" : "2021-12-08T14:52:07.157Z",
                "description" : "Payment Received",
                "someProperty" : "2021120899",
                "type" : "Electronic Deposit",
                "policyNumber" : "aVdFvY-jaM",
                "amount" : 2027
            },
            "status" : "Complete",
            "createdBy" : {
                "_id" : "61b0c698fdb2830061266d25",
                "userName" : "TESTUSER",
                "userId" : "N4x5qctjvP"
            },
            "updatedBy" : {
                "_id" : "61b0c698fdb2830061266d26",
                "userName" : "TESTUSER",
                "userId" : "N4x5qctjvP"
            },
            "createdAt" : "2021-12-08T14:52:08.324Z",
            "updatedAt" : "2021-12-08T14:52:08.324Z"
        }
    ]
}   
]
 */

queryJobStatus

Queries Job status including a count of JobItem statuses

Example

const jobItemResult = await queryJobStatus(context, { jobId });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobId
  • options.jobId ObjectId Required. The job ID

Example Arguments

/*
{ jobId: ObjectId("61b0c698fdb2830061266d1f") }
*/

Returns a Promise that resolves with an array containing the job and jobItems.

Example Response

/*
[
 {
    "_id" : "61b0c698fdb2830061266d1f",
    "data" : {
        "date" : "2021-12-08T14:52:07.157Z",
        "description" : "Payment Received",
        "someProperty" : "2021120899",
        "type" : "Electronic Deposit"
    },
    "createdBy" : {
        "_id" : "61b0c698fdb2830061266d20",
        "userName" : "TESTUSER",
        "userId" : "N4x5qctjvP"
    },
    "updatedBy" : {
        "_id" : "61b0c698fdb2830061266d21",
        "userName" : "TESTUSER",
        "userId" : "N4x5qctjvP"
    },
    "createdAt" : "2021-12-08T14:52:08.324Z",
    "updatedAt" : "2021-12-08T14:52:08.324Z",
    "jobItemStatus": {
    "Complete": 5,
    "Failed": 1,
    "Started": 0,
    "Pending": 2
    },
    "jobItemTotal" : 8
}   
]
 */

queryJobItems

Queries Job Items by jobId and optional status.

Example

const { job, jobItems } = await queryJobItems(context, { jobId, status });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobId and status
  • options.jobId string Required. The job ID
  • options.status string The status of the job items

Example Arguments

/*
{ jobId: '611bb7fb216ecd19b4ee04de', status: 'Complete' }
*/

Returns a Promise that resolves with an object containing the jobItems.

Example Response

/*
[
    {
      "_id": "611d07b14d04e62070ed0eb8",
      "jobId": "611d07b04d04e62070ed0eb4",
      "data": {
        "agencyCodeFrom": 643,
        "agencyCodeTo": 295,
        "agentCodeFrom": 584,
        "agentCodeTo": 677,
        "policyNumber": "54-2444157-01",
        "agencyNameTo": "Joe - Fisher",
        "agentNameTo": "Henry Adams",
        "agencyNameFrom": "Jake - Jacobs",
        "agentNameFrom": "Mac Brown",
        "transactionType": "BOB Endorsement"
      },
      "status": "Pending",
      "createdBy": {
        "_id": "611d07b14d04e62070ed0eb9",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "updatedBy": {
        "_id": "611d07b14d04e62070ed0eba",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "createdAt": "2021-08-18T13:14:24.998Z",
      "updatedAt": "2021-08-18T13:14:24.998Z",
      "__v": 0
    }
  ]
 */

updateJobItemStatus

Updates the status for a Job item.

Example

await updateJobItemStatus(context, { jobItemId, status });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobId and status
  • options.jobItemId string Required. The job ID
  • options.status string The status of the job items

Example Arguments

/*
{ jobItemId: '611bb7fb216ecd19b4ee04de', status: 'Failed' }
*/

Returns a Promise that resolves with an object containing the updated jobItem.

Example Response

/*
{
      "_id": "611d07b14d04e62070ed0eb8",
      "jobId": "611d07b04d04e62070ed0eb4",
      "data": {
        "agencyCodeFrom": 643,
        "agencyCodeTo": 295,
        "agentCodeFrom": 584,
        "agentCodeTo": 677,
        "policyNumber": "54-2444157-01",
        "agencyNameTo": "Joe - Fisher",
        "agentNameTo": "Henry Adams",
        "agencyNameFrom": "Jake - Jacobs",
        "agentNameFrom": "Mac Brown",
        "transactionType": "BOB Endorsement"
      },
      "status": "Failed",
      "createdBy": {
        "_id": "611d07b14d04e62070ed0eb9",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "updatedBy": {
        "_id": "611d07b14d04e62070ed0eba",
        "userName": "TESTUSER",
        "userId": "ULZzlYVSjI"
      },
      "createdAt": "2021-08-18T13:14:24.998Z",
      "updatedAt": "2021-08-18T13:14:24.998Z",
      "__v": 0
    }
 */

updateJobStatus

Updates the status for a Job .

Example

await updateJobStatus(context, { jobId, status });

Arguments:

  • context object Required. Context object containing the user and log object
  • options object Required. object containing the jobId and status
  • options.jobId string Required. The job ID
  • options.status string The status of the job s

Example Arguments

/*
{ jobId: '611bb7fb216ecd19b4ee04de', status: 'Failed' }
*/

Returns a Promise that resolves with an object containing the updated job.

Example Response

/*
{
    "_id": "611d07b04d04e62070ed0eb4",
    "type": "BOB Endorsement",
    "status": "Pending",
    "data": {
        "someField": "some field for metadata on the job"
    }
    "createdBy": {
      "_id": "611d07a84d04e62070ed0e50",
      "userName": "TESTUSER",
      "userId": "eD1wfj9HGr"
    },
    "updatedBy": {
      "_id": "611d07a84d04e62070ed0e51",
      "userName": "TESTUSER",
      "userId": "eD1wfj9HGr"
    },
    "createdAt": "2021-08-18T13:14:16.227Z",
    "updatedAt": "2021-08-18T13:14:16.227Z",
    "__v": 0
  }
 */

applyBlockTasks

Applies a block of tasks to the existing workflow that was originally passed in. This will be the block of tasks that will execute for each jobItem. This function is responsible for starting the job. The sourceIterator will then iterate over each jobItem that matches the jobId and attempt to start the job item (Set job status to "Started") The workflow block will then process the jobItem and set the status for each jobItem (Set jobItem status to "Complete" or "Failed") After iterating through each jobItem, the status for the job will be set (Set job status to "Complete" or "Failed")

Example

 await applyBlockTasks(wfBlock => {
        wfBlock.task('taskOne', (context, workContext) => {

        });
        wfBlock.task('taskTwo', (context, workContext) => {

        });
        wfBlock.task('taskThree', (context, workContext) => {

        });
},
{ 
    overrideJobItemComplete: async (context, jobItem) => {},
    overrideJobComplete: async (context, job) => {},
    handleBlockPost: (context, workContext, result) => {},
    handleJobErrorCatch: (context, workContext, error) => {
        switch (error.status) {
            case 403: return 'authorize'
            default: return null;
        }
    }
});

Arguments

  • workflowBlock function Required. A function that applies workflow tasks to process a jobItem
  • options object Required. object containing options to pass to the job block
  • options.overrideJobItemComplete function A function to handle updating the job item status from within the consuming service until a change in exframe-workflow is made to support continuing a workflow after an error
  • options.overrideJobComplete function A function to handle updating the job status from within the consuming service until a change in exframe-workflow is made to support continuing a workflow after an error
  • options.handleBlockPost function A function to handle the post for the job block
  • options.handleJobErrorCatch function catch function to execute after the job is marked as failed