@blackswampai/n8n-nodes-openmart 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.
Files changed (30) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +84 -0
  3. package/dist/credentials/OpenmartApi.credentials.d.ts +10 -0
  4. package/dist/credentials/OpenmartApi.credentials.js +41 -0
  5. package/dist/credentials/OpenmartApi.credentials.js.map +1 -0
  6. package/dist/nodes/Openmart/Openmart.node.d.ts +4 -0
  7. package/dist/nodes/Openmart/Openmart.node.js +673 -0
  8. package/dist/nodes/Openmart/Openmart.node.js.map +1 -0
  9. package/dist/nodes/Openmart/Openmart.node.json +18 -0
  10. package/dist/nodes/Openmart/actions/routing.d.ts +22 -0
  11. package/dist/nodes/Openmart/actions/routing.js +300 -0
  12. package/dist/nodes/Openmart/actions/routing.js.map +1 -0
  13. package/dist/nodes/Openmart/openmart.dark.png +0 -0
  14. package/dist/nodes/Openmart/openmart.png +0 -0
  15. package/dist/nodes/Openmart/shared/creation.d.ts +24 -0
  16. package/dist/nodes/Openmart/shared/creation.js +150 -0
  17. package/dist/nodes/Openmart/shared/creation.js.map +1 -0
  18. package/dist/nodes/Openmart/shared/prospecting.d.ts +5 -0
  19. package/dist/nodes/Openmart/shared/prospecting.js +137 -0
  20. package/dist/nodes/Openmart/shared/prospecting.js.map +1 -0
  21. package/dist/nodes/Openmart/shared/request.d.ts +15 -0
  22. package/dist/nodes/Openmart/shared/request.js +89 -0
  23. package/dist/nodes/Openmart/shared/request.js.map +1 -0
  24. package/dist/nodes/Openmart/shared/search.d.ts +13 -0
  25. package/dist/nodes/Openmart/shared/search.js +69 -0
  26. package/dist/nodes/Openmart/shared/search.js.map +1 -0
  27. package/dist/nodes/Openmart/shared/tasks.d.ts +7 -0
  28. package/dist/nodes/Openmart/shared/tasks.js +63 -0
  29. package/dist/nodes/Openmart/shared/tasks.js.map +1 -0
  30. package/package.json +73 -0
