@absolutejs/voice 0.0.22-beta.173 → 0.0.22-beta.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +43 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -11917,11 +11917,33 @@ var renderVoiceDeliveryRuntimeHTML = (report, options = {}) => {
|
|
|
11917
11917
|
const title = options.title ?? "AbsoluteJS Voice Delivery Runtime";
|
|
11918
11918
|
const tickForm = options.tickPath === false ? "" : `<form method="post" action="${escapeHtml16(options.tickPath ?? "/api/voice-delivery-runtime/tick")}"><button type="submit">Tick delivery workers</button></form>`;
|
|
11919
11919
|
const requeueForm = options.requeueDeadLettersPath === false ? "" : `<form method="post" action="${escapeHtml16(options.requeueDeadLettersPath ?? "/api/voice-delivery-runtime/requeue-dead-letters")}"><button type="submit">Requeue dead letters</button></form>`;
|
|
11920
|
-
|
|
11920
|
+
const snippet = escapeHtml16(`const deliveryRuntime = createVoiceDeliveryRuntime(
|
|
11921
|
+
createVoiceDeliveryRuntimePresetConfig({
|
|
11922
|
+
audit: {
|
|
11923
|
+
deliveries: runtimeStorage.auditDeliveries,
|
|
11924
|
+
leases: runtimeStorage.auditDeliveryLeases,
|
|
11925
|
+
sinks: [auditSink],
|
|
11926
|
+
workerId: 'voice-audit-delivery'
|
|
11927
|
+
},
|
|
11928
|
+
trace: {
|
|
11929
|
+
deliveries: runtimeStorage.traceDeliveries,
|
|
11930
|
+
leases: runtimeStorage.traceDeliveryLeases,
|
|
11931
|
+
sinks: [traceSink],
|
|
11932
|
+
workerId: 'voice-trace-delivery'
|
|
11933
|
+
}
|
|
11934
|
+
})
|
|
11935
|
+
);
|
|
11936
|
+
|
|
11937
|
+
app.use(createVoiceDeliveryRuntimeRoutes({ runtime: deliveryRuntime }));
|
|
11921
11938
|
|
|
11922
|
-
|
|
11923
|
-
|
|
11924
|
-
|
|
11939
|
+
app.use(
|
|
11940
|
+
createVoiceProductionReadinessRoutes({
|
|
11941
|
+
deliveryRuntime,
|
|
11942
|
+
auditDeliveries: runtimeStorage.auditDeliveries,
|
|
11943
|
+
traceDeliveries: runtimeStorage.traceDeliveries
|
|
11944
|
+
})
|
|
11945
|
+
);`);
|
|
11946
|
+
return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>${escapeHtml16(title)}</title><style>body{background:#0f1411;color:#f7f2df;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1080px;padding:32px}a{color:#86efac;text-decoration:none}.hero{background:linear-gradient(135deg,rgba(34,197,94,.18),rgba(14,165,233,.13));border:1px solid #263a30;border-radius:28px;margin-bottom:18px;padding:28px}.eyebrow{color:#86efac;font-weight:900;letter-spacing:.12em;text-transform:uppercase}h1{font-size:clamp(2.2rem,5vw,4.8rem);line-height:.92;margin:.2rem 0 1rem}.status{border:1px solid #64748b;border-radius:999px;display:inline-flex;font-weight:900;padding:8px 12px}.status.running{border-color:rgba(34,197,94,.7);color:#bbf7d0}.muted{color:#b9c3b4}.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin:18px 0}article,.card{background:#151d18;border:1px solid #263a30;border-radius:22px;padding:18px}.primitive{background:#111a15;border-color:#41604a}article span{color:#b9c3b4;display:block;font-weight:800}article strong{display:block;font-size:2.3rem;margin-top:8px}.actions{display:flex;flex-wrap:wrap;gap:10px}button{background:#86efac;border:0;border-radius:999px;color:#07120b;cursor:pointer;font-weight:900;margin-top:12px;padding:10px 14px}pre{background:#09100c;border:1px solid #263a30;border-radius:18px;color:#dcfce7;overflow:auto;padding:16px}.primitive p{color:#c8d8ca;line-height:1.55}.primitive code{color:#bbf7d0}</style></head><body><main><p><a href="/delivery-sinks">Delivery sinks</a></p><section class="hero"><p class="eyebrow">Worker control plane</p><h1>${escapeHtml16(title)}</h1><p class="muted">Inspect queue summaries, manually tick failed/pending audit and trace deliveries, and requeue dead letters after operator review.</p><p class="status ${report.isRunning ? "running" : ""}">${report.isRunning ? "Running" : "Stopped"}</p><p class="muted">Checked ${escapeHtml16(new Date(report.checkedAt).toLocaleString())}</p><div class="actions">${tickForm}${requeueForm}</div></section><section class="grid">${renderSummaryCard("Audit", report.summary.audit)}${renderSummaryCard("Trace", report.summary.trace)}</section><section class="card primitive"><p class="eyebrow">Copy into your app</p><h2><code>createVoiceDeliveryRuntimeRoutes(...)</code> builds this control plane</h2><p>Own the audit and trace delivery queues in your app, mount one runtime route group, and pass the same runtime into production readiness so failed or dead-lettered exports block deploys.</p><pre><code>${snippet}</code></pre></section></main></body></html>`;
|
|
11925
11947
|
};
|
|
11926
11948
|
var createVoiceDeliveryRuntimeRoutes = (options) => {
|
|
11927
11949
|
const path = options.path ?? "/api/voice-delivery-runtime";
|
|
@@ -20985,7 +21007,23 @@ var renderVoiceProductionReadinessHTML = (report, options = {}) => {
|
|
|
20985
21007
|
${check.href ? `<a href="${escapeHtml35(check.href)}">Open surface</a>` : ""}
|
|
20986
21008
|
</article>`;
|
|
20987
21009
|
}).join("");
|
|
20988
|
-
|
|
21010
|
+
const snippet = escapeHtml35(`createVoiceProductionReadinessRoutes({
|
|
21011
|
+
htmlPath: '/production-readiness',
|
|
21012
|
+
path: '/api/production-readiness',
|
|
21013
|
+
gatePath: '/api/production-readiness/gate',
|
|
21014
|
+
profile: createVoiceReadinessProfile('phone-agent', {
|
|
21015
|
+
explain: true,
|
|
21016
|
+
links: {
|
|
21017
|
+
providerContracts: '/provider-contracts',
|
|
21018
|
+
resilience: '/resilience',
|
|
21019
|
+
sessions: '/sessions'
|
|
21020
|
+
}
|
|
21021
|
+
}),
|
|
21022
|
+
providerContractMatrix: loadProviderContractMatrix,
|
|
21023
|
+
providerRoutingContracts: loadProviderRoutingContracts,
|
|
21024
|
+
store: traceStore
|
|
21025
|
+
});`);
|
|
21026
|
+
return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>${escapeHtml35(title)}</title><style>body{background:#0c0f14;color:#f6f2e8;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:1060px;padding:32px}.hero,.primitive,.profile{background:linear-gradient(135deg,rgba(20,184,166,.18),rgba(245,158,11,.12));border:1px solid #26313d;border-radius:28px;margin-bottom:18px;padding:28px}.primitive,.profile{background:#111722}.primitive{border-color:#3a3f2d}.eyebrow{color:#fbbf24;font-weight:900;letter-spacing:.12em;text-transform:uppercase}h1{font-size:clamp(2.4rem,6vw,5rem);line-height:.9;margin:.2rem 0 1rem}.status{display:inline-flex;border:1px solid #3f3f46;border-radius:999px;padding:8px 12px}.primitive code{color:#fde68a}.primitive p{color:#c8ccd3;line-height:1.55;margin:.45rem 0 0}.primitive pre{background:#0b0f16;border:1px solid #2c3440;border-radius:18px;color:#fef3c7;margin:16px 0 0;overflow:auto;padding:16px}.status.pass,.check.pass,.profile-surfaces .pass{border-color:rgba(34,197,94,.55)}.status.warn,.check.warn,.profile-surfaces .warn{border-color:rgba(245,158,11,.65)}.status.fail,.check.fail{border-color:rgba(239,68,68,.75)}.checks{display:grid;gap:14px}.check{align-items:center;background:#141922;border:1px solid #26313d;border-radius:22px;display:grid;gap:16px;grid-template-columns:1fr auto auto;padding:18px}.check span,.profile-surfaces span{color:#a8b0b8;font-size:.78rem;font-weight:900;letter-spacing:.08em}.check h2{margin:.2rem 0}.check p,.profile p{color:#b9c0c8;margin:.2rem 0 0}.check .proof-source{color:#f9d77e;font-weight:800}.check strong{font-size:1.5rem}.profile-surfaces{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));margin-top:16px}.profile-surfaces article{background:#141922;border:1px solid #26313d;border-radius:16px;padding:14px}.profile-surfaces strong{display:block;margin-top:6px}.actions{display:flex;flex-wrap:wrap;gap:10px}.check a,a{color:#fbbf24}button{background:#fbbf24;border:0;border-radius:999px;color:#111827;cursor:pointer;font-weight:800;padding:9px 12px}button:disabled{cursor:wait;opacity:.65}@media(max-width:760px){main{padding:20px}.check{grid-template-columns:1fr}}</style></head><body><main><section class="hero"><p class="eyebrow">Self-hosted readiness</p><h1>${escapeHtml35(title)}</h1><p>One deployable pass/fail report for quality gates, provider failover, session health, handoffs, routing evidence, and optional carrier readiness.</p><p class="status ${escapeHtml35(report.status)}">Overall: ${escapeHtml35(report.status.toUpperCase())}</p><p>Checked ${escapeHtml35(new Date(report.checkedAt).toLocaleString())}</p></section>${profile}<section class="primitive"><p class="eyebrow">Copy into your app</p><h2><code>createVoiceProductionReadinessRoutes(...)</code> builds this deploy gate</h2><p>Mount one package primitive to expose JSON readiness, HTML readiness, and a machine-readable gate route. Feed it the proof stores and contract reports your app already owns.</p><pre><code>${snippet}</code></pre></section><section class="checks">${checks}</section></main><script>document.querySelectorAll("[data-readiness-action]").forEach((button)=>{button.addEventListener("click",async()=>{const url=button.getAttribute("data-action-url");if(!url)return;button.disabled=true;const original=button.textContent;button.textContent="Running...";try{const response=await fetch(url,{method:"POST"});button.textContent=response.ok?"Done. Reloading...":"Failed";if(response.ok)setTimeout(()=>location.reload(),500)}catch{button.textContent="Failed"}finally{setTimeout(()=>{button.disabled=false;button.textContent=original},1500)}})});</script></body></html>`;
|
|
20989
21027
|
};
|
|
20990
21028
|
var createVoiceProductionReadinessRoutes = (options) => {
|
|
20991
21029
|
const path = options.path ?? "/api/production-readiness";
|