@pixelated-tech/components 3.7.6 → 3.7.8
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/dist/components/config/config.js +37 -4
- package/dist/components/config/config.server.js +1 -0
- package/dist/components/config/crypto.js +62 -0
- package/dist/components/utilities/functions.js +1 -0
- package/dist/index.js +0 -2
- package/dist/index.server.js +1 -0
- package/dist/scripts/config-vault.js +53 -0
- package/dist/scripts/config-vault.ts +57 -0
- package/dist/scripts/release.sh +44 -1
- package/dist/types/components/config/config.d.ts +1 -1
- package/dist/types/components/config/config.d.ts.map +1 -1
- package/dist/types/components/config/config.server.d.ts.map +1 -1
- package/dist/types/components/config/crypto.d.ts +15 -0
- package/dist/types/components/config/crypto.d.ts.map +1 -0
- package/dist/types/components/utilities/functions.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.server.d.ts +1 -0
- package/dist/types/scripts/config-vault.d.ts +3 -0
- package/dist/types/scripts/config-vault.d.ts.map +1 -0
- package/package.json +3 -2
|
@@ -1,15 +1,48 @@
|
|
|
1
|
+
import { decrypt, isEncrypted } from './crypto';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
1
4
|
const debug = false;
|
|
2
5
|
/**
|
|
3
|
-
* Read the full master config blob from environment.
|
|
6
|
+
* Read the full master config blob from environment or local file.
|
|
4
7
|
* This function is intended for server-side use only.
|
|
5
8
|
*/
|
|
6
9
|
export function getFullPixelatedConfig() {
|
|
7
|
-
|
|
10
|
+
let raw = process.env.PIXELATED_CONFIG_JSON || (process.env.PIXELATED_CONFIG_B64 && Buffer.from(process.env.PIXELATED_CONFIG_B64, 'base64').toString('utf8'));
|
|
11
|
+
let source = process.env.PIXELATED_CONFIG_JSON ? 'PIXELATED_CONFIG_JSON' : (process.env.PIXELATED_CONFIG_B64 ? 'PIXELATED_CONFIG_B64' : 'none');
|
|
12
|
+
// If not in environment, try reading from the conventional file location
|
|
8
13
|
if (!raw) {
|
|
9
|
-
|
|
14
|
+
const configPath = path.join(process.cwd(), 'src/app/config/pixelated.config.json');
|
|
15
|
+
if (fs.existsSync(configPath)) {
|
|
16
|
+
try {
|
|
17
|
+
raw = fs.readFileSync(configPath, 'utf8');
|
|
18
|
+
source = 'src/app/config/pixelated.config.json';
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
console.error(`Failed to read config file at ${configPath}`, err);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!raw) {
|
|
26
|
+
console.error('PIXELATED_CONFIG not found: neither environment variables nor src/app/config/pixelated.config.json are available.');
|
|
10
27
|
return {};
|
|
11
28
|
}
|
|
12
|
-
|
|
29
|
+
// Handle decryption if the content is encrypted
|
|
30
|
+
if (isEncrypted(raw)) {
|
|
31
|
+
const key = process.env.PIXELATED_CONFIG_KEY;
|
|
32
|
+
if (!key) {
|
|
33
|
+
console.error('PIXELATED_CONFIG is encrypted but PIXELATED_CONFIG_KEY is not set in the environment.');
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
raw = decrypt(raw, key);
|
|
38
|
+
if (debug)
|
|
39
|
+
console.log(`PIXELATED_CONFIG decrypted using key from environment.`);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
console.error('Failed to decrypt PIXELATED_CONFIG', err);
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
13
46
|
try {
|
|
14
47
|
const parsed = JSON.parse(raw);
|
|
15
48
|
if (debug)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
/**
|
|
3
|
+
* AES-256-GCM encryption/decryption utility.
|
|
4
|
+
* Requires a 32-byte key (64 hex characters).
|
|
5
|
+
*/
|
|
6
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
7
|
+
const IV_LENGTH = 12; // GCM recommended IV length
|
|
8
|
+
const AUTH_TAG_LENGTH = 16;
|
|
9
|
+
const ENCRYPTED_PREFIX = 'pxl:v1:';
|
|
10
|
+
/**
|
|
11
|
+
* Encrypts a string using a hex-encoded 32-byte key.
|
|
12
|
+
* Returns a prefixed string: pxl:v1:iv:authTag:encryptedContent (all hex).
|
|
13
|
+
*/
|
|
14
|
+
export function encrypt(text, keyHex) {
|
|
15
|
+
if (!keyHex)
|
|
16
|
+
throw new Error('Encryption key is required.');
|
|
17
|
+
const key = Buffer.from(keyHex, 'hex');
|
|
18
|
+
if (key.length !== 32) {
|
|
19
|
+
throw new Error('Encryption key must be 32 bytes (64 hex characters).');
|
|
20
|
+
}
|
|
21
|
+
const iv = crypto.randomBytes(IV_LENGTH);
|
|
22
|
+
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
|
|
23
|
+
let encrypted = cipher.update(text, 'utf8', 'hex');
|
|
24
|
+
encrypted += cipher.final('hex');
|
|
25
|
+
const authTag = cipher.getAuthTag().toString('hex');
|
|
26
|
+
return `${ENCRYPTED_PREFIX}${iv.toString('hex')}:${authTag}:${encrypted}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decrypts a string using a hex-encoded 32-byte key.
|
|
30
|
+
* Expects format: pxl:v1:iv:authTag:encryptedContent
|
|
31
|
+
*/
|
|
32
|
+
export function decrypt(payload, keyHex) {
|
|
33
|
+
if (!keyHex)
|
|
34
|
+
throw new Error('Decryption key is required.');
|
|
35
|
+
if (!payload.startsWith(ENCRYPTED_PREFIX)) {
|
|
36
|
+
throw new Error('Payload is not in a recognized encrypted format.');
|
|
37
|
+
}
|
|
38
|
+
const data = payload.slice(ENCRYPTED_PREFIX.length);
|
|
39
|
+
const key = Buffer.from(keyHex, 'hex');
|
|
40
|
+
if (key.length !== 32) {
|
|
41
|
+
throw new Error('Decryption key must be 32 bytes (64 hex characters).');
|
|
42
|
+
}
|
|
43
|
+
const parts = data.split(':');
|
|
44
|
+
if (parts.length !== 3) {
|
|
45
|
+
throw new Error('Invalid encrypted data format. Expected iv:authTag:encryptedContent');
|
|
46
|
+
}
|
|
47
|
+
const [ivHex, authTagHex, encryptedHex] = parts;
|
|
48
|
+
const iv = Buffer.from(ivHex, 'hex');
|
|
49
|
+
const authTag = Buffer.from(authTagHex, 'hex');
|
|
50
|
+
const encryptedText = Buffer.from(encryptedHex, 'hex');
|
|
51
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
|
|
52
|
+
decipher.setAuthTag(authTag);
|
|
53
|
+
let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
|
|
54
|
+
decrypted += decipher.final('utf8');
|
|
55
|
+
return decrypted;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Checks if a string is encrypted using our format.
|
|
59
|
+
*/
|
|
60
|
+
export function isEncrypted(text) {
|
|
61
|
+
return typeof text === 'string' && text.startsWith(ENCRYPTED_PREFIX);
|
|
62
|
+
}
|
|
@@ -200,6 +200,7 @@ export const SERVER_ONLY_PATTERNS = [
|
|
|
200
200
|
/\bfs\b/,
|
|
201
201
|
/\bfs\.readFileSync\b/,
|
|
202
202
|
/\bfs\.existsSync\b/,
|
|
203
|
+
/\bcrypto\b/,
|
|
203
204
|
/\bimport.*googleapis\b|\brequire.*googleapis\b/, // Actual import of googleapis
|
|
204
205
|
/\bimport.*next\/server\b|\brequire.*next\/server\b/, // Actual import of next/server
|
|
205
206
|
/\bimport.*path\b|\brequire.*path\b/, // Actual import of path module
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
// sorted alphabetically and grouped by folder for easier reading
|
|
2
|
-
export * from './components/config/config';
|
|
3
2
|
export * from './components/config/config.client';
|
|
4
|
-
export * from './components/config/config.server';
|
|
5
3
|
export * from './components/config/config.types';
|
|
6
4
|
export * from './components/general/404';
|
|
7
5
|
export * from './components/general/accordion';
|
package/dist/index.server.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from './components/admin/sites/sites.integration';
|
|
|
8
8
|
export * from './components/config/config';
|
|
9
9
|
export * from './components/config/config.server';
|
|
10
10
|
export * from './components/config/config.types';
|
|
11
|
+
export * from './components/config/crypto';
|
|
11
12
|
// SEO
|
|
12
13
|
export * from './components/general/contentful.delivery';
|
|
13
14
|
export * from './components/general/contentful.management';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { encrypt, decrypt, isEncrypted } from '../components/config/crypto';
|
|
5
|
+
/**
|
|
6
|
+
* CLI Tool for encrypting/decrypting pixelated.config.json
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx tsx src/scripts/config-vault.js encrypt <filePath> <key>
|
|
9
|
+
* npx tsx src/scripts/config-vault.js decrypt <filePath> <key>
|
|
10
|
+
*/
|
|
11
|
+
const [, , command, targetPath, argKey] = process.argv;
|
|
12
|
+
const key = argKey || process.env.PIXELATED_CONFIG_KEY;
|
|
13
|
+
if (!command || !targetPath || !key) {
|
|
14
|
+
console.log('Usage:');
|
|
15
|
+
console.log(' encrypt <filePath> [key] - Encrypts the file in place');
|
|
16
|
+
console.log(' decrypt <filePath> [key] - Decrypts the file in place');
|
|
17
|
+
console.log('\nNote: Key can be passed as argument or via PIXELATED_CONFIG_KEY env var.');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const fullPath = path.isAbsolute(targetPath) ? targetPath : path.resolve(process.cwd(), targetPath);
|
|
21
|
+
if (!fs.existsSync(fullPath)) {
|
|
22
|
+
console.error(`File not found: ${fullPath}`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
26
|
+
try {
|
|
27
|
+
if (command === 'encrypt') {
|
|
28
|
+
if (isEncrypted(content)) {
|
|
29
|
+
console.log('File is already encrypted.');
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
const encrypted = encrypt(content, key);
|
|
33
|
+
fs.writeFileSync(fullPath, encrypted, 'utf8');
|
|
34
|
+
console.log(`Successfully encrypted ${targetPath}`);
|
|
35
|
+
}
|
|
36
|
+
else if (command === 'decrypt') {
|
|
37
|
+
if (!isEncrypted(content)) {
|
|
38
|
+
console.log('File is not encrypted.');
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
const decrypted = decrypt(content, key);
|
|
42
|
+
fs.writeFileSync(fullPath, decrypted, 'utf8');
|
|
43
|
+
console.log(`Successfully decrypted ${targetPath}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.error(`Unknown command: ${command}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.error(`Operation failed: ${err.message}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { encrypt, decrypt, isEncrypted } from '../components/config/crypto';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* CLI Tool for encrypting/decrypting pixelated.config.json
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx src/scripts/config-vault.js encrypt <filePath> <key>
|
|
10
|
+
* npx tsx src/scripts/config-vault.js decrypt <filePath> <key>
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const [,, command, targetPath, argKey] = process.argv;
|
|
14
|
+
const key = argKey || process.env.PIXELATED_CONFIG_KEY;
|
|
15
|
+
|
|
16
|
+
if (!command || !targetPath || !key) {
|
|
17
|
+
console.log('Usage:');
|
|
18
|
+
console.log(' encrypt <filePath> [key] - Encrypts the file in place');
|
|
19
|
+
console.log(' decrypt <filePath> [key] - Decrypts the file in place');
|
|
20
|
+
console.log('\nNote: Key can be passed as argument or via PIXELATED_CONFIG_KEY env var.');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const fullPath = path.isAbsolute(targetPath) ? targetPath : path.resolve(process.cwd(), targetPath);
|
|
25
|
+
|
|
26
|
+
if (!fs.existsSync(fullPath)) {
|
|
27
|
+
console.error(`File not found: ${fullPath}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const content = fs.readFileSync(fullPath, 'utf8');
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
if (command === 'encrypt') {
|
|
35
|
+
if (isEncrypted(content)) {
|
|
36
|
+
console.log('File is already encrypted.');
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
const encrypted = encrypt(content, key);
|
|
40
|
+
fs.writeFileSync(fullPath, encrypted, 'utf8');
|
|
41
|
+
console.log(`Successfully encrypted ${targetPath}`);
|
|
42
|
+
} else if (command === 'decrypt') {
|
|
43
|
+
if (!isEncrypted(content)) {
|
|
44
|
+
console.log('File is not encrypted.');
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
const decrypted = decrypt(content, key);
|
|
48
|
+
fs.writeFileSync(fullPath, decrypted, 'utf8');
|
|
49
|
+
console.log(`Successfully decrypted ${targetPath}`);
|
|
50
|
+
} else {
|
|
51
|
+
console.error(`Unknown command: ${command}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
} catch (err: any) {
|
|
55
|
+
console.error(`Operation failed: ${err.message}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
package/dist/scripts/release.sh
CHANGED
|
@@ -38,6 +38,7 @@ REMOTE_NAME=$(prompt_remote_selection)
|
|
|
38
38
|
|
|
39
39
|
echo "🚀 Starting Release Process for $PROJECT_NAME"
|
|
40
40
|
echo "================================================="
|
|
41
|
+
echo ""
|
|
41
42
|
|
|
42
43
|
# Function to get current version
|
|
43
44
|
get_current_version() {
|
|
@@ -103,16 +104,32 @@ if [ "$current_branch" != "dev" ]; then
|
|
|
103
104
|
fi
|
|
104
105
|
|
|
105
106
|
echo "📦 Step 1: Updating dependencies..."
|
|
106
|
-
npm outdated | awk 'NR>1 {print $1"@"$4}'
|
|
107
|
+
UPDATES=$(npm outdated | awk 'NR>1 {print $1"@"$4}' || true)
|
|
108
|
+
if [ -n "$UPDATES" ]; then
|
|
109
|
+
echo "Updating the following packages: $UPDATES"
|
|
110
|
+
echo "$UPDATES" | xargs npm install --force --save 2>/dev/null || true
|
|
111
|
+
echo "✅ Successfully updated: $UPDATES"
|
|
112
|
+
else
|
|
113
|
+
echo "✅ No dependency updates needed."
|
|
114
|
+
fi
|
|
107
115
|
npm audit fix --force 2>/dev/null || true
|
|
108
116
|
|
|
117
|
+
echo ""
|
|
109
118
|
echo "🔍 Step 2: Running lint..."
|
|
119
|
+
echo "================================================="
|
|
120
|
+
echo ""
|
|
110
121
|
npm run lint
|
|
111
122
|
|
|
123
|
+
echo ""
|
|
112
124
|
echo "🔨 Step 3: Building project..."
|
|
125
|
+
echo "================================================="
|
|
126
|
+
echo ""
|
|
113
127
|
npm run build
|
|
114
128
|
|
|
129
|
+
echo ""
|
|
115
130
|
echo "🏷️ Step 4: Version bump..."
|
|
131
|
+
echo "================================================="
|
|
132
|
+
echo ""
|
|
116
133
|
prompt_version_type
|
|
117
134
|
if [ "$version_type" != "none" ]; then
|
|
118
135
|
if [ "$version_type" = "patch" ] || [ "$version_type" = "minor" ] || [ "$version_type" = "major" ]; then
|
|
@@ -123,7 +140,14 @@ if [ "$version_type" != "none" ]; then
|
|
|
123
140
|
fi
|
|
124
141
|
fi
|
|
125
142
|
|
|
143
|
+
echo ""
|
|
126
144
|
echo "💾 Step 5: Committing changes..."
|
|
145
|
+
echo "================================================="
|
|
146
|
+
echo ""
|
|
147
|
+
if npm run | grep -q "config:encrypt"; then
|
|
148
|
+
echo "🔒 Encrypting configuration..."
|
|
149
|
+
npm run config:encrypt
|
|
150
|
+
fi
|
|
127
151
|
commit_message=$(prompt_commit_message)
|
|
128
152
|
git add . -v
|
|
129
153
|
if git diff --cached --quiet; then
|
|
@@ -132,7 +156,10 @@ else
|
|
|
132
156
|
git commit -m "$commit_message"
|
|
133
157
|
fi
|
|
134
158
|
|
|
159
|
+
echo ""
|
|
135
160
|
echo "📤 Step 6: Pushing dev branch..."
|
|
161
|
+
echo "================================================="
|
|
162
|
+
echo ""
|
|
136
163
|
# Try to push, if it fails due to remote changes, fetch and rebase
|
|
137
164
|
if ! git push $REMOTE_NAME dev; then
|
|
138
165
|
echo "⚠️ Push failed, fetching remote changes and rebasing..."
|
|
@@ -149,7 +176,10 @@ if ! git push $REMOTE_NAME dev; then
|
|
|
149
176
|
fi
|
|
150
177
|
fi
|
|
151
178
|
|
|
179
|
+
echo ""
|
|
152
180
|
echo "🔄 Step 7: Updating main branch..."
|
|
181
|
+
echo "================================================="
|
|
182
|
+
echo ""
|
|
153
183
|
# Force main to match dev exactly
|
|
154
184
|
git push $REMOTE_NAME dev:main --force
|
|
155
185
|
|
|
@@ -162,7 +192,10 @@ if git show-ref --verify --quiet refs/heads/main; then
|
|
|
162
192
|
git checkout dev
|
|
163
193
|
fi
|
|
164
194
|
|
|
195
|
+
echo ""
|
|
165
196
|
echo "🏷️ Step 8: Creating and pushing git tag..."
|
|
197
|
+
echo "================================================="
|
|
198
|
+
echo ""
|
|
166
199
|
new_version=$(get_current_version)
|
|
167
200
|
if ! git tag -l | grep -q "v$new_version"; then
|
|
168
201
|
git tag "v$new_version"
|
|
@@ -171,7 +204,15 @@ else
|
|
|
171
204
|
echo "ℹ️ Tag v$new_version already exists"
|
|
172
205
|
fi
|
|
173
206
|
|
|
207
|
+
if npm run | grep -q "config:decrypt"; then
|
|
208
|
+
echo "🔓 Decrypting configuration for local development..."
|
|
209
|
+
npm run config:decrypt
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
echo ""
|
|
174
213
|
echo "🔐 Step 9: Publishing to npm..."
|
|
214
|
+
echo "================================================="
|
|
215
|
+
echo ""
|
|
175
216
|
should_publish=$(prompt_publish)
|
|
176
217
|
if [ "$should_publish" = "yes" ]; then
|
|
177
218
|
npm login
|
|
@@ -184,6 +225,8 @@ else
|
|
|
184
225
|
fi
|
|
185
226
|
|
|
186
227
|
echo ""
|
|
228
|
+
echo ""
|
|
229
|
+
echo "================================================="
|
|
187
230
|
echo "✅ Release complete!"
|
|
188
231
|
echo "📦 Version: $(get_current_version)"
|
|
189
232
|
echo "📋 Branches updated: dev, main"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PixelatedConfig } from './config.types';
|
|
2
2
|
/**
|
|
3
|
-
* Read the full master config blob from environment.
|
|
3
|
+
* Read the full master config blob from environment or local file.
|
|
4
4
|
* This function is intended for server-side use only.
|
|
5
5
|
*/
|
|
6
6
|
export declare function getFullPixelatedConfig(): PixelatedConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMtD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CA8CxD;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,eAAe,CAwBpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.server.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.server.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.server.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.server.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,MAAM,iCAAiC,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,SAAS,CAAC,CAAC;AAC3G,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,iCAAiC,oDAM3F;yBANqB,6BAA6B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encrypts a string using a hex-encoded 32-byte key.
|
|
3
|
+
* Returns a prefixed string: pxl:v1:iv:authTag:encryptedContent (all hex).
|
|
4
|
+
*/
|
|
5
|
+
export declare function encrypt(text: string, keyHex: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Decrypts a string using a hex-encoded 32-byte key.
|
|
8
|
+
* Expects format: pxl:v1:iv:authTag:encryptedContent
|
|
9
|
+
*/
|
|
10
|
+
export declare function decrypt(payload: string, keyHex: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Checks if a string is encrypted using our format.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isEncrypted(text: string): boolean;
|
|
15
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../src/components/config/crypto.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgB5D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA6B/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/components/utilities/functions.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,oBAUpC;AAGD,wBAAgB,SAAS,CAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;;EAmBxC;AAED,wBAAgB,wBAAwB,CAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAIhF;AAED,wBAAgB,aAAa,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAOtD;AAED,wBAAgB,WAAW,WAc1B;AAED,wBAAgB,YAAY,WAK3B;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,MAAM,UAEtC;AAQD,wBAAgB,YAAY,CAAE,YAAY,EAAE,MAAM,UAgCjD;AAID;;;;OAII;AACJ,wBAAgB,YAAY,SAoB3B;AAKD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA0BhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAGD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAOpC,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/components/utilities/functions.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,oBAUpC;AAGD,wBAAgB,SAAS,CAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;;EAmBxC;AAED,wBAAgB,wBAAwB,CAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAIhF;AAED,wBAAgB,aAAa,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAOtD;AAED,wBAAgB,WAAW,WAc1B;AAED,wBAAgB,YAAY,WAK3B;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,MAAM,UAEtC;AAQD,wBAAgB,YAAY,CAAE,YAAY,EAAE,MAAM,UAgCjD;AAID;;;;OAII;AACJ,wBAAgB,YAAY,SAoB3B;AAKD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA0BhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAGD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAOpC,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,oBAAoB,UAkBhC,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export * from "./components/config/config";
|
|
2
1
|
export * from "./components/config/config.client";
|
|
3
|
-
export * from "./components/config/config.server";
|
|
4
2
|
export * from "./components/config/config.types";
|
|
5
3
|
export * from "./components/general/404";
|
|
6
4
|
export * from "./components/general/accordion";
|
|
@@ -2,6 +2,7 @@ export * from "./components/admin/sites/sites.integration";
|
|
|
2
2
|
export * from "./components/config/config";
|
|
3
3
|
export * from "./components/config/config.server";
|
|
4
4
|
export * from "./components/config/config.types";
|
|
5
|
+
export * from "./components/config/crypto";
|
|
5
6
|
export * from "./components/general/contentful.delivery";
|
|
6
7
|
export * from "./components/general/contentful.management";
|
|
7
8
|
export * from "./components/general/flickr";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-vault.d.ts","sourceRoot":"","sources":["../../../src/scripts/config-vault.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixelated-tech/components",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pixelated Technologies",
|
|
@@ -85,7 +85,8 @@
|
|
|
85
85
|
"test:coverage": "vitest run --coverage",
|
|
86
86
|
"test:run": "vitest run",
|
|
87
87
|
"lint": "eslint --fix",
|
|
88
|
-
"release": "./src/scripts/release.sh"
|
|
88
|
+
"release": "./src/scripts/release.sh",
|
|
89
|
+
"vault": "tsx src/scripts/config-vault.ts"
|
|
89
90
|
},
|
|
90
91
|
"scripts-old": {
|
|
91
92
|
"buildBabel": "npm run buildClean && NODE_ENV=production babel src --out-dir dist --copy-files",
|