Files
git.stella-ops.org/docs/modules/notify/resources/samples/api-deprecation-email.sample.json
master ce5ec9c158
Some checks failed
devportal-offline / build-offline (push) Has been cancelled
Mirror Thin Bundle Sign & Verify / mirror-sign (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
api-governance / spectral-lint (push) Has been cancelled
oas-ci / oas-validate (push) Has been cancelled
feat: Add in-memory implementations for issuer audit, key, repository, and trust management
- Introduced InMemoryIssuerAuditSink to retain audit entries for testing.
- Implemented InMemoryIssuerKeyRepository for deterministic key storage.
- Created InMemoryIssuerRepository to manage issuer records in memory.
- Added InMemoryIssuerTrustRepository for managing issuer trust overrides.
- Each repository utilizes concurrent collections for thread-safe operations.
- Enhanced deprecation tracking with a comprehensive YAML schema for API governance.
2025-12-11 19:47:43 +02:00

36 lines
5.1 KiB
JSON

{
"schemaVersion": "notify.template.api-deprecation@1",
"templateId": "api-deprecation-email",
"tenantId": "_system",
"channelType": "email",
"key": "api.deprecation.announced",
"locale": "en-US",
"subject": "[StellaOps] API Deprecation Notice: {{method}} {{path}} ({{service}})",
"description": "Email notification template for API deprecation announcements",
"body": "<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.6; color: #333; }\n .container { max-width: 600px; margin: 0 auto; padding: 20px; }\n .header { background: #f59e0b; color: white; padding: 20px; border-radius: 8px 8px 0 0; }\n .content { background: #f9fafb; padding: 20px; border: 1px solid #e5e7eb; border-top: none; border-radius: 0 0 8px 8px; }\n .warning-icon { font-size: 24px; }\n h1 { margin: 0; font-size: 20px; }\n .detail-row { margin: 12px 0; }\n .label { font-weight: 600; color: #6b7280; }\n .value { font-family: 'SF Mono', Monaco, monospace; background: #e5e7eb; padding: 2px 6px; border-radius: 4px; }\n .sunset-warning { background: #fef3c7; border: 1px solid #f59e0b; padding: 12px; border-radius: 6px; margin: 16px 0; }\n .btn { display: inline-block; padding: 10px 20px; background: #3b82f6; color: white; text-decoration: none; border-radius: 6px; margin-right: 10px; }\n .btn-secondary { background: #6b7280; }\n .footer { margin-top: 20px; font-size: 12px; color: #9ca3af; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <span class=\"warning-icon\">⚠️</span>\n <h1>API Deprecation Notice</h1>\n </div>\n <div class=\"content\">\n <div class=\"detail-row\">\n <span class=\"label\">Service:</span>\n <span class=\"value\">{{service}}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"label\">Endpoint:</span>\n <span class=\"value\">{{method}} {{path}}</span>\n </div>\n {{#operationId}}\n <div class=\"detail-row\">\n <span class=\"label\">Operation:</span>\n <span class=\"value\">{{operationId}}</span>\n </div>\n {{/operationId}}\n <div class=\"detail-row\">\n <span class=\"label\">Deprecated:</span>\n <span>{{deprecatedAt}}</span>\n </div>\n <div class=\"sunset-warning\">\n <strong>Sunset Date:</strong> {{sunsetAt}}<br>\n <strong>{{daysUntilSunset}} days remaining</strong>\n </div>\n {{#reason}}\n <div class=\"detail-row\">\n <span class=\"label\">Reason:</span>\n <p>{{reason}}</p>\n </div>\n {{/reason}}\n {{#successorPath}}\n <div class=\"detail-row\">\n <span class=\"label\">Replacement Endpoint:</span>\n <span class=\"value\">{{successorPath}}</span>\n </div>\n {{/successorPath}}\n <div style=\"margin-top: 20px;\">\n {{#migrationGuide}}<a href=\"{{migrationGuide}}\" class=\"btn\">Migration Guide</a>{{/migrationGuide}}\n {{#changelogUrl}}<a href=\"{{changelogUrl}}\" class=\"btn btn-secondary\">View Changelog</a>{{/changelogUrl}}\n </div>\n <div class=\"footer\">\n <p>Please update your integrations before the sunset date to avoid service disruption.</p>\n <p>This is an automated notification from StellaOps API Governance.</p>\n </div>\n </div>\n </div>\n</body>\n</html>",
"renderMode": "html",
"format": "email",
"metadata": {
"priority": "high",
"category": "api-governance",
"tags": ["deprecation", "api", "migration"]
},
"placeholders": [
{ "name": "service", "description": "Service name owning the deprecated endpoint", "example": "authority", "required": true },
{ "name": "path", "description": "API path of the deprecated endpoint", "example": "/v1/tokens", "required": true },
{ "name": "method", "description": "HTTP method", "example": "POST", "required": true },
{ "name": "operationId", "description": "OpenAPI operation ID", "example": "createToken", "required": false },
{ "name": "deprecatedAt", "description": "When the endpoint was deprecated", "example": "2025-01-15", "required": true },
{ "name": "sunsetAt", "description": "When the endpoint will be removed", "example": "2025-07-15", "required": true },
{ "name": "daysUntilSunset", "description": "Days remaining until sunset", "example": "180", "required": true },
{ "name": "reason", "description": "Deprecation reason", "example": "Replaced by v2 endpoint", "required": false },
{ "name": "successorPath", "description": "Replacement endpoint path", "example": "/v2/tokens", "required": false },
{ "name": "migrationGuide", "description": "URL to migration documentation", "example": "https://docs.stella-ops.org/migration/tokens-v2", "required": false },
{ "name": "changelogUrl", "description": "URL to the changelog entry", "example": "https://docs.stella-ops.org/changelog#2025-01-15", "required": false }
],
"createdBy": "api-governance-guild",
"createdAt": "2025-12-11T00:00:00Z",
"updatedBy": "api-governance-guild",
"updatedAt": "2025-12-11T00:00:00Z"
}