{"id":30833,"date":"2026-10-14T09:46:42","date_gmt":"2026-10-14T09:46:42","guid":{"rendered":"https:\/\/umang.pk\/2026\/10\/14\/%da%a9%d9%84%d8%a7%d8%a4%da%88-%d8%b1%d9%86-%d9%85%db%8c%da%ba-%d9%81%d8%a7%d8%a6%d9%84%d9%88%da%ba-%da%a9%d9%88-%d8%b3%d8%a7%d9%84%d9%88%da%ba-%da%a9%db%92-%d8%a8%d8%ac%d8%a7%d8%a6%db%92-%d9%85%d9%86\/"},"modified":"2026-10-14T09:46:42","modified_gmt":"2026-10-14T09:46:42","slug":"%da%a9%d9%84%d8%a7%d8%a4%da%88-%d8%b1%d9%86-%d9%85%db%8c%da%ba-%d9%81%d8%a7%d8%a6%d9%84%d9%88%da%ba-%da%a9%d9%88-%d8%b3%d8%a7%d9%84%d9%88%da%ba-%da%a9%db%92-%d8%a8%d8%ac%d8%a7%d8%a6%db%92-%d9%85%d9%86","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/10\/14\/%da%a9%d9%84%d8%a7%d8%a4%da%88-%d8%b1%d9%86-%d9%85%db%8c%da%ba-%d9%81%d8%a7%d8%a6%d9%84%d9%88%da%ba-%da%a9%d9%88-%d8%b3%d8%a7%d9%84%d9%88%da%ba-%da%a9%db%92-%d8%a8%d8%ac%d8%a7%d8%a6%db%92-%d9%85%d9%86\/","title":{"rendered":"\u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0633\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0646\u0679\u0648\u06ba \u062a\u06a9 \u06a9\u06cc\u0633\u06d2 \u0631\u06a9\u06be\u06cc\u06ba"},"content":{"rendered":"\n<div id=\"\">\n<p>\u067e\u0631\u0646\u0679 \u062c\u0627\u0628\u0632\u060c \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688\u060c \u06cc\u0627 \u0633\u067e\u0648\u0631\u0679 \u0627\u0679\u06cc\u0686\u0645\u0646\u0679 \u06a9\u0648 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u0648\u062c\u0648\u062f \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u06a9\u0627\u0645 \u0645\u06a9\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0628 \u0628\u06be\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06af\u0648\u06af\u0644 \u0688\u0631\u0627\u0626\u06cc\u0648\u060c \u06a9\u0648\u0626\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0642\u0637\u0627\u0631\u06cc\u06ba \u062c\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u06cc \u062c\u0627\u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0648\u063a\u06cc\u0631\u06c1\u06d4<\/p>\n<p>\u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0622\u067e \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u0627\u0633\u0679 \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0646\u0645\u0648\u0646\u06c1 \u0633\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u062e\u06cc\u0627\u0644\u0627\u062a \u0635\u0631\u0641 \u067e\u0631\u0646\u0679\u0646\u06af \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0686\u06be\u0648\u0679\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06cc \u0637\u0631\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u06cc\u06c1 \u0628\u0627\u0626\u0679\u0633 \u06a9\u0648 \u062a\u0633\u0644\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0645\u062e\u062a\u0635\u0631 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0645\u062c\u0627\u0632 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u067e\u0627\u0633 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0636\u0627\u0626\u0639 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0627\u06cc\u067e \u0646\u06c1\u06cc\u06ba \u0645\u0644\u06d2 \u06af\u06cc\u06d4 \u0622\u067e \u06a9\u0648 \u0642\u0637\u0627\u0631 \u06a9\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-youll-build\">\u06a9\u06cc\u0627 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/h2>\n<p>\u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0627 \u0633\u0627\u0626\u0632 \u0686\u06be\u0648\u0679\u0627 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p>\u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0626\u0644 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>API \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0631 \u0633\u0627\u0626\u0641\u0631 \u0679\u06cc\u06a9\u0633\u0679 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u0648 \u0642\u0644\u06cc\u0644 \u0645\u062f\u062a\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u0638\u0648\u0631 \u0634\u062f\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0628 \u06a9\u0648\u0626\u06cc \u06a9\u0627\u0645 \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u0679\u0627\u0626\u0645\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u0679\u0627\u0633\u06a9 \u06c1\u0633\u0679\u0631\u06cc \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0628\u0627\u0644\u0679\u06cc \u06c1\u06d2\u060c \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0630\u062e\u06cc\u0631\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-text\">Client\n  |\n  |  HTTPS\n  v\nCloud Run (one Node service)\n  |-- Cloud Storage     cipher-text object\n  |-- Cloud KMS         wraps the per-file key\n  |-- Redis             job JSON with a time to live (TTL)\n  |\nAuthorized caller  <--  stream, then delete\n<\/code><\/pre>\n<h2 id=\"heading-what-you-need\">\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2<\/h2>\n<p>\u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<ul>\n<li>\n<p>\u062a\u06be\u0648\u0691\u0627 \u0633\u0627 Node.js \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633<\/p>\n<\/li>\n<li>\n<p>HTTPS \u0627\u0648\u0631 JSON \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba\u061f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633 \u06a9\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c (\u0627\u06cc\u0645\u06cc\u0632\u0648\u0646 \u0627\u06cc\u0633 3\u060c \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c) \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u06d2 \u067e\u0627\u0633 \u062a\u06cc\u0632 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0644\u06cc\u062f\u06cc \u0642\u062f\u0631 \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06a9\u0648\u0628\u0631\u0646\u06cc\u0679\u0633 \u06cc\u0627 \u062f\u0648\u0633\u0631\u06d2 \"\u067e\u0631\u0646\u0679 \u0633\u0631\u0648\u0631\" \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646\u060c \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c\u060c \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0633\u0631\u0648\u0633 (\u06a9\u0644\u0627\u0624\u0688 \u06a9\u06d2 \u0627\u06cc\u0645 \u0627\u06cc\u0633)\u060c \u0627\u0648\u0631 \u0631\u06cc\u0688\u06cc\u0633 \u0645\u06cc\u0632\u0628\u0627\u0646 \u06a9\u0627\u0641\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0646\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1\u06cc \u062a\u0642\u0633\u06cc\u0645 \u062f\u0648\u0633\u0631\u06d2 \u0628\u0627\u062f\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u06d4<\/p>\n<h2 id=\"heading-one-service-not-a-fleet\">\u0627\u06cc\u06a9 \u062e\u062f\u0645\u062a\u060c \u0628\u06cc\u0691\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/h2>\n<p>20 \u0645\u0646\u0679 \u062a\u06a9 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0627\u06c1\u06a9 \u06a9\u06d2 \u062f\u0641\u062a\u0631 \u0645\u06cc\u06ba \u06c1\u0645\u06cc\u0634\u06c1 \u0622\u0646 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646\u0648\u06ba\u060c \u06a9\u0644\u0633\u0679\u0631\u0632 \u06cc\u0627 \u0628\u06a9\u0633\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06cc \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679 \u0627\u0648\u0631 API \u06a9\u0648 \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0633\u0631\u0648\u0633 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 CPU \u06a9\u0648 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u0648 \u0648\u06c1\u0627\u06ba \u0628\u06cc\u0679\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0633\u06d2 \u0627\u067e \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0646\u0642\u0635\u0627\u0646\u0627\u062a \u06c1\u06cc\u06ba\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062b\u0627\u0644\u0648\u06ba \u067e\u0631 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u060c \u0645\u062b\u0627\u0644 A \u0645\u062b\u0627\u0644 B \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062f\u06c1 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627\u06d4 \u06cc\u06c1 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u062a\u0627\u0632\u06c1 \u062f\u0645 \u06a9\u0631 \u062f\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u06a9\u0627\u0645 \u06a9\u0648 \"\u063a\u0627\u0626\u0628\" \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 \u06cc\u0627 \u0628\u062f\u062a\u0631\u060c \u06cc\u06c1 \u063a\u0644\u0637 \u06a9\u0627\u0645 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0648:<\/p>\n<p>\u0627\u06af\u0631 Redis \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u060c \u062a\u06cc\u0627\u0631\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2. \u0627\u06cc\u06a9 \u0641\u0639\u0627\u0644 \u0686\u06cc\u06a9 \u062c\u0648 \u0635\u0631\u0641 \u06cc\u06c1 \u062b\u0627\u0628\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \"\u0646\u0648\u0688 \u0627\u067e \u06c1\u06d2\" \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062d\u0642\u06cc\u0642\u062a \u06a9\u0648 \u062c\u0627\u0646\u06d2 \u0628\u063a\u06cc\u0631 \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u0648 \u0633\u0631\u0648\u0633 \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0627\u06a9\u0627\u0645\u06cc \u0628\u0646\u062f\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062f\u06c1 \u0646\u0642\u0644 \u06a9\u06cc \u0645\u0642\u0627\u0645\u06cc \u0688\u0633\u06a9 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0646\u06c1 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-js\">app.get(\"\/up\", (_req, res) => {\n  res.status(200).send(\"ok\");\n});\n\napp.get(\"\/health\", async (_req, res) => {\n  const redisUp = await pingRedis();\n  if (!redisUp) return res.status(503).send(\"queue down\");\n  res.status(200).send(\"ok\");\n});\n<\/code><\/pre>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>\/health<\/code> \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u0632 \u06cc\u0627 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u067e\u0631\u0648\u0628\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>\/up<\/code> \u0628\u0633 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u062c\u0648\u0627\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-give-the-object-a-boring-name\">\u0627\u067e\u0646\u06cc \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u0628\u0648\u0631\u0646\u06af \u0646\u0627\u0645 \u062f\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06cc\u0632 \u06c1\u06cc\u06ba: <code>aadhaar-ramesh.pdf<\/code>\u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0641\u0627\u0626\u0644\u0646\u06af \u06a9\u06cc\u0628\u0646\u0679 \u0628\u0646\u0627 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0644\u0627\u0634 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u06d2 \u062a\u0631\u062a\u06cc\u0628 IDs \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u0626\u0679\u0633 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-js\">const { randomUUID } = require(\"crypto\");\n\nfunction objectName() {\n  return `jobs\/${randomUUID()}.bin`;\n}\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0636\u0631\u0648\u0631\u06cc \u06c1\u0648 \u062a\u0648\u060c \u0627\u067e\u0646\u06cc \u06a9\u0627\u0645 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0634\u062e\u0635 \u06a9\u06cc \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0646\u0627\u0645 \u0645\u062e\u062a\u0635\u0631 \u0632\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0646\u0627\u0645 \u0645\u06cc\u06ba \u0645\u062a \u0688\u0627\u0644\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06cc \u0634\u0631\u0637 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0627\u0644\u0679\u06cc \u06a9\u0648 \u062f\u0648\u0633\u0631\u06d2 \u0628\u0631\u0627\u0639\u0638\u0645 \u0645\u06cc\u06ba \"\u0645\u062d\u0641\u0648\u0638 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\" \u06a9\u0627\u067e\u06cc \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0646\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u067e\u06be\u06cc\u0646\u06a9\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0627\u06cc\u06a9 \u0648\u0632\u0679 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u0646\u06cc\u0627 \u062f\u0648\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u06a9\u06cc \u0633\u062e\u062a \u062d\u062f\u0648\u062f \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u067e\u0627\u0646\u0686 \u0641\u0627\u0626\u0644\u06cc\u06ba\u060c \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06cc \u062d\u062f\u060c \u06a9\u0644\u06cc\u062f\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0632\u060c \u0627\u0648\u0631 \u0642\u0637\u0627\u0631 \u06a9\u0627 \u0633\u0627\u0626\u0632\u06d4 \u0644\u0627\u0645\u062d\u062f\u0648\u062f \u0627\u067e \u0644\u0648\u0688\u0632 \u06cc\u06c1 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u0622\u067e \u06a9\u0627 \u067e\u0631\u0646\u0679 \u06a9\u0627\u0624\u0646\u0679\u0631 \u0627\u06cc\u06a9 \u0631\u062f\u06cc \u062f\u0631\u0627\u0632 \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-encrypt-for-storage-and-be-honest-about-decrypt\">\u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u06a9\u0631\u067e\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06a9\u0631\u067e\u0634\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631 \u0628\u0646\u06cc\u06ba\u06d4<\/h2>\n<p>\u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u067e\u0648\u0633\u0679 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u067e\u06cc\u0634\u0648\u06ba \u06a9\u0627 \u0645\u0631\u06a9\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0631\u0646\u0679\u0631\u060c \u067e\u06cc\u0634 \u0646\u0638\u0627\u0631\u06c1\u060c \u06cc\u0627 \"\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\" \u06a9\u06d2 \u0628\u0679\u0646 \u06a9\u0648 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0645\u062c\u0627\u0632 \u0634\u062e\u0635 \u06a9\u0648 \u0628\u0627\u0626\u0679\u0633 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06cc \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u067e\u0646\u06d2 \u0645\u0636\u0627\u0645\u06cc\u0646 \u0627\u0648\u0631 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0645\u06cc\u06ba \u0627\u06cc\u0633\u0627 \u06a9\u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 API \u0641\u0627\u0626\u0644 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \"\u0633\u0631\u0648\u0631 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627\" \u0646\u06c1 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u0646\u0645\u0648\u0646\u06c1 \u06cc\u06c1 \u06c1\u0648\u06af\u0627:<\/p>\n<ol>\n<li>\n<p>\u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 AES-GCM \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u06a9\u0631\u067e\u0679 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc\u067e\u0686\u0631 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 PDF \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0631 \u0627\u0633 \u067e\u0631\u062a \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u062c\u06a9 \u0628\u0627\u0626\u0679\u0633 (\u067e\u06cc \u0688\u06cc \u0627\u06cc\u0641\u060c \u062c\u06d2 \u067e\u06cc \u0627\u06cc \u062c\u06cc\u060c \u067e\u06cc \u0627\u06cc\u0646 \u062c\u06cc) \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u0644\u06cc\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0646\u06a9\u0631\u067e\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u0627\u0624\u0688 KMS (\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0633\u0631\u0648\u0633) \u0633\u06d2 \u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0644\u067e\u06cc\u0679\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u06cc\u06ba\u06d4 \u0644\u067e\u06cc\u0679\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0622\u06af\u06d2 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u062c\u0627\u0632 \u0631\u06cc\u0688\u0632 \u067e\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06cc\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0688\u06a9\u0631\u067e\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u062c\u0627\u062f\u0648 \u06a9\u06d2 \u06a9\u0627\u0679\u0646\u06d2 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u067e\u06cc\u06a9 \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0644\u0648\u06af HTML \u06cc\u0627 \u0631\u062f\u06cc \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0628\u062f\u062a\u0631\u06cc\u0646 \u0645\u0645\u06a9\u0646\u06c1 \u0644\u0645\u062d\u06d2 \u067e\u0631 \u067e\u062a\u06c1 \u0686\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062e\u0627\u06a9\u06c1 \u06c1\u06d2\u060c \u0645\u06a9\u0645\u0644 \u06a9\u0631\u067e\u0679\u0648 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-js\">const crypto = require(\"crypto\");\n\nfunction encryptForStorage(plainBuffer) {\n  const dataKey = crypto.randomBytes(32);\n  const iv = crypto.randomBytes(12);\n  const cipher = crypto.createCipheriv(\"aes-256-gcm\", dataKey, iv);\n  const ciphertext = Buffer.concat([cipher.update(plainBuffer), cipher.final()]);\n  const tag = cipher.getAuthTag();\n  return { ciphertext, iv, tag, dataKey };\n}\n<\/code><\/pre>\n<p>\u062c\u0627\u0646\u06d2 \u062f\u0648 <code>dataKey<\/code> KMS \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0635\u0631\u0641 \u0644\u067e\u06cc\u0679\u06d2 \u06c1\u0648\u0626\u06d2 \u0646\u062a\u0627\u0626\u062c \u0631\u06a9\u06be\u06cc\u06ba\u06d4 AES-GCM \u0645\u06cc\u06ba \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0627 \u0679\u06cc\u06af \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0628\u0627\u0644\u0679\u06cc \u0645\u06cc\u06ba \u0628\u0679\u0633 \u067e\u0644\u0679\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0688\u06cc\u06a9\u0631\u067e\u0634\u0646 \u062e\u0631\u0627\u0628 \u067e\u06cc \u0688\u06cc \u0627\u06cc\u0641 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u062c\u0648 \u0622\u062f\u06be\u06cc \u0627\u0635\u0644\u06cc \u0646\u0638\u0631 \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>KMS \u06a9\u0627\u0644\u06cc\u06ba \u063a\u06cc\u0631 \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0628\u0627\u0644\u0679\u06cc\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0633\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u067e\u06cc\u0633\u06d2 \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u06a9\u0631\u067e\u0634\u0646 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u0627 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0644\u06cc\u06a9 \u0634\u062f\u06c1 \u0628\u0627\u0644\u0679\u06cc \u0622\u067e \u06a9\u0627 \u0644\u06cc\u06a9 \u0634\u062f\u06c1 \u067e\u0691\u0648\u0633\u06cc \u06a9\u06cc\u0633\u06d2 \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0627\u0624\u0646\u0679\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u0634\u062e\u0635 \u0627\u0628 \u0628\u06be\u06cc \u0635\u0641\u062d\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0627\u063a\u0630 \u062a\u0635\u0648\u06cc\u0631\u06cc\u06ba \u0644\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u0633\u062a\u0642\u0644 \u06a9\u0627\u067e\u06cc\u0648\u06ba \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u067e\u0631\u0646\u0679\u0631 \u0627\u0646\u062f\u06be\u0627 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-put-the-queue-in-memory-that-expires\">\u0642\u0637\u0627\u0631 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>Redis \u0644\u0627\u0626\u06cc\u0648 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0627\u0626\u0644\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-js\">const JOB_TTL_SECONDS = 60 * 60;\n\nasync function saveJob(redis, job) {\n  await redis.set(\n    `job:${job.id}`,\n    JSON.stringify({\n      id: job.id,\n      objectName: job.objectName,\n      shopId: job.shopId,\n      status: \"queued\",\n      createdAt: Date.now()\n    }),\n    \"EX\",\n    JOB_TTL_SECONDS\n  );\n}\n<\/code><\/pre>\n<p>1 \u06af\u06be\u0646\u0679\u06c1 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06c1\u06d2\u060c \u0642\u0627\u0646\u0648\u0646 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 TTL \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0627\u0635\u0644 \u062f\u0648\u0631\u0648\u06ba \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u06d4 \u06a9\u0627\u067e\u06cc \u06a9\u0648 \u06a9\u0633\u06cc \u0642\u0637\u0627\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u0633 \u0633\u06d2 \u0627\u06af\u0644\u06d2 \u0633\u0627\u0644 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0641\u0627\u0626\u0644 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0645\u062e\u062a\u0635\u0631 \u0630\u062e\u06cc\u0631\u06c1<\/p>\n<\/li>\n<li>\n<p>\"\u0627\u0633 \u0648\u0632\u0679 \u0633\u06d2 \u0641\u0627\u0626\u0644\u06cc\u06ba\" \u06a9\u0627 \u06a9\u0627\u0624\u0646\u0679\u0631<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06a9\u06cc \u062f\u0648 \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u0644\u06cc\u0646 \u0627\u067e \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0627\u06a9 \u06a9\u0644\u06cc\u062f<\/p>\n<\/li>\n<\/ul>\n<p>Redis \u0645\u06cc\u06ba PDFs \u0630\u062e\u06cc\u0631\u06c1 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0631\u06cc\u0688\u06cc\u0633 \u0627\u0646 \u062e\u0637\u0648\u0637 \u067e\u0631 \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u0627\u0626\u0679\u0633 \u06c1\u06d2\u06d4 TTL \u06a9\u06d2 0 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u06cc \u0645\u0644\u0627\u0632\u0645\u062a \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u063a\u0627\u0626\u0628 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u060c \u0686\u0627\u06c1\u06d2 \u0622\u067e \u0627\u0633\u06d2 \u062e\u0648\u062f \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627 \u0628\u06be\u0648\u0644 \u06af\u0626\u06d2 \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1\u06cc \u0628\u0627\u062a \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-delete-on-purpose-then-sweep-what-you-missed\">\u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u067e \u0646\u06d2 \u062c\u0648 \u06a9\u06be\u0648\u06cc\u0627 \u0627\u0633\u06d2 \u0645\u0646\u0638\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0645\u062c\u0627\u0632 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2:<\/p>\n<pre><code class=\"language-js\">async function completeJob({ storage, redis, bucket, job }) {\n  await storage.bucket(bucket).file(job.objectName).delete({ ignoreNotFound: true });\n  await redis.del(`job:${job.id}`);\n}\n<\/code><\/pre>\n<p>\u067e\u06c1\u0644\u06d2 \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0634\u06d2 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u06cc\u062a\u06cc\u0645 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0648\u0627\u062d\u062f \u0646\u0642\u0634\u06c1 \u0636\u0627\u0626\u0639 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0622\u067e\u0631\u06cc\u0634\u0646 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u0648\u06af \u0679\u06cc\u0628\u0632 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0631 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u06be\u0627\u0691\u0648 \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u06c1\u0631 \u0686\u0646\u062f \u0645\u0646\u0679 \u0628\u0639\u062f \u062f\u0648\u0691\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u0627\u06af\u0631 \u0679\u0627\u0633\u06a9 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u0686\u06a9\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0628\u0627\u0642\u06cc \u0622\u0626\u0679\u0645\u0632 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0627\u0639\u062a\u0631\u0627\u0636 \u0627\u0633 \u0645\u062f\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0631\u0627\u0646\u0627 \u06c1\u06d2 (\u0627\u06af\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u062e\u0644\u0644 \u067e\u0691\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 30 \u0645\u0646\u0679 \u06a9\u0627\u0641\u06cc \u06c1\u06cc\u06ba)\u060c \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06c1\u0645 \u062f\u0648\u0646\u0648\u06ba \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u0648 \u062f\u0648\u06c1\u0631\u0627 \u062d\u0630\u0641 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Redis \u0644\u0627\u06a9\u0646\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-js\">async function withLock(redis, fn) {\n  const ok = await redis.set(\"lock:sweep\", \"1\", \"NX\", \"EX\", 55);\n  if (ok !== \"OK\") return;\n  try {\n    await fn();\n  } finally {\n    await redis.del(\"lock:sweep\");\n  }\n}\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631\u060c \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633\u060c \u06cc\u0627 \u062f\u06cc\u06af\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0627\u0633\u0679\u0648\u0631\u0632\u060c \u0645\u0627\u0644\u06a9\u0627\u0646 \u0627\u0648\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627\u0624\u0646\u0679\u0631\u0632 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u067e\u06cc \u0688\u06cc \u0627\u06cc\u0641 \u06a9\u06cc \u062f\u0648\u0633\u0631\u06cc \u06a9\u0627\u067e\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0641\u0627\u0626\u0644 \u0628\u0627\u0626\u0679\u0633 \u0627\u0648\u0631 \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0679\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0645\u0648\u0627\u062f \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u0648 \u0648\u0633\u0639\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \"\u06cc\u06c1 \u062f\u0648\u0631\u06c1 \u06c1\u0648\u0627\" \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u06be\u0645\u0628 \u0646\u06cc\u0644 \u06af\u06cc\u0644\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-not-to-claim\">\u06a9\u06cc\u0627 \u062f\u0639\u0648\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/h2>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 README \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u062d\u062f\u0648\u062f \u06a9\u0648 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0646 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1 \u067e\u0691\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u0633\u0631\u0648\u0631 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 (\u062f\u0648\u0628\u0627\u0631\u06c1 \u062e\u0641\u06cc\u06c1 \u06a9\u0627\u0631\u06cc \u0627\u0648\u0631 \u062a\u0648\u062b\u06cc\u0642) \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u067e\u0631 \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0644\u0645 \u06a9\u06cc \u0645\u06a9\u0645\u0644 \u0639\u062f\u0645 \u0645\u0648\u062c\u0648\u062f\u06af\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062d\u0630\u0641 \u0634\u062f\u06c1 \u0686\u06cc\u0632 \u0628\u0627\u0644\u0679\u06cc \u0633\u06d2 \u063a\u0627\u0626\u0628 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u0635\u0648\u0644 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646\u060c \u067e\u0631\u0646\u0679\u0631 \u06cc\u0627 \u06a9\u06cc\u0645\u0631\u06d2 \u0633\u06d2 \u063a\u0627\u0626\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 Redis \u0646\u06cc\u0686\u06d2 \u0686\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0646\u0626\u06cc \u0645\u0644\u0627\u0632\u0645\u062a\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u06ba \u06af\u06cc\u06d4 \u062c\u0639\u0644\u06cc \u0645\u0642\u0627\u0645\u06cc \u0642\u0637\u0627\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u0627 503 \u0633\u06d2 \u0628\u06be\u06cc \u0628\u062f\u062a\u0631 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0646\u0627\u0645 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u0628\u0627\u0626\u0679\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u062a\u0635\u062f\u06cc\u0642\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-where-to-go-next\">\u0622\u06af\u06d2 \u06a9\u06c1\u0627\u06ba \u062c\u0627\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0633\u0631\u0648\u0633 \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0686\u06be\u0648\u0679\u0627 \u0644\u0648\u067e \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><code>POST \/jobs<\/code>    \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 ciphertext \u0627\u0648\u0631 Redis \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0644\u06a9\u06be\u06cc\u06ba: <code>EX<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>GET \/jobs\/:id<\/code>    \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u06a9\u0648 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0635\u0641\u0627\u0626\u06cc \u06a9\u06be\u0691\u06a9\u06cc \u0633\u06d2 \u067e\u0631\u0627\u0646\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>\/health<\/code>    \u0627\u06af\u0631 Redis \u0646\u06cc\u0686\u06d2 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 503 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06af\u0631 \u0648\u06c1 \u0644\u0648\u067e \u0628\u0648\u0631\u0646\u06af \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0646\u06d2 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06a9\u06cc\u0627\u06d4 \u0628\u0648\u0631\u06cc\u062a \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0641\u0627\u0626\u06cc\u0648 \u0645\u0646\u0679 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0645\u067e\u0646\u06cc \u0628\u0646\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u06cc\u06c1 \u067e\u06cc\u0679\u0631\u0646 Docsy \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u060c \u0627\u06cc\u06a9 \u067e\u0631\u0646\u0679 \u0631\u06cc\u0644\u06d2 \u062c\u0648 \u0645\u06cc\u06ba \u0646\u06d2 \u06c1\u0646\u062f\u0648\u0633\u062a\u0627\u0646 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0645\u0645\u0628\u0626\u06cc \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u062e\u062f\u0645\u0627\u062a \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 (<code>asia-south1<\/code>)\u060c Cloud Storage\u060c Cloud KMS\u060c \u0627\u0648\u0631 Redis\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u067e\u0631\u0646\u0679 \u062c\u0627\u0628\u0632\u060c \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688\u060c \u06cc\u0627 \u0633\u067e\u0648\u0631\u0679 \u0627\u0679\u06cc\u0686\u0645\u0646\u0679 \u06a9\u0648 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u0648\u062c\u0648\u062f \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u06a9\u0627\u0645 \u0645\u06a9\u0645\u0644 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0628 \u0628\u06be\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06af\u0648\u06af\u0644 \u0688\u0631\u0627\u0626\u06cc\u0648\u060c \u06a9\u0648\u0626\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc\u060c \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30833","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/30833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=30833"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/30833\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=30833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=30833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=30833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}