@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,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* "Pay for reviews", the signing side (owner request 2026-10-14; eval-oracle contract 1.22.0). Only the org's
|
|
4
|
+
* chain OWNER signs, in the browser, with their AuthHub session's ed25519 key:
|
|
5
|
+
*
|
|
6
|
+
* - On / raise: one x402-ixo-pay payment delegation, built by S4's own `@ixo/x402-ixo-pay` (never by hand):
|
|
7
|
+
* issuer the owner's did:ixo, audience the network's x402 facilitator, `billing/pay` on `billing:decision-api`
|
|
8
|
+
* with `{maxAmount, denom: "upay", oracles: [<this oracle's did:web>]}`, ~100 years. PUT to the oracle for the
|
|
9
|
+
* org's source (a re-PUT replaces: that is "raise"), then deposited in the UCAN store so it can be revoked later
|
|
10
|
+
* by its CID (the oracle never gives the token back). A replaced one is revoked.
|
|
11
|
+
* - Off: DELETE at the oracle, then REVOKE the delegation in the UCAN store (the oracle's DELETE alone leaves it
|
|
12
|
+
* valid until it expires).
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.billingHosts = exports.expiryFrom = void 0;
|
|
49
|
+
exports.buildReviewBillingDelegation = buildReviewBillingDelegation;
|
|
50
|
+
exports.revokeDelegation = revokeDelegation;
|
|
51
|
+
exports.enableReviewBilling = enableReviewBilling;
|
|
52
|
+
exports.turnOffReviewBilling = turnOffReviewBilling;
|
|
53
|
+
const network_ts_1 = require("../network.js");
|
|
54
|
+
const orgReviewBilling_ts_1 = require("./orgReviewBilling.js");
|
|
55
|
+
/** now + 100 calendar years (owner ruling; same as the CLI): the cap, not the clock, is what limits it. */
|
|
56
|
+
const expiryFrom = (nowSeconds) => {
|
|
57
|
+
const d = new Date(nowSeconds * 1000);
|
|
58
|
+
d.setUTCFullYear(d.getUTCFullYear() + 100);
|
|
59
|
+
return Math.floor(d.getTime() / 1000);
|
|
60
|
+
};
|
|
61
|
+
exports.expiryFrom = expiryFrom;
|
|
62
|
+
const HOSTS = {
|
|
63
|
+
devnet: { facilitator: "did:web:facilitator.devnet.ixo.earth", store: "https://devnet.store.ucan.ixo.earth" },
|
|
64
|
+
testnet: { facilitator: "did:web:facilitator.testnet.ixo.earth", store: "https://testnet.store.ucan.ixo.earth" },
|
|
65
|
+
mainnet: { facilitator: "did:web:facilitator.ixo.earth", store: "https://store.ucan.ixo.earth" }
|
|
66
|
+
};
|
|
67
|
+
/** The x402 facilitator (the delegation's audience) and the UCAN store on this deployment's network. */
|
|
68
|
+
const billingHosts = () => HOSTS[(0, network_ts_1.network)()];
|
|
69
|
+
exports.billingHosts = billingHosts;
|
|
70
|
+
const signerOf = async (owner) => {
|
|
71
|
+
const { signerFromMnemonic } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
|
|
72
|
+
return (await signerFromMnemonic(owner.mnemonic, `did:ixo:${owner.address}`)).signer;
|
|
73
|
+
};
|
|
74
|
+
/** The owner's payment delegation for this oracle alone: base64 CAR, as the facilitator verifies it. */
|
|
75
|
+
async function buildReviewBillingDelegation(owner, oracleDid, maxAmount, options = {}) {
|
|
76
|
+
const { buildPaymentDelegation } = await Promise.resolve().then(() => __importStar(require("@ixo/x402-ixo-pay")));
|
|
77
|
+
return buildPaymentDelegation({
|
|
78
|
+
/* @ixo/ucan 2.1's signer; the package's 2.2 takes the same ucanto Signer. */
|
|
79
|
+
issuer: (await signerOf(owner)),
|
|
80
|
+
facilitatorDid: options.facilitatorDid ?? (0, exports.billingHosts)().facilitator,
|
|
81
|
+
maxAmount,
|
|
82
|
+
expiration: (0, exports.expiryFrom)(options.now ?? Math.floor(Date.now() / 1000)),
|
|
83
|
+
oracles: [oracleDid]
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** One self-signed call to the UCAN store as the owner (`with: ixo:ucan-store`). False on any failure. */
|
|
87
|
+
async function storeCall(owner, can, path, body, options) {
|
|
88
|
+
const store = (options.storeUrl ?? (0, exports.billingHosts)().store).replace(/\/$/, "");
|
|
89
|
+
try {
|
|
90
|
+
const doc = await (options.fetch ?? fetch)(`${store}/.well-known/did.json`, { headers: { accept: "application/json" }, signal: AbortSignal.timeout(10_000) });
|
|
91
|
+
const audience = doc.ok ? (await doc.json().catch(() => null))?.id : null;
|
|
92
|
+
if (typeof audience !== "string")
|
|
93
|
+
return null;
|
|
94
|
+
const { createInvocation, serializeInvocation } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
|
|
95
|
+
const invocation = await createInvocation({
|
|
96
|
+
issuer: await signerOf(owner),
|
|
97
|
+
audience,
|
|
98
|
+
capability: { can, with: "ixo:ucan-store" },
|
|
99
|
+
expiration: Math.floor(Date.now() / 1000) + 300,
|
|
100
|
+
facts: [{ nonce: crypto.randomUUID() }]
|
|
101
|
+
});
|
|
102
|
+
const response = await (options.fetch ?? fetch)(`${store}${path}`, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: { "content-type": "application/json", authorization: `Bearer ${await serializeInvocation(invocation)}`, "x-auth-type": "ucan" },
|
|
105
|
+
body: JSON.stringify(body),
|
|
106
|
+
signal: AbortSignal.timeout(10_000)
|
|
107
|
+
});
|
|
108
|
+
return response.status;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Revokes a delegation the store holds, by its CID: true when it is revoked now (or was already). */
|
|
115
|
+
async function revokeDelegation(owner, cid, options = {}) {
|
|
116
|
+
const status = await storeCall(owner, "store/revoke", "/api/revocations", { cid, reason: "OpenHands: Pay for reviews turned off or replaced" }, options);
|
|
117
|
+
return status === 200 || status === 201;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Turn on, or raise the cap (a re-PUT replaces the stored one): sign, PUT for the org's source, keep it in the UCAN
|
|
121
|
+
* store for a later revoke, and revoke the one it replaced. Only the PUT decides success.
|
|
122
|
+
*/
|
|
123
|
+
async function enableReviewBilling(input, options = {}) {
|
|
124
|
+
const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(input.oracleUrl, options);
|
|
125
|
+
if (!audience)
|
|
126
|
+
return { ok: false, why: "The oracle did not answer. Nothing was signed." };
|
|
127
|
+
let delegation;
|
|
128
|
+
try {
|
|
129
|
+
delegation = await buildReviewBillingDelegation(input.owner, audience, input.maxAmount, options);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return { ok: false, why: `The permission could not be signed: ${error instanceof Error ? error.message : "unknown error"}.` };
|
|
133
|
+
}
|
|
134
|
+
const mint = (0, orgReviewBilling_ts_1.sourceMint)(input.owner);
|
|
135
|
+
const answer = await (0, orgReviewBilling_ts_1.sourceCall)(input.oracleUrl, audience, mint, { method: "PUT", path: "/v1/api/source/review-billing", can: "review-billing/set", sourceId: input.sourceId, body: { delegation } }, options);
|
|
136
|
+
if (!answer)
|
|
137
|
+
return { ok: false, why: "The oracle did not answer. Nothing was stored; try again." };
|
|
138
|
+
if (answer.status !== 200)
|
|
139
|
+
return { ok: false, why: (0, orgReviewBilling_ts_1.refusalWords)(answer.status, answer.code, answer.reason, answer.message) };
|
|
140
|
+
const status = (0, orgReviewBilling_ts_1.parseReviewBilling)(answer.body);
|
|
141
|
+
if (!status)
|
|
142
|
+
return { ok: false, why: "The oracle stored it but answered in a form this page does not read. Reload to see it." };
|
|
143
|
+
/* Kept so Turn off can revoke it; a failure here only means a later revoke must be done where it was signed. */
|
|
144
|
+
await storeCall(input.owner, "store/add", "/api/delegations", { token: delegation, note: `openhands review billing ${input.sourceId}` }, options);
|
|
145
|
+
const old = input.replacing && input.replacing !== status.delegationCid ? input.replacing : null;
|
|
146
|
+
const revoked = old ? await revokeDelegation(input.owner, old, options) : true;
|
|
147
|
+
return { ok: true, value: status, ...(revoked ? {} : { note: "A new budget is signed. The permission it replaced could not be revoked from here; the oracle no longer holds it." }) };
|
|
148
|
+
}
|
|
149
|
+
/** Turn off: DELETE at the oracle, then revoke the delegation in the UCAN store. */
|
|
150
|
+
async function turnOffReviewBilling(input, options = {}) {
|
|
151
|
+
const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(input.oracleUrl, options);
|
|
152
|
+
if (!audience)
|
|
153
|
+
return { ok: false, why: "The oracle did not answer. Nothing was changed." };
|
|
154
|
+
const answer = await (0, orgReviewBilling_ts_1.sourceCall)(input.oracleUrl, audience, (0, orgReviewBilling_ts_1.sourceMint)(input.owner), { method: "DELETE", path: "/v1/api/source/review-billing", can: "review-billing/delete", sourceId: input.sourceId }, options);
|
|
155
|
+
if (!answer)
|
|
156
|
+
return { ok: false, why: "The oracle did not answer. Nothing was changed; try again." };
|
|
157
|
+
if (answer.status !== 200 && answer.status !== 204)
|
|
158
|
+
return { ok: false, why: (0, orgReviewBilling_ts_1.refusalWords)(answer.status, answer.code, answer.reason, answer.message) };
|
|
159
|
+
const revoked = await revokeDelegation(input.owner, input.delegationCid, options);
|
|
160
|
+
return {
|
|
161
|
+
ok: true,
|
|
162
|
+
value: { revoked },
|
|
163
|
+
...(revoked ? {} : { note: "The oracle no longer charges it, but the signed permission could not be revoked from here (it was signed elsewhere). Revoke it where it was signed (the Decision Console) to stop it everywhere." })
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=orgReviewBillingSign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orgReviewBillingSign.js","sourceRoot":"","sources":["../../../src/chain/orgReviewBillingSign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type PayoutRail } from "./payoutTerms.ts";
|
|
2
|
+
/** "chain" is today's on-chain escrow; the others are paid off chain by the facilitator. */
|
|
3
|
+
export type SettingsRail = "chain" | PayoutRail;
|
|
4
|
+
export declare const SETTINGS_RAILS: readonly SettingsRail[];
|
|
5
|
+
export interface PayoutSettings {
|
|
6
|
+
v: 1;
|
|
7
|
+
/** The company's facilitator, as a canonical did:web. Absent when the company pays on chain only. */
|
|
8
|
+
facilitator?: string;
|
|
9
|
+
/** The rails the company pays on, in its own order. */
|
|
10
|
+
rails: SettingsRail[];
|
|
11
|
+
/** The oracles the company allows; the first is the default. */
|
|
12
|
+
oracles: string[];
|
|
13
|
+
/** What off-chain amounts are quoted in. Absent: USD. */
|
|
14
|
+
currency?: "USD" | "USDC";
|
|
15
|
+
}
|
|
16
|
+
export interface SettingsInput {
|
|
17
|
+
/** Needed only for the off-chain rails (usdc_base, stripe); blank or absent for a chain-only company. */
|
|
18
|
+
facilitator?: string;
|
|
19
|
+
rails: string[];
|
|
20
|
+
oracles: string[];
|
|
21
|
+
currency?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function buildPayoutSettings(input: SettingsInput): PayoutSettings;
|
|
24
|
+
/** The document as stored, believed field by field; anything else is null. */
|
|
25
|
+
export declare function readPayoutSettings(doc: unknown): PayoutSettings | null;
|
|
26
|
+
/** The exact bytes that are published and hashed. */
|
|
27
|
+
export declare const payoutSettingsJson: (settings: PayoutSettings) => string;
|
|
28
|
+
export declare const payoutSettingsCid: (settings: PayoutSettings) => Promise<string>;
|
|
29
|
+
/** The linked resource on the org's IID; the endpoint is the https address its store gave, as `#payoutTerms`. */
|
|
30
|
+
export declare const payoutSettingsResource: (ref: {
|
|
31
|
+
cid: string;
|
|
32
|
+
url?: string;
|
|
33
|
+
uri?: string;
|
|
34
|
+
}) => {
|
|
35
|
+
type: string;
|
|
36
|
+
id: string;
|
|
37
|
+
description: string;
|
|
38
|
+
mediaType: string;
|
|
39
|
+
serviceEndpoint: string;
|
|
40
|
+
proof: string;
|
|
41
|
+
encrypted: string;
|
|
42
|
+
right: string;
|
|
43
|
+
};
|
|
44
|
+
/** Where an org's settings are, found by id suffix. */
|
|
45
|
+
export declare function payoutSettingsRef(linked: {
|
|
46
|
+
id?: string | null;
|
|
47
|
+
proof?: string | null;
|
|
48
|
+
}[] | null | undefined): {
|
|
49
|
+
id: string;
|
|
50
|
+
cid: string;
|
|
51
|
+
} | null;
|
|
52
|
+
/** The fetched bytes, believed only when they hash to the anchored CID. */
|
|
53
|
+
export declare function verifiedPayoutSettings(text: string | null, cid: string): Promise<PayoutSettings | null>;
|
|
54
|
+
/**
|
|
55
|
+
* Whether `address` may edit this IID: a key in its `authentication` with that
|
|
56
|
+
* account (a `controller` entry is not enough — the chain answers code 1106).
|
|
57
|
+
* The org-admin check of OpenHands HQ, shared with the worker's shaped post.
|
|
58
|
+
* shortcut: matches on blockchainAccountID only, as every key minted by createIidVerificationMethods has one; upgrade if an org authenticates by bare public key.
|
|
59
|
+
*/
|
|
60
|
+
export declare function canEditIid(doc: {
|
|
61
|
+
verificationMethod?: {
|
|
62
|
+
id?: string;
|
|
63
|
+
blockchainAccountID?: string;
|
|
64
|
+
}[] | null;
|
|
65
|
+
authentication?: string[] | null;
|
|
66
|
+
} | null | undefined, address: string): boolean;
|
|
67
|
+
/** The settings edit, as one transaction's IID messages: the old resource out (when there is one) and the new one in. */
|
|
68
|
+
export declare function replaceSettingsMsgs(org: string, signer: string, stored: {
|
|
69
|
+
cid: string;
|
|
70
|
+
url: string;
|
|
71
|
+
}, oldId: string | null): ({
|
|
72
|
+
typeUrl: "/ixo.iid.v1beta1.MsgDeleteLinkedResource";
|
|
73
|
+
value: {
|
|
74
|
+
id: string;
|
|
75
|
+
resourceId: string;
|
|
76
|
+
signer: string;
|
|
77
|
+
linkedResource?: undefined;
|
|
78
|
+
};
|
|
79
|
+
} | {
|
|
80
|
+
typeUrl: "/ixo.iid.v1beta1.MsgAddLinkedResource";
|
|
81
|
+
value: {
|
|
82
|
+
id: string;
|
|
83
|
+
signer: string;
|
|
84
|
+
linkedResource: {
|
|
85
|
+
type: string;
|
|
86
|
+
id: string;
|
|
87
|
+
description: string;
|
|
88
|
+
mediaType: string;
|
|
89
|
+
serviceEndpoint: string;
|
|
90
|
+
proof: string;
|
|
91
|
+
encrypted: string;
|
|
92
|
+
right: string;
|
|
93
|
+
};
|
|
94
|
+
resourceId?: undefined;
|
|
95
|
+
};
|
|
96
|
+
})[];
|
|
97
|
+
//# sourceMappingURL=payoutSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payoutSettings.d.ts","sourceRoot":"","sources":["../../../src/chain/payoutSettings.ts"],"names":[],"mappings":"AAYA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEhF,4FAA4F;AAC5F,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAChD,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAqC,CAAC;AAMxF,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,CAAC,CAAC;IACL,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,yGAAyG;IACzG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAexE;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAatE;AAED,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,GAAI,UAAU,cAAc,KAAG,MAAkC,CAAC;AAEjG,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,KAAG,OAAO,CAAC,MAAM,CAA4C,CAAC;AAExH,iHAAiH;AACjH,eAAO,MAAM,sBAAsB,GAAI,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;CASrF,CAAC;AAEH,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGhJ;AAED,2EAA2E;AAC3E,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAO7G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE;IAAE,kBAAkB,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAI9L;AAED,yHAAyH;AACzH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;KAK1H"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.payoutSettingsResource = exports.payoutSettingsCid = exports.payoutSettingsJson = exports.SETTINGS_RAILS = void 0;
|
|
4
|
+
exports.buildPayoutSettings = buildPayoutSettings;
|
|
5
|
+
exports.readPayoutSettings = readPayoutSettings;
|
|
6
|
+
exports.payoutSettingsRef = payoutSettingsRef;
|
|
7
|
+
exports.verifiedPayoutSettings = verifiedPayoutSettings;
|
|
8
|
+
exports.canEditIid = canEditIid;
|
|
9
|
+
exports.replaceSettingsMsgs = replaceSettingsMsgs;
|
|
10
|
+
/**
|
|
11
|
+
* A company's payout settings (OpenHands HQ), on the org's own chain record.
|
|
12
|
+
*
|
|
13
|
+
* One linked resource on the org's IID, `{orgDid}#payoutSettings`, points at
|
|
14
|
+
* this small JSON document by the https address its store gave (Vault or
|
|
15
|
+
* gateway) with the CID as its proof — stored
|
|
16
|
+
* and anchored exactly as `#payoutTerms` is (payoutTerms.ts). An ask posted for
|
|
17
|
+
* the org builds its `#payoutTerms` from these plus the poster's per-ask
|
|
18
|
+
* choices. Strict: unknown fields, a bad value or a CID that is not the bytes'
|
|
19
|
+
* own read as no settings at all.
|
|
20
|
+
*/
|
|
21
|
+
const cid_ts_1 = require("../udid/cid.js");
|
|
22
|
+
const payoutTerms_ts_1 = require("./payoutTerms.js");
|
|
23
|
+
exports.SETTINGS_RAILS = ["chain", "usdc_base", "stripe"];
|
|
24
|
+
const KEYS = ["v", "facilitator", "rails", "oracles", "currency"];
|
|
25
|
+
const MAX_ORACLES = 10;
|
|
26
|
+
// An oracle the company allows: its did:web (IXO's and hosted oracles) or its on-chain entity.
|
|
27
|
+
const ORACLE = /^(did:web:[a-z0-9.-]+(%3A\d+)?(:[A-Za-z0-9._~-]+)*|did:ixo:entity:[0-9a-f]{32})$/;
|
|
28
|
+
function buildPayoutSettings(input) {
|
|
29
|
+
const rails = [...new Set(input.rails)];
|
|
30
|
+
if (rails.length === 0 || !rails.every((rail) => exports.SETTINGS_RAILS.includes(rail)))
|
|
31
|
+
throw new Error(`rails are some of ${exports.SETTINGS_RAILS.join(", ")}, at least one`);
|
|
32
|
+
const oracles = [...new Set(input.oracles.map((one) => one.trim()).filter(Boolean))];
|
|
33
|
+
if (oracles.length === 0)
|
|
34
|
+
throw new Error("name at least one oracle");
|
|
35
|
+
if (oracles.length > MAX_ORACLES)
|
|
36
|
+
throw new Error(`at most ${MAX_ORACLES} oracles`);
|
|
37
|
+
const bad = oracles.find((one) => !ORACLE.test(one));
|
|
38
|
+
if (bad)
|
|
39
|
+
throw new Error(`an oracle is a did:web or a did:ixo:entity, not ${bad}`);
|
|
40
|
+
if (input.currency !== undefined && input.currency !== "USD" && input.currency !== "USDC")
|
|
41
|
+
throw new Error(`currency is USD or USDC, not ${input.currency}`);
|
|
42
|
+
if (input.currency === "USDC" && rails.includes("stripe"))
|
|
43
|
+
throw new Error("Stripe pays in USD");
|
|
44
|
+
const facilitator = input.facilitator?.trim();
|
|
45
|
+
const offChain = rails.filter((rail) => rail !== "chain");
|
|
46
|
+
if (!facilitator && offChain.length)
|
|
47
|
+
throw new Error(`${offChain.join(" and ")} ${offChain.length === 1 ? "is" : "are"} paid by the company's facilitator: name one`);
|
|
48
|
+
/* Key order is the stored bytes' (and so the CID's): a doc with a facilitator reads exactly as it was written. */
|
|
49
|
+
return { v: 1, ...(facilitator ? { facilitator: (0, payoutTerms_ts_1.facilitatorDid)(facilitator) } : {}), rails, oracles, ...(input.currency ? { currency: input.currency } : {}) };
|
|
50
|
+
}
|
|
51
|
+
/** The document as stored, believed field by field; anything else is null. */
|
|
52
|
+
function readPayoutSettings(doc) {
|
|
53
|
+
if (!doc || typeof doc !== "object" || Array.isArray(doc))
|
|
54
|
+
return null;
|
|
55
|
+
if (Object.keys(doc).some((key) => !KEYS.includes(key)))
|
|
56
|
+
return null;
|
|
57
|
+
const d = doc;
|
|
58
|
+
if (d.v !== 1 || !Array.isArray(d.rails) || !Array.isArray(d.oracles) || (d.facilitator !== undefined && typeof d.facilitator !== "string"))
|
|
59
|
+
return null;
|
|
60
|
+
if (!d.rails.every((rail) => typeof rail === "string") || !d.oracles.every((one) => typeof one === "string"))
|
|
61
|
+
return null;
|
|
62
|
+
try {
|
|
63
|
+
const built = buildPayoutSettings({ ...(d.facilitator !== undefined ? { facilitator: d.facilitator } : {}), rails: d.rails, oracles: d.oracles, ...(d.currency !== undefined ? { currency: d.currency } : {}) });
|
|
64
|
+
// Canonical only: what was stored must be what the builder writes, or a reader and the facilitator could disagree.
|
|
65
|
+
return (0, exports.payoutSettingsJson)(built) === JSON.stringify(doc) ? built : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** The exact bytes that are published and hashed. */
|
|
72
|
+
const payoutSettingsJson = (settings) => JSON.stringify(settings);
|
|
73
|
+
exports.payoutSettingsJson = payoutSettingsJson;
|
|
74
|
+
const payoutSettingsCid = (settings) => (0, cid_ts_1.cidOfText)((0, exports.payoutSettingsJson)(settings));
|
|
75
|
+
exports.payoutSettingsCid = payoutSettingsCid;
|
|
76
|
+
/** The linked resource on the org's IID; the endpoint is the https address its store gave, as `#payoutTerms`. */
|
|
77
|
+
const payoutSettingsResource = (ref) => ({
|
|
78
|
+
type: "PayoutSettings",
|
|
79
|
+
id: "{id}#payoutSettings",
|
|
80
|
+
description: "How this organisation pays for answers",
|
|
81
|
+
mediaType: "application/json",
|
|
82
|
+
serviceEndpoint: (0, payoutTerms_ts_1.storedHttps)(ref, "#payoutSettings"),
|
|
83
|
+
proof: ref.cid,
|
|
84
|
+
encrypted: "false",
|
|
85
|
+
right: ""
|
|
86
|
+
});
|
|
87
|
+
exports.payoutSettingsResource = payoutSettingsResource;
|
|
88
|
+
/** Where an org's settings are, found by id suffix. */
|
|
89
|
+
function payoutSettingsRef(linked) {
|
|
90
|
+
const found = (linked ?? []).find((one) => typeof one?.id === "string" && one.id.endsWith("#payoutSettings"));
|
|
91
|
+
return found?.id && found.proof ? { id: found.id, cid: found.proof } : null;
|
|
92
|
+
}
|
|
93
|
+
/** The fetched bytes, believed only when they hash to the anchored CID. */
|
|
94
|
+
async function verifiedPayoutSettings(text, cid) {
|
|
95
|
+
if (text === null || (await (0, cid_ts_1.cidOfText)(text)) !== cid)
|
|
96
|
+
return null;
|
|
97
|
+
try {
|
|
98
|
+
return readPayoutSettings(JSON.parse(text));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether `address` may edit this IID: a key in its `authentication` with that
|
|
106
|
+
* account (a `controller` entry is not enough — the chain answers code 1106).
|
|
107
|
+
* The org-admin check of OpenHands HQ, shared with the worker's shaped post.
|
|
108
|
+
* shortcut: matches on blockchainAccountID only, as every key minted by createIidVerificationMethods has one; upgrade if an org authenticates by bare public key.
|
|
109
|
+
*/
|
|
110
|
+
function canEditIid(doc, address) {
|
|
111
|
+
if (!doc || !address)
|
|
112
|
+
return false;
|
|
113
|
+
const authn = new Set(doc.authentication ?? []);
|
|
114
|
+
return (doc.verificationMethod ?? []).some((method) => authn.has(method.id ?? "") && (method.blockchainAccountID ?? "").split(":").pop() === address);
|
|
115
|
+
}
|
|
116
|
+
/** The settings edit, as one transaction's IID messages: the old resource out (when there is one) and the new one in. */
|
|
117
|
+
function replaceSettingsMsgs(org, signer, stored, oldId) {
|
|
118
|
+
return [
|
|
119
|
+
...(oldId ? [{ typeUrl: "/ixo.iid.v1beta1.MsgDeleteLinkedResource", value: { id: org, resourceId: oldId, signer } }] : []),
|
|
120
|
+
{ typeUrl: "/ixo.iid.v1beta1.MsgAddLinkedResource", value: { id: org, signer, linkedResource: (0, exports.payoutSettingsResource)(stored) } }
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=payoutSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payoutSettings.js","sourceRoot":"","sources":["../../../src/chain/payoutSettings.ts"],"names":[],"mappings":";;;AA0CA,kDAeC;AAGD,gDAaC;AAoBD,8CAGC;AAGD,wDAOC;AAQD,gCAIC;AAGD,kDAKC;AA9HD;;;;;;;;;;GAUG;AACH,2CAA2C;AAC3C,qDAAgF;AAInE,QAAA,cAAc,GAA4B,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxF,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,+FAA+F;AAC/F,MAAM,MAAM,GAAG,kFAAkF,CAAC;AAsBlG,SAAgB,mBAAmB,CAAC,KAAoB;IACtD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAwB,EAAE,CAAC,sBAAc,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,sBAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvM,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,UAAU,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,EAAE,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7J,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,8CAA8C,CAAC,CAAC;IACtK,kHAAkH;IAClH,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAA,+BAAc,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACnL,CAAC;AAED,8EAA8E;AAC9E,SAAgB,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACzJ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1H,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjN,mHAAmH;QACnH,OAAO,IAAA,0BAAkB,EAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,qDAAqD;AAC9C,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAApF,QAAA,kBAAkB,sBAAkE;AAE1F,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAmB,EAAE,CAAC,IAAA,kBAAS,EAAC,IAAA,0BAAkB,EAAC,QAAQ,CAAC,CAAC,CAAC;AAA3G,QAAA,iBAAiB,qBAA0F;AAExH,iHAAiH;AAC1G,MAAM,sBAAsB,GAAG,CAAC,GAAgD,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,gBAAgB;IACtB,EAAE,EAAE,qBAAqB;IACzB,WAAW,EAAE,wCAAwC;IACrD,SAAS,EAAE,kBAAkB;IAC7B,eAAe,EAAE,IAAA,4BAAW,EAAC,GAAG,EAAE,iBAAiB,CAAC;IACpD,KAAK,EAAE,GAAG,CAAC,GAAG;IACd,SAAS,EAAE,OAAO;IAClB,KAAK,EAAE,EAAE;CACV,CAAC,CAAC;AATU,QAAA,sBAAsB,0BAShC;AAEH,uDAAuD;AACvD,SAAgB,iBAAiB,CAAC,MAA0E;IAC1G,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC9G,OAAO,KAAK,EAAE,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED,2EAA2E;AACpE,KAAK,UAAU,sBAAsB,CAAC,IAAmB,EAAE,GAAW;IAC3E,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAA,kBAAS,EAAC,IAAI,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAClE,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,GAAyI,EAAE,OAAe;IACnL,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC;AACxJ,CAAC;AAED,yHAAyH;AACzH,SAAgB,mBAAmB,CAAC,GAAW,EAAE,MAAc,EAAE,MAAoC,EAAE,KAAoB;IACzH,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,0CAAmD,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnI,EAAE,OAAO,EAAE,uCAAgD,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,IAAA,8BAAsB,EAAC,MAAM,CAAC,EAAE,EAAE;KAC1I,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export type PayoutRail = "usdc_base" | "stripe";
|
|
2
|
+
export interface PayoutTerms {
|
|
3
|
+
v: 1;
|
|
4
|
+
/** The organisation that pays: its did:ixo:entity, the collection's `entity`. */
|
|
5
|
+
org: string;
|
|
6
|
+
/** The org's facilitator, as a canonical did:web. */
|
|
7
|
+
facilitator: string;
|
|
8
|
+
rails: PayoutRail[];
|
|
9
|
+
/** Per approved answer, a decimal string: two decimals for USD, up to six for USDC. */
|
|
10
|
+
amount: string;
|
|
11
|
+
/** USD when the rails include stripe; USDC only with usdc_base alone (which also pays USD 1:1). */
|
|
12
|
+
currency: "USD" | "USDC";
|
|
13
|
+
payee: "submitter";
|
|
14
|
+
/** A hint, not authority: the org's trusted-oracle list decides. */
|
|
15
|
+
oracle?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PayoutInput {
|
|
18
|
+
org: string;
|
|
19
|
+
facilitator: string;
|
|
20
|
+
rail: PayoutRail;
|
|
21
|
+
amount: number;
|
|
22
|
+
currency: string;
|
|
23
|
+
oracle?: string;
|
|
24
|
+
}
|
|
25
|
+
/** `https://host/any/path` or `did:web:host[:path]` → `did:web:host`, a port as `%3A`. */
|
|
26
|
+
export declare function facilitatorDid(facilitator: string): string;
|
|
27
|
+
/** The facilitator's https origin, from either form. */
|
|
28
|
+
export declare const facilitatorOrigin: (facilitator: string) => string;
|
|
29
|
+
export declare function buildPayoutTerms(input: PayoutInput): PayoutTerms;
|
|
30
|
+
/** The document as stored, believed field by field; anything else is null. */
|
|
31
|
+
export declare function readPayoutTerms(doc: unknown): PayoutTerms | null;
|
|
32
|
+
/** The exact bytes that are published and hashed. */
|
|
33
|
+
export declare const payoutTermsJson: (terms: PayoutTerms) => string;
|
|
34
|
+
/** CIDv1 raw sha256 of those bytes: the facilitator recomputes it and refuses a mismatch. */
|
|
35
|
+
export declare const payoutTermsCid: (terms: PayoutTerms) => Promise<string>;
|
|
36
|
+
/** The https address the store gave (`url` from the browser's store, `uri` from the worker's); an extra resource is never `ipfs:`. */
|
|
37
|
+
export declare function storedHttps(ref: {
|
|
38
|
+
url?: string;
|
|
39
|
+
uri?: string;
|
|
40
|
+
}, what: string): string;
|
|
41
|
+
/** The linked resource on the ask entity. Wrap in `ixo.iid.v1beta1.LinkedResource.fromPartial` at the call site. The proof is the CID the facilitator recomputes. */
|
|
42
|
+
export declare const payoutTermsResource: (ref: {
|
|
43
|
+
cid: string;
|
|
44
|
+
url?: string;
|
|
45
|
+
uri?: string;
|
|
46
|
+
}) => {
|
|
47
|
+
type: string;
|
|
48
|
+
id: string;
|
|
49
|
+
description: string;
|
|
50
|
+
mediaType: string;
|
|
51
|
+
serviceEndpoint: string;
|
|
52
|
+
proof: string;
|
|
53
|
+
encrypted: string;
|
|
54
|
+
right: string;
|
|
55
|
+
};
|
|
56
|
+
/** Where an entity's payout terms are, found by id suffix as the engine finds `#vct`. */
|
|
57
|
+
export declare function payoutTermsRef(linked: {
|
|
58
|
+
id?: string | null;
|
|
59
|
+
serviceEndpoint?: string | null;
|
|
60
|
+
proof?: string | null;
|
|
61
|
+
}[]): {
|
|
62
|
+
cid: string;
|
|
63
|
+
url: string;
|
|
64
|
+
} | null;
|
|
65
|
+
/** What the ask's own `#done` terms carry for the board: no org, no facilitator, those are this document's. */
|
|
66
|
+
export declare const payoutSummary: (terms: PayoutTerms) => {
|
|
67
|
+
rail: PayoutRail;
|
|
68
|
+
amount: string;
|
|
69
|
+
currency: "USD" | "USDC";
|
|
70
|
+
};
|
|
71
|
+
export declare const railWords: (rail: PayoutRail) => string;
|
|
72
|
+
//# sourceMappingURL=payoutTerms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payoutTerms.d.ts","sourceRoot":"","sources":["../../../src/chain/payoutTerms.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAIhD,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC;IACf,mGAAmG;IACnG,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,MAAgG,CAAC;AAEzJ,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAuBhE;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAkBhE;AAED,qDAAqD;AACrD,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,KAAG,MAA+B,CAAC;AAErF,6FAA6F;AAC7F,eAAO,MAAM,cAAc,GAAI,OAAO,WAAW,KAAG,OAAO,CAAC,MAAM,CAAsC,CAAC;AAEzG,sIAAsI;AACtI,wBAAgB,WAAW,CAAC,GAAG,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,qKAAqK;AACrK,eAAO,MAAM,mBAAmB,GAAI,KAAK;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;CASlF,CAAC;AAEH,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG5J;AAED,+GAA+G;AAC/G,eAAO,MAAM,aAAa,GAAI,OAAO,WAAW;;;;CAAgF,CAAC;AAEjI,eAAO,MAAM,SAAS,GAAI,MAAM,UAAU,KAAG,MAAyE,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.railWords = exports.payoutSummary = exports.payoutTermsResource = exports.payoutTermsCid = exports.payoutTermsJson = exports.facilitatorOrigin = void 0;
|
|
4
|
+
exports.facilitatorDid = facilitatorDid;
|
|
5
|
+
exports.buildPayoutTerms = buildPayoutTerms;
|
|
6
|
+
exports.readPayoutTerms = readPayoutTerms;
|
|
7
|
+
exports.storedHttps = storedHttps;
|
|
8
|
+
exports.payoutTermsRef = payoutTermsRef;
|
|
9
|
+
/**
|
|
10
|
+
* How an ask paid off chain pays (OpenHands HQ, ways B and C).
|
|
11
|
+
*
|
|
12
|
+
* The approval leg of such an ask is empty, so the chain pays nobody; the
|
|
13
|
+
* organisation's facilitator reads this document at `{askDid}#payoutTerms`
|
|
14
|
+
* and pays the submitter on USDC on Base or Stripe once an approved oracle
|
|
15
|
+
* approves. **The shape is S4's #payoutTerms v1 contract (confirmed
|
|
16
|
+
* 2026-10-13); strict, unknown fields are refused.** This file is the only
|
|
17
|
+
* writer and reader, so a change to it is a change here.
|
|
18
|
+
*/
|
|
19
|
+
const cid_ts_1 = require("../udid/cid.js");
|
|
20
|
+
const RAILS = ["usdc_base", "stripe"];
|
|
21
|
+
const KEYS = ["v", "org", "facilitator", "rails", "amount", "currency", "payee", "oracle"];
|
|
22
|
+
const ORG = /^did:ixo:entity:[0-9a-f]{32}$/;
|
|
23
|
+
const HOST = /^[a-z0-9.-]+(%3a\d+)?$/i;
|
|
24
|
+
// The facilitator verifies the oracle by did:web or did:key; an on-chain entity DID is not one.
|
|
25
|
+
const WEB_OR_KEY = (did) => did.startsWith("did:web:") || did.startsWith("did:key:");
|
|
26
|
+
const MAX_DECIMALS = { USD: 2, USDC: 6 };
|
|
27
|
+
/** `https://host/any/path` or `did:web:host[:path]` → `did:web:host`, a port as `%3A`. */
|
|
28
|
+
function facilitatorDid(facilitator) {
|
|
29
|
+
const value = facilitator.trim();
|
|
30
|
+
if (value.toLowerCase().startsWith("did:web:")) {
|
|
31
|
+
const host = value.slice("did:web:".length).split(":")[0] ?? "";
|
|
32
|
+
if (!host || !HOST.test(host))
|
|
33
|
+
throw new Error(`not a facilitator did:web: ${facilitator}`);
|
|
34
|
+
return `did:web:${host.toLowerCase().replace(/%3a/, "%3A")}`;
|
|
35
|
+
}
|
|
36
|
+
const url = URL.canParse(value) ? new URL(value) : null;
|
|
37
|
+
if (url?.protocol !== "https:" || !url.hostname)
|
|
38
|
+
throw new Error(`a facilitator is a did:web or an https URL, not ${facilitator}`);
|
|
39
|
+
return `did:web:${url.host.toLowerCase().replace(/:/g, "%3A")}`;
|
|
40
|
+
}
|
|
41
|
+
/** The facilitator's https origin, from either form. */
|
|
42
|
+
const facilitatorOrigin = (facilitator) => `https://${facilitatorDid(facilitator).slice("did:web:".length).replace(/%3A/g, ":")}`;
|
|
43
|
+
exports.facilitatorOrigin = facilitatorOrigin;
|
|
44
|
+
function buildPayoutTerms(input) {
|
|
45
|
+
if (!ORG.test(input.org))
|
|
46
|
+
throw new Error(`org must be the organisation's did:ixo:entity, not ${input.org}`);
|
|
47
|
+
if (!RAILS.includes(input.rail))
|
|
48
|
+
throw new Error(`rail must be usdc_base or stripe, not ${input.rail}`);
|
|
49
|
+
// USDC on Base pays USD 1:1, so usdc_base takes either; Stripe only USD.
|
|
50
|
+
if (input.currency !== "USD" && !(input.rail === "usdc_base" && input.currency === "USDC"))
|
|
51
|
+
throw new Error(`${input.rail === "stripe" ? "Stripe pays in USD" : "USDC on Base pays in USDC or USD"}, not ${input.currency}`);
|
|
52
|
+
const currency = input.currency;
|
|
53
|
+
if (!Number.isFinite(input.amount) || input.amount <= 0)
|
|
54
|
+
throw new Error("the payout amount must be more than 0");
|
|
55
|
+
if (input.amount > 1_000_000)
|
|
56
|
+
throw new Error("the payout amount is at most 1,000,000");
|
|
57
|
+
const places = MAX_DECIMALS[currency];
|
|
58
|
+
const scaled = input.amount * 10 ** places;
|
|
59
|
+
if (Math.abs(Math.round(scaled) - scaled) > 1e-6)
|
|
60
|
+
throw new Error(`a ${currency} payout amount has at most ${places} decimals (${places === 2 ? "cents" : "micro-dollars"})`);
|
|
61
|
+
// Two decimals when that is exact, else the shortest exact form (USDC only gets here).
|
|
62
|
+
const amount = Math.abs(Math.round(input.amount * 100) - input.amount * 100) <= 1e-6 ? input.amount.toFixed(2) : input.amount.toFixed(places).replace(/0+$/, "");
|
|
63
|
+
return {
|
|
64
|
+
v: 1,
|
|
65
|
+
org: input.org,
|
|
66
|
+
facilitator: facilitatorDid(input.facilitator),
|
|
67
|
+
rails: [input.rail],
|
|
68
|
+
amount,
|
|
69
|
+
currency,
|
|
70
|
+
payee: "submitter",
|
|
71
|
+
...(input.oracle !== undefined && WEB_OR_KEY(input.oracle) && { oracle: input.oracle })
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** The document as stored, believed field by field; anything else is null. */
|
|
75
|
+
function readPayoutTerms(doc) {
|
|
76
|
+
if (!doc || typeof doc !== "object" || Array.isArray(doc))
|
|
77
|
+
return null;
|
|
78
|
+
if (Object.keys(doc).some((key) => !KEYS.includes(key)))
|
|
79
|
+
return null;
|
|
80
|
+
const d = doc;
|
|
81
|
+
if (d.v !== 1 || d.payee !== "submitter")
|
|
82
|
+
return null;
|
|
83
|
+
if (typeof d.org !== "string" || !ORG.test(d.org))
|
|
84
|
+
return null;
|
|
85
|
+
if (d.oracle !== undefined && (typeof d.oracle !== "string" || !WEB_OR_KEY(d.oracle)))
|
|
86
|
+
return null;
|
|
87
|
+
if (!Array.isArray(d.rails) || d.rails.length === 0 || !d.rails.every((rail) => RAILS.includes(rail)) || new Set(d.rails).size !== d.rails.length)
|
|
88
|
+
return null;
|
|
89
|
+
if (d.currency !== "USD" && d.currency !== "USDC")
|
|
90
|
+
return null;
|
|
91
|
+
if (d.rails.includes("stripe") && d.currency !== "USD")
|
|
92
|
+
return null; // no stripe means usdc_base alone (rails are unique): USD or USDC
|
|
93
|
+
if (typeof d.amount !== "string" || !/^\d+(\.\d+)?$/.test(d.amount) || Number(d.amount) <= 0)
|
|
94
|
+
return null;
|
|
95
|
+
if ((d.amount.split(".")[1]?.length ?? 0) > MAX_DECIMALS[d.currency])
|
|
96
|
+
return null;
|
|
97
|
+
try {
|
|
98
|
+
if (typeof d.facilitator !== "string" || facilitatorDid(d.facilitator) !== d.facilitator)
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return { v: 1, org: d.org, facilitator: d.facilitator, rails: [...d.rails], amount: d.amount, currency: d.currency, payee: "submitter", ...(d.oracle !== undefined && { oracle: d.oracle }) };
|
|
105
|
+
}
|
|
106
|
+
/** The exact bytes that are published and hashed. */
|
|
107
|
+
const payoutTermsJson = (terms) => JSON.stringify(terms);
|
|
108
|
+
exports.payoutTermsJson = payoutTermsJson;
|
|
109
|
+
/** CIDv1 raw sha256 of those bytes: the facilitator recomputes it and refuses a mismatch. */
|
|
110
|
+
const payoutTermsCid = (terms) => (0, cid_ts_1.cidOfText)((0, exports.payoutTermsJson)(terms));
|
|
111
|
+
exports.payoutTermsCid = payoutTermsCid;
|
|
112
|
+
/** The https address the store gave (`url` from the browser's store, `uri` from the worker's); an extra resource is never `ipfs:`. */
|
|
113
|
+
function storedHttps(ref, what) {
|
|
114
|
+
const url = (ref.url ?? ref.uri ?? "").trim();
|
|
115
|
+
if (!/^https:\/\/\S+$/.test(url))
|
|
116
|
+
throw new Error(`${what} needs the https address its store gave, got ${JSON.stringify(url)}`);
|
|
117
|
+
return url;
|
|
118
|
+
}
|
|
119
|
+
/** The linked resource on the ask entity. Wrap in `ixo.iid.v1beta1.LinkedResource.fromPartial` at the call site. The proof is the CID the facilitator recomputes. */
|
|
120
|
+
const payoutTermsResource = (ref) => ({
|
|
121
|
+
type: "PayoutTerms",
|
|
122
|
+
id: "{id}#payoutTerms",
|
|
123
|
+
description: "How an approved answer is paid, off chain",
|
|
124
|
+
mediaType: "application/json",
|
|
125
|
+
serviceEndpoint: storedHttps(ref, "#payoutTerms"),
|
|
126
|
+
proof: ref.cid,
|
|
127
|
+
encrypted: "false",
|
|
128
|
+
right: ""
|
|
129
|
+
});
|
|
130
|
+
exports.payoutTermsResource = payoutTermsResource;
|
|
131
|
+
/** Where an entity's payout terms are, found by id suffix as the engine finds `#vct`. */
|
|
132
|
+
function payoutTermsRef(linked) {
|
|
133
|
+
const found = linked.find((one) => typeof one?.id === "string" && one.id.endsWith("#payoutTerms"));
|
|
134
|
+
return found?.proof && found.serviceEndpoint ? { cid: found.proof, url: found.serviceEndpoint } : null;
|
|
135
|
+
}
|
|
136
|
+
/** What the ask's own `#done` terms carry for the board: no org, no facilitator, those are this document's. */
|
|
137
|
+
const payoutSummary = (terms) => ({ rail: terms.rails[0], amount: terms.amount, currency: terms.currency });
|
|
138
|
+
exports.payoutSummary = payoutSummary;
|
|
139
|
+
const railWords = (rail) => (rail === "stripe" ? "Paid by Stripe" : "Paid in USDC on Base");
|
|
140
|
+
exports.railWords = railWords;
|
|
141
|
+
//# sourceMappingURL=payoutTerms.js.map
|