@atbas/m-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +364 -0
- package/dist/builder/transaction-builder.d.ts +53 -0
- package/dist/builder/transaction-builder.d.ts.map +1 -0
- package/dist/builder/transaction-builder.js +159 -0
- package/dist/builder/transaction-builder.js.map +1 -0
- package/dist/catalogue/default-catalogue.d.ts +18 -0
- package/dist/catalogue/default-catalogue.d.ts.map +1 -0
- package/dist/catalogue/default-catalogue.js +21 -0
- package/dist/catalogue/default-catalogue.js.map +1 -0
- package/dist/catalogue/endpoints.d.ts +22 -0
- package/dist/catalogue/endpoints.d.ts.map +1 -0
- package/dist/catalogue/endpoints.js +24 -0
- package/dist/catalogue/endpoints.js.map +1 -0
- package/dist/catalogue/flows.d.ts +32 -0
- package/dist/catalogue/flows.d.ts.map +1 -0
- package/dist/catalogue/flows.js +64 -0
- package/dist/catalogue/flows.js.map +1 -0
- package/dist/catalogue/hash-options.d.ts +112 -0
- package/dist/catalogue/hash-options.d.ts.map +1 -0
- package/dist/catalogue/hash-options.js +151 -0
- package/dist/catalogue/hash-options.js.map +1 -0
- package/dist/catalogue/types.d.ts +279 -0
- package/dist/catalogue/types.d.ts.map +1 -0
- package/dist/catalogue/types.js +360 -0
- package/dist/catalogue/types.js.map +1 -0
- package/dist/codegen/generate.d.ts +14 -0
- package/dist/codegen/generate.d.ts.map +1 -0
- package/dist/codegen/generate.js +490 -0
- package/dist/codegen/generate.js.map +1 -0
- package/dist/codegen/languages/node.d.ts +3 -0
- package/dist/codegen/languages/node.d.ts.map +1 -0
- package/dist/codegen/languages/node.js +32 -0
- package/dist/codegen/languages/node.js.map +1 -0
- package/dist/codegen/languages/php.d.ts +3 -0
- package/dist/codegen/languages/php.d.ts.map +1 -0
- package/dist/codegen/languages/php.js +27 -0
- package/dist/codegen/languages/php.js.map +1 -0
- package/dist/codegen/languages/python.d.ts +3 -0
- package/dist/codegen/languages/python.d.ts.map +1 -0
- package/dist/codegen/languages/python.js +27 -0
- package/dist/codegen/languages/python.js.map +1 -0
- package/dist/codegen/renderer.d.ts +24 -0
- package/dist/codegen/renderer.d.ts.map +1 -0
- package/dist/codegen/renderer.js +59 -0
- package/dist/codegen/renderer.js.map +1 -0
- package/dist/codegen/types.d.ts +50 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +5 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/config/credentials.d.ts +64 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +216 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/environment.d.ts +23 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +54 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/core/dependencies.d.ts +43 -0
- package/dist/core/dependencies.d.ts.map +1 -0
- package/dist/core/dependencies.js +2 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/registry.d.ts +33 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +13 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/server.d.ts +61 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +90 -0
- package/dist/core/server.js.map +1 -0
- package/dist/dependencies.d.ts +28 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +2 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/diagnostics/diagnose.d.ts +43 -0
- package/dist/diagnostics/diagnose.d.ts.map +1 -0
- package/dist/diagnostics/diagnose.js +121 -0
- package/dist/diagnostics/diagnose.js.map +1 -0
- package/dist/domain/amount.d.ts +157 -0
- package/dist/domain/amount.d.ts.map +1 -0
- package/dist/domain/amount.js +275 -0
- package/dist/domain/amount.js.map +1 -0
- package/dist/domain/datetime.d.ts +95 -0
- package/dist/domain/datetime.d.ts.map +1 -0
- package/dist/domain/datetime.js +211 -0
- package/dist/domain/datetime.js.map +1 -0
- package/dist/domain/response-codes.d.ts +116 -0
- package/dist/domain/response-codes.d.ts.map +1 -0
- package/dist/domain/response-codes.js +380 -0
- package/dist/domain/response-codes.js.map +1 -0
- package/dist/domain/secure-hash.d.ts +78 -0
- package/dist/domain/secure-hash.d.ts.map +1 -0
- package/dist/domain/secure-hash.js +69 -0
- package/dist/domain/secure-hash.js.map +1 -0
- package/dist/domain/signature/jazzcash.d.ts +56 -0
- package/dist/domain/signature/jazzcash.d.ts.map +1 -0
- package/dist/domain/signature/jazzcash.js +214 -0
- package/dist/domain/signature/jazzcash.js.map +1 -0
- package/dist/domain/signature/registry.d.ts +69 -0
- package/dist/domain/signature/registry.d.ts.map +1 -0
- package/dist/domain/signature/registry.js +92 -0
- package/dist/domain/signature/registry.js.map +1 -0
- package/dist/domain/signature/scheme.d.ts +349 -0
- package/dist/domain/signature/scheme.d.ts.map +1 -0
- package/dist/domain/signature/scheme.js +398 -0
- package/dist/domain/signature/scheme.js.map +1 -0
- package/dist/domain/txn-ref.d.ts +76 -0
- package/dist/domain/txn-ref.d.ts.map +1 -0
- package/dist/domain/txn-ref.js +126 -0
- package/dist/domain/txn-ref.js.map +1 -0
- package/dist/domain/types.d.ts +45 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +70 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/errors.d.ts +84 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +87 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway/checkout-form.d.ts +16 -0
- package/dist/gateway/checkout-form.d.ts.map +1 -0
- package/dist/gateway/checkout-form.js +103 -0
- package/dist/gateway/checkout-form.js.map +1 -0
- package/dist/gateway/checkout-output.d.ts +70 -0
- package/dist/gateway/checkout-output.d.ts.map +1 -0
- package/dist/gateway/checkout-output.js +199 -0
- package/dist/gateway/checkout-output.js.map +1 -0
- package/dist/gateway/guards.d.ts +37 -0
- package/dist/gateway/guards.d.ts.map +1 -0
- package/dist/gateway/guards.js +44 -0
- package/dist/gateway/guards.js.map +1 -0
- package/dist/gateway/http-client.d.ts +42 -0
- package/dist/gateway/http-client.d.ts.map +1 -0
- package/dist/gateway/http-client.js +153 -0
- package/dist/gateway/http-client.js.map +1 -0
- package/dist/gateway/rest-client.d.ts +42 -0
- package/dist/gateway/rest-client.d.ts.map +1 -0
- package/dist/gateway/rest-client.js +241 -0
- package/dist/gateway/rest-client.js.map +1 -0
- package/dist/gateway/transport.d.ts +31 -0
- package/dist/gateway/transport.d.ts.map +1 -0
- package/dist/gateway/transport.js +73 -0
- package/dist/gateway/transport.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/install/cli.d.ts +38 -0
- package/dist/install/cli.d.ts.map +1 -0
- package/dist/install/cli.js +274 -0
- package/dist/install/cli.js.map +1 -0
- package/dist/install/harnesses.d.ts +74 -0
- package/dist/install/harnesses.d.ts.map +1 -0
- package/dist/install/harnesses.js +263 -0
- package/dist/install/harnesses.js.map +1 -0
- package/dist/knowledge/corpus.d.ts +15 -0
- package/dist/knowledge/corpus.d.ts.map +1 -0
- package/dist/knowledge/corpus.js +129 -0
- package/dist/knowledge/corpus.js.map +1 -0
- package/dist/knowledge/search.d.ts +29 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +181 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/source.d.ts +60 -0
- package/dist/knowledge/source.d.ts.map +1 -0
- package/dist/knowledge/source.js +91 -0
- package/dist/knowledge/source.js.map +1 -0
- package/dist/knowledge/types.d.ts +40 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +19 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/paths.d.ts +26 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +106 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompts/integration-walkthrough.d.ts +11 -0
- package/dist/prompts/integration-walkthrough.d.ts.map +1 -0
- package/dist/prompts/integration-walkthrough.js +52 -0
- package/dist/prompts/integration-walkthrough.js.map +1 -0
- package/dist/prompts/register.d.ts +4 -0
- package/dist/prompts/register.d.ts.map +1 -0
- package/dist/prompts/register.js +4 -0
- package/dist/prompts/register.js.map +1 -0
- package/dist/registry.d.ts +14 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/dist/resources/knowledge-resources.d.ts +5 -0
- package/dist/resources/knowledge-resources.d.ts.map +1 -0
- package/dist/resources/knowledge-resources.js +121 -0
- package/dist/resources/knowledge-resources.js.map +1 -0
- package/dist/resources/register.d.ts +4 -0
- package/dist/resources/register.d.ts.map +1 -0
- package/dist/resources/register.js +8 -0
- package/dist/resources/register.js.map +1 -0
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +56 -0
- package/dist/server.js.map +1 -0
- package/dist/telemetry/logger.d.ts +31 -0
- package/dist/telemetry/logger.d.ts.map +1 -0
- package/dist/telemetry/logger.js +67 -0
- package/dist/telemetry/logger.js.map +1 -0
- package/dist/telemetry/redaction.d.ts +88 -0
- package/dist/telemetry/redaction.d.ts.map +1 -0
- package/dist/telemetry/redaction.js +238 -0
- package/dist/telemetry/redaction.js.map +1 -0
- package/dist/tools/build-transaction-parameters.d.ts +10 -0
- package/dist/tools/build-transaction-parameters.d.ts.map +1 -0
- package/dist/tools/build-transaction-parameters.js +154 -0
- package/dist/tools/build-transaction-parameters.js.map +1 -0
- package/dist/tools/call-context.d.ts +47 -0
- package/dist/tools/call-context.d.ts.map +1 -0
- package/dist/tools/call-context.js +15 -0
- package/dist/tools/call-context.js.map +1 -0
- package/dist/tools/codegen-tools.d.ts +4 -0
- package/dist/tools/codegen-tools.d.ts.map +1 -0
- package/dist/tools/codegen-tools.js +131 -0
- package/dist/tools/codegen-tools.js.map +1 -0
- package/dist/tools/credential-tools.d.ts +32 -0
- package/dist/tools/credential-tools.d.ts.map +1 -0
- package/dist/tools/credential-tools.js +65 -0
- package/dist/tools/credential-tools.js.map +1 -0
- package/dist/tools/descriptor.d.ts +52 -0
- package/dist/tools/descriptor.d.ts.map +1 -0
- package/dist/tools/descriptor.js +2 -0
- package/dist/tools/descriptor.js.map +1 -0
- package/dist/tools/diagnostic-tools.d.ts +3 -0
- package/dist/tools/diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/diagnostic-tools.js +128 -0
- package/dist/tools/diagnostic-tools.js.map +1 -0
- package/dist/tools/gateway-tools.d.ts +6 -0
- package/dist/tools/gateway-tools.d.ts.map +1 -0
- package/dist/tools/gateway-tools.js +381 -0
- package/dist/tools/gateway-tools.js.map +1 -0
- package/dist/tools/hash-tools.d.ts +5 -0
- package/dist/tools/hash-tools.d.ts.map +1 -0
- package/dist/tools/hash-tools.js +238 -0
- package/dist/tools/hash-tools.js.map +1 -0
- package/dist/tools/knowledge-tools.d.ts +7 -0
- package/dist/tools/knowledge-tools.d.ts.map +1 -0
- package/dist/tools/knowledge-tools.js +247 -0
- package/dist/tools/knowledge-tools.js.map +1 -0
- package/dist/tools/onboarding-checklist.d.ts +3 -0
- package/dist/tools/onboarding-checklist.d.ts.map +1 -0
- package/dist/tools/onboarding-checklist.js +141 -0
- package/dist/tools/onboarding-checklist.js.map +1 -0
- package/dist/tools/register.d.ts +60 -0
- package/dist/tools/register.d.ts.map +1 -0
- package/dist/tools/register.js +145 -0
- package/dist/tools/register.js.map +1 -0
- package/dist/tools/tool-kit.d.ts +88 -0
- package/dist/tools/tool-kit.d.ts.map +1 -0
- package/dist/tools/tool-kit.js +297 -0
- package/dist/tools/tool-kit.js.map +1 -0
- package/dist/validation/payload-validator.d.ts +29 -0
- package/dist/validation/payload-validator.d.ts.map +1 -0
- package/dist/validation/payload-validator.js +79 -0
- package/dist/validation/payload-validator.js.map +1 -0
- package/dist/validation/rules/amount.d.ts +3 -0
- package/dist/validation/rules/amount.d.ts.map +1 -0
- package/dist/validation/rules/amount.js +77 -0
- package/dist/validation/rules/amount.js.map +1 -0
- package/dist/validation/rules/bill-reference.d.ts +10 -0
- package/dist/validation/rules/bill-reference.d.ts.map +1 -0
- package/dist/validation/rules/bill-reference.js +34 -0
- package/dist/validation/rules/bill-reference.js.map +1 -0
- package/dist/validation/rules/cnic.d.ts +3 -0
- package/dist/validation/rules/cnic.d.ts.map +1 -0
- package/dist/validation/rules/cnic.js +42 -0
- package/dist/validation/rules/cnic.js.map +1 -0
- package/dist/validation/rules/constants.d.ts +9 -0
- package/dist/validation/rules/constants.d.ts.map +1 -0
- package/dist/validation/rules/constants.js +28 -0
- package/dist/validation/rules/constants.js.map +1 -0
- package/dist/validation/rules/constraints.d.ts +3 -0
- package/dist/validation/rules/constraints.d.ts.map +1 -0
- package/dist/validation/rules/constraints.js +113 -0
- package/dist/validation/rules/constraints.js.map +1 -0
- package/dist/validation/rules/datetime.d.ts +3 -0
- package/dist/validation/rules/datetime.d.ts.map +1 -0
- package/dist/validation/rules/datetime.js +49 -0
- package/dist/validation/rules/datetime.js.map +1 -0
- package/dist/validation/rules/empty-string.d.ts +13 -0
- package/dist/validation/rules/empty-string.d.ts.map +1 -0
- package/dist/validation/rules/empty-string.js +32 -0
- package/dist/validation/rules/empty-string.js.map +1 -0
- package/dist/validation/rules/expiry.d.ts +3 -0
- package/dist/validation/rules/expiry.d.ts.map +1 -0
- package/dist/validation/rules/expiry.js +52 -0
- package/dist/validation/rules/expiry.js.map +1 -0
- package/dist/validation/rules/msisdn.d.ts +3 -0
- package/dist/validation/rules/msisdn.d.ts.map +1 -0
- package/dist/validation/rules/msisdn.js +45 -0
- package/dist/validation/rules/msisdn.js.map +1 -0
- package/dist/validation/rules/presence.d.ts +3 -0
- package/dist/validation/rules/presence.d.ts.map +1 -0
- package/dist/validation/rules/presence.js +90 -0
- package/dist/validation/rules/presence.js.map +1 -0
- package/dist/validation/rules/return-url.d.ts +14 -0
- package/dist/validation/rules/return-url.d.ts.map +1 -0
- package/dist/validation/rules/return-url.js +58 -0
- package/dist/validation/rules/return-url.js.map +1 -0
- package/dist/validation/rules/tool-argument.d.ts +16 -0
- package/dist/validation/rules/tool-argument.d.ts.map +1 -0
- package/dist/validation/rules/tool-argument.js +38 -0
- package/dist/validation/rules/tool-argument.js.map +1 -0
- package/dist/validation/rules/txn-ref.d.ts +3 -0
- package/dist/validation/rules/txn-ref.d.ts.map +1 -0
- package/dist/validation/rules/txn-ref.js +47 -0
- package/dist/validation/rules/txn-ref.js.map +1 -0
- package/dist/validation/rules/unknown-fields.d.ts +10 -0
- package/dist/validation/rules/unknown-fields.d.ts.map +1 -0
- package/dist/validation/rules/unknown-fields.js +29 -0
- package/dist/validation/rules/unknown-fields.js.map +1 -0
- package/dist/validation/types.d.ts +36 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +12 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/version.d.ts +23 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/knowledge/diagnostics/symptoms.json +321 -0
- package/knowledge/docs/bnpl-guide.md +77 -0
- package/knowledge/docs/card-page-redirection.md +67 -0
- package/knowledge/docs/card-refund.md +91 -0
- package/knowledge/docs/hmac-sha256-calculation.md +72 -0
- package/knowledge/docs/index.json +189 -0
- package/knowledge/docs/ipn-implementation.md +89 -0
- package/knowledge/docs/mwallet-recurring.md +117 -0
- package/knowledge/docs/mwallet-refund.md +65 -0
- package/knowledge/docs/mwallet-rest-v1-1.md +126 -0
- package/knowledge/docs/mwallet-rest-v2-0-cnic.md +113 -0
- package/knowledge/docs/portal-guide.md +45 -0
- package/knowledge/docs/shopify-guide.md +74 -0
- package/knowledge/docs/status-inquiry-2025-26.md +32 -0
- package/knowledge/docs/status-inquiry.md +111 -0
- package/knowledge/docs/wordpress-guide.md +49 -0
- package/knowledge/flow.schema.json +390 -0
- package/knowledge/flows/bnpl-page-redirection-v1.1.json +211 -0
- package/knowledge/flows/card-page-redirection-v1.1.json +211 -0
- package/knowledge/flows/mwallet-rest-v1.1.json +187 -0
- package/knowledge/flows/mwallet-rest-v2.0-cnic.json +197 -0
- package/knowledge/flows/mwallet-token-pay-v4.0.json +130 -0
- package/knowledge/flows/refund-bnpl.json +105 -0
- package/knowledge/flows/refund-card-v1.1.json +112 -0
- package/knowledge/flows/refund-card-v2.0.json +121 -0
- package/knowledge/flows/refund-mwallet-v1.1.json +106 -0
- package/knowledge/flows/status-inquiry-v1.1.json +102 -0
- package/knowledge/flows/status-inquiry-v2.0.json +103 -0
- package/knowledge/flows/token-delete-v1.json +85 -0
- package/knowledge/flows/token-inquiry-v1.json +85 -0
- package/knowledge/flows/wallet-linking-portal.json +103 -0
- package/knowledge/templates/node/checkout-redirect.tmpl +166 -0
- package/knowledge/templates/node/ipn-handler.tmpl +108 -0
- package/knowledge/templates/node/rest-client.tmpl +197 -0
- package/knowledge/templates/node/wallet-linking.tmpl +147 -0
- package/knowledge/templates/php/checkout-redirect.tmpl +149 -0
- package/knowledge/templates/php/ipn-handler.tmpl +105 -0
- package/knowledge/templates/php/rest-client.tmpl +191 -0
- package/knowledge/templates/php/wallet-linking.tmpl +137 -0
- package/knowledge/templates/python/checkout-redirect.tmpl +148 -0
- package/knowledge/templates/python/ipn-handler.tmpl +110 -0
- package/knowledge/templates/python/rest-client.tmpl +179 -0
- package/knowledge/templates/python/wallet-linking.tmpl +133 -0
- package/package.json +84 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { buildTransaction } from '../builder/transaction-builder.js';
|
|
3
|
+
import { resolveEndpoint } from '../catalogue/endpoints.js';
|
|
4
|
+
import { UNKNOWN_FLOW_RESPONSE_HASH_OPTIONS } from '../catalogue/hash-options.js';
|
|
5
|
+
import { JAZZCASH_ENVIRONMENTS } from '../config/environment.js';
|
|
6
|
+
import { classifyResponse } from '../domain/response-codes.js';
|
|
7
|
+
import { computeSecureHash, hashesMatch } from '../domain/secure-hash.js';
|
|
8
|
+
import { minutesSinceTxnDateTime, STATUS_INQUIRY_MINIMUM_WAIT_MINUTES } from '../domain/datetime.js';
|
|
9
|
+
import { JazzCashValidationError } from '../errors.js';
|
|
10
|
+
import { renderCheckoutForm } from '../gateway/checkout-form.js';
|
|
11
|
+
import { resolveCheckoutTarget, writeCheckoutForm } from '../gateway/checkout-output.js';
|
|
12
|
+
import { guardGatewayCall } from '../gateway/guards.js';
|
|
13
|
+
import { executeFlow } from '../gateway/rest-client.js';
|
|
14
|
+
import { describeTransportMismatch } from '../gateway/transport.js';
|
|
15
|
+
import { formatValidationResult } from '../validation/payload-validator.js';
|
|
16
|
+
import { bulletList, citations, resolveEnvironment, resolveIntegritySalt, safeHandler, toolResult, } from './tool-kit.js';
|
|
17
|
+
/**
|
|
18
|
+
* Gateway execution tools.
|
|
19
|
+
*
|
|
20
|
+
* These are the only tools that reach the network, and the only ones that can
|
|
21
|
+
* move money. Every one of them requires an explicit environment.
|
|
22
|
+
*/
|
|
23
|
+
const environmentSchema = z
|
|
24
|
+
.enum(JAZZCASH_ENVIRONMENTS)
|
|
25
|
+
.describe('REQUIRED. Which credential profile to use. Sandbox and production share the same URL, so this cannot be inferred.');
|
|
26
|
+
const confirmLiveSchema = z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Must be true to run a money-moving flow against production. The server must also have been started with JAZZCASH_ALLOW_LIVE=true.');
|
|
30
|
+
function renderCallResult(result) {
|
|
31
|
+
return [
|
|
32
|
+
`# ${result.flowId} — ${result.classification.classification.toUpperCase()}`,
|
|
33
|
+
'',
|
|
34
|
+
result.warnings.length > 0 ? `${bulletList(result.warnings)}\n` : '',
|
|
35
|
+
`Environment: ${result.environment}`,
|
|
36
|
+
`Endpoint: ${result.endpoint}`,
|
|
37
|
+
`HTTP: ${String(result.httpStatus)} in ${String(result.durationMs)} ms`,
|
|
38
|
+
'',
|
|
39
|
+
'## Outcome',
|
|
40
|
+
result.classification.reason,
|
|
41
|
+
result.classification.message === undefined ? '' : `Gateway message: ${result.classification.message}`,
|
|
42
|
+
'',
|
|
43
|
+
'## Response',
|
|
44
|
+
'```json',
|
|
45
|
+
JSON.stringify(result.response, null, 2),
|
|
46
|
+
'```',
|
|
47
|
+
'',
|
|
48
|
+
`## Response hash: ${result.responseHash.verdict}`,
|
|
49
|
+
result.responseHash.note,
|
|
50
|
+
'',
|
|
51
|
+
'## Next steps',
|
|
52
|
+
bulletList([...result.nextSteps]),
|
|
53
|
+
'',
|
|
54
|
+
'## Request sent (credentials redacted)',
|
|
55
|
+
'```json',
|
|
56
|
+
JSON.stringify(result.requestPreview, null, 2),
|
|
57
|
+
'```',
|
|
58
|
+
]
|
|
59
|
+
.filter((line) => line !== '')
|
|
60
|
+
.join('\n');
|
|
61
|
+
}
|
|
62
|
+
export const registerSendGatewayRequest = (server, deps) => {
|
|
63
|
+
server.registerTool('jazzcash_send_gateway_request', {
|
|
64
|
+
title: 'Send a request to the JazzCash gateway',
|
|
65
|
+
description: 'Validate, sign and send a REST request, then verify the response hash and classify the outcome. Covers MWallet payments, token payment, token inquiry and delete, status inquiry, and all refund variants. Requires an explicit environment; production money movement requires a dual opt-in.',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
flowId: z.string().describe('REST flow to call, e.g. "status-inquiry-v2.0".'),
|
|
68
|
+
environment: environmentSchema,
|
|
69
|
+
parameters: z
|
|
70
|
+
.record(z.string(), z.union([z.string(), z.number(), z.null()]))
|
|
71
|
+
.describe('Complete payload WITHOUT pp_SecureHash, which is computed here. Use jazzcash_build_transaction_parameters to assemble it.'),
|
|
72
|
+
confirmLiveEnvironment: confirmLiveSchema,
|
|
73
|
+
},
|
|
74
|
+
}, safeHandler(deps, 'jazzcash_send_gateway_request', async ({ flowId, environment, parameters, confirmLiveEnvironment }) => {
|
|
75
|
+
const flow = deps.catalogue.get(flowId);
|
|
76
|
+
const result = await executeFlow(deps, {
|
|
77
|
+
flow,
|
|
78
|
+
environment,
|
|
79
|
+
parameters,
|
|
80
|
+
confirmLiveEnvironment,
|
|
81
|
+
});
|
|
82
|
+
return toolResult(`${renderCallResult(result)}${citations(flow.docRefs)}`, {
|
|
83
|
+
structuredContent: {
|
|
84
|
+
flowId: result.flowId,
|
|
85
|
+
environment: result.environment,
|
|
86
|
+
classification: result.classification.classification,
|
|
87
|
+
httpStatus: result.httpStatus,
|
|
88
|
+
response: result.response,
|
|
89
|
+
responseHash: result.responseHash,
|
|
90
|
+
nextSteps: result.nextSteps,
|
|
91
|
+
warnings: result.warnings,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
// Refused before the payload is signed or transmitted. This is the tool
|
|
96
|
+
// that would otherwise put the value on the wire as well as in the
|
|
97
|
+
// transcript, and echo it back in the request preview.
|
|
98
|
+
{ payloadArguments: ['parameters'], flowFrom: 'flowId' }));
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Sandbox is the only environment this tool accepts.
|
|
102
|
+
*
|
|
103
|
+
* The name, title and description all promise a sandbox test, so accepting
|
|
104
|
+
* `production` would make a money-moving call reachable from a tool nobody reads
|
|
105
|
+
* as dangerous. A live transaction is a deliberate act and belongs in
|
|
106
|
+
* `jazzcash_send_gateway_request`, which says so in its own description.
|
|
107
|
+
*/
|
|
108
|
+
const sandboxOnlySchema = z
|
|
109
|
+
.literal('sandbox')
|
|
110
|
+
.describe('REQUIRED. Must be "sandbox". Use jazzcash_send_gateway_request for a production transaction.');
|
|
111
|
+
export const registerRunSandboxSmokeTest = (server, deps) => {
|
|
112
|
+
server.registerTool('jazzcash_run_sandbox_smoke_test', {
|
|
113
|
+
title: 'Run a JazzCash sandbox smoke test',
|
|
114
|
+
description: 'Build, validate, sign, send and interpret one SANDBOX transaction in a single step, then say exactly how to confirm the outcome. The fastest way to prove an integration works end to end. Sandbox only: production is refused, so use jazzcash_send_gateway_request with its dual opt-in for a live transaction.',
|
|
115
|
+
inputSchema: {
|
|
116
|
+
flowId: z.string().describe('REST flow to exercise, e.g. "mwallet-rest-v1.1".'),
|
|
117
|
+
environment: sandboxOnlySchema,
|
|
118
|
+
amount: z.union([z.string(), z.number()]).optional().describe('Amount in major units, e.g. "1.00".'),
|
|
119
|
+
description: z.string().optional().describe('Order description.'),
|
|
120
|
+
extras: z
|
|
121
|
+
.record(z.string(), z.string())
|
|
122
|
+
.optional()
|
|
123
|
+
.describe('Flow-specific fields, e.g. { "ppmpf_1": "03123456789" } or { "pp_CNIC": "123456" }.'),
|
|
124
|
+
},
|
|
125
|
+
}, safeHandler(deps, 'jazzcash_run_sandbox_smoke_test', async ({ flowId, environment, amount, description, extras }) => {
|
|
126
|
+
const flow = deps.catalogue.get(flowId);
|
|
127
|
+
// `environment` is pinned to sandbox by the schema, so the live opt-in can
|
|
128
|
+
// never be satisfied here; the guard still runs for its credential and
|
|
129
|
+
// refund-capability checks.
|
|
130
|
+
const { profile } = guardGatewayCall(deps, { flow, environment, confirmLiveEnvironment: undefined });
|
|
131
|
+
const built = buildTransaction(flow, { amount: amount ?? '1.00', description: description ?? 'JazzCash MCP smoke test', extras }, profile);
|
|
132
|
+
if (!built.validation.valid) {
|
|
133
|
+
return toolResult([
|
|
134
|
+
`Could not build a ${flow.id} payload, so nothing was sent.`,
|
|
135
|
+
'',
|
|
136
|
+
formatValidationResult(built.validation),
|
|
137
|
+
].join('\n'), { isError: true, structuredContent: { flowId: flow.id, sent: false, errors: built.validation.errors } });
|
|
138
|
+
}
|
|
139
|
+
// buildTransaction signs the payload; executeFlow signs again from the
|
|
140
|
+
// validated map, so the hash is stripped here rather than sent twice.
|
|
141
|
+
const { pp_SecureHash: _discarded, ...unsigned } = built.parameters;
|
|
142
|
+
const result = await executeFlow(deps, {
|
|
143
|
+
flow,
|
|
144
|
+
environment,
|
|
145
|
+
parameters: unsigned,
|
|
146
|
+
});
|
|
147
|
+
const reference = built.parameters['pp_TxnRefNo'] ?? '';
|
|
148
|
+
return toolResult([
|
|
149
|
+
renderCallResult(result),
|
|
150
|
+
'',
|
|
151
|
+
'## How to confirm this independently',
|
|
152
|
+
reference === ''
|
|
153
|
+
? 'This flow carries no transaction reference to follow up.'
|
|
154
|
+
: `Wait at least ${String(STATUS_INQUIRY_MINIMUM_WAIT_MINUTES)} minutes, then call jazzcash_send_gateway_request with flowId "status-inquiry-v2.0" and pp_TxnRefNo "${reference}". Read pp_PaymentResponseCode, not pp_ResponseCode: 121 means the money moved.`,
|
|
155
|
+
citations(flow.docRefs),
|
|
156
|
+
].join('\n'), {
|
|
157
|
+
structuredContent: {
|
|
158
|
+
flowId: flow.id,
|
|
159
|
+
sent: true,
|
|
160
|
+
environment,
|
|
161
|
+
txnRefNo: reference,
|
|
162
|
+
classification: result.classification.classification,
|
|
163
|
+
response: result.response,
|
|
164
|
+
responseHash: result.responseHash,
|
|
165
|
+
followUpAfterMinutes: STATUS_INQUIRY_MINIMUM_WAIT_MINUTES,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
},
|
|
169
|
+
// Refused ahead of the gateway guard: a field this server must not accept
|
|
170
|
+
// is a property of the call, not of the credentials it would have used.
|
|
171
|
+
{ payloadArguments: ['extras'], flowFrom: 'flowId' }));
|
|
172
|
+
};
|
|
173
|
+
export const registerBuildCheckoutForm = (server, deps) => {
|
|
174
|
+
server.registerTool('jazzcash_build_checkout_form', {
|
|
175
|
+
title: 'Build a signed JazzCash checkout form for manual testing',
|
|
176
|
+
description: 'Produce a signed, self-contained HTML page for a browser flow (card checkout, BNPL, wallet linking). These cannot be automated: the customer must complete them in a browser with card details or an MPIN. Writes the page to disk and explains what to do next.',
|
|
177
|
+
inputSchema: {
|
|
178
|
+
flowId: z.string().describe('Form-post flow, e.g. "card-page-redirection-v1.1".'),
|
|
179
|
+
environment: environmentSchema,
|
|
180
|
+
amount: z.union([z.string(), z.number()]).optional().describe('Amount in major units, e.g. "1.00".'),
|
|
181
|
+
description: z.string().optional().describe('Order description shown to the customer.'),
|
|
182
|
+
billReference: z.string().optional().describe('Alphanumeric bill reference. Generated if omitted.'),
|
|
183
|
+
extras: z
|
|
184
|
+
.record(z.string(), z.string())
|
|
185
|
+
.optional()
|
|
186
|
+
.describe('Flow-specific fields, e.g. { "pp_MSISDN": "03123456789" }.'),
|
|
187
|
+
outputPath: z
|
|
188
|
+
.string()
|
|
189
|
+
.optional()
|
|
190
|
+
.describe('File name, or a path relative to the server output directory, for the generated page. Absolute paths and paths escaping that directory are refused. Defaults to <flowId>-<environment>.html.'),
|
|
191
|
+
confirmLiveEnvironment: confirmLiveSchema,
|
|
192
|
+
},
|
|
193
|
+
}, safeHandler(deps, 'jazzcash_build_checkout_form', ({ flowId, environment, amount, description, billReference, extras, outputPath, confirmLiveEnvironment }) => {
|
|
194
|
+
const flow = deps.catalogue.get(flowId);
|
|
195
|
+
if (flow.transport !== 'form-post') {
|
|
196
|
+
throw new JazzCashValidationError(describeTransportMismatch(flow, 'form-post'));
|
|
197
|
+
}
|
|
198
|
+
// Resolved before anything is built or signed: a destination the server
|
|
199
|
+
// refuses is an argument error, and there is no point generating a
|
|
200
|
+
// transaction reference for a page that will never be written.
|
|
201
|
+
const target = resolveCheckoutTarget(outputPath, `${flow.id}-${environment}.html`);
|
|
202
|
+
const { profile, warnings } = guardGatewayCall(deps, { flow, environment, confirmLiveEnvironment });
|
|
203
|
+
const built = buildTransaction(flow, {
|
|
204
|
+
amount: amount ?? '1.00',
|
|
205
|
+
description: description ?? 'JazzCash MCP test transaction',
|
|
206
|
+
billReference,
|
|
207
|
+
extras,
|
|
208
|
+
}, profile);
|
|
209
|
+
if (!built.validation.valid) {
|
|
210
|
+
return toolResult([
|
|
211
|
+
`Could not build a ${flow.id} payload, so no form was written.`,
|
|
212
|
+
'',
|
|
213
|
+
formatValidationResult(built.validation),
|
|
214
|
+
].join('\n'), { isError: true, structuredContent: { flowId: flow.id, written: false, errors: built.validation.errors } });
|
|
215
|
+
}
|
|
216
|
+
const html = renderCheckoutForm({ flow, environment, parameters: built.parameters });
|
|
217
|
+
writeCheckoutForm(target, html);
|
|
218
|
+
return toolResult([
|
|
219
|
+
`Wrote a signed ${flow.title} form for the ${environment} environment.`,
|
|
220
|
+
'',
|
|
221
|
+
`File: ${target.path}`,
|
|
222
|
+
`Posts to: ${resolveEndpoint(flow, environment)}`,
|
|
223
|
+
'',
|
|
224
|
+
warnings.length > 0 ? `## Warnings\n${bulletList([...warnings])}\n` : '',
|
|
225
|
+
'## This step needs a human',
|
|
226
|
+
'This flow cannot be completed programmatically: the customer enters card details or an MPIN on the JazzCash page.',
|
|
227
|
+
'',
|
|
228
|
+
'1. Open the file in a browser and review the parameter table.',
|
|
229
|
+
'2. Click Submit and complete the payment on the JazzCash page.',
|
|
230
|
+
'3. Confirm the result reaches your registered Return URL.',
|
|
231
|
+
`4. Wait ten minutes, then confirm the outcome with the Status Inquiry API using pp_TxnRefNo "${built.parameters['pp_TxnRefNo'] ?? ''}".`,
|
|
232
|
+
'5. Capture the screenshots JazzCash requires before go-live.',
|
|
233
|
+
'',
|
|
234
|
+
`The file contains a valid signed payload for your merchant account. Delete it after testing. The server only ever writes these pages inside ${target.root}; keep that directory out of version control, out of any web root, and out of any synced folder.`,
|
|
235
|
+
citations(flow.docRefs),
|
|
236
|
+
]
|
|
237
|
+
.filter((line) => line !== '')
|
|
238
|
+
.join('\n'), {
|
|
239
|
+
structuredContent: {
|
|
240
|
+
flowId: flow.id,
|
|
241
|
+
environment,
|
|
242
|
+
written: true,
|
|
243
|
+
path: target.path,
|
|
244
|
+
outputDirectory: target.root,
|
|
245
|
+
endpoint: resolveEndpoint(flow, environment),
|
|
246
|
+
txnRefNo: built.parameters['pp_TxnRefNo'] ?? null,
|
|
247
|
+
warnings,
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
},
|
|
251
|
+
// Refused first, so that nothing is resolved, guarded, built or written to
|
|
252
|
+
// disk for a call carrying a field this server must not accept. The
|
|
253
|
+
// generated page renders every parameter as a hidden input, so a flagged
|
|
254
|
+
// value would land in a file as well as in the transcript.
|
|
255
|
+
{ payloadArguments: ['extras'], flowFrom: 'flowId' }));
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* Body to return with HTTP 400 when a notification cannot be trusted.
|
|
259
|
+
*
|
|
260
|
+
* Identical to the rejection the generated IPN handlers emit (the
|
|
261
|
+
* `ipn-handler.tmpl` templates under `knowledge/templates`), so the tool and the
|
|
262
|
+
* code it generates state the same contract. Deliberately unsigned.
|
|
263
|
+
*/
|
|
264
|
+
const IPN_REJECTION_BODY = {
|
|
265
|
+
pp_ResponseCode: '400',
|
|
266
|
+
pp_ResponseMessage: 'Invalid secure hash',
|
|
267
|
+
};
|
|
268
|
+
/** Build the acknowledgement a merchant returns for a verified notification. */
|
|
269
|
+
function signIpnAcknowledgement(salt) {
|
|
270
|
+
const acknowledgement = {
|
|
271
|
+
pp_ResponseCode: '000',
|
|
272
|
+
pp_ResponseMessage: 'IPN received successfully',
|
|
273
|
+
};
|
|
274
|
+
acknowledgement['pp_SecureHash'] = computeSecureHash(acknowledgement, salt);
|
|
275
|
+
return acknowledgement;
|
|
276
|
+
}
|
|
277
|
+
export const registerVerifyIpnNotification = (server, deps) => {
|
|
278
|
+
server.registerTool('jazzcash_verify_ipn_notification', {
|
|
279
|
+
title: 'Verify an inbound JazzCash IPN notification',
|
|
280
|
+
description: 'Verify the pp_SecureHash on an IPN notification, classify the payment outcome, and produce the exact body to return: a signed acknowledgement when the signature verifies, or the unsigned HTTP 400 rejection when it does not. An IPN endpoint is public, so verification is not optional.',
|
|
281
|
+
inputSchema: {
|
|
282
|
+
payload: z
|
|
283
|
+
.record(z.string(), z.union([z.string(), z.number(), z.null()]))
|
|
284
|
+
.describe('The notification body exactly as received, including pp_SecureHash.'),
|
|
285
|
+
environment: z
|
|
286
|
+
.enum(JAZZCASH_ENVIRONMENTS)
|
|
287
|
+
.optional()
|
|
288
|
+
.describe('Credential profile whose Integrity Salt to verify against. Defaults to the configured environment.'),
|
|
289
|
+
integritySalt: z.string().optional().describe('Integrity Salt to use instead of the configured one.'),
|
|
290
|
+
},
|
|
291
|
+
}, safeHandler(deps, 'jazzcash_verify_ipn_notification', ({ payload, environment, integritySalt }) => {
|
|
292
|
+
const environmentName = resolveEnvironment(deps, environment);
|
|
293
|
+
const { salt } = resolveIntegritySalt(deps, integritySalt, environmentName);
|
|
294
|
+
const supplied = payload['pp_SecureHash'];
|
|
295
|
+
const suppliedHash = typeof supplied === 'string' ? supplied : '';
|
|
296
|
+
// An IPN has no flow, so the unknown-flow response policy applies: no
|
|
297
|
+
// prefix filter. Inheriting the request default would be vacuous for any
|
|
298
|
+
// notification carrying unprefixed fields.
|
|
299
|
+
const recomputed = computeSecureHash(payload, salt, UNKNOWN_FLOW_RESPONSE_HASH_OPTIONS);
|
|
300
|
+
const verified = suppliedHash !== '' && hashesMatch(recomputed, suppliedHash);
|
|
301
|
+
// A notification names no flow, so there is no declared success contract
|
|
302
|
+
// to apply and the documented JazzCash tables are the whole rule. Passed
|
|
303
|
+
// explicitly rather than omitted: this is the one call site where having
|
|
304
|
+
// no contract is the truth, and it should read that way.
|
|
305
|
+
const classification = classifyResponse(payload, 'ipn', undefined);
|
|
306
|
+
const txnRefNo = typeof payload['pp_TxnRefNo'] === 'string' ? payload['pp_TxnRefNo'] : '';
|
|
307
|
+
const txnDateTime = typeof payload['pp_TxnDateTime'] === 'string' ? payload['pp_TxnDateTime'] : '';
|
|
308
|
+
// A signed acknowledgement is produced ONLY for a notification that
|
|
309
|
+
// verified. Returning one alongside "reject this and answer HTTP 400"
|
|
310
|
+
// hands an automation two contradictory instructions, and following the
|
|
311
|
+
// more actionable one positively acknowledges a forged notification.
|
|
312
|
+
const acknowledgement = verified ? signIpnAcknowledgement(salt) : undefined;
|
|
313
|
+
const age = txnDateTime === ''
|
|
314
|
+
? undefined
|
|
315
|
+
: (() => {
|
|
316
|
+
try {
|
|
317
|
+
return minutesSinceTxnDateTime(txnDateTime);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
})();
|
|
323
|
+
const text = [
|
|
324
|
+
verified ? '# Signature VERIFIED' : '# Signature NOT VERIFIED — do not act on this notification',
|
|
325
|
+
'',
|
|
326
|
+
verified
|
|
327
|
+
? 'The pp_SecureHash matches. This notification genuinely came from JazzCash.'
|
|
328
|
+
: suppliedHash === ''
|
|
329
|
+
? 'The notification carried no pp_SecureHash. Reject it: an IPN endpoint is a public URL and anyone can post to it.'
|
|
330
|
+
: `The pp_SecureHash does not match, so this notification was not signed with your Integrity Salt. Reject it and return HTTP 400. Received ${suppliedHash.toLowerCase()}. The expected hash is deliberately withheld: an IPN endpoint is public, so disclosing the correct hash for this body would let anyone resubmit the same body and pass verification. To compare hashes for a payload you generated yourself, use jazzcash_verify_secure_hash.`,
|
|
331
|
+
'',
|
|
332
|
+
`## Payment outcome: ${classification.classification}`,
|
|
333
|
+
classification.reason,
|
|
334
|
+
txnRefNo === '' ? '' : `Transaction reference: ${txnRefNo}`,
|
|
335
|
+
age === undefined ? '' : `Notification is for a transaction ${age.toFixed(0)} minutes old.`,
|
|
336
|
+
'',
|
|
337
|
+
acknowledgement === undefined ? '## What to return instead' : '## Acknowledgement to return',
|
|
338
|
+
acknowledgement === undefined
|
|
339
|
+
? 'Do NOT acknowledge this notification. Return HTTP 400 with the body below, unsigned: a signed acknowledgement would confirm to whoever sent it that the forgery was accepted.'
|
|
340
|
+
: 'Return this within 60 seconds. JazzCash retries twice otherwise, so your handler must be idempotent.',
|
|
341
|
+
'```json',
|
|
342
|
+
JSON.stringify(acknowledgement ?? IPN_REJECTION_BODY, null, 2),
|
|
343
|
+
'```',
|
|
344
|
+
'',
|
|
345
|
+
'## Before you mark the order paid',
|
|
346
|
+
bulletList([
|
|
347
|
+
'Confirm the hash verified (above).',
|
|
348
|
+
'Confirm the amount matches the order you recorded.',
|
|
349
|
+
'Confirm the order is not already marked paid — this may be a retry.',
|
|
350
|
+
'Treat any code other than 121, 199 or 999 as unresolved, not failed, and reconcile with the Status Inquiry API.',
|
|
351
|
+
]),
|
|
352
|
+
citations([{ docId: 'ipn-implementation', sectionId: 'handler-checklist' }]),
|
|
353
|
+
]
|
|
354
|
+
.filter((line) => line !== '')
|
|
355
|
+
.join('\n');
|
|
356
|
+
// A determinate "not verified" is a successful verification with a
|
|
357
|
+
// negative outcome, not an execution failure — the same distinction
|
|
358
|
+
// jazzcash_verify_secure_hash makes. Marking it isError makes agent
|
|
359
|
+
// frameworks retry a verification that will never change its mind, and
|
|
360
|
+
// leads some clients to drop the structuredContent that carries the verdict.
|
|
361
|
+
return toolResult(text, {
|
|
362
|
+
structuredContent: {
|
|
363
|
+
verified,
|
|
364
|
+
// The recomputed hash is disclosed only when the caller already holds
|
|
365
|
+
// it. On a mismatch it is the valid signature for an attacker-supplied
|
|
366
|
+
// body, and an IPN endpoint is a public URL.
|
|
367
|
+
...(verified ? { expectedHash: recomputed } : {}),
|
|
368
|
+
providedHash: suppliedHash.toLowerCase(),
|
|
369
|
+
classification: classification.classification,
|
|
370
|
+
txnRefNo,
|
|
371
|
+
...(acknowledgement === undefined ? { rejection: IPN_REJECTION_BODY } : { acknowledgement }),
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
},
|
|
375
|
+
// A notification names no flow, so the catalogue-wide refusal list
|
|
376
|
+
// applies — and there is no flowId argument for the wrapper to read one
|
|
377
|
+
// from. A genuine notification carries none of these fields; a payload
|
|
378
|
+
// that does is a request someone pasted into the wrong tool.
|
|
379
|
+
{ payloadArguments: ['payload'] }));
|
|
380
|
+
};
|
|
381
|
+
//# sourceMappingURL=gateway-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-tools.js","sourceRoot":"","sources":["../../src/tools/gateway-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-tools.d.ts","sourceRoot":"","sources":["../../src/tools/hash-tools.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiChD,eAAO,MAAM,uBAAuB,EAAE,SAuGrC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,SAsHtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAwCrC,CAAC"}
|