n8n-nodes-glasser 0.1.0

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Glasser
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # n8n-nodes-glasser
2
+
3
+ Premium data for n8n workflows and AI Agents through **one Glasser Key**: find people, company intelligence, SEO research, web research, social research and market data, backed by Apollo, People Data Labs, Hunter, BuiltWith, DataForSEO, Semrush, Ahrefs, Serper, Exa, ScrapeCreators, RentCast and more. The node says what data it wants; Glasser decides which provider serves it. Pay per call, no signup at each vendor.
4
+
5
+ One node, one credential. `usableAsTool` is on, so the same node works as a step in a workflow and as a tool under an AI Agent.
6
+
7
+ ## Resources and operations
8
+
9
+ | Resource | Operations | Providers behind it |
10
+ |---|---|---|
11
+ | **Person** | Search people, Enrich a person, Find a work email | Apollo, People Data Labs, LeadMagic, ZoomInfo, Hunter, Prospeo |
12
+ | **Company** | Enrich, Technology stack, Website traffic, Competitors, Funding rounds, News | Apollo, PDL, Hunter, Prospeo, PredictLeads, LeadMagic, BuiltWith, DataForSEO, Ahrefs, Apify, Exa, Serper |
13
+ | **SEO** | Keyword metrics, Keyword ideas, Search results for a keyword, Domain organic overview, Ranked keywords, Organic search competitors, Backlink totals, Backlinks, Referring domains, Domain rating | Semrush, Serpstat, DataForSEO, Ahrefs, Serper |
14
+ | **Web Research** | Search the web, News, Places, Academic papers, Shopping, Images, Videos, Answer from the web, Read a web page, Similar pages | Serper, SerpApi, Exa, DataForSEO |
15
+ | **Social** | Platform (Reddit, X, YouTube, TikTok, Instagram, LinkedIn) × Mode (Search, Profile, Recent posts, One post, Find social profiles) | ScrapeCreators, Apify, TikHub |
16
+ | **Market Data** | Property value estimate, Rent estimate, Property records, Listings for sale, Rental listings, ZIP market statistics, Stock quote | RentCast, SerpApi |
17
+
18
+ Every resource has a **Provider** field. `Auto` (the default) lets Glasser pick the source for the operation and fall back to the next one on a provider error; naming a provider forces it.
19
+
20
+ ## How a call works
21
+
22
+ 1. The node sends its parameters as they are to `POST https://api.glasser.ai/v1/solutions/gtm/<resource>` with a fresh idempotency key. Comma-separated fields become arrays; nothing else is changed.
23
+ 2. Glasser resolves `(operation, provider)` to one endpoint, translates the fields into that endpoint's native input, runs it, and under `Auto` moves to the next source on a provider error. It never falls back on an empty answer: "no result" is an answer.
24
+ 3. The output item is the run exactly as the Glasser API returns it: `provider` and `endpoint` say who served the call, `input` is what was sent, `output` is the provider's own payload, `charge_usd` is the exact charge as a decimal string, `run_url` opens it in the console. An async run is polled until it is terminal (up to 180 seconds).
25
+
26
+ The node holds no routing table and no state. Its parameters are generated from the Glasser OpenAPI document (`scripts/gen-properties.mjs`), so they cannot drift from the API.
27
+
28
+ ## Credentials
29
+
30
+ 1. Sign in at https://app.glasser.ai, open **Keys**, create a Key (it starts with `gl_`). The workspace needs a balance: runs are prepaid and charged per call.
31
+ 2. In n8n, add a **Glasser API** credential and paste the Key. The credential test calls `GET /v1/balance`, which is free.
32
+
33
+ ## Installation
34
+
35
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation. Package name: `n8n-nodes-glasser`.
36
+
37
+ ## Usage notes
38
+
39
+ - **Each call is one paid run** at the routed endpoint's published price. Under `Auto` a provider error can lead to a second run at the next source; each run is billed under its own terms and all of them are visible in the Glasser console.
40
+ - **Two indicators, not one.** A run's `status` and the provider's response are separate. A `COMPLETED` run whose provider answered 404 ("person not found") is a normal outcome, charged per the endpoint's clauses (`charge_basis.clause`).
41
+ - **Errors are the API's own envelope.** A refused request (unknown country, a filter the named provider cannot apply, a provider that does not serve the operation) is raised with Glasser's error code and message; nothing was run and nothing was charged.
42
+ - **Money is an exact decimal string** (`"0.0005"`), never a float.
43
+
44
+ ## Development
45
+
46
+ ```sh
47
+ npm install
48
+ npm run gen # regenerate nodes/Glasser/properties.ts from https://glasser.ai/docs/openapi.json
49
+ npm run lint
50
+ npm run build
51
+ npm run dev # local n8n with the node loaded
52
+ ```
53
+
54
+ ## Support
55
+
56
+ - Source repository: https://github.com/glasser-ai/n8n-nodes-glasser
57
+ - Glasser documentation: https://glasser.ai/docs
58
+ - Console: https://app.glasser.ai
59
+ - Contact: support@glasser.ai
60
+
61
+ ## License
62
+
63
+ [MIT](LICENSE.md)
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, Icon, INodeProperties } from 'n8n-workflow';
2
+ export declare class GlasserApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: Icon;
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GlasserApi = void 0;
4
+ class GlasserApi {
5
+ constructor() {
6
+ this.name = 'glasserApi';
7
+ this.displayName = 'Glasser API';
8
+ this.icon = { light: 'file:glasser.svg', dark: 'file:glasser.dark.svg' };
9
+ this.documentationUrl = 'https://github.com/glasser-ai/n8n-nodes-glasser?tab=readme-ov-file#credentials';
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: {
16
+ password: true,
17
+ },
18
+ default: '',
19
+ placeholder: 'gl_...',
20
+ description: 'Create a Key at app.glasser.ai → Keys. Runs are prepaid and charged per call.',
21
+ },
22
+ ];
23
+ this.authenticate = {
24
+ type: 'generic',
25
+ properties: {
26
+ headers: {
27
+ Authorization: '=Bearer {{$credentials.apiKey}}',
28
+ },
29
+ },
30
+ };
31
+ this.test = {
32
+ request: {
33
+ baseURL: 'https://api.glasser.ai',
34
+ url: '/v1/balance',
35
+ method: 'GET',
36
+ },
37
+ };
38
+ }
39
+ }
40
+ exports.GlasserApi = GlasserApi;
41
+ //# sourceMappingURL=GlasserApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlasserApi.credentials.js","sourceRoot":"","sources":["../../credentials/GlasserApi.credentials.ts"],"names":[],"mappings":";;;AAYA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QAEpB,gBAAW,GAAG,aAAa,CAAC;QAE5B,SAAI,GAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QAE1E,qBAAgB,GAAG,gFAAgF,CAAC;QAEpG,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,+EAA+E;aAC5F;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,wBAAwB;gBACjC,GAAG,EAAE,aAAa;gBAClB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAvCD,gCAuCC"}
@@ -0,0 +1,12 @@
1
+ <svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1024" height="1024" fill="white"/>
3
+ <g transform="translate(143.36 170.345) scale(0.316)">
4
+ <path d="M320.667 1118.99C320.667 1015.07 248.883 930.824 160.333 930.824C71.7837 930.824 0 1015.07 0 1118.99V1299.37C0 1403.29 71.7837 1487.54 160.333 1487.54C248.883 1487.54 320.667 1403.29 320.667 1299.37V1118.99Z" fill="black"/>
5
+ <path d="M2335.97 1118.99C2335.97 1015.07 2264.68 930.824 2176.75 930.824C2088.81 930.824 2017.53 1015.07 2017.53 1118.99V1299.37C2017.53 1403.29 2088.81 1487.54 2176.75 1487.54C2264.68 1487.54 2335.97 1403.29 2335.97 1299.37V1118.99Z" fill="black"/>
6
+ <path d="M1280.44 162.56H1053.3C1020.09 162.56 993.176 189.479 993.176 222.685V351.842C993.176 385.049 1020.09 411.967 1053.3 411.967H1280.44C1313.65 411.967 1340.56 385.049 1340.56 351.842V222.685C1340.56 189.479 1313.65 162.56 1280.44 162.56Z" fill="black"/>
7
+ <path d="M1220.31 93.5278H1113.43V193.736H1220.31V93.5278Z" fill="black"/>
8
+ <path d="M1230.34 0H1103.41C1076.96 0 1055.53 21.4354 1055.53 47.8773V72.3727C1055.53 98.8146 1076.96 120.25 1103.41 120.25H1230.34C1256.78 120.25 1278.21 98.8146 1278.21 72.3727V47.8773C1278.21 21.4354 1256.78 0 1230.34 0Z" fill="black"/>
9
+ <path d="M2173.43 1206.02C2173.43 1497.6 2075.56 1726.83 1895.21 1898.95C1714.68 2071.24 1474.76 2164.46 1169.08 2164.46C863.395 2164.46 623.496 2071.24 442.966 1898.95C262.591 1726.83 164.743 1497.6 164.743 1206.02C164.743 914.434 262.591 685.225 442.966 513.089C623.496 340.797 863.395 247.581 1169.08 247.581C1474.76 247.581 1714.68 340.797 1895.21 513.089C2075.56 685.225 2173.43 914.434 2173.43 1206.02Z" fill="black"/>
10
+ <path d="M213.778 1053.3C213.778 968.845 247.328 887.849 307.047 828.13C366.766 768.411 447.762 734.861 532.218 734.861H1805.98C1890.43 734.861 1971.43 768.411 2031.15 828.13C2090.87 887.849 2124.42 968.845 2124.42 1053.3V1170.21C2124.42 1267.95 2085.59 1361.7 2016.47 1430.81C1947.36 1499.93 1853.62 1538.75 1755.87 1538.75H1623.38C1372.23 1538.75 1292.69 1219.62 1304.85 1263.78C1296.73 1234.61 1279.28 1208.9 1255.16 1190.59C1231.05 1172.27 1201.6 1162.35 1171.32 1162.35C1141.04 1162.35 1111.6 1172.27 1087.49 1190.59C1063.37 1208.9 1045.92 1234.61 1037.8 1263.78C1049.96 1219.62 974.871 1538.75 723.727 1538.75H582.322C484.578 1538.75 390.837 1499.93 321.722 1430.81C252.606 1361.7 213.778 1267.95 213.778 1170.21V1053.3Z" fill="#F26339"/>
11
+ </g>
12
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1024" height="1024" fill="white"/>
3
+ <g transform="translate(143.36 170.345) scale(0.316)">
4
+ <path d="M320.667 1118.99C320.667 1015.07 248.883 930.824 160.333 930.824C71.7837 930.824 0 1015.07 0 1118.99V1299.37C0 1403.29 71.7837 1487.54 160.333 1487.54C248.883 1487.54 320.667 1403.29 320.667 1299.37V1118.99Z" fill="black"/>
5
+ <path d="M2335.97 1118.99C2335.97 1015.07 2264.68 930.824 2176.75 930.824C2088.81 930.824 2017.53 1015.07 2017.53 1118.99V1299.37C2017.53 1403.29 2088.81 1487.54 2176.75 1487.54C2264.68 1487.54 2335.97 1403.29 2335.97 1299.37V1118.99Z" fill="black"/>
6
+ <path d="M1280.44 162.56H1053.3C1020.09 162.56 993.176 189.479 993.176 222.685V351.842C993.176 385.049 1020.09 411.967 1053.3 411.967H1280.44C1313.65 411.967 1340.56 385.049 1340.56 351.842V222.685C1340.56 189.479 1313.65 162.56 1280.44 162.56Z" fill="black"/>
7
+ <path d="M1220.31 93.5278H1113.43V193.736H1220.31V93.5278Z" fill="black"/>
8
+ <path d="M1230.34 0H1103.41C1076.96 0 1055.53 21.4354 1055.53 47.8773V72.3727C1055.53 98.8146 1076.96 120.25 1103.41 120.25H1230.34C1256.78 120.25 1278.21 98.8146 1278.21 72.3727V47.8773C1278.21 21.4354 1256.78 0 1230.34 0Z" fill="black"/>
9
+ <path d="M2173.43 1206.02C2173.43 1497.6 2075.56 1726.83 1895.21 1898.95C1714.68 2071.24 1474.76 2164.46 1169.08 2164.46C863.395 2164.46 623.496 2071.24 442.966 1898.95C262.591 1726.83 164.743 1497.6 164.743 1206.02C164.743 914.434 262.591 685.225 442.966 513.089C623.496 340.797 863.395 247.581 1169.08 247.581C1474.76 247.581 1714.68 340.797 1895.21 513.089C2075.56 685.225 2173.43 914.434 2173.43 1206.02Z" fill="black"/>
10
+ <path d="M213.778 1053.3C213.778 968.845 247.328 887.849 307.047 828.13C366.766 768.411 447.762 734.861 532.218 734.861H1805.98C1890.43 734.861 1971.43 768.411 2031.15 828.13C2090.87 887.849 2124.42 968.845 2124.42 1053.3V1170.21C2124.42 1267.95 2085.59 1361.7 2016.47 1430.81C1947.36 1499.93 1853.62 1538.75 1755.87 1538.75H1623.38C1372.23 1538.75 1292.69 1219.62 1304.85 1263.78C1296.73 1234.61 1279.28 1208.9 1255.16 1190.59C1231.05 1172.27 1201.6 1162.35 1171.32 1162.35C1141.04 1162.35 1111.6 1172.27 1087.49 1190.59C1063.37 1208.9 1045.92 1234.61 1037.8 1263.78C1049.96 1219.62 974.871 1538.75 723.727 1538.75H582.322C484.578 1538.75 390.837 1499.93 321.722 1430.81C252.606 1361.7 213.778 1267.95 213.778 1170.21V1053.3Z" fill="#F26339"/>
11
+ </g>
12
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Glasser implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Glasser = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const properties_1 = require("./properties");
7
+ const BASE_URL = 'https://api.glasser.ai';
8
+ const TERMINAL = new Set(['COMPLETED', 'FAILED', 'STOPPED']);
9
+ const CREATE_TIMEOUT_MS = 120000;
10
+ const WAIT_BUDGET_MS = 180000;
11
+ const POLL_MS = 2000;
12
+ class Glasser {
13
+ constructor() {
14
+ this.description = {
15
+ displayName: 'Glasser',
16
+ name: 'glasser',
17
+ icon: { light: 'file:glasser.svg', dark: 'file:glasser.dark.svg' },
18
+ group: ['transform'],
19
+ version: 1,
20
+ subtitle: '={{ $parameter["operation"] || $parameter["mode"] }}: {{ $parameter["resource"] }}',
21
+ description: 'Premium data for people, companies, SEO, the web, social media and markets through one Glasser Key. Say what data you want; Glasser picks the provider.',
22
+ defaults: {
23
+ name: 'Glasser',
24
+ },
25
+ usableAsTool: true,
26
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
27
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
28
+ credentials: [
29
+ {
30
+ name: 'glasserApi',
31
+ required: true,
32
+ },
33
+ ],
34
+ properties: properties_1.properties,
35
+ };
36
+ }
37
+ async execute() {
38
+ const items = this.getInputData();
39
+ const returnData = [];
40
+ for (let i = 0; i < items.length; i++) {
41
+ try {
42
+ const resource = this.getNodeParameter('resource', i);
43
+ const body = requestBody.call(this, resource, i);
44
+ const run = await callSolution.call(this, resource, body);
45
+ returnData.push({ json: run, pairedItem: { item: i } });
46
+ }
47
+ catch (error) {
48
+ if (this.continueOnFail()) {
49
+ returnData.push({
50
+ json: { error: error.message },
51
+ pairedItem: { item: i },
52
+ });
53
+ continue;
54
+ }
55
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error, { itemIndex: i });
56
+ }
57
+ }
58
+ return [returnData];
59
+ }
60
+ }
61
+ exports.Glasser = Glasser;
62
+ function requestBody(resource, itemIndex) {
63
+ var _a, _b;
64
+ const meta = properties_1.RESOURCE_META[resource];
65
+ const body = {};
66
+ for (const property of properties_1.properties) {
67
+ const shown = (_b = (_a = property.displayOptions) === null || _a === void 0 ? void 0 : _a.show) === null || _b === void 0 ? void 0 : _b.resource;
68
+ if (!shown || !shown.includes(resource))
69
+ continue;
70
+ const raw = this.getNodeParameter(property.name, itemIndex, '');
71
+ if (raw === undefined || raw === null || raw === '')
72
+ continue;
73
+ if (Array.isArray(raw)) {
74
+ if (raw.length > 0)
75
+ body[property.name] = raw;
76
+ continue;
77
+ }
78
+ const name = property.name === 'operation' ? 'action' : property.name;
79
+ if (meta.lists.includes(name)) {
80
+ const parts = String(raw)
81
+ .split(',')
82
+ .map((s) => s.trim())
83
+ .filter(Boolean);
84
+ if (parts.length > 0)
85
+ body[name] = parts;
86
+ continue;
87
+ }
88
+ body[name] = typeof raw === 'string' ? raw.trim() : raw;
89
+ }
90
+ return body;
91
+ }
92
+ async function callSolution(resource, body) {
93
+ const request = {
94
+ method: 'POST',
95
+ url: `${BASE_URL}/v1/solutions/${properties_1.SOLUTION}/${resource}`,
96
+ headers: {
97
+ 'Idempotency-Key': (0, node_crypto_1.randomUUID)(),
98
+ 'User-Agent': 'n8n-nodes-glasser (+https://github.com/glasser-ai/n8n-nodes-glasser)',
99
+ },
100
+ body,
101
+ json: true,
102
+ timeout: CREATE_TIMEOUT_MS,
103
+ };
104
+ let run = await send.call(this, request);
105
+ const deadline = Date.now() + WAIT_BUDGET_MS;
106
+ while (!TERMINAL.has(String(run.status)) && Date.now() < deadline) {
107
+ await (0, n8n_workflow_1.sleep)(POLL_MS);
108
+ run = await send.call(this, {
109
+ method: 'GET',
110
+ url: `${BASE_URL}/v1/runs/${encodeURIComponent(String(run.id))}`,
111
+ json: true,
112
+ });
113
+ }
114
+ return run;
115
+ }
116
+ async function send(request) {
117
+ var _a, _b, _c;
118
+ const response = (await this.helpers.httpRequestWithAuthentication.call(this, 'glasserApi', {
119
+ ...request,
120
+ returnFullResponse: true,
121
+ ignoreHttpStatusErrors: true,
122
+ }));
123
+ if (response.statusCode >= 200 && response.statusCode < 300)
124
+ return response.body;
125
+ const envelope = (_a = response.body) !== null && _a !== void 0 ? _a : {};
126
+ const error = ((_b = envelope.error) !== null && _b !== void 0 ? _b : {});
127
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), envelope, {
128
+ httpCode: String(response.statusCode),
129
+ message: error.code ? `${error.code}: ${(_c = error.message) !== null && _c !== void 0 ? _c : ''}`.trim() : `HTTP ${response.statusCode}`,
130
+ description: envelope.request_id ? `request_id ${String(envelope.request_id)}` : undefined,
131
+ });
132
+ }
133
+ //# sourceMappingURL=Glasser.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Glasser.node.js","sourceRoot":"","sources":["../../../nodes/Glasser/Glasser.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-glasser.glasser",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Sales", "Marketing"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/glasser-ai/n8n-nodes-glasser?tab=readme-ov-file#credentials"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/glasser-ai/n8n-nodes-glasser?tab=readme-ov-file"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ <svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1024" height="1024" fill="white"/>
3
+ <g transform="translate(143.36 170.345) scale(0.316)">
4
+ <path d="M320.667 1118.99C320.667 1015.07 248.883 930.824 160.333 930.824C71.7837 930.824 0 1015.07 0 1118.99V1299.37C0 1403.29 71.7837 1487.54 160.333 1487.54C248.883 1487.54 320.667 1403.29 320.667 1299.37V1118.99Z" fill="black"/>
5
+ <path d="M2335.97 1118.99C2335.97 1015.07 2264.68 930.824 2176.75 930.824C2088.81 930.824 2017.53 1015.07 2017.53 1118.99V1299.37C2017.53 1403.29 2088.81 1487.54 2176.75 1487.54C2264.68 1487.54 2335.97 1403.29 2335.97 1299.37V1118.99Z" fill="black"/>
6
+ <path d="M1280.44 162.56H1053.3C1020.09 162.56 993.176 189.479 993.176 222.685V351.842C993.176 385.049 1020.09 411.967 1053.3 411.967H1280.44C1313.65 411.967 1340.56 385.049 1340.56 351.842V222.685C1340.56 189.479 1313.65 162.56 1280.44 162.56Z" fill="black"/>
7
+ <path d="M1220.31 93.5278H1113.43V193.736H1220.31V93.5278Z" fill="black"/>
8
+ <path d="M1230.34 0H1103.41C1076.96 0 1055.53 21.4354 1055.53 47.8773V72.3727C1055.53 98.8146 1076.96 120.25 1103.41 120.25H1230.34C1256.78 120.25 1278.21 98.8146 1278.21 72.3727V47.8773C1278.21 21.4354 1256.78 0 1230.34 0Z" fill="black"/>
9
+ <path d="M2173.43 1206.02C2173.43 1497.6 2075.56 1726.83 1895.21 1898.95C1714.68 2071.24 1474.76 2164.46 1169.08 2164.46C863.395 2164.46 623.496 2071.24 442.966 1898.95C262.591 1726.83 164.743 1497.6 164.743 1206.02C164.743 914.434 262.591 685.225 442.966 513.089C623.496 340.797 863.395 247.581 1169.08 247.581C1474.76 247.581 1714.68 340.797 1895.21 513.089C2075.56 685.225 2173.43 914.434 2173.43 1206.02Z" fill="black"/>
10
+ <path d="M213.778 1053.3C213.778 968.845 247.328 887.849 307.047 828.13C366.766 768.411 447.762 734.861 532.218 734.861H1805.98C1890.43 734.861 1971.43 768.411 2031.15 828.13C2090.87 887.849 2124.42 968.845 2124.42 1053.3V1170.21C2124.42 1267.95 2085.59 1361.7 2016.47 1430.81C1947.36 1499.93 1853.62 1538.75 1755.87 1538.75H1623.38C1372.23 1538.75 1292.69 1219.62 1304.85 1263.78C1296.73 1234.61 1279.28 1208.9 1255.16 1190.59C1231.05 1172.27 1201.6 1162.35 1171.32 1162.35C1141.04 1162.35 1111.6 1172.27 1087.49 1190.59C1063.37 1208.9 1045.92 1234.61 1037.8 1263.78C1049.96 1219.62 974.871 1538.75 723.727 1538.75H582.322C484.578 1538.75 390.837 1499.93 321.722 1430.81C252.606 1361.7 213.778 1267.95 213.778 1170.21V1053.3Z" fill="#F26339"/>
11
+ </g>
12
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1024" height="1024" fill="white"/>
3
+ <g transform="translate(143.36 170.345) scale(0.316)">
4
+ <path d="M320.667 1118.99C320.667 1015.07 248.883 930.824 160.333 930.824C71.7837 930.824 0 1015.07 0 1118.99V1299.37C0 1403.29 71.7837 1487.54 160.333 1487.54C248.883 1487.54 320.667 1403.29 320.667 1299.37V1118.99Z" fill="black"/>
5
+ <path d="M2335.97 1118.99C2335.97 1015.07 2264.68 930.824 2176.75 930.824C2088.81 930.824 2017.53 1015.07 2017.53 1118.99V1299.37C2017.53 1403.29 2088.81 1487.54 2176.75 1487.54C2264.68 1487.54 2335.97 1403.29 2335.97 1299.37V1118.99Z" fill="black"/>
6
+ <path d="M1280.44 162.56H1053.3C1020.09 162.56 993.176 189.479 993.176 222.685V351.842C993.176 385.049 1020.09 411.967 1053.3 411.967H1280.44C1313.65 411.967 1340.56 385.049 1340.56 351.842V222.685C1340.56 189.479 1313.65 162.56 1280.44 162.56Z" fill="black"/>
7
+ <path d="M1220.31 93.5278H1113.43V193.736H1220.31V93.5278Z" fill="black"/>
8
+ <path d="M1230.34 0H1103.41C1076.96 0 1055.53 21.4354 1055.53 47.8773V72.3727C1055.53 98.8146 1076.96 120.25 1103.41 120.25H1230.34C1256.78 120.25 1278.21 98.8146 1278.21 72.3727V47.8773C1278.21 21.4354 1256.78 0 1230.34 0Z" fill="black"/>
9
+ <path d="M2173.43 1206.02C2173.43 1497.6 2075.56 1726.83 1895.21 1898.95C1714.68 2071.24 1474.76 2164.46 1169.08 2164.46C863.395 2164.46 623.496 2071.24 442.966 1898.95C262.591 1726.83 164.743 1497.6 164.743 1206.02C164.743 914.434 262.591 685.225 442.966 513.089C623.496 340.797 863.395 247.581 1169.08 247.581C1474.76 247.581 1714.68 340.797 1895.21 513.089C2075.56 685.225 2173.43 914.434 2173.43 1206.02Z" fill="black"/>
10
+ <path d="M213.778 1053.3C213.778 968.845 247.328 887.849 307.047 828.13C366.766 768.411 447.762 734.861 532.218 734.861H1805.98C1890.43 734.861 1971.43 768.411 2031.15 828.13C2090.87 887.849 2124.42 968.845 2124.42 1053.3V1170.21C2124.42 1267.95 2085.59 1361.7 2016.47 1430.81C1947.36 1499.93 1853.62 1538.75 1755.87 1538.75H1623.38C1372.23 1538.75 1292.69 1219.62 1304.85 1263.78C1296.73 1234.61 1279.28 1208.9 1255.16 1190.59C1231.05 1172.27 1201.6 1162.35 1171.32 1162.35C1141.04 1162.35 1111.6 1172.27 1087.49 1190.59C1063.37 1208.9 1045.92 1234.61 1037.8 1263.78C1049.96 1219.62 974.871 1538.75 723.727 1538.75H582.322C484.578 1538.75 390.837 1499.93 321.722 1430.81C252.606 1361.7 213.778 1267.95 213.778 1170.21V1053.3Z" fill="#F26339"/>
11
+ </g>
12
+ </svg>
@@ -0,0 +1,7 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const SOLUTION = "gtm";
3
+ export declare const RESOURCE_META: Record<string, {
4
+ lists: string[];
5
+ hasOperation: boolean;
6
+ }>;
7
+ export declare const properties: INodeProperties[];