문서로 건너뛰기
SDK

API 키

`keys.list`, `listAll`, `iterate`, `get`, `create`, `update`, `delete`, `rotate`, `revoke`, 그리고 요청 로그와 활동을 읽는 메서드.

모든 메서드

keys.ts
const key = await openemail.keys.create({  name: 'Billing sender',  scopes: ['emails:send'],  domainAllowlist: ['billing.acme.com'],  expiresInMinutes: 60 * 24 * 90,}) await store(key.token) await openemail.keys.update(key.id, { enabled: false })const rotated = await openemail.keys.rotate(key.id)await openemail.keys.revoke(key.id, { reason: 'Replaced' })await openemail.keys.delete(key.id)

시크릿을 돌려주는 호출은 createrotate뿐이며, token으로 한 번만 돌려줍니다. 모든 읽기는 대신 maskedKey를 돌려줍니다. updateenabled로 키를 끄고 켜는데, 이는 revoke의 되돌릴 수 있는 대안이고, delete는 폐기된 키만 없앱니다. 읽기에는 keys:read, 모든 변경에는 keys:manage가 필요합니다.

호출자보다 넓지 않게

키는 자신보다 넓은 키를 만들거나 그런 키에 닿지 않습니다. 스코프, 역할, 만료, 모드, 발신 범위가 모두 호출하는 키 안에 있어야 하며, 그렇지 않으면 호출은 403 beyond_caller_authority로 거부됩니다. 일부 도메인이나 주소로 좁혀진 키는 자기 발신 범위 안의 키만 봅니다. 호출하는 키 자신에 대한 rotateme.rotate()처럼 keys:write로도 됩니다.

재인증은 키로 한 호출에는 적용할 수 없으므로 keys:manage는 자격 증명을 만들어 내는 자격 증명입니다. 키를 발급하는 자동화에만 주고, 그 키에 역할·발신 범위·만료를 주고, 그 모든 행동이 기록되는 listWorkspaceActivity를 지켜보세요.

요청 로그와 활동

key-logs.ts
const failures = await openemail.keys.listRequests('4c1b257a66287fd113bd89d0', {  failedOnly: true,  since: new Date(Date.now() - 24 * 60 * 60 * 1000),}) for await (const change of openemail.keys.iterateWorkspaceActivity()) {  console.log(change.keyName, change.type, change.actor?.label)}

listRequestslistActivity는 키 하나를, listWorkspaceRequestslistWorkspaceActivity는 모든 키나 keyIds로 지정한 키를 읽으며, 각각 옆에 listAll…iterate…가 있습니다. sinceuntil을 받고, 요청을 읽는 메서드는 failedOnly도 받습니다.