specchain-pro 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/CHANGELOG.md +68 -0
- package/CONTRIBUTING.md +397 -0
- package/DEPLOYMENT_OPTIONS.md +358 -0
- package/DEPLOY_WITHOUT_NPM.md +443 -0
- package/ENABLE_2FA.md +133 -0
- package/LICENSE +21 -0
- package/NPM_PUBLISH_STEPS.md +432 -0
- package/PUBLISH_COMMANDS.txt +61 -0
- package/QUICK_DEPLOY.md +206 -0
- package/README.md +264 -0
- package/YOUR_DEPLOYMENT_CHECKLIST.md +268 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +143 -0
- package/dist/core/config.js.map +1 -0
- package/dist/types/index.d.ts +142 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +46 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +79 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +69 -0
- package/scripts/deploy-github.ps1 +108 -0
- package/scripts/deploy-github.sh +96 -0
- package/scripts/deploy.ps1 +183 -0
- package/scripts/deploy.sh +159 -0
- package/setup-git.ps1 +30 -0
- package/setup-git.sh +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AppConfig } from '../types';
|
|
2
|
+
export declare class ConfigManager {
|
|
3
|
+
private config;
|
|
4
|
+
load(): Promise<AppConfig>;
|
|
5
|
+
save(config: AppConfig): Promise<void>;
|
|
6
|
+
createDefault(): Promise<void>;
|
|
7
|
+
get(): AppConfig;
|
|
8
|
+
update(updates: Partial<AppConfig>): Promise<void>;
|
|
9
|
+
private mergeWithDefaults;
|
|
10
|
+
private applyEnvironmentOverrides;
|
|
11
|
+
private validate;
|
|
12
|
+
}
|
|
13
|
+
export declare const configManager: ConfigManager;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,UAAU,CAAC;AAkChE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA0B;IAElC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IAmC1B,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,GAAG,IAAI,SAAS;IAaV,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,QAAQ;CAuCjB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configManager = exports.ConfigManager = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
12
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.specchain');
|
|
13
|
+
const CONFIG_FILE = path_1.default.join(CONFIG_DIR, 'config.json');
|
|
14
|
+
// Default configuration
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
ai: {
|
|
17
|
+
provider: 'openai',
|
|
18
|
+
model: 'gpt-4',
|
|
19
|
+
temperature: 0.7,
|
|
20
|
+
maxTokens: 2000,
|
|
21
|
+
localProvider: 'ollama',
|
|
22
|
+
localModel: 'llama-3.1-8b',
|
|
23
|
+
},
|
|
24
|
+
blockchain: {
|
|
25
|
+
network: 'testnet',
|
|
26
|
+
rpcUrl: 'https://sepolia.infura.io/v3/YOUR_INFURA_KEY',
|
|
27
|
+
contractAddress: '0x0000000000000000000000000000000000000000',
|
|
28
|
+
gasLimit: 500000,
|
|
29
|
+
keyManagement: 'keychain',
|
|
30
|
+
},
|
|
31
|
+
storage: {
|
|
32
|
+
basePath: path_1.default.join(os_1.default.homedir(), '.specchain'),
|
|
33
|
+
maxVersionHistory: 50,
|
|
34
|
+
},
|
|
35
|
+
user: {
|
|
36
|
+
name: '',
|
|
37
|
+
email: '',
|
|
38
|
+
defaultTags: [],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
class ConfigManager {
|
|
42
|
+
config = null;
|
|
43
|
+
async load() {
|
|
44
|
+
try {
|
|
45
|
+
// Check if config file exists
|
|
46
|
+
try {
|
|
47
|
+
await promises_1.default.access(CONFIG_FILE);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Config doesn't exist, create default
|
|
51
|
+
logger_1.default.info('Config file not found, creating default configuration');
|
|
52
|
+
await this.createDefault();
|
|
53
|
+
}
|
|
54
|
+
// Read config file
|
|
55
|
+
const configData = await promises_1.default.readFile(CONFIG_FILE, 'utf-8');
|
|
56
|
+
const loadedConfig = JSON.parse(configData);
|
|
57
|
+
// Merge with defaults (in case new fields were added)
|
|
58
|
+
this.config = this.mergeWithDefaults(loadedConfig);
|
|
59
|
+
// Override with environment variables
|
|
60
|
+
this.applyEnvironmentOverrides();
|
|
61
|
+
logger_1.default.info('Configuration loaded successfully');
|
|
62
|
+
return this.config;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger_1.default.error('Failed to load configuration', { error });
|
|
66
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_INVALID, 'Failed to load configuration file', error, true, 'Check if the config file is valid JSON');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async save(config) {
|
|
70
|
+
try {
|
|
71
|
+
// Validate config before saving
|
|
72
|
+
this.validate(config);
|
|
73
|
+
// Ensure config directory exists
|
|
74
|
+
await promises_1.default.mkdir(CONFIG_DIR, { recursive: true });
|
|
75
|
+
// Write config file
|
|
76
|
+
await promises_1.default.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
77
|
+
this.config = config;
|
|
78
|
+
logger_1.default.info('Configuration saved successfully');
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger_1.default.error('Failed to save configuration', { error });
|
|
82
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_INVALID, 'Failed to save configuration file', error, true, 'Check file permissions and disk space');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async createDefault() {
|
|
86
|
+
await this.save(DEFAULT_CONFIG);
|
|
87
|
+
}
|
|
88
|
+
get() {
|
|
89
|
+
if (!this.config) {
|
|
90
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_MISSING, 'Configuration not loaded', null, true, 'Call load() before accessing configuration');
|
|
91
|
+
}
|
|
92
|
+
return this.config;
|
|
93
|
+
}
|
|
94
|
+
async update(updates) {
|
|
95
|
+
const current = this.get();
|
|
96
|
+
const updated = { ...current, ...updates };
|
|
97
|
+
await this.save(updated);
|
|
98
|
+
}
|
|
99
|
+
mergeWithDefaults(loaded) {
|
|
100
|
+
return {
|
|
101
|
+
ai: { ...DEFAULT_CONFIG.ai, ...loaded.ai },
|
|
102
|
+
blockchain: { ...DEFAULT_CONFIG.blockchain, ...loaded.blockchain },
|
|
103
|
+
storage: { ...DEFAULT_CONFIG.storage, ...loaded.storage },
|
|
104
|
+
user: { ...DEFAULT_CONFIG.user, ...loaded.user },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
applyEnvironmentOverrides() {
|
|
108
|
+
if (!this.config)
|
|
109
|
+
return;
|
|
110
|
+
// AI overrides
|
|
111
|
+
if (process.env.OPENAI_API_KEY) {
|
|
112
|
+
this.config.ai.apiKey = process.env.OPENAI_API_KEY;
|
|
113
|
+
}
|
|
114
|
+
// Blockchain overrides
|
|
115
|
+
if (process.env.BLOCKCHAIN_RPC_URL) {
|
|
116
|
+
this.config.blockchain.rpcUrl = process.env.BLOCKCHAIN_RPC_URL;
|
|
117
|
+
}
|
|
118
|
+
if (process.env.CONTRACT_ADDRESS) {
|
|
119
|
+
this.config.blockchain.contractAddress = process.env.CONTRACT_ADDRESS;
|
|
120
|
+
}
|
|
121
|
+
logger_1.default.debug('Applied environment variable overrides');
|
|
122
|
+
}
|
|
123
|
+
validate(config) {
|
|
124
|
+
// Validate AI config
|
|
125
|
+
if (!config.ai.provider || !['openai', 'local'].includes(config.ai.provider)) {
|
|
126
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_INVALID, 'Invalid AI provider', { provider: config.ai.provider }, false, 'AI provider must be "openai" or "local"');
|
|
127
|
+
}
|
|
128
|
+
// Validate blockchain config
|
|
129
|
+
if (!config.blockchain.network ||
|
|
130
|
+
!['testnet', 'mainnet', 'layer2'].includes(config.blockchain.network)) {
|
|
131
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_INVALID, 'Invalid blockchain network', { network: config.blockchain.network }, false, 'Network must be "testnet", "mainnet", or "layer2"');
|
|
132
|
+
}
|
|
133
|
+
// Validate storage config
|
|
134
|
+
if (!config.storage.basePath) {
|
|
135
|
+
throw new types_1.SpecChainError(types_1.ErrorCode.CONFIG_INVALID, 'Storage base path is required', null, false, 'Provide a valid storage path');
|
|
136
|
+
}
|
|
137
|
+
logger_1.default.debug('Configuration validation passed');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.ConfigManager = ConfigManager;
|
|
141
|
+
// Singleton instance
|
|
142
|
+
exports.configManager = new ConfigManager();
|
|
143
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
export interface SpecDocument {
|
|
2
|
+
metadata: SpecMetadata;
|
|
3
|
+
content: SpecContent;
|
|
4
|
+
proof?: BlockchainProof;
|
|
5
|
+
lineage?: SpecLineage;
|
|
6
|
+
}
|
|
7
|
+
export interface SpecMetadata {
|
|
8
|
+
id: string;
|
|
9
|
+
author: string;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
modifiedAt: Date;
|
|
12
|
+
version: string;
|
|
13
|
+
parentSpec?: string;
|
|
14
|
+
tags: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface SpecContent {
|
|
17
|
+
title: string;
|
|
18
|
+
overview: string;
|
|
19
|
+
requirements: Requirement[];
|
|
20
|
+
architecture: string;
|
|
21
|
+
implementation: string;
|
|
22
|
+
tags: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface Requirement {
|
|
25
|
+
id: string;
|
|
26
|
+
title: string;
|
|
27
|
+
description: string;
|
|
28
|
+
priority: 'High' | 'Medium' | 'Low';
|
|
29
|
+
acceptanceCriteria: string[];
|
|
30
|
+
userStory?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface BlockchainProof {
|
|
33
|
+
transactionId: string;
|
|
34
|
+
blockHash: string;
|
|
35
|
+
specHash: string;
|
|
36
|
+
timestamp: Date;
|
|
37
|
+
networkId: string;
|
|
38
|
+
layer2Network?: string;
|
|
39
|
+
gasUsed?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface SpecLineage {
|
|
42
|
+
parentSpecId?: string;
|
|
43
|
+
parentProofId?: string;
|
|
44
|
+
modifications: SpecDiff[];
|
|
45
|
+
remixReason: string;
|
|
46
|
+
originalAuthor: string;
|
|
47
|
+
}
|
|
48
|
+
export interface SpecDiff {
|
|
49
|
+
section: string;
|
|
50
|
+
operation: 'add' | 'remove' | 'modify';
|
|
51
|
+
before?: string;
|
|
52
|
+
after?: string;
|
|
53
|
+
timestamp: Date;
|
|
54
|
+
}
|
|
55
|
+
export interface ProofResult {
|
|
56
|
+
transactionId: string;
|
|
57
|
+
blockHash: string;
|
|
58
|
+
timestamp: Date;
|
|
59
|
+
specHash: string;
|
|
60
|
+
networkId: string;
|
|
61
|
+
}
|
|
62
|
+
export interface VerificationResult {
|
|
63
|
+
isValid: boolean;
|
|
64
|
+
originalAuthor: string;
|
|
65
|
+
creationTimestamp: Date;
|
|
66
|
+
blockchainRecord?: ProofRecord;
|
|
67
|
+
message: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ProofRecord {
|
|
70
|
+
specHash: string;
|
|
71
|
+
author: string;
|
|
72
|
+
timestamp: Date;
|
|
73
|
+
transactionId: string;
|
|
74
|
+
blockNumber: number;
|
|
75
|
+
}
|
|
76
|
+
export interface AppConfig {
|
|
77
|
+
ai: AIConfig;
|
|
78
|
+
blockchain: BlockchainConfig;
|
|
79
|
+
storage: StorageConfig;
|
|
80
|
+
user: UserConfig;
|
|
81
|
+
}
|
|
82
|
+
export interface AIConfig {
|
|
83
|
+
provider: 'openai' | 'local';
|
|
84
|
+
apiKey?: string;
|
|
85
|
+
model: string;
|
|
86
|
+
temperature: number;
|
|
87
|
+
maxTokens: number;
|
|
88
|
+
localProvider?: 'ollama' | 'lmstudio';
|
|
89
|
+
localModel?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface BlockchainConfig {
|
|
92
|
+
network: 'testnet' | 'mainnet' | 'layer2';
|
|
93
|
+
layer2Provider?: 'base' | 'polygon' | 'arbitrum' | 'optimism';
|
|
94
|
+
rpcUrl: string;
|
|
95
|
+
contractAddress: string;
|
|
96
|
+
gasLimit: number;
|
|
97
|
+
keyManagement: 'keychain' | 'env';
|
|
98
|
+
}
|
|
99
|
+
export interface StorageConfig {
|
|
100
|
+
basePath: string;
|
|
101
|
+
maxVersionHistory: number;
|
|
102
|
+
}
|
|
103
|
+
export interface UserConfig {
|
|
104
|
+
name: string;
|
|
105
|
+
email: string;
|
|
106
|
+
defaultTags: string[];
|
|
107
|
+
}
|
|
108
|
+
export interface SpecSummary {
|
|
109
|
+
id: string;
|
|
110
|
+
title: string;
|
|
111
|
+
author: string;
|
|
112
|
+
createdAt: Date;
|
|
113
|
+
tags: string[];
|
|
114
|
+
verified: boolean;
|
|
115
|
+
}
|
|
116
|
+
export declare enum ErrorCode {
|
|
117
|
+
AI_GENERATION_FAILED = "AI_001",
|
|
118
|
+
AI_INVALID_INPUT = "AI_002",
|
|
119
|
+
AI_RATE_LIMIT = "AI_003",
|
|
120
|
+
BLOCKCHAIN_NETWORK_ERROR = "BC_001",
|
|
121
|
+
BLOCKCHAIN_TRANSACTION_FAILED = "BC_002",
|
|
122
|
+
BLOCKCHAIN_INSUFFICIENT_FUNDS = "BC_003",
|
|
123
|
+
BLOCKCHAIN_VERIFICATION_FAILED = "BC_004",
|
|
124
|
+
STORAGE_WRITE_FAILED = "ST_001",
|
|
125
|
+
STORAGE_READ_FAILED = "ST_002",
|
|
126
|
+
STORAGE_PERMISSION_DENIED = "ST_003",
|
|
127
|
+
STORAGE_DISK_FULL = "ST_004",
|
|
128
|
+
EXPORT_FORMAT_INVALID = "EX_001",
|
|
129
|
+
EXPORT_CONVERSION_FAILED = "EX_002",
|
|
130
|
+
CONFIG_INVALID = "CF_001",
|
|
131
|
+
CONFIG_MISSING = "CF_002",
|
|
132
|
+
NETWORK_TIMEOUT = "NT_001",
|
|
133
|
+
NETWORK_UNAVAILABLE = "NT_002"
|
|
134
|
+
}
|
|
135
|
+
export declare class SpecChainError extends Error {
|
|
136
|
+
code: ErrorCode;
|
|
137
|
+
details?: any | undefined;
|
|
138
|
+
recoverable: boolean;
|
|
139
|
+
suggestedAction?: string | undefined;
|
|
140
|
+
constructor(code: ErrorCode, message: string, details?: any | undefined, recoverable?: boolean, suggestedAction?: string | undefined);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Core data types for SpecChain Pro
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SpecChainError = exports.ErrorCode = void 0;
|
|
5
|
+
var ErrorCode;
|
|
6
|
+
(function (ErrorCode) {
|
|
7
|
+
// AI Errors
|
|
8
|
+
ErrorCode["AI_GENERATION_FAILED"] = "AI_001";
|
|
9
|
+
ErrorCode["AI_INVALID_INPUT"] = "AI_002";
|
|
10
|
+
ErrorCode["AI_RATE_LIMIT"] = "AI_003";
|
|
11
|
+
// Blockchain Errors
|
|
12
|
+
ErrorCode["BLOCKCHAIN_NETWORK_ERROR"] = "BC_001";
|
|
13
|
+
ErrorCode["BLOCKCHAIN_TRANSACTION_FAILED"] = "BC_002";
|
|
14
|
+
ErrorCode["BLOCKCHAIN_INSUFFICIENT_FUNDS"] = "BC_003";
|
|
15
|
+
ErrorCode["BLOCKCHAIN_VERIFICATION_FAILED"] = "BC_004";
|
|
16
|
+
// Storage Errors
|
|
17
|
+
ErrorCode["STORAGE_WRITE_FAILED"] = "ST_001";
|
|
18
|
+
ErrorCode["STORAGE_READ_FAILED"] = "ST_002";
|
|
19
|
+
ErrorCode["STORAGE_PERMISSION_DENIED"] = "ST_003";
|
|
20
|
+
ErrorCode["STORAGE_DISK_FULL"] = "ST_004";
|
|
21
|
+
// Export Errors
|
|
22
|
+
ErrorCode["EXPORT_FORMAT_INVALID"] = "EX_001";
|
|
23
|
+
ErrorCode["EXPORT_CONVERSION_FAILED"] = "EX_002";
|
|
24
|
+
// Configuration Errors
|
|
25
|
+
ErrorCode["CONFIG_INVALID"] = "CF_001";
|
|
26
|
+
ErrorCode["CONFIG_MISSING"] = "CF_002";
|
|
27
|
+
// Network Errors
|
|
28
|
+
ErrorCode["NETWORK_TIMEOUT"] = "NT_001";
|
|
29
|
+
ErrorCode["NETWORK_UNAVAILABLE"] = "NT_002";
|
|
30
|
+
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
31
|
+
class SpecChainError extends Error {
|
|
32
|
+
code;
|
|
33
|
+
details;
|
|
34
|
+
recoverable;
|
|
35
|
+
suggestedAction;
|
|
36
|
+
constructor(code, message, details, recoverable = true, suggestedAction) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.code = code;
|
|
39
|
+
this.details = details;
|
|
40
|
+
this.recoverable = recoverable;
|
|
41
|
+
this.suggestedAction = suggestedAction;
|
|
42
|
+
this.name = 'SpecChainError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.SpecChainError = SpecChainError;
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAqIpC,IAAY,SA6BX;AA7BD,WAAY,SAAS;IACnB,YAAY;IACZ,4CAA+B,CAAA;IAC/B,wCAA2B,CAAA;IAC3B,qCAAwB,CAAA;IAExB,oBAAoB;IACpB,gDAAmC,CAAA;IACnC,qDAAwC,CAAA;IACxC,qDAAwC,CAAA;IACxC,sDAAyC,CAAA;IAEzC,iBAAiB;IACjB,4CAA+B,CAAA;IAC/B,2CAA8B,CAAA;IAC9B,iDAAoC,CAAA;IACpC,yCAA4B,CAAA;IAE5B,gBAAgB;IAChB,6CAAgC,CAAA;IAChC,gDAAmC,CAAA;IAEnC,uBAAuB;IACvB,sCAAyB,CAAA;IACzB,sCAAyB,CAAA;IAEzB,iBAAiB;IACjB,uCAA0B,CAAA;IAC1B,2CAA8B,CAAA;AAChC,CAAC,EA7BW,SAAS,yBAAT,SAAS,QA6BpB;AAED,MAAa,cAAe,SAAQ,KAAK;IAE9B;IAEA;IACA;IACA;IALT,YACS,IAAe,EACtB,OAAe,EACR,OAAa,EACb,cAAuB,IAAI,EAC3B,eAAwB;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QANR,SAAI,GAAJ,IAAI,CAAW;QAEf,YAAO,GAAP,OAAO,CAAM;QACb,gBAAW,GAAX,WAAW,CAAgB;QAC3B,oBAAe,GAAf,eAAe,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAXD,wCAWC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function createCorrelationId(): string;
|
|
2
|
+
export declare const log: {
|
|
3
|
+
error: (message: string, meta?: any, correlationId?: string) => void;
|
|
4
|
+
warn: (message: string, meta?: any, correlationId?: string) => void;
|
|
5
|
+
info: (message: string, meta?: any, correlationId?: string) => void;
|
|
6
|
+
debug: (message: string, meta?: any, correlationId?: string) => void;
|
|
7
|
+
};
|
|
8
|
+
export default log;
|
|
9
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAkDA,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAGD,eAAO,MAAM,GAAG;qBACG,MAAM,SAAS,GAAG,kBAAkB,MAAM;oBAO3C,MAAM,SAAS,GAAG,kBAAkB,MAAM;oBAO1C,MAAM,SAAS,GAAG,kBAAkB,MAAM;qBAOzC,MAAM,SAAS,GAAG,kBAAkB,MAAM;CAM5D,CAAC;AAEF,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.log = void 0;
|
|
7
|
+
exports.createCorrelationId = createCorrelationId;
|
|
8
|
+
const winston_1 = __importDefault(require("winston"));
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
+
// Sensitive data patterns to redact
|
|
11
|
+
const SENSITIVE_PATTERNS = [
|
|
12
|
+
/private[_-]?key/gi,
|
|
13
|
+
/api[_-]?key/gi,
|
|
14
|
+
/secret/gi,
|
|
15
|
+
/password/gi,
|
|
16
|
+
/0x[a-fA-F0-9]{64}/g, // Private keys
|
|
17
|
+
];
|
|
18
|
+
// Redact sensitive data from logs
|
|
19
|
+
function redactSensitiveData(data) {
|
|
20
|
+
if (typeof data === 'string') {
|
|
21
|
+
let redacted = data;
|
|
22
|
+
SENSITIVE_PATTERNS.forEach((pattern) => {
|
|
23
|
+
redacted = redacted.replace(pattern, '[REDACTED]');
|
|
24
|
+
});
|
|
25
|
+
return redacted;
|
|
26
|
+
}
|
|
27
|
+
if (typeof data === 'object' && data !== null) {
|
|
28
|
+
const redacted = Array.isArray(data) ? [] : {};
|
|
29
|
+
for (const key in data) {
|
|
30
|
+
redacted[key] = redactSensitiveData(data[key]);
|
|
31
|
+
}
|
|
32
|
+
return redacted;
|
|
33
|
+
}
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
// Create logger instance
|
|
37
|
+
const logger = winston_1.default.createLogger({
|
|
38
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
39
|
+
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()),
|
|
40
|
+
defaultMeta: { service: 'specchain-pro' },
|
|
41
|
+
transports: [
|
|
42
|
+
new winston_1.default.transports.Console({
|
|
43
|
+
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple()),
|
|
44
|
+
}),
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
// Add correlation ID to logs
|
|
48
|
+
function createCorrelationId() {
|
|
49
|
+
return crypto_1.default.randomBytes(16).toString('hex');
|
|
50
|
+
}
|
|
51
|
+
// Wrapper functions with redaction
|
|
52
|
+
exports.log = {
|
|
53
|
+
error: (message, meta, correlationId) => {
|
|
54
|
+
logger.error(message, {
|
|
55
|
+
...redactSensitiveData(meta),
|
|
56
|
+
correlationId,
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
warn: (message, meta, correlationId) => {
|
|
60
|
+
logger.warn(message, {
|
|
61
|
+
...redactSensitiveData(meta),
|
|
62
|
+
correlationId,
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
info: (message, meta, correlationId) => {
|
|
66
|
+
logger.info(message, {
|
|
67
|
+
...redactSensitiveData(meta),
|
|
68
|
+
correlationId,
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
debug: (message, meta, correlationId) => {
|
|
72
|
+
logger.debug(message, {
|
|
73
|
+
...redactSensitiveData(meta),
|
|
74
|
+
correlationId,
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
exports.default = exports.log;
|
|
79
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "specchain-pro",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI-powered specification generation with blockchain proof-of-authorship",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"spec": "dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "ts-node src/cli/index.ts",
|
|
12
|
+
"test": "jest",
|
|
13
|
+
"test:watch": "jest --watch",
|
|
14
|
+
"lint": "eslint src --ext .ts",
|
|
15
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
16
|
+
"prepare": "npm run build",
|
|
17
|
+
"prepublishOnly": "npm run lint && npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"specification",
|
|
21
|
+
"blockchain",
|
|
22
|
+
"ai",
|
|
23
|
+
"proof-of-authorship",
|
|
24
|
+
"cli",
|
|
25
|
+
"ethereum",
|
|
26
|
+
"layer2",
|
|
27
|
+
"gpt-4",
|
|
28
|
+
"smart-contracts",
|
|
29
|
+
"documentation",
|
|
30
|
+
"developer-tools"
|
|
31
|
+
],
|
|
32
|
+
"author": "Luxmikant <luxmikant@outlook.com>",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/luxmikant/specchain-pro.git"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/luxmikant/specchain-pro/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/luxmikant/specchain-pro#readme",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"commander": "^11.1.0",
|
|
44
|
+
"ethers": "^6.10.0",
|
|
45
|
+
"openai": "^4.24.1",
|
|
46
|
+
"keytar": "^7.9.0",
|
|
47
|
+
"chalk": "^4.1.2",
|
|
48
|
+
"inquirer": "^8.2.6",
|
|
49
|
+
"ora": "^5.4.1",
|
|
50
|
+
"winston": "^3.11.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^20.10.6",
|
|
54
|
+
"@types/inquirer": "^8.2.10",
|
|
55
|
+
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
|
56
|
+
"@typescript-eslint/parser": "^6.17.0",
|
|
57
|
+
"eslint": "^8.56.0",
|
|
58
|
+
"jest": "^29.7.0",
|
|
59
|
+
"ts-jest": "^29.1.1",
|
|
60
|
+
"ts-node": "^10.9.2",
|
|
61
|
+
"typescript": "^5.3.3",
|
|
62
|
+
"prettier": "^3.1.1",
|
|
63
|
+
"fast-check": "^3.15.0",
|
|
64
|
+
"@types/jest": "^29.5.11"
|
|
65
|
+
},
|
|
66
|
+
"engines": {
|
|
67
|
+
"node": ">=18.0.0"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# SpecChain Pro - GitHub Only Deployment Script (PowerShell)
|
|
2
|
+
# Deploy to GitHub without npm publishing
|
|
3
|
+
|
|
4
|
+
$ErrorActionPreference = "Stop"
|
|
5
|
+
|
|
6
|
+
Write-Host "🚀 SpecChain Pro - GitHub Deployment" -ForegroundColor Cyan
|
|
7
|
+
Write-Host "=====================================" -ForegroundColor Cyan
|
|
8
|
+
Write-Host ""
|
|
9
|
+
|
|
10
|
+
function Print-Success {
|
|
11
|
+
param($Message)
|
|
12
|
+
Write-Host "✓ $Message" -ForegroundColor Green
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function Print-Info {
|
|
16
|
+
param($Message)
|
|
17
|
+
Write-Host "ℹ $Message" -ForegroundColor Blue
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function Print-Warning {
|
|
21
|
+
param($Message)
|
|
22
|
+
Write-Host "âš $Message" -ForegroundColor Yellow
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# 1. Build project
|
|
26
|
+
Print-Info "Building project..."
|
|
27
|
+
npm run build
|
|
28
|
+
if ($LASTEXITCODE -ne 0) {
|
|
29
|
+
Write-Host "Build failed" -ForegroundColor Red
|
|
30
|
+
exit 1
|
|
31
|
+
}
|
|
32
|
+
Print-Success "Build successful"
|
|
33
|
+
|
|
34
|
+
# 2. Run tests
|
|
35
|
+
Print-Info "Running tests..."
|
|
36
|
+
npm test
|
|
37
|
+
if ($LASTEXITCODE -ne 0) {
|
|
38
|
+
Print-Warning "Tests not fully implemented yet"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# 3. Get current version
|
|
42
|
+
$packageJson = Get-Content "package.json" | ConvertFrom-Json
|
|
43
|
+
$currentVersion = $packageJson.version
|
|
44
|
+
Print-Info "Current version: $currentVersion"
|
|
45
|
+
|
|
46
|
+
# 4. Ask for version bump
|
|
47
|
+
Write-Host ""
|
|
48
|
+
Write-Host "Select version bump:"
|
|
49
|
+
Write-Host "1) Patch (bug fixes)"
|
|
50
|
+
Write-Host "2) Minor (new features)"
|
|
51
|
+
Write-Host "3) Major (breaking changes)"
|
|
52
|
+
Write-Host "4) Skip version bump"
|
|
53
|
+
$versionChoice = Read-Host "Enter choice (1-4)"
|
|
54
|
+
|
|
55
|
+
switch ($versionChoice) {
|
|
56
|
+
"1" {
|
|
57
|
+
npm version patch -m "Release v%s"
|
|
58
|
+
}
|
|
59
|
+
"2" {
|
|
60
|
+
npm version minor -m "Release v%s"
|
|
61
|
+
}
|
|
62
|
+
"3" {
|
|
63
|
+
npm version major -m "Release v%s"
|
|
64
|
+
}
|
|
65
|
+
"4" {
|
|
66
|
+
Print-Warning "Skipping version bump"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
$packageJson = Get-Content "package.json" | ConvertFrom-Json
|
|
71
|
+
$newVersion = $packageJson.version
|
|
72
|
+
Print-Success "Version: $newVersion"
|
|
73
|
+
|
|
74
|
+
# 5. Commit and push
|
|
75
|
+
Print-Info "Pushing to GitHub..."
|
|
76
|
+
git push
|
|
77
|
+
if ($LASTEXITCODE -ne 0) {
|
|
78
|
+
Write-Host "Git push failed" -ForegroundColor Red
|
|
79
|
+
exit 1
|
|
80
|
+
}
|
|
81
|
+
Print-Success "Pushed to main branch"
|
|
82
|
+
|
|
83
|
+
# 6. Create and push tag
|
|
84
|
+
Print-Info "Creating tag v$newVersion..."
|
|
85
|
+
git push --tags
|
|
86
|
+
if ($LASTEXITCODE -ne 0) {
|
|
87
|
+
Write-Host "Tag push failed" -ForegroundColor Red
|
|
88
|
+
exit 1
|
|
89
|
+
}
|
|
90
|
+
Print-Success "Tag pushed"
|
|
91
|
+
|
|
92
|
+
# 7. Success
|
|
93
|
+
Write-Host ""
|
|
94
|
+
Write-Host "======================================" -ForegroundColor Green
|
|
95
|
+
Print-Success "Deployment completed!"
|
|
96
|
+
Write-Host "======================================" -ForegroundColor Green
|
|
97
|
+
Write-Host ""
|
|
98
|
+
Print-Info "Version $newVersion is now on GitHub"
|
|
99
|
+
Write-Host ""
|
|
100
|
+
Write-Host "Users can install with:"
|
|
101
|
+
Write-Host " npm install -g github:yourusername/specchain-pro"
|
|
102
|
+
Write-Host ""
|
|
103
|
+
Write-Host "Next steps:"
|
|
104
|
+
Write-Host " 1. Create GitHub release: https://github.com/yourusername/specchain-pro/releases/new"
|
|
105
|
+
Write-Host " 2. Select tag: v$newVersion"
|
|
106
|
+
Write-Host " 3. Add release notes from CHANGELOG.md"
|
|
107
|
+
Write-Host ""
|
|
108
|
+
Print-Success "Done! 🎉"
|