diff --git a/components/offlight/actions/create-task/create-task.mjs b/components/offlight/actions/create-task/create-task.mjs new file mode 100644 index 0000000000000..1f4a29194345e --- /dev/null +++ b/components/offlight/actions/create-task/create-task.mjs @@ -0,0 +1,63 @@ +import offlight from "../../offlight.app.mjs"; + +export default { + key: "offlight-create-task", + name: "Create Task", + description: "Initiates the creation of a new task in Offlight. [See the documentation](https://www.offlight.work/docs/zapeir-api)", + version: "0.0.1", + type: "action", + props: { + offlight, + taskName: { + type: "string", + label: "Task Name", + description: "The name of the task.", + }, + taskNote: { + type: "string", + label: "Task Note", + description: "A note about the task.", + optional: true, + }, + taskDeadline: { + type: "string", + label: "Task Deadline", + description: "The deadline of the task. **In ISO 8601 format (YYYY-MM-DD)**.", + optional: true, + }, + identifier: { + type: "string", + label: "Identifier", + description: "A unique identifier for the task.", + optional: true, + }, + sourceName: { + type: "string", + label: "Source Name", + description: "The source name of the task.", + optional: true, + }, + sourceLink: { + type: "string", + label: "Source Link", + description: "The source link of the task.", + optional: true, + }, + }, + async run({ $ }) { + const response = await this.offlight.createTask({ + $, + data: { + task_name: this.taskName, + task_note: this.taskNote, + task_deadline: this.taskDeadline, + identifier: this.identifier, + source_name: this.sourceName, + source_link: this.sourceLink, + }, + }); + + $.export("$summary", `Task successfully created with ID: ${response.id}`); + return response; + }, +}; diff --git a/components/offlight/offlight.app.mjs b/components/offlight/offlight.app.mjs index e150693e0b38c..f6ee422a7df42 100644 --- a/components/offlight/offlight.app.mjs +++ b/components/offlight/offlight.app.mjs @@ -1,11 +1,53 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "offlight", - propDefinitions: {}, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://api.offlight.work"; + }, + _headers() { + return { + "x-api-key": `${this.$auth.api_token}`, + }; + }, + _makeRequest({ + $ = this, path, ...opts + }) { + return axios($, { + url: this._baseUrl() + path, + headers: this._headers(), + ...opts, + }); + }, + createTask(opts = {}) { + return this._makeRequest({ + method: "POST", + path: "/zapier/task", + ...opts, + }); + }, + getDoneTasks(opts = {}) { + return this._makeRequest({ + ...opts, + method: "GET", + path: "/zapier/doneTasks", + }); + }, + createWebhook(opts = {}) { + return this._makeRequest({ + method: "POST", + path: "/zapier/webhook", + ...opts, + }); + }, + deleteWebhook(opts = {}) { + return this._makeRequest({ + method: "DELETE", + path: "/zapier/webhook", + ...opts, + }); }, }, -}; \ No newline at end of file +}; diff --git a/components/offlight/package.json b/components/offlight/package.json index 401f43d7a5f01..ee27f074772a4 100644 --- a/components/offlight/package.json +++ b/components/offlight/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/offlight", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream OFFLIGHT Components", "main": "offlight.app.mjs", "keywords": [ @@ -11,5 +11,9 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.1" } -} \ No newline at end of file +} + diff --git a/components/offlight/sources/new-task-done-instant/new-task-done-instant.mjs b/components/offlight/sources/new-task-done-instant/new-task-done-instant.mjs new file mode 100644 index 0000000000000..043a5a02a30e8 --- /dev/null +++ b/components/offlight/sources/new-task-done-instant/new-task-done-instant.mjs @@ -0,0 +1,55 @@ +import offlight from "../../offlight.app.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + key: "offlight-new-task-done-instant", + name: "New Task Done (Instant)", + description: "Emit new event when a task is marked as complete.", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + offlight, + http: { + type: "$.interface.http", + }, + db: "$.service.db", + }, + methods: { + emitTask(task) { + this.$emit(task, { + id: task.id, + summary: `Task ${task.name} marked as done`, + ts: Date.parse(task.doneAt), + }); + }, + }, + hooks: { + async deploy() { + const tasks = await this.offlight.getDoneTasks(); + for (const task of tasks) { + this.emitTask(task); + } + }, + async activate() { + await this.offlight.createWebhook({ + data: { + purpose: "doneTask", + hookUrl: this.http.endpoint, + }, + }); + }, + async deactivate() { + await this.offlight.deleteWebhook({ + data: { + purpose: "doneTask", + hookUrl: this.http.endpoint, + }, + }); + }, + }, + async run({ body }) { + this.emitTask(body); + }, + sampleEmit, +}; diff --git a/components/offlight/sources/new-task-done-instant/test-event.mjs b/components/offlight/sources/new-task-done-instant/test-event.mjs new file mode 100644 index 0000000000000..324942504b1cc --- /dev/null +++ b/components/offlight/sources/new-task-done-instant/test-event.mjs @@ -0,0 +1,18 @@ +export default { + "createdAt": "2024-09-23T19:18:54.995Z", + "updatedAt": "2024-09-23T20:10:26.000Z", + "plannedDate": null, + "doneAt": "2024-09-23T20:10:25.136Z", + "deletedAt": null, + "id": "4e73c28d-0e2f-4352-9c86-62048255e1b8", + "name": "🤵 Welcome to OFFLIGHT", + "note": null, + "status": "done", + "deadline": null, + "goal": null, + "source": "admin", + "identifier": null, + "sourceName": null, + "link": null, + "creator": null +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ea16c75972e8..b8d7f65d30040 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6543,7 +6543,10 @@ importers: '@pipedream/platform': 1.6.0 components/offlight: - specifiers: {} + specifiers: + '@pipedream/platform': ^3.0.1 + dependencies: + '@pipedream/platform': 3.0.3 components/oksign: specifiers: {} @@ -12791,6 +12794,55 @@ packages: - aws-crt dev: false + /@aws-sdk/client-sso-oidc/3.600.0_tdq3komn4zwyd65w7klbptsu34: + resolution: {integrity: sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.600.0 + '@aws-sdk/core': 3.598.0 + '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 + '@aws-sdk/middleware-host-header': 3.598.0 + '@aws-sdk/middleware-logger': 3.598.0 + '@aws-sdk/middleware-recursion-detection': 3.598.0 + '@aws-sdk/middleware-user-agent': 3.598.0 + '@aws-sdk/region-config-resolver': 3.598.0 + '@aws-sdk/types': 3.598.0 + '@aws-sdk/util-endpoints': 3.598.0 + '@aws-sdk/util-user-agent-browser': 3.598.0 + '@aws-sdk/util-user-agent-node': 3.598.0 + '@smithy/config-resolver': 3.0.3 + '@smithy/core': 2.2.3 + '@smithy/fetch-http-handler': 3.2.1 + '@smithy/hash-node': 3.0.2 + '@smithy/invalid-dependency': 3.0.2 + '@smithy/middleware-content-length': 3.0.2 + '@smithy/middleware-endpoint': 3.0.4 + '@smithy/middleware-retry': 3.0.6 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.3 + '@smithy/node-http-handler': 3.1.2 + '@smithy/protocol-http': 4.0.3 + '@smithy/smithy-client': 3.1.6 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.6 + '@smithy/util-defaults-mode-node': 3.0.6 + '@smithy/util-endpoints': 2.0.3 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.2 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - aws-crt + dev: false + /@aws-sdk/client-sso/3.423.0: resolution: {integrity: sha512-znIufHkwhCIePgaYciIs3x/+BpzR57CZzbCKHR9+oOvGyufEPPpUT5bFLvbwTgfiVkTjuk6sG/ES3U5Bc+xtrA==} engines: {node: '>=14.0.0'} @@ -13026,7 +13078,7 @@ packages: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 + '@aws-sdk/client-sso-oidc': 3.600.0_tdq3komn4zwyd65w7klbptsu34 '@aws-sdk/core': 3.598.0 '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 '@aws-sdk/middleware-host-header': 3.598.0 @@ -13068,55 +13120,6 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sts/3.600.0_dseaa2p5u2yk67qiepewcq3hkq: - resolution: {integrity: sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.600.0 - '@aws-sdk/core': 3.598.0 - '@aws-sdk/credential-provider-node': 3.600.0_f7n47caigsrjd2lr2szmwfuee4 - '@aws-sdk/middleware-host-header': 3.598.0 - '@aws-sdk/middleware-logger': 3.598.0 - '@aws-sdk/middleware-recursion-detection': 3.598.0 - '@aws-sdk/middleware-user-agent': 3.598.0 - '@aws-sdk/region-config-resolver': 3.598.0 - '@aws-sdk/types': 3.598.0 - '@aws-sdk/util-endpoints': 3.598.0 - '@aws-sdk/util-user-agent-browser': 3.598.0 - '@aws-sdk/util-user-agent-node': 3.598.0 - '@smithy/config-resolver': 3.0.3 - '@smithy/core': 2.2.3 - '@smithy/fetch-http-handler': 3.2.1 - '@smithy/hash-node': 3.0.2 - '@smithy/invalid-dependency': 3.0.2 - '@smithy/middleware-content-length': 3.0.2 - '@smithy/middleware-endpoint': 3.0.4 - '@smithy/middleware-retry': 3.0.6 - '@smithy/middleware-serde': 3.0.3 - '@smithy/middleware-stack': 3.0.3 - '@smithy/node-config-provider': 3.1.3 - '@smithy/node-http-handler': 3.1.2 - '@smithy/protocol-http': 4.0.3 - '@smithy/smithy-client': 3.1.6 - '@smithy/types': 3.3.0 - '@smithy/url-parser': 3.0.3 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.6 - '@smithy/util-defaults-mode-node': 3.0.6 - '@smithy/util-endpoints': 2.0.3 - '@smithy/util-middleware': 3.0.3 - '@smithy/util-retry': 3.0.2 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: false - /@aws-sdk/core/3.556.0: resolution: {integrity: sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==} engines: {node: '>=14.0.0'} @@ -17443,7 +17446,7 @@ packages: '@aws-sdk/client-sns': 3.423.0 '@aws-sdk/client-sqs': 3.423.0 '@aws-sdk/client-ssm': 3.423.0 - '@aws-sdk/client-sts': 3.600.0_dseaa2p5u2yk67qiepewcq3hkq + '@aws-sdk/client-sts': 3.600.0 '@aws-sdk/s3-request-presigner': 3.609.0 '@pipedream/helper_functions': 0.3.12 '@pipedream/platform': 1.6.6 @@ -17621,8 +17624,8 @@ packages: - debug dev: false - /@pipedream/platform/3.0.3: - resolution: {integrity: sha512-7elalas41lnT8i6EAFkqB7fT/+hkLGEQ1njS6A7CVguTrEswaIYk/seKmkfkRY7+O6qncgnXswYIKCBML9Co7w==} + /@pipedream/platform/3.0.2: + resolution: {integrity: sha512-q/BYGJoNXOVaRlNTDWD7Gjgkcu114gbPrxQ5KCOFbuYfqnJu8AeDGMyMvEPaGPbrWUVwgxjvOnxw4EWqce8ZNQ==} dependencies: axios: 1.7.7 fp-ts: 2.16.9 @@ -17632,8 +17635,8 @@ packages: - debug dev: false - /@pipedream/platform/3.0.2: - resolution: {integrity: sha512-q/BYGJoNXOVaRlNTDWD7Gjgkcu114gbPrxQ5KCOFbuYfqnJu8AeDGMyMvEPaGPbrWUVwgxjvOnxw4EWqce8ZNQ==} + /@pipedream/platform/3.0.3: + resolution: {integrity: sha512-7elalas41lnT8i6EAFkqB7fT/+hkLGEQ1njS6A7CVguTrEswaIYk/seKmkfkRY7+O6qncgnXswYIKCBML9Co7w==} dependencies: axios: 1.7.7 fp-ts: 2.16.9 @@ -23295,7 +23298,7 @@ packages: dev: false /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /concat-stream/2.0.0: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} @@ -35375,7 +35378,7 @@ packages: dev: false /verror/1.10.0: - resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0