@ioka-technologies/asyncapi-ts-client-template 0.0.21 → 0.0.22

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.
@@ -1,78 +1,13 @@
1
1
  /**
2
2
  * Security analysis helper functions for TypeScript client template
3
- * Adapted from rust-server template helpers
3
+ * Most common security utilities have been moved to the shared @common package.
4
4
  */
5
5
 
6
- /**
7
- * Analyzes operation security requirements from AsyncAPI specification
8
- *
9
- * @param {object} operation - AsyncAPI operation object
10
- * @returns {object} Security analysis result
11
- */
12
- export function analyzeOperationSecurity(operation) {
13
- try {
14
- // Check AsyncAPI security field
15
- const security = operation.security && operation.security();
16
- if (security && Array.isArray(security) && security.length > 0) {
17
- return {
18
- hasSecurityRequirements: true,
19
- securitySchemes: security,
20
- requiresAuthentication: true
21
- };
22
- }
23
-
24
- // Check if operation has security defined in AsyncAPI spec
25
- const operationJson = operation._json || operation;
26
- if (operationJson.security && Array.isArray(operationJson.security) && operationJson.security.length > 0) {
27
- return {
28
- hasSecurityRequirements: true,
29
- securitySchemes: operationJson.security,
30
- requiresAuthentication: true
31
- };
32
- }
33
-
34
- return {
35
- hasSecurityRequirements: false,
36
- securitySchemes: [],
37
- requiresAuthentication: false
38
- };
39
- } catch (e) {
40
- return {
41
- hasSecurityRequirements: false,
42
- securitySchemes: [],
43
- requiresAuthentication: false
44
- };
45
- }
46
- }
47
-
48
- /**
49
- * Checks if an operation has security requirements
50
- *
51
- * @param {object} operation - AsyncAPI operation object
52
- * @returns {boolean} True if operation has security requirements
53
- */
54
- export function operationRequiresAuth(operation) {
55
- const analysis = analyzeOperationSecurity(operation);
56
- return analysis.hasSecurityRequirements;
57
- }
58
-
59
- /**
60
- * Checks if the AsyncAPI specification has security schemes defined
61
- *
62
- * @param {object} asyncapi - AsyncAPI specification object
63
- * @returns {boolean} True if security schemes are present
64
- */
65
- export function hasSecuritySchemes(asyncapi) {
66
- try {
67
- const components = asyncapi.components();
68
- if (!components) return false;
69
-
70
- const securitySchemes = components.securitySchemes();
71
- return securitySchemes && Object.keys(securitySchemes).length > 0;
72
- } catch (e) {
73
- return false;
74
- }
75
- }
6
+ import {
7
+ analyzeOperationSecurity,
8
+ operationHasSecurity,
9
+ hasSecuritySchemes
10
+ } from '../dist/common/index.js';
76
11
 
77
12
  /**
78
13
  * Get security scheme type from AsyncAPI security scheme definition
@@ -80,7 +15,7 @@ export function hasSecuritySchemes(asyncapi) {
80
15
  * @param {object} securityScheme - AsyncAPI security scheme object
81
16
  * @returns {string} Security scheme type ('jwt', 'basic', 'apikey', etc.)
82
17
  */
