@springfield/ham-radio-registry 1.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.
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Plugin module capabilities
3
+ */
4
+ export interface PluginCapabilities {
5
+ dslProtocols: boolean;
6
+ customCodecs: boolean;
7
+ memoryRead: boolean;
8
+ memoryWrite: boolean;
9
+ sharedComponents: boolean;
10
+ }
11
+ /**
12
+ * Springfield-specific plugin configuration in package.json
13
+ */
14
+ export interface SpringfieldPluginConfig {
15
+ pluginType: 'radio-module';
16
+ version: string;
17
+ manufacturer: string;
18
+ supportedRadios: string[];
19
+ capabilities: PluginCapabilities;
20
+ configPath: string;
21
+ sharedPath: string;
22
+ codecFactory?: string;
23
+ }
24
+ /**
25
+ * Plugin module information
26
+ */
27
+ export interface PluginModule {
28
+ name: string;
29
+ version: string;
30
+ manufacturer?: string;
31
+ configPath: string;
32
+ sharedPath: string;
33
+ codecFactoryPath?: string;
34
+ capabilities: Record<string, boolean>;
35
+ packageJson: any;
36
+ }
37
+ /**
38
+ * NPM plugin information from registry
39
+ */
40
+ export interface NpmPluginInfo {
41
+ name: string;
42
+ version: string;
43
+ description: string;
44
+ author: string;
45
+ license: string;
46
+ repository?: string;
47
+ downloads: number;
48
+ lastUpdated: string;
49
+ springfield?: SpringfieldPluginConfig;
50
+ }
51
+ /**
52
+ * Plugin manifest configuration
53
+ */
54
+ export interface PluginManifest {
55
+ pluginType: 'radio-module';
56
+ version: string;
57
+ manufacturer: string;
58
+ author: string;
59
+ license: string;
60
+ repository?: string;
61
+ configurations: PluginManifestConfiguration[];
62
+ sharedComponents?: PluginSharedComponents;
63
+ security?: PluginSecurity;
64
+ }
65
+ /**
66
+ * Plugin manifest configuration entry
67
+ */
68
+ export interface PluginManifestConfiguration {
69
+ id: string;
70
+ name: string;
71
+ file: string;
72
+ description: string;
73
+ usesSharedComponents?: string[];
74
+ }
75
+ /**
76
+ * Plugin shared components
77
+ */
78
+ export interface PluginSharedComponents {
79
+ schemas?: Record<string, string>;
80
+ protocols?: Record<string, string>;
81
+ codecs?: Record<string, string>;
82
+ }
83
+ /**
84
+ * Plugin security information
85
+ */
86
+ export interface PluginSecurity {
87
+ signature?: string;
88
+ checksum?: string;
89
+ }
90
+ //# sourceMappingURL=plugin-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-module.d.ts","sourceRoot":"","sources":["../../src/types/plugin-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,EAAE,GAAG,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,2BAA2B,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-module.js","sourceRoot":"","sources":["../../src/types/plugin-module.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import type { Radio } from '@springfield/ham-radio-api';
2
+ /**
3
+ * Radio configuration metadata
4
+ */
5
+ export interface RadioConfigMetadata {
6
+ moduleId: string;
7
+ moduleVersion: string;
8
+ pluginPath: string;
9
+ lastUpdated?: string;
10
+ author?: string;
11
+ license?: string;
12
+ }
13
+ /**
14
+ * Radio capabilities
15
+ */
16
+ export interface RadioCapabilities {
17
+ dslProtocols: boolean;
18
+ customCodecs: boolean;
19
+ memoryRead: boolean;
20
+ memoryWrite: boolean;
21
+ sharedComponents: boolean;
22
+ }
23
+ /**
24
+ * Codec configuration
25
+ */
26
+ export interface CodecConfig {
27
+ type: 'shared' | 'inline';
28
+ reference?: string;
29
+ config?: Record<string, unknown>;
30
+ }
31
+ /**
32
+ * Registry radio configuration
33
+ */
34
+ export interface RegistryRadio extends Radio {
35
+ $schema?: string;
36
+ capabilities: RadioCapabilities;
37
+ codec?: CodecConfig;
38
+ metadata: RadioConfigMetadata;
39
+ }
40
+ //# sourceMappingURL=radio-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-config.d.ts","sourceRoot":"","sources":["../../src/types/radio-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,iBAAiB,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=radio-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-config.js","sourceRoot":"","sources":["../../src/types/radio-config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { ILogLayer } from 'loglayer';
2
+ import type { NpmPluginInfo } from '../types/plugin-module.js';
3
+ /**
4
+ * NPM registry client for plugin discovery and validation
5
+ */
6
+ export interface NpmClient {
7
+ getPackageInfo(packageName: string): Promise<any>;
8
+ searchPackages(query: string): Promise<NpmPluginInfo[]>;
9
+ getPackageStats(packageName: string): Promise<any>;
10
+ validatePackage(packageName: string): Promise<boolean>;
11
+ }
12
+ /**
13
+ * Default implementation of NPM client using npm registry API
14
+ */
15
+ export declare class DefaultNpmClient implements NpmClient {
16
+ private logger;
17
+ private baseUrl;
18
+ constructor(logger: ILogLayer);
19
+ getPackageInfo(packageName: string): Promise<any>;
20
+ searchPackages(query: string): Promise<NpmPluginInfo[]>;
21
+ getPackageStats(packageName: string): Promise<any>;
22
+ validatePackage(packageName: string): Promise<boolean>;
23
+ private isRadioModule;
24
+ private transformToNpmPluginInfo;
25
+ private extractAuthor;
26
+ }
27
+ //# sourceMappingURL=npm-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-client.d.ts","sourceRoot":"","sources":["../../src/utils/npm-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,SAAS;IAExB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGlD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAGxD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAGnD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAsBD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAgC;gBAEnC,MAAM,EAAE,SAAS;IAIvB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBjD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgCvD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYlD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5D,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;CAStB"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Default implementation of NPM client using npm registry API
3
+ */
4
+ export class DefaultNpmClient {
5
+ logger;
6
+ baseUrl = 'https://registry.npmjs.org';
7
+ constructor(logger) {
8
+ this.logger = logger;
9
+ }
10
+ async getPackageInfo(packageName) {
11
+ try {
12
+ const response = await fetch(`${this.baseUrl}/${packageName}`);
13
+ if (!response.ok) {
14
+ if (response.status === 404) {
15
+ throw new Error(`Package not found: ${packageName}`);
16
+ }
17
+ throw new Error(`Failed to fetch package info: ${response.statusText}`);
18
+ }
19
+ const packageInfo = await response.json();
20
+ this.logger.withMetadata({ packageName }).info('Retrieved package info');
21
+ return packageInfo;
22
+ }
23
+ catch (error) {
24
+ this.logger.withError(error).error('Failed to get package info');
25
+ throw error;
26
+ }
27
+ }
28
+ async searchPackages(query) {
29
+ try {
30
+ const searchQuery = encodeURIComponent(query);
31
+ const response = await fetch(`${this.baseUrl}/-/v1/search?text=${searchQuery}&size=50`);
32
+ if (!response.ok) {
33
+ throw new Error(`Failed to search packages: ${response.statusText}`);
34
+ }
35
+ const searchResults = (await response.json());
36
+ const packages = searchResults.objects || [];
37
+ // Filter and transform results
38
+ const pluginPackages = [];
39
+ for (const pkg of packages) {
40
+ const packageInfo = pkg.package;
41
+ // Check if this is a radio module
42
+ if (this.isRadioModule(packageInfo)) {
43
+ pluginPackages.push(this.transformToNpmPluginInfo(packageInfo));
44
+ }
45
+ }
46
+ this.logger.withMetadata({ query, results: pluginPackages.length }).info('Searched packages');
47
+ return pluginPackages;
48
+ }
49
+ catch (error) {
50
+ this.logger.withError(error).error('Failed to search packages');
51
+ throw error;
52
+ }
53
+ }
54
+ async getPackageStats(packageName) {
55
+ try {
56
+ // Note: npm registry doesn't provide download stats via public API
57
+ // This would require npmjs.com API or alternative data source
58
+ this.logger.withMetadata({ packageName }).warn('Package stats not available via public npm registry API');
59
+ return { downloads: 0, lastUpdated: new Date().toISOString() };
60
+ }
61
+ catch (error) {
62
+ this.logger.withError(error).error('Failed to get package stats');
63
+ throw error;
64
+ }
65
+ }
66
+ async validatePackage(packageName) {
67
+ try {
68
+ await this.getPackageInfo(packageName);
69
+ return true;
70
+ }
71
+ catch (error) {
72
+ if (error instanceof Error && error.message.includes('not found')) {
73
+ return false;
74
+ }
75
+ throw error;
76
+ }
77
+ }
78
+ isRadioModule(packageInfo) {
79
+ const name = packageInfo.name || '';
80
+ // Check naming convention
81
+ const isNamedCorrectly = name.includes('radio-module') || name.startsWith('@springfield/radio-module-');
82
+ // Check springfield plugin field
83
+ const hasSpringfieldField = packageInfo.springfield?.pluginType === 'radio-module';
84
+ // Check keywords
85
+ const hasKeywords = packageInfo.keywords?.includes('radio-module');
86
+ return isNamedCorrectly || hasSpringfieldField || hasKeywords;
87
+ }
88
+ transformToNpmPluginInfo(packageInfo) {
89
+ return {
90
+ name: packageInfo.name,
91
+ version: packageInfo.version,
92
+ description: packageInfo.description || '',
93
+ author: this.extractAuthor(packageInfo.author),
94
+ license: packageInfo.license || 'Unknown',
95
+ repository: packageInfo.repository?.url || packageInfo.homepage,
96
+ downloads: 0, // Not available via public API
97
+ lastUpdated: packageInfo.date || new Date().toISOString(),
98
+ springfield: packageInfo.springfield,
99
+ };
100
+ }
101
+ extractAuthor(author) {
102
+ if (typeof author === 'string') {
103
+ return author;
104
+ }
105
+ if (typeof author === 'object' && author.name) {
106
+ return author.name;
107
+ }
108
+ return 'Unknown';
109
+ }
110
+ }
111
+ //# sourceMappingURL=npm-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-client.js","sourceRoot":"","sources":["../../src/utils/npm-client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@springfield/ham-radio-registry",
3
+ "version": "1.0.1",
4
+ "author": "Bryan Hunt",
5
+ "license": "MIT",
6
+ "packageManager": "yarn@4.9.2",
7
+ "readme": "README.md",
8
+ "main": "dist/index.js",
9
+ "type": "module",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "src/",
13
+ "dist/"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "commitlint": "commitlint --edit",
18
+ "lint": "oxlint",
19
+ "lint:fix": "oxlint --fix --fix-suggestions",
20
+ "release": "semantic-release",
21
+ "prepare": "husky",
22
+ "test": "yarn test:unit && yarn test:integration",
23
+ "test:unit": "tsx --test test/unit/**/*.test.ts",
24
+ "test:integration": "tsx --test test/integration/**/*.test.ts"
25
+ },
26
+ "release": {
27
+ "branches": [
28
+ "main",
29
+ {
30
+ "name": "beta",
31
+ "prerelease": true
32
+ }
33
+ ],
34
+ "plugins": [
35
+ [
36
+ "@semantic-release/commit-analyzer",
37
+ {
38
+ "preset": "conventionalcommits"
39
+ }
40
+ ],
41
+ [
42
+ "@semantic-release/release-notes-generator",
43
+ {
44
+ "preset": "conventionalcommits"
45
+ }
46
+ ],
47
+ "@semantic-release/changelog",
48
+ "semantic-release-yarn",
49
+ "@semantic-release/gitlab",
50
+ "@semantic-release/git"
51
+ ]
52
+ },
53
+ "publishConfig": {
54
+ "access": "public"
55
+ },
56
+ "devDependencies": {
57
+ "@commitlint/cli": "19.8.1",
58
+ "@commitlint/config-conventional": "19.8.1",
59
+ "@semantic-release/changelog": "6.0.3",
60
+ "@semantic-release/git": "10.0.1",
61
+ "@semantic-release/gitlab": "13.2.6",
62
+ "chai": "^5.2.0",
63
+ "husky": "9.1.7",
64
+ "oxlint": "1.3.0",
65
+ "semantic-release": "23.1.1",
66
+ "semantic-release-yarn": "3.0.2",
67
+ "typescript": "5.8.3"
68
+ },
69
+ "dependencies": {
70
+ "@springfield/ham-radio-api": "^16.1.1",
71
+ "loglayer": "^6.4.3"
72
+ }
73
+ }
package/src/index.ts ADDED
@@ -0,0 +1,37 @@
1
+ // Core types
2
+ export type {
3
+ RadioConfigMetadata,
4
+ RadioCapabilities,
5
+ CodecConfig,
6
+ } from './types/radio-config.js';
7
+
8
+ // Re-export common types from ham-radio-api
9
+ export type { ValidationResult } from '@springfield/ham-radio-api';
10
+
11
+ export type {
12
+ PluginModule,
13
+ PluginCapabilities,
14
+ SpringfieldPluginConfig,
15
+ NpmPluginInfo,
16
+ PluginManifest,
17
+ PluginManifestConfiguration,
18
+ PluginSharedComponents,
19
+ PluginSecurity,
20
+ } from './types/plugin-module.js';
21
+
22
+ // Registry components
23
+ import type { RadioConfigRegistry } from './registry/config-registry.js';
24
+ import { NpmBasedConfigRegistry } from './registry/config-registry.js';
25
+
26
+ // Shared components
27
+ export type { SharedComponentManager } from '@springfield/ham-radio-api';
28
+ export { DefaultSharedComponentManager } from './registry/shared-components.js';
29
+
30
+ // NPM client
31
+ export type { NpmClient } from './utils/npm-client.js';
32
+ export { DefaultNpmClient } from './utils/npm-client.js';
33
+
34
+ // Factory function for creating registry instances
35
+ export function createRegistry(logger: any): RadioConfigRegistry {
36
+ return new NpmBasedConfigRegistry(logger);
37
+ }