@cursor/bdk 0.2.23 → 0.2.25
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/AGENTS.md +1 -0
- package/dist/artifacts.d.ts +1 -1
- package/dist/artifacts.js +1 -1
- package/dist/bin/agent-serve.d.ts +1 -1
- package/dist/bin/agent-serve.js +48 -12
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +10 -19
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/issues/issues-channel.js +1 -1
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/pagerduty/api.d.ts +74 -0
- package/dist/channels/pagerduty/api.d.ts.map +1 -0
- package/dist/channels/pagerduty/api.js +101 -0
- package/dist/channels/pagerduty/defaults.d.ts +42 -0
- package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
- package/dist/channels/pagerduty/defaults.js +132 -0
- package/dist/channels/pagerduty/events.d.ts +24 -0
- package/dist/channels/pagerduty/events.d.ts.map +1 -0
- package/dist/channels/pagerduty/events.js +38 -0
- package/dist/channels/pagerduty/index.d.ts +31 -0
- package/dist/channels/pagerduty/index.d.ts.map +1 -0
- package/dist/channels/pagerduty/index.js +30 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
- package/dist/channels/pagerduty/payload.d.ts +33 -0
- package/dist/channels/pagerduty/payload.d.ts.map +1 -0
- package/dist/channels/pagerduty/payload.js +150 -0
- package/dist/channels/pagerduty/replay.d.ts +35 -0
- package/dist/channels/pagerduty/replay.d.ts.map +1 -0
- package/dist/channels/pagerduty/replay.js +115 -0
- package/dist/channels/pagerduty/secrets.d.ts +16 -0
- package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
- package/dist/channels/pagerduty/secrets.js +23 -0
- package/dist/channels/pagerduty/self-user.d.ts +51 -0
- package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
- package/dist/channels/pagerduty/self-user.js +157 -0
- package/dist/channels/pagerduty/state.d.ts +31 -0
- package/dist/channels/pagerduty/state.d.ts.map +1 -0
- package/dist/channels/pagerduty/state.js +30 -0
- package/dist/channels/pagerduty/types.d.ts +217 -0
- package/dist/channels/pagerduty/types.d.ts.map +1 -0
- package/dist/channels/pagerduty/types.js +1 -0
- package/dist/channels/runs/runs-channel.js +1 -1
- package/dist/channels/slack/tool-approval-events.js +5 -5
- package/dist/channels.d.ts +14 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +24 -9
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.AXQcJZaf.js → app.BjS1QEI4.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.hlZ2vmun.js → VPLocalSearchBox.BOuvjb5Y.js} +2 -2
- package/dist/docs/assets/chunks/{arc.9KNWdH-l.js → arc.3WR6Jf-y.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BfGzkBHI.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.Btk8-2Rs.js → baseUniq.BUyrgrZE.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BmHm9OH5.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.9POrbDHJ.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
- package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YWZVSM6S.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.Cxr_SFgw.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DtiJyPlD.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.b5gNHJPH.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DmN9yA_M.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Dfm3xgV5.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.sXNxDcJA.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DgBnDUV7.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.D18MEcoN.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CSf3tihh.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.cbfzAfoC.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.6i6P3uu9.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.B9HAIfN6.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.B9baAjUv.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DaBmX_GN.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CJqQJjkb.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CIXBLQhC.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CDgentto.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BWHn6JBQ.js → graph.C5IB6_e_.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.d9VU_ts_.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.BNO79Prj.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CPgUTM1R.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.idl0Eoe1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
- package/dist/docs/assets/chunks/{layout.BY7DIMr6.js → layout.6Um-DVJT.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DYaUDrHd.js → linear.DcTeg4Hn.js} +1 -1
- package/dist/docs/assets/chunks/{min.V6MWb1UC.js → min.CIxkY8Fe.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BRlJXuFS.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BIhkDLcB.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.Bw-_VEL3.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DolEGwxw.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.hMM-8BhN.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bg_CRVDy.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DNWdl34_.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
- package/dist/docs/assets/chunks/{theme.CBW1oolh.js → theme.D5jbBys7.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Cr1wJ1mB.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BltDV9j7.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BWPaUhOs.js → wardley-RL74JXVD.B-FXivgT.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.nsADqCCo.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CCwbO3dK.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
- package/dist/docs/assets/{deployment.md.CtSJ6sF9.js → deployment.md.3MMWuPeV.js} +5 -5
- package/dist/docs/assets/{deployment.md.CtSJ6sF9.lean.js → deployment.md.3MMWuPeV.lean.js} +1 -1
- package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.js → guides_cloud-agents.md.BzbzcOyj.js} +2 -2
- package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.lean.js → guides_cloud-agents.md.BzbzcOyj.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.js → guides_opentelemetry.md.DBQtp7_V.js} +13 -5
- package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
- package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.js → reference_agent-config.md.IplwL25I.js} +1 -2
- package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.lean.js → reference_agent-config.md.IplwL25I.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.OUacPetl.js → reference_extensions.md.DKxTuCIw.js} +11 -8
- package/dist/docs/assets/{reference_extensions.md.OUacPetl.lean.js → reference_extensions.md.DKxTuCIw.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.DrcHZXig.js → reference_instructions.md.BYMVxAkw.js} +4 -4
- package/dist/docs/assets/{reference_instructions.md.DrcHZXig.lean.js → reference_instructions.md.BYMVxAkw.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BqWnJES4.js → reference_schedules.md.03Ryy9ca.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
- package/dist/docs/assets/{style.Dwls12uf.css → style.nMsabY-V.css} +1 -1
- package/dist/docs/assets/templates_agentic-owners.md.CTEnR0jp.js +13 -0
- package/dist/docs/assets/{templates_agentic-owners.md.CvmABtia.lean.js → templates_agentic-owners.md.CTEnR0jp.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/deployment.html +42 -42
- package/dist/docs/deployment.md +9 -4
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +38 -38
- package/dist/docs/guides/cloud-agents.md +1 -0
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/export-grokbot.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +37 -37
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +37 -37
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +49 -41
- package/dist/docs/guides/opentelemetry.md +54 -3
- package/dist/docs/guides/pagerduty.html +119 -0
- package/dist/docs/guides/pagerduty.md +336 -0
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +510 -42
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +38 -39
- package/dist/docs/reference/agent-config.md +0 -1
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +38 -38
- package/dist/docs/reference/channels.md +2 -1
- package/dist/docs/reference/cli.html +43 -38
- package/dist/docs/reference/cli.md +27 -0
- package/dist/docs/reference/connections.html +37 -37
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +47 -44
- package/dist/docs/reference/extensions.md +15 -9
- package/dist/docs/reference/hooks.html +37 -37
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +40 -40
- package/dist/docs/reference/instructions.md +5 -1
- package/dist/docs/reference/memory.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +40 -40
- package/dist/docs/reference/sessions.html +36 -36
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +1 -0
- package/dist/docs/templates/agentic-owners.html +42 -43
- package/dist/docs/templates/agentic-owners.md +55 -23
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/extension.js +1 -1
- package/dist/extensions/jev/extension.js +1 -1
- package/dist/extensions/jev/tools/evaluate.js +1 -1
- package/dist/extensions/slack-communication/extension.js +1 -1
- package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
- package/dist/extensions/slack-communication/tools/edit-message.js +1 -1
- package/dist/extensions/slack-communication/tools/post-card.js +1 -1
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions/slack-communication/tools/post-update.js +1 -1
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/extensions/slack-communication/tools/set-status.js +1 -1
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/internal/approval-gate.d.ts +4 -2
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +2 -1
- package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
- package/dist/internal/builtin-tools/artifacts.js +46 -13
- package/dist/internal/builtin-tools/reminders.js +1 -1
- package/dist/internal/channel-architecture.d.ts +1 -1
- package/dist/internal/channel-architecture.d.ts.map +1 -1
- package/dist/internal/channel-architecture.js +4 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +21 -12
- package/dist/internal/cli-pagerduty.d.ts +32 -0
- package/dist/internal/cli-pagerduty.d.ts.map +1 -0
- package/dist/internal/cli-pagerduty.js +242 -0
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +7 -0
- package/dist/internal/continuation-identity.d.ts +11 -3
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +83 -0
- package/dist/internal/convert-automation/convert-workflow.js +1 -1
- package/dist/internal/convert-grokbot/answers.js +1 -1
- package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
- package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
- package/dist/internal/convert-grokbot/recipe.js +1 -1
- package/dist/internal/cursor/backend-client.d.ts +1 -1
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/credentials.d.ts +1 -1
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/deploy-client.js +1 -1
- package/dist/internal/deploy-manifest.d.ts +11 -4
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +19 -6
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +10 -10
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +10 -10
- package/dist/internal/discovery/channels.d.ts.map +1 -1
- package/dist/internal/discovery/channels.js +20 -16
- package/dist/internal/discovery/context.d.ts +16 -0
- package/dist/internal/discovery/context.d.ts.map +1 -1
- package/dist/internal/discovery/context.js +66 -0
- package/dist/internal/discovery/cursor-plugin.js +1 -1
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
- package/dist/internal/discovery/extension-overlay.js +2 -6
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +3 -0
- package/dist/internal/discovery/instructions.d.ts.map +1 -1
- package/dist/internal/discovery/instructions.js +3 -6
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +3 -6
- package/dist/internal/discovery/project.d.ts +6 -0
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +27 -5
- package/dist/internal/discovery/runtime.d.ts.map +1 -1
- package/dist/internal/discovery/runtime.js +8 -8
- package/dist/internal/discovery.d.ts +1 -1
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +1 -1
- package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
- package/dist/internal/expected-delivery-failure.js +6 -0
- package/dist/internal/factory-resource-channel.d.ts +1 -1
- package/dist/internal/factory-resource-channel.d.ts.map +1 -1
- package/dist/internal/filesystem/sdk-schemas.d.ts +1 -1
- package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
- package/dist/internal/filesystem/sdk-schemas.js +5 -4
- package/dist/internal/filesystem/tools.js +1 -1
- package/dist/internal/hmac-secret-values.d.ts +48 -0
- package/dist/internal/hmac-secret-values.d.ts.map +1 -0
- package/dist/internal/hmac-secret-values.js +68 -0
- package/dist/internal/host-otel.d.ts +2 -1
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/host-otel.js +20 -6
- package/dist/internal/host-platforms.d.ts.map +1 -1
- package/dist/internal/host-platforms.js +8 -2
- package/dist/internal/hosted-delivery-protocol.d.ts +4 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.d.ts +7 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +19 -17
- package/dist/internal/hosting.d.ts +6 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +9 -0
- package/dist/internal/init-scaffold.js +1 -1
- package/dist/internal/interview/agent-questions.d.ts +1 -1
- package/dist/internal/interview/agent-questions.d.ts.map +1 -1
- package/dist/internal/interview/agent-questions.js +1 -1
- package/dist/internal/interview/question.d.ts +1 -1
- package/dist/internal/interview/question.d.ts.map +1 -1
- package/dist/internal/interview/question.js +1 -1
- package/dist/internal/json-schema.d.ts +7 -7
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +14 -17
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +50 -19
- package/dist/internal/otel/config.d.ts +10 -1
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +47 -10
- package/dist/internal/otel/http.d.ts +1 -1
- package/dist/internal/otel/http.d.ts.map +1 -1
- package/dist/internal/otel/http.js +1 -1
- package/dist/internal/otel/runtime.d.ts +17 -14
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +203 -237
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +21 -5
- package/dist/internal/process-memory-telemetry.d.ts +1 -1
- package/dist/internal/process-memory-telemetry.d.ts.map +1 -1
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/sdk-runner.d.ts +2 -3
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +30 -6
- package/dist/internal/secret-alternatives.d.ts +11 -0
- package/dist/internal/secret-alternatives.d.ts.map +1 -0
- package/dist/internal/secret-alternatives.js +13 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +27 -15
- package/dist/internal/session-engine.d.ts +9 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +30 -4
- package/dist/internal/slack-provision-client.js +1 -1
- package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
- package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
- package/dist/internal/sqlite-experimental-warning.js +22 -0
- package/dist/internal/store-api-protocol.d.ts +1 -1
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +1 -1
- package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
- package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
- package/dist/internal/testing/conversation-identity-vectors.js +34 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
- package/dist/internal/testing/hmac-secret-vectors.js +89 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
- package/dist/internal/update-check.d.ts +1 -1
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +1 -1
- package/dist/internal/zod-schema.d.ts +14 -0
- package/dist/internal/zod-schema.d.ts.map +1 -0
- package/dist/internal/zod-schema.js +22 -0
- package/dist/otel.d.ts +1 -2
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +0 -1
- package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
- package/dist/playground/assets/index-BdMwybMt.css +1 -0
- package/dist/playground/assets/index-CHk6O92d.js +62 -0
- package/dist/playground/index.html +2 -2
- package/dist/tools.d.ts +14 -11
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +4 -3
- package/dist/types.d.ts +67 -16
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +9 -4
- package/docs/guides/cloud-agents.md +1 -0
- package/docs/guides/opentelemetry.md +54 -3
- package/docs/guides/pagerduty.md +341 -0
- package/docs/reference/agent-config.md +0 -1
- package/docs/reference/channels.md +2 -1
- package/docs/reference/cli.md +27 -0
- package/docs/reference/extensions.md +15 -9
- package/docs/reference/instructions.md +5 -1
- package/docs/reference/tools.md +1 -0
- package/docs/templates/agentic-owners.md +55 -23
- package/package.json +24 -19
- package/skills/migrate-v2/SKILL.md +1 -1
- package/skills/otel/SKILL.md +24 -7
- package/templates/agentic-owners/README.md +6 -1
- package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
- package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
- package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
- package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
- package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.B3j7LFef.js +0 -1
- package/dist/docs/assets/chunks/channel.RoCpi7X1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.oxdmwwqk.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.oxdmwwqk.js +0 -1
- package/dist/docs/assets/chunks/clone.BkguoIMm.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.7W-btjJ2.js +0 -1
- package/dist/docs/assets/templates_agentic-owners.md.CvmABtia.js +0 -14
- package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
- package/dist/playground/assets/index-BtsbIqV9.css +0 -1
- package/dist/playground/assets/index-CD8VRa25.js +0 -71
- /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
- /package/dist/docs/assets/{reference_schedules.md.BqWnJES4.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The PagerDuty user the agent acts as, for skipping its own echoed
|
|
3
|
+
* actions. Precedence: the authored `selfUserIds`, then the
|
|
4
|
+
* `PAGERDUTY_USER_ID` env var / deployment secret, then inference from the
|
|
5
|
+
* deployment's `PAGERDUTY_TOKEN`.
|
|
6
|
+
*
|
|
7
|
+
* Inference asks `GET /users/me`, which PagerDuty serves only to a
|
|
8
|
+
* user-level REST API key or an OAuth user token. An account-level REST
|
|
9
|
+
* API key or an OAuth app token has no user of its own; with
|
|
10
|
+
* `PAGERDUTY_FROM_EMAIL` set, the user whose email matches it exactly (the
|
|
11
|
+
* `From` user those tokens write as) is used instead. Results are cached
|
|
12
|
+
* in memory per credential set, never in agent storage.
|
|
13
|
+
*/
|
|
14
|
+
import { type PagerDutyClientOptions } from "./api.js";
|
|
15
|
+
import type { PagerDutyChannelOptions } from "./types.js";
|
|
16
|
+
/** Env var / deployment secret naming the agent's own PagerDuty user id. */
|
|
17
|
+
export declare const PAGERDUTY_USER_ID_ENV = "PAGERDUTY_USER_ID";
|
|
18
|
+
export interface PagerDutySelfUserDeps {
|
|
19
|
+
fetch?: typeof fetch;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
warn?: (line: string) => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The secret the agent's user id is read from: a named `selfUserIds`, else
|
|
25
|
+
* `PAGERDUTY_USER_ID`. `undefined` when the ids are authored in code.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pagerDutySelfUserIdSecretName(options: Pick<PagerDutyChannelOptions, "selfUserIds">): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* The user ids the agent acts as, resolved per delivery. Authored ids, a
|
|
30
|
+
* getter, or a named secret are used as given and never fall back. With
|
|
31
|
+
* nothing authored, `PAGERDUTY_USER_ID` (one id) wins, else the id inferred
|
|
32
|
+
* from the channel's token (`PAGERDUTY_TOKEN` unless `token` is set).
|
|
33
|
+
* Empty when none resolves, which turns echo skip off.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolvePagerDutySelfUserIds(input: {
|
|
36
|
+
options: Pick<PagerDutyChannelOptions, "selfUserIds" | "token" | "from" | "apiBaseUrl">;
|
|
37
|
+
deps?: PagerDutySelfUserDeps;
|
|
38
|
+
}): Promise<ReadonlySet<string>>;
|
|
39
|
+
/**
|
|
40
|
+
* The user the channel's token acts as (`token`, else `PAGERDUTY_TOKEN`),
|
|
41
|
+
* cached for an hour per base URL, token, and `From` email (an unresolved
|
|
42
|
+
* answer for five minutes). `undefined` without a token or when PagerDuty
|
|
43
|
+
* names no single user.
|
|
44
|
+
*/
|
|
45
|
+
export declare function inferPagerDutySelfUserId(input?: {
|
|
46
|
+
credentials?: Pick<PagerDutyClientOptions, "token" | "from" | "apiBaseUrl">;
|
|
47
|
+
deps?: PagerDutySelfUserDeps;
|
|
48
|
+
}): Promise<string | undefined>;
|
|
49
|
+
/** Forget every inferred user, so the next delivery asks PagerDuty again. */
|
|
50
|
+
export declare function clearPagerDutySelfUserCache(): void;
|
|
51
|
+
//# sourceMappingURL=self-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-user.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/self-user.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAKL,KAAK,sBAAsB,EAC5B,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAWzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,GACpD,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC,CAAC;IACxF,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAiB/B;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,GAAE;IACL,WAAW,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC,CAAC;IAC5E,IAAI,CAAC,EAAE,qBAAqB,CAAC;CACzB,GACL,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD7B;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The PagerDuty user the agent acts as, for skipping its own echoed
|
|
3
|
+
* actions. Precedence: the authored `selfUserIds`, then the
|
|
4
|
+
* `PAGERDUTY_USER_ID` env var / deployment secret, then inference from the
|
|
5
|
+
* deployment's `PAGERDUTY_TOKEN`.
|
|
6
|
+
*
|
|
7
|
+
* Inference asks `GET /users/me`, which PagerDuty serves only to a
|
|
8
|
+
* user-level REST API key or an OAuth user token. An account-level REST
|
|
9
|
+
* API key or an OAuth app token has no user of its own; with
|
|
10
|
+
* `PAGERDUTY_FROM_EMAIL` set, the user whose email matches it exactly (the
|
|
11
|
+
* `From` user those tokens write as) is used instead. Results are cached
|
|
12
|
+
* in memory per credential set, never in agent storage.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from "node:crypto";
|
|
15
|
+
import { isSecretRef } from "../../types.js";
|
|
16
|
+
import { PAGERDUTY_FROM_EMAIL_ENV, PAGERDUTY_TOKEN_ENV, pagerDutyApiBaseUrl, pagerDutyAuthorizationHeader, } from "./api.js";
|
|
17
|
+
import { resolvePagerDutySecret } from "./secrets.js";
|
|
18
|
+
/** Env var / deployment secret naming the agent's own PagerDuty user id. */
|
|
19
|
+
export const PAGERDUTY_USER_ID_ENV = "PAGERDUTY_USER_ID";
|
|
20
|
+
const RESOLVED_TTL_MS = 60 * 60 * 1000;
|
|
21
|
+
const UNRESOLVED_TTL_MS = 5 * 60 * 1000;
|
|
22
|
+
const LOOKUP_TIMEOUT_MS = 5_000;
|
|
23
|
+
const MAX_CACHED_CREDENTIALS = 256;
|
|
24
|
+
const inferredSelfUsers = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* The secret the agent's user id is read from: a named `selfUserIds`, else
|
|
27
|
+
* `PAGERDUTY_USER_ID`. `undefined` when the ids are authored in code.
|
|
28
|
+
*/
|
|
29
|
+
export function pagerDutySelfUserIdSecretName(options) {
|
|
30
|
+
if (options.selfUserIds === undefined) {
|
|
31
|
+
return PAGERDUTY_USER_ID_ENV;
|
|
32
|
+
}
|
|
33
|
+
return isSecretRef(options.selfUserIds) ? options.selfUserIds.secretName : undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The user ids the agent acts as, resolved per delivery. Authored ids, a
|
|
37
|
+
* getter, or a named secret are used as given and never fall back. With
|
|
38
|
+
* nothing authored, `PAGERDUTY_USER_ID` (one id) wins, else the id inferred
|
|
39
|
+
* from the channel's token (`PAGERDUTY_TOKEN` unless `token` is set).
|
|
40
|
+
* Empty when none resolves, which turns echo skip off.
|
|
41
|
+
*/
|
|
42
|
+
export async function resolvePagerDutySelfUserIds(input) {
|
|
43
|
+
const options = input.options;
|
|
44
|
+
const selfUserIds = options.selfUserIds;
|
|
45
|
+
if (selfUserIds !== undefined) {
|
|
46
|
+
const ids = isSecretRef(selfUserIds)
|
|
47
|
+
? [resolvePagerDutySecret(selfUserIds, selfUserIds.secretName) ?? ""]
|
|
48
|
+
: typeof selfUserIds === "function"
|
|
49
|
+
? (selfUserIds() ?? [])
|
|
50
|
+
: selfUserIds;
|
|
51
|
+
return new Set(ids.map((id) => id.trim()).filter(Boolean));
|
|
52
|
+
}
|
|
53
|
+
const configured = resolvePagerDutySecret(undefined, PAGERDUTY_USER_ID_ENV);
|
|
54
|
+
if (configured !== undefined) {
|
|
55
|
+
return new Set([configured]);
|
|
56
|
+
}
|
|
57
|
+
const inferred = await inferPagerDutySelfUserId({ credentials: options, deps: input.deps });
|
|
58
|
+
return new Set(inferred === undefined ? [] : [inferred]);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The user the channel's token acts as (`token`, else `PAGERDUTY_TOKEN`),
|
|
62
|
+
* cached for an hour per base URL, token, and `From` email (an unresolved
|
|
63
|
+
* answer for five minutes). `undefined` without a token or when PagerDuty
|
|
64
|
+
* names no single user.
|
|
65
|
+
*/
|
|
66
|
+
export async function inferPagerDutySelfUserId(input = {}) {
|
|
67
|
+
const credentials = input.credentials ?? {};
|
|
68
|
+
const deps = input.deps ?? {};
|
|
69
|
+
const token = resolvePagerDutySecret(credentials.token, PAGERDUTY_TOKEN_ENV);
|
|
70
|
+
if (token === undefined) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const from = resolvePagerDutySecret(credentials.from, PAGERDUTY_FROM_EMAIL_ENV);
|
|
74
|
+
const baseUrl = pagerDutyApiBaseUrl(credentials.apiBaseUrl);
|
|
75
|
+
const key = createHash("sha256")
|
|
76
|
+
.update(`${baseUrl}\n${token}\n${from ?? ""}`)
|
|
77
|
+
.digest("hex");
|
|
78
|
+
const now = deps.now ?? Date.now;
|
|
79
|
+
const cached = inferredSelfUsers.get(key);
|
|
80
|
+
if (cached !== undefined && cached.expiresAt > now()) {
|
|
81
|
+
return cached.userId;
|
|
82
|
+
}
|
|
83
|
+
const entry = {
|
|
84
|
+
expiresAt: now() + UNRESOLVED_TTL_MS,
|
|
85
|
+
userId: lookUpSelfUser({ baseUrl, token, from, fetch: deps.fetch ?? fetch }).then((userId) => {
|
|
86
|
+
if (userId === undefined) {
|
|
87
|
+
(deps.warn ?? console.warn)(`[bdk/pagerduty] warn ${PAGERDUTY_TOKEN_ENV} names no single PagerDuty user (an account-level key or app token needs ${PAGERDUTY_FROM_EMAIL_ENV} set to one user's email); set ${PAGERDUTY_USER_ID_ENV} to skip the agent's own actions`);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
entry.expiresAt = now() + RESOLVED_TTL_MS;
|
|
91
|
+
}
|
|
92
|
+
return userId;
|
|
93
|
+
}, (error) => {
|
|
94
|
+
(deps.warn ?? console.warn)(`[bdk/pagerduty] warn could not look up the agent's PagerDuty user; echo skip is off until it resolves: ${error instanceof Error ? error.message : String(error)}`);
|
|
95
|
+
return undefined;
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
inferredSelfUsers.delete(key);
|
|
99
|
+
inferredSelfUsers.set(key, entry);
|
|
100
|
+
while (inferredSelfUsers.size > MAX_CACHED_CREDENTIALS) {
|
|
101
|
+
const oldest = inferredSelfUsers.keys().next().value;
|
|
102
|
+
if (oldest === undefined) {
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
inferredSelfUsers.delete(oldest);
|
|
106
|
+
}
|
|
107
|
+
return entry.userId;
|
|
108
|
+
}
|
|
109
|
+
/** Forget every inferred user, so the next delivery asks PagerDuty again. */
|
|
110
|
+
export function clearPagerDutySelfUserCache() {
|
|
111
|
+
inferredSelfUsers.clear();
|
|
112
|
+
}
|
|
113
|
+
async function lookUpSelfUser(input) {
|
|
114
|
+
const get = async (path) => input.fetch(`${input.baseUrl}${path}`, {
|
|
115
|
+
method: "GET",
|
|
116
|
+
headers: {
|
|
117
|
+
Accept: "application/vnd.pagerduty+json;version=2",
|
|
118
|
+
Authorization: pagerDutyAuthorizationHeader(input.token),
|
|
119
|
+
},
|
|
120
|
+
signal: AbortSignal.timeout(LOOKUP_TIMEOUT_MS),
|
|
121
|
+
});
|
|
122
|
+
const me = await get("/users/me");
|
|
123
|
+
if (me.ok) {
|
|
124
|
+
const id = userIdOf((await me.json()).user);
|
|
125
|
+
if (id !== undefined) {
|
|
126
|
+
return id;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
await me.body?.cancel();
|
|
131
|
+
if (me.status === 401 || me.status >= 500) {
|
|
132
|
+
throw new Error(`GET /users/me answered ${me.status}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (input.from === undefined) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const email = input.from.toLowerCase();
|
|
139
|
+
const found = await get(`/users?query=${encodeURIComponent(input.from)}&limit=100`);
|
|
140
|
+
if (!found.ok) {
|
|
141
|
+
await found.body?.cancel();
|
|
142
|
+
throw new Error(`GET /users?query= answered ${found.status}`);
|
|
143
|
+
}
|
|
144
|
+
const users = (await found.json()).users;
|
|
145
|
+
const matches = (Array.isArray(users) ? users : []).filter((user) => typeof user === "object" &&
|
|
146
|
+
user !== null &&
|
|
147
|
+
typeof user.email === "string" &&
|
|
148
|
+
user.email.toLowerCase() === email);
|
|
149
|
+
return matches.length === 1 ? userIdOf(matches[0]) : undefined;
|
|
150
|
+
}
|
|
151
|
+
function userIdOf(user) {
|
|
152
|
+
if (typeof user !== "object" || user === null) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const id = user.id;
|
|
156
|
+
return typeof id === "string" && id.trim() !== "" ? id.trim() : undefined;
|
|
157
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable per-session PagerDuty channel state, persisted with the turn so
|
|
3
|
+
* stream-event handlers can address the incident without re-parsing the
|
|
4
|
+
* webhook.
|
|
5
|
+
*/
|
|
6
|
+
export interface PagerDutyChannelState {
|
|
7
|
+
/** Incident the latest dispatched event named. */
|
|
8
|
+
incidentId: string | null;
|
|
9
|
+
incidentNumber: number | null;
|
|
10
|
+
/** That incident's dedup key, when the event carried one. */
|
|
11
|
+
incidentKey: string | null;
|
|
12
|
+
serviceId: string | null;
|
|
13
|
+
/** v3 `event_type` that woke the turn. */
|
|
14
|
+
eventType: string | null;
|
|
15
|
+
/** v3 `event.id` that woke the turn. */
|
|
16
|
+
eventId: string | null;
|
|
17
|
+
deliveryId: string | null;
|
|
18
|
+
occurredAt: string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function emptyPagerDutyChannelState(overrides?: Partial<PagerDutyChannelState>): PagerDutyChannelState;
|
|
21
|
+
export declare function pagerDutyChannelStateForEvent(input: {
|
|
22
|
+
eventType: string;
|
|
23
|
+
eventId: string;
|
|
24
|
+
incidentId?: string;
|
|
25
|
+
incidentNumber?: number;
|
|
26
|
+
incidentKey?: string;
|
|
27
|
+
serviceId?: string;
|
|
28
|
+
deliveryId?: string;
|
|
29
|
+
occurredAt?: string;
|
|
30
|
+
}): PagerDutyChannelState;
|
|
31
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6DAA6D;IAC7D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wCAAwC;IACxC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC7C,qBAAqB,CAYvB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,qBAAqB,CAWxB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable per-session PagerDuty channel state, persisted with the turn so
|
|
3
|
+
* stream-event handlers can address the incident without re-parsing the
|
|
4
|
+
* webhook.
|
|
5
|
+
*/
|
|
6
|
+
export function emptyPagerDutyChannelState(overrides = {}) {
|
|
7
|
+
return {
|
|
8
|
+
incidentId: null,
|
|
9
|
+
incidentNumber: null,
|
|
10
|
+
incidentKey: null,
|
|
11
|
+
serviceId: null,
|
|
12
|
+
eventType: null,
|
|
13
|
+
eventId: null,
|
|
14
|
+
deliveryId: null,
|
|
15
|
+
occurredAt: null,
|
|
16
|
+
...overrides,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function pagerDutyChannelStateForEvent(input) {
|
|
20
|
+
return emptyPagerDutyChannelState({
|
|
21
|
+
incidentId: input.incidentId ?? null,
|
|
22
|
+
incidentNumber: input.incidentNumber ?? null,
|
|
23
|
+
incidentKey: input.incidentKey ?? null,
|
|
24
|
+
serviceId: input.serviceId ?? null,
|
|
25
|
+
eventType: input.eventType,
|
|
26
|
+
eventId: input.eventId,
|
|
27
|
+
deliveryId: input.deliveryId ?? null,
|
|
28
|
+
occurredAt: input.occurredAt ?? null,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import type { ContinuationIdentity } from "../../internal/continuation-identity.js";
|
|
2
|
+
import type { AgentCloudOptions, ArtifactsApi, AuthContext, AuthPolicy, ChannelEventHandlers, ChannelStartArgs, HostContext, SecretRef, SendMessageFn } from "../../types.js";
|
|
3
|
+
import type { PagerDutyClient } from "./api.js";
|
|
4
|
+
import type { PagerDutyIncidentLifecycleEvent } from "./events.js";
|
|
5
|
+
import type { PagerDutyChannelState } from "./state.js";
|
|
6
|
+
/** A PagerDuty object reference (`user_reference`, `service_reference`, …). */
|
|
7
|
+
export interface PagerDutyReference {
|
|
8
|
+
id: string;
|
|
9
|
+
/** PagerDuty's `type`, e.g. `user_reference` or `service_reference`. */
|
|
10
|
+
type?: string;
|
|
11
|
+
summary?: string;
|
|
12
|
+
htmlUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
/** The incident a lifecycle event carries as its `data`. */
|
|
15
|
+
export interface PagerDutyIncident {
|
|
16
|
+
id: string;
|
|
17
|
+
number?: number;
|
|
18
|
+
title?: string;
|
|
19
|
+
/** `triggered`, `acknowledged`, or `resolved`. */
|
|
20
|
+
status?: string;
|
|
21
|
+
/** `high` or `low`. */
|
|
22
|
+
urgency?: string;
|
|
23
|
+
/** The dedup key of the alert that opened the incident. */
|
|
24
|
+
incidentKey?: string;
|
|
25
|
+
htmlUrl?: string;
|
|
26
|
+
createdAt?: string;
|
|
27
|
+
service?: PagerDutyReference;
|
|
28
|
+
escalationPolicy?: PagerDutyReference;
|
|
29
|
+
priority?: PagerDutyReference;
|
|
30
|
+
assignees: PagerDutyReference[];
|
|
31
|
+
teams: PagerDutyReference[];
|
|
32
|
+
resolveReason?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The incident a sub-resource event names. PagerDuty sends a reference here,
|
|
36
|
+
* so `incidentKey` is present only when the delivery includes it.
|
|
37
|
+
*/
|
|
38
|
+
export interface PagerDutyIncidentRef extends PagerDutyReference {
|
|
39
|
+
incidentKey?: string;
|
|
40
|
+
}
|
|
41
|
+
/** An incident lifecycle event: `incident.triggered`, `.acknowledged`, … */
|
|
42
|
+
export interface PagerDutyIncidentEvent {
|
|
43
|
+
eventType: PagerDutyIncidentLifecycleEvent;
|
|
44
|
+
/** The event type without its `incident.` prefix: `triggered`, `priority_updated`, … */
|
|
45
|
+
action: string;
|
|
46
|
+
incident: PagerDutyIncident;
|
|
47
|
+
}
|
|
48
|
+
/** `incident.annotated`: a note added to an incident. */
|
|
49
|
+
export interface PagerDutyIncidentNote {
|
|
50
|
+
id?: string;
|
|
51
|
+
content: string;
|
|
52
|
+
/** True when PagerDuty truncated `content` for the webhook. */
|
|
53
|
+
trimmed: boolean;
|
|
54
|
+
incident: PagerDutyIncidentRef;
|
|
55
|
+
}
|
|
56
|
+
/** `incident.responder.added` / `incident.responder.replied`. */
|
|
57
|
+
export interface PagerDutyResponderEvent {
|
|
58
|
+
action: "added" | "replied";
|
|
59
|
+
incident: PagerDutyIncidentRef;
|
|
60
|
+
/** The requested responder. */
|
|
61
|
+
user?: PagerDutyReference;
|
|
62
|
+
escalationPolicy?: PagerDutyReference;
|
|
63
|
+
message?: string;
|
|
64
|
+
/** `pending`, `joined`, or `declined`. */
|
|
65
|
+
state?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface PagerDutyEventContext {
|
|
68
|
+
/** `X-Webhook-Id` of the delivery, when present. */
|
|
69
|
+
deliveryId?: string;
|
|
70
|
+
/** `event.id`: the same across PagerDuty's retries of one event. */
|
|
71
|
+
eventId: string;
|
|
72
|
+
/** `event.event_type`, e.g. `incident.triggered`. */
|
|
73
|
+
eventType: string;
|
|
74
|
+
/** `event.resource_type`, e.g. `incident`. */
|
|
75
|
+
resourceType?: string;
|
|
76
|
+
/** When the change happened in PagerDuty (ISO-8601). */
|
|
77
|
+
occurredAt?: string;
|
|
78
|
+
/** Who made the change: a user, a service integration, or absent for PagerDuty itself. */
|
|
79
|
+
agent?: PagerDutyReference;
|
|
80
|
+
/** The incident the event names, when it names one. */
|
|
81
|
+
incidentId?: string;
|
|
82
|
+
/** That incident's dedup key, when the delivery carries it. */
|
|
83
|
+
incidentKey?: string;
|
|
84
|
+
/** The account subdomain, e.g. `acme` for `acme.pagerduty.com`, read from the event's URLs. */
|
|
85
|
+
accountSubdomain?: string;
|
|
86
|
+
/** The raw `event` record, for fields the typed views omit. */
|
|
87
|
+
payload: Record<string, unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* PagerDuty REST client with the channel's credentials (`token`, `from`,
|
|
90
|
+
* `apiBaseUrl`, else their well-known secrets), read per call.
|
|
91
|
+
*/
|
|
92
|
+
pagerduty: PagerDutyClient;
|
|
93
|
+
/**
|
|
94
|
+
* Channel `send`. Set on every delivery path so a hook can start a turn
|
|
95
|
+
* itself instead of returning `{ auth, message }` or a deferred `{ task }`.
|
|
96
|
+
*/
|
|
97
|
+
send?: SendMessageFn;
|
|
98
|
+
host: HostContext;
|
|
99
|
+
artifacts: ArtifactsApi;
|
|
100
|
+
}
|
|
101
|
+
export type PagerDutyTurnDispatch = {
|
|
102
|
+
auth: AuthContext;
|
|
103
|
+
message?: string;
|
|
104
|
+
title?: string;
|
|
105
|
+
context?: readonly string[];
|
|
106
|
+
};
|
|
107
|
+
/** Bound per-delivery helpers passed to a {@link PagerDutyTaskDispatch.task}. */
|
|
108
|
+
export interface PagerDutyTaskArgs {
|
|
109
|
+
send: SendMessageFn;
|
|
110
|
+
waitUntil: (promise: Promise<unknown>) => void;
|
|
111
|
+
}
|
|
112
|
+
/** Run a host-side handler after the webhook is acknowledged with a 202. */
|
|
113
|
+
export type PagerDutyTaskDispatch = {
|
|
114
|
+
task: (args: PagerDutyTaskArgs) => void | Promise<void>;
|
|
115
|
+
};
|
|
116
|
+
export type PagerDutyDispatch = PagerDutyTurnDispatch | PagerDutyTaskDispatch;
|
|
117
|
+
export type PagerDutyDispatchResult = PagerDutyDispatch | null | Promise<PagerDutyDispatch | null>;
|
|
118
|
+
export type PagerDutyIncidentHook = (ctx: PagerDutyEventContext, event: PagerDutyIncidentEvent) => PagerDutyDispatchResult;
|
|
119
|
+
export type PagerDutyNoteHook = (ctx: PagerDutyEventContext, note: PagerDutyIncidentNote) => PagerDutyDispatchResult;
|
|
120
|
+
export type PagerDutyResponderHook = (ctx: PagerDutyEventContext, responder: PagerDutyResponderEvent) => PagerDutyDispatchResult;
|
|
121
|
+
export type PagerDutyEventHook = (ctx: PagerDutyEventContext, event: {
|
|
122
|
+
eventType: string;
|
|
123
|
+
data: unknown;
|
|
124
|
+
}) => PagerDutyDispatchResult;
|
|
125
|
+
/** One parsed v3 delivery handed to {@link dispatchPagerDutyWebhook}. */
|
|
126
|
+
export interface PagerDutyWebhookDelivery {
|
|
127
|
+
eventType: string;
|
|
128
|
+
/** The whole delivery body, `{ event: { … } }`. */
|
|
129
|
+
payload: Record<string, unknown>;
|
|
130
|
+
deliveryId?: string;
|
|
131
|
+
}
|
|
132
|
+
export interface PagerDutyChannelOptions {
|
|
133
|
+
/**
|
|
134
|
+
* The v3 webhook subscription's signing secret. PagerDuty signs the raw
|
|
135
|
+
* body as `X-PagerDuty-Signature: v1=<hex>`, listing one `v1=` entry per
|
|
136
|
+
* active secret while a secret rotates; any matching entry admits.
|
|
137
|
+
* While the default secret is unset, production stays loopback-strict
|
|
138
|
+
* and `serve --dev` admits unsigned loopback deliveries.
|
|
139
|
+
*
|
|
140
|
+
* Omitted, it names `PAGERDUTY_WEBHOOK_SECRET`: locally that env var; on
|
|
141
|
+
* Cursor hosting the deployment secret of that name, which the control
|
|
142
|
+
* plane verifies before any compute starts. Pass `{ secretName }` to
|
|
143
|
+
* name another secret. Architecture `v2` rejects a literal or getter,
|
|
144
|
+
* which never reaches the manifest.
|
|
145
|
+
*/
|
|
146
|
+
webhookSecret?: string | SecretRef | (() => string | undefined);
|
|
147
|
+
/**
|
|
148
|
+
* PagerDuty user ids this agent acts as. An event whose `agent` is one of
|
|
149
|
+
* them is the agent's own action echoed back, and is acknowledged without
|
|
150
|
+
* running a hook or starting a turn. Pass ids, a getter, or
|
|
151
|
+
* `{ secretName }` naming a secret that holds one id; any of them is used
|
|
152
|
+
* as given. Omitted, each delivery reads the `PAGERDUTY_USER_ID` env var
|
|
153
|
+
* / deployment secret (one id), else infers the user `PAGERDUTY_TOKEN`
|
|
154
|
+
* acts as. When none resolves, echo skip is off.
|
|
155
|
+
*/
|
|
156
|
+
selfUserIds?: readonly string[] | SecretRef | (() => readonly string[] | undefined);
|
|
157
|
+
/**
|
|
158
|
+
* API token for `ctx.pagerduty`, reply notes, and inferring the agent's
|
|
159
|
+
* own user: a REST API key, or an OAuth access token written as
|
|
160
|
+
* `Bearer <token>`. Falls back to `PAGERDUTY_TOKEN`.
|
|
161
|
+
*/
|
|
162
|
+
token?: string | SecretRef | (() => string | undefined);
|
|
163
|
+
/**
|
|
164
|
+
* Email of the PagerDuty user that writes made with an account-level key
|
|
165
|
+
* or app token are attributed to, sent as `From`. Falls back to
|
|
166
|
+
* `PAGERDUTY_FROM_EMAIL`.
|
|
167
|
+
*/
|
|
168
|
+
from?: string | SecretRef | (() => string | undefined);
|
|
169
|
+
/** REST base, e.g. `https://api.eu.pagerduty.com`. Falls back to `PAGERDUTY_API_BASE_URL`. */
|
|
170
|
+
apiBaseUrl?: string;
|
|
171
|
+
/**
|
|
172
|
+
* When true, post each completed reply (and a short note when a turn
|
|
173
|
+
* fails) to the session's incident as a note. Off by default: an agent
|
|
174
|
+
* that writes to PagerDuty through its own path posts only what it asks for.
|
|
175
|
+
*/
|
|
176
|
+
deliverReplies?: boolean;
|
|
177
|
+
/** Route auth chain; defaults follow {@link webhookSecret}. */
|
|
178
|
+
auth?: AuthPolicy[];
|
|
179
|
+
/** Route path under `/v1/channels/<name>`. Defaults to `/`. */
|
|
180
|
+
path?: string;
|
|
181
|
+
/**
|
|
182
|
+
* Pin the v3 event types this channel declares. Published as
|
|
183
|
+
* `meta.pagerdutyWebhookEvents`; defaults to every incident event type.
|
|
184
|
+
*/
|
|
185
|
+
webhookEvents?: readonly string[];
|
|
186
|
+
/**
|
|
187
|
+
* Continuation selector. Omit this to inherit the agent architecture's
|
|
188
|
+
* default (`pagerduty.incident/v2` on v2). Set it explicitly only when
|
|
189
|
+
* migrating persisted identities.
|
|
190
|
+
*/
|
|
191
|
+
continuation?: ContinuationIdentity;
|
|
192
|
+
/**
|
|
193
|
+
* Decide whether an incident lifecycle event starts a turn. Without this
|
|
194
|
+
* hook, `incident.triggered` and `incident.reopened` start one as the
|
|
195
|
+
* event's agent and every other lifecycle event is acknowledged.
|
|
196
|
+
*/
|
|
197
|
+
onIncident?: PagerDutyIncidentHook;
|
|
198
|
+
/** Opt-in `incident.annotated` handler. */
|
|
199
|
+
onNote?: PagerDutyNoteHook;
|
|
200
|
+
/** Opt-in `incident.responder.added` / `.replied` handler. */
|
|
201
|
+
onResponder?: PagerDutyResponderHook;
|
|
202
|
+
/**
|
|
203
|
+
* Catch-all for event types without a typed hook (status updates,
|
|
204
|
+
* conference bridges, workflows, service events). NOT a fallback: typed
|
|
205
|
+
* events never reach it.
|
|
206
|
+
*/
|
|
207
|
+
onEvent?: PagerDutyEventHook;
|
|
208
|
+
/** Per-session cloud options for every turn the channel starts. */
|
|
209
|
+
cloud?: AgentCloudOptions;
|
|
210
|
+
/** Channel stream-event handlers. */
|
|
211
|
+
events?: ChannelEventHandlers<PagerDutyChannelState>;
|
|
212
|
+
/** Called once when the server mounts this channel. */
|
|
213
|
+
onStart?: (args: ChannelStartArgs) => void | Promise<void>;
|
|
214
|
+
/** Called when the server shuts down. */
|
|
215
|
+
onStop?: () => void | Promise<void>;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -76,12 +76,14 @@ export function buildToolApprovalEvents(options = {}) {
|
|
|
76
76
|
[event.data.callId]: posted.ts,
|
|
77
77
|
};
|
|
78
78
|
if (status) {
|
|
79
|
+
// One entry: Slack cycles `loading_messages`, and filler such as
|
|
80
|
+
// "Thinking…" reads as work while nothing runs until the click.
|
|
79
81
|
await setThreadStatus({
|
|
80
82
|
botToken,
|
|
81
83
|
channelId: state.channelId,
|
|
82
84
|
threadTs: state.threadTs,
|
|
83
85
|
status: "Awaiting approval…",
|
|
84
|
-
loadingMessages: ["Awaiting approval…"
|
|
86
|
+
loadingMessages: ["Awaiting approval…"],
|
|
85
87
|
});
|
|
86
88
|
}
|
|
87
89
|
log.info("approval card posted", {
|
|
@@ -156,10 +158,8 @@ export function buildToolApprovalEvents(options = {}) {
|
|
|
156
158
|
channelId: state.channelId,
|
|
157
159
|
threadTs: state.threadTs,
|
|
158
160
|
status: authThreadStatus(event.data.connection),
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
...SLACK_DEFAULT_LOADING_MESSAGES,
|
|
162
|
-
],
|
|
161
|
+
// One entry, as for an approval card.
|
|
162
|
+
loadingMessages: [authThreadStatus(event.data.connection)],
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
log.info("auth card posted", {
|
package/dist/channels.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* ```ts
|
|
10
10
|
* import { defineChannel, POST } from "@cursor/bdk/channels";
|
|
11
|
-
* import { z } from "zod";
|
|
11
|
+
* import { z } from "zod/v3";
|
|
12
12
|
*
|
|
13
13
|
* export default defineChannel({
|
|
14
14
|
* routes: [
|
|
@@ -142,6 +142,7 @@ export type CatchAuthDeclaration = {
|
|
|
142
142
|
header: string;
|
|
143
143
|
secret: string;
|
|
144
144
|
prefix?: string;
|
|
145
|
+
separator?: string;
|
|
145
146
|
}
|
|
146
147
|
/** `publicEndpoint()`: the handler verifies; the control plane only rate limits. */
|
|
147
148
|
| {
|
|
@@ -166,10 +167,22 @@ export declare function sharedSecretAuth(options: {
|
|
|
166
167
|
* under the secret named `secret` (optionally behind a literal `prefix`
|
|
167
168
|
* such as `sha256=`). Same local / hosted / catch semantics as
|
|
168
169
|
* {@link sharedSecretAuth}.
|
|
170
|
+
*
|
|
171
|
+
* Set `separator` for providers that send several signatures in one header
|
|
172
|
+
* while a secret rotates, e.g. PagerDuty's
|
|
173
|
+
* `X-PagerDuty-Signature: v1=<hex>,v1=<hex>` with `prefix: "v1="` and
|
|
174
|
+
* `separator: ","`. The request is admitted when any entry matches.
|
|
175
|
+
*
|
|
176
|
+
* The named secret may hold several signing secrets, one per line (for
|
|
177
|
+
* example one per provider subscription, or old and new during a
|
|
178
|
+
* rotation); any of them verifies. Lines are trimmed and blank lines
|
|
179
|
+
* ignored, a value with no line break is one secret used as-is, and a
|
|
180
|
+
* value holding more secrets than the cap admits nothing.
|
|
169
181
|
*/
|
|
170
182
|
export declare function hmacSignatureAuth(options: {
|
|
171
183
|
header: string;
|
|
172
184
|
secret: string;
|
|
173
185
|
prefix?: string;
|
|
186
|
+
separator?: string;
|
|
174
187
|
}): AuthPolicy;
|
|
175
188
|
//# sourceMappingURL=channels.d.ts.map
|
package/dist/channels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,WAAW,EACX,aAAa,GACd,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|