@ixo/openhands-sdk 0.6.0 → 0.8.0
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/README.md +6 -7
- package/dist/cjs/campaign/spots.js +3 -3
- package/dist/cjs/chain/allowance.d.ts +6 -2
- package/dist/cjs/chain/allowance.d.ts.map +1 -1
- package/dist/cjs/chain/allowance.js +47 -19
- package/dist/cjs/chain/allowance.js.map +1 -1
- package/dist/cjs/chain/ask.d.ts +6 -1
- package/dist/cjs/chain/ask.d.ts.map +1 -1
- package/dist/cjs/chain/ask.js +13 -6
- package/dist/cjs/chain/ask.js.map +1 -1
- package/dist/cjs/chain/askyBase.d.ts +36 -0
- package/dist/cjs/chain/askyBase.d.ts.map +1 -0
- package/dist/cjs/chain/askyBase.js +56 -0
- package/dist/cjs/chain/askyBase.js.map +1 -0
- package/dist/cjs/chain/assist.d.ts +52 -0
- package/dist/cjs/chain/assist.d.ts.map +1 -0
- package/dist/cjs/chain/assist.js +99 -0
- package/dist/cjs/chain/assist.js.map +1 -0
- package/dist/cjs/chain/campaignMint.d.ts +92 -0
- package/dist/cjs/chain/campaignMint.d.ts.map +1 -0
- package/dist/cjs/chain/campaignMint.js +136 -0
- package/dist/cjs/chain/campaignMint.js.map +1 -0
- package/dist/cjs/chain/claimIncentives.d.ts +17 -0
- package/dist/cjs/chain/claimIncentives.d.ts.map +1 -0
- package/dist/cjs/chain/claimIncentives.js +22 -0
- package/dist/cjs/chain/claimIncentives.js.map +1 -0
- package/dist/cjs/chain/draftMessages.d.ts +12 -0
- package/dist/cjs/chain/draftMessages.d.ts.map +1 -0
- package/dist/cjs/chain/draftMessages.js +85 -0
- package/dist/cjs/chain/draftMessages.js.map +1 -0
- package/dist/cjs/chain/entityShape.d.ts +1 -1
- package/dist/cjs/chain/entityShape.d.ts.map +1 -1
- package/dist/cjs/chain/entityShape.js +5 -5
- package/dist/cjs/chain/entityShape.js.map +1 -1
- package/dist/cjs/chain/env.js +1 -1
- package/dist/cjs/chain/env.js.map +1 -1
- package/dist/cjs/chain/gate.d.ts +7 -0
- package/dist/cjs/chain/gate.d.ts.map +1 -1
- package/dist/cjs/chain/gate.js +26 -10
- package/dist/cjs/chain/gate.js.map +1 -1
- package/dist/cjs/chain/guest.d.ts +10 -0
- package/dist/cjs/chain/guest.d.ts.map +1 -1
- package/dist/cjs/chain/guest.js +3 -2
- package/dist/cjs/chain/guest.js.map +1 -1
- package/dist/cjs/chain/inviteAnswer.d.ts +32 -0
- package/dist/cjs/chain/inviteAnswer.d.ts.map +1 -0
- package/dist/cjs/chain/inviteAnswer.js +36 -0
- package/dist/cjs/chain/inviteAnswer.js.map +1 -0
- package/dist/cjs/chain/inviteMessages.d.ts +65 -32
- package/dist/cjs/chain/inviteMessages.d.ts.map +1 -1
- package/dist/cjs/chain/inviteMessages.js +84 -30
- package/dist/cjs/chain/inviteMessages.js.map +1 -1
- package/dist/cjs/chain/inviteProof.d.ts +16 -1
- package/dist/cjs/chain/inviteProof.d.ts.map +1 -1
- package/dist/cjs/chain/inviteProof.js +19 -1
- package/dist/cjs/chain/inviteProof.js.map +1 -1
- package/dist/cjs/chain/lane.d.ts +16 -0
- package/dist/cjs/chain/lane.d.ts.map +1 -1
- package/dist/cjs/chain/lane.js +25 -1
- package/dist/cjs/chain/lane.js.map +1 -1
- package/dist/cjs/chain/orgReviewBilling.js +1 -1
- package/dist/cjs/chain/orgReviewBilling.js.map +1 -1
- package/dist/cjs/chain/personReview.d.ts.map +1 -1
- package/dist/cjs/chain/personReview.js +18 -11
- package/dist/cjs/chain/personReview.js.map +1 -1
- package/dist/cjs/chain/reviewBilling.d.ts.map +1 -1
- package/dist/cjs/chain/reviewBilling.js +1 -1
- package/dist/cjs/chain/reviewBilling.js.map +1 -1
- package/dist/cjs/chain/session.d.ts +9 -1
- package/dist/cjs/chain/session.d.ts.map +1 -1
- package/dist/cjs/chain/session.js +13 -15
- package/dist/cjs/chain/session.js.map +1 -1
- package/dist/cjs/chain/sessionEvents.d.ts +4 -0
- package/dist/cjs/chain/sessionEvents.d.ts.map +1 -0
- package/dist/cjs/chain/sessionEvents.js +15 -0
- package/dist/cjs/chain/sessionEvents.js.map +1 -0
- package/dist/cjs/chain/takeBack.d.ts +32 -0
- package/dist/cjs/chain/takeBack.d.ts.map +1 -1
- package/dist/cjs/chain/takeBack.js +89 -12
- package/dist/cjs/chain/takeBack.js.map +1 -1
- package/dist/cjs/chain/union.js +1 -1
- package/dist/cjs/chain/why.d.ts +6 -2
- package/dist/cjs/chain/why.d.ts.map +1 -1
- package/dist/cjs/chain/why.js +11 -2
- package/dist/cjs/chain/why.js.map +1 -1
- package/dist/cjs/chain.d.ts +1 -0
- package/dist/cjs/chain.d.ts.map +1 -1
- package/dist/cjs/chain.js +3 -1
- package/dist/cjs/chain.js.map +1 -1
- package/dist/cjs/config.d.ts +7 -1
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +4 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/data/actionDraft.d.ts +304 -0
- package/dist/cjs/data/actionDraft.d.ts.map +1 -0
- package/dist/cjs/data/actionDraft.js +470 -0
- package/dist/cjs/data/actionDraft.js.map +1 -0
- package/dist/cjs/data/actionDraftWords.d.ts +37 -0
- package/dist/cjs/data/actionDraftWords.d.ts.map +1 -0
- package/dist/cjs/data/actionDraftWords.js +55 -0
- package/dist/cjs/data/actionDraftWords.js.map +1 -0
- package/dist/cjs/data/agent.d.ts.map +1 -1
- package/dist/cjs/data/agent.js +36 -1
- package/dist/cjs/data/agent.js.map +1 -1
- package/dist/cjs/data/askyProtocol.d.ts +13 -0
- package/dist/cjs/data/askyProtocol.d.ts.map +1 -0
- package/dist/cjs/data/askyProtocol.js +19 -0
- package/dist/cjs/data/askyProtocol.js.map +1 -0
- package/dist/cjs/data/board/answer.d.ts +12 -0
- package/dist/cjs/data/board/answer.d.ts.map +1 -0
- package/dist/cjs/data/board/answer.js +41 -0
- package/dist/cjs/data/board/answer.js.map +1 -0
- package/dist/cjs/data/board/assemble.js +2 -2
- package/dist/cjs/data/board/facts.d.ts +1 -1
- package/dist/cjs/data/board/facts.d.ts.map +1 -1
- package/dist/cjs/data/board/facts.js +6 -2
- package/dist/cjs/data/board/facts.js.map +1 -1
- package/dist/cjs/data/board/fixtures.d.ts.map +1 -1
- package/dist/cjs/data/board/fixtures.js +2 -1
- package/dist/cjs/data/board/fixtures.js.map +1 -1
- package/dist/cjs/data/board/read.d.ts +2 -0
- package/dist/cjs/data/board/read.d.ts.map +1 -1
- package/dist/cjs/data/board/read.js +24 -10
- package/dist/cjs/data/board/read.js.map +1 -1
- package/dist/cjs/data/board/types.d.ts +16 -0
- package/dist/cjs/data/board/types.d.ts.map +1 -1
- package/dist/cjs/data/board/types.js +9 -1
- package/dist/cjs/data/board/types.js.map +1 -1
- package/dist/cjs/data/checkers.d.ts +33 -7
- package/dist/cjs/data/checkers.d.ts.map +1 -1
- package/dist/cjs/data/checkers.js +165 -55
- package/dist/cjs/data/checkers.js.map +1 -1
- package/dist/cjs/data/decisionIdentity.d.ts +10 -0
- package/dist/cjs/data/decisionIdentity.d.ts.map +1 -0
- package/dist/cjs/data/decisionIdentity.js +19 -0
- package/dist/cjs/data/decisionIdentity.js.map +1 -0
- package/dist/cjs/data/displayNames.d.ts +7 -1
- package/dist/cjs/data/displayNames.d.ts.map +1 -1
- package/dist/cjs/data/displayNames.js +7 -1
- package/dist/cjs/data/displayNames.js.map +1 -1
- package/dist/cjs/data/docUrls.d.ts +5 -0
- package/dist/cjs/data/docUrls.d.ts.map +1 -1
- package/dist/cjs/data/docUrls.js +18 -1
- package/dist/cjs/data/docUrls.js.map +1 -1
- package/dist/cjs/data/draftUploads.d.ts +145 -0
- package/dist/cjs/data/draftUploads.d.ts.map +1 -0
- package/dist/cjs/data/draftUploads.js +293 -0
- package/dist/cjs/data/draftUploads.js.map +1 -0
- package/dist/cjs/data/emailKinds.d.ts +56 -0
- package/dist/cjs/data/emailKinds.d.ts.map +1 -0
- package/dist/cjs/data/emailKinds.js +39 -0
- package/dist/cjs/data/emailKinds.js.map +1 -0
- package/dist/cjs/data/engine.js +1 -1
- package/dist/cjs/data/engine.js.map +1 -1
- package/dist/cjs/data/engineUrl.d.ts +5 -4
- package/dist/cjs/data/engineUrl.d.ts.map +1 -1
- package/dist/cjs/data/engineUrl.js +12 -6
- package/dist/cjs/data/engineUrl.js.map +1 -1
- package/dist/cjs/data/envelope.d.ts +9 -2
- package/dist/cjs/data/envelope.d.ts.map +1 -1
- package/dist/cjs/data/envelope.js +10 -3
- package/dist/cjs/data/envelope.js.map +1 -1
- package/dist/cjs/data/format.d.ts +10 -0
- package/dist/cjs/data/format.d.ts.map +1 -1
- package/dist/cjs/data/format.js +8 -1
- package/dist/cjs/data/format.js.map +1 -1
- package/dist/cjs/data/install.d.ts +57 -131
- package/dist/cjs/data/install.d.ts.map +1 -1
- package/dist/cjs/data/install.js +95 -182
- package/dist/cjs/data/install.js.map +1 -1
- package/dist/cjs/data/onAsks.d.ts +57 -0
- package/dist/cjs/data/onAsks.d.ts.map +1 -0
- package/dist/cjs/data/onAsks.js +78 -0
- package/dist/cjs/data/onAsks.js.map +1 -0
- package/dist/cjs/data/openness.d.ts +3 -0
- package/dist/cjs/data/openness.d.ts.map +1 -1
- package/dist/cjs/data/openness.js +19 -7
- package/dist/cjs/data/openness.js.map +1 -1
- package/dist/cjs/data/orgPayouts.d.ts +1 -0
- package/dist/cjs/data/orgPayouts.d.ts.map +1 -1
- package/dist/cjs/data/orgPayouts.js +4 -2
- package/dist/cjs/data/orgPayouts.js.map +1 -1
- package/dist/cjs/data/payoutObservation.d.ts +30 -0
- package/dist/cjs/data/payoutObservation.d.ts.map +1 -0
- package/dist/cjs/data/payoutObservation.js +219 -0
- package/dist/cjs/data/payoutObservation.js.map +1 -0
- package/dist/cjs/data/profiles.d.ts +37 -2
- package/dist/cjs/data/profiles.d.ts.map +1 -1
- package/dist/cjs/data/profiles.js +121 -16
- package/dist/cjs/data/profiles.js.map +1 -1
- package/dist/cjs/data/queue.d.ts.map +1 -1
- package/dist/cjs/data/queue.js +36 -1
- package/dist/cjs/data/queue.js.map +1 -1
- package/dist/cjs/data/receipt.d.ts +4 -0
- package/dist/cjs/data/receipt.d.ts.map +1 -1
- package/dist/cjs/data/receipt.js +5 -2
- package/dist/cjs/data/receipt.js.map +1 -1
- package/dist/cjs/data/threads.d.ts +9 -1
- package/dist/cjs/data/threads.d.ts.map +1 -1
- package/dist/cjs/data/threads.js +5 -3
- package/dist/cjs/data/threads.js.map +1 -1
- package/dist/cjs/data/trace.d.ts +1 -0
- package/dist/cjs/data/trace.d.ts.map +1 -1
- package/dist/cjs/data/trace.js +4 -2
- package/dist/cjs/data/trace.js.map +1 -1
- package/dist/cjs/data/traceWords.d.ts +5 -1
- package/dist/cjs/data/traceWords.d.ts.map +1 -1
- package/dist/cjs/data/traceWords.js +20 -5
- package/dist/cjs/data/traceWords.js.map +1 -1
- package/dist/cjs/data/types.js +1 -1
- package/dist/cjs/data/types.js.map +1 -1
- package/dist/cjs/discovery.d.ts.map +1 -1
- package/dist/cjs/discovery.js +3 -1
- package/dist/cjs/discovery.js.map +1 -1
- package/dist/cjs/names/client.d.ts +10 -0
- package/dist/cjs/names/client.d.ts.map +1 -0
- package/dist/cjs/names/client.js +757 -0
- package/dist/cjs/names/client.js.map +7 -0
- package/dist/cjs/names/names.d.ts +93 -0
- package/dist/cjs/names/names.d.ts.map +1 -0
- package/dist/cjs/names/names.js +154 -0
- package/dist/cjs/names/names.js.map +1 -0
- package/dist/cjs/names.d.ts +14 -0
- package/dist/cjs/names.d.ts.map +1 -0
- package/dist/cjs/names.js +30 -0
- package/dist/cjs/names.js.map +1 -0
- package/dist/cjs/rubric/askyRubric.d.ts +70 -0
- package/dist/cjs/rubric/askyRubric.d.ts.map +1 -0
- package/dist/cjs/rubric/askyRubric.js +163 -0
- package/dist/cjs/rubric/askyRubric.js.map +1 -0
- package/dist/cjs/rubric/bridge.js +2 -2
- package/dist/cjs/rubric/bridge.js.map +1 -1
- package/dist/cjs/rubric/call.d.ts +5 -0
- package/dist/cjs/rubric/call.d.ts.map +1 -1
- package/dist/cjs/rubric/call.js +10 -2
- package/dist/cjs/rubric/call.js.map +1 -1
- package/dist/cjs/rubric/callChecks.d.ts +2 -0
- package/dist/cjs/rubric/callChecks.d.ts.map +1 -1
- package/dist/cjs/rubric/callChecks.js +7 -2
- package/dist/cjs/rubric/callChecks.js.map +1 -1
- package/dist/cjs/rubric/callLimits.js +2 -2
- package/dist/cjs/rubric/callPrompt.d.ts +7 -0
- package/dist/cjs/rubric/callPrompt.d.ts.map +1 -0
- package/dist/cjs/rubric/callPrompt.js +9 -0
- package/dist/cjs/rubric/callPrompt.js.map +1 -0
- package/dist/cjs/rubric/draft.d.ts +1 -1
- package/dist/cjs/rubric/draft.d.ts.map +1 -1
- package/dist/cjs/rubric/draft.js +1 -1
- package/dist/cjs/rubric/feeLine.d.ts +12 -3
- package/dist/cjs/rubric/feeLine.d.ts.map +1 -1
- package/dist/cjs/rubric/feeLine.js +19 -8
- package/dist/cjs/rubric/feeLine.js.map +1 -1
- package/dist/cjs/rubric/leg.d.ts +5 -7
- package/dist/cjs/rubric/leg.d.ts.map +1 -1
- package/dist/cjs/rubric/leg.js +7 -33
- package/dist/cjs/rubric/leg.js.map +1 -1
- package/dist/cjs/rubric/marketPlan.js +7 -7
- package/dist/cjs/rubric/marketPlan.js.map +1 -1
- package/dist/cjs/rubric/report.d.ts.map +1 -1
- package/dist/cjs/rubric/report.js +4 -4
- package/dist/cjs/rubric/report.js.map +1 -1
- package/dist/cjs/rubric/reportTemplate.d.ts +12 -2
- package/dist/cjs/rubric/reportTemplate.d.ts.map +1 -1
- package/dist/cjs/rubric/reportTemplate.js +33 -18
- package/dist/cjs/rubric/reportTemplate.js.map +1 -1
- package/dist/cjs/rubric/survey.js +2 -2
- package/dist/cjs/rubric/survey.js.map +1 -1
- package/dist/cjs/rubric/terms.d.ts +9 -6
- package/dist/cjs/rubric/terms.d.ts.map +1 -1
- package/dist/cjs/rubric/terms.js +7 -8
- package/dist/cjs/rubric/terms.js.map +1 -1
- package/dist/esm/campaign/spots.js +3 -3
- package/dist/esm/chain/allowance.d.ts +6 -2
- package/dist/esm/chain/allowance.d.ts.map +1 -1
- package/dist/esm/chain/allowance.js +45 -19
- package/dist/esm/chain/allowance.js.map +1 -1
- package/dist/esm/chain/ask.d.ts +6 -1
- package/dist/esm/chain/ask.d.ts.map +1 -1
- package/dist/esm/chain/ask.js +14 -7
- package/dist/esm/chain/ask.js.map +1 -1
- package/dist/esm/chain/askyBase.d.ts +36 -0
- package/dist/esm/chain/askyBase.d.ts.map +1 -0
- package/dist/esm/chain/askyBase.js +51 -0
- package/dist/esm/chain/askyBase.js.map +1 -0
- package/dist/esm/chain/assist.d.ts +52 -0
- package/dist/esm/chain/assist.d.ts.map +1 -0
- package/dist/esm/chain/assist.js +89 -0
- package/dist/esm/chain/assist.js.map +1 -0
- package/dist/esm/chain/campaignMint.d.ts +92 -0
- package/dist/esm/chain/campaignMint.d.ts.map +1 -0
- package/dist/esm/chain/campaignMint.js +127 -0
- package/dist/esm/chain/campaignMint.js.map +1 -0
- package/dist/esm/chain/claimIncentives.d.ts +17 -0
- package/dist/esm/chain/claimIncentives.d.ts.map +1 -0
- package/dist/esm/chain/claimIncentives.js +19 -0
- package/dist/esm/chain/claimIncentives.js.map +1 -0
- package/dist/esm/chain/draftMessages.d.ts +12 -0
- package/dist/esm/chain/draftMessages.d.ts.map +1 -0
- package/dist/esm/chain/draftMessages.js +47 -0
- package/dist/esm/chain/draftMessages.js.map +1 -0
- package/dist/esm/chain/entityShape.d.ts +1 -1
- package/dist/esm/chain/entityShape.d.ts.map +1 -1
- package/dist/esm/chain/entityShape.js +5 -5
- package/dist/esm/chain/entityShape.js.map +1 -1
- package/dist/esm/chain/env.js +1 -1
- package/dist/esm/chain/env.js.map +1 -1
- package/dist/esm/chain/gate.d.ts +7 -0
- package/dist/esm/chain/gate.d.ts.map +1 -1
- package/dist/esm/chain/gate.js +24 -10
- package/dist/esm/chain/gate.js.map +1 -1
- package/dist/esm/chain/guest.d.ts +10 -0
- package/dist/esm/chain/guest.d.ts.map +1 -1
- package/dist/esm/chain/guest.js +3 -2
- package/dist/esm/chain/guest.js.map +1 -1
- package/dist/esm/chain/inviteAnswer.d.ts +32 -0
- package/dist/esm/chain/inviteAnswer.d.ts.map +1 -0
- package/dist/esm/chain/inviteAnswer.js +28 -0
- package/dist/esm/chain/inviteAnswer.js.map +1 -0
- package/dist/esm/chain/inviteMessages.d.ts +65 -32
- package/dist/esm/chain/inviteMessages.d.ts.map +1 -1
- package/dist/esm/chain/inviteMessages.js +69 -25
- package/dist/esm/chain/inviteMessages.js.map +1 -1
- package/dist/esm/chain/inviteProof.d.ts +16 -1
- package/dist/esm/chain/inviteProof.d.ts.map +1 -1
- package/dist/esm/chain/inviteProof.js +16 -0
- package/dist/esm/chain/inviteProof.js.map +1 -1
- package/dist/esm/chain/lane.d.ts +16 -0
- package/dist/esm/chain/lane.d.ts.map +1 -1
- package/dist/esm/chain/lane.js +22 -0
- package/dist/esm/chain/lane.js.map +1 -1
- package/dist/esm/chain/orgReviewBilling.js +1 -1
- package/dist/esm/chain/orgReviewBilling.js.map +1 -1
- package/dist/esm/chain/personReview.d.ts.map +1 -1
- package/dist/esm/chain/personReview.js +18 -11
- package/dist/esm/chain/personReview.js.map +1 -1
- package/dist/esm/chain/reviewBilling.d.ts.map +1 -1
- package/dist/esm/chain/reviewBilling.js +1 -1
- package/dist/esm/chain/reviewBilling.js.map +1 -1
- package/dist/esm/chain/session.d.ts +9 -1
- package/dist/esm/chain/session.d.ts.map +1 -1
- package/dist/esm/chain/session.js +11 -13
- package/dist/esm/chain/session.js.map +1 -1
- package/dist/esm/chain/sessionEvents.d.ts +4 -0
- package/dist/esm/chain/sessionEvents.d.ts.map +1 -0
- package/dist/esm/chain/sessionEvents.js +11 -0
- package/dist/esm/chain/sessionEvents.js.map +1 -0
- package/dist/esm/chain/takeBack.d.ts +32 -0
- package/dist/esm/chain/takeBack.d.ts.map +1 -1
- package/dist/esm/chain/takeBack.js +86 -12
- package/dist/esm/chain/takeBack.js.map +1 -1
- package/dist/esm/chain/union.js +1 -1
- package/dist/esm/chain/why.d.ts +6 -2
- package/dist/esm/chain/why.d.ts.map +1 -1
- package/dist/esm/chain/why.js +12 -3
- package/dist/esm/chain/why.js.map +1 -1
- package/dist/esm/chain.d.ts +1 -0
- package/dist/esm/chain.d.ts.map +1 -1
- package/dist/esm/chain.js +1 -0
- package/dist/esm/chain.js.map +1 -1
- package/dist/esm/config.d.ts +7 -1
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +4 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/data/actionDraft.d.ts +304 -0
- package/dist/esm/data/actionDraft.d.ts.map +1 -0
- package/dist/esm/data/actionDraft.js +450 -0
- package/dist/esm/data/actionDraft.js.map +1 -0
- package/dist/esm/data/actionDraftWords.d.ts +37 -0
- package/dist/esm/data/actionDraftWords.d.ts.map +1 -0
- package/dist/esm/data/actionDraftWords.js +47 -0
- package/dist/esm/data/actionDraftWords.js.map +1 -0
- package/dist/esm/data/agent.d.ts.map +1 -1
- package/dist/esm/data/agent.js +4 -2
- package/dist/esm/data/agent.js.map +1 -1
- package/dist/esm/data/askyProtocol.d.ts +13 -0
- package/dist/esm/data/askyProtocol.d.ts.map +1 -0
- package/dist/esm/data/askyProtocol.js +14 -0
- package/dist/esm/data/askyProtocol.js.map +1 -0
- package/dist/esm/data/board/answer.d.ts +12 -0
- package/dist/esm/data/board/answer.d.ts.map +1 -0
- package/dist/esm/data/board/answer.js +36 -0
- package/dist/esm/data/board/answer.js.map +1 -0
- package/dist/esm/data/board/assemble.js +2 -2
- package/dist/esm/data/board/facts.d.ts +1 -1
- package/dist/esm/data/board/facts.d.ts.map +1 -1
- package/dist/esm/data/board/facts.js +6 -2
- package/dist/esm/data/board/facts.js.map +1 -1
- package/dist/esm/data/board/fixtures.d.ts.map +1 -1
- package/dist/esm/data/board/fixtures.js +2 -1
- package/dist/esm/data/board/fixtures.js.map +1 -1
- package/dist/esm/data/board/read.d.ts +2 -0
- package/dist/esm/data/board/read.d.ts.map +1 -1
- package/dist/esm/data/board/read.js +25 -11
- package/dist/esm/data/board/read.js.map +1 -1
- package/dist/esm/data/board/types.d.ts +16 -0
- package/dist/esm/data/board/types.d.ts.map +1 -1
- package/dist/esm/data/board/types.js +7 -0
- package/dist/esm/data/board/types.js.map +1 -1
- package/dist/esm/data/checkers.d.ts +33 -7
- package/dist/esm/data/checkers.d.ts.map +1 -1
- package/dist/esm/data/checkers.js +159 -54
- package/dist/esm/data/checkers.js.map +1 -1
- package/dist/esm/data/decisionIdentity.d.ts +10 -0
- package/dist/esm/data/decisionIdentity.d.ts.map +1 -0
- package/dist/esm/data/decisionIdentity.js +15 -0
- package/dist/esm/data/decisionIdentity.js.map +1 -0
- package/dist/esm/data/displayNames.d.ts +7 -1
- package/dist/esm/data/displayNames.d.ts.map +1 -1
- package/dist/esm/data/displayNames.js +7 -1
- package/dist/esm/data/displayNames.js.map +1 -1
- package/dist/esm/data/docUrls.d.ts +5 -0
- package/dist/esm/data/docUrls.d.ts.map +1 -1
- package/dist/esm/data/docUrls.js +16 -0
- package/dist/esm/data/docUrls.js.map +1 -1
- package/dist/esm/data/draftUploads.d.ts +145 -0
- package/dist/esm/data/draftUploads.d.ts.map +1 -0
- package/dist/esm/data/draftUploads.js +272 -0
- package/dist/esm/data/draftUploads.js.map +1 -0
- package/dist/esm/data/emailKinds.d.ts +56 -0
- package/dist/esm/data/emailKinds.d.ts.map +1 -0
- package/dist/esm/data/emailKinds.js +32 -0
- package/dist/esm/data/emailKinds.js.map +1 -0
- package/dist/esm/data/engine.js +1 -1
- package/dist/esm/data/engine.js.map +1 -1
- package/dist/esm/data/engineUrl.d.ts +5 -4
- package/dist/esm/data/engineUrl.d.ts.map +1 -1
- package/dist/esm/data/engineUrl.js +11 -5
- package/dist/esm/data/engineUrl.js.map +1 -1
- package/dist/esm/data/envelope.d.ts +9 -2
- package/dist/esm/data/envelope.d.ts.map +1 -1
- package/dist/esm/data/envelope.js +10 -3
- package/dist/esm/data/envelope.js.map +1 -1
- package/dist/esm/data/format.d.ts +10 -0
- package/dist/esm/data/format.d.ts.map +1 -1
- package/dist/esm/data/format.js +6 -0
- package/dist/esm/data/format.js.map +1 -1
- package/dist/esm/data/install.d.ts +57 -131
- package/dist/esm/data/install.d.ts.map +1 -1
- package/dist/esm/data/install.js +88 -173
- package/dist/esm/data/install.js.map +1 -1
- package/dist/esm/data/onAsks.d.ts +57 -0
- package/dist/esm/data/onAsks.d.ts.map +1 -0
- package/dist/esm/data/onAsks.js +73 -0
- package/dist/esm/data/onAsks.js.map +1 -0
- package/dist/esm/data/openness.d.ts +3 -0
- package/dist/esm/data/openness.d.ts.map +1 -1
- package/dist/esm/data/openness.js +18 -7
- package/dist/esm/data/openness.js.map +1 -1
- package/dist/esm/data/orgPayouts.d.ts +1 -0
- package/dist/esm/data/orgPayouts.d.ts.map +1 -1
- package/dist/esm/data/orgPayouts.js +4 -2
- package/dist/esm/data/orgPayouts.js.map +1 -1
- package/dist/esm/data/payoutObservation.d.ts +30 -0
- package/dist/esm/data/payoutObservation.d.ts.map +1 -0
- package/dist/esm/data/payoutObservation.js +213 -0
- package/dist/esm/data/payoutObservation.js.map +1 -0
- package/dist/esm/data/profiles.d.ts +37 -2
- package/dist/esm/data/profiles.d.ts.map +1 -1
- package/dist/esm/data/profiles.js +120 -16
- package/dist/esm/data/profiles.js.map +1 -1
- package/dist/esm/data/queue.d.ts.map +1 -1
- package/dist/esm/data/queue.js +4 -2
- package/dist/esm/data/queue.js.map +1 -1
- package/dist/esm/data/receipt.d.ts +4 -0
- package/dist/esm/data/receipt.d.ts.map +1 -1
- package/dist/esm/data/receipt.js +5 -2
- package/dist/esm/data/receipt.js.map +1 -1
- package/dist/esm/data/threads.d.ts +9 -1
- package/dist/esm/data/threads.d.ts.map +1 -1
- package/dist/esm/data/threads.js +6 -4
- package/dist/esm/data/threads.js.map +1 -1
- package/dist/esm/data/trace.d.ts +1 -0
- package/dist/esm/data/trace.d.ts.map +1 -1
- package/dist/esm/data/trace.js +4 -2
- package/dist/esm/data/trace.js.map +1 -1
- package/dist/esm/data/traceWords.d.ts +5 -1
- package/dist/esm/data/traceWords.d.ts.map +1 -1
- package/dist/esm/data/traceWords.js +19 -5
- package/dist/esm/data/traceWords.js.map +1 -1
- package/dist/esm/data/types.js +1 -1
- package/dist/esm/data/types.js.map +1 -1
- package/dist/esm/discovery.d.ts.map +1 -1
- package/dist/esm/discovery.js +3 -1
- package/dist/esm/discovery.js.map +1 -1
- package/dist/esm/names/client.d.ts +10 -0
- package/dist/esm/names/client.d.ts.map +1 -0
- package/dist/esm/names/client.js +10 -0
- package/dist/esm/names/client.js.map +1 -0
- package/dist/esm/names/names.d.ts +93 -0
- package/dist/esm/names/names.d.ts.map +1 -0
- package/dist/esm/names/names.js +142 -0
- package/dist/esm/names/names.js.map +1 -0
- package/dist/esm/names.d.ts +14 -0
- package/dist/esm/names.d.ts.map +1 -0
- package/dist/esm/names.js +14 -0
- package/dist/esm/names.js.map +1 -0
- package/dist/esm/rubric/askyRubric.d.ts +70 -0
- package/dist/esm/rubric/askyRubric.d.ts.map +1 -0
- package/dist/esm/rubric/askyRubric.js +155 -0
- package/dist/esm/rubric/askyRubric.js.map +1 -0
- package/dist/esm/rubric/bridge.js +2 -2
- package/dist/esm/rubric/bridge.js.map +1 -1
- package/dist/esm/rubric/call.d.ts +5 -0
- package/dist/esm/rubric/call.d.ts.map +1 -1
- package/dist/esm/rubric/call.js +8 -1
- package/dist/esm/rubric/call.js.map +1 -1
- package/dist/esm/rubric/callChecks.d.ts +2 -0
- package/dist/esm/rubric/callChecks.d.ts.map +1 -1
- package/dist/esm/rubric/callChecks.js +5 -1
- package/dist/esm/rubric/callChecks.js.map +1 -1
- package/dist/esm/rubric/callLimits.js +2 -2
- package/dist/esm/rubric/callPrompt.d.ts +7 -0
- package/dist/esm/rubric/callPrompt.d.ts.map +1 -0
- package/dist/esm/rubric/callPrompt.js +6 -0
- package/dist/esm/rubric/callPrompt.js.map +1 -0
- package/dist/esm/rubric/draft.d.ts +1 -1
- package/dist/esm/rubric/draft.d.ts.map +1 -1
- package/dist/esm/rubric/draft.js +1 -1
- package/dist/esm/rubric/feeLine.d.ts +12 -3
- package/dist/esm/rubric/feeLine.d.ts.map +1 -1
- package/dist/esm/rubric/feeLine.js +16 -7
- package/dist/esm/rubric/feeLine.js.map +1 -1
- package/dist/esm/rubric/leg.d.ts +5 -7
- package/dist/esm/rubric/leg.d.ts.map +1 -1
- package/dist/esm/rubric/leg.js +7 -33
- package/dist/esm/rubric/leg.js.map +1 -1
- package/dist/esm/rubric/marketPlan.js +7 -7
- package/dist/esm/rubric/marketPlan.js.map +1 -1
- package/dist/esm/rubric/report.d.ts.map +1 -1
- package/dist/esm/rubric/report.js +4 -4
- package/dist/esm/rubric/report.js.map +1 -1
- package/dist/esm/rubric/reportTemplate.d.ts +12 -2
- package/dist/esm/rubric/reportTemplate.d.ts.map +1 -1
- package/dist/esm/rubric/reportTemplate.js +30 -17
- package/dist/esm/rubric/reportTemplate.js.map +1 -1
- package/dist/esm/rubric/survey.js +2 -2
- package/dist/esm/rubric/survey.js.map +1 -1
- package/dist/esm/rubric/terms.d.ts +9 -6
- package/dist/esm/rubric/terms.d.ts.map +1 -1
- package/dist/esm/rubric/terms.js +7 -8
- package/dist/esm/rubric/terms.js.map +1 -1
- package/package.json +24 -3
- package/dist/cjs/data/sponsors.d.ts +0 -94
- package/dist/cjs/data/sponsors.d.ts.map +0 -1
- package/dist/cjs/data/sponsors.js +0 -147
- package/dist/cjs/data/sponsors.js.map +0 -1
- package/dist/esm/data/sponsors.d.ts +0 -94
- package/dist/esm/data/sponsors.d.ts.map +0 -1
- package/dist/esm/data/sponsors.js +0 -137
- package/dist/esm/data/sponsors.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayNames.js","sourceRoot":"","sources":["../../../src/data/displayNames.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"displayNames.js","sourceRoot":"","sources":["../../../src/data/displayNames.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,11 @@ import { type Network, network } from "../network.ts";
|
|
|
11
11
|
export * from "./docPath.ts";
|
|
12
12
|
export { network };
|
|
13
13
|
export declare const vfsUrlFor: (net: Network) => string;
|
|
14
|
+
/**
|
|
15
|
+
* The origin clients are handed for the worker: empty when none is configured (the feature is off), the configured one
|
|
16
|
+
* when it is a local `wrangler dev`, else the network's public API origin whatever host the deployment calls the worker by.
|
|
17
|
+
*/
|
|
18
|
+
export declare const clientApiOrigin: (net: Network, configured: string | undefined) => string;
|
|
14
19
|
export declare const subscriptionsUrlFor: (net: Network) => string;
|
|
15
20
|
export declare const DEFAULT_IPFS_GATEWAY_URL = "https://ipfs.gateway.ixo.world";
|
|
16
21
|
/** The filesystem worker for this network. Override with `NEXT_PUBLIC_VFS_URL` (local `wrangler dev`) or `configure({ vfsUrl })`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docUrls.d.ts","sourceRoot":"","sources":["../../../src/data/docUrls.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtD,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,CAAC;AASnB,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,MAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"docUrls.d.ts","sourceRoot":"","sources":["../../../src/data/docUrls.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtD,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,CAAC;AASnB,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,MAA6B,CAAC;AAgBvE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,EAAE,YAAY,MAAM,GAAG,SAAS,KAAG,MAI9E,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,OAAO,KAAG,MAAuC,CAAC;AAE3F,eAAO,MAAM,wBAAwB,mCAAmC,CAAC;AAEzE,qIAAqI;AACrI,eAAO,MAAM,MAAM,QAAO,MACqH,CAAC;AAEhJ,iLAAiL;AACjL,eAAO,MAAM,UAAU,QAAO,MAAmH,CAAC;AAElJ,uGAAuG;AACvG,eAAO,MAAM,cAAc,QAAO,MAC6H,CAAC;AAEhK,mFAAmF;AACnF,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,KAAG,MAAyC,CAAC;AAElF,0CAA0C;AAC1C,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAA2C,CAAC;AAErF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,aAAa,MAAM,KAAG,MAAqF,CAAC;AAEtJ,uEAAuE;AACvE,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAGrE,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,QAAQ,QAAO,MAAM,EAA8D,CAAC"}
|
package/dist/esm/data/docUrls.js
CHANGED
|
@@ -26,6 +26,22 @@ const SUBSCRIPTIONS_BY_NETWORK = {
|
|
|
26
26
|
testnet: "https://subscriptions-api-testnet.ixo-api.workers.dev",
|
|
27
27
|
mainnet: "https://subscriptions-api-mainnet.ixo-api.workers.dev"
|
|
28
28
|
};
|
|
29
|
+
/** The public API origin each network's worker answers on: what clients (and sandbox allow-lists) see, never the workers.dev host. */
|
|
30
|
+
const API_ORIGIN_BY_NETWORK = {
|
|
31
|
+
devnet: "https://dev.api.asks.world",
|
|
32
|
+
testnet: "https://test.api.asks.world",
|
|
33
|
+
mainnet: "https://api.asks.world"
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The origin clients are handed for the worker: empty when none is configured (the feature is off), the configured one
|
|
37
|
+
* when it is a local `wrangler dev`, else the network's public API origin whatever host the deployment calls the worker by.
|
|
38
|
+
*/
|
|
39
|
+
export const clientApiOrigin = (net, configured) => {
|
|
40
|
+
const set = (configured || "").trim().replace(/\/+$/, "");
|
|
41
|
+
if (!set)
|
|
42
|
+
return "";
|
|
43
|
+
return /^https?:\/\/(localhost|127\.0\.0\.1)(:|\/|$)/.test(set) ? set : API_ORIGIN_BY_NETWORK[net];
|
|
44
|
+
};
|
|
29
45
|
export const subscriptionsUrlFor = (net) => SUBSCRIPTIONS_BY_NETWORK[net];
|
|
30
46
|
export const DEFAULT_IPFS_GATEWAY_URL = "https://ipfs.gateway.ixo.world";
|
|
31
47
|
/** The filesystem worker for this network. Override with `NEXT_PUBLIC_VFS_URL` (local `wrangler dev`) or `configure({ vfsUrl })`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docUrls.js","sourceRoot":"","sources":["../../../src/data/docUrls.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docUrls.js","sourceRoot":"","sources":["../../../src/data/docUrls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files attached to a submit_work draft before the person opens it (docs/MCP.md "Files from the chat"; migration
|
|
3
|
+
* 0059). The add-on to the one-tap answer: submit_work saves a draft as always, and beside its link hands an agent
|
|
4
|
+
* that can make HTTP requests (Companion, Claude Code, Codex, claude.ai with code execution) one upload address for
|
|
5
|
+
* that draft. At the address the agent states each file's name, type and size and gets a signed R2 URL to PUT it
|
|
6
|
+
* to; the worker then checks what landed. The ask's own answer page (`/submit/<n>?draft=…`) opens with the files in
|
|
7
|
+
* place, and sends them on its own rails when the person taps Send, signed as themselves. Without an upload, nothing
|
|
8
|
+
* changes: the person adds the files on the page, as before.
|
|
9
|
+
*
|
|
10
|
+
* The rules every side shares (the worker's store, the connector, the page), so no two can disagree on a type, a
|
|
11
|
+
* size or a name. Pure; nothing a phone's first load pays for.
|
|
12
|
+
*/
|
|
13
|
+
/** An upload address's secret: `du_` and 256 random bits, base64url. Kept on the worker only as its sha256. */
|
|
14
|
+
export declare const UPLOAD_TOKEN: RegExp;
|
|
15
|
+
/** An upload address works for an hour from when submit_work made it, and never past its draft. */
|
|
16
|
+
export declare const UPLOAD_TTL_MS: number;
|
|
17
|
+
/** Files go a day after their draft was sent or expired (the scheduled prune, workers/src/draftUploads.ts). */
|
|
18
|
+
export declare const UPLOAD_PURGE_AFTER_MS: number;
|
|
19
|
+
/** A signed PUT URL works for 10 minutes (and binds the file's stated type and size). */
|
|
20
|
+
export declare const UPLOAD_URL_TTL_S = 600;
|
|
21
|
+
/** Per file. Under the answer page's own ceiling (`MAX_PROOF_BYTES`), so a file from the chat always fits the page. */
|
|
22
|
+
export declare const MAX_UPLOAD_BYTES = 5000000;
|
|
23
|
+
/** Per draft (under the report form's own `MAX_FILES`, app/submit/[id]/ReviewForm.tsx). */
|
|
24
|
+
export declare const MAX_UPLOAD_FILES = 10;
|
|
25
|
+
/** Per draft, all files together. */
|
|
26
|
+
export declare const MAX_DRAFT_UPLOAD_BYTES = 25000000;
|
|
27
|
+
/** Per person, across every draft whose files are still kept. */
|
|
28
|
+
export declare const MAX_OWNER_UPLOAD_BYTES = 50000000;
|
|
29
|
+
/** A words answer takes one file on its page (the photo beside the words, or the ask's file): no more are kept for it. */
|
|
30
|
+
export declare const MAX_WORDS_UPLOADS = 1;
|
|
31
|
+
export declare const UPLOAD_TYPES: readonly ["png", "jpg", "webp", "pdf"];
|
|
32
|
+
export type UploadType = (typeof UPLOAD_TYPES)[number];
|
|
33
|
+
export declare const UPLOAD_MEDIA: Readonly<Record<UploadType, string>>;
|
|
34
|
+
/** In words, for a refusal or the tool's answer. */
|
|
35
|
+
export declare const UPLOAD_TYPE_WORDS: Readonly<Record<UploadType, string>>;
|
|
36
|
+
/**
|
|
37
|
+
* What the bytes are, by their own first bytes, never by a name or a header: PNG's signature, JPEG's start of image,
|
|
38
|
+
* RIFF…WEBP, `%PDF-`. Anything else is null, whatever it is called.
|
|
39
|
+
*/
|
|
40
|
+
export declare function sniffUpload(bytes: Uint8Array): UploadType | null;
|
|
41
|
+
/** The longest file id: the same on every side (an evidence id, `uploadIdOf`, rubric/report.ts `FILE_ID`). */
|
|
42
|
+
export declare const MAX_FILE_ID = 64;
|
|
43
|
+
/** The type a name says it is, or null for a name an upload refuses. */
|
|
44
|
+
export declare function uploadTypeOfName(name: string): UploadType | null;
|
|
45
|
+
/**
|
|
46
|
+
* A file's id, the one rule every side uses (submit_work's `files`, this upload address, the answer page's forms):
|
|
47
|
+
* its name without the folder or the extension, in an evidence id's letters (rubric/report.ts `FILE_ID`), spaces and
|
|
48
|
+
* punctuation as dashes. At most `MAX_FILE_ID` letters, the same as every evidence id (`FILE_ID`), so a long id still
|
|
49
|
+
* names its own file.
|
|
50
|
+
*/
|
|
51
|
+
export declare function uploadIdOf(path: string): string;
|
|
52
|
+
/** A file's name or an evidence id as matching reads it: no folder, extension or copy mark (" (1)", " copy"), lower case, one dash between words. */
|
|
53
|
+
export declare const evidenceKey: (name: string) => string;
|
|
54
|
+
/**
|
|
55
|
+
* The one file a step's or a finding's evidence means, the one forgiving rule every side uses (the send page, the
|
|
56
|
+
* upload address, the report's check and its viewer): the file with that exact id first; else the one whose id or
|
|
57
|
+
* name reads the same by `evidenceKey` ("Login Error.png", "login_error.PNG", "login-error (1).png" for
|
|
58
|
+
* "login-error"); else the one that holds it as whole words ("screenshot-login-error.png"). None, or two that fit
|
|
59
|
+
* as well, is no match. What is stored keeps the file's own id.
|
|
60
|
+
*/
|
|
61
|
+
export declare function evidenceFileOf<F extends {
|
|
62
|
+
id: string;
|
|
63
|
+
name?: string;
|
|
64
|
+
}>(cited: string, files: readonly F[]): F | undefined;
|
|
65
|
+
/** `evidenceFileOf` over bare ids: the held id a cited one means, or undefined. */
|
|
66
|
+
export declare const evidenceIdIn: (cited: string, ids: Iterable<string>) => string | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Every `evidence` list at any depth, each id as the file `held` it means (`evidenceIdIn`), so what is stored names the
|
|
69
|
+
* file's own id; an id with no file (a removed one, or one restored with none) is dropped.
|
|
70
|
+
*/
|
|
71
|
+
export declare function keepHeldEvidence<T>(value: T, held: Iterable<string>): T;
|
|
72
|
+
/** Hex sha256 of bytes or text (the upload secret's stored hash; the report form's evidence hashes). */
|
|
73
|
+
export declare function sha256Hex(data: Uint8Array | string): Promise<string>;
|
|
74
|
+
/** The type a stated Content-Type names, or null ("image/jpg" is a JPG too). */
|
|
75
|
+
export declare function uploadTypeOfMedia(contentType: string): UploadType | null;
|
|
76
|
+
/** Which of the four a form question's `accept` takes (`image/*`, `image/png`, `.pdf`…); none said is all four. */
|
|
77
|
+
export declare function uploadTypesOfAccept(accept?: string): UploadType[];
|
|
78
|
+
/** A form question, as far as the chat's files care. */
|
|
79
|
+
export interface FileQuestion {
|
|
80
|
+
name: string;
|
|
81
|
+
type: string;
|
|
82
|
+
accept?: string;
|
|
83
|
+
multiple?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The one question of a verifier's form the chat's files go on: its `evidence` file question, else its first file
|
|
87
|
+
* question; null for a form with none. The connector sizes the upload address by it and the page places files on it.
|
|
88
|
+
*/
|
|
89
|
+
export declare const chatFileQuestion: <Q extends FileQuestion>(fields: readonly Q[]) => Q | null;
|
|
90
|
+
/**
|
|
91
|
+
* What one draft's address takes, decided by submit_work from the answer it drafted and kept with the address:
|
|
92
|
+
*
|
|
93
|
+
* - `expect`: the file ids the answer names (a report's or a form's evidence, and submit_work's `files`). A file
|
|
94
|
+
* whose id is one of them is taken.
|
|
95
|
+
* - `extra`: how many files with other names it takes besides (a words answer's one file; 0 for a report or a form,
|
|
96
|
+
* which take only the names they expect).
|
|
97
|
+
* - `types`: what the page can take for this answer (a words-only ask's photo is a JPG or PNG; otherwise all four).
|
|
98
|
+
*/
|
|
99
|
+
export interface UploadSpec {
|
|
100
|
+
expect: string[];
|
|
101
|
+
extra: number;
|
|
102
|
+
types: UploadType[];
|
|
103
|
+
}
|
|
104
|
+
/** set_my_page's photo (the `set_page_photo` draft): one image, any name, never a PDF. The worker keeps this spec whatever the connector sent. */
|
|
105
|
+
export declare const PHOTO_UPLOAD_SPEC: UploadSpec;
|
|
106
|
+
/** The drafts an upload address can be opened on. */
|
|
107
|
+
export declare const UPLOAD_ACTIONS: readonly string[];
|
|
108
|
+
/** Why a spec is not one the store keeps, or null. */
|
|
109
|
+
export declare function uploadSpecProblem(raw: unknown): string | null;
|
|
110
|
+
/**
|
|
111
|
+
* Whether a file with this id may be kept, given the ids already kept: one the answer expects, a re-upload of one
|
|
112
|
+
* already kept (it replaces it), or a new one while the extras last. The code names what is wrong.
|
|
113
|
+
*/
|
|
114
|
+
/** The id an uploaded file is kept under: the one id the answer names that means it (`evidenceIdIn`: "Login Error.png" for "login-error"), else its own. */
|
|
115
|
+
export declare function uploadIdFor(spec: UploadSpec, name: string): string;
|
|
116
|
+
export declare function uploadNameAllowed(spec: UploadSpec, id: string, kept: readonly string[]): "ok" | "unexpected-name" | "too-many-files";
|
|
117
|
+
/** What an upload refusal says, in plain words for the agent that tried. */
|
|
118
|
+
export declare function uploadRefusalWords(code: string, spec?: UploadSpec | null): string;
|
|
119
|
+
/** Why a file that came was not kept, in a few words: for link_status, the agent's list and the answer page. */
|
|
120
|
+
export declare const UPLOAD_REFUSAL_SHORT: Readonly<Record<string, string>>;
|
|
121
|
+
export declare const uploadRefusalShort: (code: string) => string;
|
|
122
|
+
/** What is attached to a draft, as its owner's status and its page read it. */
|
|
123
|
+
export interface DraftFiles {
|
|
124
|
+
/** How many files are kept for it now (checked: the right size and type). */
|
|
125
|
+
attached: number;
|
|
126
|
+
names: string[];
|
|
127
|
+
/** Files that came and were deleted, and why (a code of `UPLOAD_REFUSAL_SHORT`). */
|
|
128
|
+
refused?: {
|
|
129
|
+
name: string;
|
|
130
|
+
code: string;
|
|
131
|
+
}[];
|
|
132
|
+
/** The ids the answer names that have no file yet: only once the agent has used the address (else nothing is said). */
|
|
133
|
+
missing: string[];
|
|
134
|
+
/** Files with an upload URL issued but not yet checked; they may not have arrived. */
|
|
135
|
+
waiting?: string[];
|
|
136
|
+
/** Whether the address still takes uploads. */
|
|
137
|
+
open: boolean;
|
|
138
|
+
/** When the address stops taking uploads. */
|
|
139
|
+
expiresAt: number;
|
|
140
|
+
}
|
|
141
|
+
/** "2 files attached (login.png, crash.pdf); not received: settings." for link_status and the report page. */
|
|
142
|
+
export declare function draftFilesWords(files: DraftFiles): string;
|
|
143
|
+
/** The evidence ids an answer names: every string in an `evidence` list, at any depth (a report's steps and findings, a form's rows). */
|
|
144
|
+
export declare function evidenceIdsOf(value: unknown, found?: Set<string>, depth?: number): string[];
|
|
145
|
+
//# sourceMappingURL=draftUploads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draftUploads.d.ts","sourceRoot":"","sources":["../../../src/data/draftUploads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files attached to a submit_work draft before the person opens it (docs/MCP.md "Files from the chat"; migration
|
|
3
|
+
* 0059). The add-on to the one-tap answer: submit_work saves a draft as always, and beside its link hands an agent
|
|
4
|
+
* that can make HTTP requests (Companion, Claude Code, Codex, claude.ai with code execution) one upload address for
|
|
5
|
+
* that draft. At the address the agent states each file's name, type and size and gets a signed R2 URL to PUT it
|
|
6
|
+
* to; the worker then checks what landed. The ask's own answer page (`/submit/<n>?draft=…`) opens with the files in
|
|
7
|
+
* place, and sends them on its own rails when the person taps Send, signed as themselves. Without an upload, nothing
|
|
8
|
+
* changes: the person adds the files on the page, as before.
|
|
9
|
+
*
|
|
10
|
+
* The rules every side shares (the worker's store, the connector, the page), so no two can disagree on a type, a
|
|
11
|
+
* size or a name. Pure; nothing a phone's first load pays for.
|
|
12
|
+
*/
|
|
13
|
+
/** An upload address's secret: `du_` and 256 random bits, base64url. Kept on the worker only as its sha256. */
|
|
14
|
+
export const UPLOAD_TOKEN = /^du_[A-Za-z0-9_-]{43}$/;
|
|
15
|
+
/** An upload address works for an hour from when submit_work made it, and never past its draft. */
|
|
16
|
+
export const UPLOAD_TTL_MS = 60 * 60_000;
|
|
17
|
+
/** Files go a day after their draft was sent or expired (the scheduled prune, workers/src/draftUploads.ts). */
|
|
18
|
+
export const UPLOAD_PURGE_AFTER_MS = 24 * 60 * 60_000;
|
|
19
|
+
/** A signed PUT URL works for 10 minutes (and binds the file's stated type and size). */
|
|
20
|
+
export const UPLOAD_URL_TTL_S = 600;
|
|
21
|
+
/** Per file. Under the answer page's own ceiling (`MAX_PROOF_BYTES`), so a file from the chat always fits the page. */
|
|
22
|
+
export const MAX_UPLOAD_BYTES = 5_000_000;
|
|
23
|
+
/** Per draft (under the report form's own `MAX_FILES`, app/submit/[id]/ReviewForm.tsx). */
|
|
24
|
+
export const MAX_UPLOAD_FILES = 10;
|
|
25
|
+
/** Per draft, all files together. */
|
|
26
|
+
export const MAX_DRAFT_UPLOAD_BYTES = 25_000_000;
|
|
27
|
+
/** Per person, across every draft whose files are still kept. */
|
|
28
|
+
export const MAX_OWNER_UPLOAD_BYTES = 50_000_000;
|
|
29
|
+
/** A words answer takes one file on its page (the photo beside the words, or the ask's file): no more are kept for it. */
|
|
30
|
+
export const MAX_WORDS_UPLOADS = 1;
|
|
31
|
+
export const UPLOAD_TYPES = ["png", "jpg", "webp", "pdf"];
|
|
32
|
+
export const UPLOAD_MEDIA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp", pdf: "application/pdf" };
|
|
33
|
+
/** In words, for a refusal or the tool's answer. */
|
|
34
|
+
export const UPLOAD_TYPE_WORDS = { png: "PNG", jpg: "JPG", webp: "WebP", pdf: "PDF" };
|
|
35
|
+
const EXTENSIONS = { png: "png", jpg: "jpg", jpeg: "jpg", webp: "webp", pdf: "pdf" };
|
|
36
|
+
/**
|
|
37
|
+
* What the bytes are, by their own first bytes, never by a name or a header: PNG's signature, JPEG's start of image,
|
|
38
|
+
* RIFF…WEBP, `%PDF-`. Anything else is null, whatever it is called.
|
|
39
|
+
*/
|
|
40
|
+
export function sniffUpload(bytes) {
|
|
41
|
+
const at = (index, ...values) => values.every((value, offset) => bytes[index + offset] === value);
|
|
42
|
+
if (bytes.length >= 8 && at(0, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a))
|
|
43
|
+
return "png";
|
|
44
|
+
if (bytes.length >= 3 && at(0, 0xff, 0xd8, 0xff))
|
|
45
|
+
return "jpg";
|
|
46
|
+
if (bytes.length >= 12 && at(0, 0x52, 0x49, 0x46, 0x46) && at(8, 0x57, 0x45, 0x42, 0x50))
|
|
47
|
+
return "webp";
|
|
48
|
+
if (bytes.length >= 5 && at(0, 0x25, 0x50, 0x44, 0x46, 0x2d))
|
|
49
|
+
return "pdf";
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/** The longest file id: the same on every side (an evidence id, `uploadIdOf`, rubric/report.ts `FILE_ID`). */
|
|
53
|
+
export const MAX_FILE_ID = 64;
|
|
54
|
+
/** A file's name as an upload takes it: letters, digits, `_ - . ` and a space, ending in .png, .jpg, .jpeg, .webp or .pdf. */
|
|
55
|
+
const NAME = /^[A-Za-z0-9][A-Za-z0-9_. -]{0,95}\.([A-Za-z]{3,4})$/;
|
|
56
|
+
/** The type a name says it is, or null for a name an upload refuses. */
|
|
57
|
+
export function uploadTypeOfName(name) {
|
|
58
|
+
const found = NAME.exec(name);
|
|
59
|
+
return found ? (EXTENSIONS[found[1].toLowerCase()] ?? null) : null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A file's id, the one rule every side uses (submit_work's `files`, this upload address, the answer page's forms):
|
|
63
|
+
* its name without the folder or the extension, in an evidence id's letters (rubric/report.ts `FILE_ID`), spaces and
|
|
64
|
+
* punctuation as dashes. At most `MAX_FILE_ID` letters, the same as every evidence id (`FILE_ID`), so a long id still
|
|
65
|
+
* names its own file.
|
|
66
|
+
*/
|
|
67
|
+
export function uploadIdOf(path) {
|
|
68
|
+
return ((path.split(/[\\/]/).pop() ?? path)
|
|
69
|
+
.replace(/\.[^.]*$/, "")
|
|
70
|
+
.replace(/[^A-Za-z0-9_-]+/g, "-")
|
|
71
|
+
.replace(/^-+|-+$/g, "")
|
|
72
|
+
.slice(0, MAX_FILE_ID) || "file");
|
|
73
|
+
}
|
|
74
|
+
/** A file's name or an evidence id as matching reads it: no folder, extension or copy mark (" (1)", " copy"), lower case, one dash between words. */
|
|
75
|
+
export const evidenceKey = (name) => uploadIdOf(name.replace(/(\s*\(\d+\)|[\s_-]+copy)(?=\.[A-Za-z0-9]{1,5}$|$)/i, ""))
|
|
76
|
+
.toLowerCase()
|
|
77
|
+
.replace(/[-_]+/g, "-");
|
|
78
|
+
/**
|
|
79
|
+
* The one file a step's or a finding's evidence means, the one forgiving rule every side uses (the send page, the
|
|
80
|
+
* upload address, the report's check and its viewer): the file with that exact id first; else the one whose id or
|
|
81
|
+
* name reads the same by `evidenceKey` ("Login Error.png", "login_error.PNG", "login-error (1).png" for
|
|
82
|
+
* "login-error"); else the one that holds it as whole words ("screenshot-login-error.png"). None, or two that fit
|
|
83
|
+
* as well, is no match. What is stored keeps the file's own id.
|
|
84
|
+
*/
|
|
85
|
+
export function evidenceFileOf(cited, files) {
|
|
86
|
+
const exact = files.find((one) => one.id === cited);
|
|
87
|
+
if (exact || !cited.trim())
|
|
88
|
+
return exact;
|
|
89
|
+
const key = evidenceKey(cited);
|
|
90
|
+
const keys = (one) => [one.id, ...(one.name ? [one.name] : [])].map(evidenceKey);
|
|
91
|
+
const only = (fit) => (fit.length === 1 ? fit[0] : undefined);
|
|
92
|
+
const same = files.filter((one) => keys(one).includes(key));
|
|
93
|
+
if (same.length)
|
|
94
|
+
return only(same);
|
|
95
|
+
return only(files.filter((one) => keys(one).some((held) => `-${held}-`.includes(`-${key}-`))));
|
|
96
|
+
}
|
|
97
|
+
/** `evidenceFileOf` over bare ids: the held id a cited one means, or undefined. */
|
|
98
|
+
export const evidenceIdIn = (cited, ids) => evidenceFileOf(cited, [...ids].map((id) => ({ id })))?.id;
|
|
99
|
+
/**
|
|
100
|
+
* Every `evidence` list at any depth, each id as the file `held` it means (`evidenceIdIn`), so what is stored names the
|
|
101
|
+
* file's own id; an id with no file (a removed one, or one restored with none) is dropped.
|
|
102
|
+
*/
|
|
103
|
+
export function keepHeldEvidence(value, held) {
|
|
104
|
+
const ids = [...held];
|
|
105
|
+
const keep = (inner) => {
|
|
106
|
+
if (Array.isArray(inner))
|
|
107
|
+
return inner.map(keep);
|
|
108
|
+
if (!inner || typeof inner !== "object")
|
|
109
|
+
return inner;
|
|
110
|
+
return Object.fromEntries(Object.entries(inner).map(([key, one]) => [
|
|
111
|
+
key,
|
|
112
|
+
key === "evidence" && Array.isArray(one) ? [...new Set(one.map((id) => (typeof id === "string" ? evidenceIdIn(id, ids) : id)).filter((id) => id !== undefined))] : keep(one)
|
|
113
|
+
]));
|
|
114
|
+
};
|
|
115
|
+
return keep(value);
|
|
116
|
+
}
|
|
117
|
+
/** Hex sha256 of bytes or text (the upload secret's stored hash; the report form's evidence hashes). */
|
|
118
|
+
export async function sha256Hex(data) {
|
|
119
|
+
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
|
|
120
|
+
const digest = await crypto.subtle.digest("SHA-256", bytes);
|
|
121
|
+
return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
122
|
+
}
|
|
123
|
+
/** The type a stated Content-Type names, or null ("image/jpg" is a JPG too). */
|
|
124
|
+
export function uploadTypeOfMedia(contentType) {
|
|
125
|
+
const type = contentType.split(";")[0].trim().toLowerCase();
|
|
126
|
+
if (type === "image/jpg")
|
|
127
|
+
return "jpg";
|
|
128
|
+
return UPLOAD_TYPES.find((one) => UPLOAD_MEDIA[one] === type) ?? null;
|
|
129
|
+
}
|
|
130
|
+
/** Which of the four a form question's `accept` takes (`image/*`, `image/png`, `.pdf`…); none said is all four. */
|
|
131
|
+
export function uploadTypesOfAccept(accept) {
|
|
132
|
+
const tokens = (accept ?? "").split(",").map((one) => one.trim().toLowerCase()).filter(Boolean);
|
|
133
|
+
if (!tokens.length)
|
|
134
|
+
return [...UPLOAD_TYPES];
|
|
135
|
+
return UPLOAD_TYPES.filter((type) => tokens.some((token) => (token.startsWith(".") ? EXTENSIONS[token.slice(1)] === type : token.endsWith("/*") ? UPLOAD_MEDIA[type].startsWith(token.slice(0, -1)) : uploadTypeOfMedia(token) === type)));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The one question of a verifier's form the chat's files go on: its `evidence` file question, else its first file
|
|
139
|
+
* question; null for a form with none. The connector sizes the upload address by it and the page places files on it.
|
|
140
|
+
*/
|
|
141
|
+
export const chatFileQuestion = (fields) => fields.find((one) => one.type === "file" && one.name === "evidence") ?? fields.find((one) => one.type === "file") ?? null;
|
|
142
|
+
/** set_my_page's photo (the `set_page_photo` draft): one image, any name, never a PDF. The worker keeps this spec whatever the connector sent. */
|
|
143
|
+
export const PHOTO_UPLOAD_SPEC = { expect: [], extra: 1, types: ["png", "jpg", "webp"] };
|
|
144
|
+
/** The drafts an upload address can be opened on. */
|
|
145
|
+
export const UPLOAD_ACTIONS = ["submit_work", "set_page_photo"];
|
|
146
|
+
const FILE_ID = new RegExp(`^[A-Za-z0-9_-]{1,${MAX_FILE_ID}}$`);
|
|
147
|
+
/** Why a spec is not one the store keeps, or null. */
|
|
148
|
+
export function uploadSpecProblem(raw) {
|
|
149
|
+
const spec = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : null;
|
|
150
|
+
if (!spec)
|
|
151
|
+
return "bad-spec";
|
|
152
|
+
if (!Array.isArray(spec.expect) || spec.expect.length > MAX_UPLOAD_FILES || spec.expect.some((one) => typeof one !== "string" || !FILE_ID.test(one)))
|
|
153
|
+
return "bad-spec";
|
|
154
|
+
if (new Set(spec.expect).size !== spec.expect.length)
|
|
155
|
+
return "bad-spec";
|
|
156
|
+
if (!Number.isInteger(spec.extra) || spec.extra < 0 || spec.extra > MAX_UPLOAD_FILES)
|
|
157
|
+
return "bad-spec";
|
|
158
|
+
if (spec.expect.length + spec.extra === 0 || spec.expect.length + spec.extra > MAX_UPLOAD_FILES)
|
|
159
|
+
return "bad-spec";
|
|
160
|
+
if (!Array.isArray(spec.types) || spec.types.length === 0 || spec.types.some((one) => !UPLOAD_TYPES.includes(one)))
|
|
161
|
+
return "bad-spec";
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Whether a file with this id may be kept, given the ids already kept: one the answer expects, a re-upload of one
|
|
166
|
+
* already kept (it replaces it), or a new one while the extras last. The code names what is wrong.
|
|
167
|
+
*/
|
|
168
|
+
/** The id an uploaded file is kept under: the one id the answer names that means it (`evidenceIdIn`: "Login Error.png" for "login-error"), else its own. */
|
|
169
|
+
export function uploadIdFor(spec, name) {
|
|
170
|
+
const own = uploadIdOf(name);
|
|
171
|
+
if (spec.expect.includes(own))
|
|
172
|
+
return own;
|
|
173
|
+
const fits = spec.expect.filter((id) => evidenceIdIn(id, [own]));
|
|
174
|
+
return fits.length === 1 ? fits[0] : own;
|
|
175
|
+
}
|
|
176
|
+
export function uploadNameAllowed(spec, id, kept) {
|
|
177
|
+
if (spec.expect.includes(id) || kept.includes(id))
|
|
178
|
+
return "ok";
|
|
179
|
+
if (spec.extra === 0)
|
|
180
|
+
return "unexpected-name";
|
|
181
|
+
const extras = kept.filter((one) => !spec.expect.includes(one)).length;
|
|
182
|
+
return extras < spec.extra ? "ok" : "too-many-files";
|
|
183
|
+
}
|
|
184
|
+
/** What an upload refusal says, in plain words for the agent that tried. */
|
|
185
|
+
export function uploadRefusalWords(code, spec) {
|
|
186
|
+
const types = (spec?.types ?? [...UPLOAD_TYPES]).map((one) => UPLOAD_TYPE_WORDS[one]).join(", ");
|
|
187
|
+
switch (code) {
|
|
188
|
+
case "bad-name":
|
|
189
|
+
return `That name isn't one this address takes. Name the file with letters, digits, dashes or dots, ending in .png, .jpg, .webp or .pdf.`;
|
|
190
|
+
case "unexpected-name":
|
|
191
|
+
return `This answer doesn't name that file. It takes: ${(spec?.expect ?? []).map((one) => `${one}.<png|jpg|webp|pdf>`).join(", ") || "nothing by that name"}.`;
|
|
192
|
+
case "too-many-files":
|
|
193
|
+
return `This answer takes ${spec ? spec.expect.length + spec.extra : MAX_UPLOAD_FILES} file${spec && spec.expect.length + spec.extra === 1 ? "" : "s"} at most. Upload again under a name already sent to replace it.`;
|
|
194
|
+
case "not-a-file-type":
|
|
195
|
+
return `Those bytes aren't a ${types} file, whatever the name says. Nothing was kept.`;
|
|
196
|
+
case "type-not-taken":
|
|
197
|
+
return `This answer's page takes ${types} only. Nothing was kept.`;
|
|
198
|
+
case "type-mismatch":
|
|
199
|
+
return "The file's name or Content-Type says one type and its bytes another. Nothing was kept.";
|
|
200
|
+
case "too-big":
|
|
201
|
+
return `A file may be ${MAX_UPLOAD_BYTES / 1_000_000} MB at most. Nothing was kept.`;
|
|
202
|
+
case "bad-size":
|
|
203
|
+
return `Say the file's exact size in bytes ("bytes": 12345) and its type ("type": "image/png") to get a signed URL for it.`;
|
|
204
|
+
case "size-mismatch":
|
|
205
|
+
return "What landed is not the size the URL was signed for. It was deleted; ask for a new URL with the file's exact size.";
|
|
206
|
+
case "not-arrived":
|
|
207
|
+
return "Nothing arrived at the signed URL before the person opened the page. They add it there.";
|
|
208
|
+
case "sign-first":
|
|
209
|
+
return `Ask for a signed URL first: POST {"type": "image/png", "bytes": <size>} to this address and the file's name, then PUT the file to the url it gives, with the headers it gives.`;
|
|
210
|
+
case "too-many":
|
|
211
|
+
return `One request signs at most ${MAX_UPLOAD_FILES} files, and no answer takes more. This one was not signed.`;
|
|
212
|
+
case "draft-full":
|
|
213
|
+
return `This answer's files may come to ${MAX_DRAFT_UPLOAD_BYTES / 1_000_000} MB together. Nothing was kept.`;
|
|
214
|
+
case "owner-full":
|
|
215
|
+
return "You have too many files waiting on answers right now. Send or drop one first. Nothing was kept.";
|
|
216
|
+
case "empty":
|
|
217
|
+
return `A file can't be 0 bytes. Ask for a signed URL first with the file's exact size: POST {"type": "image/png", "bytes": <exact size in bytes>} to this address and the file's name, then PUT the file to the url it gives.`;
|
|
218
|
+
case "closed":
|
|
219
|
+
return "This upload address is closed: the person has opened the answer page or sent it. They add any more files there, or you call submit_work again for a new link with a new address.";
|
|
220
|
+
case "expired":
|
|
221
|
+
return "This upload address has expired. Call submit_work again for a new one, or the person adds the files on the page.";
|
|
222
|
+
case "changed":
|
|
223
|
+
return "This file was sent again after it was checked, so it was not kept. Send it again, or the person adds it on the page.";
|
|
224
|
+
case "rate-limited":
|
|
225
|
+
return "Too many uploads at once. Wait a minute and try again.";
|
|
226
|
+
default:
|
|
227
|
+
return "That upload couldn't be kept just now. Try again in a minute, or the person adds the file on the page.";
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/** Why a file that came was not kept, in a few words: for link_status, the agent's list and the answer page. */
|
|
231
|
+
export const UPLOAD_REFUSAL_SHORT = {
|
|
232
|
+
"too-big": `over ${MAX_UPLOAD_BYTES / 1_000_000} MB`,
|
|
233
|
+
"size-mismatch": "not the size it was signed for",
|
|
234
|
+
"not-a-file-type": "not a PNG, JPG, WebP or PDF",
|
|
235
|
+
"type-mismatch": "its bytes are another type than it said",
|
|
236
|
+
"draft-full": `over the answer's ${MAX_DRAFT_UPLOAD_BYTES / 1_000_000} MB`,
|
|
237
|
+
"owner-full": `over the ${MAX_OWNER_UPLOAD_BYTES / 1_000_000} MB of files one person may have waiting`,
|
|
238
|
+
"not-arrived": "it never arrived",
|
|
239
|
+
changed: "it was changed after it was checked"
|
|
240
|
+
};
|
|
241
|
+
export const uploadRefusalShort = (code) => UPLOAD_REFUSAL_SHORT[code] ?? "it couldn't be kept";
|
|
242
|
+
/** "2 files attached (login.png, crash.pdf); not received: settings." for link_status and the report page. */
|
|
243
|
+
export function draftFilesWords(files) {
|
|
244
|
+
const attached = files.attached === 0 ? (files.waiting?.length ? "No files checked yet" : "No files attached yet") : `${files.attached} file${files.attached === 1 ? "" : "s"} attached (${files.names.join(", ")})`;
|
|
245
|
+
const waiting = files.waiting?.length ? `; upload requested, not checked: ${files.waiting.join(", ")}` : "";
|
|
246
|
+
const missing = files.missing.length ? `; not received: ${files.missing.join(", ")}` : "";
|
|
247
|
+
const refused = files.refused?.length ? `; not kept: ${files.refused.map((one) => `${one.name} (${uploadRefusalShort(one.code)})`).join(", ")}` : "";
|
|
248
|
+
const closed = files.open ? "" : ". The upload address is closed; check the next screen for available attachment options";
|
|
249
|
+
return `${attached}${waiting}${missing}${refused}${closed}.`;
|
|
250
|
+
}
|
|
251
|
+
/** The evidence ids an answer names: every string in an `evidence` list, at any depth (a report's steps and findings, a form's rows). */
|
|
252
|
+
export function evidenceIdsOf(value, found = new Set(), depth = 0) {
|
|
253
|
+
if (depth > 8 || !value || typeof value !== "object")
|
|
254
|
+
return [...found];
|
|
255
|
+
if (Array.isArray(value)) {
|
|
256
|
+
for (const one of value)
|
|
257
|
+
evidenceIdsOf(one, found, depth + 1);
|
|
258
|
+
return [...found];
|
|
259
|
+
}
|
|
260
|
+
for (const [key, inner] of Object.entries(value)) {
|
|
261
|
+
if (key === "evidence" && Array.isArray(inner)) {
|
|
262
|
+
for (const id of inner)
|
|
263
|
+
if (typeof id === "string" && FILE_ID.test(id))
|
|
264
|
+
found.add(id);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
evidenceIdsOf(inner, found, depth + 1);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return [...found];
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=draftUploads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draftUploads.js","sourceRoot":"","sources":["../../../src/data/draftUploads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every Asks notice email, with when it is sent (workers/src/invites/email.ts sends them; workers/src/email/prefs.ts
|
|
3
|
+
* keeps who switched which off). One list for the worker, the Settings page, each email's footer and the MCP's
|
|
4
|
+
* `email_settings`, so they never disagree on a label. Default: all on.
|
|
5
|
+
*/
|
|
6
|
+
export declare const EMAIL_KINDS: readonly [{
|
|
7
|
+
readonly key: "invited";
|
|
8
|
+
readonly label: "You were invited to a Pro Ask";
|
|
9
|
+
readonly when: "As soon as someone invites you";
|
|
10
|
+
}, {
|
|
11
|
+
readonly key: "ok-waiting";
|
|
12
|
+
readonly label: "A report needs your review";
|
|
13
|
+
readonly when: "When a report waits for your OK";
|
|
14
|
+
}, {
|
|
15
|
+
readonly key: "ok-reminder";
|
|
16
|
+
readonly label: "Reminder: a report is still waiting";
|
|
17
|
+
readonly when: "3 days later, if you haven't decided";
|
|
18
|
+
}, {
|
|
19
|
+
readonly key: "full";
|
|
20
|
+
readonly label: "Your Pro Ask reached its report limit";
|
|
21
|
+
readonly when: "When the limit is reached and the target is unmet or unavailable";
|
|
22
|
+
}, {
|
|
23
|
+
readonly key: "target-reached";
|
|
24
|
+
readonly label: "Your Pro Ask reached its approval target";
|
|
25
|
+
readonly when: "When the recorded approval count reaches the target";
|
|
26
|
+
}, {
|
|
27
|
+
readonly key: "report-paid";
|
|
28
|
+
readonly label: "You were paid for a report";
|
|
29
|
+
readonly when: "As soon as your report is approved and paid";
|
|
30
|
+
}, {
|
|
31
|
+
readonly key: "report-declined";
|
|
32
|
+
readonly label: "Your report was not approved";
|
|
33
|
+
readonly when: "As soon as your report is turned down";
|
|
34
|
+
}, {
|
|
35
|
+
readonly key: "assistant-on";
|
|
36
|
+
readonly label: "Assistant can send completions";
|
|
37
|
+
readonly when: "When you turn it on";
|
|
38
|
+
}, {
|
|
39
|
+
readonly key: "digest";
|
|
40
|
+
readonly label: "Hourly summary";
|
|
41
|
+
readonly when: "At most once an hour, only if something happened: who joined, new reports, messages, invite answers";
|
|
42
|
+
}];
|
|
43
|
+
export type EmailKindKey = (typeof EMAIL_KINDS)[number]["key"];
|
|
44
|
+
export declare const isEmailKind: (key: unknown) => key is EmailKindKey;
|
|
45
|
+
export declare const emailKindLabel: (key: string) => string | null;
|
|
46
|
+
/** A person's email settings, as `/email/prefs` answers. `emailHint` is masked (`yo•••@gmail.com`), null when none is kept. */
|
|
47
|
+
export interface EmailPrefs {
|
|
48
|
+
all: boolean;
|
|
49
|
+
kinds: Record<EmailKindKey, boolean>;
|
|
50
|
+
emailHint: string | null;
|
|
51
|
+
}
|
|
52
|
+
/** Reject incomplete responses rather than presenting guessed settings. */
|
|
53
|
+
export declare function isEmailPrefs(value: unknown): value is EmailPrefs;
|
|
54
|
+
/** The settings as plain lines, including saved preferences while notifications are off. */
|
|
55
|
+
export declare function emailPrefsLines(prefs: EmailPrefs): string[];
|
|
56
|
+
//# sourceMappingURL=emailKinds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailKinds.d.ts","sourceRoot":"","sources":["../../../src/data/emailKinds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUd,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAE/D,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,YAA0D,CAAC;AAE7G,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAAiE,CAAC;AAExH,+HAA+H;AAC/H,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAMhE;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAE3D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every Asks notice email, with when it is sent (workers/src/invites/email.ts sends them; workers/src/email/prefs.ts
|
|
3
|
+
* keeps who switched which off). One list for the worker, the Settings page, each email's footer and the MCP's
|
|
4
|
+
* `email_settings`, so they never disagree on a label. Default: all on.
|
|
5
|
+
*/
|
|
6
|
+
export const EMAIL_KINDS = [
|
|
7
|
+
{ key: "invited", label: "You were invited to a Pro Ask", when: "As soon as someone invites you" },
|
|
8
|
+
{ key: "ok-waiting", label: "A report needs your review", when: "When a report waits for your OK" },
|
|
9
|
+
{ key: "ok-reminder", label: "Reminder: a report is still waiting", when: "3 days later, if you haven't decided" },
|
|
10
|
+
{ key: "full", label: "Your Pro Ask reached its report limit", when: "When the limit is reached and the target is unmet or unavailable" },
|
|
11
|
+
{ key: "target-reached", label: "Your Pro Ask reached its approval target", when: "When the recorded approval count reaches the target" },
|
|
12
|
+
{ key: "report-paid", label: "You were paid for a report", when: "As soon as your report is approved and paid" },
|
|
13
|
+
{ key: "report-declined", label: "Your report was not approved", when: "As soon as your report is turned down" },
|
|
14
|
+
{ key: "assistant-on", label: "Assistant can send completions", when: "When you turn it on" },
|
|
15
|
+
{ key: "digest", label: "Hourly summary", when: "At most once an hour, only if something happened: who joined, new reports, messages, invite answers" }
|
|
16
|
+
];
|
|
17
|
+
export const isEmailKind = (key) => EMAIL_KINDS.some((one) => one.key === key);
|
|
18
|
+
export const emailKindLabel = (key) => EMAIL_KINDS.find((one) => one.key === key)?.label ?? null;
|
|
19
|
+
/** Reject incomplete responses rather than presenting guessed settings. */
|
|
20
|
+
export function isEmailPrefs(value) {
|
|
21
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
22
|
+
return false;
|
|
23
|
+
const record = value;
|
|
24
|
+
const kinds = record.kinds;
|
|
25
|
+
return typeof record.all === "boolean" && (record.emailHint === null || typeof record.emailHint === "string") &&
|
|
26
|
+
Boolean(kinds && typeof kinds === "object" && !Array.isArray(kinds) && EMAIL_KINDS.every((one) => typeof kinds[one.key] === "boolean"));
|
|
27
|
+
}
|
|
28
|
+
/** The settings as plain lines, including saved preferences while notifications are off. */
|
|
29
|
+
export function emailPrefsLines(prefs) {
|
|
30
|
+
return [`Notification emails: ${prefs.all ? "on" : "off"}`, ...EMAIL_KINDS.map((one) => `${one.label}: ${prefs.kinds[one.key] ? (prefs.all ? "on" : "on when notifications are enabled") : "off"}. ${one.when}.`)];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=emailKinds.js.map
|