83
- export function getSecuritySchemeType(securityScheme) {
18
+ function getSecuritySchemeType(securityScheme) {
84
19
  try {
85
20
  if (securityScheme.type && typeof securityScheme.type === 'function') {
86
21
  return securityScheme.type();
@@ -103,7 +38,7 @@ export function getSecuritySchemeType(securityScheme) {
103
38
  * @param {object} asyncapi - AsyncAPI specification object
104
39
  * @returns {object} Map of operation names to their security requirements
105
40
  */
106
- export function extractOperationSecurityMap(asyncapi) {
41
+ function extractOperationSecurityMap(asyncapi) {
107
42
  const securityMap = {};
108
43
 
109
44
  try {
@@ -135,3 +70,15 @@ export function extractOperationSecurityMap(asyncapi) {
135
70
 
136
71
  return securityMap;
137
72
  }
73
+
74
+ // Export all functions
75
+ export {
76
+ // Re-export common security utilities for backward compatibility
77
+ analyzeOperationSecurity,
78
+ operationHasSecurity as operationRequiresAuth,
79
+ hasSecuritySchemes,
80
+
81
+ // TypeScript client specific functions
82
+ getSecuritySchemeType,
83
+ extractOperationSecurityMap
84
+ };
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Security analysis helper functions for TypeScript client template
3
+ * Most common security utilities have been moved to the shared @common package.
4
+ */
5
+
6
+ import {
7
+ analyzeOperationSecurity,
8
+ operationHasSecurity,
9
+ hasSecuritySchemes
10
+ } from '../../../common/src/index.js';
11
+
12
+ /**
13
+ * Get security scheme type from AsyncAPI security scheme definition
14
+ *
15
+ * @param {object} securityScheme - AsyncAPI security scheme object
16
+ * @returns {string} Security scheme type ('jwt', 'basic', 'apikey', etc.)
17
+ */
18
+ function getSecuritySchemeType(securityScheme) {
19
+ try {
20
+ if (securityScheme.type && typeof securityScheme.type === 'function') {
21
+ return securityScheme.type();
22
+ }
23
+ if (securityScheme.type) {
24
+ return securityScheme.type;
25
+ }
26
+ if (securityScheme._json && securityScheme._json.type) {
27
+ return securityScheme._json.type;
28
+ }
29
+ return 'unknown';
30
+ } catch (e) {
31
+ return 'unknown';
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Extract security requirements for all operations in the AsyncAPI spec
37
+ *
38
+ * @param {object} asyncapi - AsyncAPI specification object
39
+ * @returns {object} Map of operation names to their security requirements
40
+ */
41
+ function extractOperationSecurityMap(asyncapi) {
42
+ const securityMap = {};
43
+
44
+ try {
45
+ const operations = asyncapi.operations && asyncapi.operations();
46
+ if (operations) {
47
+ // Handle AsyncAPI parser collection - use .all() method to get array
48
+ const operationArray = operations.all ? operations.all() : Object.values(operations);
49
+
50
+ operationArray.forEach((operation) => {
51
+ // Get operation ID
52
+ let operationId = null;
53
+ if (operation._meta && operation._meta.id) {
54
+ operationId = operation._meta.id;
55
+ } else if (operation.id && typeof operation.id === 'function') {
56
+ operationId = operation.id();
57
+ } else if (operation.id) {
58
+ operationId = operation.id;
59
+ }
60
+
61
+ if (operationId) {
62
+ const securityAnalysis = analyzeOperationSecurity(operation);
63
+ securityMap[operationId] = securityAnalysis;
64
+ }
65
+ });
66
+ }
67
+ } catch (e) {
68
+ console.warn('Error extracting operation security map:', e.message);
69
+ }
70
+
71
+ return securityMap;
72
+ }
73
+
74
+ // Export all functions
75
+ export {
76
+ // Re-export common security utilities for backward compatibility
77
+ analyzeOperationSecurity,
78
+ operationHasSecurity as operationRequiresAuth,
79
+ hasSecuritySchemes,
80
+
81
+ // TypeScript client specific functions
82
+ getSecuritySchemeType,
83
+ extractOperationSecurityMap
84
+ };
package/template/index.js CHANGED
@@ -1,7 +1,7 @@
1
- const { File } = require('@asyncapi/generator-react-sdk');
2
- const React = require('react');
1
+ import { File } from '@asyncapi/generator-react-sdk';
2
+ import React from 'react';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  // Extract info from AsyncAPI spec
6
6
  let title, version, description;
7
7
  try {
@@ -272,4 +272,4 @@ ${params.license || 'Apache-2.0'}
272
272
  `
273
273
  )
274
274
  ];
275
- };
275
+ }
@@ -806,7 +806,7 @@ export default ${clientName};
806
806
  return content;
807
807
  }
808
808
 
809
- module.exports = function ({ asyncapi, params }) {
809
+ export default function ({ asyncapi, params }) {
810
810
  const title = asyncapi.info().title();
811
811
 
812
812
  // Always use the processed title, ignore params.clientName if it contains template variables
@@ -824,4 +824,4 @@ module.exports = function ({ asyncapi, params }) {
824
824
  {generatedContent}
825
825
  </File>
826
826
  );
827
- };
827
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="index.ts">
7
7
  {`export * from './client';
@@ -369,10 +369,10 @@ function generateModels(asyncapi) {
369
369
  return content;
370
370
  }
371
371
 
372
- module.exports = function ({ asyncapi, params }) {
372
+ export default function ({ asyncapi, params }) {
373
373
  return (
374
374
  <File name="models.ts">
375
375
  {generateModels(asyncapi)}
376
376
  </File>
377
377
  );
378
- };
378
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="headers.ts">
7
7
  {`import { AuthCredentials, AuthError } from './types';
@@ -92,4 +92,4 @@ export function getAuthType(auth: AuthCredentials): string | null {
92
92
  `}
93
93
  </File>
94
94
  );
95
- };
95
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="index.ts">
7
7
  {`// Auth types and interfaces
@@ -12,4 +12,4 @@ export * from './headers';
12
12
  `}
13
13
  </File>
14
14
  );
15
- };
15
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="types.ts">
7
7
  {`/**
@@ -71,4 +71,4 @@ export interface SecurityRequirement {
71
71
  `}
72
72
  </File>
73
73
  );
74
- };
74
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="errors.ts">
7
7
  {`export class TransportError extends Error {
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="index.ts">
7
7
  {`// Retry types and interfaces
@@ -15,4 +15,4 @@ export * from './manager';
15
15
  `}
16
16
  </File>
17
17
  );
18
- };
18
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="manager.ts">
7
7
  {`import { RetryConfig, RetryEventCallbacks, MaxRetriesExceededError } from './types';
@@ -147,4 +147,4 @@ export function createRetryManager(
147
147
  `}
148
148
  </File>
149
149
  );
150
- };
150
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="presets.ts">
7
7
  {`import { RetryConfig, RetryPreset } from './types';
@@ -78,4 +78,4 @@ export function mergeRetryConfig(preset: RetryPreset, overrides: Partial<RetryCo
78
78
  `}
79
79
  </File>
80
80
  );
81
- };
81
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="types.ts">
7
7
  {`/**
@@ -57,4 +57,4 @@ export class MaxRetriesExceededError extends RetryError {
57
57
  `}
58
58
  </File>
59
59
  );
60
- };
60
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  const transports = (params.transports || 'websocket,http').split(',').map(t => t.trim());
6
6
 
7
7
  let imports = `import { Transport, TransportConfig } from '../types';\n`;
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  const transports = (params.transports || 'websocket,http').split(',').map(t => t.trim());
6
6
 
7
7
  if (!transports.includes('http')) {
@@ -214,4 +214,4 @@ export class HttpTransport implements Transport {
214
214
  }`}
215
215
  </File>
216
216
  );
217
- };
217
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  const transports = (params.transports || 'websocket,http').split(',').map(t => t.trim());
6
6
 
7
7
  if (!transports.includes('websocket')) {
@@ -402,4 +402,4 @@ export class WebSocketTransport implements Transport {
402
402
  }`}
403
403
  </File>
404
404
  );
405
- };
405
+ }
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import { File } from '@asyncapi/generator-react-sdk';
3
3
 
4
- module.exports = function ({ asyncapi, params }) {
4
+ export default function ({ asyncapi, params }) {
5
5
  return (
6
6
  <File name="types.ts">
7
7
  {`import { AuthCredentials, AuthEventCallbacks } from './auth';
@@ -81,4 +81,4 @@ export type UnsubscribeFunction = () => void;
81
81
  export type EnvelopeCallback = (envelope: MessageEnvelope) => void;`}
82
82
  </File>
83
83
  );
84
- };
84
+ }