@jdr377/mapapp-agent-connector 0.1.0-pre.9 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -72
- package/dist/chunk-16qeq13a.js +3 -0
- package/dist/chunk-1w3c7vc1.js +2 -0
- package/dist/chunk-2mrx8bdp.js +12 -0
- package/dist/chunk-5pem7rfk.js +17 -0
- package/dist/chunk-6cjha5ac.js +3 -0
- package/dist/chunk-7h4k73v2.js +3 -0
- package/dist/chunk-87mp2yh5.js +3 -0
- package/dist/chunk-dnvr0187.js +3 -0
- package/dist/chunk-hwy3a2v3.js +2 -0
- package/dist/chunk-jhebcajz.js +2 -0
- package/dist/chunk-mwdg0e2f.js +2 -0
- package/dist/chunk-trf8hz3g.js +3 -0
- package/dist/chunk-v3k39tnm.js +3 -0
- package/dist/participant-mcp-server.js +16 -10
- package/distribution.json +78 -32
- package/package.json +2 -2
- package/dist/chunk-8061dj3y.js +0 -3
- package/dist/chunk-961w3fz4.js +0 -2
- package/dist/chunk-esdsjfvs.js +0 -40
- package/dist/chunk-r3qpjc6c.js +0 -17
- package/dist/chunk-v1y901rb.js +0 -3
- package/dist/chunk-w3ywvqy2.js +0 -3
- package/dist/chunk-y9q3s55d.js +0 -2
package/dist/chunk-v1y901rb.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{__require}from"./chunk-btwmey1h.js";var POST_GEOHASH_MIN_PRECISION=8;var POST_GEOHASH_MAX_PRECISION=16;var POST_GEOHASH_DEFAULT_PRECISION=9;var POST_GEOHASH_PATTERN=/^[0123456789bcdefghjkmnpqrstuvwxyz]{8,16}$/;var BASE32="0123456789bcdefghjkmnpqrstuvwxyz";function encodeGeohash(lat,lng,precision=6){const safePrecision=Math.max(4,Math.min(16,Math.trunc(precision)));const latRange=[-90,90];const lngRange=[-180,180];const bits=[16,8,4,2,1];let isEven=true;let bit=0;let ch=0;let geohash="";const safeLat=clampFinite(lat,-90,90);const safeLng=clampFinite(lng,-180,180);while(geohash.length<safePrecision){if(isEven){const mid=(lngRange[0]+lngRange[1])/2;if(safeLng>=mid){ch|=bits[bit]??0;lngRange[0]=mid}else{lngRange[1]=mid}}else{const mid=(latRange[0]+latRange[1])/2;if(safeLat>=mid){ch|=bits[bit]??0;latRange[0]=mid}else{latRange[1]=mid}}isEven=!isEven;if(bit<4){bit+=1}else{geohash+=BASE32[ch]??"0";bit=0;ch=0}}return geohash}function geohashBounds(geohash){const safeGeohash=geohash.trim().toLowerCase();if(!safeGeohash)return null;const latRange=[-90,90];const lngRange=[-180,180];let isEven=true;for(const character of safeGeohash){const value=BASE32.indexOf(character);if(value<0)return null;for(const mask of[16,8,4,2,1]){if(isEven){bisectRange(lngRange,(value&mask)!==0)}else{bisectRange(latRange,(value&mask)!==0)}isEven=!isEven}}return{west:lngRange[0],south:latRange[0],east:lngRange[1],north:latRange[1]}}function bisectRange(range,useUpperHalf){const mid=(range[0]+range[1])/2;if(useUpperHalf){range[0]=mid}else{range[1]=mid}}function clampFinite(value,min,max){if(value===Number.POSITIVE_INFINITY)return max;if(value===Number.NEGATIVE_INFINITY)return min;if(!Number.isFinite(value))return min;return Math.min(max,Math.max(min,value))}var MEDIA_RELAY_SAFE_MAX_BYTES=99*1024;function readWebpDimensions(bytes){if(bytes.length<20||text4(bytes,0)!=="RIFF"||text4(bytes,8)!=="WEBP"||u32(bytes,4)+8!==bytes.length)return null;let offset=12;let extended=null;let image=null;while(offset<bytes.length){if(offset+8>bytes.length)return null;const kind=text4(bytes,offset);const length=u32(bytes,offset+4);const payload=offset+8;const end=payload+length;const paddedEnd=end+(length&1);if(end>bytes.length||paddedEnd>bytes.length)return null;if(!extended&&kind==="VP8X"){if(length!==10)return null;extended={width:1+u24(bytes,payload+4),height:1+u24(bytes,payload+7)}}else if(!image&&kind==="VP8 "){if(length<10||bytes[payload+3]!==157||bytes[payload+4]!==1||bytes[payload+5]!==42)return null;image={width:(bytes[payload+6]|bytes[payload+7]<<8)&16383,height:(bytes[payload+8]|bytes[payload+9]<<8)&16383}}else if(!image&&kind==="VP8L"){if(length<5||bytes[payload]!==47)return null;const bits=u32(bytes,payload+1);image={width:1+(bits&16383),height:1+(bits>>>14&16383)}}offset=paddedEnd}if(offset!==bytes.length||!image)return null;if(extended&&(extended.width!==image.width||extended.height!==image.height))return null;return extended??image}function text4(bytes,offset){return String.fromCharCode(...bytes.slice(offset,offset+4))}function u24(bytes,offset){return bytes[offset]|bytes[offset+1]<<8|bytes[offset+2]<<16}function u32(bytes,offset){return(bytes[offset]|bytes[offset+1]<<8|bytes[offset+2]<<16|bytes[offset+3]<<24)>>>0}var AGENT_MEDIA_MAX_BASE64_LENGTH=4*Math.ceil(MEDIA_RELAY_SAFE_MAX_BYTES/3);class AgentMediaError extends Error{code;constructor(code){super(code);this.code=code}}function fail(code){throw new AgentMediaError(code)}function validAgentMediaInput(value){if(!value||typeof value!=="object"||Array.isArray(value))return false;const media=value;return Object.keys(media).length===4&&Object.keys(media).every((key)=>["contentType","base64","byteSize","sha256"].includes(key))&&["image/webp","video/webm"].includes(media.contentType)&&typeof media.base64==="string"&&media.base64.length>0&&media.base64.length<=AGENT_MEDIA_MAX_BASE64_LENGTH&&media.base64.length%4===0&&/^[A-Za-z0-9+/]*={0,2}$/.test(media.base64)&&Number.isSafeInteger(media.byteSize)&&media.byteSize>0&&media.byteSize<=MEDIA_RELAY_SAFE_MAX_BYTES&&typeof media.sha256==="string"&&/^[0-9a-f]{64}$/.test(media.sha256)}async function inspectAgentMedia(value){if(!validAgentMediaInput(value))fail("invalid_media_input");const binary=atob(value.base64);if(btoa(binary)!==value.base64)fail("invalid_media_base64");const bytes=Uint8Array.from(binary,(character)=>character.charCodeAt(0));if(bytes.length!==value.byteSize)fail("media_size_mismatch");const hash=new Uint8Array(await crypto.subtle.digest("SHA-256",bytes.buffer));const sha256=Array.from(hash,(byte)=>byte.toString(16).padStart(2,"0")).join("");if(sha256!==value.sha256)fail("media_hash_mismatch");const dimensions=value.contentType==="image/webp"?await inspectImage(bytes):await inspectVideo(bytes);return{media:value.contentType==="image/webp"?{kind:"image",contentType:"image/webp",bytes}:{kind:"video",contentType:"video/webm",bytes},summary:{contentType:value.contentType,byteSize:bytes.length,sha256,...dimensions}}}async function inspectImage(bytes){const dimensions=readWebpDimensions(bytes);if(!dimensions)fail("invalid_media_container");if(dimensions.width<1||dimensions.height<1||dimensions.width>1024||dimensions.height>1024)fail("media_dimensions_too_large");try{const{default:decode}=await import("@jsquash/webp/decode.js");const decoded=await decode(Uint8Array.from(bytes).buffer);if(decoded.width!==dimensions.width||decoded.height!==dimensions.height)fail("invalid_media_container");return dimensions}catch{return fail("invalid_media_container")}}async function inspectVideo(bytes){const{Input,BufferSource,WEBM}=await import("mediabunny");const input=new Input({source:new BufferSource(bytes),formats:[WEBM]});let timeout;try{return await Promise.race([(async()=>{const[videos,audios,tracks]=await Promise.all([input.getVideoTracks(),input.getAudioTracks(),input.getTracks()]);if(videos.length!==1||audios.length>1||tracks.length!==videos.length+audios.length)fail("media_tracks_unsupported");const track=videos[0];const[codec,width,height,displayWidth,displayHeight,duration,stats]=await Promise.all([track.getCodec(),track.getCodedWidth(),track.getCodedHeight(),track.getDisplayWidth(),track.getDisplayHeight(),input.computeDuration(),track.computePacketStats(1)]);if(codec!=="vp8"&&codec!=="vp9")fail("media_codec_unsupported");if([width,height,displayWidth,displayHeight].some((size)=>!Number.isFinite(size)||size<1||size>512))fail("media_dimensions_too_large");if(!Number.isFinite(duration)||duration<=0||duration>30)fail("media_video_duration_invalid");if(stats.packetCount<1)fail("invalid_media_container");if(audios[0]&&!["opus","vorbis"].includes(await audios[0].getCodec()??""))fail("media_codec_unsupported");return{width,height,durationMs:Math.ceil(duration*1000)}})(),new Promise((_,reject)=>{timeout=setTimeout(()=>{input.dispose();reject(new AgentMediaError("media_inspection_timeout"))},5000)})])}catch(error){if(error instanceof AgentMediaError)throw error;return fail("invalid_media_container")}finally{clearTimeout(timeout);input.dispose()}}var MAPAPP_CATEGORY_TOKENS=["\uD83C\uDF31","\uD83D\uDCCD","\uD83E\uDDED","\uD83C\uDFA8","\uD83C\uDFB5","\uD83C\uDF7D\uFE0F","\u2615","\uD83D\uDED2","\uD83C\uDFC0","\uD83C\uDFAE","\uD83D\uDCF0","\uD83D\uDCAC","\uD83D\uDCF8","\uD83C\uDFAC","\uD83D\uDCBB","\uD83D\uDEE0\uFE0F","\uD83C\uDFE0","\uD83D\uDE97","\uD83C\uDF0A","\u26F0\uFE0F","\uD83C\uDF33","\uD83D\uDC3E","\uD83C\uDF93","\uD83C\uDFE5","\u26A0\uFE0F","\uD83C\uDF89","\uD83D\uDCBC","\uD83D\uDD2C","\u2708\uFE0F","\uD83E\uDDD8","\uD83E\uDE99","\u2764\uFE0F"];var DEFAULT_MAPAPP_CATEGORY=MAPAPP_CATEGORY_TOKENS[0];import{sendAllBsv,sendBsv}from"@1sat/actions";import{P2PKH,Transaction,Utils}from"@bsv/sdk";var MAX_DIRECT_BSV_SEND_SATOSHIS=2099999999999998;function validateDirectBsvInput(input){const address=input.to.trim();let decoded;try{decoded=Utils.fromBase58Check(address)}catch{return{ok:false,code:"bsv_address_invalid",message:"Enter a valid mainnet BSV address."}}if(decoded.data.length!==20){return{ok:false,code:"bsv_address_invalid",message:"Enter a valid mainnet P2PKH address."}}if(decoded.prefix.length!==1||decoded.prefix[0]!==0){return{ok:false,code:"bsv_address_wrong_network",message:"Direct sends require a mainnet BSV address."}}if(!("satoshis"in input))return{ok:true,address,max:true};if(!Number.isSafeInteger(input.satoshis)||input.satoshis<1||input.satoshis>MAX_DIRECT_BSV_SEND_SATOSHIS){return{ok:false,code:"bsv_amount_invalid",message:`Amount must be a whole number from 1 to ${MAX_DIRECT_BSV_SEND_SATOSHIS} satoshis.`}}return{ok:true,address,satoshis:input.satoshis}}function inspectDirectBsvEvidence(atomicBeef,address){try{const tx=Transaction.fromBEEF(atomicBeef);const script=new P2PKH().lock(address).toHex();const matching=tx.outputs.filter((output)=>output.lockingScript.toHex()===script);if(matching.length!==1)return null;const satoshis=matching[0]?.satoshis;if(typeof satoshis!=="number"||!Number.isSafeInteger(satoshis)||satoshis<1)return null;const inputSatoshis=tx.inputs.map((input)=>input.sourceTransaction?.outputs[input.sourceOutputIndex]?.satoshis);const fee=inputSatoshis.every((value)=>Number.isSafeInteger(value))?inputSatoshis.reduce((sum,value)=>sum+(value??0),0)-tx.outputs.reduce((sum,output)=>sum+(output.satoshis??0),0):null;return{satoshis,fee:fee!==null&&Number.isSafeInteger(fee)&&fee>=0?fee:null}}catch{return null}}import{Hash,Utils as Utils2}from"@bsv/sdk";var MESSAGING_IDENTITY_VERSION="mapapp-messaging-identity-v1";var MESSAGING_IDENTITY_MUTATION_VERSION="mapapp-messaging-identity-mutation-v1";var MAPAPP_MESSAGE_VERSION="mapapp-message-v1";var MAPAPP_MESSAGE_BOX_NAME="mapapp-messaging-v1";var MESSAGEBOX_PROTOCOL=[1,"messagebox"];var MESSAGEBOX_KEY_ID="1";var DEFAULT_MESSAGE_PLAINTEXT_MAX_BYTES=8*1024;var MAPAPP_MESSAGE_ID_MAX_BYTES=256;function serializeMessagingIdentityMutationV1(input){const mutation=assertMessagingIdentityMutationV1(input);return new TextEncoder().encode(JSON.stringify({version:mutation.version,operation:mutation.operation,bapId:mutation.bapId,walletIdentityKey:mutation.walletIdentityKey,messageBoxHost:mutation.messageBoxHost,deployment:mutation.deployment,canonicalOrigin:mutation.canonicalOrigin,network:mutation.network,expectedProfileOutpoint:mutation.expectedProfileOutpoint,expectedEvidenceHash:mutation.expectedEvidenceHash,acceptedSequence:mutation.acceptedSequence,projectionVersion:mutation.projectionVersion,clientOperationId:mutation.clientOperationId}))}function serializeMapAppMessageV1(input,maxPlaintextBytes=DEFAULT_MESSAGE_PLAINTEXT_MAX_BYTES){const message=assertMapAppMessageV1(input,maxPlaintextBytes);return JSON.stringify({version:message.version,messageId:message.messageId,senderIdentityKey:message.senderIdentityKey,recipientIdentityKey:message.recipientIdentityKey,conversationId:message.conversationId,sentAt:message.sentAt,text:message.text})}function conversationIdForIdentityKeys(first,second){assertCompressedIdentityKey(first,"first identity key");assertCompressedIdentityKey(second,"second identity key");if(first.toLowerCase()===second.toLowerCase())throw new TypeError("Self-messaging is not allowed.");const[left,right]=[first.toLowerCase(),second.toLowerCase()].sort();return Utils2.toHex(Hash.sha256(Array.from(new TextEncoder().encode(`mapapp-messaging/conversation/v1\\0${left}\\0${right}`))))}function assertMapAppMessageV1(value,maxPlaintextBytes=DEFAULT_MESSAGE_PLAINTEXT_MAX_BYTES){const record=strictRecord(value,["version","messageId","senderIdentityKey","recipientIdentityKey","conversationId","sentAt","text"],"MapAppMessageV1");if(record.version!==MAPAPP_MESSAGE_VERSION)throw new TypeError("Unsupported MapApp message version.");const messageId=stringField(record,"messageId");if(messageId.trim()===""||new TextEncoder().encode(messageId).byteLength>MAPAPP_MESSAGE_ID_MAX_BYTES)throw new TypeError("messageId must be a bounded non-empty string.");assertCanonicalIsoTimestamp(stringField(record,"sentAt"),"sentAt");const senderIdentityKey=stringField(record,"senderIdentityKey");const recipientIdentityKey=stringField(record,"recipientIdentityKey");assertCompressedIdentityKey(senderIdentityKey,"sender identity key");assertCompressedIdentityKey(recipientIdentityKey,"recipient identity key");if(senderIdentityKey.toLowerCase()===recipientIdentityKey.toLowerCase())throw new TypeError("Self-messaging is not allowed.");const expectedConversationId=conversationIdForIdentityKeys(senderIdentityKey,recipientIdentityKey);if(stringField(record,"conversationId")!==expectedConversationId)throw new TypeError("Message conversation ID does not match its participants.");if(!Number.isSafeInteger(maxPlaintextBytes)||maxPlaintextBytes<=0)throw new TypeError("Plaintext maximum must be a positive safe integer.");const text=stringField(record,"text");if(text.trim()==="")throw new TypeError("Message text must not be blank.");if(new TextEncoder().encode(text).byteLength>maxPlaintextBytes)throw new RangeError("Message text exceeds the plaintext maximum.");return record}function assertMessagingIdentityMutationV1(value){const record=strictRecord(value,["version","operation","bapId","walletIdentityKey","messageBoxHost","deployment","canonicalOrigin","network","expectedProfileOutpoint","expectedEvidenceHash","acceptedSequence","projectionVersion","clientOperationId"],"MessagingIdentityMutationV1");if(record.version!==MESSAGING_IDENTITY_MUTATION_VERSION)throw new TypeError("Unsupported messaging identity mutation version.");if(record.operation!=="register"&&record.operation!=="rotate"&&record.operation!=="revoke")throw new TypeError("Unsupported messaging identity operation.");for(const key of["bapId","messageBoxHost","deployment","canonicalOrigin","clientOperationId"])assertNonEmptyString(record[key],key);assertCompressedIdentityKey(stringField(record,"walletIdentityKey"),"wallet identity key");if(record.network!=="mainnet"&&record.network!=="testnet")throw new TypeError("Unsupported messaging network.");assertProfileEvidenceGroup(record);assertHttpsUrl(stringField(record,"messageBoxHost"),"messageBoxHost");assertHttpsUrl(stringField(record,"canonicalOrigin"),"canonicalOrigin");return record}function assertMessagingIdentityV1(value){const record=strictRecord(value,["version","bapId","walletIdentityKey","messageBoxHost","deployment","canonicalOrigin","network","expectedProfileOutpoint","expectedEvidenceHash","acceptedSequence","projectionVersion"],"MessagingIdentityV1");if(record.version!==MESSAGING_IDENTITY_VERSION)throw new TypeError("Unsupported messaging identity version.");for(const key of["bapId","messageBoxHost","deployment","canonicalOrigin"])assertNonEmptyString(record[key],key);assertCompressedIdentityKey(stringField(record,"walletIdentityKey"),"wallet identity key");if(record.network!=="mainnet"&&record.network!=="testnet")throw new TypeError("Unsupported messaging network.");assertProfileEvidenceGroup(record);assertHttpsUrl(stringField(record,"messageBoxHost"),"messageBoxHost");assertHttpsUrl(stringField(record,"canonicalOrigin"),"canonicalOrigin");return record}function assertCompressedIdentityKey(value,field="identity key"){if(!/^(02|03)[0-9a-fA-F]{64}$/.test(value))throw new TypeError(`${field} must be a compressed public key.`)}function strictRecord(value,keys,name){if(!value||typeof value!=="object"||Array.isArray(value))throw new TypeError(`${name} must be an object.`);const record=value;if(Object.keys(record).length!==keys.length||keys.some((key)=>!(key in record)))throw new TypeError(`${name} has unsupported or missing fields.`);return record}function stringField(record,key){const value=record[key];if(typeof value!=="string")throw new TypeError(`${key} must be a string.`);return value}function numberField(record,key){const value=record[key];if(typeof value!=="number"||!Number.isSafeInteger(value))throw new TypeError(`${key} must be a non-negative safe integer.`);return value}function assertProfileEvidenceGroup(record){const fields=[record.expectedProfileOutpoint,record.expectedEvidenceHash,record.acceptedSequence,record.projectionVersion];if(fields.every((value)=>value===null))return;if(fields.some((value)=>value===null))throw new TypeError("Profile evidence must be entirely present or absent.");assertNonEmptyString(record.expectedProfileOutpoint,"expectedProfileOutpoint");assertNonEmptyString(record.expectedEvidenceHash,"expectedEvidenceHash");if(numberField(record,"acceptedSequence")<1)throw new TypeError("acceptedSequence must be positive.");if(numberField(record,"projectionVersion")<0)throw new TypeError("projectionVersion must be non-negative.")}function assertNonEmptyString(value,field){if(typeof value!=="string"||value.trim()==="")throw new TypeError(`${field} must be a non-empty string.`)}function assertHttpsUrl(value,field){try{const parsed=new URL(String(value));if(parsed.protocol!=="https:"||parsed.username||parsed.password||parsed.pathname!=="/"||parsed.search||parsed.hash)throw new Error}catch{throw new TypeError(`${field} must be an HTTPS origin without a path.`)}}function assertCanonicalIsoTimestamp(value,field="timestamp"){if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)||!Number.isFinite(Date.parse(value))||new Date(value).toISOString()!==value)throw new TypeError(`${field} must be a canonical ISO-8601 UTC timestamp.`)}
|
|
3
|
-
export{POST_GEOHASH_MIN_PRECISION,POST_GEOHASH_MAX_PRECISION,POST_GEOHASH_DEFAULT_PRECISION,POST_GEOHASH_PATTERN,encodeGeohash,geohashBounds,MEDIA_RELAY_SAFE_MAX_BYTES,AGENT_MEDIA_MAX_BASE64_LENGTH,AgentMediaError,validAgentMediaInput,inspectAgentMedia,MAPAPP_CATEGORY_TOKENS,MAX_DIRECT_BSV_SEND_SATOSHIS,validateDirectBsvInput,inspectDirectBsvEvidence,MESSAGING_IDENTITY_MUTATION_VERSION,MAPAPP_MESSAGE_VERSION,MAPAPP_MESSAGE_BOX_NAME,MESSAGEBOX_PROTOCOL,MESSAGEBOX_KEY_ID,DEFAULT_MESSAGE_PLAINTEXT_MAX_BYTES,MAPAPP_MESSAGE_ID_MAX_BYTES,serializeMessagingIdentityMutationV1,serializeMapAppMessageV1,conversationIdForIdentityKeys,assertMapAppMessageV1,assertMessagingIdentityV1,assertCompressedIdentityKey,assertCanonicalIsoTimestamp};
|
package/dist/chunk-w3ywvqy2.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import*as z from"zod/v4";var diagnosticSchema=z.object({code:z.string(),remedy:z.string()}).describe("Allow-listed failure code and fixed remedy. Contains no upstream error text, credentials, private paths or message content.");var remedies=new Map;function group(remedy,codes){for(const code of codes)remedies.set(code,remedy)}group("Check the selected tool schema, command options and retained connection metadata. Preserve the original wallet binding.",["participant_configuration_invalid","participant_configuration_too_large","participant_invocation_invalid","participant_tool_not_found","participant_arguments_invalid","participant_arguments_too_large","participant_services_configuration_invalid","participant_wallet_target_invalid","payment_input_invalid","invalid_agent_wallet_connection_configuration","setup_deployment_invalid","setup_state_invalid","invalid_operation_id"]);group("Check retained state and input file paths. Reuse the original wallet or its recovery material; do not replace its root.",["participant_existing_wallet_required","participant_arguments_unavailable","setup_existing_directory_unrecognized","setup_file_invalid","setup_recovery_archive_invalid","restore_operations_invalid","local_intent_database_incompatible"]);group("Wait for the active connection or original operation to settle, then reopen the same state. Do not force an unlock or start a replacement action.",["local_intent_repository_busy","execution_in_progress","participant_closing","read_in_progress"]);group("Verify private-file access, writable storage and free space. Keep original files and keys; do not broaden access or recreate the wallet.",["local_intent_repository_open_failed","local_intent_durability_unavailable","local_intent_namespace_limit","wallet_backup_unavailable"]);group("Check the selected provider, unlock state and app permissions. Keep its expected identity and network; do not substitute a wallet.",["wallet_unauthenticated","permission_denied","read_failed","read_timeout","required_method_missing","invalid_read_response","setup_provider_locked","setup_provider_denied","setup_provider_unavailable","setup_provider_binding_changed","participant_connection_changed","participant_wallet_identity_changed","participant_wallet_network_changed","provider_binding_changed","network_binding_changed","identity_binding_changed","caller_mismatch","setup_deployment_changed","setup_identity_changed","setup_wallet_binding_changed"]);group("Use a new nonexistent destination for a new setup/restore. For recovery, retain the exact root, matching ZIP/binding and a closed checkpointed operation copy.",["restore_requires_new_directory","restore_operations_not_checkpointed","restore_outcome_unknown"]);group("Use the original operationId with this workflow's status/reconcile tools. Preserve original evidence; do not create a replacement spend or message.",["original_intake_unavailable","original_identity_unavailable","original_identity_interrupted","original_sponsor_evidence_unavailable","original_sponsor_or_intake_unavailable","original_sponsor_operation_interrupted","original_operation_interrupted","original_payment_evidence_unavailable","payment_evidence_mismatch","payment_binding_changed","wallet_commit_unverified","wallet_evidence_conflict","recovery_binding_conflict","exact_evidence_invalid","exact_evidence_unavailable","operation_already_started","unresolved_operation","original_identity_attempt_unresolved","operation_not_prepared","participant_operation_unavailable","setup_operation_unavailable","messaging_operation_unavailable","participant_invocation_unavailable","request_cancelled"]);group("The original operation is prepared. Execute that same ID only within user authority; do not create a replacement.",["operation_not_started"]);group("Reuse the existing published identity and check readiness. Do not publish another identity.",["identity_already_published"]);group("Check retained wallet configuration and prerequisite availability. Keep original state; after an uncertain action, use its original operationId with status/reconcile.",["participant_startup_unavailable","participant_setup_unavailable","participant_close_unavailable","participant_prerequisite_unavailable","participant_prerequisite_invalid","identity_sponsor_unavailable","identity_prerequisite_changed","payment_services_unavailable"]);function participantDiagnostic(reason,fallback="participant_operation_unavailable"){const safeFallback=remedies.has(fallback)?fallback:"participant_operation_unavailable";const code=typeof reason==="string"&&remedies.has(reason)?reason:safeFallback;return{code,remedy:remedies.get(code)??remedies.get("participant_operation_unavailable")}}function participantErrorDiagnostic(error,fallback){const value=error&&typeof error==="object"?error:{};const filesystem={ENOENT:"participant_existing_wallet_required",EEXIST:"setup_existing_directory_unrecognized",EACCES:"local_intent_repository_open_failed",EPERM:"local_intent_repository_open_failed",ENOSPC:"local_intent_repository_open_failed"};const code=typeof value.code==="string"&&remedies.has(value.code)?value.code:typeof value.message==="string"&&remedies.has(value.message)?value.message:typeof value.code==="string"&&Object.hasOwn(filesystem,value.code)?filesystem[value.code]:value.name==="SyntaxError"||value.name==="ZodError"?"participant_configuration_invalid":undefined;return participantDiagnostic(code,fallback)}function outcomeDiagnostic(outcome){return outcome.kind==="blocked"||outcome.kind==="recovery_required"?{diagnostic:participantDiagnostic(outcome.reason)}:{}}function silenceParticipantConsole(){const methods=["log","info","warn","error","debug"];const originals=methods.map((method)=>console[method]);for(const method of methods)console[method]=()=>{};return()=>{methods.forEach((method,index)=>{console[method]=originals[index]})}}
|
|
3
|
-
export{diagnosticSchema,participantErrorDiagnostic,outcomeDiagnostic,silenceParticipantConsole};
|
package/dist/chunk-y9q3s55d.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{participantErrorDiagnostic}from"./chunk-w3ywvqy2.js";import"./chunk-btwmey1h.js";import{createReadStream}from"fs";import{Client,InMemoryTransport}from"@modelcontextprotocol/client";class ParticipantInvocationError extends Error{code;constructor(code){super(code);this.code=code}}function readParticipantInvocation(args){const command=args[0];if(command!=="tools"&&command!=="call")return null;const result={command,walletArgs:[]};for(let index=1;index<args.length;index+=2){const key=args[index],value=args[index+1];if(!key||!value||value.startsWith("--"))throw new ParticipantInvocationError("participant_invocation_invalid");if(key==="--tool"){if(result.tool||!/^mapapp_[a-z0-9_]+$/u.test(value))throw new ParticipantInvocationError("participant_invocation_invalid");result.tool=value}else if(key==="--arguments-file"){if(command!=="call"||result.argumentsFile)throw new ParticipantInvocationError("participant_invocation_invalid");result.argumentsFile=value}else result.walletArgs.push(key,value)}if(command==="call"&&!result.tool)throw new ParticipantInvocationError("participant_invocation_invalid");return result}async function readInvocationArguments(filename,maxBytes){if(!filename)return{};const chunks=[];let length=0;try{const input=filename==="-"?process.stdin:createReadStream(filename,{end:maxBytes});for await(const chunk of input){const bytes=Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk);length+=bytes.length;if(length>maxBytes)throw new ParticipantInvocationError("participant_arguments_too_large");chunks.push(bytes)}}catch(error){if(error instanceof ParticipantInvocationError)throw error;throw new ParticipantInvocationError("participant_arguments_unavailable")}try{const value=JSON.parse(new TextDecoder("utf-8",{fatal:true}).decode(Buffer.concat(chunks,length)));if(!value||typeof value!=="object"||Array.isArray(value))throw new Error("not_object");return value}catch{throw new ParticipantInvocationError("participant_arguments_invalid")}}async function invokeParticipant(server,invocation,args={}){const client=new Client({name:"mapapp-participant-command",version:"1"});const[left,right]=InMemoryTransport.createLinkedPair();try{await server.connect(right);await client.connect(left);const listed=await client.listTools();const selected=invocation.tool?listed.tools.find((tool)=>tool.name===invocation.tool):undefined;if(invocation.tool&&!selected)throw new ParticipantInvocationError("participant_tool_not_found");if(invocation.command==="tools")return selected?{tools:[selected]}:{tools:listed.tools.map((tool)=>({name:tool.name,description:tool.description})),next:"Use tools --tool <name> for the selected input/output schemas."};return await client.callTool({name:invocation.tool,arguments:args})}finally{await client.close()}}function invocationFailure(error){const diagnostic=participantErrorDiagnostic(error,"participant_invocation_unavailable");return{isError:true,error:diagnostic,next:"Check tool schemas and retained configuration. After an uncertain action, use its original operationId with status/reconcile. Do not create a replacement."}}export{readParticipantInvocation,readInvocationArguments,invokeParticipant,invocationFailure,ParticipantInvocationError};
|