@ixo/openhands-sdk 0.2.0 → 0.4.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/dist/cjs/campaign/campaign.js +3 -2
- package/dist/cjs/campaign/campaign.js.map +1 -1
- package/dist/cjs/campaign/funding.d.ts.map +1 -1
- package/dist/cjs/campaign/funding.js +3 -0
- package/dist/cjs/campaign/funding.js.map +1 -1
- package/dist/cjs/campaign/pool.d.ts.map +1 -1
- package/dist/cjs/campaign/pool.js +2 -1
- package/dist/cjs/campaign/pool.js.map +1 -1
- package/dist/cjs/campaign/spots.d.ts.map +1 -1
- package/dist/cjs/campaign/spots.js +8 -6
- package/dist/cjs/campaign/spots.js.map +1 -1
- package/dist/cjs/chain/ask.d.ts +104 -14
- package/dist/cjs/chain/ask.d.ts.map +1 -1
- package/dist/cjs/chain/ask.js +151 -78
- package/dist/cjs/chain/ask.js.map +1 -1
- package/dist/cjs/chain/askImage.d.ts +19 -0
- package/dist/cjs/chain/askImage.d.ts.map +1 -0
- package/dist/cjs/chain/askImage.js +56 -0
- package/dist/cjs/chain/askImage.js.map +1 -0
- package/dist/cjs/chain/bridge.d.ts +7 -33
- package/dist/cjs/chain/bridge.d.ts.map +1 -1
- package/dist/cjs/chain/bridge.js +10 -25
- package/dist/cjs/chain/bridge.js.map +1 -1
- package/dist/cjs/chain/claimSubmit.d.ts +15 -0
- package/dist/cjs/chain/claimSubmit.d.ts.map +1 -0
- package/dist/cjs/chain/claimSubmit.js +14 -0
- package/dist/cjs/chain/claimSubmit.js.map +1 -0
- package/dist/cjs/chain/delegate.d.ts +52 -7
- package/dist/cjs/chain/delegate.d.ts.map +1 -1
- package/dist/cjs/chain/delegate.js +66 -14
- package/dist/cjs/chain/delegate.js.map +1 -1
- package/dist/cjs/chain/domainIndexer.d.ts +26 -0
- package/dist/cjs/chain/domainIndexer.d.ts.map +1 -0
- package/dist/cjs/chain/domainIndexer.js +51 -0
- package/dist/cjs/chain/domainIndexer.js.map +1 -0
- package/dist/cjs/chain/entityShape.d.ts +233 -0
- package/dist/cjs/chain/entityShape.d.ts.map +1 -0
- package/dist/cjs/chain/entityShape.js +251 -0
- package/dist/cjs/chain/entityShape.js.map +1 -0
- package/dist/cjs/chain/env.d.ts +103 -6
- package/dist/cjs/chain/env.d.ts.map +1 -1
- package/dist/cjs/chain/env.js +188 -14
- package/dist/cjs/chain/env.js.map +1 -1
- package/dist/cjs/chain/guest.d.ts +14 -0
- package/dist/cjs/chain/guest.d.ts.map +1 -1
- package/dist/cjs/chain/guest.js +9 -9
- package/dist/cjs/chain/guest.js.map +1 -1
- package/dist/cjs/chain/money.d.ts +47 -2
- package/dist/cjs/chain/money.d.ts.map +1 -1
- package/dist/cjs/chain/money.js +63 -6
- package/dist/cjs/chain/money.js.map +1 -1
- package/dist/cjs/chain/orgReviewBilling.d.ts +124 -0
- package/dist/cjs/chain/orgReviewBilling.d.ts.map +1 -0
- package/dist/cjs/chain/orgReviewBilling.js +290 -0
- package/dist/cjs/chain/orgReviewBilling.js.map +1 -0
- package/dist/cjs/chain/orgReviewBillingSign.d.ts +63 -0
- package/dist/cjs/chain/orgReviewBillingSign.d.ts.map +1 -0
- package/dist/cjs/chain/orgReviewBillingSign.js +166 -0
- package/dist/cjs/chain/orgReviewBillingSign.js.map +1 -0
- package/dist/cjs/chain/payoutSettings.d.ts +97 -0
- package/dist/cjs/chain/payoutSettings.d.ts.map +1 -0
- package/dist/cjs/chain/payoutSettings.js +123 -0
- package/dist/cjs/chain/payoutSettings.js.map +1 -0
- package/dist/cjs/chain/payoutTerms.d.ts +72 -0
- package/dist/cjs/chain/payoutTerms.d.ts.map +1 -0
- package/dist/cjs/chain/payoutTerms.js +141 -0
- package/dist/cjs/chain/payoutTerms.js.map +1 -0
- package/dist/cjs/chain/query.d.ts +14 -0
- package/dist/cjs/chain/query.d.ts.map +1 -1
- package/dist/cjs/chain/query.js +27 -0
- package/dist/cjs/chain/query.js.map +1 -1
- package/dist/cjs/chain/reviewBilling.d.ts +86 -0
- package/dist/cjs/chain/reviewBilling.d.ts.map +1 -0
- package/dist/cjs/chain/reviewBilling.js +265 -0
- package/dist/cjs/chain/reviewBilling.js.map +1 -0
- package/dist/cjs/chain/store.d.ts +7 -6
- package/dist/cjs/chain/store.d.ts.map +1 -1
- package/dist/cjs/chain/store.js +7 -6
- package/dist/cjs/chain/store.js.map +1 -1
- package/dist/cjs/chain/subscription.d.ts +0 -7
- package/dist/cjs/chain/subscription.d.ts.map +1 -1
- package/dist/cjs/chain/subscription.js +4 -47
- package/dist/cjs/chain/subscription.js.map +1 -1
- package/dist/cjs/chain/takeBack.d.ts +12 -0
- package/dist/cjs/chain/takeBack.d.ts.map +1 -1
- package/dist/cjs/chain/takeBack.js +24 -10
- package/dist/cjs/chain/takeBack.js.map +1 -1
- package/dist/cjs/chain/why.d.ts +44 -0
- package/dist/cjs/chain/why.d.ts.map +1 -0
- package/dist/cjs/chain/why.js +153 -0
- package/dist/cjs/chain/why.js.map +1 -0
- package/dist/cjs/chain/whyMint.d.ts +8 -0
- package/dist/cjs/chain/whyMint.d.ts.map +1 -0
- package/dist/cjs/chain/whyMint.js +53 -0
- package/dist/cjs/chain/whyMint.js.map +1 -0
- package/dist/cjs/chain.d.ts +8 -4
- package/dist/cjs/chain.d.ts.map +1 -1
- package/dist/cjs/chain.js +19 -9
- package/dist/cjs/chain.js.map +1 -1
- package/dist/cjs/config.d.ts +37 -5
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +9 -2
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/data/agent.d.ts.map +1 -1
- package/dist/cjs/data/agent.js +5 -4
- package/dist/cjs/data/agent.js.map +1 -1
- package/dist/cjs/data/askEntity.d.ts +40 -0
- package/dist/cjs/data/askEntity.d.ts.map +1 -0
- package/dist/cjs/data/askEntity.js +48 -0
- package/dist/cjs/data/askEntity.js.map +1 -0
- package/dist/cjs/data/askLinks.d.ts +6 -0
- package/dist/cjs/data/askLinks.d.ts.map +1 -0
- package/dist/cjs/data/askLinks.js +21 -0
- package/dist/cjs/data/askLinks.js.map +1 -0
- package/dist/cjs/data/board/assemble.d.ts.map +1 -1
- package/dist/cjs/data/board/assemble.js +15 -2
- package/dist/cjs/data/board/assemble.js.map +1 -1
- package/dist/cjs/data/board/facts.d.ts +11 -0
- package/dist/cjs/data/board/facts.d.ts.map +1 -1
- package/dist/cjs/data/board/facts.js +16 -0
- package/dist/cjs/data/board/facts.js.map +1 -1
- package/dist/cjs/data/board/read.d.ts.map +1 -1
- package/dist/cjs/data/board/read.js +2 -1
- package/dist/cjs/data/board/read.js.map +1 -1
- package/dist/cjs/data/board/types.d.ts +9 -0
- package/dist/cjs/data/board/types.d.ts.map +1 -1
- package/dist/cjs/data/board/types.js.map +1 -1
- package/dist/cjs/data/docs.d.ts +10 -2
- package/dist/cjs/data/docs.d.ts.map +1 -1
- package/dist/cjs/data/docs.js +43 -3
- package/dist/cjs/data/docs.js.map +1 -1
- package/dist/cjs/data/format.js +1 -1
- package/dist/cjs/data/format.js.map +1 -1
- package/dist/cjs/data/install.d.ts +8 -0
- package/dist/cjs/data/install.d.ts.map +1 -1
- package/dist/cjs/data/install.js +9 -1
- package/dist/cjs/data/install.js.map +1 -1
- package/dist/cjs/data/oracleInfo.d.ts +6 -1
- package/dist/cjs/data/oracleInfo.d.ts.map +1 -1
- package/dist/cjs/data/oracleInfo.js +22 -3
- package/dist/cjs/data/oracleInfo.js.map +1 -1
- package/dist/cjs/data/oracles.d.ts +62 -5
- package/dist/cjs/data/oracles.d.ts.map +1 -1
- package/dist/cjs/data/oracles.js +90 -11
- package/dist/cjs/data/oracles.js.map +1 -1
- package/dist/cjs/data/orgPayouts.d.ts +87 -0
- package/dist/cjs/data/orgPayouts.d.ts.map +1 -0
- package/dist/cjs/data/orgPayouts.js +183 -0
- package/dist/cjs/data/orgPayouts.js.map +1 -0
- package/dist/cjs/data/plans.d.ts +8 -0
- package/dist/cjs/data/plans.d.ts.map +1 -0
- package/dist/cjs/data/plans.js +12 -0
- package/dist/cjs/data/plans.js.map +1 -0
- package/dist/cjs/data/profiles.d.ts +20 -0
- package/dist/cjs/data/profiles.d.ts.map +1 -1
- package/dist/cjs/data/profiles.js +63 -4
- 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 +3 -2
- package/dist/cjs/data/queue.js.map +1 -1
- package/dist/cjs/data/receipt.d.ts +7 -0
- package/dist/cjs/data/receipt.d.ts.map +1 -1
- package/dist/cjs/data/receipt.js +25 -6
- package/dist/cjs/data/receipt.js.map +1 -1
- package/dist/cjs/data/resources.d.ts +3 -0
- package/dist/cjs/data/resources.d.ts.map +1 -1
- package/dist/cjs/data/resources.js +4 -1
- package/dist/cjs/data/resources.js.map +1 -1
- package/dist/cjs/data/threads.d.ts +14 -0
- package/dist/cjs/data/threads.d.ts.map +1 -1
- package/dist/cjs/data/threads.js +40 -23
- package/dist/cjs/data/threads.js.map +1 -1
- package/dist/cjs/data/trace.d.ts +8 -0
- package/dist/cjs/data/trace.d.ts.map +1 -1
- package/dist/cjs/data/trace.js +1 -1
- package/dist/cjs/data/trace.js.map +1 -1
- package/dist/cjs/data/traceWords.d.ts +4 -1
- package/dist/cjs/data/traceWords.d.ts.map +1 -1
- package/dist/cjs/data/traceWords.js +8 -2
- package/dist/cjs/data/traceWords.js.map +1 -1
- package/dist/cjs/data/why.d.ts +38 -0
- package/dist/cjs/data/why.d.ts.map +1 -0
- package/dist/cjs/data/why.js +86 -0
- package/dist/cjs/data/why.js.map +1 -0
- package/dist/cjs/data/whyReceipt.d.ts +33 -0
- package/dist/cjs/data/whyReceipt.d.ts.map +1 -0
- package/dist/cjs/data/whyReceipt.js +291 -0
- package/dist/cjs/data/whyReceipt.js.map +1 -0
- package/dist/cjs/geo/exifcarry.d.ts +9 -0
- package/dist/cjs/geo/exifcarry.d.ts.map +1 -1
- package/dist/cjs/geo/exifcarry.js +35 -0
- package/dist/cjs/geo/exifcarry.js.map +1 -1
- package/dist/cjs/geo/geohash.d.ts +25 -0
- package/dist/cjs/geo/geohash.d.ts.map +1 -0
- package/dist/cjs/geo/geohash.js +114 -0
- package/dist/cjs/geo/geohash.js.map +1 -0
- package/dist/cjs/geo/provenance.d.ts +41 -0
- package/dist/cjs/geo/provenance.d.ts.map +1 -0
- package/dist/cjs/geo/provenance.js +134 -0
- package/dist/cjs/geo/provenance.js.map +1 -0
- package/dist/cjs/rubric/bridge.d.ts +98 -2
- package/dist/cjs/rubric/bridge.d.ts.map +1 -1
- package/dist/cjs/rubric/bridge.js +132 -15
- package/dist/cjs/rubric/bridge.js.map +1 -1
- package/dist/cjs/rubric/card.d.ts +28 -14
- package/dist/cjs/rubric/card.d.ts.map +1 -1
- package/dist/cjs/rubric/card.js +28 -7
- package/dist/cjs/rubric/card.js.map +1 -1
- package/dist/cjs/rubric/claimForm.d.ts +116 -0
- package/dist/cjs/rubric/claimForm.d.ts.map +1 -1
- package/dist/cjs/rubric/claimForm.js +12 -1
- package/dist/cjs/rubric/claimForm.js.map +1 -1
- package/dist/cjs/rubric/compose.d.ts +5 -0
- package/dist/cjs/rubric/compose.d.ts.map +1 -1
- package/dist/cjs/rubric/compose.js +9 -3
- package/dist/cjs/rubric/compose.js.map +1 -1
- package/dist/cjs/rubric/gateMet.d.ts.map +1 -1
- package/dist/cjs/rubric/gateMet.js +4 -2
- package/dist/cjs/rubric/gateMet.js.map +1 -1
- package/dist/cjs/rubric/leg.d.ts +2 -2
- package/dist/cjs/rubric/leg.d.ts.map +1 -1
- package/dist/cjs/rubric/leg.js +7 -5
- package/dist/cjs/rubric/leg.js.map +1 -1
- package/dist/cjs/rubric/marketPlan.d.ts +182 -0
- package/dist/cjs/rubric/marketPlan.d.ts.map +1 -0
- package/dist/cjs/rubric/marketPlan.js +419 -0
- package/dist/cjs/rubric/marketPlan.js.map +1 -0
- package/dist/cjs/rubric/observation.d.ts +95 -0
- package/dist/cjs/rubric/observation.d.ts.map +1 -0
- package/dist/cjs/rubric/observation.js +88 -0
- package/dist/cjs/rubric/observation.js.map +1 -0
- package/dist/cjs/rubric/pingLink.d.ts +45 -0
- package/dist/cjs/rubric/pingLink.d.ts.map +1 -0
- package/dist/cjs/rubric/pingLink.js +74 -0
- package/dist/cjs/rubric/pingLink.js.map +1 -0
- package/dist/cjs/rubric/pingMatch.d.ts +73 -0
- package/dist/cjs/rubric/pingMatch.d.ts.map +1 -0
- package/dist/cjs/rubric/pingMatch.js +65 -0
- package/dist/cjs/rubric/pingMatch.js.map +1 -0
- package/dist/cjs/rubric/survey.d.ts +65 -0
- package/dist/cjs/rubric/survey.d.ts.map +1 -0
- package/dist/cjs/rubric/survey.js +101 -0
- package/dist/cjs/rubric/survey.js.map +1 -0
- package/dist/cjs/rubric/terms.d.ts +15 -0
- package/dist/cjs/rubric/terms.d.ts.map +1 -1
- package/dist/cjs/rubric/terms.js +14 -1
- package/dist/cjs/rubric/terms.js.map +1 -1
- package/dist/cjs/rubric.d.ts +1 -1
- package/dist/cjs/rubric.d.ts.map +1 -1
- package/dist/cjs/rubric.js +4 -2
- package/dist/cjs/rubric.js.map +1 -1
- package/dist/esm/campaign/campaign.js +4 -3
- package/dist/esm/campaign/campaign.js.map +1 -1
- package/dist/esm/campaign/funding.d.ts.map +1 -1
- package/dist/esm/campaign/funding.js +3 -0
- package/dist/esm/campaign/funding.js.map +1 -1
- package/dist/esm/campaign/pool.d.ts.map +1 -1
- package/dist/esm/campaign/pool.js +2 -1
- package/dist/esm/campaign/pool.js.map +1 -1
- package/dist/esm/campaign/spots.d.ts.map +1 -1
- package/dist/esm/campaign/spots.js +8 -6
- package/dist/esm/campaign/spots.js.map +1 -1
- package/dist/esm/chain/ask.d.ts +104 -14
- package/dist/esm/chain/ask.d.ts.map +1 -1
- package/dist/esm/chain/ask.js +152 -80
- package/dist/esm/chain/ask.js.map +1 -1
- package/dist/esm/chain/askImage.d.ts +19 -0
- package/dist/esm/chain/askImage.d.ts.map +1 -0
- package/dist/esm/chain/askImage.js +50 -0
- package/dist/esm/chain/askImage.js.map +1 -0
- package/dist/esm/chain/bridge.d.ts +7 -33
- package/dist/esm/chain/bridge.d.ts.map +1 -1
- package/dist/esm/chain/bridge.js +10 -24
- package/dist/esm/chain/bridge.js.map +1 -1
- package/dist/esm/chain/claimSubmit.d.ts +15 -0
- package/dist/esm/chain/claimSubmit.d.ts.map +1 -0
- package/dist/esm/chain/claimSubmit.js +10 -0
- package/dist/esm/chain/claimSubmit.js.map +1 -0
- package/dist/esm/chain/delegate.d.ts +52 -7
- package/dist/esm/chain/delegate.d.ts.map +1 -1
- package/dist/esm/chain/delegate.js +64 -13
- package/dist/esm/chain/delegate.js.map +1 -1
- package/dist/esm/chain/domainIndexer.d.ts +26 -0
- package/dist/esm/chain/domainIndexer.d.ts.map +1 -0
- package/dist/esm/chain/domainIndexer.js +48 -0
- package/dist/esm/chain/domainIndexer.js.map +1 -0
- package/dist/esm/chain/entityShape.d.ts +233 -0
- package/dist/esm/chain/entityShape.d.ts.map +1 -0
- package/dist/esm/chain/entityShape.js +231 -0
- package/dist/esm/chain/entityShape.js.map +1 -0
- package/dist/esm/chain/env.d.ts +103 -6
- package/dist/esm/chain/env.d.ts.map +1 -1
- package/dist/esm/chain/env.js +174 -12
- package/dist/esm/chain/env.js.map +1 -1
- package/dist/esm/chain/guest.d.ts +14 -0
- package/dist/esm/chain/guest.d.ts.map +1 -1
- package/dist/esm/chain/guest.js +7 -8
- package/dist/esm/chain/guest.js.map +1 -1
- package/dist/esm/chain/money.d.ts +47 -2
- package/dist/esm/chain/money.d.ts.map +1 -1
- package/dist/esm/chain/money.js +54 -4
- package/dist/esm/chain/money.js.map +1 -1
- package/dist/esm/chain/orgReviewBilling.d.ts +124 -0
- package/dist/esm/chain/orgReviewBilling.d.ts.map +1 -0
- package/dist/esm/chain/orgReviewBilling.js +241 -0
- package/dist/esm/chain/orgReviewBilling.js.map +1 -0
- package/dist/esm/chain/orgReviewBillingSign.d.ts +63 -0
- package/dist/esm/chain/orgReviewBillingSign.d.ts.map +1 -0
- package/dist/esm/chain/orgReviewBillingSign.js +124 -0
- package/dist/esm/chain/orgReviewBillingSign.js.map +1 -0
- package/dist/esm/chain/payoutSettings.d.ts +97 -0
- package/dist/esm/chain/payoutSettings.d.ts.map +1 -0
- package/dist/esm/chain/payoutSettings.js +111 -0
- package/dist/esm/chain/payoutSettings.js.map +1 -0
- package/dist/esm/chain/payoutTerms.d.ts +72 -0
- package/dist/esm/chain/payoutTerms.d.ts.map +1 -0
- package/dist/esm/chain/payoutTerms.js +127 -0
- package/dist/esm/chain/payoutTerms.js.map +1 -0
- package/dist/esm/chain/query.d.ts +14 -0
- package/dist/esm/chain/query.d.ts.map +1 -1
- package/dist/esm/chain/query.js +25 -0
- package/dist/esm/chain/query.js.map +1 -1
- package/dist/esm/chain/reviewBilling.d.ts +86 -0
- package/dist/esm/chain/reviewBilling.d.ts.map +1 -0
- package/dist/esm/chain/reviewBilling.js +215 -0
- package/dist/esm/chain/reviewBilling.js.map +1 -0
- package/dist/esm/chain/store.d.ts +7 -6
- package/dist/esm/chain/store.d.ts.map +1 -1
- package/dist/esm/chain/store.js +7 -6
- package/dist/esm/chain/store.js.map +1 -1
- package/dist/esm/chain/subscription.d.ts +0 -7
- package/dist/esm/chain/subscription.d.ts.map +1 -1
- package/dist/esm/chain/subscription.js +4 -13
- package/dist/esm/chain/subscription.js.map +1 -1
- package/dist/esm/chain/takeBack.d.ts +12 -0
- package/dist/esm/chain/takeBack.d.ts.map +1 -1
- package/dist/esm/chain/takeBack.js +22 -9
- package/dist/esm/chain/takeBack.js.map +1 -1
- package/dist/esm/chain/why.d.ts +44 -0
- package/dist/esm/chain/why.d.ts.map +1 -0
- package/dist/esm/chain/why.js +111 -0
- package/dist/esm/chain/why.js.map +1 -0
- package/dist/esm/chain/whyMint.d.ts +8 -0
- package/dist/esm/chain/whyMint.d.ts.map +1 -0
- package/dist/esm/chain/whyMint.js +17 -0
- package/dist/esm/chain/whyMint.js.map +1 -0
- package/dist/esm/chain.d.ts +8 -4
- package/dist/esm/chain.d.ts.map +1 -1
- package/dist/esm/chain.js +9 -4
- package/dist/esm/chain.js.map +1 -1
- package/dist/esm/config.d.ts +37 -5
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +9 -3
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/data/agent.d.ts.map +1 -1
- package/dist/esm/data/agent.js +5 -4
- package/dist/esm/data/agent.js.map +1 -1
- package/dist/esm/data/askEntity.d.ts +40 -0
- package/dist/esm/data/askEntity.d.ts.map +1 -0
- package/dist/esm/data/askEntity.js +41 -0
- package/dist/esm/data/askEntity.js.map +1 -0
- package/dist/esm/data/askLinks.d.ts +6 -0
- package/dist/esm/data/askLinks.d.ts.map +1 -0
- package/dist/esm/data/askLinks.js +16 -0
- package/dist/esm/data/askLinks.js.map +1 -0
- package/dist/esm/data/board/assemble.d.ts.map +1 -1
- package/dist/esm/data/board/assemble.js +15 -2
- package/dist/esm/data/board/assemble.js.map +1 -1
- package/dist/esm/data/board/facts.d.ts +11 -0
- package/dist/esm/data/board/facts.d.ts.map +1 -1
- package/dist/esm/data/board/facts.js +15 -0
- package/dist/esm/data/board/facts.js.map +1 -1
- package/dist/esm/data/board/read.d.ts.map +1 -1
- package/dist/esm/data/board/read.js +2 -1
- package/dist/esm/data/board/read.js.map +1 -1
- package/dist/esm/data/board/types.d.ts +9 -0
- package/dist/esm/data/board/types.d.ts.map +1 -1
- package/dist/esm/data/board/types.js.map +1 -1
- package/dist/esm/data/docs.d.ts +10 -2
- package/dist/esm/data/docs.d.ts.map +1 -1
- package/dist/esm/data/docs.js +43 -4
- package/dist/esm/data/docs.js.map +1 -1
- package/dist/esm/data/format.js +1 -1
- package/dist/esm/data/format.js.map +1 -1
- package/dist/esm/data/install.d.ts +8 -0
- package/dist/esm/data/install.d.ts.map +1 -1
- package/dist/esm/data/install.js +8 -0
- package/dist/esm/data/install.js.map +1 -1
- package/dist/esm/data/oracleInfo.d.ts +6 -1
- package/dist/esm/data/oracleInfo.d.ts.map +1 -1
- package/dist/esm/data/oracleInfo.js +22 -3
- package/dist/esm/data/oracleInfo.js.map +1 -1
- package/dist/esm/data/oracles.d.ts +62 -5
- package/dist/esm/data/oracles.d.ts.map +1 -1
- package/dist/esm/data/oracles.js +87 -12
- package/dist/esm/data/oracles.js.map +1 -1
- package/dist/esm/data/orgPayouts.d.ts +87 -0
- package/dist/esm/data/orgPayouts.d.ts.map +1 -0
- package/dist/esm/data/orgPayouts.js +170 -0
- package/dist/esm/data/orgPayouts.js.map +1 -0
- package/dist/esm/data/plans.d.ts +8 -0
- package/dist/esm/data/plans.d.ts.map +1 -0
- package/dist/esm/data/plans.js +8 -0
- package/dist/esm/data/plans.js.map +1 -0
- package/dist/esm/data/profiles.d.ts +20 -0
- package/dist/esm/data/profiles.d.ts.map +1 -1
- package/dist/esm/data/profiles.js +60 -4
- 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 +3 -2
- package/dist/esm/data/queue.js.map +1 -1
- package/dist/esm/data/receipt.d.ts +7 -0
- package/dist/esm/data/receipt.d.ts.map +1 -1
- package/dist/esm/data/receipt.js +26 -7
- package/dist/esm/data/receipt.js.map +1 -1
- package/dist/esm/data/resources.d.ts +3 -0
- package/dist/esm/data/resources.d.ts.map +1 -1
- package/dist/esm/data/resources.js +2 -0
- package/dist/esm/data/resources.js.map +1 -1
- package/dist/esm/data/threads.d.ts +14 -0
- package/dist/esm/data/threads.d.ts.map +1 -1
- package/dist/esm/data/threads.js +40 -24
- package/dist/esm/data/threads.js.map +1 -1
- package/dist/esm/data/trace.d.ts +8 -0
- package/dist/esm/data/trace.d.ts.map +1 -1
- package/dist/esm/data/trace.js +1 -1
- package/dist/esm/data/trace.js.map +1 -1
- package/dist/esm/data/traceWords.d.ts +4 -1
- package/dist/esm/data/traceWords.d.ts.map +1 -1
- package/dist/esm/data/traceWords.js +8 -2
- package/dist/esm/data/traceWords.js.map +1 -1
- package/dist/esm/data/why.d.ts +38 -0
- package/dist/esm/data/why.d.ts.map +1 -0
- package/dist/esm/data/why.js +78 -0
- package/dist/esm/data/why.js.map +1 -0
- package/dist/esm/data/whyReceipt.d.ts +33 -0
- package/dist/esm/data/whyReceipt.d.ts.map +1 -0
- package/dist/esm/data/whyReceipt.js +284 -0
- package/dist/esm/data/whyReceipt.js.map +1 -0
- package/dist/esm/geo/exifcarry.d.ts +9 -0
- package/dist/esm/geo/exifcarry.d.ts.map +1 -1
- package/dist/esm/geo/exifcarry.js +34 -0
- package/dist/esm/geo/exifcarry.js.map +1 -1
- package/dist/esm/geo/geohash.d.ts +25 -0
- package/dist/esm/geo/geohash.d.ts.map +1 -0
- package/dist/esm/geo/geohash.js +109 -0
- package/dist/esm/geo/geohash.js.map +1 -0
- package/dist/esm/geo/provenance.d.ts +41 -0
- package/dist/esm/geo/provenance.d.ts.map +1 -0
- package/dist/esm/geo/provenance.js +129 -0
- package/dist/esm/geo/provenance.js.map +1 -0
- package/dist/esm/rubric/bridge.d.ts +98 -2
- package/dist/esm/rubric/bridge.d.ts.map +1 -1
- package/dist/esm/rubric/bridge.js +130 -14
- package/dist/esm/rubric/bridge.js.map +1 -1
- package/dist/esm/rubric/card.d.ts +28 -14
- package/dist/esm/rubric/card.d.ts.map +1 -1
- package/dist/esm/rubric/card.js +24 -5
- package/dist/esm/rubric/card.js.map +1 -1
- package/dist/esm/rubric/claimForm.d.ts +116 -0
- package/dist/esm/rubric/claimForm.d.ts.map +1 -1
- package/dist/esm/rubric/claimForm.js +11 -0
- package/dist/esm/rubric/claimForm.js.map +1 -1
- package/dist/esm/rubric/compose.d.ts +5 -0
- package/dist/esm/rubric/compose.d.ts.map +1 -1
- package/dist/esm/rubric/compose.js +7 -2
- package/dist/esm/rubric/compose.js.map +1 -1
- package/dist/esm/rubric/gateMet.d.ts.map +1 -1
- package/dist/esm/rubric/gateMet.js +4 -2
- package/dist/esm/rubric/gateMet.js.map +1 -1
- package/dist/esm/rubric/leg.d.ts +2 -2
- package/dist/esm/rubric/leg.d.ts.map +1 -1
- package/dist/esm/rubric/leg.js +7 -5
- package/dist/esm/rubric/leg.js.map +1 -1
- package/dist/esm/rubric/marketPlan.d.ts +182 -0
- package/dist/esm/rubric/marketPlan.d.ts.map +1 -0
- package/dist/esm/rubric/marketPlan.js +403 -0
- package/dist/esm/rubric/marketPlan.js.map +1 -0
- package/dist/esm/rubric/observation.d.ts +95 -0
- package/dist/esm/rubric/observation.d.ts.map +1 -0
- package/dist/esm/rubric/observation.js +82 -0
- package/dist/esm/rubric/observation.js.map +1 -0
- package/dist/esm/rubric/pingLink.d.ts +45 -0
- package/dist/esm/rubric/pingLink.d.ts.map +1 -0
- package/dist/esm/rubric/pingLink.js +69 -0
- package/dist/esm/rubric/pingLink.js.map +1 -0
- package/dist/esm/rubric/pingMatch.d.ts +73 -0
- package/dist/esm/rubric/pingMatch.d.ts.map +1 -0
- package/dist/esm/rubric/pingMatch.js +60 -0
- package/dist/esm/rubric/pingMatch.js.map +1 -0
- package/dist/esm/rubric/survey.d.ts +65 -0
- package/dist/esm/rubric/survey.d.ts.map +1 -0
- package/dist/esm/rubric/survey.js +94 -0
- package/dist/esm/rubric/survey.js.map +1 -0
- package/dist/esm/rubric/terms.d.ts +15 -0
- package/dist/esm/rubric/terms.d.ts.map +1 -1
- package/dist/esm/rubric/terms.js +14 -2
- package/dist/esm/rubric/terms.js.map +1 -1
- package/dist/esm/rubric.d.ts +1 -1
- package/dist/esm/rubric.d.ts.map +1 -1
- package/dist/esm/rubric.js +1 -1
- package/dist/esm/rubric.js.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The signed personal link a ping carries (Ask the World, B11).
|
|
3
|
+
*
|
|
4
|
+
* A ping says "this ask, for this person, until this time". The link's token
|
|
5
|
+
* binds those three and the ping's own id under a secret only the network
|
|
6
|
+
* holds, so opening the link proves the ping was sent to that person: the
|
|
7
|
+
* submit page can then answer *as* them, reserve their slot, and file the
|
|
8
|
+
* claim in their name. The token proves who was pinged, nothing more; that
|
|
9
|
+
* a link is opened once is the registry's to enforce, because only it knows.
|
|
10
|
+
*
|
|
11
|
+
* Web Crypto HMAC-SHA-256, so the worker that mints and the app that checks
|
|
12
|
+
* run the same code.
|
|
13
|
+
*/
|
|
14
|
+
/** How long a ping's link stays good: long enough to walk there, short enough that a forwarded link dies. */
|
|
15
|
+
export declare const PING_LINK_MINUTES = 30;
|
|
16
|
+
/** What a valid token says. */
|
|
17
|
+
export interface PingClaim {
|
|
18
|
+
/** The person's address. */
|
|
19
|
+
person: string;
|
|
20
|
+
/** The ask (collection id). */
|
|
21
|
+
ask: string;
|
|
22
|
+
/** The ping's id, so a second open can be refused. */
|
|
23
|
+
ping: string;
|
|
24
|
+
/** Expiry, epoch seconds. */
|
|
25
|
+
exp: number;
|
|
26
|
+
}
|
|
27
|
+
/** A token for one ping. The secret must be the one the app checks with. */
|
|
28
|
+
export declare function mintPingToken(claim: PingClaim, secret: string): Promise<string>;
|
|
29
|
+
export type PingTokenCheck = {
|
|
30
|
+
ok: true;
|
|
31
|
+
claim: PingClaim;
|
|
32
|
+
} | {
|
|
33
|
+
ok: false;
|
|
34
|
+
reason: "malformed" | "forged" | "expired" | "wrong-ask";
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Read a token back. Forged, expired, malformed or meant for another ask: refused, and the
|
|
38
|
+
* reason says which, so the page can tell the person something true.
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkPingToken(token: string, secret: string, opts?: {
|
|
41
|
+
ask?: string;
|
|
42
|
+
now?: number;
|
|
43
|
+
graceSeconds?: number;
|
|
44
|
+
}): Promise<PingTokenCheck>;
|
|
45
|
+
//# sourceMappingURL=pingLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pingLink.d.ts","sourceRoot":"","sources":["../../../src/rubric/pingLink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAoBD,4EAA4E;AAC5E,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMrF;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA;CAAE,CAAC;AAEtI;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAmB7J"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The signed personal link a ping carries (Ask the World, B11).
|
|
4
|
+
*
|
|
5
|
+
* A ping says "this ask, for this person, until this time". The link's token
|
|
6
|
+
* binds those three and the ping's own id under a secret only the network
|
|
7
|
+
* holds, so opening the link proves the ping was sent to that person: the
|
|
8
|
+
* submit page can then answer *as* them, reserve their slot, and file the
|
|
9
|
+
* claim in their name. The token proves who was pinged, nothing more; that
|
|
10
|
+
* a link is opened once is the registry's to enforce, because only it knows.
|
|
11
|
+
*
|
|
12
|
+
* Web Crypto HMAC-SHA-256, so the worker that mints and the app that checks
|
|
13
|
+
* run the same code.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.PING_LINK_MINUTES = void 0;
|
|
17
|
+
exports.mintPingToken = mintPingToken;
|
|
18
|
+
exports.checkPingToken = checkPingToken;
|
|
19
|
+
/** How long a ping's link stays good: long enough to walk there, short enough that a forwarded link dies. */
|
|
20
|
+
exports.PING_LINK_MINUTES = 30;
|
|
21
|
+
const DOMAIN = "openhands-ping:v1";
|
|
22
|
+
const PART = /^[a-z0-9]{1,80}$/;
|
|
23
|
+
const b64url = (bytes) => {
|
|
24
|
+
let text = "";
|
|
25
|
+
for (const byte of new Uint8Array(bytes))
|
|
26
|
+
text += String.fromCharCode(byte);
|
|
27
|
+
return btoa(text).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
28
|
+
};
|
|
29
|
+
const message = (claim) => [DOMAIN, claim.person, claim.ask, claim.ping, String(claim.exp)].join("|");
|
|
30
|
+
const keyFor = (secret) => crypto.subtle.importKey("raw", new TextEncoder().encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign", "verify"]);
|
|
31
|
+
const mac = async (claim, secret) => b64url(await crypto.subtle.sign("HMAC", await keyFor(secret), new TextEncoder().encode(message(claim))));
|
|
32
|
+
/** A token for one ping. The secret must be the one the app checks with. */
|
|
33
|
+
async function mintPingToken(claim, secret) {
|
|
34
|
+
if (!secret)
|
|
35
|
+
throw new Error("No signing secret: a ping link would be unverifiable.");
|
|
36
|
+
for (const part of [claim.person, claim.ask, claim.ping]) {
|
|
37
|
+
if (!PART.test(part))
|
|
38
|
+
throw new Error(`"${part}" cannot go in a ping link.`);
|
|
39
|
+
}
|
|
40
|
+
return [claim.person, claim.ask, claim.ping, String(claim.exp), await mac(claim, secret)].join(".");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Read a token back. Forged, expired, malformed or meant for another ask: refused, and the
|
|
44
|
+
* reason says which, so the page can tell the person something true.
|
|
45
|
+
*/
|
|
46
|
+
async function checkPingToken(token, secret, opts = {}) {
|
|
47
|
+
if (!secret)
|
|
48
|
+
return { ok: false, reason: "forged" };
|
|
49
|
+
const parts = token.split(".");
|
|
50
|
+
if (parts.length !== 5)
|
|
51
|
+
return { ok: false, reason: "malformed" };
|
|
52
|
+
const [person, ask, ping, expText, given] = parts;
|
|
53
|
+
const exp = Number(expText);
|
|
54
|
+
if (![person, ask, ping].every((part) => PART.test(part)) || !Number.isInteger(exp))
|
|
55
|
+
return { ok: false, reason: "malformed" };
|
|
56
|
+
const claim = { person, ask, ping, exp };
|
|
57
|
+
const expected = await mac(claim, secret);
|
|
58
|
+
if (expected.length !== given.length)
|
|
59
|
+
return { ok: false, reason: "forged" };
|
|
60
|
+
let diff = 0;
|
|
61
|
+
for (let i = 0; i < expected.length; i++)
|
|
62
|
+
diff |= expected.charCodeAt(i) ^ given.charCodeAt(i);
|
|
63
|
+
if (diff !== 0)
|
|
64
|
+
return { ok: false, reason: "forged" };
|
|
65
|
+
if (opts.ask && opts.ask !== ask)
|
|
66
|
+
return { ok: false, reason: "wrong-ask" };
|
|
67
|
+
/* The link is theirs for PING_LINK_MINUTES. What it led to can be recorded later: walking to
|
|
68
|
+
the place and taking the photo can outlast the link, and linking the answer to the ping
|
|
69
|
+
after that is not opening the link again (`graceSeconds`). */
|
|
70
|
+
if (Math.floor((opts.now ?? Date.now()) / 1000) >= exp + Math.max(0, opts.graceSeconds ?? 0))
|
|
71
|
+
return { ok: false, reason: "expired" };
|
|
72
|
+
return { ok: true, claim };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=pingLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pingLink.js","sourceRoot":"","sources":["../../../src/rubric/pingLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who to ping when a plan's ask is posted (Ask the World, B9).
|
|
3
|
+
*
|
|
4
|
+
* A person in the registry said where they are most days (a coarse cell),
|
|
5
|
+
* how far they would go, what they know about, when they may be pinged and
|
|
6
|
+
* how often. An ask has a point, a radius and the plan's topics. The match
|
|
7
|
+
* is everyone near enough, interested, awake and under their cap, best first,
|
|
8
|
+
* and three times as many as the ask can pay: people miss pings, and the
|
|
9
|
+
* first to answer wins the slot.
|
|
10
|
+
*
|
|
11
|
+
* Pure and channel-blind: nothing here knows whether the ping goes by
|
|
12
|
+
* Telegram, WhatsApp or Web Push.
|
|
13
|
+
*/
|
|
14
|
+
/** What a person can say they know about. The onboarding asks the same list. */
|
|
15
|
+
export declare const PING_TOPICS: readonly ["transport", "shops", "prices", "events", "streets", "nature"];
|
|
16
|
+
export type PingTopic = (typeof PING_TOPICS)[number];
|
|
17
|
+
export type PingChannel = "telegram" | "whatsapp" | "webpush";
|
|
18
|
+
/** A person as the matcher reads them from the registry. */
|
|
19
|
+
export interface PingPerson {
|
|
20
|
+
/** Their address on the chain: claims are filed in this name. */
|
|
21
|
+
id: string;
|
|
22
|
+
channel: PingChannel;
|
|
23
|
+
/** A geohash cell, six characters: never a point. */
|
|
24
|
+
cell: string;
|
|
25
|
+
/** How far they would go from the cell, in metres. */
|
|
26
|
+
radiusM: number;
|
|
27
|
+
/** Empty means anything. */
|
|
28
|
+
topics: string[];
|
|
29
|
+
/** Local hours they may be pinged, [from, to) in 0–24; wraps past midnight when from > to. Absent means any hour. */
|
|
30
|
+
hours?: {
|
|
31
|
+
from: number;
|
|
32
|
+
to: number;
|
|
33
|
+
};
|
|
34
|
+
/** Minutes east of UTC for their local hours. */
|
|
35
|
+
tzOffsetMin?: number;
|
|
36
|
+
/** Pings a day at most. */
|
|
37
|
+
dailyCap: number;
|
|
38
|
+
/** Pings already sent today. */
|
|
39
|
+
sentToday: number;
|
|
40
|
+
/** Approved answers so far: the order of who hears first. */
|
|
41
|
+
approved: number;
|
|
42
|
+
/** Epoch ms before which they are paused (STOP, or "fewer"). */
|
|
43
|
+
pausedUntil?: number;
|
|
44
|
+
/** Asks this person was already pinged for: never twice. */
|
|
45
|
+
pingedAsks?: string[];
|
|
46
|
+
}
|
|
47
|
+
/** An ask as the matcher reads it. */
|
|
48
|
+
export interface PingAsk {
|
|
49
|
+
id: string;
|
|
50
|
+
lat: number;
|
|
51
|
+
lon: number;
|
|
52
|
+
/** How close the answer must be taken. */
|
|
53
|
+
withinM: number;
|
|
54
|
+
/** The plan's topics; empty means anyone. */
|
|
55
|
+
topics: string[];
|
|
56
|
+
/** Answers the ask pays. */
|
|
57
|
+
quota: number;
|
|
58
|
+
}
|
|
59
|
+
/** How many people to ping per answer the ask can pay. */
|
|
60
|
+
export declare const PINGS_PER_SLOT = 3;
|
|
61
|
+
/** Whether a local hour falls inside a person's window. */
|
|
62
|
+
export declare const inHours: (hours: PingPerson["hours"], now: number, tzOffsetMin?: number) => boolean;
|
|
63
|
+
/** One match: the person and how far their cell's centre is from the ask. */
|
|
64
|
+
export interface PingMatch {
|
|
65
|
+
person: PingPerson;
|
|
66
|
+
metres: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The people to ping for an ask, best first: most approved answers, then
|
|
70
|
+
* nearest. At most `quota × PINGS_PER_SLOT`.
|
|
71
|
+
*/
|
|
72
|
+
export declare function matchPeople(ask: PingAsk, people: PingPerson[], now: number): PingMatch[];
|
|
73
|
+
//# sourceMappingURL=pingMatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pingMatch.d.ts","sourceRoot":"","sources":["../../../src/rubric/pingMatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,gFAAgF;AAChF,eAAO,MAAM,WAAW,0EAA2E,CAAC;AACpG,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9D,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,WAAW,CAAC;IACrB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qHAAqH;IACrH,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,sCAAsC;AACtC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,2DAA2D;AAC3D,eAAO,MAAM,OAAO,GAAI,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM,EAAE,oBAAe,KAAG,OAOlF,CAAC;AAEF,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAiBxF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Who to ping when a plan's ask is posted (Ask the World, B9).
|
|
4
|
+
*
|
|
5
|
+
* A person in the registry said where they are most days (a coarse cell),
|
|
6
|
+
* how far they would go, what they know about, when they may be pinged and
|
|
7
|
+
* how often. An ask has a point, a radius and the plan's topics. The match
|
|
8
|
+
* is everyone near enough, interested, awake and under their cap, best first,
|
|
9
|
+
* and three times as many as the ask can pay: people miss pings, and the
|
|
10
|
+
* first to answer wins the slot.
|
|
11
|
+
*
|
|
12
|
+
* Pure and channel-blind: nothing here knows whether the ping goes by
|
|
13
|
+
* Telegram, WhatsApp or Web Push.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.inHours = exports.PINGS_PER_SLOT = exports.PING_TOPICS = void 0;
|
|
17
|
+
exports.matchPeople = matchPeople;
|
|
18
|
+
const box_ts_1 = require("../geo/box.js");
|
|
19
|
+
const geohash_ts_1 = require("../geo/geohash.js");
|
|
20
|
+
/** What a person can say they know about. The onboarding asks the same list. */
|
|
21
|
+
exports.PING_TOPICS = ["transport", "shops", "prices", "events", "streets", "nature"];
|
|
22
|
+
/** How many people to ping per answer the ask can pay. */
|
|
23
|
+
exports.PINGS_PER_SLOT = 3;
|
|
24
|
+
/** Whether a local hour falls inside a person's window. */
|
|
25
|
+
const inHours = (hours, now, tzOffsetMin = 0) => {
|
|
26
|
+
if (!hours)
|
|
27
|
+
return true;
|
|
28
|
+
const local = new Date(now + tzOffsetMin * 60_000);
|
|
29
|
+
const hour = local.getUTCHours() + local.getUTCMinutes() / 60;
|
|
30
|
+
const { from, to } = hours;
|
|
31
|
+
if (from === to)
|
|
32
|
+
return true;
|
|
33
|
+
return from < to ? hour >= from && hour < to : hour >= from || hour < to;
|
|
34
|
+
};
|
|
35
|
+
exports.inHours = inHours;
|
|
36
|
+
/**
|
|
37
|
+
* The people to ping for an ask, best first: most approved answers, then
|
|
38
|
+
* nearest. At most `quota × PINGS_PER_SLOT`.
|
|
39
|
+
*/
|
|
40
|
+
function matchPeople(ask, people, now) {
|
|
41
|
+
const wanted = new Set(ask.topics);
|
|
42
|
+
const matches = [];
|
|
43
|
+
for (const person of people) {
|
|
44
|
+
if (person.pausedUntil && person.pausedUntil > now)
|
|
45
|
+
continue;
|
|
46
|
+
if (person.sentToday >= person.dailyCap)
|
|
47
|
+
continue;
|
|
48
|
+
if (person.pingedAsks?.includes(ask.id))
|
|
49
|
+
continue;
|
|
50
|
+
if (wanted.size && person.topics.length && !person.topics.some((topic) => wanted.has(topic)))
|
|
51
|
+
continue;
|
|
52
|
+
if (!(0, exports.inHours)(person.hours, now, person.tzOffsetMin))
|
|
53
|
+
continue;
|
|
54
|
+
const centre = (0, geohash_ts_1.geohashCentre)(person.cell);
|
|
55
|
+
if (!centre)
|
|
56
|
+
continue;
|
|
57
|
+
const metres = (0, box_ts_1.haversineMetres)(centre, { lat: ask.lat, lon: ask.lon });
|
|
58
|
+
if (metres > person.radiusM + ask.withinM)
|
|
59
|
+
continue;
|
|
60
|
+
matches.push({ person, metres });
|
|
61
|
+
}
|
|
62
|
+
matches.sort((a, b) => b.person.approved - a.person.approved || a.metres - b.metres);
|
|
63
|
+
return matches.slice(0, Math.max(1, ask.quota) * exports.PINGS_PER_SLOT);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=pingMatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pingMatch.js","sourceRoot":"","sources":["../../../src/rubric/pingMatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A survey check's answer: one of a few options, the reason in the person's
|
|
3
|
+
* own words, and what they expect most people around them to say
|
|
4
|
+
* (docs/verified-work-ask-the-world-plan.md, "Surveys").
|
|
5
|
+
*
|
|
6
|
+
* Some markets have nothing to photograph — a jury's vote, a crowd's mood —
|
|
7
|
+
* and the honest signal there is what people think, asked of real people in
|
|
8
|
+
* the right place. Asking what they expect *others* to say beside their own
|
|
9
|
+
* answer is the "surprisingly popular" read: an option chosen more often than
|
|
10
|
+
* people predicted is the one the crowd knows something about.
|
|
11
|
+
*
|
|
12
|
+
* The answer travels as plain text in one fixed shape, written by the answer
|
|
13
|
+
* page and read back here, so the judge reads what the person said and the
|
|
14
|
+
* tally needs no second format.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SURVEY_LIMITS: {
|
|
17
|
+
readonly optionsMin: 2;
|
|
18
|
+
readonly optionsMax: 6;
|
|
19
|
+
readonly optionMax: 60;
|
|
20
|
+
readonly whyMax: 400;
|
|
21
|
+
};
|
|
22
|
+
/** The options a survey check may carry, or the reason they may not. */
|
|
23
|
+
export declare function surveyOptionsProblem(options: unknown): string | null;
|
|
24
|
+
/** The answer as the page files it. */
|
|
25
|
+
export declare function surveyAnswerText(answer: {
|
|
26
|
+
choice: string;
|
|
27
|
+
why: string;
|
|
28
|
+
others: string;
|
|
29
|
+
}): string;
|
|
30
|
+
/** An answer read back: which option, what they expect others to say, and why. Options outside the list read as none. */
|
|
31
|
+
export declare function readSurveyAnswer(text: string, options: readonly string[]): {
|
|
32
|
+
choice: string | null;
|
|
33
|
+
others: string | null;
|
|
34
|
+
why: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The judge's one rule for a survey answer: a real pick with a real reason.
|
|
38
|
+
* It names its refusal first, as every judged line here does. It lists
|
|
39
|
+
* neither the question (the judge is sent the ask's task) nor the options:
|
|
40
|
+
* the answer page offers only the listed ones and the tally counts nothing
|
|
41
|
+
* else, and six options would not fit the 300 characters a criterion keeps.
|
|
42
|
+
*/
|
|
43
|
+
export declare const SURVEY_JUDGE_LINE = "The answer gives one choice and a reason in the person's own words. Fail this only if it gives no choice, or the reason is empty, copied from the question or unrelated to it.";
|
|
44
|
+
/** One option's line in a tally. */
|
|
45
|
+
export interface SurveyLine {
|
|
46
|
+
option: string;
|
|
47
|
+
/** Approved answers that picked it. */
|
|
48
|
+
answers: number;
|
|
49
|
+
/** Approved answers that expected most people to pick it. */
|
|
50
|
+
predicted: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The tally of a survey's approved answers, and the option chosen more often
|
|
54
|
+
* than people predicted (by share), when there is one and enough answers to
|
|
55
|
+
* mean anything (5 or more).
|
|
56
|
+
*/
|
|
57
|
+
export declare function tallySurvey(options: readonly string[], answers: readonly {
|
|
58
|
+
choice: string | null;
|
|
59
|
+
others: string | null;
|
|
60
|
+
}[]): {
|
|
61
|
+
lines: SurveyLine[];
|
|
62
|
+
total: number;
|
|
63
|
+
surprisinglyPopular: string | null;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=survey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"survey.d.ts","sourceRoot":"","sources":["../../../src/rubric/survey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,aAAa;;;;;CAAwE,CAAC;AAMnG,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAapE;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEhG;AAOD,yHAAyH;AACzH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAIxI;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,mLACoJ,CAAC;AAEnL,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GAAG;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAwBxM"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A survey check's answer: one of a few options, the reason in the person's
|
|
4
|
+
* own words, and what they expect most people around them to say
|
|
5
|
+
* (docs/verified-work-ask-the-world-plan.md, "Surveys").
|
|
6
|
+
*
|
|
7
|
+
* Some markets have nothing to photograph — a jury's vote, a crowd's mood —
|
|
8
|
+
* and the honest signal there is what people think, asked of real people in
|
|
9
|
+
* the right place. Asking what they expect *others* to say beside their own
|
|
10
|
+
* answer is the "surprisingly popular" read: an option chosen more often than
|
|
11
|
+
* people predicted is the one the crowd knows something about.
|
|
12
|
+
*
|
|
13
|
+
* The answer travels as plain text in one fixed shape, written by the answer
|
|
14
|
+
* page and read back here, so the judge reads what the person said and the
|
|
15
|
+
* tally needs no second format.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SURVEY_JUDGE_LINE = exports.SURVEY_LIMITS = void 0;
|
|
19
|
+
exports.surveyOptionsProblem = surveyOptionsProblem;
|
|
20
|
+
exports.surveyAnswerText = surveyAnswerText;
|
|
21
|
+
exports.readSurveyAnswer = readSurveyAnswer;
|
|
22
|
+
exports.tallySurvey = tallySurvey;
|
|
23
|
+
exports.SURVEY_LIMITS = { optionsMin: 2, optionsMax: 6, optionMax: 60, whyMax: 400 };
|
|
24
|
+
const ANSWER = "Answer: ";
|
|
25
|
+
const WHY = "Why: ";
|
|
26
|
+
const OTHERS = "Most people here will say: ";
|
|
27
|
+
/** The options a survey check may carry, or the reason they may not. */
|
|
28
|
+
function surveyOptionsProblem(options) {
|
|
29
|
+
const L = exports.SURVEY_LIMITS;
|
|
30
|
+
if (!Array.isArray(options))
|
|
31
|
+
return "A survey needs its options.";
|
|
32
|
+
if (options.length < L.optionsMin || options.length > L.optionsMax)
|
|
33
|
+
return `A survey has ${L.optionsMin}–${L.optionsMax} options.`;
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
for (const option of options) {
|
|
36
|
+
if (typeof option !== "string" || !option.trim() || option.trim().length > L.optionMax)
|
|
37
|
+
return `Every option is 1–${L.optionMax} characters.`;
|
|
38
|
+
if (/[\n\r]/.test(option))
|
|
39
|
+
return "An option is one line.";
|
|
40
|
+
const key = option.trim().toLowerCase();
|
|
41
|
+
if (seen.has(key))
|
|
42
|
+
return `"${option.trim()}" is listed twice.`;
|
|
43
|
+
seen.add(key);
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/** The answer as the page files it. */
|
|
48
|
+
function surveyAnswerText(answer) {
|
|
49
|
+
return [`${ANSWER}${answer.choice.trim()}`, `${WHY}${answer.why.trim().replace(/\s+/g, " ").slice(0, exports.SURVEY_LIMITS.whyMax)}`, `${OTHERS}${answer.others.trim()}`].join("\n");
|
|
50
|
+
}
|
|
51
|
+
const optionOf = (said, options) => {
|
|
52
|
+
const wanted = (said ?? "").trim().toLowerCase();
|
|
53
|
+
return options.find((option) => option.trim().toLowerCase() === wanted) ?? null;
|
|
54
|
+
};
|
|
55
|
+
/** An answer read back: which option, what they expect others to say, and why. Options outside the list read as none. */
|
|
56
|
+
function readSurveyAnswer(text, options) {
|
|
57
|
+
const lines = text.split(/\r?\n/);
|
|
58
|
+
const field = (prefix) => lines.find((line) => line.startsWith(prefix))?.slice(prefix.length);
|
|
59
|
+
return { choice: optionOf(field(ANSWER), options), others: optionOf(field(OTHERS), options), why: (field(WHY) ?? "").trim() };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The judge's one rule for a survey answer: a real pick with a real reason.
|
|
63
|
+
* It names its refusal first, as every judged line here does. It lists
|
|
64
|
+
* neither the question (the judge is sent the ask's task) nor the options:
|
|
65
|
+
* the answer page offers only the listed ones and the tally counts nothing
|
|
66
|
+
* else, and six options would not fit the 300 characters a criterion keeps.
|
|
67
|
+
*/
|
|
68
|
+
exports.SURVEY_JUDGE_LINE = "The answer gives one choice and a reason in the person's own words. Fail this only if it gives no choice, or the reason is empty, copied from the question or unrelated to it.";
|
|
69
|
+
/**
|
|
70
|
+
* The tally of a survey's approved answers, and the option chosen more often
|
|
71
|
+
* than people predicted (by share), when there is one and enough answers to
|
|
72
|
+
* mean anything (5 or more).
|
|
73
|
+
*/
|
|
74
|
+
function tallySurvey(options, answers) {
|
|
75
|
+
const lines = options.map((option) => ({ option, answers: 0, predicted: 0 }));
|
|
76
|
+
let total = 0;
|
|
77
|
+
for (const answer of answers) {
|
|
78
|
+
const picked = lines.find((line) => line.option === answer.choice);
|
|
79
|
+
if (!picked)
|
|
80
|
+
continue;
|
|
81
|
+
picked.answers += 1;
|
|
82
|
+
total += 1;
|
|
83
|
+
const expected = lines.find((line) => line.option === answer.others);
|
|
84
|
+
if (expected)
|
|
85
|
+
expected.predicted += 1;
|
|
86
|
+
}
|
|
87
|
+
let surprisinglyPopular = null;
|
|
88
|
+
if (total >= 5) {
|
|
89
|
+
const predictedTotal = lines.reduce((sum, line) => sum + line.predicted, 0) || 1;
|
|
90
|
+
let best = 0;
|
|
91
|
+
for (const line of lines) {
|
|
92
|
+
const lift = line.answers / total - line.predicted / predictedTotal;
|
|
93
|
+
if (lift > best + 1e-9) {
|
|
94
|
+
best = lift;
|
|
95
|
+
surprisinglyPopular = line.option;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { lines, total, surprisinglyPopular };
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=survey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../../src/rubric/survey.ts"],"names":[],"mappings":"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"}
|
|
@@ -233,6 +233,11 @@ export interface Deliverable {
|
|
|
233
233
|
type: DeliverableType;
|
|
234
234
|
/** What the worker is being asked to hand over, in the poster's words. */
|
|
235
235
|
prompt: string;
|
|
236
|
+
/**
|
|
237
|
+
* A survey's options (rubric/survey.ts): the answer page offers them, and
|
|
238
|
+
* the answer is filed as text in one fixed shape. 2–6 one-line options.
|
|
239
|
+
*/
|
|
240
|
+
choices?: string[];
|
|
236
241
|
}
|
|
237
242
|
export type CriterionKind = "measure" | "judge" | "attest";
|
|
238
243
|
/**
|
|
@@ -321,6 +326,14 @@ export interface AskTerms {
|
|
|
321
326
|
* escrow; the tag only says they belong together.
|
|
322
327
|
*/
|
|
323
328
|
series?: string;
|
|
329
|
+
/**
|
|
330
|
+
* The Ask the World plan this ask is one check of: the content address of
|
|
331
|
+
* the frozen plan document (docs/verified-work-ask-the-world-plan.md, D1).
|
|
332
|
+
* It names the market the answer informs, the check, what the check beats
|
|
333
|
+
* and what the plan cannot tell, so a report can be rebuilt from the chain
|
|
334
|
+
* alone. Frozen at posting, like the campaign it sits beside.
|
|
335
|
+
*/
|
|
336
|
+
plan?: string;
|
|
324
337
|
/**
|
|
325
338
|
* This ask is a site: cleared by several people, a patch at a time.
|
|
326
339
|
*
|
|
@@ -597,6 +610,8 @@ export declare function parseTerms(value: unknown): AskTerms | null;
|
|
|
597
610
|
* difference between a file picker and the camera opening.
|
|
598
611
|
*/
|
|
599
612
|
export declare function inferDeliverable(title: string): Deliverable;
|
|
613
|
+
/** The gates a deliverable implies on its own — a file's shape, not its content. */
|
|
614
|
+
export declare function deliverableGates(deliverable: Deliverable): Gate[];
|
|
600
615
|
/**
|
|
601
616
|
* The floor, in v2 clothing — what an ask means when nothing else is said.
|
|
602
617
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../../../src/rubric/terms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../../../src/rubric/terms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAe3D;AAoBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIjD;AAED,wBAAgB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3C;AAID,MAAM,MAAM,MAAM,GACd,WAAW,GACX,YAAY,GACZ,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,oBAAoB,GACpB,qBAAqB,GACrB,eAAe,GACf,oBAAoB,GACpB,qBAAqB,GACrB,cAAc,CAAC;AAEnB,MAAM,MAAM,IAAI,GACZ;IAAE,EAAE,EAAE,WAAW,CAAA;CAAE,GACnB;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,gBAAgB,CAAA;CAAE,GACxB;IAAE,EAAE,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACpC;;;;;GAKG;GACD;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACpC;;;;;;;GAOG;GACD;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AACtI;;;;;;;GAOG;GACD;IAAE,EAAE,EAAE,SAAS,CAAA;CAAE;AACnB;;;;;;;GAOG;GACD;IAAE,EAAE,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC9C;;;;;;GAMG;GACD;IAAE,EAAE,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACvG;;;;;;;;;;;;;;;GAeG;GACD;IAAE,EAAE,EAAE,oBAAoB,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,qBAAqB,CAAA;CAAE;AAC/B;;;;;;;;;;;;;;;;;GAiBG;GACD;IAAE,EAAE,EAAE,cAAc,CAAA;CAAE;AACxB;;;;;;;;GAQG;GAQD;IAAE,EAAE,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmB5D;AAuDD,+EAA+E;AAC/E,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MAA4G,CAAC;AAErJ,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE3D;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,gHAAiH,CAAC;AAChJ,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,4BAA6B,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE;QACN,sFAAsF;QACtF,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,oEAAoE;QACpE,MAAM,EAAE;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACxC,oEAAoE;QACpE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;QAC5B,qEAAqE;QACrE,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ;;;;;;WAMG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC;CACb;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,eAAO,MAAM,SAAS,4CAA6C,CAAC;AACpE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uDAAuD;IACvD,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,6DAA6D;AAC7D,eAAO,MAAM,SAAS,QAA2B,CAAC;AAElD,sDAAsD;AACtD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;CAoBd,CAAC;AAEX,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,MAAuF,CAAC;AAEvI,eAAO,MAAM,aAAa,GAAI,WAAW,SAAS,KAAG,MACuB,CAAC;AAE7E,6DAA6D;AAC7D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAOpD,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,MAAuD,CAAC;AAEtG;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,QAAQ,KAAG,OAA0E,CAAC;AAE5H;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAKlH;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CASlE;AAyOD,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CA8C/D;AAsBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAuE1D;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAQ3D;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,EAAE,CAIjE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,SAA8B,GAAG,QAAQ,CAY1F;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,QAAQ,CAK1J"}
|
package/dist/cjs/rubric/terms.js
CHANGED
|
@@ -23,8 +23,10 @@ exports.normalizeTerms = normalizeTerms;
|
|
|
23
23
|
exports.callOf = callOf;
|
|
24
24
|
exports.parseTerms = parseTerms;
|
|
25
25
|
exports.inferDeliverable = inferDeliverable;
|
|
26
|
+
exports.deliverableGates = deliverableGates;
|
|
26
27
|
exports.deriveTerms = deriveTerms;
|
|
27
28
|
exports.addCriterion = addCriterion;
|
|
29
|
+
const survey_ts_1 = require("./survey.js");
|
|
28
30
|
/** Evidence no text-only worker can produce: no camera, no hands, no address. */
|
|
29
31
|
const PHYSICAL = /\b(photo|photograph|picture|snap|image of|screenshot|screen shot|selfie|video|film|scan|handwritten|sticky note|poster|in person|visit|go to|walk|drive|deliver|pick up|drop off|knock|doorstep|on ?site|meet|queue|shelf|receipt)\b/i;
|
|
30
32
|
const URL_PATTERN = /\bhttps?:\/\/[^\s"'<>)]+|\b(?:[a-z0-9-]+\.)+(?:com|org|net|io|dev|app|earth|xyz|co|ai|me|so|sh|eu|uk|de)(?:\/[^\s"'<>)]*)?/i;
|
|
@@ -645,6 +647,15 @@ function disposalOf(raw) {
|
|
|
645
647
|
.map((one) => ({ lat: Number(one.lat), lon: Number(one.lon), ...(one.label ? { label: trim(String(one.label), 60) } : {}) }));
|
|
646
648
|
return { disposal: { points, metres: Math.floor(Number(raw.metres)) } };
|
|
647
649
|
}
|
|
650
|
+
/**
|
|
651
|
+
* The deliverable as kept: the prompt trimmed, and a survey's choices only when
|
|
652
|
+
* they are a real survey's (rubric/survey.ts) — named here or dropped here, like
|
|
653
|
+
* every other field.
|
|
654
|
+
*/
|
|
655
|
+
function deliverableOf(deliverable) {
|
|
656
|
+
const { choices, ...rest } = deliverable;
|
|
657
|
+
return { ...rest, prompt: trim(deliverable.prompt, PROMPT_MAX), ...(choices !== undefined && (0, survey_ts_1.surveyOptionsProblem)(choices) === null ? { choices: choices.map((one) => one.trim()) } : {}) };
|
|
658
|
+
}
|
|
648
659
|
function parseTerms(value) {
|
|
649
660
|
const doc = value;
|
|
650
661
|
if (!doc || typeof doc !== "object")
|
|
@@ -684,9 +695,11 @@ function parseTerms(value) {
|
|
|
684
695
|
return {
|
|
685
696
|
v: 2,
|
|
686
697
|
task: trim(doc.task, TASK_MAX),
|
|
687
|
-
deliverable:
|
|
698
|
+
deliverable: deliverableOf(deliverable),
|
|
688
699
|
...(typeof doc.campaign === "string" && doc.campaign ? { campaign: trim(doc.campaign, 64) } : {}),
|
|
689
700
|
...(typeof doc.series === "string" && /^[a-z0-9-]{1,64}$/.test(doc.series) ? { series: doc.series } : {}),
|
|
701
|
+
/* Named here or dropped here. Only a content address: the plan is a document, never a label. */
|
|
702
|
+
...(typeof doc.plan === "string" && /^baf[a-z2-7]{20,}$/.test(doc.plan) ? { plan: doc.plan } : {}),
|
|
690
703
|
...(chainOf(doc.chain) ?? {}),
|
|
691
704
|
...(callOf(doc.call) ?? {}),
|
|
692
705
|
...(doc.followUp && Number(doc.followUp.days) > 0 && doc.followUp.pay
|