package/LICENSE.md ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2026 Christopher J. Nelson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # Openmart for n8n
2
+
3
+ Use Openmart account, business-search, company-email, people-search, batch, and task data in n8n workflows. The integration exposes balance and business search, paid background creation, and reads for asynchronous work.
4
+
5
+ > This is an independent Black Swamp AI community integration. It is not affiliated with, endorsed by, sponsored by, or maintained by Openmart. Product names and marks belong to their respective owners and are used only to identify compatibility.
6
+
7
+ [Installation](#installation) · [Compatibility](#compatibility) · [Credentials](#credentials) · [Operations](#operations) · [Usage](#usage) · [Troubleshooting](#troubleshooting) · [Resources](#resources)
8
+
9
+ ## Installation
10
+
11
+ An Owner or Admin can install the published package on self-hosted n8n:
12
+
13
+ 1. Open **Settings → Community Nodes → Install**.
14
+ 2. Review and accept the warning about installing unverified code.
15
+ 3. Enter the exact npm package name `@blackswampai/n8n-nodes-openmart` and select **Install**.
16
+
17
+ Until n8n verification is granted, this package is not available as a verified community node on n8n Cloud. See n8n's [GUI installation guide](https://docs.n8n.io/integrations/community-nodes/installation-and-management/gui-installation/) for current self-hosted requirements and management steps.
18
+
19
+ ## Compatibility
20
+
21
+ | Surface | Tested baseline | Notes |
22
+ | ------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
23
+ | n8n | 2.37.10 | Disposable server metadata confirmed discovery and icon URLs; no visual editor execution was performed. |
24
+ | Openmart API | Documentation reviewed September 9, 2026 | User-reported live success covers credential save, Balance, Business Search, and the Company Find Emails retrieval chain. |
25
+ | Node.js development | 22.22.0 and 24 | Repository CI targets both versions; local results are recorded in [testing notes](docs/testing.md). |
26
+
27
+ ## Credentials
28
+
29
+ Create an **Openmart API** credential and enter an Openmart API key. Requests use `Authorization: Bearer` authentication against the fixed production API origin. The credential test performs only `GET /api/v2/credit-balance`; HTTP success authenticates independently of balance truthiness, so a valid integer balance of zero is accepted.
30
+
31
+ Never commit API keys or real prospect data.
32
+
33
+ ## Operations
34
+
35
+ - **Account → Get Credit Balance** returns Openmart's `period_start`, `period_end`, and integer `balance` fields without converting credits to currency.
36
+ - **Business → Search** submits a required query with an optional location and initial website/contact/location-count filters, then returns one n8n item per provider business.
37
+ - **Company → Search** returns brand-level company records, not physical stores.
38
+ - **Company → Enrich** matches company records from a website or social-media link.
39
+ - **Company → Find Emails** starts paid background work to find generic shared inbox addresses.
40
+ - **Person → Find Decision Makers** starts paid background work to discover contacts by title.
41
+ - **Person → Enrich Known Person** starts paid background work for 1–8 named people.
42
+ - **Batch → Get Status** returns readiness and progress counts plus the normalized requested `batch_id` for direct chaining.
43
+ - **Batch → Get Task IDs** optionally filters by a free-text status such as `COMPLETED`, then emits one `{task_id,batch_id}` item per returned task for direct chaining.
44
+ - **Task → Get** returns the full provider task envelope, including available result data.
45
+
46
+ Business Get and automatic polling are not advertised.
47
+
48
+ ## Usage
49
+
50
+ Add the Openmart node, select **Account → Get Credit Balance**, and attach an Openmart API credential. Each input item produces one provider response and retains item pairing.
51
+
52
+ The node uses n8n's declarative request routing. Non-search operations make one request per input item. Searches make one request by default and may make additional cursor-page requests when **Limit** exceeds 100 or **Return All** is enabled. The node does not add hidden retries; use n8n's workflow or node retry settings deliberately when appropriate. With **Continue On Fail**, n8n retains errors for their originating inputs.
53
+
54
+ Business Search accepts a 1–500 character query. **Return All** is off by default; otherwise **Limit** is the total number emitted, defaults to 10, and accepts 1–1000. Provider requests contain at most 100 results per page. Pagination stops on an empty page or exhausted cursor, rejects repeated or malformed cursors, and has a 100-page safety ceiling. Search always requests `estimate_total: false` and is never retried automatically because its credit effect has not been verified. Country, state, and city are free text; country codes and names are both documented, so the node does not force `US` or `USA`. The user reported that a real-n8n Business Search with Limit 101 returned exactly 101 items, demonstrating second-page continuation and the total Limit; this was not agent-observed and does not establish request logs, credit changes, Return All, or error behavior.
55
+
56
+ **Business → Get** is intentionally not implemented or advertised for 0.1.0. Openmart documents a JSON-array request body on GET, while tested modern n8n declarative/authenticated transport sends an empty GET body. The user separately reported that POST to the route returned 404 and a bodyless GET query attempt returned `payload can't be empty`; these results were not agent-observed and do not establish credit behavior. As a manual workaround, n8n's generic **HTTP Request** node can use the Openmart credential while exposing the raw method and body configuration needed by this endpoint.
57
+
58
+ Batch and Task reads require an existing ID. Declarative routing may schedule multiple input-item requests concurrently. IDs are trimmed and encoded as one URL path segment. The node does not poll or retry internally: chain Get Status, Get Task IDs, and Task Get explicitly according to workflow needs.
59
+
60
+ Company Find Emails and both Person operations consume Openmart credits and create background work. Each input item submits exactly one task and returns after Openmart accepts the batch; retrieve results with **Batch → Get Status**, **Batch → Get Task IDs**, then **Task → Get**. The 90-second request timeout accommodates documented submission latency but does not poll. Enabling n8n **Retry On Fail** or manually rerunning can create and charge for duplicate work.
61
+
62
+ Company Search is brand-level targeting and emits one row per brand; use Business Search for local or store-level leads. It requires a search term or an explicit narrowing filter beyond the default US country. For US locations, use a two-letter state code such as `CA` or `OH`; non-US region names remain accepted. It uses the same opt-in **Return All**, total **Limit** of 1–1000, 100-result provider pages, exhaustion checks, cursor validation, and 100-page safety ceiling described above. Openmart preview API keys do not support Company cursor pagination, and the node does not attempt to detect key type. Moving optional store-count fields into an opt-in collection removed an unintended filter, and the user reported that a post-fix real-n8n search returned Cable Car Coffee SF plus `openmart_next_cursor`. This was not agent-observed; Company page-two continuation, other filters, empty cases, and credit behavior remain unverified. Company Enrich matches existing Openmart records using a website or social link; it does not crawl an arbitrary site, and returns only its first raw-array page.
63
+
64
+ ## Troubleshooting
65
+
66
+ - Confirm the API key is current and copied without surrounding whitespace.
67
+ - HTTP 401 indicates an unknown or invalid key according to the reviewed Openmart documentation.
68
+ - A zero balance is a valid authenticated response, not an authentication failure.
69
+ - HTTP 402 indicates a credit-limit problem; HTTP 403 indicates permission or endpoint entitlement; HTTP 429 or 500–504 may be suitable for n8n's explicit retry settings on safe reads.
70
+ - Report reproducible defects in [GitHub Issues](https://github.com/BlackSwampAI/n8n-nodes-openmart/issues) without including secrets.
71
+
72
+ ## Resources
73
+
74
+ - [Black Swamp AI package page](https://blackswampai.com/n8n-nodes/openmart/)
75
+ - [Openmart API documentation](https://app.openmart.com/api-docs/quickstart)
76
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
77
+ - [API matrix](docs/api-matrix.md)
78
+ - [Compatibility and testing notes](docs/testing.md)
79
+ - [Branding provenance](docs/branding.md)
80
+ - [Changelog](CHANGELOG.md)
81
+
82
+ ## License
83
+
84
+ [MIT](LICENSE.md)
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class OpenmartApi 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.OpenmartApi = void 0;
4
+ class OpenmartApi {
5
+ constructor() {
6
+ this.name = 'openmartApi';
7
+ this.displayName = 'Openmart API';
8
+ this.icon = {
9
+ light: 'file:../nodes/Openmart/openmart.png',
10
+ dark: 'file:../nodes/Openmart/openmart.dark.png',
11
+ };
12
+ this.documentationUrl = 'https://app.openmart.com/api-docs/quickstart';
13
+ this.properties = [
14
+ {
15
+ displayName: 'API Key',
16
+ name: 'apiKey',
17
+ type: 'string',
18
+ typeOptions: { password: true },
19
+ default: '',
20
+ required: true,
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.openmart.ai',
34
+ url: '/api/v2/credit-balance',
35
+ method: 'GET',
36
+ },
37
+ };
38
+ }
39
+ }
40
+ exports.OpenmartApi = OpenmartApi;
41
+ //# sourceMappingURL=OpenmartApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenmartApi.credentials.js","sourceRoot":"","sources":["../../credentials/OpenmartApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,SAAI,GAAS;YACZ,KAAK,EAAE,qCAAqC;YAC5C,IAAI,EAAE,0CAA0C;SAChD,CAAC;QAEF,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;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,yBAAyB;gBAClC,GAAG,EAAE,wBAAwB;gBAC7B,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAvCD,kCAuCC"}
@@ -0,0 +1,4 @@
1
+ import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Openmart implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }