@revenexx/integrations-node-sdk 0.13.0 → 0.14.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.
@@ -14,6 +14,17 @@ function extractCredentialManifests(credentials) {
14
14
 
15
15
  // src/manifest.ts
16
16
  var MANIFEST_VERSION = "v0-draft";
17
+ function parsePackageMeta(raw) {
18
+ const obj = raw && typeof raw === "object" ? raw : {};
19
+ const str = (v) => typeof v === "string" ? v.trim() : "";
20
+ const revenexx = obj.revenexx && typeof obj.revenexx === "object" ? obj.revenexx : {};
21
+ const displayName = str(revenexx.displayName);
22
+ return {
23
+ name: str(obj.name),
24
+ version: str(obj.version),
25
+ displayName: displayName !== "" ? displayName : void 0
26
+ };
27
+ }
17
28
  function buildManifest(nodes, credentials = [], templates = []) {
18
29
  const manifest = {
19
30
  manifestVersion: MANIFEST_VERSION,
@@ -34,5 +45,6 @@ export {
34
45
  extractCredentialManifest,
35
46
  extractCredentialManifests,
36
47
  MANIFEST_VERSION,
48
+ parsePackageMeta,
37
49
  buildManifest
38
50
  };
package/dist/cli.cjs CHANGED
@@ -93,6 +93,17 @@ function extractCredentialManifests(credentials) {
93
93
 
94
94
  // src/manifest.ts
95
95
  var MANIFEST_VERSION = "v0-draft";
96
+ function parsePackageMeta(raw) {
97
+ const obj = raw && typeof raw === "object" ? raw : {};
98
+ const str = (v) => typeof v === "string" ? v.trim() : "";
99
+ const revenexx = obj.revenexx && typeof obj.revenexx === "object" ? obj.revenexx : {};
100
+ const displayName = str(revenexx.displayName);
101
+ return {
102
+ name: str(obj.name),
103
+ version: str(obj.version),
104
+ displayName: displayName !== "" ? displayName : void 0
105
+ };
106
+ }
96
107
  function buildManifest(nodes, credentials = [], templates = []) {
97
108
  const manifest = {
98
109
  manifestVersion: MANIFEST_VERSION,
@@ -113,6 +124,17 @@ function fail(message) {
113
124
  console.error(`Error: ${message}`);
114
125
  process.exit(1);
115
126
  }
127
+ function readPackageJson(root) {
128
+ const pkgPath = (0, import_node_path2.resolve)(root, "package.json");
129
+ if (!fs2.existsSync(pkgPath)) {
130
+ return {};
131
+ }
132
+ try {
133
+ return JSON.parse(fs2.readFileSync(pkgPath, "utf-8"));
134
+ } catch {
135
+ return {};
136
+ }
137
+ }
116
138
  async function runManifest() {
117
139
  const distEntry = (0, import_node_path2.resolve)(projectRoot, "dist", "index.js");
118
140
  if (!fs2.existsSync(distEntry)) {
@@ -130,6 +152,13 @@ async function runManifest() {
130
152
  }
131
153
  const credentials = mod.CREDENTIALS ?? [];
132
154
  const templates = mod.TEMPLATES ?? [];
155
+ const meta = parsePackageMeta(readPackageJson(projectRoot));
156
+ const hasPackage = meta.name !== "" && meta.version !== "";
157
+ if (hasPackage && !meta.displayName) {
158
+ console.warn(
159
+ '\u26A0 package.json has no "revenexx.displayName" \u2014 the node palette will fall back to the raw package name.'
160
+ );
161
+ }
133
162
  const manifest = buildManifest(mod.NODES, credentials, templates);
134
163
  const outDir = (0, import_node_path2.resolve)(projectRoot, "dist");
135
164
  const outFile = (0, import_node_path2.resolve)(outDir, "manifest.json");
@@ -137,8 +166,9 @@ async function runManifest() {
137
166
  fs2.writeFileSync(outFile, JSON.stringify(manifest, null, 2), "utf-8");
138
167
  const credentialCount = manifest.credentials?.length ?? 0;
139
168
  const templateCount = manifest.templates?.length ?? 0;
169
+ const bundlePrefix = hasPackage ? `package ${meta.displayName ? `"${meta.displayName}" ` : ""}(${meta.name}), ` : "";
140
170
  console.log(
141
- `\u2713 dist/manifest.json \u2014 ${manifest.nodes.length} node(s), ${credentialCount} credential(s), ${templateCount} template(s)`
171
+ `\u2713 dist/manifest.json \u2014 ${bundlePrefix}${manifest.nodes.length} node(s), ${credentialCount} credential(s), ${templateCount} template(s)`
142
172
  );
143
173
  for (const m of manifest.nodes) {
144
174
  console.log(` node ${m.slug}@${m.version}`);
package/dist/cli.js CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- buildManifest
4
- } from "./chunk-X5HI7WPI.js";
3
+ buildManifest,
4
+ parsePackageMeta
5
+ } from "./chunk-WB3BYMLA.js";
5
6
 
6
7
  // src/cli.ts
7
8
  import * as fs2 from "fs";
@@ -63,6 +64,17 @@ function fail(message) {
63
64
  console.error(`Error: ${message}`);
64
65
  process.exit(1);
65
66
  }
67
+ function readPackageJson(root) {
68
+ const pkgPath = resolve2(root, "package.json");
69
+ if (!fs2.existsSync(pkgPath)) {
70
+ return {};
71
+ }
72
+ try {
73
+ return JSON.parse(fs2.readFileSync(pkgPath, "utf-8"));
74
+ } catch {
75
+ return {};
76
+ }
77
+ }
66
78
  async function runManifest() {
67
79
  const distEntry = resolve2(projectRoot, "dist", "index.js");
68
80
  if (!fs2.existsSync(distEntry)) {
@@ -80,6 +92,13 @@ async function runManifest() {
80
92
  }
81
93
  const credentials = mod.CREDENTIALS ?? [];
82
94
  const templates = mod.TEMPLATES ?? [];
95
+ const meta = parsePackageMeta(readPackageJson(projectRoot));
96
+ const hasPackage = meta.name !== "" && meta.version !== "";
97
+ if (hasPackage && !meta.displayName) {
98
+ console.warn(
99
+ '\u26A0 package.json has no "revenexx.displayName" \u2014 the node palette will fall back to the raw package name.'
100
+ );
101
+ }
83
102
  const manifest = buildManifest(mod.NODES, credentials, templates);
84
103
  const outDir = resolve2(projectRoot, "dist");
85
104
  const outFile = resolve2(outDir, "manifest.json");
@@ -87,8 +106,9 @@ async function runManifest() {
87
106
  fs2.writeFileSync(outFile, JSON.stringify(manifest, null, 2), "utf-8");
88
107
  const credentialCount = manifest.credentials?.length ?? 0;
89
108
  const templateCount = manifest.templates?.length ?? 0;
109
+ const bundlePrefix = hasPackage ? `package ${meta.displayName ? `"${meta.displayName}" ` : ""}(${meta.name}), ` : "";
90
110
  console.log(
91
- `\u2713 dist/manifest.json \u2014 ${manifest.nodes.length} node(s), ${credentialCount} credential(s), ${templateCount} template(s)`
111
+ `\u2713 dist/manifest.json \u2014 ${bundlePrefix}${manifest.nodes.length} node(s), ${credentialCount} credential(s), ${templateCount} template(s)`
92
112
  );
93
113
  for (const m of manifest.nodes) {
94
114
  console.log(` node ${m.slug}@${m.version}`);
package/dist/index.cjs CHANGED
@@ -42,6 +42,7 @@ __export(index_exports, {
42
42
  isOAuthAuthorizeCredential: () => isOAuthAuthorizeCredential,
43
43
  normalizeCredentialType: () => normalizeCredentialType,
44
44
  normalizeLocalized: () => normalizeLocalized,
45
+ parsePackageMeta: () => parsePackageMeta,
45
46
  retryConfigFields: () => retryConfigFields,
46
47
  safeFetch: () => safeFetch,
47
48
  timeoutConfigField: () => timeoutConfigField
@@ -189,6 +190,17 @@ function retryConfigFields(opts) {
189
190
 
190
191
  // src/manifest.ts
191
192
  var MANIFEST_VERSION = "v0-draft";
193
+ function parsePackageMeta(raw) {
194
+ const obj = raw && typeof raw === "object" ? raw : {};
195
+ const str = (v) => typeof v === "string" ? v.trim() : "";
196
+ const revenexx = obj.revenexx && typeof obj.revenexx === "object" ? obj.revenexx : {};
197
+ const displayName = str(revenexx.displayName);
198
+ return {
199
+ name: str(obj.name),
200
+ version: str(obj.version),
201
+ displayName: displayName !== "" ? displayName : void 0
202
+ };
203
+ }
192
204
  function buildManifest(nodes, credentials = [], templates = []) {
193
205
  const manifest = {
194
206
  manifestVersion: MANIFEST_VERSION,
@@ -431,6 +443,7 @@ function base64Url(buf) {
431
443
  isOAuthAuthorizeCredential,
432
444
  normalizeCredentialType,
433
445
  normalizeLocalized,
446
+ parsePackageMeta,
434
447
  retryConfigFields,
435
448
  safeFetch,
436
449
  timeoutConfigField
package/dist/index.d.cts CHANGED
@@ -478,10 +478,41 @@ interface NodeManifest {
478
478
  */
479
479
  templates?: ITemplateDescription[];
480
480
  }
481
+ /**
482
+ * The registry-relevant fields of a node package's `package.json`, as read by
483
+ * the CLI. `name`/`version` identify the package; `displayName` is the
484
+ * human-readable bundle label shown in the editor's node palette (e.g.
485
+ * „Business Central"). All three are read straight from `package.json` by the
486
+ * integrations server on upload — the CLI reads them only to warn about a
487
+ * missing label and to annotate the manifest log line.
488
+ *
489
+ * The label lives under a namespaced `revenexx` group in `package.json`
490
+ * (`{ "revenexx": { "displayName": "…" } }`), not a bespoke top-level key, so
491
+ * it can't collide with unrelated tooling that squats on `displayName`.
492
+ */
493
+ interface NodePackageMeta {
494
+ name: string;
495
+ version: string;
496
+ /** Human-readable bundle label (e.g. „Business Central"); optional. */
497
+ displayName?: string;
498
+ }
499
+ /**
500
+ * Extracts {@link NodePackageMeta} from parsed `package.json` contents, keeping
501
+ * only the registry-relevant fields and coercing anything malformed to a safe
502
+ * shape. All three fields are trimmed; a blank or whitespace-only value becomes
503
+ * `''` (`name`/`version`) or `undefined` (`displayName`, matching how the server
504
+ * treats it), so whitespace can't masquerade as a present value in tooling.
505
+ * The bundle label is read from the `revenexx` group (`revenexx.displayName`).
506
+ * Does not validate that `name`/`version` are present — the integrations server
507
+ * enforces that on upload; this is a typed, lenient read for tooling.
508
+ */
509
+ declare function parsePackageMeta(raw: unknown): NodePackageMeta;
481
510
  /**
482
511
  * Builds the manifest envelope from a package's `NODES` (and optional
483
512
  * `CREDENTIALS` / `TEMPLATES`) exports. The result is what gets written to
484
- * `dist/manifest.json` and uploaded to the registry inside the tarball.
513
+ * `dist/manifest.json` and uploaded to the registry inside the tarball. The
514
+ * bundle label is NOT carried here — the integrations server reads it straight
515
+ * from `package.json` (`revenexx.displayName`).
485
516
  */
486
517
  declare function buildManifest(nodes: INode[], credentials?: ICredential[], templates?: ITemplateDescription[]): NodeManifest;
487
518
 
@@ -593,4 +624,4 @@ declare abstract class OAuth2AuthCodeCredential extends BaseCredential implement
593
624
  test(_ctx: ICredentialContext, config: Config): Promise<ICredentialTestResult>;
594
625
  }
595
626
 
596
- export { ApiKeyCredential, BaseCredential, BasicAuthCredential, type ConfigType, type CredentialAuthKind, type CredentialFieldType, DEFAULT_RETRY_ATTEMPTS, DEFAULT_RETRY_DELAY_MS, DEFAULT_TIMEOUT_MS, type DataType, type IConfigField, type IConfigFieldBase, type IConfigOption, type IConfigValidation, type ICredential, type ICredentialContext, type ICredentialDescription, type ICredentialField, type ICredentialOAuthAuthorize, type ICredentialResolveResult, type ICredentialTestResult, type IImage, type IInputPort, type INode, type INodeAuthorContext, type INodeContext, type INodeDescription, type INodeResult, type INodeWithIteration, type IOutputField, type IOutputPort, type ITemplateDescription, type ITemplateTrigger, type ImageCategory, type LocalizedString, MANIFEST_VERSION, MAX_RETRY_ATTEMPTS, MAX_TIMEOUT_MS, type NodeCategory, NodeError, type NodeManifest, OAuth2AuthCodeCredential, OAuth2ClientCredentialsCredential, type OAuthTokenResponse, type OutputKind, type SafeFetchOptions, type SafeFetchRetry, SimpleValueCredential, type TemplateLevel, type TemplateTriggerType, buildManifest, extractCredentialManifest, extractCredentialManifests, extractManifest, extractManifests, isNodeWithIteration, isOAuthAuthorizeCredential, normalizeCredentialType, normalizeLocalized, retryConfigFields, safeFetch, timeoutConfigField };
627
+ export { ApiKeyCredential, BaseCredential, BasicAuthCredential, type ConfigType, type CredentialAuthKind, type CredentialFieldType, DEFAULT_RETRY_ATTEMPTS, DEFAULT_RETRY_DELAY_MS, DEFAULT_TIMEOUT_MS, type DataType, type IConfigField, type IConfigFieldBase, type IConfigOption, type IConfigValidation, type ICredential, type ICredentialContext, type ICredentialDescription, type ICredentialField, type ICredentialOAuthAuthorize, type ICredentialResolveResult, type ICredentialTestResult, type IImage, type IInputPort, type INode, type INodeAuthorContext, type INodeContext, type INodeDescription, type INodeResult, type INodeWithIteration, type IOutputField, type IOutputPort, type ITemplateDescription, type ITemplateTrigger, type ImageCategory, type LocalizedString, MANIFEST_VERSION, MAX_RETRY_ATTEMPTS, MAX_TIMEOUT_MS, type NodeCategory, NodeError, type NodeManifest, type NodePackageMeta, OAuth2AuthCodeCredential, OAuth2ClientCredentialsCredential, type OAuthTokenResponse, type OutputKind, type SafeFetchOptions, type SafeFetchRetry, SimpleValueCredential, type TemplateLevel, type TemplateTriggerType, buildManifest, extractCredentialManifest, extractCredentialManifests, extractManifest, extractManifests, isNodeWithIteration, isOAuthAuthorizeCredential, normalizeCredentialType, normalizeLocalized, parsePackageMeta, retryConfigFields, safeFetch, timeoutConfigField };
package/dist/index.d.ts CHANGED
@@ -478,10 +478,41 @@ interface NodeManifest {
478
478
  */
479
479
  templates?: ITemplateDescription[];
480
480
  }
481
+ /**
482
+ * The registry-relevant fields of a node package's `package.json`, as read by
483
+ * the CLI. `name`/`version` identify the package; `displayName` is the
484
+ * human-readable bundle label shown in the editor's node palette (e.g.
485
+ * „Business Central"). All three are read straight from `package.json` by the
486
+ * integrations server on upload — the CLI reads them only to warn about a
487
+ * missing label and to annotate the manifest log line.
488
+ *
489
+ * The label lives under a namespaced `revenexx` group in `package.json`
490
+ * (`{ "revenexx": { "displayName": "…" } }`), not a bespoke top-level key, so
491
+ * it can't collide with unrelated tooling that squats on `displayName`.
492
+ */
493
+ interface NodePackageMeta {
494
+ name: string;
495
+ version: string;
496
+ /** Human-readable bundle label (e.g. „Business Central"); optional. */
497
+ displayName?: string;
498
+ }
499
+ /**
500
+ * Extracts {@link NodePackageMeta} from parsed `package.json` contents, keeping
501
+ * only the registry-relevant fields and coercing anything malformed to a safe
502
+ * shape. All three fields are trimmed; a blank or whitespace-only value becomes
503
+ * `''` (`name`/`version`) or `undefined` (`displayName`, matching how the server
504
+ * treats it), so whitespace can't masquerade as a present value in tooling.
505
+ * The bundle label is read from the `revenexx` group (`revenexx.displayName`).
506
+ * Does not validate that `name`/`version` are present — the integrations server
507
+ * enforces that on upload; this is a typed, lenient read for tooling.
508
+ */
509
+ declare function parsePackageMeta(raw: unknown): NodePackageMeta;
481
510
  /**
482
511
  * Builds the manifest envelope from a package's `NODES` (and optional
483
512
  * `CREDENTIALS` / `TEMPLATES`) exports. The result is what gets written to
484
- * `dist/manifest.json` and uploaded to the registry inside the tarball.
513
+ * `dist/manifest.json` and uploaded to the registry inside the tarball. The
514
+ * bundle label is NOT carried here — the integrations server reads it straight
515
+ * from `package.json` (`revenexx.displayName`).
485
516
  */
486
517
  declare function buildManifest(nodes: INode[], credentials?: ICredential[], templates?: ITemplateDescription[]): NodeManifest;
487
518
 
@@ -593,4 +624,4 @@ declare abstract class OAuth2AuthCodeCredential extends BaseCredential implement
593
624
  test(_ctx: ICredentialContext, config: Config): Promise<ICredentialTestResult>;
594
625
  }
595
626
 
596
- export { ApiKeyCredential, BaseCredential, BasicAuthCredential, type ConfigType, type CredentialAuthKind, type CredentialFieldType, DEFAULT_RETRY_ATTEMPTS, DEFAULT_RETRY_DELAY_MS, DEFAULT_TIMEOUT_MS, type DataType, type IConfigField, type IConfigFieldBase, type IConfigOption, type IConfigValidation, type ICredential, type ICredentialContext, type ICredentialDescription, type ICredentialField, type ICredentialOAuthAuthorize, type ICredentialResolveResult, type ICredentialTestResult, type IImage, type IInputPort, type INode, type INodeAuthorContext, type INodeContext, type INodeDescription, type INodeResult, type INodeWithIteration, type IOutputField, type IOutputPort, type ITemplateDescription, type ITemplateTrigger, type ImageCategory, type LocalizedString, MANIFEST_VERSION, MAX_RETRY_ATTEMPTS, MAX_TIMEOUT_MS, type NodeCategory, NodeError, type NodeManifest, OAuth2AuthCodeCredential, OAuth2ClientCredentialsCredential, type OAuthTokenResponse, type OutputKind, type SafeFetchOptions, type SafeFetchRetry, SimpleValueCredential, type TemplateLevel, type TemplateTriggerType, buildManifest, extractCredentialManifest, extractCredentialManifests, extractManifest, extractManifests, isNodeWithIteration, isOAuthAuthorizeCredential, normalizeCredentialType, normalizeLocalized, retryConfigFields, safeFetch, timeoutConfigField };
627
+ export { ApiKeyCredential, BaseCredential, BasicAuthCredential, type ConfigType, type CredentialAuthKind, type CredentialFieldType, DEFAULT_RETRY_ATTEMPTS, DEFAULT_RETRY_DELAY_MS, DEFAULT_TIMEOUT_MS, type DataType, type IConfigField, type IConfigFieldBase, type IConfigOption, type IConfigValidation, type ICredential, type ICredentialContext, type ICredentialDescription, type ICredentialField, type ICredentialOAuthAuthorize, type ICredentialResolveResult, type ICredentialTestResult, type IImage, type IInputPort, type INode, type INodeAuthorContext, type INodeContext, type INodeDescription, type INodeResult, type INodeWithIteration, type IOutputField, type IOutputPort, type ITemplateDescription, type ITemplateTrigger, type ImageCategory, type LocalizedString, MANIFEST_VERSION, MAX_RETRY_ATTEMPTS, MAX_TIMEOUT_MS, type NodeCategory, NodeError, type NodeManifest, type NodePackageMeta, OAuth2AuthCodeCredential, OAuth2ClientCredentialsCredential, type OAuthTokenResponse, type OutputKind, type SafeFetchOptions, type SafeFetchRetry, SimpleValueCredential, type TemplateLevel, type TemplateTriggerType, buildManifest, extractCredentialManifest, extractCredentialManifests, extractManifest, extractManifests, isNodeWithIteration, isOAuthAuthorizeCredential, normalizeCredentialType, normalizeLocalized, parsePackageMeta, retryConfigFields, safeFetch, timeoutConfigField };
package/dist/index.js CHANGED
@@ -4,8 +4,9 @@ import {
4
4
  extractCredentialManifest,
5
5
  extractCredentialManifests,
6
6
  extractManifest,
7
- extractManifests
8
- } from "./chunk-X5HI7WPI.js";
7
+ extractManifests,
8
+ parsePackageMeta
9
+ } from "./chunk-WB3BYMLA.js";
9
10
 
10
11
  // src/types.ts
11
12
  function isNodeWithIteration(node) {
@@ -359,6 +360,7 @@ export {
359
360
  isOAuthAuthorizeCredential,
360
361
  normalizeCredentialType,
361
362
  normalizeLocalized,
363
+ parsePackageMeta,
362
364
  retryConfigFields,
363
365
  safeFetch,
364
366
  timeoutConfigField
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revenexx/integrations-node-sdk",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "TypeScript interfaces and utilities for Revenexx integration nodes",
5
5
  "license": "MIT",
6
6
  "author": "revenexx GmbH",