- Introduced blog routing using Next.js App Router - Implemented dynamic [slug] pages for blog posts - Added MDX-based content loading via lib/posts - Integrated shared TopBar layout with navigation - Established clear content, lib and component separation
93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
arrayBufferToString: null,
|
|
decrypt: null,
|
|
encrypt: null,
|
|
getActionEncryptionKey: null,
|
|
stringToUint8Array: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
arrayBufferToString: function() {
|
|
return arrayBufferToString;
|
|
},
|
|
decrypt: function() {
|
|
return decrypt;
|
|
},
|
|
encrypt: function() {
|
|
return encrypt;
|
|
},
|
|
getActionEncryptionKey: function() {
|
|
return getActionEncryptionKey;
|
|
},
|
|
stringToUint8Array: function() {
|
|
return stringToUint8Array;
|
|
}
|
|
});
|
|
const _invarianterror = require("../../shared/lib/invariant-error");
|
|
const _manifestssingleton = require("./manifests-singleton");
|
|
let __next_loaded_action_key;
|
|
function arrayBufferToString(buffer) {
|
|
const bytes = new Uint8Array(buffer);
|
|
const len = bytes.byteLength;
|
|
// @anonrig: V8 has a limit of 65535 arguments in a function.
|
|
// For len < 65535, this is faster.
|
|
// https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623
|
|
if (len < 65535) {
|
|
return String.fromCharCode.apply(null, bytes);
|
|
}
|
|
let binary = '';
|
|
for(let i = 0; i < len; i++){
|
|
binary += String.fromCharCode(bytes[i]);
|
|
}
|
|
return binary;
|
|
}
|
|
function stringToUint8Array(binary) {
|
|
const len = binary.length;
|
|
const arr = new Uint8Array(len);
|
|
for(let i = 0; i < len; i++){
|
|
arr[i] = binary.charCodeAt(i);
|
|
}
|
|
return arr;
|
|
}
|
|
function encrypt(key, iv, data) {
|
|
return crypto.subtle.encrypt({
|
|
name: 'AES-GCM',
|
|
iv
|
|
}, key, data);
|
|
}
|
|
function decrypt(key, iv, data) {
|
|
return crypto.subtle.decrypt({
|
|
name: 'AES-GCM',
|
|
iv
|
|
}, key, data);
|
|
}
|
|
async function getActionEncryptionKey() {
|
|
if (__next_loaded_action_key) {
|
|
return __next_loaded_action_key;
|
|
}
|
|
const serverActionsManifest = (0, _manifestssingleton.getServerActionsManifest)();
|
|
const rawKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY || serverActionsManifest.encryptionKey;
|
|
if (rawKey === undefined) {
|
|
throw Object.defineProperty(new _invarianterror.InvariantError('Missing encryption key for Server Actions'), "__NEXT_ERROR_CODE", {
|
|
value: "E571",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
__next_loaded_action_key = await crypto.subtle.importKey('raw', stringToUint8Array(atob(rawKey)), 'AES-GCM', true, [
|
|
'encrypt',
|
|
'decrypt'
|
|
]);
|
|
return __next_loaded_action_key;
|
|
}
|
|
|
|
//# sourceMappingURL=encryption-utils.js.map
|