@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.
@@ -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
- const raw = process.env.PIXELATED_CONFIG_JSON || (process.env.PIXELATED_CONFIG_B64 && Buffer.from(process.env.PIXELATED_CONFIG_B64, 'base64').toString('utf8'));
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
- console.error('PIXELATED_CONFIG not found: neither PIXELATED_CONFIG_JSON nor PIXELATED_CONFIG_B64 is set in the environment.');
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
- const source = process.env.PIXELATED_CONFIG_JSON ? 'PIXELATED_CONFIG_JSON' : 'PIXELATED_CONFIG_B64';
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)
@@ -1,3 +1,4 @@
1
+ "use server";
1
2
  import { jsx as _jsx } from "react/jsx-runtime";
2
3
  import PropTypes from 'prop-types';
3
4
  import { getClientOnlyPixelatedConfig } from './config';
@@ -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';
@@ -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
+ }
@@ -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}' | xargs npm install --force --save 2>/dev/null || true
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;AAGtD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CAexD;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,eAAe,CAwBpF"}
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":"AACA,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"}
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,UAiBhC,CAAC"}
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"}
@@ -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,3 @@
1
+ #!/usr/bin/env npx tsx
2
+ export {};
3
+ //# sourceMappingURL=config-vault.d.ts.map
@@ -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.6",
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",