کلیدهای API
`keys.list`، `list_all`، `iterate`، `get`، `create`، `update`، `delete`، `rotate` و `revoke`، و خوانندههای گزارش درخواستها و فعالیت.
همهٔ متدها
key = client.keys.create( name: "Billing sender", scopes: ["emails:send"], domainAllowlist: ["billing.acme.com"], expiresInMinutes: 60 * 24 * 90) File.write(".openemail-billing-key", key[:token]) client.keys.update(key[:id], enabled: false) rotated = client.keys.rotate(key[:id])File.write(".openemail-billing-key", rotated[:token]) client.keys.revoke(key[:id], reason: "Replaced")client.keys.delete(key[:id])create و rotate تنها فراخوانیهایی هستند که یک secret را، در token، یک بار برمیگردانند. هر خواندنی بهجای آن maskedKey را برمیگرداند. update با enabled کلید را خاموش و روشن میکند، که جایگزین برگشتپذیرِ revoke است، و delete فقط کلیدی را حذف میکند که باطل شده باشد: هر کلید دیگری یک 409 not_revoked است. خواندن به keys:read و هر تغییری به keys:manage نیاز دارد.
gem هرگز create یا rotate را دوباره امتحان نمیکند. تلاش دوباره پس از پاسخی گمشده کلید دومی میساخت، یا secretی را که تلاش نخست برگردانده بود باطل میکرد. update و revoke پس از شکست شبکه دوباره امتحان میشوند، چون تکرارشان همان کلید را باقی میگذارد، و delete نه.
هرگز گستردهتر از فراخوان
یک کلید هرگز کلیدی گستردهتر از خودش نمیسازد یا به آن دسترسی نمییابد. اسکوپها، نقش، انقضا، حالت و اسکوپ ارسال همه باید درون کلید فراخواننده بگنجند، وگرنه فراخوانی OpenEmail::PermissionError را با کد beyond_caller_authority raise میکند، و param آن محور را نام میبرد. کلیدی که به برخی دامنهها یا نشانیها محدود شده فقط کلیدهای درون اسکوپ ارسال خودش را میبیند. rotate روی خودِ کلید فراخواننده با keys:write هم کار میکند، مانند client.me.rotate.
تأیید دوباره را نمیتوان روی فراخوانیای که با کلید انجام میشود اعمال کرد، پس keys:manage اعتبارنامهای است که اعتبارنامه میسازد. آن را فقط به خودکارسازیای بدهید که کلید صادر میکند، به آن کلید نقش، اسکوپ ارسال و انقضا بدهید، و list_workspace_activity را زیر نظر بگیرید، جایی که هر کاری که انجام میدهد به نام آن ثبت میشود.
گزارش درخواستها و فعالیت
failures = client.keys.list_requests( "4c1b257a66287fd113bd89d0", failed_only: true, since: Time.now - (24 * 60 * 60))puts failures.items.size client.keys.iterate_workspace_activity do |change| puts [change[:keyName], change[:type], change.dig(:actor, :label)].join(" ")endlist_requests و list_activity یک کلید را میخوانند، و list_workspace_requests و list_workspace_activity همهٔ کلیدها یا کلیدهایی را که key_ids: نام میبرد. هرکدام یک همتای list_all_ و یک همتای iterate_ در کنار خود دارند، مانند list_all_requests و iterate_requests. since: و until: را بهصورت یک Time، یک DateTime یا یک String با قالب ISO 8601 میگیرند، و خوانندههای درخواست failed_only: را هم میگیرند.
until در Ruby یک واژهٔ رزروشده است، اما until: همانطور که نوشته شده بهعنوان آرگومان کلیدواژهای کار میکند. باید دیرتر از since: باشد، وگرنه فراخوانی OpenEmail::InvalidRequestError را با کد invalid_parameter raise میکند.