@taskmagic/apps-linkup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Linkup
2
+
3
+ Linkup is a web search engine for AI apps. Connect your AI application to the internet and get grounding data to enrich your AI's output.
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@taskmagic/apps-linkup",
3
+ "version": "0.0.1",
4
+ "dependencies": {
5
+ "@anthropic-ai/sdk": "0.33.1",
6
+ "@sinclair/typebox": "0.34.11",
7
+ "axios": "1.17.0",
8
+ "axios-retry": "4.4.1",
9
+ "deepmerge-ts": "7.1.0",
10
+ "mime-types": "2.1.35",
11
+ "nanoid": "3.3.8",
12
+ "openai": "4.67.1",
13
+ "replicate": "0.34.1",
14
+ "semver": "7.6.0",
15
+ "zod": "3.25.76",
16
+ "@taskmagic/pieces-common": "0.4.4",
17
+ "@taskmagic/pieces-framework": "0.7.46",
18
+ "@taskmagic/shared": "0.10.171",
19
+ "tslib": "1.14.1"
20
+ },
21
+ "overrides": {
22
+ "cross-spawn": "7.0.6",
23
+ "elliptic": "^6.6.1",
24
+ "fast-xml-parser": "^4.4.1",
25
+ "protobufjs": "^7.5.5",
26
+ "tmp": "^0.2.4",
27
+ "koa": "^2.16.4",
28
+ "picomatch": "^4.0.4",
29
+ "langsmith": "^0.6.0",
30
+ "serialize-javascript": "^6.0.2",
31
+ "elevenlabs": {
32
+ "form-data": "^4.0.4"
33
+ },
34
+ "@tryfabric/martian": {
35
+ "@notionhq/client": "$@notionhq/client"
36
+ },
37
+ "vite": {
38
+ "rollup": "npm:@rollup/wasm-node@^4.61.1"
39
+ }
40
+ },
41
+ "resolutions": {
42
+ "rollup": "npm:@rollup/wasm-node@^4.61.1"
43
+ },
44
+ "types": "./src/index.d.ts",
45
+ "main": "./src/index.js",
46
+ "type": "commonjs"
47
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { linkupAuth } from './lib/common/auth';
2
+ export { linkupAuth };
3
+ export declare const linkup: import("@taskmagic/pieces-framework").Piece<import("@taskmagic/pieces-framework").SecretTextProperty<true>>;
package/src/index.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.linkup = exports.linkupAuth = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const pieces_common_1 = require("@taskmagic/pieces-common");
7
+ const shared_1 = require("@taskmagic/shared");
8
+ const auth_1 = require("./lib/common/auth");
9
+ Object.defineProperty(exports, "linkupAuth", { enumerable: true, get: function () { return auth_1.linkupAuth; } });
10
+ const search_1 = require("./lib/actions/search");
11
+ const fetch_1 = require("./lib/actions/fetch");
12
+ exports.linkup = (0, pieces_framework_1.createPiece)({
13
+ displayName: 'Linkup',
14
+ description: "Linkup is a web search engine for AI apps. Connect your AI application to the internet and get grounding data to enrich your AI's output.",
15
+ auth: auth_1.linkupAuth,
16
+ minimumSupportedRelease: '0.30.0',
17
+ logoUrl: 'https://cdn.activepieces.com/pieces/linkup.png',
18
+ categories: [shared_1.PieceCategory.DEVELOPER_TOOLS],
19
+ authors: ['onyedikachi-david'],
20
+ ai: {
21
+ description: 'Search the live web and read specific pages through Linkup to ground AI answers with up-to-date facts, sources, and citations.',
22
+ keywords: [
23
+ 'web search',
24
+ 'internet search',
25
+ 'grounding',
26
+ 'live web',
27
+ 'sourced answer',
28
+ 'citations',
29
+ 'fetch webpage',
30
+ 'scrape page',
31
+ 'markdown',
32
+ 'rag',
33
+ ],
34
+ },
35
+ actions: [
36
+ search_1.search,
37
+ fetch_1.fetch,
38
+ (0, pieces_common_1.createCustomApiCallAction)({
39
+ auth: auth_1.linkupAuth,
40
+ baseUrl: () => 'https://api.linkup.so',
41
+ authMapping: (auth) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
42
+ return {
43
+ Authorization: `Bearer ${auth}`,
44
+ };
45
+ }),
46
+ }),
47
+ ],
48
+ triggers: [],
49
+ });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/linkup/src/index.ts"],"names":[],"mappings":";;;;AAAA,kEAA0D;AAC1D,4DAAqE;AACrE,8CAAkD;AAClD,4CAA+C;AAItC,2FAJA,iBAAU,OAIA;AAHnB,iDAA8C;AAC9C,+CAA4C;AAI/B,QAAA,MAAM,GAAG,IAAA,8BAAW,EAAC;IAChC,WAAW,EAAE,QAAQ;IACrB,WAAW,EACT,2IAA2I;IAC7I,IAAI,EAAE,iBAAU;IAChB,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,gDAAgD;IACzD,UAAU,EAAE,CAAC,sBAAa,CAAC,eAAe,CAAC;IAC3C,OAAO,EAAE,CAAC,mBAAmB,CAAC;IAC9B,EAAE,EAAE;QACF,WAAW,EACT,gIAAgI;QAClI,QAAQ,EAAE;YACR,YAAY;YACZ,iBAAiB;YACjB,WAAW;YACX,UAAU;YACV,gBAAgB;YAChB,WAAW;YACX,eAAe;YACf,aAAa;YACb,UAAU;YACV,KAAK;SACN;KACF;IACD,OAAO,EAAE;QACP,eAAM;QACN,aAAK;QACL,IAAA,yCAAyB,EAAC;YACxB,IAAI,EAAE,iBAAU;YAChB,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB;YACtC,WAAW,EAAE,CAAO,IAAI,EAAE,EAAE;gBAC1B,OAAO;oBACL,aAAa,EAAE,UAAU,IAAc,EAAE;iBAC1C,CAAC;YACJ,CAAC,CAAA;SACF,CAAC;KACH;IACD,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const fetch: import("@taskmagic/pieces-framework").IAction<import("@taskmagic/pieces-framework").SecretTextProperty<true>, {
2
+ url: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ renderJs: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
4
+ includeRawHtml: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
5
+ extractImages: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
6
+ }>;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetch = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const pieces_common_1 = require("@taskmagic/pieces-common");
7
+ const auth_1 = require("../common/auth");
8
+ const client_1 = require("../common/client");
9
+ exports.fetch = (0, pieces_framework_1.createAction)({
10
+ auth: auth_1.linkupAuth,
11
+ name: 'fetch',
12
+ displayName: 'Fetch Webpage',
13
+ description: 'Fetch a webpage and convert it to markdown format. Optionally render JavaScript, include raw HTML, or extract images.',
14
+ props: {
15
+ url: pieces_framework_1.Property.ShortText({
16
+ displayName: 'URL',
17
+ description: 'The URL of the webpage to fetch',
18
+ required: true,
19
+ }),
20
+ renderJs: pieces_framework_1.Property.Checkbox({
21
+ displayName: 'Render JavaScript',
22
+ description: 'Render JavaScript on the webpage before fetching',
23
+ required: false,
24
+ defaultValue: false,
25
+ }),
26
+ includeRawHtml: pieces_framework_1.Property.Checkbox({
27
+ displayName: 'Include Raw HTML',
28
+ description: 'Include the raw HTML in the response',
29
+ required: false,
30
+ defaultValue: false,
31
+ }),
32
+ extractImages: pieces_framework_1.Property.Checkbox({
33
+ displayName: 'Extract Images',
34
+ description: 'Extract images from the webpage',
35
+ required: false,
36
+ defaultValue: false,
37
+ }),
38
+ },
39
+ run(context) {
40
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
41
+ const { url, renderJs, includeRawHtml, extractImages } = context.propsValue;
42
+ const body = {
43
+ url,
44
+ };
45
+ if (renderJs !== undefined) {
46
+ body['renderJs'] = renderJs;
47
+ }
48
+ if (includeRawHtml !== undefined) {
49
+ body['includeRawHtml'] = includeRawHtml;
50
+ }
51
+ if (extractImages !== undefined) {
52
+ body['extractImages'] = extractImages;
53
+ }
54
+ return yield (0, client_1.linkupApiCall)({
55
+ method: pieces_common_1.HttpMethod.POST,
56
+ path: '/v1/fetch',
57
+ body,
58
+ auth: context.auth,
59
+ });
60
+ });
61
+ },
62
+ });
63
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/linkup/src/lib/actions/fetch.ts"],"names":[],"mappings":";;;;AAAA,kEAAqE;AACrE,4DAAsD;AACtD,yCAA4C;AAC5C,6CAAiD;AAEpC,QAAA,KAAK,GAAG,IAAA,+BAAY,EAAC;IAChC,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,eAAe;IAC5B,WAAW,EACT,uHAAuH;IACzH,KAAK,EAAE;QACL,GAAG,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACtB,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,QAAQ,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC1B,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,cAAc,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAChC,WAAW,EAAE,kBAAkB;YAC/B,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,aAAa,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC/B,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,iCAAiC;YAC9C,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAE5E,MAAM,IAAI,GAA4B;gBACpC,GAAG;aACJ,CAAC;YAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC9B,CAAC;YAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC;YAC1C,CAAC;YAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC;YACxC,CAAC;YAED,OAAO,MAAM,IAAA,sBAAa,EAAC;gBACzB,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const search: import("@taskmagic/pieces-framework").IAction<import("@taskmagic/pieces-framework").SecretTextProperty<true>, {
2
+ q: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ depth: import("@taskmagic/pieces-framework").StaticDropdownProperty<string, true>;
4
+ outputType: import("@taskmagic/pieces-framework").StaticDropdownProperty<string, true>;
5
+ structuredOutputSchema: import("@taskmagic/pieces-framework").LongTextProperty<false>;
6
+ includeSources: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
7
+ includeImages: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
8
+ fromDate: import("@taskmagic/pieces-framework").ShortTextProperty<false>;
9
+ toDate: import("@taskmagic/pieces-framework").ShortTextProperty<false>;
10
+ includeDomains: import("@taskmagic/pieces-framework").ArrayProperty<false>;
11
+ excludeDomains: import("@taskmagic/pieces-framework").ArrayProperty<false>;
12
+ includeInlineCitations: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
13
+ maxResults: import("@taskmagic/pieces-framework").NumberProperty<false>;
14
+ }>;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.search = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const pieces_common_1 = require("@taskmagic/pieces-common");
7
+ const auth_1 = require("../common/auth");
8
+ const client_1 = require("../common/client");
9
+ exports.search = (0, pieces_framework_1.createAction)({
10
+ auth: auth_1.linkupAuth,
11
+ name: 'search',
12
+ displayName: 'Search the Web',
13
+ description: 'Search the web for relevant content based on a natural language query. Perfect for grounding LLM responses with factual data.',
14
+ props: {
15
+ q: pieces_framework_1.Property.ShortText({
16
+ displayName: 'Query',
17
+ description: 'The natural language question or query to search for',
18
+ required: true,
19
+ }),
20
+ depth: pieces_framework_1.Property.StaticDropdown({
21
+ displayName: 'Search Depth',
22
+ description: 'Standard returns results faster; deep takes longer but yields more comprehensive results',
23
+ required: true,
24
+ defaultValue: 'standard',
25
+ options: {
26
+ options: [
27
+ { label: 'Standard', value: 'standard' },
28
+ { label: 'Deep', value: 'deep' },
29
+ ],
30
+ },
31
+ }),
32
+ outputType: pieces_framework_1.Property.StaticDropdown({
33
+ displayName: 'Output Type',
34
+ description: 'Format of the response. Use structured for custom JSON format.',
35
+ required: true,
36
+ defaultValue: 'searchResults',
37
+ options: {
38
+ options: [
39
+ { label: 'Search Results', value: 'searchResults' },
40
+ { label: 'Sourced Answer', value: 'sourcedAnswer' },
41
+ { label: 'Structured', value: 'structured' },
42
+ ],
43
+ },
44
+ }),
45
+ structuredOutputSchema: pieces_framework_1.Property.LongText({
46
+ displayName: 'Structured Output Schema',
47
+ description: 'JSON schema (as a string) for the desired response format. Required only when Output Type is "structured".',
48
+ required: false,
49
+ }),
50
+ includeSources: pieces_framework_1.Property.Checkbox({
51
+ displayName: 'Include Sources',
52
+ description: 'Include sources in the response. Only relevant when Output Type is "structured".',
53
+ required: false,
54
+ defaultValue: false,
55
+ }),
56
+ includeImages: pieces_framework_1.Property.Checkbox({
57
+ displayName: 'Include Images',
58
+ description: 'Include images in search results',
59
+ required: false,
60
+ defaultValue: false,
61
+ }),
62
+ fromDate: pieces_framework_1.Property.ShortText({
63
+ displayName: 'From Date',
64
+ description: 'Start date for search results in ISO 8601 format (YYYY-MM-DD), e.g., 2025-01-01',
65
+ required: false,
66
+ }),
67
+ toDate: pieces_framework_1.Property.ShortText({
68
+ displayName: 'To Date',
69
+ description: 'End date for search results in ISO 8601 format (YYYY-MM-DD), e.g., 2025-01-01',
70
+ required: false,
71
+ }),
72
+ includeDomains: pieces_framework_1.Property.Array({
73
+ displayName: 'Include Domains',
74
+ description: 'Domains to search within (up to 100 domains). Leave empty to search all domains.',
75
+ required: false,
76
+ }),
77
+ excludeDomains: pieces_framework_1.Property.Array({
78
+ displayName: 'Exclude Domains',
79
+ description: 'Domains to exclude from search results',
80
+ required: false,
81
+ }),
82
+ includeInlineCitations: pieces_framework_1.Property.Checkbox({
83
+ displayName: 'Include Inline Citations',
84
+ description: 'Include inline citations in the answer. Only relevant when Output Type is "sourcedAnswer".',
85
+ required: false,
86
+ defaultValue: false,
87
+ }),
88
+ maxResults: pieces_framework_1.Property.Number({
89
+ displayName: 'Max Results',
90
+ description: 'Maximum number of results to return',
91
+ required: false,
92
+ }),
93
+ },
94
+ run(context) {
95
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
96
+ const { q, depth, outputType, structuredOutputSchema, includeSources, includeImages, fromDate, toDate, includeDomains, excludeDomains, includeInlineCitations, maxResults, } = context.propsValue;
97
+ if (outputType === 'structured' && !structuredOutputSchema) {
98
+ throw new Error('Structured Output Schema is required when Output Type is "structured"');
99
+ }
100
+ const body = {
101
+ q,
102
+ depth,
103
+ outputType,
104
+ };
105
+ if (outputType === 'structured' && structuredOutputSchema) {
106
+ body['structuredOutputSchema'] = structuredOutputSchema;
107
+ }
108
+ if (outputType === 'structured' && includeSources !== undefined) {
109
+ body['includeSources'] = includeSources;
110
+ }
111
+ if (outputType === 'sourcedAnswer' && includeInlineCitations !== undefined) {
112
+ body['includeInlineCitations'] = includeInlineCitations;
113
+ }
114
+ if (includeImages !== undefined) {
115
+ body['includeImages'] = includeImages;
116
+ }
117
+ if (fromDate) {
118
+ body['fromDate'] = fromDate;
119
+ }
120
+ if (toDate) {
121
+ body['toDate'] = toDate;
122
+ }
123
+ if (includeDomains && includeDomains.length > 0) {
124
+ body['includeDomains'] = includeDomains;
125
+ }
126
+ if (excludeDomains && excludeDomains.length > 0) {
127
+ body['excludeDomains'] = excludeDomains;
128
+ }
129
+ if (maxResults !== undefined && maxResults !== null) {
130
+ body['maxResults'] = maxResults;
131
+ }
132
+ return yield (0, client_1.linkupApiCall)({
133
+ method: pieces_common_1.HttpMethod.POST,
134
+ path: '/v1/search',
135
+ body,
136
+ auth: context.auth,
137
+ });
138
+ });
139
+ },
140
+ });
141
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/linkup/src/lib/actions/search.ts"],"names":[],"mappings":";;;;AAAA,kEAAqE;AACrE,4DAAsD;AACtD,yCAA4C;AAC5C,6CAAiD;AAEpC,QAAA,MAAM,GAAG,IAAA,+BAAY,EAAC;IACjC,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EACT,+HAA+H;IACjI,KAAK,EAAE;QACL,CAAC,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACpB,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,KAAK,EAAE,2BAAQ,CAAC,cAAc,CAAC;YAC7B,WAAW,EAAE,cAAc;YAC3B,WAAW,EACT,0FAA0F;YAC5F,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;oBACxC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;iBACjC;aACF;SACF,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,cAAc,CAAC;YAClC,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,eAAe;YAC7B,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE;oBACnD,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE;oBACnD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;iBAC7C;aACF;SACF,CAAC;QACF,sBAAsB,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YACxC,WAAW,EAAE,0BAA0B;YACvC,WAAW,EACT,4GAA4G;YAC9G,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,cAAc,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAChC,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EACT,kFAAkF;YACpF,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,aAAa,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC/B,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,QAAQ,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,WAAW;YACxB,WAAW,EACT,iFAAiF;YACnF,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACzB,WAAW,EAAE,SAAS;YACtB,WAAW,EACT,+EAA+E;YACjF,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,cAAc,EAAE,2BAAQ,CAAC,KAAK,CAAC;YAC7B,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EACT,kFAAkF;YACpF,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,cAAc,EAAE,2BAAQ,CAAC,KAAK,CAAC;YAC7B,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,sBAAsB,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YACxC,WAAW,EAAE,0BAA0B;YACvC,WAAW,EACT,4FAA4F;YAC9F,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EACJ,CAAC,EACD,KAAK,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,MAAM,EACN,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,UAAU,GACX,GAAG,OAAO,CAAC,UAAU,CAAC;YAEvB,IAAI,UAAU,KAAK,YAAY,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAA4B;gBACpC,CAAC;gBACD,KAAK;gBACL,UAAU;aACX,CAAC;YAEF,IAAI,UAAU,KAAK,YAAY,IAAI,sBAAsB,EAAE,CAAC;gBAC1D,IAAI,CAAC,wBAAwB,CAAC,GAAG,sBAAsB,CAAC;YAC1D,CAAC;YAED,IAAI,UAAU,KAAK,YAAY,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBAChE,IAAI,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC;YAC1C,CAAC;YAED,IAAI,UAAU,KAAK,eAAe,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBAC3E,IAAI,CAAC,wBAAwB,CAAC,GAAG,sBAAsB,CAAC;YAC1D,CAAC;YAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,GAAG,aAAa,CAAC;YACxC,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC9B,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC1B,CAAC;YAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC;YAC1C,CAAC;YAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC;YAC1C,CAAC;YAED,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;YAClC,CAAC;YAED,OAAO,MAAM,IAAA,sBAAa,EAAC;gBACzB,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,IAAI,EAAE,YAAY;gBAClB,IAAI;gBACJ,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const linkupAuth: import("@taskmagic/pieces-framework").SecretTextProperty<true>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.linkupAuth = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_common_1 = require("@taskmagic/pieces-common");
6
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
7
+ const BASE_URL = 'https://api.linkup.so';
8
+ exports.linkupAuth = pieces_framework_1.PieceAuth.SecretText({
9
+ displayName: 'API Key',
10
+ description: `
11
+ To get your API Key:
12
+
13
+ 1. Go to your Linkup account dashboard
14
+ 2. Navigate to API settings
15
+ 3. Copy your API key
16
+ 4. Paste it here
17
+ `,
18
+ required: true,
19
+ validate: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
20
+ if (!auth) {
21
+ return {
22
+ valid: false,
23
+ error: 'API key is required',
24
+ };
25
+ }
26
+ try {
27
+ const response = yield pieces_common_1.httpClient.sendRequest({
28
+ method: pieces_common_1.HttpMethod.GET,
29
+ url: `${BASE_URL}/v1/credits/balance`,
30
+ headers: {
31
+ Authorization: `Bearer ${auth}`,
32
+ 'Content-Type': 'application/json',
33
+ },
34
+ });
35
+ if (response.status === 200) {
36
+ return {
37
+ valid: true,
38
+ };
39
+ }
40
+ return {
41
+ valid: false,
42
+ error: 'Invalid API key',
43
+ };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ valid: false,
48
+ error: 'Invalid API key. Please check your API key and try again.',
49
+ };
50
+ }
51
+ }),
52
+ });
53
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/linkup/src/lib/common/auth.ts"],"names":[],"mappings":";;;;AAAA,4DAAkE;AAClE,kEAAwD;AAExD,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AAE5B,QAAA,UAAU,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC7C,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE;;;;;;;CAOd;IACC,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,KAAiB,EAAE,oDAAZ,EAAE,IAAI,EAAE;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,qBAAqB;aAC7B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,QAAQ,qBAAqB;gBACrC,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,EAAE;oBAC/B,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO;oBACL,KAAK,EAAE,IAAI;iBACZ,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,iBAAiB;aACzB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,2DAA2D;aACnE,CAAC;QACJ,CAAC;IACH,CAAC,CAAA;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { HttpMethod, HttpMessageBody } from '@taskmagic/pieces-common';
2
+ import { PiecePropValueSchema } from '@taskmagic/pieces-framework';
3
+ import { linkupAuth } from './auth';
4
+ export type LinkupApiCallParams = {
5
+ method: HttpMethod;
6
+ path: string;
7
+ queryParams?: Record<string, string | number | string[] | undefined>;
8
+ body?: unknown;
9
+ auth: PiecePropValueSchema<typeof linkupAuth>;
10
+ };
11
+ export declare function linkupApiCall<T extends HttpMessageBody>({ method, path, queryParams, body, auth, }: LinkupApiCallParams): Promise<T>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.linkupApiCall = linkupApiCall;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_common_1 = require("@taskmagic/pieces-common");
6
+ const BASE_URL = 'https://api.linkup.so';
7
+ function linkupApiCall(_a) {
8
+ return tslib_1.__awaiter(this, arguments, void 0, function* ({ method, path, queryParams, body, auth, }) {
9
+ var _b, _c;
10
+ const url = `${BASE_URL}${path}`;
11
+ const headers = {
12
+ Authorization: `Bearer ${auth}`,
13
+ 'Content-Type': 'application/json',
14
+ };
15
+ const qs = {};
16
+ if (queryParams) {
17
+ for (const [key, value] of Object.entries(queryParams)) {
18
+ if (value !== null && value !== undefined) {
19
+ qs[key] = String(value);
20
+ }
21
+ }
22
+ }
23
+ try {
24
+ const response = yield pieces_common_1.httpClient.sendRequest({
25
+ method,
26
+ url,
27
+ headers,
28
+ queryParams: qs,
29
+ body,
30
+ });
31
+ return response.body;
32
+ }
33
+ catch (error) {
34
+ const err = error;
35
+ const statusCode = ((_b = err.response) === null || _b === void 0 ? void 0 : _b.status) || err.status;
36
+ const errorBody = ((_c = err.response) === null || _c === void 0 ? void 0 : _c.body) || err.body;
37
+ if (statusCode === 401 || statusCode === 403) {
38
+ throw new Error('Authentication failed. Please check your API key.');
39
+ }
40
+ if (statusCode === 429) {
41
+ throw new Error('Rate limit exceeded. Please wait a moment and try again.');
42
+ }
43
+ if (statusCode && statusCode >= 400 && statusCode < 500) {
44
+ const errorMessage = (errorBody === null || errorBody === void 0 ? void 0 : errorBody.message) || (errorBody === null || errorBody === void 0 ? void 0 : errorBody.error) || err.message || 'Request failed';
45
+ throw new Error(`Request failed: ${errorMessage}`);
46
+ }
47
+ throw error;
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/linkup/src/lib/common/client.ts"],"names":[],"mappings":";;AAmBA,sCA2DC;;AA9ED,4DAKkC;AAIlC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AAUzC,SAAsB,aAAa;iEAA4B,EAC7D,MAAM,EACN,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,IAAI,GACgB;;QACpB,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;QAEjC,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,IAAI,EAAE;YAC/B,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,MAAM,EAAE,GAAgB,EAAE,CAAC;QAC3B,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAI;gBAC/C,MAAM;gBACN,GAAG;gBACH,OAAO;gBACP,WAAW,EAAE,EAAE;gBACf,IAAI;aACL,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAKX,CAAC;YACF,MAAM,UAAU,GAAG,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,MAAM,KAAI,GAAG,CAAC,MAAM,CAAC;YACtD,MAAM,SAAS,GAAG,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,IAAI,KAAI,GAAG,CAAC,IAAI,CAAC;YAEjD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,UAAU,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBACxD,MAAM,YAAY,GAChB,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,MAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAA,IAAI,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CAAA"}