@vapi-network/sources 0.2.0-dev.2 → 0.2.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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { bazaarSource, mapBazaarItem, type BazaarSourceOptions } from "./bazaar.js";
2
2
  export { localFileSource } from "./local-file.js";
3
- export { findMarketplaceApiByRef, resolveServiceEndpoint, searchMarketplace, vapiRegistrySource, type MarketplaceSearchInput, type MarketplaceSearchOptions, type VapiRegistryConfig, type VapiRegistrySourceOptions, } from "./vapi-registry.js";
3
+ export { findMarketplaceApiByRef, resolveServiceEndpoint, resolveServiceListing, searchMarketplace, vapiRegistrySource, type MarketplaceSearchInput, type MarketplaceSearchOptions, type VapiRegistryConfig, type VapiRegistrySourceOptions, } from "./vapi-registry.js";
4
4
  export { x402scanSource } from "./x402scan.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -19670,6 +19670,143 @@ function date4(params) {
19670
19670
  return _coercedDate(ZodDate, params);
19671
19671
  }
19672
19672
 
19673
+ // ../core/src/marketplace-contracts.ts
19674
+ var MARKETPLACE_DISCOVERY_PROTOCOL = "vapi.marketplace.discovery/1";
19675
+ var MARKETPLACE_RANKING_VERSION = "marketplace-ranking-v1";
19676
+ var MARKETPLACE_KINDS = ["api", "service_offer", "open_request"];
19677
+ var MARKETPLACE_EXECUTION_METHODS = [
19678
+ "GET",
19679
+ "HEAD",
19680
+ "POST",
19681
+ "PUT",
19682
+ "PATCH",
19683
+ "DELETE"
19684
+ ];
19685
+ var marketplaceExecutionMethodSchema = external_exports.enum(MARKETPLACE_EXECUTION_METHODS);
19686
+ var marketplaceKindSchema = external_exports.enum(MARKETPLACE_KINDS);
19687
+ var EXECUTION_MODES = ["direct", "gateway"];
19688
+ var executionModeSchema = external_exports.enum(EXECUTION_MODES);
19689
+ var PROVENANCES = ["indexed", "self_listed", "partner"];
19690
+ var provenanceSchema = external_exports.enum(PROVENANCES);
19691
+ var FIRST_PARTY_PROVENANCES = ["self_listed", "partner"];
19692
+ var firstPartyProvenanceSchema = external_exports.enum(FIRST_PARTY_PROVENANCES);
19693
+ var LISTING_GROUPS = ["vapi", "added", "partner", "external"];
19694
+ var listingGroupSchema = external_exports.enum(LISTING_GROUPS);
19695
+ var listingFeeSchema = external_exports.looseObject({
19696
+ bps: external_exports.number().int().min(0),
19697
+ label: external_exports.string()
19698
+ });
19699
+ var listingDisclosureShape = {
19700
+ group: listingGroupSchema.optional(),
19701
+ fee: listingFeeSchema.optional()
19702
+ };
19703
+ var marketplaceBadgeCodeSchema = external_exports.enum([
19704
+ "live_x402",
19705
+ "partner",
19706
+ "payout_wallet_confirmed",
19707
+ "vapi_verified",
19708
+ "external_catalog",
19709
+ "approved_vendor"
19710
+ ]);
19711
+ var marketplaceBadgeSchema = external_exports.looseObject({
19712
+ code: marketplaceBadgeCodeSchema,
19713
+ label: external_exports.string().trim().min(1).max(80)
19714
+ });
19715
+ var marketplacePublicFactSchema = external_exports.looseObject({
19716
+ label: external_exports.string().trim().min(1).max(80),
19717
+ value: external_exports.string().trim().min(1).max(160)
19718
+ });
19719
+ var marketplaceHrefSchema = external_exports.union([
19720
+ external_exports.string().trim().min(1).max(2048).regex(/^\/(?!\/)/),
19721
+ external_exports.url().max(2048).regex(/^https:\/\//)
19722
+ ]);
19723
+ var marketplaceCardSchema = external_exports.looseObject({
19724
+ title: external_exports.string().trim().min(1).max(160),
19725
+ summary: external_exports.string().trim().min(1).max(1e3),
19726
+ byline: external_exports.string().trim().min(1).max(160).optional(),
19727
+ bylineHref: marketplaceHrefSchema.optional(),
19728
+ badges: external_exports.array(marketplaceBadgeSchema).max(8),
19729
+ facts: external_exports.array(marketplacePublicFactSchema).max(12)
19730
+ });
19731
+ var marketplaceHitBase = {
19732
+ ref: external_exports.string().trim().min(1).max(512),
19733
+ card: marketplaceCardSchema,
19734
+ ...listingDisclosureShape
19735
+ };
19736
+ var invokeApiActionSchema = external_exports.looseObject({
19737
+ type: external_exports.literal("invoke_api"),
19738
+ href: marketplaceHrefSchema
19739
+ });
19740
+ var firstPartyApiMarketplaceHitSchema = external_exports.looseObject({
19741
+ ...marketplaceHitBase,
19742
+ kind: external_exports.literal("api"),
19743
+ provenance: firstPartyProvenanceSchema,
19744
+ execution: external_exports.looseObject({
19745
+ mode: executionModeSchema
19746
+ }),
19747
+ action: invokeApiActionSchema
19748
+ });
19749
+ var mirroredApiMarketplaceHitSchema = external_exports.looseObject({
19750
+ ...marketplaceHitBase,
19751
+ kind: external_exports.literal("api"),
19752
+ provenance: external_exports.literal("indexed"),
19753
+ execution: external_exports.looseObject({
19754
+ mode: external_exports.literal("direct"),
19755
+ url: external_exports.url().max(2048).regex(/^https:\/\/(?![^/?#]*@)/),
19756
+ method: marketplaceExecutionMethodSchema.nullable(),
19757
+ network: external_exports.string().trim().max(160).regex(/^eip155:[1-9]\d*$/)
19758
+ }),
19759
+ action: invokeApiActionSchema
19760
+ });
19761
+ var apiMarketplaceHitSchema = external_exports.discriminatedUnion("provenance", [
19762
+ firstPartyApiMarketplaceHitSchema,
19763
+ mirroredApiMarketplaceHitSchema
19764
+ ]);
19765
+ var serviceOfferMarketplaceHitSchema = external_exports.looseObject({
19766
+ ...marketplaceHitBase,
19767
+ kind: external_exports.literal("service_offer"),
19768
+ action: external_exports.looseObject({
19769
+ type: external_exports.literal("start_engagement"),
19770
+ href: marketplaceHrefSchema
19771
+ })
19772
+ });
19773
+ var openRequestMarketplaceHitSchema = external_exports.looseObject({
19774
+ ...marketplaceHitBase,
19775
+ kind: external_exports.literal("open_request"),
19776
+ action: external_exports.looseObject({
19777
+ type: external_exports.literal("propose_to_request"),
19778
+ href: marketplaceHrefSchema
19779
+ })
19780
+ });
19781
+ var marketplaceHitSchema = external_exports.union([
19782
+ apiMarketplaceHitSchema,
19783
+ serviceOfferMarketplaceHitSchema,
19784
+ openRequestMarketplaceHitSchema
19785
+ ]);
19786
+ var marketplaceDiscoveryInputSchema = external_exports.strictObject({
19787
+ q: external_exports.string().trim().max(200).optional(),
19788
+ kinds: external_exports.array(marketplaceKindSchema).min(1).max(MARKETPLACE_KINDS.length).optional(),
19789
+ network: external_exports.string().trim().min(1).max(160).optional(),
19790
+ cursor: external_exports.string().trim().min(1).max(4096).optional(),
19791
+ limit: external_exports.number().int().min(1).max(50).optional(),
19792
+ includeUnverified: external_exports.boolean().optional()
19793
+ }).superRefine((input2, context) => {
19794
+ if (input2.kinds && new Set(input2.kinds).size !== input2.kinds.length) {
19795
+ context.addIssue({
19796
+ code: "custom",
19797
+ path: ["kinds"],
19798
+ message: "Marketplace kinds must be unique"
19799
+ });
19800
+ }
19801
+ });
19802
+ var marketplaceDiscoveryPageSchema = external_exports.looseObject({
19803
+ protocol: external_exports.literal(MARKETPLACE_DISCOVERY_PROTOCOL),
19804
+ items: external_exports.array(marketplaceHitSchema),
19805
+ nextCursor: external_exports.string().min(1).max(4096).nullable(),
19806
+ unavailableKinds: external_exports.array(marketplaceKindSchema).max(MARKETPLACE_KINDS.length),
19807
+ rankingVersion: external_exports.literal(MARKETPLACE_RANKING_VERSION)
19808
+ });
19809
+
19673
19810
  // ../core/src/call-contracts-wire.ts
19674
19811
  var CALLABLE_CATEGORIES = ["ai", "data", "crypto", "compute", "search"];
19675
19812
  var callableCategorySchema = external_exports.enum(CALLABLE_CATEGORIES);
@@ -19677,7 +19814,7 @@ var DISCOVERY_CATEGORIES = [...CALLABLE_CATEGORIES, "other"];
19677
19814
  var discoveryCategorySchema = external_exports.enum(DISCOVERY_CATEGORIES);
19678
19815
  var CALLABLE_CATEGORY_SET = new Set(CALLABLE_CATEGORIES);
19679
19816
  var serviceTierSchema = external_exports.enum(["listed", "verified", "partner"]);
19680
- var discoveryEndpointSchema = external_exports.strictObject({
19817
+ var discoveryEndpointSchema = external_exports.looseObject({
19681
19818
  name: external_exports.string(),
19682
19819
  method: external_exports.string(),
19683
19820
  url: external_exports.url(),
@@ -19689,7 +19826,7 @@ var discoveryEndpointSchema = external_exports.strictObject({
19689
19826
  responseContentType: external_exports.string().trim().min(1).optional(),
19690
19827
  pathTemplate: external_exports.string().trim().min(1).optional(),
19691
19828
  pathParameters: external_exports.array(external_exports.string().trim().min(1)).optional(),
19692
- payment: external_exports.strictObject({
19829
+ payment: external_exports.looseObject({
19693
19830
  scheme: external_exports.literal("exact"),
19694
19831
  network: external_exports.string().regex(/^eip155:\d+$/),
19695
19832
  asset: external_exports.string().regex(/^0x[0-9a-fA-F]{40}$/),
@@ -19697,19 +19834,20 @@ var discoveryEndpointSchema = external_exports.strictObject({
19697
19834
  checkedAt: external_exports.iso.datetime()
19698
19835
  }).optional()
19699
19836
  });
19700
- var serviceSummarySchema = external_exports.strictObject({
19837
+ var serviceSummarySchema = external_exports.looseObject({
19701
19838
  id: external_exports.string(),
19702
19839
  name: external_exports.string(),
19703
19840
  description: external_exports.string(),
19704
19841
  category: discoveryCategorySchema,
19705
19842
  tier: serviceTierSchema,
19843
+ ...listingDisclosureShape,
19706
19844
  verified: external_exports.boolean(),
19707
19845
  wrapped: external_exports.boolean(),
19708
19846
  price: external_exports.string(),
19709
19847
  networks: external_exports.array(external_exports.string()),
19710
19848
  endpoints: external_exports.array(discoveryEndpointSchema)
19711
19849
  });
19712
- var searchServicesResponseSchema = external_exports.strictObject({
19850
+ var searchServicesResponseSchema = external_exports.looseObject({
19713
19851
  services: external_exports.array(serviceSummarySchema)
19714
19852
  });
19715
19853
  var discoveryResponseSchema = searchServicesResponseSchema;
@@ -19745,19 +19883,21 @@ function parseDiscovery(raw) {
19745
19883
  for (const service of parsed.data.services) {
19746
19884
  buildTargets(service);
19747
19885
  }
19886
+ const resolveListing = (serviceId, endpointName) => {
19887
+ const service = parsed.data.services.find((candidate) => candidate.id === serviceId);
19888
+ if (!service) {
19889
+ throw new DiscoveryCatalogError(
19890
+ "service_not_found",
19891
+ `No payable endpoint found for service ${JSON.stringify(serviceId)}.`,
19892
+ serviceId
19893
+ );
19894
+ }
19895
+ return { service, endpoint: resolveTarget(service, endpointName) };
19896
+ };
19748
19897
  return {
19749
19898
  services: parsed.data.services,
19750
- resolve(serviceId, endpointName) {
19751
- const service = parsed.data.services.find((candidate) => candidate.id === serviceId);
19752
- if (!service) {
19753
- throw new DiscoveryCatalogError(
19754
- "service_not_found",
19755
- `No payable endpoint found for service ${JSON.stringify(serviceId)}.`,
19756
- serviceId
19757
- );
19758
- }
19759
- return resolveTarget(service, endpointName);
19760
- }
19899
+ resolve: (serviceId, endpointName) => resolveListing(serviceId, endpointName).endpoint,
19900
+ resolveListing
19761
19901
  };
19762
19902
  }
19763
19903
  function resolveTarget(service, endpointName) {
@@ -19860,16 +20000,15 @@ function rawServiceId(raw, serviceIndex) {
19860
20000
  return typeof id === "string" ? id : void 0;
19861
20001
  }
19862
20002
 
19863
- // ../core/src/config.ts
19864
- import { homedir } from "node:os";
19865
- import { dirname, join } from "node:path";
19866
-
19867
20003
  // ../../node_modules/.pnpm/viem@2.56.1_typescript@6.0.3_zod@4.5.4/node_modules/viem/_esm/index.js
19868
20004
  init_getAddress();
19869
20005
 
19870
20006
  // ../core/src/x402-networks.ts
19871
20007
  var BASE_MAINNET_CAIP2 = "eip155:8453";
19872
20008
  var ARC_TESTNET_CAIP2 = "eip155:5042002";
20009
+ var SOLANA_MAINNET_CAIP2 = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
20010
+ var X402_SOLANA_MAINNET_CAIP2 = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
20011
+ var SOLANA_MAINNET_USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
19873
20012
  function canonicalIdentity(usdc, eip712Domain) {
19874
20013
  return Object.freeze({
19875
20014
  usdc: getAddress(usdc.toLowerCase()),
@@ -20102,6 +20241,7 @@ function guardError(url2) {
20102
20241
  // ../core/src/networks.ts
20103
20242
  var NETWORKS = {
20104
20243
  [BASE_MAINNET_CAIP2]: {
20244
+ family: "evm",
20105
20245
  chainId: 8453,
20106
20246
  name: "Base mainnet",
20107
20247
  usdc: CANONICAL_X402_USDC_NETWORKS[BASE_MAINNET_CAIP2].usdc,
@@ -20110,11 +20250,28 @@ var NETWORKS = {
20110
20250
  publicRpcUrl: "https://mainnet.base.org"
20111
20251
  },
20112
20252
  [ARC_TESTNET_CAIP2]: {
20253
+ family: "evm",
20113
20254
  chainId: 5042002,
20114
20255
  name: "Arc testnet",
20115
20256
  usdc: CANONICAL_X402_USDC_NETWORKS[ARC_TESTNET_CAIP2].usdc,
20116
20257
  gasToken: "USDC",
20117
20258
  rpcEnv: "ARC_TESTNET_RPC_URL"
20259
+ },
20260
+ [SOLANA_MAINNET_CAIP2]: {
20261
+ family: "svm",
20262
+ name: "Solana mainnet",
20263
+ usdc: SOLANA_MAINNET_USDC,
20264
+ gasToken: "SOL",
20265
+ rpcEnv: "SOLANA_RPC_URL",
20266
+ publicRpcUrl: "https://api.mainnet-beta.solana.com"
20267
+ },
20268
+ [X402_SOLANA_MAINNET_CAIP2]: {
20269
+ family: "svm",
20270
+ name: "Solana mainnet",
20271
+ usdc: SOLANA_MAINNET_USDC,
20272
+ gasToken: "SOL",
20273
+ rpcEnv: "SOLANA_RPC_URL",
20274
+ publicRpcUrl: "https://api.mainnet-beta.solana.com"
20118
20275
  }
20119
20276
  };
20120
20277
  function parseEip155ChainId(network) {
@@ -20128,15 +20285,29 @@ function parseEip155ChainId(network) {
20128
20285
  }
20129
20286
  return chainId;
20130
20287
  }
20288
+ function isSolanaNetwork(network) {
20289
+ return network === SOLANA_MAINNET_CAIP2 || network === X402_SOLANA_MAINNET_CAIP2;
20290
+ }
20291
+ function isSupportedPaymentNetwork(network) {
20292
+ if (isSolanaNetwork(network)) return true;
20293
+ try {
20294
+ parseEip155ChainId(network);
20295
+ return true;
20296
+ } catch {
20297
+ return false;
20298
+ }
20299
+ }
20131
20300
 
20132
20301
  // ../core/src/config.ts
20302
+ import { homedir } from "node:os";
20303
+ import { dirname, join } from "node:path";
20133
20304
  var DEFAULT_REGISTRY_URL = "https://api.vapinetwork.ai";
20134
20305
  var DEFAULT_DISCOVERY_URL = `${DEFAULT_REGISTRY_URL}/api/call/services`;
20135
20306
  var DEFAULT_MARKETPLACE_DISCOVERY_URL = `${DEFAULT_REGISTRY_URL}/api/call/discovery`;
20136
20307
  var DEFAULT_REGISTRY_FALLBACKS = [
20137
20308
  {
20138
- discoveryUrl: "https://console.vapinetwork.ai/api/network/services",
20139
- marketplaceDiscoveryUrl: "https://console.vapinetwork.ai/api/marketplace/discovery"
20309
+ discoveryUrl: "https://console.vapinetwork.ai/api/call/services",
20310
+ marketplaceDiscoveryUrl: "https://console.vapinetwork.ai/api/call/discovery"
20140
20311
  }
20141
20312
  ];
20142
20313
  var atomicString = external_exports.string().regex(/^\d+$/, "Expected non-negative atomic units.");
@@ -20155,20 +20326,14 @@ var configSchema = external_exports.object({
20155
20326
  ).optional(),
20156
20327
  allowPrivateNetwork: external_exports.boolean().default(false).optional(),
20157
20328
  networks: external_exports.record(
20158
- external_exports.string().refine(
20159
- (network) => {
20160
- try {
20161
- parseEip155ChainId(network);
20162
- return true;
20163
- } catch {
20164
- return false;
20165
- }
20166
- },
20167
- { message: "Expected an eip155:<chainId> network identifier." }
20168
- ),
20329
+ external_exports.string().refine((network) => isSupportedPaymentNetwork(network), {
20330
+ message: "Expected a supported eip155:<chainId> or Solana network identifier."
20331
+ }),
20169
20332
  external_exports.object({
20170
20333
  rpcUrl: external_exports.string(),
20171
- usdc: external_exports.string().transform((value) => getAddress(value)),
20334
+ usdc: external_exports.string().trim().min(1),
20335
+ depositUrl: external_exports.url().optional(),
20336
+ depositInstructions: external_exports.string().trim().min(1).max(500).optional(),
20172
20337
  eip712Domain: external_exports.object({
20173
20338
  name: external_exports.string().trim().min(1).max(64),
20174
20339
  version: external_exports.string().trim().min(1).max(32)
@@ -20176,6 +20341,28 @@ var configSchema = external_exports.object({
20176
20341
  })
20177
20342
  ),
20178
20343
  spendCaps: spendCapsSchema
20344
+ }).superRefine((config2, context) => {
20345
+ for (const [network, configured] of Object.entries(config2.networks)) {
20346
+ if (isSolanaNetwork(network)) {
20347
+ if (configured.usdc !== NETWORKS[SOLANA_MAINNET_CAIP2].usdc) {
20348
+ context.addIssue({
20349
+ code: "custom",
20350
+ path: ["networks", network, "usdc"],
20351
+ message: "Expected canonical Solana mainnet USDC mint."
20352
+ });
20353
+ }
20354
+ continue;
20355
+ }
20356
+ try {
20357
+ getAddress(configured.usdc);
20358
+ } catch {
20359
+ context.addIssue({
20360
+ code: "custom",
20361
+ path: ["networks", network, "usdc"],
20362
+ message: "Expected a valid EVM USDC contract address."
20363
+ });
20364
+ }
20365
+ }
20179
20366
  });
20180
20367
  function getVapiPaths(directory = process.env.VAPI_HOME?.trim() || join(homedir(), ".vapi")) {
20181
20368
  return {
@@ -20220,132 +20407,6 @@ async function appendSearchEvent(event, path = getVapiPaths().searches) {
20220
20407
  return parsed;
20221
20408
  }
20222
20409
 
20223
- // ../core/src/marketplace-contracts.ts
20224
- var MARKETPLACE_DISCOVERY_PROTOCOL = "vapi.marketplace.discovery/1";
20225
- var MARKETPLACE_RANKING_VERSION = "marketplace-ranking-v1";
20226
- var MARKETPLACE_KINDS = ["api", "service_offer", "open_request"];
20227
- var MARKETPLACE_EXECUTION_METHODS = [
20228
- "GET",
20229
- "HEAD",
20230
- "POST",
20231
- "PUT",
20232
- "PATCH",
20233
- "DELETE"
20234
- ];
20235
- var marketplaceExecutionMethodSchema = external_exports.enum(MARKETPLACE_EXECUTION_METHODS);
20236
- var marketplaceKindSchema = external_exports.enum(MARKETPLACE_KINDS);
20237
- var EXECUTION_MODES = ["direct", "gateway"];
20238
- var executionModeSchema = external_exports.enum(EXECUTION_MODES);
20239
- var PROVENANCES = ["indexed", "self_listed", "partner"];
20240
- var provenanceSchema = external_exports.enum(PROVENANCES);
20241
- var FIRST_PARTY_PROVENANCES = ["self_listed", "partner"];
20242
- var firstPartyProvenanceSchema = external_exports.enum(FIRST_PARTY_PROVENANCES);
20243
- var marketplaceBadgeCodeSchema = external_exports.enum([
20244
- "live_x402",
20245
- "partner",
20246
- "payout_wallet_confirmed",
20247
- "vapi_verified",
20248
- "external_catalog",
20249
- "approved_vendor"
20250
- ]);
20251
- var marketplaceBadgeSchema = external_exports.strictObject({
20252
- code: marketplaceBadgeCodeSchema,
20253
- label: external_exports.string().trim().min(1).max(80)
20254
- });
20255
- var marketplacePublicFactSchema = external_exports.strictObject({
20256
- label: external_exports.string().trim().min(1).max(80),
20257
- value: external_exports.string().trim().min(1).max(160)
20258
- });
20259
- var marketplaceHrefSchema = external_exports.union([
20260
- external_exports.string().trim().min(1).max(2048).regex(/^\/(?!\/)/),
20261
- external_exports.url().max(2048).regex(/^https:\/\//)
20262
- ]);
20263
- var marketplaceCardSchema = external_exports.strictObject({
20264
- title: external_exports.string().trim().min(1).max(160),
20265
- summary: external_exports.string().trim().min(1).max(1e3),
20266
- byline: external_exports.string().trim().min(1).max(160).optional(),
20267
- bylineHref: marketplaceHrefSchema.optional(),
20268
- badges: external_exports.array(marketplaceBadgeSchema).max(8),
20269
- facts: external_exports.array(marketplacePublicFactSchema).max(12)
20270
- });
20271
- var marketplaceHitBase = {
20272
- ref: external_exports.string().trim().min(1).max(512),
20273
- card: marketplaceCardSchema
20274
- };
20275
- var invokeApiActionSchema = external_exports.strictObject({
20276
- type: external_exports.literal("invoke_api"),
20277
- href: marketplaceHrefSchema
20278
- });
20279
- var firstPartyApiMarketplaceHitSchema = external_exports.strictObject({
20280
- ...marketplaceHitBase,
20281
- kind: external_exports.literal("api"),
20282
- provenance: firstPartyProvenanceSchema,
20283
- execution: external_exports.strictObject({
20284
- mode: executionModeSchema
20285
- }),
20286
- action: invokeApiActionSchema
20287
- });
20288
- var mirroredApiMarketplaceHitSchema = external_exports.strictObject({
20289
- ...marketplaceHitBase,
20290
- kind: external_exports.literal("api"),
20291
- provenance: external_exports.literal("indexed"),
20292
- execution: external_exports.strictObject({
20293
- mode: external_exports.literal("direct"),
20294
- url: external_exports.url().max(2048).regex(/^https:\/\/(?![^/?#]*@)/),
20295
- method: marketplaceExecutionMethodSchema.nullable(),
20296
- network: external_exports.string().trim().max(160).regex(/^eip155:[1-9]\d*$/)
20297
- }),
20298
- action: invokeApiActionSchema
20299
- });
20300
- var apiMarketplaceHitSchema = external_exports.discriminatedUnion("provenance", [
20301
- firstPartyApiMarketplaceHitSchema,
20302
- mirroredApiMarketplaceHitSchema
20303
- ]);
20304
- var serviceOfferMarketplaceHitSchema = external_exports.strictObject({
20305
- ...marketplaceHitBase,
20306
- kind: external_exports.literal("service_offer"),
20307
- action: external_exports.strictObject({
20308
- type: external_exports.literal("start_engagement"),
20309
- href: marketplaceHrefSchema
20310
- })
20311
- });
20312
- var openRequestMarketplaceHitSchema = external_exports.strictObject({
20313
- ...marketplaceHitBase,
20314
- kind: external_exports.literal("open_request"),
20315
- action: external_exports.strictObject({
20316
- type: external_exports.literal("propose_to_request"),
20317
- href: marketplaceHrefSchema
20318
- })
20319
- });
20320
- var marketplaceHitSchema = external_exports.union([
20321
- apiMarketplaceHitSchema,
20322
- serviceOfferMarketplaceHitSchema,
20323
- openRequestMarketplaceHitSchema
20324
- ]);
20325
- var marketplaceDiscoveryInputSchema = external_exports.strictObject({
20326
- q: external_exports.string().trim().max(200).optional(),
20327
- kinds: external_exports.array(marketplaceKindSchema).min(1).max(MARKETPLACE_KINDS.length).optional(),
20328
- network: external_exports.string().trim().min(1).max(160).optional(),
20329
- cursor: external_exports.string().trim().min(1).max(4096).optional(),
20330
- limit: external_exports.number().int().min(1).max(50).optional(),
20331
- includeUnverified: external_exports.boolean().optional()
20332
- }).superRefine((input2, context) => {
20333
- if (input2.kinds && new Set(input2.kinds).size !== input2.kinds.length) {
20334
- context.addIssue({
20335
- code: "custom",
20336
- path: ["kinds"],
20337
- message: "Marketplace kinds must be unique"
20338
- });
20339
- }
20340
- });
20341
- var marketplaceDiscoveryPageSchema = external_exports.strictObject({
20342
- protocol: external_exports.literal(MARKETPLACE_DISCOVERY_PROTOCOL),
20343
- items: external_exports.array(marketplaceHitSchema),
20344
- nextCursor: external_exports.string().min(1).max(4096).nullable(),
20345
- unavailableKinds: external_exports.array(marketplaceKindSchema).max(MARKETPLACE_KINDS.length),
20346
- rankingVersion: external_exports.literal(MARKETPLACE_RANKING_VERSION)
20347
- });
20348
-
20349
20410
  // src/common.ts
20350
20411
  function sourceFetch(options) {
20351
20412
  return options.fetch ?? createPublicFetch({
@@ -20650,8 +20711,11 @@ async function searchMarketplace(input2, config2, fetchImpl, options = {}) {
20650
20711
  }
20651
20712
  }
20652
20713
  async function resolveServiceEndpoint(id, config2, fetchImpl, endpointName) {
20714
+ return (await resolveServiceListing(id, config2, fetchImpl, endpointName)).endpoint;
20715
+ }
20716
+ async function resolveServiceListing(id, config2, fetchImpl, endpointName) {
20653
20717
  const request = fetchImpl ?? createPublicFetch({ allowPrivateNetwork: config2.allowPrivateNetwork ?? false });
20654
- return (await fetchCallsDiscovery(id, config2, request)).resolve(id, endpointName);
20718
+ return (await fetchCallsDiscovery(id, config2, request)).resolveListing(id, endpointName);
20655
20719
  }
20656
20720
  async function findMarketplaceApiByRef(ref, config2, fetchImpl) {
20657
20721
  const page = await searchMarketplace(
@@ -20779,11 +20843,19 @@ function endpointListing(endpoint, ref, config2, metadata = {}) {
20779
20843
  provenance: [{ source: "vapi", sourceUrl: config2.marketplaceDiscoveryUrl, ref }]
20780
20844
  };
20781
20845
  }
20846
+ var REGISTRY_ENDPOINT_PATHS = [
20847
+ "/api/call/discovery",
20848
+ "/api/call/services",
20849
+ "/api/marketplace/discovery",
20850
+ "/api/network/services"
20851
+ ];
20782
20852
  function registryConfig(baseUrl, discoveryUrl, allowPrivateNetwork) {
20783
20853
  const supplied = new URL(baseUrl);
20784
20854
  const path = supplied.pathname.replace(/\/+$/, "");
20785
- const marketplaceDiscoveryUrl = path.endsWith("/api/marketplace/discovery") ? supplied.href : path.endsWith("/api/network/services") ? replacePath(supplied, "/api/network/services", "/api/marketplace/discovery").href : path.endsWith("/api/call/discovery") ? supplied.href : path.endsWith("/api/call/services") ? replacePath(supplied, "/api/call/services", "/api/call/discovery").href : appendPath(supplied.href, "api/call/discovery").href;
20786
- const callsDiscoveryUrl = discoveryUrl ?? (path.endsWith("/api/marketplace/discovery") ? replacePath(supplied, "/api/marketplace/discovery", "/api/network/services").href : path.endsWith("/api/network/services") ? supplied.href : path.endsWith("/api/call/discovery") ? replacePath(supplied, "/api/call/discovery", "/api/call/services").href : path.endsWith("/api/call/services") ? supplied.href : appendPath(supplied.href, "api/call/services").href);
20855
+ const endpoint = REGISTRY_ENDPOINT_PATHS.find((candidate) => path.endsWith(candidate));
20856
+ const canonical = (target) => endpoint ? replacePath(supplied, endpoint, target).href : appendPath(supplied.href, target).href;
20857
+ const marketplaceDiscoveryUrl = canonical("/api/call/discovery");
20858
+ const callsDiscoveryUrl = discoveryUrl ?? canonical("/api/call/services");
20787
20859
  return {
20788
20860
  marketplaceDiscoveryUrl,
20789
20861
  discoveryUrl: callsDiscoveryUrl,
@@ -20894,6 +20966,7 @@ export {
20894
20966
  localFileSource,
20895
20967
  mapBazaarItem,
20896
20968
  resolveServiceEndpoint,
20969
+ resolveServiceListing,
20897
20970
  searchMarketplace,
20898
20971
  vapiRegistrySource,
20899
20972
  x402scanSource