# 🔐 Internal Memory Brick An advanced **Mason** brick designed for the **Autoreceptive** architecture. It automates the boilerplate for persistent local storage using `flutter_secure_storage` (via `autoreceptiveStorage`), handling JSON serialization for Objects and Lists, and raw storage for Strings. ## 🚀 Purpose This brick eliminates the manual task of: 1. Generating high-entropy, randomized secure keys. 2. Writing `get` and `set` interfaces in `ConnectInternalMemory`. 3. Implementing JSON encoding/decoding logic in `InternalMemory`. 4. Wrapping calls in `AppDataManager` to maintain the **Repository Pattern**. --- ## 📂 Target Architecture The brick targets the following specific paths in your project: * **Interface**: `lib/Autoreceptive/memory/ConnectInternalMemory.dart` * **Implementation**: `lib/Autoreceptive/memory/InternalMemory.dart` * **Global Access**: `lib/Autoreceptive/informatics/AppDataManager.dart` --- ## 🛠 Installation ### 1. Register the Brick From your project root, run: ```bash mason add internal_memory --path ./bricks/internal_memory ``` ### 2. Setup Hooks The brick uses specialized Dart hooks for smart code injection and auto-formatting. ```bash cd bricks/internal_memory/hooks && dart pub get && cd ../../../ mason get ``` --- ## 📖 Usage Guide Run the following command and follow the interactive prompts: ```bash mason make internal_memory ``` ### Variable Inputs: | Variable | Description | Example | | :--- | :--- | :--- | | `function_name` | The camelCase name of the feature. | `userProfile` or `orderLocations` | | `request_object` | The Dart type to store. | `MeDescription`, `String`, or `List` | --- ## 📋 Logic Breakdown ### 1. High-Entropy Keys The brick generates a randomized `static const String` key at the **top** of the `InternalMemory` class to prevent key collisions and reverse-engineering: ```dart static const String USER_PROFILE = "USER_PROFILE_x8H2_9kLp_mQz1"; ``` ### 2. Intelligent Type Handling The hook detects the `request_object` type and adjusts the logic: * **Standard Objects**: Uses `Type.fromJson(jsonDecode(s))` and `jsonEncode(data.toJson())`. * **Lists**: Uses `.map((item) => Type.fromJson(item)).toList()` for deep serialization. * **Strings**: Bypasses JSON logic for raw string storage. ### 3. Smart Injection & Spacing * **Clean Pairs**: In the interface, the getter and setter are injected as a tight block with a double-newline buffer from the previous feature. * **Auto-Imports**: Automatically adds `import 'dart:convert';` and searches the `lib/` folder to find and add the correct model imports for your Objects. * **Formatting**: Automatically triggers `dart format` on the `Autoreceptive` folder after injection. --- ## ⚠️ Requirements * **`autoreceptiveStorage`**: The `InternalMemory` class must have an instance of your secure storage wrapper named `autoreceptiveStorage`. * **Model Factories**: For Objects and Lists, your models must implement: * `factory Model.fromJson(Map json)` * `Map toJson()` --- ## 🔄 Refreshing Logic If you update the `post_gen.dart` hook code, always run this to ensure Mason uses the latest version: ```bash rm -rf .mason && mason get ``` ---