مفاتيح API
`keys.list` و`listAll` و`iterate` و`get` و`create` و`update` و`delete` و`rotate` و`revoke`، وقارئات سجل الطلبات والنشاط.
كل التوابع
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)create وrotate هما الاستدعاءان الوحيدان اللذان يعيدان سرًّا، في token، مرة واحدة. وتعيد كل قراءة maskedKey بدلًا منه. يوقف update المفتاح ويشغّله بـenabled، وهو البديل القابل للتراجع عن revoke، ولا يزيل delete إلا مفتاحًا أُبطل. تتطلب القراءة keys:read ويتطلب كل تغيير keys:manage.
لا يتجاوز المستدعي أبدًا
لا ينشئ المفتاح أبدًا مفتاحًا أوسع منه ولا يصل إليه: يجب أن تبقى النطاقات والدور وانتهاء الصلاحية والوضع ونطاق الإرسال كلها داخل المفتاح المستدعي، وإلا رُفض الاستدعاء بـ403 beyond_caller_authority. المفتاح المقيّد ببعض النطاقات أو العناوين لا يرى إلا المفاتيح الواقعة داخل نطاق إرساله. ويعمل rotate على المفتاح المستدعي نفسه أيضًا بـkeys:write، مثل me.rotate().
لا يمكن تطبيق التحقق الإضافي على استدعاء يجري بمفتاح، لذا فإن keys:manage اعتماد يصنع اعتمادات. امنحه فقط لأتمتة تصدر المفاتيح، وامنح ذلك المفتاح دورًا ونطاق إرسال وانتهاء صلاحية، وراقب listWorkspaceActivity حيث يُسجَّل كل ما يفعله باسمه.
سجل الطلبات والنشاط
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)}يقرأ listRequests وlistActivity مفتاحًا واحدًا، ويقرأ listWorkspaceRequests وlistWorkspaceActivity كل المفاتيح أو تلك التي يسمّيها keyIds، ولكل منها listAll… وiterate… بجانبه. تقبل since وuntil، وتقبل قارئات الطلبات أيضًا failedOnly.