> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Context: Gateway, Storage, Secrets

> Node RPC के माध्यम से blockchain तक पहुँच प्राप्त करें, Storage से data संग्रहीत और प्राप्त करें, और API keys जैसी संवेदनशील जानकारी Secrets में सहेजें।

यह गाइड `context` object का अवलोकन और Web3 Actions के भीतर Gateway, Storage, और Secrets utilities तक पहुँच प्राप्त करने के लिए इसका उपयोग कैसे करें, प्रदान करती है।

आप यह भी सीखेंगे कि `context` के माध्यम से [Node RPC](/node-rpc/overview) तक कैसे पहुँच प्राप्त करें, Secrets के साथ API keys जैसे निजी data को कैसे प्रबंधित और access करें, Storage पर data को कैसे persist करें, और अपने application से इस data को कैसे access करें।

### Context

`context` एक object है जो आपको अपने code के भीतर से Storage और Secrets तक पहुँच देता है। Context पहला parameter है जिसे आपके functions में निर्दिष्ट करने की आवश्यकता होती है, जो Tenderly द्वारा आपके code को चलाने पर execution context तक पहुँच सक्षम करता है।

```typescript title="example.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
export const actionFun: ActionFn = async (context: Context, event: Event) => {
  // ...
  await context.storage.putJson(key, storedValue);
};
```

<Note>
  Storage और Secrets Tenderly में एक project के भीतर सभी Actions के बीच साझा किए जाते हैं।
</Note>

#### Gateways

Gateways utility (`context.gateways`) आपको [Node RPC](/node-rpc/overview) तक पहुँच देती है, जिससे आप Web3 Actions के साथ transactions भेज सकते हैं या on-chain data पढ़ सकते हैं।

`gateways` property आपको `getGateway()` नामक method तक पहुँच देती है, जिसके लिए एक argument की आवश्यकता होती है - वह network जिसे आप access करना चाहते हैं। उदाहरण के लिए, Mainnet तक पहुँच के लिए, argument को इस तरह format किया जाना चाहिए `Network.MAINNET`।

एक variable में संग्रहीत पूर्ण statement का एक उदाहरण इस तरह दिखता है:

```jsx title="example.jsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const defaultGatewayURL = context.gateways.getGateway(Network.MAINNET);
```

Node RPC में प्रत्येक समर्थित network के लिए `getGateway()` method के लिए arguments की सूची यहाँ है:

* `Network.MAINNET`
* `Network.GOERLI`
* `Network.SEPOLIA`
* `Network.POLYGON`
* `Network.MUMBAI`
* `Network.BOBA_ETHEREUM`

`context.gateways` कैसे काम करता है और इसका उपयोग करने के तरीके को समझने में आपकी मदद करने के लिए sample code snippets के बारे में अधिक विवरण के लिए, [**Web3 Actions पर Node RPC access**](/node-rpc/overview) documentation पेज पढ़ें।

### Storage

आप अपनी Web3 Actions को stateful बनाने के लिए Storage utility का उपयोग कर सकते हैं। Web3 Actions Storage एक key-value-आधारित store है। आप अपने custom code (functions) और Tenderly Dashboard दोनों से Storage में data सहेज सकते हैं।

नीचे एक code snippet है जो आपको दिखाता है कि JSON objects को Storage में कैसे संग्रहीत करें।

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
await context.storage.putJson(key, valueStored);
```

<Note>
  Storage के साथ interact करने वाले सभी functions asynchronous हैं, इसलिए अवांछित व्यवहार से बचने के लिए आपको `await` operator का उपयोग करना होगा।
</Note>

#### Storage से data सहेजना और retrieve करना

Storage में data सहेजने के लिए, निम्न functions का उपयोग करें, जो अपने संबंधित प्रकार के मान संग्रहीत करते हैं:

* `putBigInt`
* `putStr`
* `putNumber`
* `putJson`

Storage से data retrieve करने के लिए, विशिष्ट data type प्राप्त करने के लिए निम्न functions का उपयोग करें:

* `getBigInt`
* `getStr`
* `getNumber`
* `getJson`

नीचे Storage से JSON object सहेजने और प्राप्त करने का एक उदाहरण है।

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
await context.storage.putJson('BAR_BAZ', { bar: 'baz' });
//....
const barBaz = await context.storage.getJson('BAR_BAZ');
```

#### Storage सीमाएँ

| Limit                     | Value  |
| ------------------------- | ------ |
| प्रति project अधिकतम keys | 1,000  |
| अधिकतम key size           | 1 KB   |
| अधिकतम value size         | 100 KB |

यदि सीमाएँ पार हो जाती हैं, तो client `400 Bad Request` error सामने लाएगा जिसमें उस विशिष्ट सीमा को दर्शाने वाला संदेश होगा जिसका उल्लंघन किया गया था।

Storage project-wide है, एक project में सभी actions एक ही key pool साझा करते हैं।

<Warning>
  Storage एक database नहीं है, यह config parameters या counters जैसे छोटे stateful data के लिए है। बड़े datasets या high-frequency operations के लिए, एक बाहरी database का उपयोग करें और credentials को [**Secrets**](/monitoring/web3-actions/references/context#secrets) में संग्रहीत करें।
</Warning>

#### Tenderly Dashboard के माध्यम से Storage access करना

**Tenderly Dashboard** के माध्यम से Storage में सहेजे गए data को देखने के लिए, बाईं ओर के मेनू से **Actions** पर जाएँ और पेज मेनू से **Storage** पर क्लिक करें।

<Frame caption="Accessing Web3 Action data saved to Storage">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/web3-actions/context-storage-and-secrets-1.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=aaa31ee245f276bef3671e2cee6f4c23" alt="Accessing Web3 Action data saved to Storage" width="2100" height="1112" data-path="images/web3-actions/context-storage-and-secrets-1.webp" />
</Frame>

### Secrets

Secrets का उपयोग निष्पादन के दौरान आपकी Web3 Action द्वारा कॉल की जा सकने वाली services के लिए private API keys जैसी संवेदनशील जानकारी संग्रहीत करने के लिए किया जाता है। Secrets key-value pairs के रूप में संग्रहीत होते हैं और name और secret value से बने होते हैं।

#### Secrets बनाना और संग्रहीत करना

Secrets बनाने का एकमात्र तरीका **Tenderly Dashboard** के माध्यम से है। बाईं ओर के मेनू से **Actions** पर जाएँ और पेज मेनू से **Secrets** पर क्लिक करें।

**Add Secret** बटन पर क्लिक करके Secrets जोड़ें और key का नाम और value प्रदान करें।

<Frame caption="Creating Secrets for Web3 Actions">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/web3-actions/context-storage-and-secrets-2.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=994f4277fd0079e7d69e75839adeff04" alt="Creating Secrets for Web3 Actions" width="3364" height="2262" data-path="images/web3-actions/context-storage-and-secrets-2.webp" />
</Frame>

#### अपने code के अंदर से Secrets data प्राप्त करना

आप `get()` method के साथ `context` object का उपयोग करके अपने code के भीतर से Secrets data प्राप्त कर सकते हैं। argument के रूप में, Tenderly Dashboard के माध्यम से आपके द्वारा निर्दिष्ट सटीक key name का उपयोग करें।

```javascript title="example.js" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
const fooApiKey = await context.secrets.get('FOO_API_KEY');
```
