diff --git a/components/autodesk/actions/create-folder/create-folder.mjs b/components/autodesk/actions/create-folder/create-folder.mjs new file mode 100644 index 0000000000000..e4b5d589a199c --- /dev/null +++ b/components/autodesk/actions/create-folder/create-folder.mjs @@ -0,0 +1,92 @@ +import autodesk from "../../autodesk.app.mjs"; + +export default { + key: "autodesk-create-folder", + name: "Create Folder", + description: "Creates a new folder in a project in Autodesk. [See the documentation](https://aps.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-folders-POST/)", + version: "0.0.1", + type: "action", + props: { + autodesk, + hubId: { + propDefinition: [ + autodesk, + "hubId", + ], + }, + projectId: { + propDefinition: [ + autodesk, + "projectId", + (c) => ({ + hubId: c.hubId, + }), + ], + }, + name: { + type: "string", + label: "Name", + description: "The name of the new folder", + }, + parent: { + propDefinition: [ + autodesk, + "folderId", + (c) => ({ + hubId: c.hubId, + projectId: c.projectId, + }), + ], + label: "Parent Folder ID", + description: "The identifier of the parent folder", + }, + type: { + type: "string", + label: "Extension Type", + description: "The type of folder extension. For BIM 360 Docs folders, use `folders:autodesk.bim360:Folder`. For all other services, use `folders:autodesk.core:Folder`.", + options: [ + { + label: "BIM 360 Docs folders", + value: "folders:autodesk.core:Folder", + }, + { + label: "Other folders", + value: "folders:autodesk.bim360:Folder", + }, + ], + default: "folders:autodesk.core:Folder", + optional: true, + }, + }, + async run({ $ }) { + const response = await this.autodesk.createFolder({ + $, + projectId: this.projectId, + data: { + jsonapi: { + version: "1.0", + }, + data: { + type: "folders", + attributes: { + name: this.name, + extension: { + type: this.type, + version: "1.0", + }, + }, + relationships: { + parent: { + data: { + type: "folders", + id: this.parent, + }, + }, + }, + }, + }, + }); + $.export("$summary", `Successfully created new folder: ${this.name}`); + return response; + }, +}; diff --git a/components/autodesk/actions/upload-file/upload-file.mjs b/components/autodesk/actions/upload-file/upload-file.mjs new file mode 100644 index 0000000000000..f04a1718e6a08 --- /dev/null +++ b/components/autodesk/actions/upload-file/upload-file.mjs @@ -0,0 +1,197 @@ +import autodesk from "../../autodesk.app.mjs"; +import { axios } from "@pipedream/platform"; +import fs from "fs"; + +export default { + key: "autodesk-upload-file", + name: "Upload File", + description: "Uploads a new file to a specified folder in Autodesk. [See the documentation](https://aps.autodesk.com/en/docs/data/v2/tutorials/upload-file/).", + version: "0.0.1", + type: "action", + props: { + autodesk, + hubId: { + propDefinition: [ + autodesk, + "hubId", + ], + }, + projectId: { + propDefinition: [ + autodesk, + "projectId", + (c) => ({ + hubId: c.hubId, + }), + ], + }, + folderId: { + propDefinition: [ + autodesk, + "folderId", + (c) => ({ + hubId: c.hubId, + projectId: c.projectId, + }), + ], + }, + fileName: { + type: "string", + label: "File Name", + description: "The name of the file to upload", + }, + filePath: { + type: "string", + label: "File Path", + description: "The path to a file in the `/tmp` directory. [See the documentation on working with files](https://pipedream.com/docs/code/nodejs/working-with-files/#writing-a-file-to-tmp)", + }, + type: { + type: "string", + label: "Extension Type", + description: "The type of file extension. For BIM 360 Docs files, use `items:autodesk.bim360:File`. For all other services, use `items:autodesk.core:File`.", + options: [ + { + label: "BIM 360 Docs files", + value: "items:autodesk.core:File", + }, + { + label: "Other files", + value: "items:autodesk.bim360:File", + }, + ], + default: "items:autodesk.core:File", + optional: true, + }, + }, + async run({ $ }) { + // Create storage location + const { data } = await this.autodesk.createStorageLocation({ + $, + projectId: this.projectId, + data: { + jsonapi: { + version: "1.0", + }, + data: { + type: "objects", + attributes: { + name: this.fileName, + }, + relationships: { + target: { + data: { + type: "folders", + id: this.folderId, + }, + }, + }, + }, + }, + }); + + const objectId = data.id; + const [ + bucketKey, + objectKey, + ] = objectId.split("os.object:")[1]?.split("/") || []; + + // Generate signed URL + const { + urls, uploadKey, + } = await this.autodesk.generateSignedUrl({ + $, + bucketKey, + objectKey, + }); + + const signedUrl = urls[0]; + + // Upload to signed URL + const filePath = this.filePath.includes("tmp/") + ? this.filePath + : `/tmp/${this.filePath}`; + const fileStream = fs.createReadStream(filePath); + const fileSize = fs.statSync(filePath).size; + + await axios($, { + url: signedUrl, + data: fileStream, + method: "PUT", + headers: { + "Content-Type": "application/octet-stream", + "Content-Length": fileSize, + }, + maxContentLength: Infinity, + maxBodyLength: Infinity, + }); + + // Complete the upload + await this.autodesk.completeUpload({ + $, + bucketKey, + objectKey, + data: { + uploadKey, + }, + }); + + // Create version 1.0 of uploaded file + const response = await this.autodesk.createFirstVersionOfFile({ + $, + projectId: this.projectId, + data: { + jsonapi: { + version: "1.0", + }, + data: { + type: "items", + attributes: { + displayName: this.fileName, + extension: { + type: this.type, + version: "1.0", + }, + }, + relationships: { + tip: { + data: { + type: "versions", + id: "1", + }, + }, + parent: { + data: { + type: "folders", + id: this.folderId, + }, + }, + }, + }, + included: [ + { + type: "versions", + id: "1", + attributes: { + name: this.fileName, + extension: { + type: this.type.replace("items", "versions"), + version: "1.0", + }, + }, + relationships: { + storage: { + data: { + type: "objects", + id: objectId, + }, + }, + }, + }, + ], + }, + }); + + $.export("$summary", `Successfully uploaded file ${this.fileName}`); + return response; + }, +}; diff --git a/components/autodesk/autodesk.app.mjs b/components/autodesk/autodesk.app.mjs index 67dc994768ffb..8c9d9f84b2ef2 100644 --- a/components/autodesk/autodesk.app.mjs +++ b/components/autodesk/autodesk.app.mjs @@ -1,11 +1,246 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "autodesk", - propDefinitions: {}, + propDefinitions: { + hubId: { + type: "string", + label: "Hub ID", + description: "The identifier of a hub", + async options() { + const { data } = await this.listHubs(); + return data?.map(({ + id, attributes, + }) => ({ + label: attributes.name, + value: id, + })) || []; + }, + }, + projectId: { + type: "string", + label: "Project", + description: "The identifier of a project", + async options({ + hubId, page, + }) { + if (!hubId) { + return []; + } + const { data } = await this.listProjects({ + hubId, + params: { + "page[number]": page, + }, + }); + return data?.map(({ + id, attributes, + }) => ({ + label: attributes.name, + value: id, + })) || []; + }, + }, + folderId: { + type: "string", + label: "Folder ID", + description: "The identifier of a folder", + async options({ + hubId, projectId, + }) { + if (!hubId || !projectId) { + return []; + } + const rootFolderId = await this.getProjectTopFolderId({ + hubId, + projectId, + }); + const options = [ + { + label: "Root Folder", + value: rootFolderId, + }, + ]; + + const fetchFoldersRecursively = async (folderId, depth = 0, maxDepth = 10) => { + if (depth > maxDepth) { + return; + } + const { data } = await this.getFolderContent({ + projectId, + folderId, + params: { + "filter[type]": "folders", + }, + }); + const folders = data?.map(({ + id, attributes, + }) => ({ + label: attributes.name, + value: id, + })) || []; + + options.push(...folders); + + for (const folder of folders) { + await fetchFoldersRecursively(folder.value, depth + 1, maxDepth); + } + }; + + await fetchFoldersRecursively(rootFolderId); + + return options; + }, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return "https://developer.api.autodesk.com"; + }, + _makeRequest({ + $ = this, + path, + headers, + ...otherOpts + }) { + return axios($, { + url: `${this._baseUrl()}${path}`, + headers: { + "Authorization": `Bearer ${this.$auth.oauth_access_token}`, + "Content-Type": "application/json", + ...headers, + }, + ...otherOpts, + }); + }, + createWebhook({ + system, event, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/webhooks/v1/systems/${system}/events/${event}/hooks`, + ...opts, + }); + }, + deleteWebhook({ + system, event, hookId, + }) { + return this._makeRequest({ + method: "DELETE", + path: `/webhooks/v1/systems/${system}/events/${event}/hooks/${hookId}`, + }); + }, + listHubs(opts = {}) { + return this._makeRequest({ + path: "/project/v1/hubs", + ...opts, + }); + }, + listProjects({ + hubId, ...opts + }) { + return this._makeRequest({ + path: `/project/v1/hubs/${hubId}/projects`, + ...opts, + }); + }, + async getProjectTopFolderId({ + hubId, projectId, ...opts + }) { + const { data } = await this._makeRequest({ + path: `/project/v1/hubs/${hubId}/projects/${projectId}/topFolders`, + ...opts, + }); + return data[0].id; + }, + getFolderContent({ + projectId, folderId, ...opts + }) { + return this._makeRequest({ + path: `/data/v1/projects/${projectId}/folders/${folderId}/contents`, + ...opts, + }); + }, + createFolder({ + projectId, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/data/v1/projects/${projectId}/folders`, + headers: { + "Content-Type": "application/vnd.api+json", + }, + ...opts, + }); + }, + createStorageLocation({ + projectId, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/data/v1/projects/${projectId}/storage`, + headers: { + "Content-Type": "application/vnd.api+json", + }, + ...opts, + }); + }, + generateSignedUrl({ + bucketKey, objectKey, ...opts + }) { + return this._makeRequest({ + path: `/oss/v2/buckets/${bucketKey}/objects/${objectKey}/signeds3upload`, + ...opts, + }); + }, + completeUpload({ + bucketKey, objectKey, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/oss/v2/buckets/${bucketKey}/objects/${objectKey}/signeds3upload`, + ...opts, + }); + }, + createFirstVersionOfFile({ + projectId, ...opts + }) { + return this._makeRequest({ + method: "POST", + path: `/data/v1/projects/${projectId}/items`, + headers: { + "Content-Type": "application/vnd.api+json", + }, + ...opts, + }); + }, + async *paginate({ + fn, + args, + max, + }) { + let hasMore = true; + let count = 0; + args = { + ...args, + params: { + ...args?.params, + "page[number]": 0, + "page[limit]": 200, + }, + }; + while (hasMore) { + const { data } = await fn(args); + for (const item of data) { + yield item; + if (max && ++count >= max) { + return; + } + } + hasMore = data?.length === args.params["page[limit]"]; + args.params["page[number]"] += 1; + } }, }, }; diff --git a/components/autodesk/package.json b/components/autodesk/package.json index 777962c7a9c3c..edab34b5a08b0 100644 --- a/components/autodesk/package.json +++ b/components/autodesk/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/autodesk", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream Autodesk Components", "main": "autodesk.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3" } -} \ No newline at end of file +} diff --git a/components/autodesk/sources/common/base-polling.mjs b/components/autodesk/sources/common/base-polling.mjs new file mode 100644 index 0000000000000..ca28c59971ddd --- /dev/null +++ b/components/autodesk/sources/common/base-polling.mjs @@ -0,0 +1,51 @@ +import autodesk from "../../autodesk.app.mjs"; +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; + +export default { + props: { + autodesk, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + async processEvent(max) { + const items = this.autodesk.paginate({ + fn: this.getFn(), + args: this.getArgs(), + max, + }); + + const results = []; + for await (const item of items) { + results.push(item); + } + + results.forEach((result) => { + const meta = this.generateMeta(result); + this.$emit(result, meta); + }); + }, + getFn() { + throw new Error("getFn is not implemented"); + }, + getArgs() { + return {}; + }, + generateMeta() { + throw new Error("generateMeta is not implemented"); + }, + }, + hooks: { + async deploy() { + await this.processEvent(25); + }, + }, + async run() { + await this.processEvent(); + }, +}; diff --git a/components/autodesk/sources/common/base-webhook.mjs b/components/autodesk/sources/common/base-webhook.mjs new file mode 100644 index 0000000000000..dd2cb1423ef53 --- /dev/null +++ b/components/autodesk/sources/common/base-webhook.mjs @@ -0,0 +1,95 @@ +import autodesk from "../../autodesk.app.mjs"; + +export default { + props: { + autodesk, + db: "$.service.db", + http: { + type: "$.interface.http", + customResponse: true, + }, + hubId: { + propDefinition: [ + autodesk, + "hubId", + ], + }, + projectId: { + propDefinition: [ + autodesk, + "projectId", + (c) => ({ + hubId: c.hubId, + }), + ], + }, + folderId: { + propDefinition: [ + autodesk, + "folderId", + (c) => ({ + hubId: c.hubId, + projectId: c.projectId, + }), + ], + }, + }, + hooks: { + async activate() { + const { headers: { location } } = await this.autodesk.createWebhook({ + system: "data", + event: this.getEvent(), + data: { + callbackUrl: this.http.endpoint, + scope: { + folder: this.folderId, + }, + hubId: this.hubId, + projectId: this.projectId, + autoReactivateHook: true, + }, + returnFullResponse: true, + }); + if (!location) { + throw new Error("Could not create webhook"); + } + const hookId = location.split("/").pop(); + this._setHookId(hookId); + }, + async deactivate() { + const hookId = this._getHookId(); + if (hookId) { + await this.autodesk.deleteWebhook({ + hookId, + }); + } + }, + }, + methods: { + _getHookId() { + return this.db.get("hookId"); + }, + _setHookId(hookId) { + this.db.set("hookId", hookId); + }, + getEvent() { + throw new Error("getEvent is not implemented"); + }, + generateMeta() { + throw new Error("generateMeta is not implemented"); + }, + }, + async run(event) { + this.http.respond({ + status: 200, + }); + + const { body: { payload } } = event; + if (!payload) { + return; + } + + const meta = this.generateMeta(payload); + this.$emit(payload, meta); + }, +}; diff --git a/components/autodesk/sources/new-folder-instant/new-folder-instant.mjs b/components/autodesk/sources/new-folder-instant/new-folder-instant.mjs new file mode 100644 index 0000000000000..288c8459908cd --- /dev/null +++ b/components/autodesk/sources/new-folder-instant/new-folder-instant.mjs @@ -0,0 +1,26 @@ +import common from "../common/base-webhook.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "autodesk-new-folder-instant", + name: "New Folder Created (Instant)", + description: "Emit new event when a folder is added to a specified folder in Autodesk. [See the documentation](https://aps.autodesk.com/en/docs/webhooks/v1/reference/http/webhooks/systems-system-events-event-hooks-POST/)", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getEvent() { + return "dm.folder.added"; + }, + generateMeta(payload) { + return { + id: payload.source, + summary: `New Folder Created: ${payload.name}`, + ts: Date.parse(payload.createdTime), + }; + }, + }, + sampleEmit, +}; diff --git a/components/autodesk/sources/new-folder-instant/test-event.mjs b/components/autodesk/sources/new-folder-instant/test-event.mjs new file mode 100644 index 0000000000000..1af723c45d371 --- /dev/null +++ b/components/autodesk/sources/new-folder-instant/test-event.mjs @@ -0,0 +1,37 @@ +export default { + "modifiedTime": "2025-01-20T21:24:41+0000", + "creator": "7QNJ9NNCKNKRJ8ZU", + "hidden": false, + "folderAggregatePath": "/tenant-57405840/group-470016059/folder/subfolder", + "indexable": false, + "source": "urn:adsk.wipprod:fs.folder:co.NDQS1d9xSZWYNKPIXn1WBQ", + "user_info": { + "id": "7QNJ9NNCKNKRJ8ZU" + }, + "name": "subfolder", + "context": { + "operation": "PostFolders" + }, + "createdTime": "2025-01-20T21:24:41+0000", + "modifiedBy": "7QNJ9NNCKNKRJ8ZU", + "parentFolderUrn": "urn:adsk.wipprod:fs.folder:co.g9HYzAN-QbKWxdHTtLDfog", + "ancestors": [ + { + "name": "pipedream", + "urn": "urn:adsk.wipprod:fs.folder:co.jAXxcF7IQQSUHIhZ1CPHGA" + }, + { + "name": "Default Project", + "urn": "urn:adsk.wipprod:fs.folder:co.6Nb9sJXVRNKRVbgmZyS4oQ" + }, + { + "name": "folder", + "urn": "urn:adsk.wipprod:fs.folder:co.g9HYzAN-QbKWxdHTtLDfog" + } + ], + "project": "470016059", + "tenant": "57405840", + "custom-metadata": { + "fileName": "subfolder" + } +} \ No newline at end of file diff --git a/components/autodesk/sources/new-project-created/new-project-created.mjs b/components/autodesk/sources/new-project-created/new-project-created.mjs new file mode 100644 index 0000000000000..2451451d4b8c2 --- /dev/null +++ b/components/autodesk/sources/new-project-created/new-project-created.mjs @@ -0,0 +1,40 @@ +import common from "../common/base-polling.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "autodesk-new-project-created", + name: "New Project Created", + description: "Emit new event when a new project is created in Autodesk. [See the documentation](https://aps.autodesk.com/en/docs/data/v2/reference/http/hubs-hub_id-projects-GET/)", + version: "0.0.1", + type: "source", + dedupe: "unique", + props: { + ...common.props, + hubId: { + propDefinition: [ + common.props.autodesk, + "hubId", + ], + }, + }, + methods: { + ...common.methods, + getFn() { + return this.autodesk.listProjects; + }, + getArgs() { + return { + hubId: this.hubId, + }; + }, + generateMeta(project) { + return { + id: project.id, + summary: `New Project: ${project.attributes.name}`, + ts: Date.now(), + }; + }, + }, + sampleEmit, +}; diff --git a/components/autodesk/sources/new-project-created/test-event.mjs b/components/autodesk/sources/new-project-created/test-event.mjs new file mode 100644 index 0000000000000..1f8ca0b083c01 --- /dev/null +++ b/components/autodesk/sources/new-project-created/test-event.mjs @@ -0,0 +1,54 @@ +export default { + "type": "projects", + "id": "a.YnVzaW5lc3M6cGlwZWRyZWFtI0QyMDI1MDEyMDg2Mjg5MDYwNg", + "attributes": { + "name": "Default Project", + "scopes": [ + "global" + ], + "extension": { + "type": "projects:autodesk.core:Project", + "version": "1.0", + "schema": { + "href": "https://developer.api.autodesk.com/schema/v1/versions/projects:autodesk.core:Project-1.0" + }, + "data": {} + } + }, + "links": { + "self": { + "href": "https://developer.api.autodesk.com/project/v1/hubs/a.YnVzaW5lc3M6cGlwZWRyZWFt/projects/a.YnVzaW5lc3M6cGlwZWRyZWFtI0QyMDI1MDEyMDg2Mjg5MDYwNg" + } + }, + "relationships": { + "hub": { + "data": { + "type": "hubs", + "id": "a.YnVzaW5lc3M6cGlwZWRyZWFt" + }, + "links": { + "related": { + "href": "https://developer.api.autodesk.com/project/v1/hubs/a.YnVzaW5lc3M6cGlwZWRyZWFt" + } + } + }, + "rootFolder": { + "data": { + "type": "folders", + "id": "urn:adsk.wipprod:fs.folder:co.6Nb9sJXVRNKRVbgmZyS4oQ" + }, + "meta": { + "link": { + "href": "https://developer.api.autodesk.com/data/v1/projects/a.YnVzaW5lc3M6cGlwZWRyZWFtI0QyMDI1MDEyMDg2Mjg5MDYwNg/folders/urn:adsk.wipprod:fs.folder:co.6Nb9sJXVRNKRVbgmZyS4oQ" + } + } + }, + "topFolders": { + "links": { + "related": { + "href": "https://developer.api.autodesk.com/project/v1/hubs/a.YnVzaW5lc3M6cGlwZWRyZWFt/projects/a.YnVzaW5lc3M6cGlwZWRyZWFtI0QyMDI1MDEyMDg2Mjg5MDYwNg/topFolders" + } + } + } + } +} \ No newline at end of file diff --git a/components/autodesk/sources/new-version-instant/new-version-instant.mjs b/components/autodesk/sources/new-version-instant/new-version-instant.mjs new file mode 100644 index 0000000000000..fcfd2c64807ce --- /dev/null +++ b/components/autodesk/sources/new-version-instant/new-version-instant.mjs @@ -0,0 +1,26 @@ +import common from "../common/base-webhook.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "autodesk-new-version-instant", + name: "New File Version Created (Instant)", + description: "Emit new event when a new version of a file is created in Autodesk. [See the documentation](https://aps.autodesk.com/en/docs/webhooks/v1/reference/http/webhooks/systems-system-events-event-hooks-POST/)", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getEvent() { + return "dm.version.added"; + }, + generateMeta(payload) { + return { + id: payload.source, + summary: `New File Version for File: ${payload.name}`, + ts: Date.parse(payload.createdTime), + }; + }, + }, + sampleEmit, +}; diff --git a/components/autodesk/sources/new-version-instant/test-event.mjs b/components/autodesk/sources/new-version-instant/test-event.mjs new file mode 100644 index 0000000000000..106b0776d727a --- /dev/null +++ b/components/autodesk/sources/new-version-instant/test-event.mjs @@ -0,0 +1,62 @@ +export default { + "ext": "jpg", + "modifiedTime": "2025-01-20T21:33:05+0000", + "creator": "7QNJ9NNCKNKRJ8ZU", + "lineageUrn": "urn:adsk.wipprod:dm.lineage:ghXmW_6LQNKrcMoezksabw", + "sizeInBytes": 463713, + "hidden": false, + "indexable": true, + "source": "urn:adsk.wipprod:fs.file:vf.ghXmW_6LQNKrcMoezksabw?version=1", + "mimeType": "application/image", + "version": "1", + "user_info": { + "id": "7QNJ9NNCKNKRJ8ZU" + }, + "name": "file.jpg", + "context": { + "lineage": { + "reserved": false, + "reservedUserName": null, + "reservedUserId": null, + "reservedTime": null, + "unreservedUserName": null, + "unreservedUserId": null, + "unreservedTime": null, + "createUserId": "7QNJ9NNCKNKRJ8ZU", + "createTime": "2025-01-20T21:33:05+0000", + "createUserName": "", + "lastModifiedUserId": "7QNJ9NNCKNKRJ8ZU", + "lastModifiedTime": "2025-01-20T21:33:05+0000", + "lastModifiedUserName": "" + }, + "operation": "PostVersionedFiles" + }, + "createdTime": "2025-01-20T21:33:05+0000", + "modifiedBy": "7QNJ9NNCKNKRJ8ZU", + "state": "CONTENT_AVAILABLE", + "parentFolderUrn": "urn:adsk.wipprod:fs.folder:co.NDQS1d9xSZWYNKPIXn1WBQ", + "ancestors": [ + { + "name": "pipedream", + "urn": "urn:adsk.wipprod:fs.folder:co.jAXxcF7IQQSUHIhZ1CPHGA" + }, + { + "name": "Default Project", + "urn": "urn:adsk.wipprod:fs.folder:co.6Nb9sJXVRNKRVbgmZyS4oQ" + }, + { + "name": "folder", + "urn": "urn:adsk.wipprod:fs.folder:co.g9HYzAN-QbKWxdHTtLDfog" + }, + { + "name": "subfolder", + "urn": "urn:adsk.wipprod:fs.folder:co.NDQS1d9xSZWYNKPIXn1WBQ" + } + ], + "project": "470016059", + "tenant": "57405840", + "custom-metadata": { + "lineageTitle": "file.jpg", + "fileName": "file.jpg" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3686908afa83..76d7438c44506 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -566,8 +566,7 @@ importers: components/alphamoon: {} - components/alteryx_analytics_cloud: - specifiers: {} + components/alteryx_analytics_cloud: {} components/altiria: dependencies: @@ -702,8 +701,7 @@ importers: specifier: ^1.5.1 version: 1.6.6 - components/apaleo: - specifiers: {} + components/apaleo: {} components/apex_27: {} @@ -868,7 +866,11 @@ importers: components/autobound: {} - components/autodesk: {} + components/autodesk: + dependencies: + '@pipedream/platform': + specifier: ^3.0.3 + version: 3.0.3 components/autoklose: {} @@ -4895,8 +4897,7 @@ importers: components/homerun: {} - components/honeyhive: - specifiers: {} + components/honeyhive: {} components/hookdeck: dependencies: @@ -7017,8 +7018,7 @@ importers: specifier: ^3.0.1 version: 3.0.3 - components/nmbrs: - specifiers: {} + components/nmbrs: {} components/nocodb: dependencies: @@ -11453,8 +11453,7 @@ importers: components/vero: {} - components/verticalresponse: - specifiers: {} + components/verticalresponse: {} components/vestaboard: dependencies: @@ -11841,8 +11840,7 @@ importers: components/wolfram_alpha: {} - components/wolfram_alpha_api: - specifiers: {} + components/wolfram_alpha_api: {} components/wonderchat: {}