API キー
`keys.list`、`list_all`、`iterate`、`get`、`create`、`update`、`delete`、`rotate`、`revoke`、そしてリクエストログとアクティビティの読み取り。
すべてのメソッド
from pathlib import Path from openemail import openemail key = openemail.keys.create({ 'name': 'Billing sender', 'scopes': ['emails:send'], 'domainAllowlist': ['billing.acme.com'], 'expiresInMinutes': 60 * 24 * 90,}) secret = Path('.openemail-billing-key')secret.touch(mode=0o600)secret.write_text(key['token']) openemail.keys.update(key['id'], {'enabled': False}) rotated = openemail.keys.rotate(key['id'])secret.write_text(rotated['token']) openemail.keys.revoke(key['id'], {'reason': 'Replaced'})openemail.keys.delete(key['id'])シークレットを返すのは create と rotate だけで、token で一度だけ返す。読み取りはすべて代わりに maskedKey を返す。update は enabled でキーを無効化・有効化でき、これは revoke の元に戻せる代替である。delete は失効済みのキーしか削除しない。読み取りには keys:read、変更には keys:manage が必要。
クライアントが create や rotate をリトライすることはない。応答が失われた後にリトライすると、2 つ目のキーが発行されたり、1 回目の試行で返されたシークレットが無効になったりするからである。update と revoke は、繰り返しても同じキーが残るので読み取りと同じようにリトライされるが、delete はリトライされない。
呼び出し元より広くはならない
キーが自分より広いキーを作ったり、そうしたキーに触れたりすることはない。スコープ、ロール、有効期限、モード、送信範囲のすべてが呼び出し元のキーの内側に収まらなければ、呼び出しは 403 beyond_caller_authority で拒否される。一部のドメインやアドレスに絞り込まれたキーは、自身の送信範囲内のキーしか見えない。呼び出し元のキー自身に対する rotate は、me.rotate() と同じく keys:write でもできる。
再認証はキーによる呼び出しには適用できないため、keys:manage は資格情報を生み出す資格情報である。キーを発行する自動化にだけ与え、そのキーにロール・送信範囲・有効期限を設定し、その行動がすべて記録される list_workspace_activity を見守ること。
リクエストログとアクティビティ
from datetime import datetime, timedelta, timezone from openemail import openemail failures = openemail.keys.list_requests( '4c1b257a66287fd113bd89d0', failed_only=True, since=datetime.now(timezone.utc) - timedelta(days=1),)for request in failures['items']: print(request['status'], request['method'], request['path']) for change in openemail.keys.iterate_workspace_activity(): actor = change['actor'] print(change['keyName'], change['type'], actor['label'] if actor else None)list_requests と list_activity は 1 つのキーを、list_workspace_requests と list_workspace_activity はすべてのキーまたは key_ids で指定したキーを読み、それぞれに list_all_… と iterate_… がある。since と until を受け取り、リクエストを読むものは failed_only も受け取る。
since と until は datetime か ISO 8601 の文字列を受け取る。datetime は UTC で送られ、タイムゾーン情報のない naive なものは、まずローカル時刻として解釈される。
リファレンス
keys.list()完全なリファレンスkeys.list_all()完全なリファレンスkeys.iterate()完全なリファレンスkeys.get()完全なリファレンスkeys.create()完全なリファレンスkeys.update()完全なリファレンスkeys.delete()完全なリファレンスkeys.rotate()完全なリファレンスkeys.revoke()完全なリファレンスkeys.list_requests()完全なリファレンスkeys.list_all_requests()完全なリファレンスkeys.iterate_requests()完全なリファレンスkeys.list_activity()完全なリファレンスkeys.list_all_activity()完全なリファレンスkeys.iterate_activity()完全なリファレンスkeys.list_workspace_requests()完全なリファレンスkeys.list_all_workspace_requests()完全なリファレンスkeys.iterate_workspace_requests()完全なリファレンスkeys.list_workspace_activity()完全なリファレンスkeys.list_all_workspace_activity()完全なリファレンスkeys.iterate_workspace_activity()完全なリファレンス