@hashgraphonline/standards-sdk 0.1.176 → 0.1.178

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.
Files changed (151) hide show
  1. package/dist/browser/hcs-11/client.d.ts +30 -30
  2. package/dist/browser/hcs-21/types.d.ts +23 -23
  3. package/dist/browser/inscribe/inscriber.d.ts.map +1 -1
  4. package/dist/browser/services/registry-broker/client/base-client.d.ts +19 -4
  5. package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
  6. package/dist/browser/services/registry-broker/client/credits.d.ts +6 -1
  7. package/dist/browser/services/registry-broker/client/credits.d.ts.map +1 -1
  8. package/dist/browser/services/registry-broker/client/guard.d.ts +10 -0
  9. package/dist/browser/services/registry-broker/client/guard.d.ts.map +1 -0
  10. package/dist/browser/services/registry-broker/client/skills.d.ts +5 -3
  11. package/dist/browser/services/registry-broker/client/skills.d.ts.map +1 -1
  12. package/dist/browser/services/registry-broker/schemas.d.ts +7631 -24215
  13. package/dist/browser/services/registry-broker/schemas.d.ts.map +1 -1
  14. package/dist/browser/services/registry-broker/types.d.ts +64 -26
  15. package/dist/browser/services/registry-broker/types.d.ts.map +1 -1
  16. package/dist/browser/standards-sdk.browser.js +381 -225
  17. package/dist/browser/standards-sdk.browser.js.map +1 -1
  18. package/dist/browser/utils/dynamic-import.d.ts.map +1 -1
  19. package/dist/browser-root/hcs-11/client.d.ts +30 -30
  20. package/dist/browser-root/hcs-21/types.d.ts +23 -23
  21. package/dist/browser-root/inscribe/inscriber.d.ts.map +1 -1
  22. package/dist/browser-root/services/registry-broker/client/base-client.d.ts +19 -4
  23. package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
  24. package/dist/browser-root/services/registry-broker/client/credits.d.ts +6 -1
  25. package/dist/browser-root/services/registry-broker/client/credits.d.ts.map +1 -1
  26. package/dist/browser-root/services/registry-broker/client/guard.d.ts +10 -0
  27. package/dist/browser-root/services/registry-broker/client/guard.d.ts.map +1 -0
  28. package/dist/browser-root/services/registry-broker/client/skills.d.ts +5 -3
  29. package/dist/browser-root/services/registry-broker/client/skills.d.ts.map +1 -1
  30. package/dist/browser-root/services/registry-broker/schemas.d.ts +7631 -24215
  31. package/dist/browser-root/services/registry-broker/schemas.d.ts.map +1 -1
  32. package/dist/browser-root/services/registry-broker/types.d.ts +64 -26
  33. package/dist/browser-root/services/registry-broker/types.d.ts.map +1 -1
  34. package/dist/browser-root/standards-sdk.root-browser.js +699 -397
  35. package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
  36. package/dist/browser-root/utils/dynamic-import.d.ts.map +1 -1
  37. package/dist/cjs/hcs-11/client.d.ts +30 -30
  38. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  39. package/dist/cjs/services/registry-broker/client/base-client.d.ts +19 -4
  40. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  41. package/dist/cjs/services/registry-broker/client/credits.d.ts +6 -1
  42. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
  43. package/dist/cjs/services/registry-broker/client/guard.d.ts +10 -0
  44. package/dist/cjs/services/registry-broker/client/guard.d.ts.map +1 -0
  45. package/dist/cjs/services/registry-broker/client/skills.d.ts +5 -3
  46. package/dist/cjs/services/registry-broker/client/skills.d.ts.map +1 -1
  47. package/dist/cjs/services/registry-broker/schemas.d.ts +7612 -24196
  48. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  49. package/dist/cjs/services/registry-broker/types.d.ts +64 -26
  50. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  51. package/dist/cjs/standards-sdk.cjs +2 -2
  52. package/dist/cjs/standards-sdk.cjs.map +1 -1
  53. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  54. package/dist/es/hcs-11/client.d.ts +30 -30
  55. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  56. package/dist/es/services/registry-broker/client/base-client.d.ts +19 -4
  57. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  58. package/dist/es/services/registry-broker/client/credits.d.ts +6 -1
  59. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
  60. package/dist/es/services/registry-broker/client/guard.d.ts +10 -0
  61. package/dist/es/services/registry-broker/client/guard.d.ts.map +1 -0
  62. package/dist/es/services/registry-broker/client/skills.d.ts +5 -3
  63. package/dist/es/services/registry-broker/client/skills.d.ts.map +1 -1
  64. package/dist/es/services/registry-broker/schemas.d.ts +7612 -24196
  65. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  66. package/dist/es/services/registry-broker/types.d.ts +64 -26
  67. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  68. package/dist/es/standards-sdk.es116.js +1 -1
  69. package/dist/es/standards-sdk.es121.js +1 -1
  70. package/dist/es/standards-sdk.es127.js +1 -1
  71. package/dist/es/standards-sdk.es128.js +5 -5
  72. package/dist/es/standards-sdk.es138.js +1 -1
  73. package/dist/es/standards-sdk.es139.js +1 -1
  74. package/dist/es/standards-sdk.es140.js +5 -5
  75. package/dist/es/standards-sdk.es142.js +9 -6
  76. package/dist/es/standards-sdk.es142.js.map +1 -1
  77. package/dist/es/standards-sdk.es143.js +1 -1
  78. package/dist/es/standards-sdk.es145.js +63 -15
  79. package/dist/es/standards-sdk.es145.js.map +1 -1
  80. package/dist/es/standards-sdk.es147.js +2 -2
  81. package/dist/es/standards-sdk.es148.js +1 -1
  82. package/dist/es/standards-sdk.es16.js +1 -1
  83. package/dist/es/standards-sdk.es160.js +12461 -1778
  84. package/dist/es/standards-sdk.es160.js.map +1 -1
  85. package/dist/es/standards-sdk.es161.js +1936 -12461
  86. package/dist/es/standards-sdk.es161.js.map +1 -1
  87. package/dist/es/standards-sdk.es162.js +54 -15
  88. package/dist/es/standards-sdk.es162.js.map +1 -1
  89. package/dist/es/standards-sdk.es163.js +102 -47
  90. package/dist/es/standards-sdk.es163.js.map +1 -1
  91. package/dist/es/standards-sdk.es164.js +65 -88
  92. package/dist/es/standards-sdk.es164.js.map +1 -1
  93. package/dist/es/standards-sdk.es165.js +180 -61
  94. package/dist/es/standards-sdk.es165.js.map +1 -1
  95. package/dist/es/standards-sdk.es166.js +14 -197
  96. package/dist/es/standards-sdk.es166.js.map +1 -1
  97. package/dist/es/standards-sdk.es167.js +68 -707
  98. package/dist/es/standards-sdk.es167.js.map +1 -1
  99. package/dist/es/standards-sdk.es168.js +165 -66
  100. package/dist/es/standards-sdk.es168.js.map +1 -1
  101. package/dist/es/standards-sdk.es169.js +289 -139
  102. package/dist/es/standards-sdk.es169.js.map +1 -1
  103. package/dist/es/standards-sdk.es170.js +298 -274
  104. package/dist/es/standards-sdk.es170.js.map +1 -1
  105. package/dist/es/standards-sdk.es171.js +369 -262
  106. package/dist/es/standards-sdk.es171.js.map +1 -1
  107. package/dist/es/standards-sdk.es172.js +194 -316
  108. package/dist/es/standards-sdk.es172.js.map +1 -1
  109. package/dist/es/standards-sdk.es173.js +64 -319
  110. package/dist/es/standards-sdk.es173.js.map +1 -1
  111. package/dist/es/standards-sdk.es174.js +664 -68
  112. package/dist/es/standards-sdk.es174.js.map +1 -1
  113. package/dist/es/standards-sdk.es175.js +1 -1
  114. package/dist/es/standards-sdk.es176.js +2 -2
  115. package/dist/es/standards-sdk.es178.js +2 -2
  116. package/dist/es/standards-sdk.es179.js +2 -2
  117. package/dist/es/standards-sdk.es18.js +2 -2
  118. package/dist/es/standards-sdk.es180.js +1 -1
  119. package/dist/es/standards-sdk.es181.js +61 -3
  120. package/dist/es/standards-sdk.es181.js.map +1 -1
  121. package/dist/es/standards-sdk.es182.js +80 -168
  122. package/dist/es/standards-sdk.es182.js.map +1 -1
  123. package/dist/es/standards-sdk.es183.js +156 -206
  124. package/dist/es/standards-sdk.es183.js.map +1 -1
  125. package/dist/es/standards-sdk.es184.js +219 -223
  126. package/dist/es/standards-sdk.es184.js.map +1 -1
  127. package/dist/es/standards-sdk.es185.js +242 -0
  128. package/dist/es/standards-sdk.es185.js.map +1 -0
  129. package/dist/es/standards-sdk.es19.js +2 -2
  130. package/dist/es/standards-sdk.es27.js +2 -2
  131. package/dist/es/standards-sdk.es30.js +1 -1
  132. package/dist/es/standards-sdk.es31.js +1 -1
  133. package/dist/es/standards-sdk.es35.js +2 -2
  134. package/dist/es/standards-sdk.es36.js +1 -1
  135. package/dist/es/standards-sdk.es37.js +1 -1
  136. package/dist/es/standards-sdk.es56.js +1 -1
  137. package/dist/es/standards-sdk.es59.js +1 -1
  138. package/dist/es/standards-sdk.es60.js +1 -1
  139. package/dist/es/standards-sdk.es62.js +1 -1
  140. package/dist/es/standards-sdk.es63.js +2 -2
  141. package/dist/es/standards-sdk.es64.js +1 -1
  142. package/dist/es/standards-sdk.es65.js +1 -1
  143. package/dist/es/standards-sdk.es66.js +1 -1
  144. package/dist/es/standards-sdk.es67.js +1 -1
  145. package/dist/es/standards-sdk.es69.js +1 -1
  146. package/dist/es/standards-sdk.es71.js +1 -1
  147. package/dist/es/standards-sdk.es72.js +1 -1
  148. package/dist/es/standards-sdk.es75.js +1 -1
  149. package/dist/es/standards-sdk.es84.js +1 -1
  150. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  151. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es174.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Transaction } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n\n/**\n * Extract TransactionBody from Transaction object using protobuf parsing\n * This replaces fragile constructor name checking with reliable protobuf data\n */\nexport function extractTransactionBody(\n transaction: Transaction,\n): proto.ITransactionBody | null {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (!bytes) {\n return null;\n }\n\n const decoded = proto.TransactionList.decode(bytes);\n if (!decoded.transactionList || decoded.transactionList.length === 0) {\n return null;\n }\n\n const tx = decoded.transactionList[0];\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n return proto.TransactionBody.decode(tx.bodyBytes);\n }\n\n if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n return proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if transaction has specific transaction type using protobuf data\n * This replaces constructor name checking with reliable protobuf field detection\n */\nexport function hasTransactionType(\n transaction: Transaction,\n transactionField: keyof proto.ITransactionBody,\n): boolean {\n const txBody = extractTransactionBody(transaction);\n return !!(txBody && txBody[transactionField]);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SACd,KACoB;AACpB,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,YAAY;AAClB,WAAO,eAAe,IAAI;AAAA,MACxB,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,eAAe;AAAA,IAAA,EAC9B,UAAU;AAAA,EACd;AACA,MAAI,IAAI,SAAS;AACf,WAAO,YAAY,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7D;AACA,MAAI,IAAI,gBAAgB;AACtB,WAAO,oBAAoB,OAAO,KAAK,IAAI,cAAc,EAAE;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AACA,MAAI,KAAK,SAAS,MAAM,SAAS,GAAG;AAClC,UAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EAAE,OAAO,OAAO;AAClE,WAAO,YAAY,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,EAC3D;AACA,MAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,UAAM,OAAO,IAAI,aAAa,KAAK,KAChC,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EACpB,OAAO,OAAO;AACjB,WAAO,iBAAiB,IAAI,aAAa,SAAS,OAChD,KAAK,MACP,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACxB;AACA,MAAI,IAAI,uBAAuB;AAC7B,WAAO,0BAA0B,IAAI;AAAA,MACnC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,eAAe;AAAA,IAAA,EACzC,UAAU;AAAA,EACd;AACA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,uBACd,aAC+B;AAC/B,MAAI;AACF,UAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,QAAI,CAAC,QAAQ,mBAAmB,QAAQ,gBAAgB,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,QAAQ,gBAAgB,CAAC;AAEpC,QAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,aAAO,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,IAClD;AAEA,QAAI,GAAG,0BAA0B,GAAG,uBAAuB,SAAS,GAAG;AACrE,YAAM,WAAW,MAAM,kBAAkB;AAAA,QACvC,GAAG;AAAA,MAAA;AAEL,UAAI,SAAS,WAAW;AACtB,eAAO,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAMO,SAAS,mBACd,aACA,kBACS;AACT,QAAM,SAAS,uBAAuB,WAAW;AACjD,SAAO,CAAC,EAAE,UAAU,OAAO,gBAAgB;AAC7C;"}
1
+ {"version":3,"file":"standards-sdk.es174.js","sources":["../../src/services/registry-broker/client/skills.ts"],"sourcesContent":["import type {\n JsonValue,\n SkillBadgeQuery,\n SkillBadgeResponse,\n SkillCatalogQueryOptions,\n SkillCatalogResponse,\n SkillDeprecationRecord,\n SkillDeprecationSetRequest,\n SkillDeprecationsResponse,\n SkillListOptions,\n SkillRecommendedVersionResponse,\n SkillRecommendedVersionSetRequest,\n SkillRegistryConfigResponse,\n SkillRegistryCategoriesResponse,\n SkillRegistryJobStatusResponse,\n SkillRegistryListResponse,\n SkillRegistryMineResponse,\n SkillRegistryMyListResponse,\n SkillRegistryOwnershipResponse,\n SkillRegistryPublishRequest,\n SkillRegistryPublishResponse,\n SkillRegistryQuoteRequest,\n SkillRegistryQuoteResponse,\n SkillQuotePreviewRequest,\n SkillQuotePreviewResponse,\n SkillRegistryTagsResponse,\n SkillRegistryVoteRequest,\n SkillRegistryVoteStatusResponse,\n SkillStatusRequest,\n SkillStatusResponse,\n SkillPreviewLookupRequest,\n SkillPreviewByRepoRequest,\n SkillPreviewLookupResponse,\n SkillPreviewRecord,\n SkillConversionSignalsResponse,\n UploadSkillPreviewFromGithubOidcRequest,\n SkillInstallResponse,\n SkillInstallCopyTelemetryRequest,\n SkillInstallCopyTelemetryResponse,\n SkillResolverManifestResponse,\n SkillRegistryVersionsResponse,\n SkillSecurityBreakdownRequest,\n SkillSecurityBreakdownResponse,\n SkillVerificationDomainProofChallengeRequest,\n SkillVerificationDomainProofChallengeResponse,\n SkillVerificationDomainProofVerifyRequest,\n SkillVerificationDomainProofVerifyResponse,\n SkillVerificationRequestCreateRequest,\n SkillVerificationRequestCreateResponse,\n SkillVerificationStatusResponse,\n} from '../types';\nimport {\n skillBadgeResponseSchema,\n skillCatalogResponseSchema,\n skillDeprecationRecordSchema,\n skillDeprecationsResponseSchema,\n skillRecommendedVersionResponseSchema,\n skillRegistryConfigResponseSchema,\n skillRegistryCategoriesResponseSchema,\n skillRegistryJobStatusResponseSchema,\n skillRegistryListResponseSchema,\n skillRegistryMineResponseSchema,\n skillRegistryMyListResponseSchema,\n skillRegistryOwnershipResponseSchema,\n skillRegistryPublishResponseSchema,\n skillRegistryQuoteResponseSchema,\n skillQuotePreviewResponseSchema,\n skillConversionSignalsResponseSchema,\n skillRegistryTagsResponseSchema,\n skillRegistryVoteStatusResponseSchema,\n skillStatusResponseSchema,\n skillPreviewLookupResponseSchema,\n skillPreviewRecordSchema,\n skillInstallResponseSchema,\n skillInstallCopyTelemetryResponseSchema,\n skillSecurityBreakdownResponseSchema,\n skillResolverManifestResponseSchema,\n skillVerificationDomainProofChallengeResponseSchema,\n skillVerificationDomainProofVerifyResponseSchema,\n skillRegistryVersionsResponseSchema,\n skillVerificationRequestCreateResponseSchema,\n skillVerificationStatusResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nfunction requireTrimmedString(value: string, fieldName: string): string {\n const normalizedValue = value.trim();\n if (!normalizedValue) {\n throw new Error(`${fieldName} is required`);\n }\n return normalizedValue;\n}\n\nexport async function skillsConfig(\n client: RegistryBrokerClient,\n): Promise<SkillRegistryConfigResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/config', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n skillRegistryConfigResponseSchema,\n 'skill registry config response',\n );\n}\n\nexport async function listSkills(\n client: RegistryBrokerClient,\n params: SkillListOptions = {},\n): Promise<SkillRegistryListResponse> {\n const query = new URLSearchParams();\n if (params.name) {\n query.set('name', params.name);\n }\n if (params.version) {\n query.set('version', params.version);\n }\n if (typeof params.limit === 'number' && Number.isFinite(params.limit)) {\n query.set('limit', String(Math.trunc(params.limit)));\n }\n if (params.cursor) {\n query.set('cursor', params.cursor);\n }\n if (typeof params.includeFiles === 'boolean') {\n query.set('includeFiles', params.includeFiles ? 'true' : 'false');\n }\n if (params.accountId) {\n query.set('accountId', params.accountId);\n }\n if (params.q) {\n query.set('q', params.q);\n }\n if (params.tag) {\n query.set('tag', params.tag);\n }\n if (params.category) {\n query.set('category', params.category);\n }\n if (typeof params.featured === 'boolean') {\n query.set('featured', params.featured ? 'true' : 'false');\n }\n if (typeof params.verified === 'boolean') {\n query.set('verified', params.verified ? 'true' : 'false');\n }\n if (params.view) {\n query.set('view', params.view);\n }\n\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n\n const raw = await client.requestJson<JsonValue>(`/skills${suffix}`, {\n method: 'GET',\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryListResponseSchema,\n 'skill registry list response',\n );\n}\n\nexport async function getSkillSecurityBreakdown(\n client: RegistryBrokerClient,\n params: SkillSecurityBreakdownRequest,\n): Promise<SkillSecurityBreakdownResponse> {\n const normalizedJobId = requireTrimmedString(params.jobId, 'jobId');\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/${encodeURIComponent(normalizedJobId)}/security-breakdown`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillSecurityBreakdownResponseSchema,\n 'skill security breakdown response',\n );\n}\n\nexport async function getSkillsCatalog(\n client: RegistryBrokerClient,\n params: SkillCatalogQueryOptions = {},\n): Promise<SkillCatalogResponse> {\n const query = new URLSearchParams();\n if (params.q) {\n query.set('q', params.q);\n }\n if (params.category) {\n query.set('category', params.category);\n }\n params.tags?.forEach(tag => {\n if (tag.trim()) {\n query.append('tag', tag.trim());\n }\n });\n if (typeof params.featured === 'boolean') {\n query.set('featured', params.featured ? 'true' : 'false');\n }\n if (typeof params.verified === 'boolean') {\n query.set('verified', params.verified ? 'true' : 'false');\n }\n if (params.channel) {\n query.set('channel', params.channel);\n }\n if (params.sortBy) {\n query.set('sortBy', params.sortBy);\n }\n if (typeof params.limit === 'number' && Number.isFinite(params.limit)) {\n query.set('limit', String(Math.trunc(params.limit)));\n }\n if (params.cursor) {\n query.set('cursor', params.cursor);\n }\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n\n const raw = await client.requestJson<JsonValue>(`/skills/catalog${suffix}`, {\n method: 'GET',\n });\n\n return client.parseWithSchema(\n raw,\n skillCatalogResponseSchema,\n 'skill catalog response',\n );\n}\n\nexport async function listSkillVersions(\n client: RegistryBrokerClient,\n params: { name: string },\n): Promise<SkillRegistryVersionsResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/versions?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillRegistryVersionsResponseSchema,\n 'skill registry versions response',\n );\n}\n\nexport async function listMySkills(\n client: RegistryBrokerClient,\n params: { limit?: number } = {},\n): Promise<SkillRegistryMineResponse> {\n const query = new URLSearchParams();\n if (typeof params.limit === 'number' && Number.isFinite(params.limit)) {\n query.set('limit', String(Math.trunc(params.limit)));\n }\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n\n const raw = await client.requestJson<JsonValue>(`/skills/mine${suffix}`, {\n method: 'GET',\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryMineResponseSchema,\n 'skill registry mine response',\n );\n}\n\nexport async function getMySkillsList(\n client: RegistryBrokerClient,\n params: { limit?: number; cursor?: string; accountId?: string } = {},\n): Promise<SkillRegistryMyListResponse> {\n const query = new URLSearchParams();\n if (typeof params.limit === 'number' && Number.isFinite(params.limit)) {\n query.set('limit', String(Math.trunc(params.limit)));\n }\n if (params.cursor) {\n query.set('cursor', params.cursor);\n }\n if (params.accountId) {\n query.set('accountId', params.accountId);\n }\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n\n const raw = await client.requestJson<JsonValue>(`/skills/my-list${suffix}`, {\n method: 'GET',\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryMyListResponseSchema,\n 'skill registry my list response',\n );\n}\n\nexport async function quoteSkillPublish(\n client: RegistryBrokerClient,\n payload: SkillRegistryQuoteRequest,\n): Promise<SkillRegistryQuoteResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/quote', {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryQuoteResponseSchema,\n 'skill registry quote response',\n );\n}\n\nexport async function quoteSkillPublishPreview(\n client: RegistryBrokerClient,\n payload: SkillQuotePreviewRequest,\n): Promise<SkillQuotePreviewResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/quote-preview', {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n skillQuotePreviewResponseSchema,\n 'skill quote preview response',\n );\n}\n\nexport async function publishSkill(\n client: RegistryBrokerClient,\n payload: SkillRegistryPublishRequest,\n): Promise<SkillRegistryPublishResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/publish', {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryPublishResponseSchema,\n 'skill registry publish response',\n );\n}\n\nexport async function getSkillPublishJob(\n client: RegistryBrokerClient,\n jobId: string,\n params: { accountId?: string } = {},\n): Promise<SkillRegistryJobStatusResponse> {\n const normalized = requireTrimmedString(jobId, 'jobId');\n\n const query = new URLSearchParams();\n if (params.accountId) {\n query.set('accountId', params.accountId);\n }\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/jobs/${encodeURIComponent(normalized)}${suffix}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillRegistryJobStatusResponseSchema,\n 'skill registry job status response',\n );\n}\n\nexport async function getSkillOwnership(\n client: RegistryBrokerClient,\n params: { name: string; accountId?: string },\n): Promise<SkillRegistryOwnershipResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n if (params.accountId) {\n query.set('accountId', params.accountId);\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/ownership?${query.toString()}`,\n {\n method: 'GET',\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillRegistryOwnershipResponseSchema,\n 'skill registry ownership response',\n );\n}\n\nexport async function getRecommendedSkillVersion(\n client: RegistryBrokerClient,\n params: { name: string },\n): Promise<SkillRecommendedVersionResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n const raw = await client.requestJson<JsonValue>(\n `/skills/recommended?${query.toString()}`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n skillRecommendedVersionResponseSchema,\n 'skill recommended version response',\n );\n}\n\nexport async function setRecommendedSkillVersion(\n client: RegistryBrokerClient,\n payload: SkillRecommendedVersionSetRequest,\n): Promise<SkillRecommendedVersionResponse> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n const normalizedVersion = requireTrimmedString(payload.version, 'version');\n const raw = await client.requestJson<JsonValue>('/skills/recommended', {\n method: 'POST',\n body: {\n name: normalizedName,\n version: normalizedVersion,\n },\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n skillRecommendedVersionResponseSchema,\n 'skill recommended version response',\n );\n}\n\nexport async function getSkillDeprecations(\n client: RegistryBrokerClient,\n params: { name: string },\n): Promise<SkillDeprecationsResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n const raw = await client.requestJson<JsonValue>(\n `/skills/deprecations?${query.toString()}`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n skillDeprecationsResponseSchema,\n 'skill deprecations response',\n );\n}\n\nexport async function setSkillDeprecation(\n client: RegistryBrokerClient,\n payload: SkillDeprecationSetRequest,\n): Promise<SkillDeprecationRecord> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n const version = payload.version?.trim();\n const reason = requireTrimmedString(payload.reason, 'reason');\n const replacementRef = payload.replacementRef?.trim();\n const raw = await client.requestJson<JsonValue>('/skills/deprecate', {\n method: 'POST',\n body: {\n name: normalizedName,\n version,\n reason,\n replacementRef,\n },\n headers: { 'content-type': 'application/json' },\n });\n return client.parseWithSchema(\n raw,\n skillDeprecationRecordSchema,\n 'skill deprecation response',\n );\n}\n\nexport async function getSkillBadge(\n client: RegistryBrokerClient,\n params: SkillBadgeQuery,\n): Promise<SkillBadgeResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n if (params.metric) {\n query.set('metric', params.metric);\n }\n if (params.label?.trim()) {\n query.set('label', params.label.trim());\n }\n if (params.style) {\n query.set('style', params.style);\n }\n const raw = await client.requestJson<JsonValue>(\n `/skills/badge?${query.toString()}`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n skillBadgeResponseSchema,\n 'skill badge response',\n );\n}\n\nexport async function getSkillStatus(\n client: RegistryBrokerClient,\n params: SkillStatusRequest,\n): Promise<SkillStatusResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n if (params.version?.trim()) {\n query.set('version', params.version.trim());\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/status?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillStatusResponseSchema,\n 'skill status response',\n );\n}\n\nexport async function getSkillStatusByRepo(\n client: RegistryBrokerClient,\n params: SkillPreviewByRepoRequest,\n): Promise<SkillStatusResponse> {\n const repo = requireTrimmedString(params.repo, 'repo');\n const skillDir = requireTrimmedString(params.skillDir, 'skillDir');\n\n const query = new URLSearchParams();\n query.set('repo', repo);\n query.set('skillDir', skillDir);\n if (params.ref?.trim()) {\n query.set('ref', params.ref.trim());\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/status/by-repo?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillStatusResponseSchema,\n 'skill status response',\n );\n}\n\nexport async function getSkillConversionSignalsByRepo(\n client: RegistryBrokerClient,\n params: SkillPreviewByRepoRequest,\n): Promise<SkillConversionSignalsResponse> {\n const repo = requireTrimmedString(params.repo, 'repo');\n const skillDir = requireTrimmedString(params.skillDir, 'skillDir');\n\n const query = new URLSearchParams();\n query.set('repo', repo);\n query.set('skillDir', skillDir);\n if (params.ref?.trim()) {\n query.set('ref', params.ref.trim());\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/conversion-signals/by-repo?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillConversionSignalsResponseSchema,\n 'skill conversion signals response',\n );\n}\n\nexport async function uploadSkillPreviewFromGithubOidc(\n client: RegistryBrokerClient,\n payload: UploadSkillPreviewFromGithubOidcRequest,\n): Promise<SkillPreviewRecord> {\n const token = requireTrimmedString(payload.token, 'token');\n\n const raw = await client.requestJson<JsonValue>(\n '/skills/preview/github-oidc',\n {\n method: 'POST',\n body: payload.report,\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${token}`,\n },\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillPreviewRecordSchema,\n 'skill preview record response',\n );\n}\n\nexport async function getSkillPreview(\n client: RegistryBrokerClient,\n params: SkillPreviewLookupRequest,\n): Promise<SkillPreviewLookupResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n if (params.version?.trim()) {\n query.set('version', params.version.trim());\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/preview?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillPreviewLookupResponseSchema,\n 'skill preview response',\n );\n}\n\nexport async function getSkillPreviewByRepo(\n client: RegistryBrokerClient,\n params: SkillPreviewByRepoRequest,\n): Promise<SkillPreviewLookupResponse> {\n const repo = requireTrimmedString(params.repo, 'repo');\n const skillDir = requireTrimmedString(params.skillDir, 'skillDir');\n\n const query = new URLSearchParams();\n query.set('repo', repo);\n query.set('skillDir', skillDir);\n if (params.ref?.trim()) {\n query.set('ref', params.ref.trim());\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/preview/by-repo?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillPreviewLookupResponseSchema,\n 'skill preview by repo response',\n );\n}\n\nexport async function getSkillPreviewById(\n client: RegistryBrokerClient,\n previewId: string,\n): Promise<SkillPreviewLookupResponse> {\n const normalizedPreviewId = requireTrimmedString(previewId, 'previewId');\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/preview/${encodeURIComponent(normalizedPreviewId)}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillPreviewLookupResponseSchema,\n 'skill preview by id response',\n );\n}\n\nexport async function getSkillInstall(\n client: RegistryBrokerClient,\n skillRef: string,\n): Promise<SkillInstallResponse> {\n const normalizedSkillRef = requireTrimmedString(skillRef, 'skillRef');\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/${encodeURIComponent(normalizedSkillRef)}/install`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillInstallResponseSchema,\n 'skill install response',\n );\n}\n\nexport async function recordSkillInstallCopy(\n client: RegistryBrokerClient,\n skillRef: string,\n payload: SkillInstallCopyTelemetryRequest = {},\n): Promise<SkillInstallCopyTelemetryResponse> {\n const normalizedSkillRef = requireTrimmedString(skillRef, 'skillRef');\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/${encodeURIComponent(normalizedSkillRef)}/telemetry/install-copy`,\n {\n method: 'POST',\n body: payload,\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillInstallCopyTelemetryResponseSchema,\n 'skill install copy telemetry response',\n );\n}\n\nexport async function listSkillTags(\n client: RegistryBrokerClient,\n): Promise<SkillRegistryTagsResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/tags', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n skillRegistryTagsResponseSchema,\n 'skill tags response',\n );\n}\n\nexport async function listSkillCategories(\n client: RegistryBrokerClient,\n): Promise<SkillRegistryCategoriesResponse> {\n const raw = await client.requestJson<JsonValue>('/skills/categories', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n skillRegistryCategoriesResponseSchema,\n 'skill categories response',\n );\n}\n\nexport async function resolveSkillMarkdown(\n client: RegistryBrokerClient,\n skillRef: string,\n): Promise<string> {\n const normalizedSkillRef = requireTrimmedString(skillRef, 'skillRef');\n const response = await client.request(\n `/skills/${encodeURIComponent(normalizedSkillRef)}/SKILL.md`,\n {\n method: 'GET',\n headers: {\n accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8',\n },\n },\n );\n return response.text();\n}\n\nexport async function resolveSkillManifest(\n client: RegistryBrokerClient,\n skillRef: string,\n): Promise<SkillResolverManifestResponse> {\n const normalizedSkillRef = requireTrimmedString(skillRef, 'skillRef');\n const raw = await client.requestJson<JsonValue>(\n `/skills/${encodeURIComponent(normalizedSkillRef)}/manifest`,\n {\n method: 'GET',\n },\n );\n return client.parseWithSchema(\n raw,\n skillResolverManifestResponseSchema,\n 'skill resolver manifest response',\n );\n}\n\nexport async function getSkillVoteStatus(\n client: RegistryBrokerClient,\n params: { name: string },\n): Promise<SkillRegistryVoteStatusResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/vote?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillRegistryVoteStatusResponseSchema,\n 'skill registry vote status response',\n );\n}\n\nexport async function setSkillVote(\n client: RegistryBrokerClient,\n payload: SkillRegistryVoteRequest,\n): Promise<SkillRegistryVoteStatusResponse> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n\n const raw = await client.requestJson<JsonValue>('/skills/vote', {\n method: 'POST',\n body: { name: normalizedName, upvoted: payload.upvoted },\n headers: { 'content-type': 'application/json' },\n });\n\n return client.parseWithSchema(\n raw,\n skillRegistryVoteStatusResponseSchema,\n 'skill registry vote status response',\n );\n}\n\nexport async function requestSkillVerification(\n client: RegistryBrokerClient,\n payload: SkillVerificationRequestCreateRequest,\n): Promise<SkillVerificationRequestCreateResponse> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n\n const raw = await client.requestJson<JsonValue>(\n '/skills/verification/request',\n {\n method: 'POST',\n body: {\n name: normalizedName,\n version: payload.version,\n tier: payload.tier,\n },\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillVerificationRequestCreateResponseSchema,\n 'skill verification request create response',\n );\n}\n\nexport async function getSkillVerificationStatus(\n client: RegistryBrokerClient,\n params: { name: string; version?: string },\n): Promise<SkillVerificationStatusResponse> {\n const normalizedName = requireTrimmedString(params.name, 'name');\n\n const query = new URLSearchParams();\n query.set('name', normalizedName);\n if (params.version) {\n query.set('version', params.version);\n }\n\n const raw = await client.requestJson<JsonValue>(\n `/skills/verification/status?${query.toString()}`,\n { method: 'GET' },\n );\n\n return client.parseWithSchema(\n raw,\n skillVerificationStatusResponseSchema,\n 'skill verification status response',\n );\n}\n\nexport async function createSkillDomainProofChallenge(\n client: RegistryBrokerClient,\n payload: SkillVerificationDomainProofChallengeRequest,\n): Promise<SkillVerificationDomainProofChallengeResponse> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n\n const raw = await client.requestJson<JsonValue>(\n '/skills/verification/domain/challenge',\n {\n method: 'POST',\n body: {\n name: normalizedName,\n version: payload.version,\n domain: payload.domain,\n },\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillVerificationDomainProofChallengeResponseSchema,\n 'skill domain proof challenge response',\n );\n}\n\nexport async function verifySkillDomainProof(\n client: RegistryBrokerClient,\n payload: SkillVerificationDomainProofVerifyRequest,\n): Promise<SkillVerificationDomainProofVerifyResponse> {\n const normalizedName = requireTrimmedString(payload.name, 'name');\n const challengeToken = requireTrimmedString(\n payload.challengeToken,\n 'challengeToken',\n );\n\n const raw = await client.requestJson<JsonValue>(\n '/skills/verification/domain/verify',\n {\n method: 'POST',\n body: {\n name: normalizedName,\n version: payload.version,\n domain: payload.domain,\n challengeToken,\n },\n headers: { 'content-type': 'application/json' },\n },\n );\n\n return client.parseWithSchema(\n raw,\n skillVerificationDomainProofVerifyResponseSchema,\n 'skill domain proof verify response',\n );\n}\n"],"names":[],"mappings":";AAqFA,SAAS,qBAAqB,OAAe,WAA2B;AACtE,QAAM,kBAAkB,MAAM,KAAA;AAC9B,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI,MAAM,GAAG,SAAS,cAAc;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,eAAsB,aACpB,QACsC;AACtC,QAAM,MAAM,MAAM,OAAO,YAAuB,kBAAkB;AAAA,IAChE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,WACpB,QACA,SAA2B,IACS;AACpC,QAAM,QAAQ,IAAI,gBAAA;AAClB,MAAI,OAAO,MAAM;AACf,UAAM,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,WAAW,OAAO,OAAO;AAAA,EACrC;AACA,MAAI,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,OAAO,KAAK,GAAG;AACrE,UAAM,IAAI,SAAS,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EACrD;AACA,MAAI,OAAO,QAAQ;AACjB,UAAM,IAAI,UAAU,OAAO,MAAM;AAAA,EACnC;AACA,MAAI,OAAO,OAAO,iBAAiB,WAAW;AAC5C,UAAM,IAAI,gBAAgB,OAAO,eAAe,SAAS,OAAO;AAAA,EAClE;AACA,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI,aAAa,OAAO,SAAS;AAAA,EACzC;AACA,MAAI,OAAO,GAAG;AACZ,UAAM,IAAI,KAAK,OAAO,CAAC;AAAA,EACzB;AACA,MAAI,OAAO,KAAK;AACd,UAAM,IAAI,OAAO,OAAO,GAAG;AAAA,EAC7B;AACA,MAAI,OAAO,UAAU;AACnB,UAAM,IAAI,YAAY,OAAO,QAAQ;AAAA,EACvC;AACA,MAAI,OAAO,OAAO,aAAa,WAAW;AACxC,UAAM,IAAI,YAAY,OAAO,WAAW,SAAS,OAAO;AAAA,EAC1D;AACA,MAAI,OAAO,OAAO,aAAa,WAAW;AACxC,UAAM,IAAI,YAAY,OAAO,WAAW,SAAS,OAAO;AAAA,EAC1D;AACA,MAAI,OAAO,MAAM;AACf,UAAM,IAAI,QAAQ,OAAO,IAAI;AAAA,EAC/B;AAEA,QAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,UAAU,KAAK;AAEzD,QAAM,MAAM,MAAM,OAAO,YAAuB,UAAU,MAAM,IAAI;AAAA,IAClE,QAAQ;AAAA,EAAA,CACT;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,0BACpB,QACA,QACyC;AACzC,QAAM,kBAAkB,qBAAqB,OAAO,OAAO,OAAO;AAElE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,WAAW,mBAAmB,eAAe,CAAC;AAAA,IAC9C,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,iBACpB,QACA,SAAmC,IACJ;AAC/B,QAAM,QAAQ,IAAI,gBAAA;AAClB,MAAI,OAAO,GAAG;AACZ,UAAM,IAAI,KAAK,OAAO,CAAC;AAAA,EACzB;AACA,MAAI,OAAO,UAAU;AACnB,UAAM,IAAI,YAAY,OAAO,QAAQ;AAAA,EACvC;AACA,SAAO,MAAM,QAAQ,CAAA,QAAO;AAC1B,QAAI,IAAI,QAAQ;AACd,YAAM,OAAO,OAAO,IAAI,KAAA,CAAM;AAAA,IAChC;AAAA,EACF,CAAC;AACD,MAAI,OAAO,OAAO,aAAa,WAAW;AACxC,UAAM,IAAI,YAAY,OAAO,WAAW,SAAS,OAAO;AAAA,EAC1D;AACA,MAAI,OAAO,OAAO,aAAa,WAAW;AACxC,UAAM,IAAI,YAAY,OAAO,WAAW,SAAS,OAAO;AAAA,EAC1D;AACA,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,WAAW,OAAO,OAAO;AAAA,EACrC;AACA,MAAI,OAAO,QAAQ;AACjB,UAAM,IAAI,UAAU,OAAO,MAAM;AAAA,EACnC;AACA,MAAI,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,OAAO,KAAK,GAAG;AACrE,UAAM,IAAI,SAAS,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EACrD;AACA,MAAI,OAAO,QAAQ;AACjB,UAAM,IAAI,UAAU,OAAO,MAAM;AAAA,EACnC;AACA,QAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,UAAU,KAAK;AAEzD,QAAM,MAAM,MAAM,OAAO,YAAuB,kBAAkB,MAAM,IAAI;AAAA,IAC1E,QAAQ;AAAA,EAAA,CACT;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,kBACpB,QACA,QACwC;AACxC,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAEhC,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,oBAAoB,MAAM,SAAA,CAAU;AAAA,IACpC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,aACpB,QACA,SAA6B,IACO;AACpC,QAAM,QAAQ,IAAI,gBAAA;AAClB,MAAI,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,OAAO,KAAK,GAAG;AACrE,UAAM,IAAI,SAAS,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EACrD;AACA,QAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,UAAU,KAAK;AAEzD,QAAM,MAAM,MAAM,OAAO,YAAuB,eAAe,MAAM,IAAI;AAAA,IACvE,QAAQ;AAAA,EAAA,CACT;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,gBACpB,QACA,SAAkE,IAC5B;AACtC,QAAM,QAAQ,IAAI,gBAAA;AAClB,MAAI,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,OAAO,KAAK,GAAG;AACrE,UAAM,IAAI,SAAS,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,EACrD;AACA,MAAI,OAAO,QAAQ;AACjB,UAAM,IAAI,UAAU,OAAO,MAAM;AAAA,EACnC;AACA,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI,aAAa,OAAO,SAAS;AAAA,EACzC;AACA,QAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,UAAU,KAAK;AAEzD,QAAM,MAAM,MAAM,OAAO,YAAuB,kBAAkB,MAAM,IAAI;AAAA,IAC1E,QAAQ;AAAA,EAAA,CACT;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,kBACpB,QACA,SACqC;AACrC,QAAM,MAAM,MAAM,OAAO,YAAuB,iBAAiB;AAAA,IAC/D,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,yBACpB,QACA,SACoC;AACpC,QAAM,MAAM,MAAM,OAAO,YAAuB,yBAAyB;AAAA,IACvE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,aACpB,QACA,SACuC;AACvC,QAAM,MAAM,MAAM,OAAO,YAAuB,mBAAmB;AAAA,IACjE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,mBACpB,QACA,OACA,SAAiC,CAAA,GACQ;AACzC,QAAM,aAAa,qBAAqB,OAAO,OAAO;AAEtD,QAAM,QAAQ,IAAI,gBAAA;AAClB,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI,aAAa,OAAO,SAAS;AAAA,EACzC;AACA,QAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,UAAU,KAAK;AAEzD,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,gBAAgB,mBAAmB,UAAU,CAAC,GAAG,MAAM;AAAA,IACvD,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,kBACpB,QACA,QACyC;AACzC,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,MAAI,OAAO,WAAW;AACpB,UAAM,IAAI,aAAa,OAAO,SAAS;AAAA,EACzC;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,qBAAqB,MAAM,SAAA,CAAU;AAAA,IACrC;AAAA,MACE,QAAQ;AAAA,IAAA;AAAA,EACV;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,2BACpB,QACA,QAC0C;AAC1C,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAC/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,uBAAuB,MAAM,SAAA,CAAU;AAAA,IACvC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAElB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,2BACpB,QACA,SAC0C;AAC1C,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAChE,QAAM,oBAAoB,qBAAqB,QAAQ,SAAS,SAAS;AACzE,QAAM,MAAM,MAAM,OAAO,YAAuB,uBAAuB;AAAA,IACrE,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,qBACpB,QACA,QACoC;AACpC,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAC/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,wBAAwB,MAAM,SAAA,CAAU;AAAA,IACxC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAElB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,oBACpB,QACA,SACiC;AACjC,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAChE,QAAM,UAAU,QAAQ,SAAS,KAAA;AACjC,QAAM,SAAS,qBAAqB,QAAQ,QAAQ,QAAQ;AAC5D,QAAM,iBAAiB,QAAQ,gBAAgB,KAAA;AAC/C,QAAM,MAAM,MAAM,OAAO,YAAuB,qBAAqB;AAAA,IACnE,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,cACpB,QACA,QAC6B;AAC7B,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAC/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,MAAI,OAAO,QAAQ;AACjB,UAAM,IAAI,UAAU,OAAO,MAAM;AAAA,EACnC;AACA,MAAI,OAAO,OAAO,QAAQ;AACxB,UAAM,IAAI,SAAS,OAAO,MAAM,MAAM;AAAA,EACxC;AACA,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI,SAAS,OAAO,KAAK;AAAA,EACjC;AACA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,iBAAiB,MAAM,SAAA,CAAU;AAAA,IACjC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAElB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,eACpB,QACA,QAC8B;AAC9B,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,MAAI,OAAO,SAAS,QAAQ;AAC1B,UAAM,IAAI,WAAW,OAAO,QAAQ,MAAM;AAAA,EAC5C;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,kBAAkB,MAAM,SAAA,CAAU;AAAA,IAClC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,qBACpB,QACA,QAC8B;AAC9B,QAAM,OAAO,qBAAqB,OAAO,MAAM,MAAM;AACrD,QAAM,WAAW,qBAAqB,OAAO,UAAU,UAAU;AAEjE,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,IAAI;AACtB,QAAM,IAAI,YAAY,QAAQ;AAC9B,MAAI,OAAO,KAAK,QAAQ;AACtB,UAAM,IAAI,OAAO,OAAO,IAAI,MAAM;AAAA,EACpC;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,0BAA0B,MAAM,SAAA,CAAU;AAAA,IAC1C,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,gCACpB,QACA,QACyC;AACzC,QAAM,OAAO,qBAAqB,OAAO,MAAM,MAAM;AACrD,QAAM,WAAW,qBAAqB,OAAO,UAAU,UAAU;AAEjE,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,IAAI;AACtB,QAAM,IAAI,YAAY,QAAQ;AAC9B,MAAI,OAAO,KAAK,QAAQ;AACtB,UAAM,IAAI,OAAO,OAAO,IAAI,MAAM;AAAA,EACpC;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,sCAAsC,MAAM,SAAA,CAAU;AAAA,IACtD,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,iCACpB,QACA,SAC6B;AAC7B,QAAM,QAAQ,qBAAqB,QAAQ,OAAO,OAAO;AAEzD,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,QAAQ;AAAA,MACd,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,KAAK;AAAA,MAAA;AAAA,IAChC;AAAA,EACF;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,gBACpB,QACA,QACqC;AACrC,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,MAAI,OAAO,SAAS,QAAQ;AAC1B,UAAM,IAAI,WAAW,OAAO,QAAQ,MAAM;AAAA,EAC5C;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,mBAAmB,MAAM,SAAA,CAAU;AAAA,IACnC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,sBACpB,QACA,QACqC;AACrC,QAAM,OAAO,qBAAqB,OAAO,MAAM,MAAM;AACrD,QAAM,WAAW,qBAAqB,OAAO,UAAU,UAAU;AAEjE,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,IAAI;AACtB,QAAM,IAAI,YAAY,QAAQ;AAC9B,MAAI,OAAO,KAAK,QAAQ;AACtB,UAAM,IAAI,OAAO,OAAO,IAAI,MAAM;AAAA,EACpC;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,2BAA2B,MAAM,SAAA,CAAU;AAAA,IAC3C,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,oBACpB,QACA,WACqC;AACrC,QAAM,sBAAsB,qBAAqB,WAAW,WAAW;AAEvE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,mBAAmB,mBAAmB,mBAAmB,CAAC;AAAA,IAC1D,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,gBACpB,QACA,UAC+B;AAC/B,QAAM,qBAAqB,qBAAqB,UAAU,UAAU;AAEpE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,WAAW,mBAAmB,kBAAkB,CAAC;AAAA,IACjD,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,uBACpB,QACA,UACA,UAA4C,CAAA,GACA;AAC5C,QAAM,qBAAqB,qBAAqB,UAAU,UAAU;AAEpE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,WAAW,mBAAmB,kBAAkB,CAAC;AAAA,IACjD;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB;AAAA,EAChD;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,cACpB,QACoC;AACpC,QAAM,MAAM,MAAM,OAAO,YAAuB,gBAAgB;AAAA,IAC9D,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,oBACpB,QAC0C;AAC1C,QAAM,MAAM,MAAM,OAAO,YAAuB,sBAAsB;AAAA,IACpE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,qBACpB,QACA,UACiB;AACjB,QAAM,qBAAqB,qBAAqB,UAAU,UAAU;AACpE,QAAM,WAAW,MAAM,OAAO;AAAA,IAC5B,WAAW,mBAAmB,kBAAkB,CAAC;AAAA,IACjD;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EACF;AAEF,SAAO,SAAS,KAAA;AAClB;AAEA,eAAsB,qBACpB,QACA,UACwC;AACxC,QAAM,qBAAqB,qBAAqB,UAAU,UAAU;AACpE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,WAAW,mBAAmB,kBAAkB,CAAC;AAAA,IACjD;AAAA,MACE,QAAQ;AAAA,IAAA;AAAA,EACV;AAEF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,mBACpB,QACA,QAC0C;AAC1C,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAEhC,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,gBAAgB,MAAM,SAAA,CAAU;AAAA,IAChC,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,aACpB,QACA,SAC0C;AAC1C,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAEhE,QAAM,MAAM,MAAM,OAAO,YAAuB,gBAAgB;AAAA,IAC9D,QAAQ;AAAA,IACR,MAAM,EAAE,MAAM,gBAAgB,SAAS,QAAQ,QAAA;AAAA,IAC/C,SAAS,EAAE,gBAAgB,mBAAA;AAAA,EAAmB,CAC/C;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,yBACpB,QACA,SACiD;AACjD,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAEhE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,MAAM,QAAQ;AAAA,MAAA;AAAA,MAEhB,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB;AAAA,EAChD;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,2BACpB,QACA,QAC0C;AAC1C,QAAM,iBAAiB,qBAAqB,OAAO,MAAM,MAAM;AAE/D,QAAM,QAAQ,IAAI,gBAAA;AAClB,QAAM,IAAI,QAAQ,cAAc;AAChC,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,WAAW,OAAO,OAAO;AAAA,EACrC;AAEA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,+BAA+B,MAAM,SAAA,CAAU;AAAA,IAC/C,EAAE,QAAQ,MAAA;AAAA,EAAM;AAGlB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,gCACpB,QACA,SACwD;AACxD,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAEhE,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAAA;AAAA,MAElB,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB;AAAA,EAChD;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,uBACpB,QACA,SACqD;AACrD,QAAM,iBAAiB,qBAAqB,QAAQ,MAAM,MAAM;AAChE,QAAM,iBAAiB;AAAA,IACrB,QAAQ;AAAA,IACR;AAAA,EAAA;AAGF,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB;AAAA,MAAA;AAAA,MAEF,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB;AAAA,EAChD;AAGF,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -1,5 +1,5 @@
1
1
  import { Buffer } from "buffer";
2
- import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es160.js";
2
+ import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es161.js";
3
3
  function identitiesMatch(a, b) {
4
4
  if (!a && !b) {
5
5
  return true;
@@ -1,5 +1,5 @@
1
- import { createSessionResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema } from "./standards-sdk.es160.js";
2
- import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.es184.js";
1
+ import { createSessionResponseSchema, chatHistoryCompactionResponseSchema, sessionEncryptionStatusResponseSchema, encryptionHandshakeResponseSchema, sendMessageResponseSchema } from "./standards-sdk.es161.js";
2
+ import { serialiseAuthConfig, toJsonObject } from "./standards-sdk.es185.js";
3
3
  import { EncryptionUnavailableError } from "./standards-sdk.es177.js";
4
4
  function createChatApi(client, encryptedManager) {
5
5
  return {
@@ -1,7 +1,7 @@
1
1
  import { Buffer } from "buffer";
2
2
  import { secp256k1 } from "@noble/curves/secp256k1.js";
3
- import { registerEncryptionKeyResponseSchema } from "./standards-sdk.es160.js";
4
- import { optionalImport } from "./standards-sdk.es164.js";
3
+ import { registerEncryptionKeyResponseSchema } from "./standards-sdk.es161.js";
4
+ import { optionalImport } from "./standards-sdk.es163.js";
5
5
  const getFs = async () => {
6
6
  const fsModule = await optionalImport("node:fs") ?? await optionalImport("fs");
7
7
  if (fsModule && typeof fsModule.existsSync === "function" && typeof fsModule.readFileSync === "function" && typeof fsModule.writeFileSync === "function" && typeof fsModule.appendFileSync === "function") {
@@ -1,5 +1,5 @@
1
- import { adaptersResponseSchema, adapterDetailsResponseSchema, adapterRegistryCategoriesResponseSchema, adapterRegistryAdaptersResponseSchema, adapterRegistryCreateCategoryResponseSchema, adapterRegistrySubmitAdapterAcceptedResponseSchema, adapterRegistrySubmissionStatusResponseSchema } from "./standards-sdk.es160.js";
2
- import { toJsonObject } from "./standards-sdk.es184.js";
1
+ import { adaptersResponseSchema, adapterDetailsResponseSchema, adapterRegistryCategoriesResponseSchema, adapterRegistryAdaptersResponseSchema, adapterRegistryCreateCategoryResponseSchema, adapterRegistrySubmitAdapterAcceptedResponseSchema, adapterRegistrySubmissionStatusResponseSchema } from "./standards-sdk.es161.js";
2
+ import { toJsonObject } from "./standards-sdk.es185.js";
3
3
  async function adapters(client) {
4
4
  const raw = await client.requestJson("/adapters", {
5
5
  method: "GET"
@@ -1,6 +1,6 @@
1
1
  import { Client, PrivateKey, AccountCreateTransaction, Hbar, CustomFixedFee, AccountId, TokenId, KeyList, TopicMessageSubmitTransaction, Transaction, ScheduleCreateTransaction, Timestamp } from "@hashgraph/sdk";
2
2
  import { AccountCreationError, TopicCreationError, ConnectionConfirmationError, PayloadSizeError } from "./standards-sdk.es17.js";
3
- import { InscriptionSDK } from "./standards-sdk.es161.js";
3
+ import { InscriptionSDK } from "./standards-sdk.es160.js";
4
4
  import { Logger } from "./standards-sdk.es123.js";
5
5
  import { accountIdsToExemptKeys } from "./standards-sdk.es125.js";
6
6
  import { ProgressReporter } from "./standards-sdk.es126.js";
@@ -9,7 +9,7 @@ import "@hashgraph/proto";
9
9
  import "buffer";
10
10
  import "@noble/curves/secp256k1.js";
11
11
  import "zod";
12
- import "./standards-sdk.es160.js";
12
+ import "./standards-sdk.es161.js";
13
13
  import "./standards-sdk.es149.js";
14
14
  import "ethers";
15
15
  import "./standards-sdk.es140.js";
@@ -1,4 +1,4 @@
1
- import { registerStatusResponseSchema, moltbookOwnerRegistrationUpdateResponseSchema, verificationStatusResponseSchema, verificationChallengeResponseSchema, verificationChallengeDetailsResponseSchema, verificationVerifyResponseSchema, verificationOwnershipResponseSchema, verificationVerifySenderResponseSchema, verificationDnsStatusResponseSchema } from "./standards-sdk.es160.js";
1
+ import { registerStatusResponseSchema, moltbookOwnerRegistrationUpdateResponseSchema, verificationStatusResponseSchema, verificationChallengeResponseSchema, verificationChallengeDetailsResponseSchema, verificationVerifyResponseSchema, verificationOwnershipResponseSchema, verificationVerifySenderResponseSchema, verificationDnsStatusResponseSchema } from "./standards-sdk.es161.js";
2
2
  async function getVerificationStatus(client, uaid) {
3
3
  const raw = await client.requestJson(
4
4
  `/verification/status/${encodeURIComponent(uaid)}`,
@@ -1,6 +1,61 @@
1
- import { creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema } from "./standards-sdk.es160.js";
2
- import { normalizeHexPrivateKey } from "./standards-sdk.es184.js";
3
- import { optionalImport } from "./standards-sdk.es164.js";
1
+ import { creditBalanceResponseSchema, creditProvidersResponseSchema, hbarPurchaseIntentResponseSchema, creditPurchaseResponseSchema, x402MinimumsResponseSchema, x402CreditPurchaseResponseSchema } from "./standards-sdk.es161.js";
2
+ import { normalizeHexPrivateKey } from "./standards-sdk.es185.js";
3
+ import { optionalImport } from "./standards-sdk.es163.js";
4
+ async function getCreditsBalance(client, params = {}) {
5
+ const query = new URLSearchParams();
6
+ const normalizedAccountId = params.accountId?.trim();
7
+ if (normalizedAccountId) {
8
+ query.set("accountId", normalizedAccountId);
9
+ }
10
+ const suffix = query.size > 0 ? `?${query.toString()}` : "";
11
+ const raw = await client.requestJson(`/credits/balance${suffix}`, {
12
+ method: "GET"
13
+ });
14
+ return client.parseWithSchema(
15
+ raw,
16
+ creditBalanceResponseSchema,
17
+ "credit balance response"
18
+ );
19
+ }
20
+ async function getCreditProviders(client) {
21
+ const raw = await client.requestJson("/credits/providers", {
22
+ method: "GET"
23
+ });
24
+ return client.parseWithSchema(
25
+ raw,
26
+ creditProvidersResponseSchema,
27
+ "credit providers response"
28
+ );
29
+ }
30
+ async function createHbarPurchaseIntent(client, payload) {
31
+ const body = {};
32
+ const normalizedAccountId = payload.accountId?.trim();
33
+ if (normalizedAccountId) {
34
+ body.accountId = normalizedAccountId;
35
+ }
36
+ if (payload.credits !== void 0) {
37
+ body.credits = payload.credits;
38
+ }
39
+ if (payload.hbarAmount !== void 0) {
40
+ body.hbarAmount = payload.hbarAmount;
41
+ }
42
+ if (payload.memo?.trim()) {
43
+ body.memo = payload.memo.trim();
44
+ }
45
+ const raw = await client.requestJson(
46
+ "/credits/payments/hbar/intent",
47
+ {
48
+ method: "POST",
49
+ headers: { "content-type": "application/json" },
50
+ body
51
+ }
52
+ );
53
+ return client.parseWithSchema(
54
+ raw,
55
+ hbarPurchaseIntentResponseSchema,
56
+ "hbar purchase intent response"
57
+ );
58
+ }
4
59
  async function loadX402Dependencies(client) {
5
60
  const [{ default: axios }, x402Axios, x402Types] = await Promise.all([
6
61
  import("axios"),
@@ -122,6 +177,9 @@ async function buyCreditsWithX402(client, params) {
122
177
  }
123
178
  export {
124
179
  buyCreditsWithX402,
180
+ createHbarPurchaseIntent,
181
+ getCreditProviders,
182
+ getCreditsBalance,
125
183
  getX402Minimums,
126
184
  purchaseCreditsWithHbar,
127
185
  purchaseCreditsWithX402
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es181.js","sources":["../../src/services/registry-broker/client/credits.ts"],"sourcesContent":["import type {\n CreditPurchaseResponse,\n JsonObject,\n JsonValue,\n X402CreditPurchaseResponse,\n X402MinimumsResponse,\n} from '../types';\nimport {\n creditPurchaseResponseSchema,\n x402CreditPurchaseResponseSchema,\n x402MinimumsResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { normalizeHexPrivateKey, type X402NetworkId } from './utils';\nimport { optionalImport } from '../../../utils/dynamic-import';\n\ntype PaymentHeaders = Record<string, string | string[] | undefined>;\ntype PaymentClient = {\n post: (\n url: string,\n body: JsonObject,\n ) => Promise<{ data: JsonValue; headers?: PaymentHeaders }>;\n};\n\nexport interface PurchaseCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n walletClient: object;\n}\n\nexport interface BuyCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n evmPrivateKey: string;\n network?: X402NetworkId;\n rpcUrl?: string;\n}\n\nexport type X402PurchaseResult = X402CreditPurchaseResponse & {\n paymentResponseHeader?: string;\n paymentResponse?: unknown;\n};\n\ntype LoadX402DependenciesResult = {\n createPaymentClient: (walletClient: object) => PaymentClient;\n decodePaymentResponse: (value: string) => unknown;\n createX402Signer: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n};\n\nasync function loadX402Dependencies(\n client: RegistryBrokerClient,\n): Promise<LoadX402DependenciesResult> {\n type X402AxiosModule = {\n withPaymentInterceptor: (client: unknown, walletClient: object) => unknown;\n decodeXPaymentResponse: (value: string) => unknown;\n };\n type X402TypesModule = {\n createSigner: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n };\n\n const [{ default: axios }, x402Axios, x402Types] = await Promise.all([\n import('axios'),\n optionalImport<X402AxiosModule>('x402-axios'),\n optionalImport<X402TypesModule>('x402/types'),\n ]);\n\n if (!x402Axios || !x402Types) {\n throw new Error(\n 'x402-axios and x402/types are required for X402 flows. Install them to enable ledger payments.',\n );\n }\n\n const withPaymentInterceptor = x402Axios.withPaymentInterceptor;\n const decodePaymentResponse = x402Axios.decodeXPaymentResponse;\n const createX402Signer = x402Types.createSigner;\n\n const createPaymentClient = (walletClient: object): PaymentClient => {\n const axiosClient = axios.create({\n baseURL: client.baseUrl,\n headers: {\n ...client.getDefaultHeaders(),\n 'content-type': 'application/json',\n },\n });\n const paymentClient = withPaymentInterceptor(axiosClient, walletClient);\n return paymentClient as PaymentClient;\n };\n\n return { createPaymentClient, decodePaymentResponse, createX402Signer };\n}\n\nfunction calculateHbarAmountParam(hbarAmount: number): number {\n const tinybars = Math.ceil(hbarAmount * 1e8);\n if (tinybars <= 0) {\n throw new Error('Calculated purchase amount must be positive');\n }\n return tinybars / 1e8;\n}\n\nexport async function purchaseCreditsWithHbar(\n client: RegistryBrokerClient,\n params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n },\n): Promise<CreditPurchaseResponse> {\n const body: JsonObject = {\n accountId: params.accountId,\n payerKey: params.privateKey,\n hbarAmount: calculateHbarAmountParam(params.hbarAmount),\n };\n\n if (params.memo) {\n body.memo = params.memo;\n }\n\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const raw = await client.requestJson<JsonValue>('/credits/purchase', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n return client.parseWithSchema(\n raw,\n creditPurchaseResponseSchema,\n 'credit purchase response',\n );\n}\n\nexport async function getX402Minimums(\n client: RegistryBrokerClient,\n): Promise<X402MinimumsResponse> {\n const raw = await client.requestJson<JsonValue>(\n '/credits/purchase/x402/minimums',\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n x402MinimumsResponseSchema,\n 'x402 minimums response',\n );\n}\n\nexport async function purchaseCreditsWithX402(\n client: RegistryBrokerClient,\n params: PurchaseCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const { createPaymentClient, decodePaymentResponse } =\n await loadX402Dependencies(client);\n\n if (!Number.isFinite(params.credits) || params.credits <= 0) {\n throw new Error('credits must be a positive number');\n }\n if (\n params.usdAmount !== undefined &&\n (!Number.isFinite(params.usdAmount) || params.usdAmount <= 0)\n ) {\n throw new Error('usdAmount must be a positive number when provided');\n }\n\n const body: JsonObject = {\n accountId: params.accountId,\n credits: params.credits,\n };\n\n if (params.usdAmount !== undefined) {\n body.usdAmount = params.usdAmount;\n }\n if (params.description) {\n body.description = params.description;\n }\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const paymentClient = createPaymentClient(params.walletClient);\n\n const response = await paymentClient.post('/credits/purchase/x402', body);\n\n const parsed = client.parseWithSchema(\n response.data,\n x402CreditPurchaseResponseSchema,\n 'x402 credit purchase response',\n );\n\n const responseHeaders = response.headers ?? {};\n const paymentHeader =\n typeof responseHeaders['x-payment-response'] === 'string'\n ? responseHeaders['x-payment-response']\n : undefined;\n const decodedPayment =\n paymentHeader !== undefined\n ? decodePaymentResponse(paymentHeader)\n : undefined;\n\n return {\n ...parsed,\n paymentResponseHeader: paymentHeader,\n paymentResponse: decodedPayment,\n };\n}\n\nexport async function buyCreditsWithX402(\n client: RegistryBrokerClient,\n params: BuyCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const network: X402NetworkId = params.network ?? 'base';\n const { createX402Signer } = await loadX402Dependencies(client);\n const normalizedKey = normalizeHexPrivateKey(params.evmPrivateKey);\n const walletClient = await createX402Signer(network, normalizedKey);\n\n return purchaseCreditsWithX402(client, {\n accountId: params.accountId,\n credits: params.credits,\n usdAmount: params.usdAmount,\n description: params.description,\n metadata: params.metadata,\n walletClient,\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es181.js","sources":["../../src/services/registry-broker/client/credits.ts"],"sourcesContent":["import type {\n CreditBalanceResponse,\n CreditProvidersResponse,\n CreditPurchaseResponse,\n HbarPurchaseIntentRequest,\n HbarPurchaseIntentResponse,\n JsonObject,\n JsonValue,\n X402CreditPurchaseResponse,\n X402MinimumsResponse,\n} from '../types';\nimport {\n creditBalanceResponseSchema,\n creditProvidersResponseSchema,\n creditPurchaseResponseSchema,\n hbarPurchaseIntentResponseSchema,\n x402CreditPurchaseResponseSchema,\n x402MinimumsResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\nimport { normalizeHexPrivateKey, type X402NetworkId } from './utils';\nimport { optionalImport } from '../../../utils/dynamic-import';\n\ntype PaymentHeaders = Record<string, string | string[] | undefined>;\ntype PaymentClient = {\n post: (\n url: string,\n body: JsonObject,\n ) => Promise<{ data: JsonValue; headers?: PaymentHeaders }>;\n};\n\nexport interface PurchaseCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n walletClient: object;\n}\n\nexport interface BuyCreditsWithX402Params {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n evmPrivateKey: string;\n network?: X402NetworkId;\n rpcUrl?: string;\n}\n\nexport type X402PurchaseResult = X402CreditPurchaseResponse & {\n paymentResponseHeader?: string;\n paymentResponse?: unknown;\n};\n\nexport async function getCreditsBalance(\n client: RegistryBrokerClient,\n params: { accountId?: string } = {},\n): Promise<CreditBalanceResponse> {\n const query = new URLSearchParams();\n const normalizedAccountId = params.accountId?.trim();\n if (normalizedAccountId) {\n query.set('accountId', normalizedAccountId);\n }\n const suffix = query.size > 0 ? `?${query.toString()}` : '';\n const raw = await client.requestJson<JsonValue>(`/credits/balance${suffix}`, {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n creditBalanceResponseSchema,\n 'credit balance response',\n );\n}\n\nexport async function getCreditProviders(\n client: RegistryBrokerClient,\n): Promise<CreditProvidersResponse> {\n const raw = await client.requestJson<JsonValue>('/credits/providers', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n creditProvidersResponseSchema,\n 'credit providers response',\n );\n}\n\nexport async function createHbarPurchaseIntent(\n client: RegistryBrokerClient,\n payload: HbarPurchaseIntentRequest,\n): Promise<HbarPurchaseIntentResponse> {\n const body: JsonObject = {};\n const normalizedAccountId = payload.accountId?.trim();\n if (normalizedAccountId) {\n body.accountId = normalizedAccountId;\n }\n if (payload.credits !== undefined) {\n body.credits = payload.credits;\n }\n if (payload.hbarAmount !== undefined) {\n body.hbarAmount = payload.hbarAmount;\n }\n if (payload.memo?.trim()) {\n body.memo = payload.memo.trim();\n }\n\n const raw = await client.requestJson<JsonValue>(\n '/credits/payments/hbar/intent',\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n },\n );\n return client.parseWithSchema(\n raw,\n hbarPurchaseIntentResponseSchema,\n 'hbar purchase intent response',\n );\n}\n\ntype LoadX402DependenciesResult = {\n createPaymentClient: (walletClient: object) => PaymentClient;\n decodePaymentResponse: (value: string) => unknown;\n createX402Signer: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n};\n\nasync function loadX402Dependencies(\n client: RegistryBrokerClient,\n): Promise<LoadX402DependenciesResult> {\n type X402AxiosModule = {\n withPaymentInterceptor: (client: unknown, walletClient: object) => unknown;\n decodeXPaymentResponse: (value: string) => unknown;\n };\n type X402TypesModule = {\n createSigner: (\n network: X402NetworkId,\n privateKey: `0x${string}`,\n ) => Promise<object>;\n };\n\n const [{ default: axios }, x402Axios, x402Types] = await Promise.all([\n import('axios'),\n optionalImport<X402AxiosModule>('x402-axios'),\n optionalImport<X402TypesModule>('x402/types'),\n ]);\n\n if (!x402Axios || !x402Types) {\n throw new Error(\n 'x402-axios and x402/types are required for X402 flows. Install them to enable ledger payments.',\n );\n }\n\n const withPaymentInterceptor = x402Axios.withPaymentInterceptor;\n const decodePaymentResponse = x402Axios.decodeXPaymentResponse;\n const createX402Signer = x402Types.createSigner;\n\n const createPaymentClient = (walletClient: object): PaymentClient => {\n const axiosClient = axios.create({\n baseURL: client.baseUrl,\n headers: {\n ...client.getDefaultHeaders(),\n 'content-type': 'application/json',\n },\n });\n const paymentClient = withPaymentInterceptor(axiosClient, walletClient);\n return paymentClient as PaymentClient;\n };\n\n return { createPaymentClient, decodePaymentResponse, createX402Signer };\n}\n\nfunction calculateHbarAmountParam(hbarAmount: number): number {\n const tinybars = Math.ceil(hbarAmount * 1e8);\n if (tinybars <= 0) {\n throw new Error('Calculated purchase amount must be positive');\n }\n return tinybars / 1e8;\n}\n\nexport async function purchaseCreditsWithHbar(\n client: RegistryBrokerClient,\n params: {\n accountId: string;\n privateKey: string;\n hbarAmount: number;\n memo?: string;\n metadata?: JsonObject;\n },\n): Promise<CreditPurchaseResponse> {\n const body: JsonObject = {\n accountId: params.accountId,\n payerKey: params.privateKey,\n hbarAmount: calculateHbarAmountParam(params.hbarAmount),\n };\n\n if (params.memo) {\n body.memo = params.memo;\n }\n\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const raw = await client.requestJson<JsonValue>('/credits/purchase', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n return client.parseWithSchema(\n raw,\n creditPurchaseResponseSchema,\n 'credit purchase response',\n );\n}\n\nexport async function getX402Minimums(\n client: RegistryBrokerClient,\n): Promise<X402MinimumsResponse> {\n const raw = await client.requestJson<JsonValue>(\n '/credits/purchase/x402/minimums',\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n x402MinimumsResponseSchema,\n 'x402 minimums response',\n );\n}\n\nexport async function purchaseCreditsWithX402(\n client: RegistryBrokerClient,\n params: PurchaseCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const { createPaymentClient, decodePaymentResponse } =\n await loadX402Dependencies(client);\n\n if (!Number.isFinite(params.credits) || params.credits <= 0) {\n throw new Error('credits must be a positive number');\n }\n if (\n params.usdAmount !== undefined &&\n (!Number.isFinite(params.usdAmount) || params.usdAmount <= 0)\n ) {\n throw new Error('usdAmount must be a positive number when provided');\n }\n\n const body: JsonObject = {\n accountId: params.accountId,\n credits: params.credits,\n };\n\n if (params.usdAmount !== undefined) {\n body.usdAmount = params.usdAmount;\n }\n if (params.description) {\n body.description = params.description;\n }\n if (params.metadata) {\n body.metadata = params.metadata;\n }\n\n const paymentClient = createPaymentClient(params.walletClient);\n\n const response = await paymentClient.post('/credits/purchase/x402', body);\n\n const parsed = client.parseWithSchema(\n response.data,\n x402CreditPurchaseResponseSchema,\n 'x402 credit purchase response',\n );\n\n const responseHeaders = response.headers ?? {};\n const paymentHeader =\n typeof responseHeaders['x-payment-response'] === 'string'\n ? responseHeaders['x-payment-response']\n : undefined;\n const decodedPayment =\n paymentHeader !== undefined\n ? decodePaymentResponse(paymentHeader)\n : undefined;\n\n return {\n ...parsed,\n paymentResponseHeader: paymentHeader,\n paymentResponse: decodedPayment,\n };\n}\n\nexport async function buyCreditsWithX402(\n client: RegistryBrokerClient,\n params: BuyCreditsWithX402Params,\n): Promise<X402PurchaseResult> {\n const network: X402NetworkId = params.network ?? 'base';\n const { createX402Signer } = await loadX402Dependencies(client);\n const normalizedKey = normalizeHexPrivateKey(params.evmPrivateKey);\n const walletClient = await createX402Signer(network, normalizedKey);\n\n return purchaseCreditsWithX402(client, {\n accountId: params.accountId,\n credits: params.credits,\n usdAmount: params.usdAmount,\n description: params.description,\n metadata: params.metadata,\n walletClient,\n });\n}\n"],"names":[],"mappings":"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"}
@@ -1,188 +1,100 @@
1
- import { Buffer } from "buffer";
2
- import { ledgerChallengeResponseSchema, ledgerVerifyResponseSchema } from "./standards-sdk.es160.js";
3
- import { canonicalizeLedgerNetwork } from "./standards-sdk.es149.js";
4
- import { createPrivateKeySignerAsync } from "./standards-sdk.es148.js";
5
- async function loadViemAccount(privateKey) {
6
- try {
7
- const viem = await import("viem/accounts");
8
- return viem.privateKeyToAccount(privateKey);
9
- } catch (error) {
10
- const err = new Error(
11
- 'EVM ledger authentication requires the optional dependency "viem". Install it to use evmPrivateKey flows.'
12
- );
13
- err.cause = error;
14
- throw err;
15
- }
1
+ import { guardSessionResponseSchema, guardBalanceResponseSchema, guardTrustByHashResponseSchema, guardTrustResolveResponseSchema, guardRevocationResponseSchema, guardReceiptSyncResponseSchema } from "./standards-sdk.es161.js";
2
+ async function getGuardSession(client) {
3
+ const raw = await client.requestJson("/guard/auth/session", {
4
+ method: "GET"
5
+ });
6
+ return client.parseWithSchema(
7
+ raw,
8
+ guardSessionResponseSchema,
9
+ "guard session response"
10
+ );
16
11
  }
17
- async function resolveLedgerAuthSignature(message, options) {
18
- if (typeof options.sign === "function") {
19
- const result = await options.sign(message);
20
- if (!result || typeof result.signature !== "string" || result.signature.length === 0) {
21
- throw new Error("Custom ledger signer failed to produce a signature.");
22
- }
23
- return result;
24
- }
25
- if (!options.signer || typeof options.signer.sign !== "function") {
26
- throw new Error(
27
- "Ledger authentication requires a Hedera Signer or custom sign function."
28
- );
29
- }
30
- const payload = Buffer.from(message, "utf8");
31
- const signatures = await options.signer.sign([payload]);
32
- const signatureEntry = signatures?.[0];
33
- if (!signatureEntry) {
34
- throw new Error("Signer did not return any signatures.");
35
- }
36
- let derivedPublicKey;
37
- if (signatureEntry.publicKey) {
38
- derivedPublicKey = signatureEntry.publicKey.toString();
39
- } else if (typeof options.signer.getAccountKey === "function") {
40
- const accountKey = await options.signer.getAccountKey();
41
- if (accountKey && typeof accountKey.toString === "function") {
42
- derivedPublicKey = accountKey.toString();
43
- }
44
- }
45
- return {
46
- signature: Buffer.from(signatureEntry.signature).toString("base64"),
47
- signatureKind: "raw",
48
- publicKey: derivedPublicKey
49
- };
12
+ async function getGuardEntitlements(client) {
13
+ const raw = await client.requestJson("/guard/entitlements", {
14
+ method: "GET"
15
+ });
16
+ return client.parseWithSchema(
17
+ raw,
18
+ guardSessionResponseSchema,
19
+ "guard entitlements response"
20
+ );
50
21
  }
51
- async function createLedgerChallenge(client, payload) {
52
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
53
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
54
- const raw = await client.requestJson("/auth/ledger/challenge", {
55
- method: "POST",
56
- headers: { "content-type": "application/json" },
57
- body: {
58
- accountId: payload.accountId,
59
- network
60
- }
22
+ async function getGuardBillingBalance(client) {
23
+ const raw = await client.requestJson("/guard/billing/balance", {
24
+ method: "GET"
61
25
  });
62
26
  return client.parseWithSchema(
63
27
  raw,
64
- ledgerChallengeResponseSchema,
65
- "ledger challenge response"
28
+ guardBalanceResponseSchema,
29
+ "guard billing balance response"
30
+ );
31
+ }
32
+ async function getGuardTrustByHash(client, sha256) {
33
+ const normalizedHash = sha256.trim();
34
+ if (!normalizedHash) {
35
+ throw new Error("sha256 is required");
36
+ }
37
+ const raw = await client.requestJson(
38
+ `/guard/trust/by-hash/${encodeURIComponent(normalizedHash)}`,
39
+ { method: "GET" }
40
+ );
41
+ return client.parseWithSchema(
42
+ raw,
43
+ guardTrustByHashResponseSchema,
44
+ "guard trust by hash response"
66
45
  );
67
46
  }
68
- async function verifyLedgerChallenge(client, payload) {
69
- const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);
70
- const network = resolvedNetwork.kind === "hedera" ? resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical : resolvedNetwork.canonical;
71
- const body = {
72
- challengeId: payload.challengeId,
73
- accountId: payload.accountId,
74
- network,
75
- signature: payload.signature
76
- };
77
- if (payload.signatureKind) {
78
- body.signatureKind = payload.signatureKind;
47
+ async function resolveGuardTrust(client, query) {
48
+ const params = new URLSearchParams();
49
+ if (query.ecosystem?.trim()) {
50
+ params.set("ecosystem", query.ecosystem.trim());
79
51
  }
80
- if (payload.publicKey) {
81
- body.publicKey = payload.publicKey;
52
+ if (query.name?.trim()) {
53
+ params.set("name", query.name.trim());
82
54
  }
83
- if (typeof payload.expiresInMinutes === "number") {
84
- body.expiresInMinutes = payload.expiresInMinutes;
55
+ if (query.version?.trim()) {
56
+ params.set("version", query.version.trim());
85
57
  }
86
- const raw = await client.requestJson("/auth/ledger/verify", {
87
- method: "POST",
88
- headers: { "content-type": "application/json" },
89
- body
90
- });
91
- const result = client.parseWithSchema(
58
+ const suffix = params.size > 0 ? `?${params.toString()}` : "";
59
+ const raw = await client.requestJson(
60
+ `/guard/trust/resolve${suffix}`,
61
+ { method: "GET" }
62
+ );
63
+ return client.parseWithSchema(
92
64
  raw,
93
- ledgerVerifyResponseSchema,
94
- "ledger verification response"
65
+ guardTrustResolveResponseSchema,
66
+ "guard trust resolve response"
95
67
  );
96
- client.setLedgerApiKey(result.key);
97
- return result;
98
68
  }
99
- async function authenticateWithLedger(client, options) {
100
- const challenge = await client.createLedgerChallenge({
101
- accountId: options.accountId,
102
- network: options.network
103
- });
104
- const signed = await resolveLedgerAuthSignature(challenge.message, options);
105
- const verification = await client.verifyLedgerChallenge({
106
- challengeId: challenge.challengeId,
107
- accountId: options.accountId,
108
- network: options.network,
109
- signature: signed.signature,
110
- signatureKind: signed.signatureKind,
111
- publicKey: signed.publicKey,
112
- expiresInMinutes: options.expiresInMinutes
69
+ async function getGuardRevocations(client) {
70
+ const raw = await client.requestJson("/guard/revocations", {
71
+ method: "GET"
113
72
  });
114
- return verification;
115
- }
116
- async function authenticateWithLedgerCredentials(client, options) {
117
- const {
118
- accountId,
119
- network,
120
- signer,
121
- sign,
122
- hederaPrivateKey,
123
- evmPrivateKey,
124
- expiresInMinutes,
125
- setAccountHeader = true,
126
- label,
127
- logger
128
- } = options;
129
- const resolvedNetwork = canonicalizeLedgerNetwork(network);
130
- const labelSuffix = label ? ` for ${label}` : "";
131
- const networkPayload = resolvedNetwork.canonical;
132
- const authOptions = {
133
- accountId,
134
- network: networkPayload,
135
- expiresInMinutes
136
- };
137
- if (sign) {
138
- authOptions.sign = sign;
139
- } else if (signer) {
140
- authOptions.signer = signer;
141
- } else if (hederaPrivateKey) {
142
- if (resolvedNetwork.kind !== "hedera" || !resolvedNetwork.hederaNetwork) {
143
- throw new Error(
144
- "hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks."
145
- );
146
- }
147
- authOptions.signer = await createPrivateKeySignerAsync({
148
- accountId,
149
- privateKey: hederaPrivateKey,
150
- network: resolvedNetwork.hederaNetwork
151
- });
152
- } else if (evmPrivateKey) {
153
- if (resolvedNetwork.kind !== "evm") {
154
- throw new Error(
155
- "evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>)."
156
- );
157
- }
158
- const formattedKey = evmPrivateKey.startsWith("0x") ? evmPrivateKey : `0x${evmPrivateKey}`;
159
- const account = await loadViemAccount(formattedKey);
160
- authOptions.sign = async (message) => ({
161
- signature: await account.signMessage({ message }),
162
- signatureKind: "evm",
163
- publicKey: account.publicKey
164
- });
165
- } else {
166
- throw new Error(
167
- "Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger."
168
- );
169
- }
170
- logger?.info?.(
171
- `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`
73
+ return client.parseWithSchema(
74
+ raw,
75
+ guardRevocationResponseSchema,
76
+ "guard revocations response"
172
77
  );
173
- const verification = await client.authenticateWithLedger(authOptions);
174
- if (setAccountHeader) {
175
- client.setDefaultHeader("x-account-id", verification.accountId);
176
- }
177
- logger?.info?.(
178
- `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`
78
+ }
79
+ async function syncGuardReceipts(client, payload) {
80
+ const raw = await client.requestJson("/guard/receipts/sync", {
81
+ method: "POST",
82
+ headers: { "content-type": "application/json" },
83
+ body: payload
84
+ });
85
+ return client.parseWithSchema(
86
+ raw,
87
+ guardReceiptSyncResponseSchema,
88
+ "guard receipt sync response"
179
89
  );
180
- return verification;
181
90
  }
182
91
  export {
183
- authenticateWithLedger,
184
- authenticateWithLedgerCredentials,
185
- createLedgerChallenge,
186
- verifyLedgerChallenge
92
+ getGuardBillingBalance,
93
+ getGuardEntitlements,
94
+ getGuardRevocations,
95
+ getGuardSession,
96
+ getGuardTrustByHash,
97
+ resolveGuardTrust,
98
+ syncGuardReceipts
187
99
  };
188
100
  //# sourceMappingURL=standards-sdk.es182.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es182.js","sources":["../../src/services/registry-broker/client/ledger-auth.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type { SignerSignature } from '@hashgraph/sdk';\nimport type {\n JsonObject,\n JsonValue,\n LedgerAuthenticationOptions,\n LedgerAuthenticationSignerResult,\n LedgerChallengeRequest,\n LedgerChallengeResponse,\n LedgerCredentialAuthOptions,\n LedgerVerifyRequest,\n LedgerVerifyResponse,\n} from '../types';\nimport {\n ledgerChallengeResponseSchema,\n ledgerVerifyResponseSchema,\n} from '../schemas';\nimport { canonicalizeLedgerNetwork } from '../ledger-network';\nimport { createPrivateKeySignerAsync } from '../private-key-signer';\nimport type { RegistryBrokerClient } from './base-client';\n\nasync function loadViemAccount(privateKey: `0x${string}`): Promise<{\n publicKey: string;\n signMessage: (input: { message: string }) => Promise<string>;\n}> {\n try {\n const viem = await import('viem/accounts');\n return viem.privateKeyToAccount(privateKey);\n } catch (error) {\n const err = new Error(\n 'EVM ledger authentication requires the optional dependency \"viem\". Install it to use evmPrivateKey flows.',\n );\n (err as { cause?: unknown }).cause = error;\n throw err;\n }\n}\n\nasync function resolveLedgerAuthSignature(\n message: string,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerAuthenticationSignerResult> {\n if (typeof options.sign === 'function') {\n const result = await options.sign(message);\n if (\n !result ||\n typeof result.signature !== 'string' ||\n result.signature.length === 0\n ) {\n throw new Error('Custom ledger signer failed to produce a signature.');\n }\n return result;\n }\n\n if (!options.signer || typeof options.signer.sign !== 'function') {\n throw new Error(\n 'Ledger authentication requires a Hedera Signer or custom sign function.',\n );\n }\n\n const payload = Buffer.from(message, 'utf8');\n const signatures: SignerSignature[] = await options.signer.sign([payload]);\n const signatureEntry = signatures?.[0];\n if (!signatureEntry) {\n throw new Error('Signer did not return any signatures.');\n }\n\n let derivedPublicKey: string | undefined;\n if (signatureEntry.publicKey) {\n derivedPublicKey = signatureEntry.publicKey.toString();\n } else if (typeof options.signer.getAccountKey === 'function') {\n const accountKey = await options.signer.getAccountKey();\n if (accountKey && typeof accountKey.toString === 'function') {\n derivedPublicKey = accountKey.toString();\n }\n }\n\n return {\n signature: Buffer.from(signatureEntry.signature).toString('base64'),\n signatureKind: 'raw',\n publicKey: derivedPublicKey,\n };\n}\n\nexport async function createLedgerChallenge(\n client: RegistryBrokerClient,\n payload: LedgerChallengeRequest,\n): Promise<LedgerChallengeResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const raw = await client.requestJson<JsonValue>('/auth/ledger/challenge', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: {\n accountId: payload.accountId,\n network,\n },\n });\n\n return client.parseWithSchema(\n raw,\n ledgerChallengeResponseSchema,\n 'ledger challenge response',\n );\n}\n\nexport async function verifyLedgerChallenge(\n client: RegistryBrokerClient,\n payload: LedgerVerifyRequest,\n): Promise<LedgerVerifyResponse> {\n const resolvedNetwork = canonicalizeLedgerNetwork(payload.network);\n const network =\n resolvedNetwork.kind === 'hedera'\n ? (resolvedNetwork.hederaNetwork ?? resolvedNetwork.canonical)\n : resolvedNetwork.canonical;\n const body: JsonObject = {\n challengeId: payload.challengeId,\n accountId: payload.accountId,\n network,\n signature: payload.signature,\n };\n\n if (payload.signatureKind) {\n body.signatureKind = payload.signatureKind;\n }\n if (payload.publicKey) {\n body.publicKey = payload.publicKey;\n }\n if (typeof payload.expiresInMinutes === 'number') {\n body.expiresInMinutes = payload.expiresInMinutes;\n }\n\n const raw = await client.requestJson<JsonValue>('/auth/ledger/verify', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body,\n });\n\n const result = client.parseWithSchema(\n raw,\n ledgerVerifyResponseSchema,\n 'ledger verification response',\n );\n\n client.setLedgerApiKey(result.key);\n return result;\n}\n\nexport async function authenticateWithLedger(\n client: RegistryBrokerClient,\n options: LedgerAuthenticationOptions,\n): Promise<LedgerVerifyResponse> {\n const challenge = await client.createLedgerChallenge({\n accountId: options.accountId,\n network: options.network,\n });\n const signed = await resolveLedgerAuthSignature(challenge.message, options);\n const verification = await client.verifyLedgerChallenge({\n challengeId: challenge.challengeId,\n accountId: options.accountId,\n network: options.network,\n signature: signed.signature,\n signatureKind: signed.signatureKind,\n publicKey: signed.publicKey,\n expiresInMinutes: options.expiresInMinutes,\n });\n return verification;\n}\n\nexport async function authenticateWithLedgerCredentials(\n client: RegistryBrokerClient,\n options: LedgerCredentialAuthOptions,\n): Promise<LedgerVerifyResponse> {\n const {\n accountId,\n network,\n signer,\n sign,\n hederaPrivateKey,\n evmPrivateKey,\n expiresInMinutes,\n setAccountHeader = true,\n label,\n logger,\n } = options;\n\n const resolvedNetwork = canonicalizeLedgerNetwork(network);\n const labelSuffix = label ? ` for ${label}` : '';\n\n const networkPayload = resolvedNetwork.canonical;\n\n const authOptions: LedgerAuthenticationOptions = {\n accountId,\n network: networkPayload,\n expiresInMinutes,\n };\n\n if (sign) {\n authOptions.sign = sign;\n } else if (signer) {\n authOptions.signer = signer;\n } else if (hederaPrivateKey) {\n if (resolvedNetwork.kind !== 'hedera' || !resolvedNetwork.hederaNetwork) {\n throw new Error(\n 'hederaPrivateKey can only be used with hedera:mainnet or hedera:testnet networks.',\n );\n }\n authOptions.signer = await createPrivateKeySignerAsync({\n accountId,\n privateKey: hederaPrivateKey,\n network: resolvedNetwork.hederaNetwork,\n });\n } else if (evmPrivateKey) {\n if (resolvedNetwork.kind !== 'evm') {\n throw new Error(\n 'evmPrivateKey can only be used with CAIP-2 EVM networks (eip155:<chainId>).',\n );\n }\n const formattedKey = evmPrivateKey.startsWith('0x')\n ? (evmPrivateKey as `0x${string}`)\n : (`0x${evmPrivateKey}` as `0x${string}`);\n const account = await loadViemAccount(formattedKey);\n authOptions.sign = async message => ({\n signature: await account.signMessage({ message }),\n signatureKind: 'evm',\n publicKey: account.publicKey,\n });\n } else {\n throw new Error(\n 'Provide a signer, sign function, hederaPrivateKey, or evmPrivateKey to authenticate with the ledger.',\n );\n }\n\n logger?.info?.(\n `Authenticating ledger account ${accountId} (${resolvedNetwork.canonical})${labelSuffix}...`,\n );\n const verification = await client.authenticateWithLedger(authOptions);\n if (setAccountHeader) {\n client.setDefaultHeader('x-account-id', verification.accountId);\n }\n logger?.info?.(\n `Ledger authentication complete${labelSuffix}. Issued key prefix: ${verification.apiKey.prefix}…${verification.apiKey.lastFour}`,\n );\n return verification;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es182.js","sources":["../../src/services/registry-broker/client/guard.ts"],"sourcesContent":["import type {\n GuardBalanceResponse,\n GuardReceiptSyncPayload,\n GuardReceiptSyncResponse,\n GuardRevocationResponse,\n GuardSessionResponse,\n GuardTrustByHashResponse,\n GuardTrustResolveQuery,\n GuardTrustResolveResponse,\n JsonValue,\n} from '../types';\nimport {\n guardBalanceResponseSchema,\n guardReceiptSyncResponseSchema,\n guardRevocationResponseSchema,\n guardSessionResponseSchema,\n guardTrustByHashResponseSchema,\n guardTrustResolveResponseSchema,\n} from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nexport async function getGuardSession(\n client: RegistryBrokerClient,\n): Promise<GuardSessionResponse> {\n const raw = await client.requestJson<JsonValue>('/guard/auth/session', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n guardSessionResponseSchema,\n 'guard session response',\n );\n}\n\nexport async function getGuardEntitlements(\n client: RegistryBrokerClient,\n): Promise<GuardSessionResponse> {\n const raw = await client.requestJson<JsonValue>('/guard/entitlements', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n guardSessionResponseSchema,\n 'guard entitlements response',\n );\n}\n\nexport async function getGuardBillingBalance(\n client: RegistryBrokerClient,\n): Promise<GuardBalanceResponse> {\n const raw = await client.requestJson<JsonValue>('/guard/billing/balance', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n guardBalanceResponseSchema,\n 'guard billing balance response',\n );\n}\n\nexport async function getGuardTrustByHash(\n client: RegistryBrokerClient,\n sha256: string,\n): Promise<GuardTrustByHashResponse> {\n const normalizedHash = sha256.trim();\n if (!normalizedHash) {\n throw new Error('sha256 is required');\n }\n const raw = await client.requestJson<JsonValue>(\n `/guard/trust/by-hash/${encodeURIComponent(normalizedHash)}`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n guardTrustByHashResponseSchema,\n 'guard trust by hash response',\n );\n}\n\nexport async function resolveGuardTrust(\n client: RegistryBrokerClient,\n query: GuardTrustResolveQuery,\n): Promise<GuardTrustResolveResponse> {\n const params = new URLSearchParams();\n if (query.ecosystem?.trim()) {\n params.set('ecosystem', query.ecosystem.trim());\n }\n if (query.name?.trim()) {\n params.set('name', query.name.trim());\n }\n if (query.version?.trim()) {\n params.set('version', query.version.trim());\n }\n const suffix = params.size > 0 ? `?${params.toString()}` : '';\n const raw = await client.requestJson<JsonValue>(\n `/guard/trust/resolve${suffix}`,\n { method: 'GET' },\n );\n return client.parseWithSchema(\n raw,\n guardTrustResolveResponseSchema,\n 'guard trust resolve response',\n );\n}\n\nexport async function getGuardRevocations(\n client: RegistryBrokerClient,\n): Promise<GuardRevocationResponse> {\n const raw = await client.requestJson<JsonValue>('/guard/revocations', {\n method: 'GET',\n });\n return client.parseWithSchema(\n raw,\n guardRevocationResponseSchema,\n 'guard revocations response',\n );\n}\n\nexport async function syncGuardReceipts(\n client: RegistryBrokerClient,\n payload: GuardReceiptSyncPayload,\n): Promise<GuardReceiptSyncResponse> {\n const raw = await client.requestJson<JsonValue>('/guard/receipts/sync', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: payload,\n });\n return client.parseWithSchema(\n raw,\n guardReceiptSyncResponseSchema,\n 'guard receipt sync response',\n );\n}\n"],"names":[],"mappings":";AAqBA,eAAsB,gBACpB,QAC+B;AAC/B,QAAM,MAAM,MAAM,OAAO,YAAuB,uBAAuB;AAAA,IACrE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,qBACpB,QAC+B;AAC/B,QAAM,MAAM,MAAM,OAAO,YAAuB,uBAAuB;AAAA,IACrE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,uBACpB,QAC+B;AAC/B,QAAM,MAAM,MAAM,OAAO,YAAuB,0BAA0B;AAAA,IACxE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,oBACpB,QACA,QACmC;AACnC,QAAM,iBAAiB,OAAO,KAAA;AAC9B,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,wBAAwB,mBAAmB,cAAc,CAAC;AAAA,IAC1D,EAAE,QAAQ,MAAA;AAAA,EAAM;AAElB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,kBACpB,QACA,OACoC;AACpC,QAAM,SAAS,IAAI,gBAAA;AACnB,MAAI,MAAM,WAAW,QAAQ;AAC3B,WAAO,IAAI,aAAa,MAAM,UAAU,MAAM;AAAA,EAChD;AACA,MAAI,MAAM,MAAM,QAAQ;AACtB,WAAO,IAAI,QAAQ,MAAM,KAAK,MAAM;AAAA,EACtC;AACA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,IAAI,WAAW,MAAM,QAAQ,MAAM;AAAA,EAC5C;AACA,QAAM,SAAS,OAAO,OAAO,IAAI,IAAI,OAAO,UAAU,KAAK;AAC3D,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB,uBAAuB,MAAM;AAAA,IAC7B,EAAE,QAAQ,MAAA;AAAA,EAAM;AAElB,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,oBACpB,QACkC;AAClC,QAAM,MAAM,MAAM,OAAO,YAAuB,sBAAsB;AAAA,IACpE,QAAQ;AAAA,EAAA,CACT;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,kBACpB,QACA,SACmC;AACnC,QAAM,MAAM,MAAM,OAAO,YAAuB,wBAAwB;AAAA,IACtE,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAC3B,MAAM;AAAA,EAAA,CACP;AACD,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}