@keetanetwork/anchor 0.0.6 → 0.0.7

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/lib/resolver.d.ts CHANGED
@@ -238,25 +238,27 @@ type ValuizableObject = {
238
238
  [key: string]: ValuizableMethod | undefined;
239
239
  };
240
240
  type ValuizableKind = 'any' | 'object' | 'array' | 'primitive' | 'string' | 'number' | 'boolean';
241
- interface ValuizableMethod {
241
+ interface ValuizableMethodBase {
242
+ (expect?: ValuizableKind): Promise<ValuizeInput>;
243
+ (expect: 'any'): Promise<ValuizeInput>;
244
+ }
245
+ interface ValuizableMethod extends ValuizableMethodBase {
242
246
  (expect: 'object'): Promise<ValuizableObject>;
243
247
  (expect: 'array'): Promise<ValuizableArray>;
244
248
  (expect: 'primitive'): Promise<JSONSerializablePrimitive>;
245
249
  (expect: 'string'): Promise<string>;
246
250
  (expect: 'number'): Promise<number>;
247
251
  (expect: 'boolean'): Promise<boolean>;
248
- (expect: 'any'): Promise<ValuizeInput>;
249
- (expect?: ValuizableKind): Promise<ValuizeInput>;
250
252
  }
251
- interface ToValuizableExpectString {
253
+ interface ToValuizableExpectString extends ValuizableMethodBase {
252
254
  (expect: 'string'): Promise<string>;
253
255
  (expect: 'primitive'): Promise<JSONSerializablePrimitive>;
254
256
  }
255
- interface ToValuizableExpectNumber {
257
+ interface ToValuizableExpectNumber extends ValuizableMethodBase {
256
258
  (expect: 'number'): Promise<number>;
257
259
  (expect: 'primitive'): Promise<JSONSerializablePrimitive>;
258
260
  }
259
- interface ToValuizableExpectBoolean {
261
+ interface ToValuizableExpectBoolean extends ValuizableMethodBase {
260
262
  (expect: 'boolean'): Promise<boolean>;
261
263
  (expect: 'primitive'): Promise<JSONSerializablePrimitive>;
262
264
  }
@@ -272,6 +274,7 @@ type ToJSONValuizableObject<T extends object> = {
272
274
  type ToJSONValuizable<T> = ToJSONValuizableObject<{
273
275
  tmp: T;
274
276
  }>['tmp'];
277
+ type ValuizeResolvable = JSONSerializablePrimitive | ValuizableObject | ValuizableArray | ValuizableMethod;
275
278
  /**
276
279
  * A cache object
277
280
  */
@@ -344,7 +347,23 @@ declare class Metadata implements ValuizableInstance {
344
347
  * Assert that the supplied value is a valid Metadata Root Object
345
348
  */
346
349
  static assertMetadata(value: unknown): asserts value is ToJSONValuizable<ServiceMetadata>;
350
+ /**
351
+ * Check if the supplied value is a Valuizable method which can
352
+ * be called to resolve a Valuizable value.
353
+ */
347
354
  static isValuizable(value: unknown): value is ValuizableMethod;
355
+ /**
356
+ * Recursively resolve a Valuizable value into a fully
357
+ * realized JSONSerializable value. This will walk the
358
+ * entire structure, calling each Valuizable method
359
+ * and replacing it with the returned value.
360
+ *
361
+ * This should only be used in cases where the entire
362
+ * structure needs to be fully realized, as it
363
+ * can be quite expensive.
364
+ */
365
+ static fullyResolveValuizable(value: ValuizeResolvable, invalidReplacement?: JSONSerializable): Promise<JSONSerializable>;
366
+ static fullyResolveValuizable(value: any, invalidReplacement?: JSONSerializable): Promise<JSONSerializable>;
348
367
  constructor(url: string | URL, config: MetadataConfig);
349
368
  /**
350
369
  * @param metadata Metadata to parse -- base64 encoded string or ArrayBuffer
@@ -391,6 +410,7 @@ declare class Resolver {
391
410
  private lookupBankingServices;
392
411
  private lookupKYCServices;
393
412
  private lookupFXServices;
413
+ getRootMetadata(): Promise<ToValuizable<ServiceMetadata>>;
394
414
  listTokens(): Promise<{
395
415
  token: KeetaNetAccountTokenPublicKeyString;
396
416
  currency: CurrencySearchCanonical;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}
package/lib/resolver.js CHANGED
@@ -3833,10 +3833,17 @@ class Metadata {
3833
3833
  static assertMetadata(value) {
3834
3834
  assertServiceMetadata(value);
3835
3835
  }
3836
+ /**
3837
+ * Check if the supplied value is a Valuizable method which can
3838
+ * be called to resolve a Valuizable value.
3839
+ */
3836
3840
  static isValuizable(value) {
3837
3841
  if (typeof value === 'object' && value !== null) {
3838
3842
  return (false);
3839
3843
  }
3844
+ if (typeof value !== 'function') {
3845
+ return (false);
3846
+ }
3840
3847
  // @ts-ignore
3841
3848
  if (!('instanceTypeID' in value)) {
3842
3849
  return (false);
@@ -3849,6 +3856,74 @@ class Metadata {
3849
3856
  }
3850
3857
  return (false);
3851
3858
  }
3859
+ static async fullyResolveValuizable(value, invalidReplacement = null) {
3860
+ if (typeof value === 'object' && value !== null) {
3861
+ if (Array.isArray(value)) {
3862
+ const newArray = [];
3863
+ for (let i = 0; i < value.length; i++) {
3864
+ const entry = value[i];
3865
+ if (Metadata.isValuizable(entry)) {
3866
+ const newEntry = await Metadata.fullyResolveValuizable(entry);
3867
+ newArray.push(newEntry);
3868
+ }
3869
+ else if (entry === undefined) {
3870
+ throw (new Error(`Array entry ${i} is undefined, which is not valid in JSON`));
3871
+ }
3872
+ else {
3873
+ assertNever(entry);
3874
+ }
3875
+ }
3876
+ return (newArray);
3877
+ }
3878
+ else {
3879
+ const newObject = {};
3880
+ for (const key in value) {
3881
+ /*
3882
+ * Since `key` is the index of the array or
3883
+ * object, it is safe to use it to index
3884
+ * into the array or object.
3885
+ */
3886
+ // @ts-ignore
3887
+ const entry = value[key];
3888
+ if (Metadata.isValuizable(entry)) {
3889
+ const newEntry = await Metadata.fullyResolveValuizable(entry);
3890
+ newObject[key] = newEntry;
3891
+ }
3892
+ else if (entry === undefined) {
3893
+ throw (new Error(`Object key "${key}" is undefined, which is not valid in JSON`));
3894
+ }
3895
+ else {
3896
+ assertNever(entry);
3897
+ }
3898
+ }
3899
+ return (newObject);
3900
+ }
3901
+ }
3902
+ if (Metadata.isValuizable(value)) {
3903
+ try {
3904
+ const retval = await value('any');
3905
+ return (await Metadata.fullyResolveValuizable(retval));
3906
+ }
3907
+ catch {
3908
+ return (invalidReplacement);
3909
+ }
3910
+ }
3911
+ switch (typeof value) {
3912
+ case 'string':
3913
+ case 'number':
3914
+ case 'boolean':
3915
+ return (value);
3916
+ case 'object':
3917
+ if (value === null) {
3918
+ return (value);
3919
+ }
3920
+ assertNever(value);
3921
+ break;
3922
+ default:
3923
+ assertNever(value);
3924
+ }
3925
+ throw (new Error('invalid input'));
3926
+ }
3852
3927
  constructor(url, config) {
3853
3928
  /*
3854
3929
  * Define an "instanceTypeID" as an unenumerable property to
@@ -3964,7 +4039,7 @@ class Metadata {
3964
4039
  * URL twice, then we have a circular reference.
3965
4040
  */
3966
4041
  if (this.seenURLs.has(cacheKey)) {
3967
- return ('');
4042
+ return (null);
3968
4043
  }
3969
4044
  this.seenURLs.add(cacheKey);
3970
4045
  /*
@@ -4089,6 +4164,9 @@ class Metadata {
4089
4164
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
4090
4165
  const keyValue = value[key];
4091
4166
  if (isExternalURL(keyValue)) {
4167
+ if (Array.isArray(newValue)) {
4168
+ throw (new Error('internal error: newValue is an array, but it should be an object since it is an external field, which can only be an object'));
4169
+ }
4092
4170
  const newMetadataObject = new Metadata(keyValue.url, {
4093
4171
  trustedCAs: this.#trustedCAs,
4094
4172
  client: this.#client,
@@ -4098,9 +4176,10 @@ class Metadata {
4098
4176
  parent: this
4099
4177
  });
4100
4178
  const newValuizableObject = newMetadataObject.value.bind(newMetadataObject);
4101
- if (Array.isArray(newValue)) {
4102
- throw (new Error('internal error: newValue is an array, but it should be an object since it is an external field, which can only be an object'));
4103
- }
4179
+ Object.defineProperty(newValuizableObject, 'instanceTypeID', {
4180
+ value: 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd',
4181
+ enumerable: false
4182
+ });
4104
4183
  newValue[key] = newValuizableObject;
4105
4184
  }
4106
4185
  else {
@@ -4419,6 +4498,11 @@ class Resolver {
4419
4498
  }
4420
4499
  return (rootMetadata);
4421
4500
  }
4501
+ async getRootMetadata() {
4502
+ const rootMetadata = await this.#getRootMetadata();
4503
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
4504
+ return rootMetadata;
4505
+ }
4422
4506
  async listTokens() {
4423
4507
  const rootMetadata = await this.#getRootMetadata();
4424
4508
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","sourcesContent":["import * as KeetaNetClient from '@keetanetwork/keetanet-client';\nimport * as CurrencyInfo from '@keetanetwork/currency-info';\nimport type { Logger } from './log/index.ts';\nimport type { JSONSerializable } from './utils/json.ts';\nimport { assertNever } from './utils/never.js';\nimport { Buffer } from './utils/buffer.js';\nimport crypto from './utils/crypto.js';\n\nimport { createIs, createAssert } from 'typia';\n\ntype ExternalURL = { external: '2b828e33-2692-46e9-817e-9b93d63f28fd'; url: string; };\n\ntype KeetaNetAccount = InstanceType<typeof KeetaNetClient.lib.Account>;\nconst KeetaNetAccount: typeof KeetaNetClient.lib.Account = KeetaNetClient.lib.Account;\ntype KeetaNetAccountTokenPublicKeyString = ReturnType<InstanceType<typeof KeetaNetClient.lib.Account<typeof KeetaNetAccount.AccountKeyAlgorithm.TOKEN>>['publicKeyString']['get']>;\n\n/**\n * Canonical form of a currency code for use in the ServiceMetadata\n * Which is either the ISO currency code (e.g. \"USD\", \"EUR\", \"JPY\")\n * or a cryptocurrency code prefixed with a dollar sign (e.g. \"$BTC\", \"$ETH\")\n */\ntype ServiceMetadataCurrencyCodeCanonical = CurrencyInfo.ISOCurrencyCode | `$${string}`;\n/**\n * Input types which can be used to search for which token represents\n * a given currency or cryptocurrency.\n */\ntype CurrencySearchInput = ServiceMetadataCurrencyCodeCanonical | CurrencyInfo.ISOCurrencyNumber | CurrencyInfo.Currency;\ntype CurrencySearchCanonical = ServiceMetadataCurrencyCodeCanonical;\ntype CountrySearchInput = CurrencyInfo.ISOCountryCode | CurrencyInfo.ISOCountryNumber | CurrencyInfo.Country;\ntype CountrySearchCanonical = CurrencyInfo.ISOCountryCode; /* XXX:TODO */\n\nconst isCurrencySearchCanonical = createIs<CurrencySearchCanonical>();\n\n// #region Global Service Metadata\n/**\n * Service Metadata General Structure\n */\ntype ServiceMetadata = {\n\tversion: number;\n\t/**\n\t * Map of the currency code to the token public key which\n\t * represents that currency.\n\t */\n\tcurrencyMap: {\n\t\t[currencyCode in ServiceMetadataCurrencyCodeCanonical]?: KeetaNetAccountTokenPublicKeyString;\n\t};\n\tservices: {\n\t\tbanking?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\tcreateAccount?: string;\n\t\t\t\t};\n\t\t\t\tcurrencyCodes: string[];\n\t\t\t\tcountryCodes: string[];\n\t\t\t\tkycProviders?: string[];\n\t\t\t};\n\t\t};\n\t\tkyc?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Check if the KYC provider can\n\t\t\t\t\t * service a more specific locality\n\t\t\t\t\t * (optional)\n\t\t\t\t\t */\n\t\t\t\t\tcheckLocality?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Request an estimate for a KYC\n\t\t\t\t\t * verification (optional)\n\t\t\t\t\t */\n\t\t\t\t\tgetEstimate?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Begin the KYC verification process\n\t\t\t\t\t * with this KYC provider\n\t\t\t\t\t */\n\t\t\t\t\tcreateVerification?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get the certificate for the\n\t\t\t\t\t * KYC verification\n\t\t\t\t\t */\n\t\t\t\t\tgetCertificates?: string;\n\t\t\t\t};\n\t\t\t\t/**\n\t\t\t\t * Country codes which this KYC provider can\n\t\t\t\t * validate accounts in. If this is not\n\t\t\t\t * specified, then the KYC provider can\n\t\t\t\t * validate accounts in any country.\n\t\t\t\t */\n\t\t\t\tcountryCodes?: string[];\n\t\t\t\t/**\n\t\t\t\t * The Certificate Authority (CA) Certificate\n\t\t\t\t * that this KYC provider uses to sign KYC\n\t\t\t\t * certificates. This is used to identify the\n\t\t\t\t * KYC provider.\n\t\t\t\t */\n\t\t\t\tca: string;\n\t\t\t};\n\t\t};\n\t\t/**\n\t\t * Foreign Exchange (FX) services\n\t\t *\n\t\t * This is used to identify service providers which\n\t\t * can convert currency from one currency to another.\n\t\t */\n\t\tfx?: {\n\t\t\t/**\n\t\t\t * Provider ID which identifies the FX provider\n\t\t\t */\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Get an estimate for a currency\n\t\t\t\t\t * conversion (optional)\n\t\t\t\t\t */\n\t\t\t\t\tgetEstimate?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get a quote for a currency\n\t\t\t\t\t * conversion\n\t\t\t\t\t */\n\t\t\t\t\tgetQuote: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Create an exchange to convert\n\t\t\t\t\t * currency\n\t\t\t\t\t */\n\t\t\t\t\tcreateExchange: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get the status of an exchange\n\t\t\t\t\t * which was previously created\n\t\t\t\t\t */\n\t\t\t\t\tgetExchangeStatus: string;\n\t\t\t\t};\n\t\t\t\t/**\n\t\t\t\t * Path for which can be used to identify which\n\t\t\t\t * currencies this FX provider can convert\n\t\t\t\t * between.\n\t\t\t\t */\n\t\t\t\tfrom: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Currency code which this FX provider can\n\t\t\t\t\t * convert from\n\t\t\t\t\t */\n\t\t\t\t\tcurrencyCodes: KeetaNetAccountTokenPublicKeyString[];\n\t\t\t\t\t/**\n\t\t\t\t\t * Currency codes which this FX provider can\n\t\t\t\t\t * convert to from the `from.currencyCode`\n\t\t\t\t\t */\n\t\t\t\t\tto: KeetaNetAccountTokenPublicKeyString[];\n\t\t\t\t\t/**\n\t\t\t\t\t * KYC providers which this FX provider\n\t\t\t\t\t * supports (DN) -- if not specified,\n\t\t\t\t\t * then it does not require KYC.\n\t\t\t\t\t */\n\t\t\t\t\tkycProviders?: string[];\n\t\t\t\t}[];\n\t\t\t}\n\t\t};\n\t\tinbound?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t\toutbound?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t\tcards?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t};\n};\n\ntype ServiceMetadataExternalizable = ToJSONValuizable<ServiceMetadata>;\n\n/**\n * Types of services which can be resolved\n */\ntype Services = keyof ServiceMetadata['services'];\n\n/**\n * Search criteria for each service type\n */\ntype ServiceSearchCriteria<T extends Services> = {\n\t'banking': {\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ALL of the following currencies.\n\t\t */\n\t\tcurrencyCodes?: CurrencySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ANY of the following countries.\n\t\t */\n\t\tcountryCodes?: CountrySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts verified by ANY of the following KYC providers\n\t\t * (DN).\n\t\t */\n\t\tkycProviders?: string[]; /* XXX:TODO */\n\t};\n\t'fx': {\n\t\t/**\n\t\t * Search for a provider which can convert from the following\n\t\t * input currency\n\t\t */\n\t\tinputCurrencyCode?: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString;\n\t\t/**\n\t\t * Search for a provider which can convert to the following\n\t\t * output currency\n\t\t */\n\t\toutputCurrencyCode?: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString;\n\t\t/**\n\t\t * Search for a provider which supports ANY of the following\n\t\t * KYC providers\n\t\t */\n\t\tkycProviders?: string[];\n\t};\n\t'kyc': {\n\t\t/**\n\t\t * Search for a KYC provider which can verify accounts in ALL\n\t\t * of the following countries.\n\t\t */\n\t\tcountryCodes: CountrySearchInput[];\n\t};\n\t'inbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'outbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'cards': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n}[T];\n\ntype ResolverLookupServiceResults<Service extends Services> = { [id: string]: ToValuizableObject<NonNullable<ServiceMetadata['services'][Service]>[string]> };\n\ntype ServicesMetadataLookupMap = {\n\t[Service in Services]: {\n\t\tcriteria: ServiceSearchCriteria<Service>;\n\t\tresults: ResolverLookupServiceResults<Service>;\n\t};\n};\n\nfunction assertValidCountryCodes(input: unknown): asserts input is { countryCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\tthrow(new Error('Expected \"countryCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.countryCodes !== 'function' && !Array.isArray(input.countryCodes)) {\n\t\tthrow(new Error(`Expected \"countryCodes\" to be an array | function, got ${typeof input.countryCodes}`));\n\t}\n\n\tif (Array.isArray(input.countryCodes)) {\n\t\tfor (const countryCode of input.countryCodes) {\n\t\t\tif (typeof countryCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"countryCodes\" to be an array of strings, got ${typeof countryCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOptionalCountryCodes(input: unknown): asserts input is { countryCodes?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\treturn;\n\t}\n\n\tassertValidCountryCodes(input);\n}\n\nfunction assertValidCurrencyCodes(input: unknown): asserts input is { currencyCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['currencyCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('currencyCodes' in input)) {\n\t\tthrow(new Error('Expected \"currencyCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.currencyCodes !== 'function' && !Array.isArray(input.currencyCodes)) {\n\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array | function, got ${typeof input.currencyCodes}`));\n\t}\n\n\tif (Array.isArray(input.currencyCodes)) {\n\t\tfor (const currencyCode of input.currencyCodes) {\n\t\t\tif (typeof currencyCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array of strings, got ${typeof currencyCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsBanking(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['operations'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('operations' in input)) {\n\t\tthrow(new Error('Expected \"operations\" key in KYC service, but it was not found'));\n\t}\n\n\tif ((typeof input.operations !== 'object' || input.operations === null) && typeof input.operations !== 'function') {\n\t\tthrow(new Error(`Expected \"operations\" to be an object | function, got ${typeof input.operations}`));\n\t}\n\n\tif (typeof input.operations !== 'function') {\n\t\tfor (const [operation, operationValue] of Object.entries(input.operations)) {\n\t\t\tif (typeof operation !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations\" to be an object with string keys, got ${typeof operation}`));\n\t\t\t}\n\n\t\t\tif (typeof operationValue !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations.${operation}\" to be a string, got ${typeof operationValue}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsKYC(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['operations'] } {\n\t/* XXX:TODO: Validate the specific operations */\n\tassertValidOperationsBanking(input);\n}\n\nfunction assertValidOperationsFX(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['fx']>[string]>['operations'] } {\n\t/* XXX:TODO: Validate the specific operations */\n\tassertValidOperationsBanking(input);\n}\n\nfunction assertValidOptionalKYCProviders(input: unknown): asserts input is { kycProviders?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['kycProviders'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif ('kycProviders' in input) {\n\t\tif (typeof input.kycProviders !== 'function' && !Array.isArray(input.kycProviders)) {\n\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array | function, got ${typeof input.kycProviders}`));\n\t\t}\n\n\t\tif (Array.isArray(input.kycProviders)) {\n\t\t\tfor (const kycProvider of input.kycProviders) {\n\t\t\t\tif (typeof kycProvider !== 'string') {\n\t\t\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array of strings, got ${typeof kycProvider}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidCA(input: unknown): asserts input is { ca: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['ca'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('ca' in input)) {\n\t\tthrow(new Error('Expected \"ca\" key in KYC service, but it was not found'));\n\t}\n\n\tif (typeof input.ca !== 'string' && typeof input.ca !== 'function') {\n\t\tthrow(new Error(`Expected \"ca\" to be a string | function, got ${typeof input.ca}`));\n\t}\n}\n\nconst assertResolverLookupBankingResult = function(input: unknown): ResolverLookupServiceResults<'banking'>[string] {\n\tassertValidOperationsBanking(input);\n\tassertValidCountryCodes(input);\n\tassertValidCurrencyCodes(input);\n\tassertValidOptionalKYCProviders(input);\n\n\treturn(input);\n\n};\nconst assertResolverLookupKYCResult = function(input: unknown): ResolverLookupServiceResults<'kyc'>[string] {\n\tassertValidOperationsKYC(input);\n\tassertValidOptionalCountryCodes(input);\n\tassertValidCA(input);\n\n\treturn(input);\n};\n\nconst assertResolverLookupFXResult = async function(input: unknown): Promise<ResolverLookupServiceResults<'fx'>[string]> {\n\tassertValidOperationsFX(input);\n\n\tif (!('from' in input)) {\n\t\tthrow(new Error('Expected \"from\" key in FX service, but it was not found'));\n\t}\n\n\tconst fromUnrealized = input.from;\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tif (!Metadata.isValuizable(fromUnrealized)) {\n\t\tthrow(new Error(`Expected \"from\" to be an Valuizable, got ${typeof fromUnrealized}`));\n\t}\n\n\t// XXX:TODO: Perform deeper validation of the \"from\" structure\n\tawait fromUnrealized('array');\n\n\t// XXX:TODO: Perform deeper validation of the \"from\" structure\n\t// @ts-ignore\n\treturn(input);\n};\n\n// #endregion\n\n// #region Validation\n\nasync function isValidOperations(input: unknown): Promise<{ operations: ValuizableMethod } | false> {\n\tif (typeof input !== 'object' || input === null) {\n\t\treturn(false);\n\t}\n\n\tif (!('operations' in input)) {\n\t\treturn(false);\n\t}\n\n\tconst operations = input.operations;\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tif (!Metadata.isValuizable(operations)) {\n\t\treturn(false);\n\t}\n\n\treturn({\n\t\t...input,\n\t\toperations\n\t});\n}\n\nfunction convertToCurrencySearchCanonical(input: CurrencySearchInput): CurrencySearchCanonical {\n\tif (CurrencyInfo.Currency.isCurrencyCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Currency.isISOCurrencyNumber(input)) {\n\t\tinput = new CurrencyInfo.Currency(input);\n\t\treturn(input.code);\n\t} else if (typeof input === 'string') {\n\t\treturn(input);\n\t} else if (input === null) {\n\t\tthrow(new Error('Invalid currency input: null'));\n\t} else if ('code' in input) {\n\t\treturn(input.code);\n\t} else {\n\t\tthrow(new Error(`Invalid currency input: ${input}`));\n\t}\n}\n\nasync function hasAllCurrencyCodes(input: unknown, criteria: { currencyCodes: CurrencySearchCanonical[] }): Promise<boolean> {\n\t// XXX:TODO: Avoid using exceptions for flow-control\n\tassertValidCurrencyCodes(input);\n\n\tconst currencyCodes = await input.currencyCodes?.('array') ?? [];\n\tconst inputCurrencyCodes = await Promise.all(currencyCodes.map(async function(item) {\n\t\treturn(await item?.('primitive'));\n\t}));\n\n\tfor (const checkCurrencyCode of criteria.currencyCodes) {\n\t\tconst checkCurrencyCodeCanonical = convertToCurrencySearchCanonical(checkCurrencyCode);\n\t\tif (!inputCurrencyCodes.includes(checkCurrencyCodeCanonical)) {\n\t\t\treturn(false);\n\t\t}\n\t}\n\n\treturn(true);\n}\n\nasync function hasAnyCountryCodes(input: unknown, criteria: { countryCodes: CountrySearchCanonical[] }): Promise<boolean> {\n\t// XXX:TODO: Avoid using exceptions for flow-control\n\tassertValidCountryCodes(input);\n\n\tconst countryCodes = await input.countryCodes?.('array') ?? [];\n\n\tfor (const countryCode of countryCodes) {\n\t\tconst countryCodeValue = await countryCode?.('primitive');\n\t\tif (countryCodeValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\tif (criteria.countryCodes.includes(countryCodeValue as any)) {\n\t\t\treturn(true);\n\t\t}\n\t}\n\n\treturn(false);\n}\n\n// #endregion\n\nfunction convertToCountrySearchCanonical(input: CountrySearchInput): CountrySearchCanonical {\n\tif (CurrencyInfo.Country.isCountryCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Country.isISOCountryNumber(input)) {\n\t\tinput = new CurrencyInfo.Country(input);\n\t}\n\n\treturn(input.code);\n}\n\n/**\n * Check if a value is an ExternalURL\n */\nconst isExternalURL = createIs<ExternalURL>();\n\ntype JSONSerializablePrimitive = Exclude<JSONSerializable, object>;\ntype ValuizeInput = JSONSerializablePrimitive | ValuizableObject | ValuizableArray;\ntype ValuizableArray = (ValuizableMethod | undefined)[];\ntype ValuizableObject = { [key: string]: ValuizableMethod | undefined };\n\ntype ValuizableKind = 'any' | 'object' | 'array' | 'primitive' | 'string' | 'number' | 'boolean';\ninterface ValuizableMethod {\n\t(expect: 'object'): Promise<ValuizableObject>;\n\t(expect: 'array'): Promise<ValuizableArray>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'boolean'): Promise<boolean>;\n\t(expect: 'any'): Promise<ValuizeInput>;\n\t(expect?: ValuizableKind): Promise<ValuizeInput>;\n};\n\ninterface ToValuizableExpectString {\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\ninterface ToValuizableExpectNumber {\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\ninterface ToValuizableExpectBoolean {\n\t(expect: 'boolean'): Promise<boolean>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\n/* eslint-disable @stylistic/indent */\ntype ToValuizableObject<T extends object> = {\n\t[K in keyof T]:\n\t\tT[K] extends string ? ToValuizableExpectString :\n\t\tT[K] extends number ? ToValuizableExpectNumber :\n\t\tT[K] extends boolean ? ToValuizableExpectBoolean :\n\t\tT[K] extends JSONSerializablePrimitive ?\n\t\t\t(expect: 'primitive') => Promise<JSONSerializablePrimitive> :\n\t\tT[K] extends unknown[] ?\n\t\t\t(expect: 'array') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends object ?\n\t\t\t(expect: 'object') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends (infer U | undefined) ?\n\t\t\tToValuizable<U> | undefined :\n\t\tnever;\n};\ntype ToValuizable<T> = ToValuizableObject<{ tmp: T }>['tmp'];\n\ntype ToJSONValuizableObject<T extends object> = {\n\t[K in keyof T]: (\n\t\tT[K] extends object ?\n\t\t\tToJSONValuizableObject<T[K]> :\n\t\tT[K] extends (object | undefined) ?\n\t\t\tToJSONValuizableObject<NonNullable<T[K]>> | undefined :\n\t\tT[K]\n\t) | ExternalURL;\n};\ntype ToJSONValuizable<T> = ToJSONValuizableObject<{ tmp: T }>['tmp'];\n\n/*\n * Access token to share with the Metadata object to allow it to\n * access the mutable stats object.\n */\nconst statsAccessToken = Symbol('statsAccessToken');\n\n/**\n * A cache object\n */\ntype URLCacheObject = Map<string, {\n\tpass: true;\n\tvalue: JSONSerializable;\n\texpires: Date;\n} | {\n\tpass: false;\n\terror: unknown;\n\texpires: Date;\n}>;\n\n\ntype ResolverConfig = {\n\t/**\n\t * The \"root\" account to use as the basis for all lookups. It should\n\t * contain the authoritative information for resolving in its\n\t * Metadata.\n\t */\n\troot: KeetaNetAccount;\n\t/**\n\t * A KeetaNet Client to access the network using.\n\t */\n\tclient: KeetaNetClient.Client | KeetaNetClient.UserClient;\n\t/**\n\t * A list of trusted Certificate Authorities to use when connecting to\n\t * external HTTPS services.\n\t */\n\ttrustedCAs: string[]; /* XXX:TODO */\n\t/**\n\t * Logger to use for debugging\n\t */\n\tlogger?: Logger;\n\t/**\n\t * ID for this instance of the resolver\n\t */\n\tid?: string;\n\t/**\n\t * Caching Parameters\n\t */\n\tcache?: Omit<NonNullable<MetadataConfig['cache']>, 'instance'>;\n}\n\n\ntype MetadataConfig = {\n\ttrustedCAs: ResolverConfig['trustedCAs'];\n\tclient: KeetaNetClient.Client;\n\tlogger?: ResolverConfig['logger'];\n\tresolver: Resolver;\n\tcache?: {\n\t\tinstance: URLCacheObject;\n\t\tpositiveTTL?: number;\n\t\tnegativeTTL?: number;\n\t};\n\tparent?: Metadata;\n};\n\ntype ValuizableInstance = { value: ValuizableMethod };\n\nconst assertServiceMetadata = createAssert<ToJSONValuizable<ServiceMetadata>>();\n\nclass Metadata implements ValuizableInstance {\n\treadonly #cache: Required<NonNullable<MetadataConfig['cache']>>;\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #url: URL;\n\treadonly #resolver: Resolver;\n\treadonly #stats: ResolverStats;\n\tprivate readonly seenURLs: Set<string>;\n\n\tprivate static readonly instanceTypeID = 'Metadata:c85b3d67-9548-4042-9862-f6e6677690ac';\n\n\tstatic isInstance(value: unknown): value is Metadata {\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn(false);\n\t\t}\n\t\tif (!('instanceID' in value)) {\n\t\t\treturn(false);\n\t\t}\n\n\t\treturn(value.instanceID === Metadata.instanceTypeID);\n\t}\n\n\t/**\n\t * Format the supplied Metadata as appropriate to be included\n\t * within the Metadata field of a KeetaNet acccount to serve\n\t * as the Metadata for the Resolver.\n\t */\n\tstatic formatMetadata(metadata: ToJSONValuizable<ServiceMetadata>): string;\n\t// eslint-disable-next-line @typescript-eslint/unified-signatures\n\tstatic formatMetadata(metadata: JSONSerializable): string;\n\tstatic formatMetadata(metadata: JSONSerializable | ToJSONValuizable<ServiceMetadata>): string {\n\t\tconst metadataBytes = Buffer.from(JSON.stringify(metadata), 'utf-8');\n\t\tconst metadataCompressed = KeetaNetClient.lib.Utils.Buffer.ZlibDeflate(KeetaNetClient.lib.Utils.Helper.bufferToArrayBuffer(metadataBytes));\n\t\tconst metadataEncoded = Buffer.from(metadataCompressed).toString('base64');\n\n\t\treturn(metadataEncoded);\n\t}\n\n\t/**\n\t * Assert that the supplied value is a valid Metadata Root Object\n\t */\n\tstatic assertMetadata(value: unknown): asserts value is ToJSONValuizable<ServiceMetadata> {\n\t\tassertServiceMetadata(value);\n\t}\n\n\tstatic isValuizable(value: unknown): value is ValuizableMethod {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\treturn(false);\n\t\t}\n\n\t\t// @ts-ignore\n\t\tif (!('instanceTypeID' in value)) {\n\t\t\treturn(false);\n\t\t}\n\n\t\tif (value.instanceTypeID === Metadata.instanceTypeID) {\n\t\t\treturn(true);\n\t\t}\n\n\t\tif (value.instanceTypeID === 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd') {\n\t\t\treturn(true);\n\t\t}\n\n\t\treturn(false);\n\t}\n\n\tconstructor(url: string | URL, config: MetadataConfig) {\n\t\t/*\n\t\t * Define an \"instanceTypeID\" as an unenumerable property to\n\t\t * ensure that we can identify this object as an instance of\n\t\t * Metadata, but we do not need to serialize it.\n\t\t */\n\t\tObject.defineProperty(this, 'instanceTypeID', {\n\t\t\tvalue: Metadata.instanceTypeID,\n\t\t\tenumerable: false\n\t\t});\n\t\tthis.#url = new URL(url);\n\t\tthis.#cache = {\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tinstance: config.cache?.instance ?? new Map() satisfies URLCacheObject as URLCacheObject,\n\t\t\tpositiveTTL: config.cache?.positiveTTL ?? 60 * 1000,\n\t\t\tnegativeTTL: config.cache?.negativeTTL ?? 5 * 1000\n\t\t};\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#client = config.client;\n\t\tthis.#logger = config.logger;\n\t\tthis.#resolver = config.resolver;\n\t\tthis.#stats = this.#resolver._mutableStats(statsAccessToken);\n\t\tif (config.parent !== undefined) {\n\t\t\tthis.seenURLs = config.parent.seenURLs;\n\t\t} else {\n\t\t\tthis.seenURLs = new Set();\n\t\t}\n\t}\n\n\t/**\n\t * @param metadata Metadata to parse -- base64 encoded string or ArrayBuffer\n\t */\n\tprivate async parseMetadata(metadata: string | ArrayBuffer): Promise<JSONSerializable> {\n\t\tif (typeof metadata === 'string') {\n\t\t\tmetadata = KeetaNetClient.lib.Utils.Helper.bufferToArrayBuffer(Buffer.from(metadata, 'base64'));\n\t\t}\n\n\t\t/*\n\t\t * Attempt to decompress the metadata. If it fails, then\n\t\t * assume it is not compressed.\n\t\t */\n\t\tlet metadataUncompressed: ArrayBuffer;\n\t\ttry {\n\t\t\tmetadataUncompressed = KeetaNetClient.lib.Utils.Buffer.ZlibInflate(metadata);\n\t\t} catch {\n\t\t\tmetadataUncompressed = metadata;\n\t\t}\n\n\t\tconst metadataBytes = Buffer.from(metadataUncompressed);\n\t\tconst metadataDecoded = metadataBytes.toString('utf-8');\n\n\t\t/*\n\t\t * JSON.parse() will always return a JSONSerializable,\n\t\t * and not `unknown`, so we can safely cast it.\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst retval = await this.resolveValue(JSON.parse(metadataDecoded) as JSONSerializable);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readKeetaNetURL(url: URL): Promise<JSONSerializable> {\n\t\tconst accountString = url.hostname;\n\t\tconst path = url.pathname;\n\n\t\tthis.#stats.keetanet.reads++;\n\n\t\tif (path !== '/metadata') {\n\t\t\tthrow(new Error(`Unsupported path: ${path}`));\n\t\t}\n\n\t\tlet account: KeetaNetAccount | string;\n\t\ttry {\n\t\t\taccount = KeetaNetClient.lib.Account.fromPublicKeyString(accountString);\n\t\t} catch {\n\t\t\treturn('');\n\t\t}\n\n\t\tconst accountInfo = await this.#client.getAccountInfo(account);\n\t\tconst metadata = accountInfo.info.metadata;\n\t\tif (metadata === '') {\n\t\t\treturn('');\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Account info for', accountString, '=', accountInfo.info);\n\t\tconst retval = await this.parseMetadata(metadata);\n\t\treturn(retval);\n\t}\n\n\tprivate async readHTTPSURL(url: URL): Promise<JSONSerializable> {\n\t\tthis.#stats.https.reads++;\n\n\t\tconst results = await fetch(url.toString(), {\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\t'Accept': 'application/json'\n\t\t\t}\n\t\t});\n\n\t\tif (!results.ok) {\n\t\t\tthrow(new Error(`Error HTTP status ${results.status} ${results.statusText} for ${url.toString()}`));\n\t\t}\n\n\t\tif (results.status === 204) {\n\t\t\t/*\n\t\t\t * 204 No Content is a valid response, so we return an empty\n\t\t\t * object.\n\t\t\t */\n\t\t\treturn({});\n\t\t}\n\n\t\tif (results.status !== 200) {\n\t\t\tthrow(new Error(`Unexpected HTTP status ${results.status} for ${url.toString()}`));\n\t\t}\n\n\t\tconst metadata = await (await results.blob()).arrayBuffer();\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', metadata);\n\n\t\tconst retval = await this.parseMetadata(metadata);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readURL(url: URL) {\n\t\tthis.#stats.reads++;\n\n\t\tconst cacheKey = url.toString();\n\t\t/*\n\t\t * To ensure any circular references are handled correctly, we\n\t\t * keep track of a chain of accessed URLs. If we see the same\n\t\t * URL twice, then we have a circular reference.\n\t\t */\n\t\tif (this.seenURLs.has(cacheKey)) {\n\t\t\treturn('');\n\t\t}\n\t\tthis.seenURLs.add(cacheKey);\n\n\t\t/*\n\t\t * Verify that the cache entry is still valid. If it is not,\n\t\t * then remove it from the cache.\n\t\t */\n\t\tlet cacheVal = this.#cache.instance.get(cacheKey);\n\n\t\tif (this.#cache.instance.has(cacheKey) && cacheVal !== undefined) {\n\t\t\tif (cacheVal.expires < new Date()) {\n\t\t\t\tthis.#cache.instance.delete(cacheKey);\n\t\t\t\tcacheVal = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (cacheVal !== undefined) {\n\t\t\tthis.#stats.cache.hit++;\n\n\t\t\tif (cacheVal.pass) {\n\t\t\t\treturn(cacheVal.value);\n\t\t\t} else {\n\t\t\t\tthrow(cacheVal.error);\n\t\t\t}\n\t\t}\n\n\t\tthis.#stats.cache.miss++;\n\n\t\tlet retval: JSONSerializable;\n\t\ttry {\n\t\t\tconst protocol = url.protocol;\n\t\t\tif (protocol === 'keetanet:') {\n\t\t\t\tretval = await this.readKeetaNetURL(url);\n\t\t\t} else if (protocol === 'https:') {\n\t\t\t\tretval = await this.readHTTPSURL(url);\n\t\t\t} else {\n\t\t\t\tthis.#stats.unsupported.reads++;\n\t\t\t\tthrow(new Error(`Unsupported protocol: ${protocol}`));\n\t\t\t}\n\t\t} catch (readError) {\n\t\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\t\tpass: false,\n\t\t\t\terror: readError,\n\t\t\t\texpires: new Date(Date.now() + this.#cache.negativeTTL)\n\t\t\t});\n\n\t\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), 'failed:', readError);\n\t\t\tthrow(readError);\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', retval);\n\n\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\tpass: true,\n\t\t\tvalue: retval,\n\t\t\texpires: new Date(Date.now() + this.#cache.positiveTTL)\n\t\t});\n\n\t\treturn(retval);\n\t}\n\n\tprivate async resolveValue<T extends ExternalURL | undefined>(value: T): Promise<JSONSerializable>;\n\tprivate async resolveValue<T extends JSONSerializable | undefined>(value: T): Promise<T>;\n\tprivate async resolveValue<T extends JSONSerializable | ExternalURL | undefined>(value: T): Promise<T | JSONSerializable> {\n\t\tif (value === undefined) {\n\t\t\treturn(value);\n\t\t}\n\n\t\t/*\n\t\t * If the value passed in is a reference to an external URL, then\n\t\t * we need to read that URL (and continue to resolve it).\n\t\t */\n\t\tif (isExternalURL(value)) {\n\t\t\tconst url = new URL(value.url);\n\t\t\tconst retval = await this.readURL(url);\n\n\t\t\treturn(await this.resolveValue(retval));\n\t\t}\n\n\t\treturn(value);\n\t}\n\n\tprivate assertValuizableKind(input: ValuizeInput, expect: ValuizableKind) {\n\t\tswitch (expect) {\n\t\t\tcase 'any':\n\t\t\t\treturn(input);\n\t\t\tcase 'object':\n\t\t\t\tif (typeof input !== 'object') {\n\t\t\t\t\tthrow(new Error(`expected an object, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\tif (input === null) {\n\t\t\t\t\tthrow(new Error('expected an object, got null'));\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error('expected an object, got an array'));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'array':\n\t\t\t\tif (!Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error(`expected an array, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'primitive':\n\t\t\t\tif ((typeof input === 'object' && input !== null) || input === undefined) {\n\t\t\t\t\tthrow(new Error(`expected a primitive, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'string':\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\tif (typeof input !== expect) {\n\t\t\t\t\tthrow(new Error(`expected a ${expect}, got ${typeof input}`));\n\t\t\t\t}\n\t\t\t\treturn(input);\n\t\t\tdefault:\n\t\t\t\tassertNever(expect);\n\t\t}\n\t}\n\n\tprivate async valuize(value: JSONSerializable): Promise<ValuizeInput> {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tlet newValue: ValuizableObject | ValuizableArray;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tnewValue = [];\n\t\t\t} else {\n\t\t\t\tnewValue = {};\n\t\t\t}\n\t\t\tfor (const key in value) {\n\t\t\t\t/*\n\t\t\t\t * Since `key` is the index of the array or\n\t\t\t\t * object, it is safe to use it to index\n\t\t\t\t * into the array or object.\n\t\t\t\t */\n\t\t\t\t// @ts-ignore\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst keyValue: JSONSerializable = value[key];\n\n\t\t\t\tif (isExternalURL(keyValue)) {\n\t\t\t\t\tconst newMetadataObject = new Metadata(keyValue.url, {\n\t\t\t\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\t\t\t\tclient: this.#client,\n\t\t\t\t\t\tlogger: this.#logger,\n\t\t\t\t\t\tresolver: this.#resolver,\n\t\t\t\t\t\tcache: this.#cache,\n\t\t\t\t\t\tparent: this\n\t\t\t\t\t});\n\n\t\t\t\t\tconst newValuizableObject: ValuizableMethod = newMetadataObject.value.bind(newMetadataObject);\n\n\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\tthrow(new Error('internal error: newValue is an array, but it should be an object since it is an external field, which can only be an object'));\n\t\t\t\t\t}\n\t\t\t\t\tnewValue[key] = newValuizableObject;\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * This is safe because `assertValuizableKind` will\n\t\t\t\t\t * ensure the correct output type\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst newValueEntry: ValuizableMethod = async (expect: ValuizableKind = 'any') => {\n\t\t\t\t\t\tconst retval = this.assertValuizableKind(await this.valuize(keyValue), expect);\n\t\t\t\t\t\treturn(retval);\n\t\t\t\t\t};\n\n\t\t\t\t\tObject.defineProperty(newValueEntry, 'instanceTypeID', {\n\t\t\t\t\t\tvalue: 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd',\n\t\t\t\t\t\tenumerable: false\n\t\t\t\t\t});\n\n\t\t\t\t\t/*\n\t\t\t\t\t * TypeScript doesn't track that `key`\n\t\t\t\t\t * is a valid index regardless of the\n\t\t\t\t\t * type of `newValue` is an array or an\n\t\t\t\t\t * object, so we need to use `@ts-ignore`\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tnewValue[key] = newValueEntry;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(newValue);\n\t\t} else {\n\t\t\treturn(value);\n\t\t}\n\t}\n\n\tasync value(expect: 'object'): Promise<ValuizableObject>;\n\tasync value(expect: 'array'): Promise<ValuizableArray>;\n\tasync value(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\tasync value(expect: 'string'): Promise<string>;\n\tasync value(expect: 'number'): Promise<number>;\n\tasync value(expect: 'boolean'): Promise<boolean>;\n\tasync value(expect: 'any'): Promise<ValuizeInput>;\n\tasync value(expect?: ValuizableKind): Promise<ValuizeInput>;\n\tasync value(expect: ValuizableKind = 'any'): Promise<ValuizeInput> {\n\t\tconst value = await this.readURL(this.#url);\n\n\t\tconst retval = this.assertValuizableKind(await this.valuize(value), expect);\n\n\t\treturn(retval);\n\t}\n}\n\n\ntype ResolverStats = {\n\tkeetanet: {\n\t\treads: number;\n\t};\n\thttps: {\n\t\treads: number;\n\t};\n\tunsupported: {\n\t\treads: number;\n\t};\n\treads: number;\n\tcache: {\n\t\thit: number;\n\t\tmiss: number;\n\t}\n};\n\nclass Resolver {\n\treadonly #root: ResolverConfig['root'];\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #stats: ResolverStats;\n\treadonly #metadataCache: NonNullable<MetadataConfig['cache']>;\n\n\treadonly id: string;\n\n\tstatic readonly Metadata: typeof Metadata = Metadata;\n\n\tprivate readonly lookupMap: {\n\t\t[Service in Services]: {\n\t\t\tsearch: (input: ValuizableObject | undefined, criteria: ServiceSearchCriteria<Service>) => Promise<ResolverLookupServiceResults<Service> | undefined>;\n\t\t};\n\t} = {\n\t\t'banking': {\n\t\t\tsearch: this.lookupBankingServices.bind(this)\n\t\t},\n\t\t'kyc': {\n\t\t\tsearch: this.lookupKYCServices.bind(this)\n\t\t},\n\t\t'fx': {\n\t\t\tsearch: this.lookupFXServices.bind(this)\n\t\t},\n\t\t'inbound': {\n\t\t\tsearch: async (_ignored_input: ValuizableObject | undefined, _ignored_criteria: ServiceSearchCriteria<'inbound'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t},\n\t\t'outbound': {\n\t\t\tsearch: async (_ignored_input: ValuizableObject | undefined, _ignored_criteria: ServiceSearchCriteria<'outbound'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t},\n\t\t'cards': {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tsearch: async (_input: ValuizableObject | undefined, _criteria: ServiceSearchCriteria<'cards'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t}\n\t};\n\n\n\tconstructor(config: ResolverConfig) {\n\t\tthis.#root = config.root;\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#logger = config.logger;\n\t\tthis.#metadataCache = {\n\t\t\t...config.cache,\n\t\t\tinstance: new Map()\n\t\t};\n\n\t\tthis.id = config.id ?? crypto.randomUUID();\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Creating resolver with root account', this.#root.publicKeyString.get());\n\n\t\tif (KeetaNetClient.Client.isInstance(config.client)) {\n\t\t\tthis.#client = config.client;\n\t\t} else {\n\t\t\tthis.#client = config.client.client;\n\t\t}\n\n\t\tthis.#stats = {\n\t\t\tkeetanet: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\thttps: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\tunsupported: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\treads: 0,\n\t\t\tcache: {\n\t\t\t\thit: 0,\n\t\t\t\tmiss: 0\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @internal */\n\t_mutableStats(accessToken: symbol) {\n\t\tif (accessToken !== statsAccessToken) {\n\t\t\tthrow(new Error('Invalid access token'));\n\t\t}\n\n\t\treturn(this.#stats);\n\t}\n\n\tget stats(): ResolverStats {\n\t\treturn(structuredClone(this.#stats));\n\t}\n\n\tprivate async lookupBankingServices(bankingServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'banking'>) {\n\t\tif (bankingServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tlet canonicalCurrencyCriteria;\n\t\tif ('currencyCodes' in criteria) {\n\t\t\tcanonicalCurrencyCriteria = {\n\t\t\t\tcurrencyCodes: criteria.currencyCodes.map(convertToCurrencySearchCanonical)\n\t\t\t}\n\t\t}\n\n\t\tlet canonicalCountryCriteria;\n\t\tif ('countryCodes' in criteria) {\n\t\t\tcanonicalCountryCriteria = {\n\t\t\t\tcountryCodes: criteria.countryCodes.map(convertToCountrySearchCanonical)\n\t\t\t}\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'banking'> = {};\n\t\tfor (const checkBankingServiceID in bankingServices) {\n\t\t\ttry {\n\t\t\t\tconst checkBankingService = await isValidOperations(await bankingServices[checkBankingServiceID]?.('object'));\n\t\t\t\tif (!checkBankingService) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (canonicalCurrencyCriteria !== undefined && 'currencyCodes' in checkBankingService) {\n\t\t\t\t\tif (!(await hasAllCurrencyCodes(checkBankingService, canonicalCurrencyCriteria))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (canonicalCountryCriteria !== undefined && 'countryCodes' in checkBankingService) {\n\t\t\t\t\tif (!(await hasAnyCountryCodes(checkBankingService, canonicalCountryCriteria))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkBankingServiceID] = assertResolverLookupBankingResult(checkBankingService);\n\t\t\t} catch (checkBankingServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking banking service', checkBankingServiceID, ':', checkBankingServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tprivate async lookupKYCServices(kycServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'kyc'>) {\n\t\tif (kycServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'kyc'> = {};\n\t\tfor (const checkKYCServiceID in kycServices) {\n\t\t\ttry {\n\t\t\t\tconst checkKYCService = await kycServices[checkKYCServiceID]?.('object');\n\t\t\t\tif (checkKYCService === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!('operations' in checkKYCService)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (criteria.countryCodes !== undefined) {\n\t\t\t\t\tlet acceptable = true;\n\t\t\t\t\t/*\n\t\t\t\t\t * If the KYC service does not have a countryCodes\n\t\t\t\t\t * property, then it can validate accounts in any\n\t\t\t\t\t * country, so we skip this check.\n\t\t\t\t\t */\n\t\t\t\t\tif ('countryCodes' in checkKYCService) {\n\t\t\t\t\t\tconst countryCodes = await checkKYCService.countryCodes?.('array') ?? [];\n\t\t\t\t\t\tconst checkKYCServiceCountryCodes = await Promise.all(countryCodes.map(async function(item) {\n\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Checking country codes:', criteria.countryCodes, 'against', checkKYCServiceCountryCodes, 'for', checkKYCServiceID);\n\n\t\t\t\t\t\tfor (const checkCountryCode of criteria.countryCodes) {\n\t\t\t\t\t\t\tconst checkCountryCodeCanonical = convertToCountrySearchCanonical(checkCountryCode);\n\t\t\t\t\t\t\tif (!checkKYCServiceCountryCodes.includes(checkCountryCodeCanonical)) {\n\t\t\t\t\t\t\t\tacceptable = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!acceptable) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkKYCServiceID] = assertResolverLookupKYCResult(checkKYCService);\n\t\t\t} catch (checkKYCServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking KYC service', checkKYCServiceID, ':', checkKYCServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tprivate async lookupFXServices(fxServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'fx'>): Promise<ResolverLookupServiceResults<'fx'> | undefined> {\n\t\tif (fxServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst isCurrencySearchInput = createIs<CurrencySearchInput>();\n\t\t// if currency code is provided then convert to canonical format otherwise token public key string was provided\n\t\tconst canonicalInputCurrencyCriteria = isCurrencySearchInput(criteria.inputCurrencyCode) ? convertToCurrencySearchCanonical(criteria.inputCurrencyCode) : criteria.inputCurrencyCode;\n\t\tconst canonicalOutputCurrencyCriteria = isCurrencySearchInput(criteria.outputCurrencyCode) ? convertToCurrencySearchCanonical(criteria.outputCurrencyCode) : criteria.outputCurrencyCode;\n\t\t// if search criteria is not provided then set token to undefined\n\t\tconst inputToken = canonicalInputCurrencyCriteria !== undefined ? await this.lookupToken(canonicalInputCurrencyCriteria) : undefined;\n\t\tconst outputToken = canonicalOutputCurrencyCriteria !== undefined ? await this.lookupToken(canonicalOutputCurrencyCriteria) : undefined;\n\t\tif (criteria.inputCurrencyCode !== undefined && inputToken === null) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Input currency code', canonicalInputCurrencyCriteria, 'could not be resolved to a token');\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tif (criteria.outputCurrencyCode !== undefined && outputToken === null) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Output currency code', canonicalOutputCurrencyCriteria, 'could not be resolved to a token');\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'fx'> = {};\n\t\tfor (const checkFXServiceID in fxServices) {\n\t\t\ttry {\n\t\t\t\tconst checkFXService = await assertResolverLookupFXResult(await fxServices[checkFXServiceID]?.('object'));\n\t\t\t\tif (!checkFXService) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst fromUnrealized: ToValuizable<NonNullable<ServiceMetadata['services']['fx']>[string]['from']> = checkFXService.from;\n\t\t\t\tconst from = await fromUnrealized?.('array');\n\t\t\t\tif (from === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet acceptable = false;\n\t\t\t\tfor (const fromEntryUnrealized of from) {\n\t\t\t\t\tconst fromEntry = await fromEntryUnrealized?.('object');\n\n\t\t\t\t\tif (inputToken) {\n\t\t\t\t\t\tconst fromCurrencyCodes = await fromEntry.currencyCodes?.('array') ?? [];\n\t\t\t\t\t\tconst fromCurrencyCodesValues = await Promise.all(fromCurrencyCodes.map(async function(item) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn(undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t// If inputToken was provided, check if it matches providers supported input currencies\n\t\t\t\t\t\tif (!fromCurrencyCodesValues.includes(inputToken.token)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputToken) {\n\t\t\t\t\t\tconst toCurrencyCodes = await fromEntry.to?.('array') ?? [];\n\t\t\t\t\t\tconst toCurrencyCodesValues = await Promise.all(toCurrencyCodes.map(async function(item) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn(undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t// If outputToken was provided, check if it matches providers supported output currencies\n\t\t\t\t\t\tif (!toCurrencyCodesValues.includes(outputToken.token)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/* XXX:TODO: Check kycProviders */\n\t\t\t\t\tacceptable = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!acceptable) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tretval[checkFXServiceID] = await assertResolverLookupFXResult(checkFXService);\n\t\t\t} catch (checkFXServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking FX service', checkFXServiceID, ':', checkFXServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tasync #getRootMetadata() {\n\t\tconst rootURL = new URL(`keetanet://${this.#root.publicKeyString.get()}/metadata`);\n\t\tconst metadata = new Metadata(rootURL, {\n\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\tclient: this.#client,\n\t\t\tlogger: this.#logger,\n\t\t\tresolver: this,\n\t\t\tcache: this.#metadataCache\n\t\t});\n\t\tconst rootMetadata = await metadata.value('object');\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Root Metadata:', rootMetadata);\n\n\t\tif (!('version' in rootMetadata)) {\n\t\t\tthrow(new Error('Root metadata is missing \"version\" property'));\n\t\t}\n\n\t\tconst rootMetadataVersion = await rootMetadata.version?.('primitive');\n\t\tif (rootMetadataVersion !== 1) {\n\t\t\tthrow(new Error(`Unsupported metadata version: ${rootMetadataVersion}`));\n\t\t}\n\n\t\treturn(rootMetadata);\n\t}\n\n\tasync listTokens(): Promise<{ token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; }[]> {\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedCurrenciesMapProperty = rootMetadata.currencyMap;\n\t\tif (definedCurrenciesMapProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"currencyMap\" property'));\n\t\t}\n\t\tconst definedCurrenciesMap = await definedCurrenciesMapProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Defined Currencies Map:', definedCurrenciesMap);\n\n\t\tconst retval: { token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; }[] = [];\n\t\tfor (const [checkCurrencyCode, checkTokenProperty] of Object.entries(definedCurrenciesMap)) {\n\t\t\tconst checkToken = await checkTokenProperty?.('string');\n\t\t\tif (checkToken === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isCurrencySearchCanonical(checkCurrencyCode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkTokenObject = KeetaNetAccount.fromPublicKeyString(checkToken);\n\t\t\t\tif (!checkTokenObject.isToken()) {\n\t\t\t\t\tthrow(new Error('Not a token account'));\n\t\t\t\t}\n\n\t\t\t\tretval.push({\n\t\t\t\t\ttoken: checkTokenObject.publicKeyString.get(),\n\t\t\t\t\tcurrency: checkCurrencyCode\n\t\t\t\t});\n\t\t\t} catch (validationError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Token public key for currency code', checkCurrencyCode, 'is invalid:', validationError);\n\t\t\t}\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tasync lookupToken(currencyCode: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString): Promise<{ token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; } | null> {\n\t\tlet tokenPublicKey: KeetaNetAccountTokenPublicKeyString | undefined;\n\t\tif (typeof currencyCode === 'string') {\n\t\t\ttry {\n\t\t\t\tconst token = KeetaNetAccount.fromPublicKeyString(currencyCode);\n\t\t\t\tif (token.isToken()) {\n\t\t\t\t\ttokenPublicKey = token.publicKeyString.get();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t/* Ignored */\n\t\t\t}\n\t\t}\n\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedCurrenciesMapProperty = rootMetadata.currencyMap;\n\t\tif (definedCurrenciesMapProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"currencyMap\" property'));\n\t\t}\n\t\tconst definedCurrenciesMap = await definedCurrenciesMapProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Defined Currencies Map:', definedCurrenciesMap);\n\n\t\tlet currencyCodeFound: CurrencySearchCanonical | undefined;\n\t\tif (tokenPublicKey === undefined) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Performing forward lookup for currency code', currencyCode);\n\n\t\t\t/*\n\t\t\t * Perform a forward lookup from the currency code\n\t\t\t * to the token public key\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\t\tconst currencyCodeCanonical = convertToCurrencySearchCanonical(currencyCode as unknown as any);\n\t\t\tif (currencyCodeCanonical === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\n\t\t\tconst checkToken = await definedCurrenciesMap[currencyCodeCanonical]?.('string');\n\t\t\tif (checkToken === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Validating token public key for currency code', currencyCodeCanonical, ':', checkToken, typeof checkToken);\n\t\t\ttry {\n\t\t\t\tconst checkTokenObject = KeetaNetAccount.fromPublicKeyString(checkToken);\n\t\t\t\tif (!checkTokenObject.isToken()) {\n\t\t\t\t\tthrow(new Error('Not a token account'));\n\t\t\t\t}\n\n\t\t\t\ttokenPublicKey = checkTokenObject.publicKeyString.get();\n\t\t\t\tcurrencyCodeFound = currencyCodeCanonical;\n\t\t\t} catch (validationError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Token public key for currency code', currencyCodeCanonical, 'is invalid:', validationError);\n\n\t\t\t\treturn(null);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Performing reverse lookup for token public key', tokenPublicKey);\n\n\t\t\t/*\n\t\t\t * Perform a reverse lookup from the token public key\n\t\t\t * to the currency code\n\t\t\t */\n\t\t\tfor (const [checkCurrencyCode, checkTokenProperty] of Object.entries(definedCurrenciesMap)) {\n\t\t\t\tconst checkToken = await checkTokenProperty?.('string');\n\t\t\t\tif (checkToken === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (checkToken === tokenPublicKey) {\n\t\t\t\t\tif (isCurrencySearchCanonical(checkCurrencyCode)) {\n\t\t\t\t\t\tcurrencyCodeFound = checkCurrencyCode;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currencyCodeFound === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\t\t}\n\n\t\treturn({\n\t\t\ttoken: tokenPublicKey,\n\t\t\tcurrency: currencyCodeFound\n\t\t});\n\t}\n\n\tasync lookup<T extends keyof ServicesMetadataLookupMap>(service: T, criteria: ServicesMetadataLookupMap[T]['criteria']): Promise<ServicesMetadataLookupMap[T]['results'] | undefined> {\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedServicesProperty = rootMetadata.services;\n\t\tif (definedServicesProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"services\" property'));\n\t\t}\n\t\tconst definedServices = await definedServicesProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Looking up', service, 'with criteria:', criteria, 'in', definedServices);\n\n\t\tconst serviceLookup = this.lookupMap[service].search;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\treturn(await serviceLookup(await definedServices[service]?.('object'), criteria as any));\n\t}\n\n\tclearCache(): void {\n\t\tthis.#metadataCache.instance.clear();\n\t\tthis.#stats.cache.hit = 0;\n\t\tthis.#stats.cache.miss = 0;\n\t\tthis.#stats.https.reads = 0;\n\t\tthis.#stats.keetanet.reads = 0;\n\t\tthis.#stats.unsupported.reads = 0;\n\t\tthis.#stats.reads = 0;\n\t}\n}\n\nexport default Resolver;\nexport type {\n\tServiceMetadata,\n\tServiceMetadataExternalizable,\n\tServiceSearchCriteria,\n\tServices\n};\n"]}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","sourcesContent":["import * as KeetaNetClient from '@keetanetwork/keetanet-client';\nimport * as CurrencyInfo from '@keetanetwork/currency-info';\nimport type { Logger } from './log/index.ts';\nimport type { JSONSerializable } from './utils/json.ts';\nimport { assertNever } from './utils/never.js';\nimport { Buffer } from './utils/buffer.js';\nimport crypto from './utils/crypto.js';\n\nimport { createIs, createAssert } from 'typia';\n\ntype ExternalURL = { external: '2b828e33-2692-46e9-817e-9b93d63f28fd'; url: string; };\n\ntype KeetaNetAccount = InstanceType<typeof KeetaNetClient.lib.Account>;\nconst KeetaNetAccount: typeof KeetaNetClient.lib.Account = KeetaNetClient.lib.Account;\ntype KeetaNetAccountTokenPublicKeyString = ReturnType<InstanceType<typeof KeetaNetClient.lib.Account<typeof KeetaNetAccount.AccountKeyAlgorithm.TOKEN>>['publicKeyString']['get']>;\n\n/**\n * Canonical form of a currency code for use in the ServiceMetadata\n * Which is either the ISO currency code (e.g. \"USD\", \"EUR\", \"JPY\")\n * or a cryptocurrency code prefixed with a dollar sign (e.g. \"$BTC\", \"$ETH\")\n */\ntype ServiceMetadataCurrencyCodeCanonical = CurrencyInfo.ISOCurrencyCode | `$${string}`;\n/**\n * Input types which can be used to search for which token represents\n * a given currency or cryptocurrency.\n */\ntype CurrencySearchInput = ServiceMetadataCurrencyCodeCanonical | CurrencyInfo.ISOCurrencyNumber | CurrencyInfo.Currency;\ntype CurrencySearchCanonical = ServiceMetadataCurrencyCodeCanonical;\ntype CountrySearchInput = CurrencyInfo.ISOCountryCode | CurrencyInfo.ISOCountryNumber | CurrencyInfo.Country;\ntype CountrySearchCanonical = CurrencyInfo.ISOCountryCode; /* XXX:TODO */\n\nconst isCurrencySearchCanonical = createIs<CurrencySearchCanonical>();\n\n// #region Global Service Metadata\n/**\n * Service Metadata General Structure\n */\ntype ServiceMetadata = {\n\tversion: number;\n\t/**\n\t * Map of the currency code to the token public key which\n\t * represents that currency.\n\t */\n\tcurrencyMap: {\n\t\t[currencyCode in ServiceMetadataCurrencyCodeCanonical]?: KeetaNetAccountTokenPublicKeyString;\n\t};\n\tservices: {\n\t\tbanking?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\tcreateAccount?: string;\n\t\t\t\t};\n\t\t\t\tcurrencyCodes: string[];\n\t\t\t\tcountryCodes: string[];\n\t\t\t\tkycProviders?: string[];\n\t\t\t};\n\t\t};\n\t\tkyc?: {\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Check if the KYC provider can\n\t\t\t\t\t * service a more specific locality\n\t\t\t\t\t * (optional)\n\t\t\t\t\t */\n\t\t\t\t\tcheckLocality?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Request an estimate for a KYC\n\t\t\t\t\t * verification (optional)\n\t\t\t\t\t */\n\t\t\t\t\tgetEstimate?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Begin the KYC verification process\n\t\t\t\t\t * with this KYC provider\n\t\t\t\t\t */\n\t\t\t\t\tcreateVerification?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get the certificate for the\n\t\t\t\t\t * KYC verification\n\t\t\t\t\t */\n\t\t\t\t\tgetCertificates?: string;\n\t\t\t\t};\n\t\t\t\t/**\n\t\t\t\t * Country codes which this KYC provider can\n\t\t\t\t * validate accounts in. If this is not\n\t\t\t\t * specified, then the KYC provider can\n\t\t\t\t * validate accounts in any country.\n\t\t\t\t */\n\t\t\t\tcountryCodes?: string[];\n\t\t\t\t/**\n\t\t\t\t * The Certificate Authority (CA) Certificate\n\t\t\t\t * that this KYC provider uses to sign KYC\n\t\t\t\t * certificates. This is used to identify the\n\t\t\t\t * KYC provider.\n\t\t\t\t */\n\t\t\t\tca: string;\n\t\t\t};\n\t\t};\n\t\t/**\n\t\t * Foreign Exchange (FX) services\n\t\t *\n\t\t * This is used to identify service providers which\n\t\t * can convert currency from one currency to another.\n\t\t */\n\t\tfx?: {\n\t\t\t/**\n\t\t\t * Provider ID which identifies the FX provider\n\t\t\t */\n\t\t\t[id: string]: {\n\t\t\t\toperations: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Get an estimate for a currency\n\t\t\t\t\t * conversion (optional)\n\t\t\t\t\t */\n\t\t\t\t\tgetEstimate?: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get a quote for a currency\n\t\t\t\t\t * conversion\n\t\t\t\t\t */\n\t\t\t\t\tgetQuote: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Create an exchange to convert\n\t\t\t\t\t * currency\n\t\t\t\t\t */\n\t\t\t\t\tcreateExchange: string;\n\t\t\t\t\t/**\n\t\t\t\t\t * Get the status of an exchange\n\t\t\t\t\t * which was previously created\n\t\t\t\t\t */\n\t\t\t\t\tgetExchangeStatus: string;\n\t\t\t\t};\n\t\t\t\t/**\n\t\t\t\t * Path for which can be used to identify which\n\t\t\t\t * currencies this FX provider can convert\n\t\t\t\t * between.\n\t\t\t\t */\n\t\t\t\tfrom: {\n\t\t\t\t\t/**\n\t\t\t\t\t * Currency code which this FX provider can\n\t\t\t\t\t * convert from\n\t\t\t\t\t */\n\t\t\t\t\tcurrencyCodes: KeetaNetAccountTokenPublicKeyString[];\n\t\t\t\t\t/**\n\t\t\t\t\t * Currency codes which this FX provider can\n\t\t\t\t\t * convert to from the `from.currencyCode`\n\t\t\t\t\t */\n\t\t\t\t\tto: KeetaNetAccountTokenPublicKeyString[];\n\t\t\t\t\t/**\n\t\t\t\t\t * KYC providers which this FX provider\n\t\t\t\t\t * supports (DN) -- if not specified,\n\t\t\t\t\t * then it does not require KYC.\n\t\t\t\t\t */\n\t\t\t\t\tkycProviders?: string[];\n\t\t\t\t}[];\n\t\t\t}\n\t\t};\n\t\tinbound?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t\toutbound?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t\tcards?: {\n\t\t\t[id: string]: {\n\t\t\t\t/* XXX:TODO */\n\t\t\t\tworkInProgress?: true;\n\t\t\t};\n\t\t};\n\t};\n};\n\ntype ServiceMetadataExternalizable = ToJSONValuizable<ServiceMetadata>;\n\n/**\n * Types of services which can be resolved\n */\ntype Services = keyof ServiceMetadata['services'];\n\n/**\n * Search criteria for each service type\n */\ntype ServiceSearchCriteria<T extends Services> = {\n\t'banking': {\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ALL of the following currencies.\n\t\t */\n\t\tcurrencyCodes?: CurrencySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts in ANY of the following countries.\n\t\t */\n\t\tcountryCodes?: CountrySearchInput[];\n\t\t/**\n\t\t * Search for a banking provider which supports creating\n\t\t * accounts verified by ANY of the following KYC providers\n\t\t * (DN).\n\t\t */\n\t\tkycProviders?: string[]; /* XXX:TODO */\n\t};\n\t'fx': {\n\t\t/**\n\t\t * Search for a provider which can convert from the following\n\t\t * input currency\n\t\t */\n\t\tinputCurrencyCode?: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString;\n\t\t/**\n\t\t * Search for a provider which can convert to the following\n\t\t * output currency\n\t\t */\n\t\toutputCurrencyCode?: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString;\n\t\t/**\n\t\t * Search for a provider which supports ANY of the following\n\t\t * KYC providers\n\t\t */\n\t\tkycProviders?: string[];\n\t};\n\t'kyc': {\n\t\t/**\n\t\t * Search for a KYC provider which can verify accounts in ALL\n\t\t * of the following countries.\n\t\t */\n\t\tcountryCodes: CountrySearchInput[];\n\t};\n\t'inbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'outbound': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n\t'cards': {\n\t\t/* XXX:TODO */\n\t\tworkInProgress: true;\n\t};\n}[T];\n\ntype ResolverLookupServiceResults<Service extends Services> = { [id: string]: ToValuizableObject<NonNullable<ServiceMetadata['services'][Service]>[string]> };\n\ntype ServicesMetadataLookupMap = {\n\t[Service in Services]: {\n\t\tcriteria: ServiceSearchCriteria<Service>;\n\t\tresults: ResolverLookupServiceResults<Service>;\n\t};\n};\n\nfunction assertValidCountryCodes(input: unknown): asserts input is { countryCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\tthrow(new Error('Expected \"countryCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.countryCodes !== 'function' && !Array.isArray(input.countryCodes)) {\n\t\tthrow(new Error(`Expected \"countryCodes\" to be an array | function, got ${typeof input.countryCodes}`));\n\t}\n\n\tif (Array.isArray(input.countryCodes)) {\n\t\tfor (const countryCode of input.countryCodes) {\n\t\t\tif (typeof countryCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"countryCodes\" to be an array of strings, got ${typeof countryCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOptionalCountryCodes(input: unknown): asserts input is { countryCodes?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['countryCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('countryCodes' in input)) {\n\t\treturn;\n\t}\n\n\tassertValidCountryCodes(input);\n}\n\nfunction assertValidCurrencyCodes(input: unknown): asserts input is { currencyCodes: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['currencyCodes'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('currencyCodes' in input)) {\n\t\tthrow(new Error('Expected \"currencyCodes\" to be present, but it was not found'));\n\t}\n\n\tif (typeof input.currencyCodes !== 'function' && !Array.isArray(input.currencyCodes)) {\n\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array | function, got ${typeof input.currencyCodes}`));\n\t}\n\n\tif (Array.isArray(input.currencyCodes)) {\n\t\tfor (const currencyCode of input.currencyCodes) {\n\t\t\tif (typeof currencyCode !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"currencyCodes\" to be an array of strings, got ${typeof currencyCode}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsBanking(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['operations'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('operations' in input)) {\n\t\tthrow(new Error('Expected \"operations\" key in KYC service, but it was not found'));\n\t}\n\n\tif ((typeof input.operations !== 'object' || input.operations === null) && typeof input.operations !== 'function') {\n\t\tthrow(new Error(`Expected \"operations\" to be an object | function, got ${typeof input.operations}`));\n\t}\n\n\tif (typeof input.operations !== 'function') {\n\t\tfor (const [operation, operationValue] of Object.entries(input.operations)) {\n\t\t\tif (typeof operation !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations\" to be an object with string keys, got ${typeof operation}`));\n\t\t\t}\n\n\t\t\tif (typeof operationValue !== 'string') {\n\t\t\t\tthrow(new Error(`Expected \"operations.${operation}\" to be a string, got ${typeof operationValue}`));\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidOperationsKYC(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['operations'] } {\n\t/* XXX:TODO: Validate the specific operations */\n\tassertValidOperationsBanking(input);\n}\n\nfunction assertValidOperationsFX(input: unknown): asserts input is { operations: ToValuizableObject<NonNullable<ServiceMetadata['services']['fx']>[string]>['operations'] } {\n\t/* XXX:TODO: Validate the specific operations */\n\tassertValidOperationsBanking(input);\n}\n\nfunction assertValidOptionalKYCProviders(input: unknown): asserts input is { kycProviders?: ToValuizableObject<NonNullable<ServiceMetadata['services']['banking']>[string]>['kycProviders'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif ('kycProviders' in input) {\n\t\tif (typeof input.kycProviders !== 'function' && !Array.isArray(input.kycProviders)) {\n\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array | function, got ${typeof input.kycProviders}`));\n\t\t}\n\n\t\tif (Array.isArray(input.kycProviders)) {\n\t\t\tfor (const kycProvider of input.kycProviders) {\n\t\t\t\tif (typeof kycProvider !== 'string') {\n\t\t\t\t\tthrow(new Error(`Expected \"kycProviders\" to be an array of strings, got ${typeof kycProvider}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction assertValidCA(input: unknown): asserts input is { ca: ToValuizableObject<NonNullable<ServiceMetadata['services']['kyc']>[string]>['ca'] } {\n\tif (typeof input !== 'object' || input === null) {\n\t\tthrow(new Error(`Expected an object, got ${typeof input}`));\n\t}\n\n\tif (!('ca' in input)) {\n\t\tthrow(new Error('Expected \"ca\" key in KYC service, but it was not found'));\n\t}\n\n\tif (typeof input.ca !== 'string' && typeof input.ca !== 'function') {\n\t\tthrow(new Error(`Expected \"ca\" to be a string | function, got ${typeof input.ca}`));\n\t}\n}\n\nconst assertResolverLookupBankingResult = function(input: unknown): ResolverLookupServiceResults<'banking'>[string] {\n\tassertValidOperationsBanking(input);\n\tassertValidCountryCodes(input);\n\tassertValidCurrencyCodes(input);\n\tassertValidOptionalKYCProviders(input);\n\n\treturn(input);\n\n};\nconst assertResolverLookupKYCResult = function(input: unknown): ResolverLookupServiceResults<'kyc'>[string] {\n\tassertValidOperationsKYC(input);\n\tassertValidOptionalCountryCodes(input);\n\tassertValidCA(input);\n\n\treturn(input);\n};\n\nconst assertResolverLookupFXResult = async function(input: unknown): Promise<ResolverLookupServiceResults<'fx'>[string]> {\n\tassertValidOperationsFX(input);\n\n\tif (!('from' in input)) {\n\t\tthrow(new Error('Expected \"from\" key in FX service, but it was not found'));\n\t}\n\n\tconst fromUnrealized = input.from;\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tif (!Metadata.isValuizable(fromUnrealized)) {\n\t\tthrow(new Error(`Expected \"from\" to be an Valuizable, got ${typeof fromUnrealized}`));\n\t}\n\n\t// XXX:TODO: Perform deeper validation of the \"from\" structure\n\tawait fromUnrealized('array');\n\n\t// XXX:TODO: Perform deeper validation of the \"from\" structure\n\t// @ts-ignore\n\treturn(input);\n};\n\n// #endregion\n\n// #region Validation\n\nasync function isValidOperations(input: unknown): Promise<{ operations: ValuizableMethod } | false> {\n\tif (typeof input !== 'object' || input === null) {\n\t\treturn(false);\n\t}\n\n\tif (!('operations' in input)) {\n\t\treturn(false);\n\t}\n\n\tconst operations = input.operations;\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tif (!Metadata.isValuizable(operations)) {\n\t\treturn(false);\n\t}\n\n\treturn({\n\t\t...input,\n\t\toperations\n\t});\n}\n\nfunction convertToCurrencySearchCanonical(input: CurrencySearchInput): CurrencySearchCanonical {\n\tif (CurrencyInfo.Currency.isCurrencyCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Currency.isISOCurrencyNumber(input)) {\n\t\tinput = new CurrencyInfo.Currency(input);\n\t\treturn(input.code);\n\t} else if (typeof input === 'string') {\n\t\treturn(input);\n\t} else if (input === null) {\n\t\tthrow(new Error('Invalid currency input: null'));\n\t} else if ('code' in input) {\n\t\treturn(input.code);\n\t} else {\n\t\tthrow(new Error(`Invalid currency input: ${input}`));\n\t}\n}\n\nasync function hasAllCurrencyCodes(input: unknown, criteria: { currencyCodes: CurrencySearchCanonical[] }): Promise<boolean> {\n\t// XXX:TODO: Avoid using exceptions for flow-control\n\tassertValidCurrencyCodes(input);\n\n\tconst currencyCodes = await input.currencyCodes?.('array') ?? [];\n\tconst inputCurrencyCodes = await Promise.all(currencyCodes.map(async function(item) {\n\t\treturn(await item?.('primitive'));\n\t}));\n\n\tfor (const checkCurrencyCode of criteria.currencyCodes) {\n\t\tconst checkCurrencyCodeCanonical = convertToCurrencySearchCanonical(checkCurrencyCode);\n\t\tif (!inputCurrencyCodes.includes(checkCurrencyCodeCanonical)) {\n\t\t\treturn(false);\n\t\t}\n\t}\n\n\treturn(true);\n}\n\nasync function hasAnyCountryCodes(input: unknown, criteria: { countryCodes: CountrySearchCanonical[] }): Promise<boolean> {\n\t// XXX:TODO: Avoid using exceptions for flow-control\n\tassertValidCountryCodes(input);\n\n\tconst countryCodes = await input.countryCodes?.('array') ?? [];\n\n\tfor (const countryCode of countryCodes) {\n\t\tconst countryCodeValue = await countryCode?.('primitive');\n\t\tif (countryCodeValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\tif (criteria.countryCodes.includes(countryCodeValue as any)) {\n\t\t\treturn(true);\n\t\t}\n\t}\n\n\treturn(false);\n}\n\n// #endregion\n\nfunction convertToCountrySearchCanonical(input: CountrySearchInput): CountrySearchCanonical {\n\tif (CurrencyInfo.Country.isCountryCode(input)) {\n\t\treturn(input);\n\t} else if (CurrencyInfo.Country.isISOCountryNumber(input)) {\n\t\tinput = new CurrencyInfo.Country(input);\n\t}\n\n\treturn(input.code);\n}\n\n/**\n * Check if a value is an ExternalURL\n */\nconst isExternalURL = createIs<ExternalURL>();\n\ntype JSONSerializablePrimitive = Exclude<JSONSerializable, object>;\ntype ValuizeInput = JSONSerializablePrimitive | ValuizableObject | ValuizableArray;\ntype ValuizableArray = (ValuizableMethod | undefined)[];\ntype ValuizableObject = { [key: string]: ValuizableMethod | undefined };\n\ntype ValuizableKind = 'any' | 'object' | 'array' | 'primitive' | 'string' | 'number' | 'boolean';\n\ninterface ValuizableMethodBase {\n\t(expect?: ValuizableKind): Promise<ValuizeInput>;\n\t(expect: 'any'): Promise<ValuizeInput>;\n}\n\ninterface ValuizableMethod extends ValuizableMethodBase {\n\t(expect: 'object'): Promise<ValuizableObject>;\n\t(expect: 'array'): Promise<ValuizableArray>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'boolean'): Promise<boolean>;\n};\n\ninterface ToValuizableExpectString extends ValuizableMethodBase {\n\t(expect: 'string'): Promise<string>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\n\ninterface ToValuizableExpectNumber extends ValuizableMethodBase {\n\t(expect: 'number'): Promise<number>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\n\ninterface ToValuizableExpectBoolean extends ValuizableMethodBase {\n\t(expect: 'boolean'): Promise<boolean>;\n\t(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n};\n/* eslint-disable @stylistic/indent */\ntype ToValuizableObject<T extends object> = {\n\t[K in keyof T]:\n\t\tT[K] extends string ? ToValuizableExpectString :\n\t\tT[K] extends number ? ToValuizableExpectNumber :\n\t\tT[K] extends boolean ? ToValuizableExpectBoolean :\n\t\tT[K] extends JSONSerializablePrimitive ?\n\t\t\t(expect: 'primitive') => Promise<JSONSerializablePrimitive> :\n\t\tT[K] extends unknown[] ?\n\t\t\t(expect: 'array') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends object ?\n\t\t\t(expect: 'object') => Promise<ToValuizableObject<T[K]>> :\n\t\tT[K] extends (infer U | undefined) ?\n\t\t\tToValuizable<U> | undefined :\n\t\tnever;\n};\ntype ToValuizable<T> = ToValuizableObject<{ tmp: T }>['tmp'];\n\ntype ToJSONValuizableObject<T extends object> = {\n\t[K in keyof T]: (\n\t\tT[K] extends object ?\n\t\t\tToJSONValuizableObject<T[K]> :\n\t\tT[K] extends (object | undefined) ?\n\t\t\tToJSONValuizableObject<NonNullable<T[K]>> | undefined :\n\t\tT[K]\n\t) | ExternalURL;\n};\ntype ToJSONValuizable<T> = ToJSONValuizableObject<{ tmp: T }>['tmp'];\n\ntype ValuizeResolvable = JSONSerializablePrimitive | ValuizableObject | ValuizableArray | ValuizableMethod;\n\n/*\n * Access token to share with the Metadata object to allow it to\n * access the mutable stats object.\n */\nconst statsAccessToken = Symbol('statsAccessToken');\n\n/**\n * A cache object\n */\ntype URLCacheObject = Map<string, {\n\tpass: true;\n\tvalue: JSONSerializable;\n\texpires: Date;\n} | {\n\tpass: false;\n\terror: unknown;\n\texpires: Date;\n}>;\n\n\ntype ResolverConfig = {\n\t/**\n\t * The \"root\" account to use as the basis for all lookups. It should\n\t * contain the authoritative information for resolving in its\n\t * Metadata.\n\t */\n\troot: KeetaNetAccount;\n\t/**\n\t * A KeetaNet Client to access the network using.\n\t */\n\tclient: KeetaNetClient.Client | KeetaNetClient.UserClient;\n\t/**\n\t * A list of trusted Certificate Authorities to use when connecting to\n\t * external HTTPS services.\n\t */\n\ttrustedCAs: string[]; /* XXX:TODO */\n\t/**\n\t * Logger to use for debugging\n\t */\n\tlogger?: Logger;\n\t/**\n\t * ID for this instance of the resolver\n\t */\n\tid?: string;\n\t/**\n\t * Caching Parameters\n\t */\n\tcache?: Omit<NonNullable<MetadataConfig['cache']>, 'instance'>;\n}\n\n\ntype MetadataConfig = {\n\ttrustedCAs: ResolverConfig['trustedCAs'];\n\tclient: KeetaNetClient.Client;\n\tlogger?: ResolverConfig['logger'];\n\tresolver: Resolver;\n\tcache?: {\n\t\tinstance: URLCacheObject;\n\t\tpositiveTTL?: number;\n\t\tnegativeTTL?: number;\n\t};\n\tparent?: Metadata;\n};\n\ntype ValuizableInstance = { value: ValuizableMethod };\n\nconst assertServiceMetadata = createAssert<ToJSONValuizable<ServiceMetadata>>();\n\nclass Metadata implements ValuizableInstance {\n\treadonly #cache: Required<NonNullable<MetadataConfig['cache']>>;\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #url: URL;\n\treadonly #resolver: Resolver;\n\treadonly #stats: ResolverStats;\n\tprivate readonly seenURLs: Set<string>;\n\n\tprivate static readonly instanceTypeID = 'Metadata:c85b3d67-9548-4042-9862-f6e6677690ac';\n\n\tstatic isInstance(value: unknown): value is Metadata {\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn(false);\n\t\t}\n\t\tif (!('instanceID' in value)) {\n\t\t\treturn(false);\n\t\t}\n\n\t\treturn(value.instanceID === Metadata.instanceTypeID);\n\t}\n\n\t/**\n\t * Format the supplied Metadata as appropriate to be included\n\t * within the Metadata field of a KeetaNet acccount to serve\n\t * as the Metadata for the Resolver.\n\t */\n\tstatic formatMetadata(metadata: ToJSONValuizable<ServiceMetadata>): string;\n\t// eslint-disable-next-line @typescript-eslint/unified-signatures\n\tstatic formatMetadata(metadata: JSONSerializable): string;\n\tstatic formatMetadata(metadata: JSONSerializable | ToJSONValuizable<ServiceMetadata>): string {\n\t\tconst metadataBytes = Buffer.from(JSON.stringify(metadata), 'utf-8');\n\t\tconst metadataCompressed = KeetaNetClient.lib.Utils.Buffer.ZlibDeflate(KeetaNetClient.lib.Utils.Helper.bufferToArrayBuffer(metadataBytes));\n\t\tconst metadataEncoded = Buffer.from(metadataCompressed).toString('base64');\n\n\t\treturn(metadataEncoded);\n\t}\n\n\t/**\n\t * Assert that the supplied value is a valid Metadata Root Object\n\t */\n\tstatic assertMetadata(value: unknown): asserts value is ToJSONValuizable<ServiceMetadata> {\n\t\tassertServiceMetadata(value);\n\t}\n\n\t/**\n\t * Check if the supplied value is a Valuizable method which can\n\t * be called to resolve a Valuizable value.\n\t */\n\tstatic isValuizable(value: unknown): value is ValuizableMethod {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\treturn(false);\n\t\t}\n\n\t\tif (typeof value !== 'function') {\n\t\t\treturn(false);\n\t\t}\n\n\t\t// @ts-ignore\n\t\tif (!('instanceTypeID' in value)) {\n\t\t\treturn(false);\n\t\t}\n\n\t\tif (value.instanceTypeID === Metadata.instanceTypeID) {\n\t\t\treturn(true);\n\t\t}\n\n\t\tif (value.instanceTypeID === 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd') {\n\t\t\treturn(true);\n\t\t}\n\n\t\treturn(false);\n\t}\n\n\t/**\n\t * Recursively resolve a Valuizable value into a fully\n\t * realized JSONSerializable value. This will walk the\n\t * entire structure, calling each Valuizable method\n\t * and replacing it with the returned value.\n\t *\n\t * This should only be used in cases where the entire\n\t * structure needs to be fully realized, as it\n\t * can be quite expensive.\n\t */\n\tstatic async fullyResolveValuizable(value: ValuizeResolvable, invalidReplacement?: JSONSerializable): Promise<JSONSerializable>;\n\t// eslint-disable-next-line @typescript-eslint/unified-signatures,@typescript-eslint/no-explicit-any\n\tstatic async fullyResolveValuizable(value: any, invalidReplacement?: JSONSerializable): Promise<JSONSerializable>;\n\tstatic async fullyResolveValuizable(value: ValuizeResolvable, invalidReplacement: JSONSerializable = null): Promise<JSONSerializable> {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst newArray: JSONSerializable[] = [];\n\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\tconst entry = value[i];\n\t\t\t\t\tif (Metadata.isValuizable(entry)) {\n\t\t\t\t\t\tconst newEntry = await Metadata.fullyResolveValuizable(entry);\n\t\t\t\t\t\tnewArray.push(newEntry);\n\t\t\t\t\t} else if (entry === undefined) {\n\t\t\t\t\t\tthrow(new Error(`Array entry ${i} is undefined, which is not valid in JSON`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tassertNever(entry);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn(newArray);\n\t\t\t} else {\n\t\t\t\tconst newObject: { [key: string]: JSONSerializable; } = {};\n\t\t\t\tfor (const key in value) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Since `key` is the index of the array or\n\t\t\t\t\t * object, it is safe to use it to index\n\t\t\t\t\t * into the array or object.\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst entry = value[key];\n\t\t\t\t\tif (Metadata.isValuizable(entry)) {\n\t\t\t\t\t\tconst newEntry = await Metadata.fullyResolveValuizable(entry);\n\t\t\t\t\t\tnewObject[key] = newEntry;\n\t\t\t\t\t} else if (entry === undefined) {\n\t\t\t\t\t\tthrow(new Error(`Object key \"${key}\" is undefined, which is not valid in JSON`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tassertNever(entry);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn(newObject);\n\t\t\t}\n\t\t}\n\n\t\tif (Metadata.isValuizable(value)) {\n\t\t\ttry {\n\t\t\t\tconst retval = await value('any');\n\t\t\t\treturn(await Metadata.fullyResolveValuizable(retval));\n\t\t\t} catch {\n\t\t\t\treturn(invalidReplacement);\n\t\t\t}\n\t\t}\n\n\t\tswitch (typeof value) {\n\t\t\tcase 'string':\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\treturn(value);\n\t\t\tcase 'object':\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn(value);\n\t\t\t\t}\n\t\t\t\tassertNever(value);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tassertNever(value);\n\t\t}\n\n\t\tthrow(new Error('invalid input'));\n\t}\n\n\tconstructor(url: string | URL, config: MetadataConfig) {\n\t\t/*\n\t\t * Define an \"instanceTypeID\" as an unenumerable property to\n\t\t * ensure that we can identify this object as an instance of\n\t\t * Metadata, but we do not need to serialize it.\n\t\t */\n\t\tObject.defineProperty(this, 'instanceTypeID', {\n\t\t\tvalue: Metadata.instanceTypeID,\n\t\t\tenumerable: false\n\t\t});\n\t\tthis.#url = new URL(url);\n\t\tthis.#cache = {\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tinstance: config.cache?.instance ?? new Map() satisfies URLCacheObject as URLCacheObject,\n\t\t\tpositiveTTL: config.cache?.positiveTTL ?? 60 * 1000,\n\t\t\tnegativeTTL: config.cache?.negativeTTL ?? 5 * 1000\n\t\t};\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#client = config.client;\n\t\tthis.#logger = config.logger;\n\t\tthis.#resolver = config.resolver;\n\t\tthis.#stats = this.#resolver._mutableStats(statsAccessToken);\n\t\tif (config.parent !== undefined) {\n\t\t\tthis.seenURLs = config.parent.seenURLs;\n\t\t} else {\n\t\t\tthis.seenURLs = new Set();\n\t\t}\n\t}\n\n\t/**\n\t * @param metadata Metadata to parse -- base64 encoded string or ArrayBuffer\n\t */\n\tprivate async parseMetadata(metadata: string | ArrayBuffer): Promise<JSONSerializable> {\n\t\tif (typeof metadata === 'string') {\n\t\t\tmetadata = KeetaNetClient.lib.Utils.Helper.bufferToArrayBuffer(Buffer.from(metadata, 'base64'));\n\t\t}\n\n\t\t/*\n\t\t * Attempt to decompress the metadata. If it fails, then\n\t\t * assume it is not compressed.\n\t\t */\n\t\tlet metadataUncompressed: ArrayBuffer;\n\t\ttry {\n\t\t\tmetadataUncompressed = KeetaNetClient.lib.Utils.Buffer.ZlibInflate(metadata);\n\t\t} catch {\n\t\t\tmetadataUncompressed = metadata;\n\t\t}\n\n\t\tconst metadataBytes = Buffer.from(metadataUncompressed);\n\t\tconst metadataDecoded = metadataBytes.toString('utf-8');\n\n\t\t/*\n\t\t * JSON.parse() will always return a JSONSerializable,\n\t\t * and not `unknown`, so we can safely cast it.\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst retval = await this.resolveValue(JSON.parse(metadataDecoded) as JSONSerializable);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readKeetaNetURL(url: URL): Promise<JSONSerializable> {\n\t\tconst accountString = url.hostname;\n\t\tconst path = url.pathname;\n\n\t\tthis.#stats.keetanet.reads++;\n\n\t\tif (path !== '/metadata') {\n\t\t\tthrow(new Error(`Unsupported path: ${path}`));\n\t\t}\n\n\t\tlet account: KeetaNetAccount | string;\n\t\ttry {\n\t\t\taccount = KeetaNetClient.lib.Account.fromPublicKeyString(accountString);\n\t\t} catch {\n\t\t\treturn('');\n\t\t}\n\n\t\tconst accountInfo = await this.#client.getAccountInfo(account);\n\t\tconst metadata = accountInfo.info.metadata;\n\t\tif (metadata === '') {\n\t\t\treturn('');\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Account info for', accountString, '=', accountInfo.info);\n\t\tconst retval = await this.parseMetadata(metadata);\n\t\treturn(retval);\n\t}\n\n\tprivate async readHTTPSURL(url: URL): Promise<JSONSerializable> {\n\t\tthis.#stats.https.reads++;\n\n\t\tconst results = await fetch(url.toString(), {\n\t\t\tmethod: 'GET',\n\t\t\theaders: {\n\t\t\t\t'Accept': 'application/json'\n\t\t\t}\n\t\t});\n\n\t\tif (!results.ok) {\n\t\t\tthrow(new Error(`Error HTTP status ${results.status} ${results.statusText} for ${url.toString()}`));\n\t\t}\n\n\t\tif (results.status === 204) {\n\t\t\t/*\n\t\t\t * 204 No Content is a valid response, so we return an empty\n\t\t\t * object.\n\t\t\t */\n\t\t\treturn({});\n\t\t}\n\n\t\tif (results.status !== 200) {\n\t\t\tthrow(new Error(`Unexpected HTTP status ${results.status} for ${url.toString()}`));\n\t\t}\n\n\t\tconst metadata = await (await results.blob()).arrayBuffer();\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', metadata);\n\n\t\tconst retval = await this.parseMetadata(metadata);\n\n\t\treturn(retval);\n\t}\n\n\tprivate async readURL(url: URL) {\n\t\tthis.#stats.reads++;\n\n\t\tconst cacheKey = url.toString();\n\t\t/*\n\t\t * To ensure any circular references are handled correctly, we\n\t\t * keep track of a chain of accessed URLs. If we see the same\n\t\t * URL twice, then we have a circular reference.\n\t\t */\n\t\tif (this.seenURLs.has(cacheKey)) {\n\t\t\treturn(null);\n\t\t}\n\t\tthis.seenURLs.add(cacheKey);\n\n\t\t/*\n\t\t * Verify that the cache entry is still valid. If it is not,\n\t\t * then remove it from the cache.\n\t\t */\n\t\tlet cacheVal = this.#cache.instance.get(cacheKey);\n\n\t\tif (this.#cache.instance.has(cacheKey) && cacheVal !== undefined) {\n\t\t\tif (cacheVal.expires < new Date()) {\n\t\t\t\tthis.#cache.instance.delete(cacheKey);\n\t\t\t\tcacheVal = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (cacheVal !== undefined) {\n\t\t\tthis.#stats.cache.hit++;\n\n\t\t\tif (cacheVal.pass) {\n\t\t\t\treturn(cacheVal.value);\n\t\t\t} else {\n\t\t\t\tthrow(cacheVal.error);\n\t\t\t}\n\t\t}\n\n\t\tthis.#stats.cache.miss++;\n\n\t\tlet retval: JSONSerializable;\n\t\ttry {\n\t\t\tconst protocol = url.protocol;\n\t\t\tif (protocol === 'keetanet:') {\n\t\t\t\tretval = await this.readKeetaNetURL(url);\n\t\t\t} else if (protocol === 'https:') {\n\t\t\t\tretval = await this.readHTTPSURL(url);\n\t\t\t} else {\n\t\t\t\tthis.#stats.unsupported.reads++;\n\t\t\t\tthrow(new Error(`Unsupported protocol: ${protocol}`));\n\t\t\t}\n\t\t} catch (readError) {\n\t\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\t\tpass: false,\n\t\t\t\terror: readError,\n\t\t\t\texpires: new Date(Date.now() + this.#cache.negativeTTL)\n\t\t\t});\n\n\t\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), 'failed:', readError);\n\t\t\tthrow(readError);\n\t\t}\n\n\t\tthis.#logger?.debug(`Resolver:${this.#resolver.id}`, 'Read URL', url.toString(), ':', retval);\n\n\t\tthis.#cache.instance.set(cacheKey, {\n\t\t\tpass: true,\n\t\t\tvalue: retval,\n\t\t\texpires: new Date(Date.now() + this.#cache.positiveTTL)\n\t\t});\n\n\t\treturn(retval);\n\t}\n\n\tprivate async resolveValue<T extends ExternalURL | undefined>(value: T): Promise<JSONSerializable>;\n\tprivate async resolveValue<T extends JSONSerializable | undefined>(value: T): Promise<T>;\n\tprivate async resolveValue<T extends JSONSerializable | ExternalURL | undefined>(value: T): Promise<T | JSONSerializable> {\n\t\tif (value === undefined) {\n\t\t\treturn(value);\n\t\t}\n\n\t\t/*\n\t\t * If the value passed in is a reference to an external URL, then\n\t\t * we need to read that URL (and continue to resolve it).\n\t\t */\n\t\tif (isExternalURL(value)) {\n\t\t\tconst url = new URL(value.url);\n\t\t\tconst retval = await this.readURL(url);\n\n\t\t\treturn(await this.resolveValue(retval));\n\t\t}\n\n\t\treturn(value);\n\t}\n\n\tprivate assertValuizableKind(input: ValuizeInput, expect: ValuizableKind) {\n\t\tswitch (expect) {\n\t\t\tcase 'any':\n\t\t\t\treturn(input);\n\t\t\tcase 'object':\n\t\t\t\tif (typeof input !== 'object') {\n\t\t\t\t\tthrow(new Error(`expected an object, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\tif (input === null) {\n\t\t\t\t\tthrow(new Error('expected an object, got null'));\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error('expected an object, got an array'));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'array':\n\t\t\t\tif (!Array.isArray(input)) {\n\t\t\t\t\tthrow(new Error(`expected an array, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'primitive':\n\t\t\t\tif ((typeof input === 'object' && input !== null) || input === undefined) {\n\t\t\t\t\tthrow(new Error(`expected a primitive, got ${typeof input}`));\n\t\t\t\t}\n\n\t\t\t\treturn(input);\n\t\t\tcase 'string':\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\tif (typeof input !== expect) {\n\t\t\t\t\tthrow(new Error(`expected a ${expect}, got ${typeof input}`));\n\t\t\t\t}\n\t\t\t\treturn(input);\n\t\t\tdefault:\n\t\t\t\tassertNever(expect);\n\t\t}\n\t}\n\n\tprivate async valuize(value: JSONSerializable): Promise<ValuizeInput> {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tlet newValue: ValuizableObject | ValuizableArray;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tnewValue = [];\n\t\t\t} else {\n\t\t\t\tnewValue = {};\n\t\t\t}\n\t\t\tfor (const key in value) {\n\t\t\t\t/*\n\t\t\t\t * Since `key` is the index of the array or\n\t\t\t\t * object, it is safe to use it to index\n\t\t\t\t * into the array or object.\n\t\t\t\t */\n\t\t\t\t// @ts-ignore\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst keyValue: JSONSerializable = value[key];\n\n\t\t\t\tif (isExternalURL(keyValue)) {\n\t\t\t\t\tif (Array.isArray(newValue)) {\n\t\t\t\t\t\tthrow(new Error('internal error: newValue is an array, but it should be an object since it is an external field, which can only be an object'));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newMetadataObject = new Metadata(keyValue.url, {\n\t\t\t\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\t\t\t\tclient: this.#client,\n\t\t\t\t\t\tlogger: this.#logger,\n\t\t\t\t\t\tresolver: this.#resolver,\n\t\t\t\t\t\tcache: this.#cache,\n\t\t\t\t\t\tparent: this\n\t\t\t\t\t});\n\n\t\t\t\t\tconst newValuizableObject: ValuizableMethod = newMetadataObject.value.bind(newMetadataObject);\n\n\t\t\t\t\tObject.defineProperty(newValuizableObject, 'instanceTypeID', {\n\t\t\t\t\t\tvalue: 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd',\n\t\t\t\t\t\tenumerable: false\n\t\t\t\t\t});\n\n\t\t\t\t\tnewValue[key] = newValuizableObject;\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * This is safe because `assertValuizableKind` will\n\t\t\t\t\t * ensure the correct output type\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst newValueEntry: ValuizableMethod = async (expect: ValuizableKind = 'any') => {\n\t\t\t\t\t\tconst retval = this.assertValuizableKind(await this.valuize(keyValue), expect);\n\t\t\t\t\t\treturn(retval);\n\t\t\t\t\t};\n\n\t\t\t\t\tObject.defineProperty(newValueEntry, 'instanceTypeID', {\n\t\t\t\t\t\tvalue: 'Anonymous:6e69d6db-9263-466d-9c96-4b92ced498bd',\n\t\t\t\t\t\tenumerable: false\n\t\t\t\t\t});\n\n\t\t\t\t\t/*\n\t\t\t\t\t * TypeScript doesn't track that `key`\n\t\t\t\t\t * is a valid index regardless of the\n\t\t\t\t\t * type of `newValue` is an array or an\n\t\t\t\t\t * object, so we need to use `@ts-ignore`\n\t\t\t\t\t */\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tnewValue[key] = newValueEntry;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(newValue);\n\t\t} else {\n\t\t\treturn(value);\n\t\t}\n\t}\n\n\tasync value(expect: 'object'): Promise<ValuizableObject>;\n\tasync value(expect: 'array'): Promise<ValuizableArray>;\n\tasync value(expect: 'primitive'): Promise<JSONSerializablePrimitive>;\n\tasync value(expect: 'string'): Promise<string>;\n\tasync value(expect: 'number'): Promise<number>;\n\tasync value(expect: 'boolean'): Promise<boolean>;\n\tasync value(expect: 'any'): Promise<ValuizeInput>;\n\tasync value(expect?: ValuizableKind): Promise<ValuizeInput>;\n\tasync value(expect: ValuizableKind = 'any'): Promise<ValuizeInput> {\n\t\tconst value = await this.readURL(this.#url);\n\n\t\tconst retval = this.assertValuizableKind(await this.valuize(value), expect);\n\n\t\treturn(retval);\n\t}\n}\n\n\ntype ResolverStats = {\n\tkeetanet: {\n\t\treads: number;\n\t};\n\thttps: {\n\t\treads: number;\n\t};\n\tunsupported: {\n\t\treads: number;\n\t};\n\treads: number;\n\tcache: {\n\t\thit: number;\n\t\tmiss: number;\n\t}\n};\n\nclass Resolver {\n\treadonly #root: ResolverConfig['root'];\n\treadonly #trustedCAs: ResolverConfig['trustedCAs'];\n\treadonly #client: KeetaNetClient.Client;\n\treadonly #logger: Logger | undefined;\n\treadonly #stats: ResolverStats;\n\treadonly #metadataCache: NonNullable<MetadataConfig['cache']>;\n\n\treadonly id: string;\n\n\tstatic readonly Metadata: typeof Metadata = Metadata;\n\n\tprivate readonly lookupMap: {\n\t\t[Service in Services]: {\n\t\t\tsearch: (input: ValuizableObject | undefined, criteria: ServiceSearchCriteria<Service>) => Promise<ResolverLookupServiceResults<Service> | undefined>;\n\t\t};\n\t} = {\n\t\t'banking': {\n\t\t\tsearch: this.lookupBankingServices.bind(this)\n\t\t},\n\t\t'kyc': {\n\t\t\tsearch: this.lookupKYCServices.bind(this)\n\t\t},\n\t\t'fx': {\n\t\t\tsearch: this.lookupFXServices.bind(this)\n\t\t},\n\t\t'inbound': {\n\t\t\tsearch: async (_ignored_input: ValuizableObject | undefined, _ignored_criteria: ServiceSearchCriteria<'inbound'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t},\n\t\t'outbound': {\n\t\t\tsearch: async (_ignored_input: ValuizableObject | undefined, _ignored_criteria: ServiceSearchCriteria<'outbound'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t},\n\t\t'cards': {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tsearch: async (_input: ValuizableObject | undefined, _criteria: ServiceSearchCriteria<'cards'>) => {\n\t\t\t\tthrow(new Error('not implemented'));\n\t\t\t}\n\t\t}\n\t};\n\n\n\tconstructor(config: ResolverConfig) {\n\t\tthis.#root = config.root;\n\t\tthis.#trustedCAs = config.trustedCAs;\n\t\tthis.#logger = config.logger;\n\t\tthis.#metadataCache = {\n\t\t\t...config.cache,\n\t\t\tinstance: new Map()\n\t\t};\n\n\t\tthis.id = config.id ?? crypto.randomUUID();\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Creating resolver with root account', this.#root.publicKeyString.get());\n\n\t\tif (KeetaNetClient.Client.isInstance(config.client)) {\n\t\t\tthis.#client = config.client;\n\t\t} else {\n\t\t\tthis.#client = config.client.client;\n\t\t}\n\n\t\tthis.#stats = {\n\t\t\tkeetanet: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\thttps: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\tunsupported: {\n\t\t\t\treads: 0\n\t\t\t},\n\t\t\treads: 0,\n\t\t\tcache: {\n\t\t\t\thit: 0,\n\t\t\t\tmiss: 0\n\t\t\t}\n\t\t};\n\t}\n\n\t/** @internal */\n\t_mutableStats(accessToken: symbol) {\n\t\tif (accessToken !== statsAccessToken) {\n\t\t\tthrow(new Error('Invalid access token'));\n\t\t}\n\n\t\treturn(this.#stats);\n\t}\n\n\tget stats(): ResolverStats {\n\t\treturn(structuredClone(this.#stats));\n\t}\n\n\tprivate async lookupBankingServices(bankingServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'banking'>) {\n\t\tif (bankingServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tlet canonicalCurrencyCriteria;\n\t\tif ('currencyCodes' in criteria) {\n\t\t\tcanonicalCurrencyCriteria = {\n\t\t\t\tcurrencyCodes: criteria.currencyCodes.map(convertToCurrencySearchCanonical)\n\t\t\t}\n\t\t}\n\n\t\tlet canonicalCountryCriteria;\n\t\tif ('countryCodes' in criteria) {\n\t\t\tcanonicalCountryCriteria = {\n\t\t\t\tcountryCodes: criteria.countryCodes.map(convertToCountrySearchCanonical)\n\t\t\t}\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'banking'> = {};\n\t\tfor (const checkBankingServiceID in bankingServices) {\n\t\t\ttry {\n\t\t\t\tconst checkBankingService = await isValidOperations(await bankingServices[checkBankingServiceID]?.('object'));\n\t\t\t\tif (!checkBankingService) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (canonicalCurrencyCriteria !== undefined && 'currencyCodes' in checkBankingService) {\n\t\t\t\t\tif (!(await hasAllCurrencyCodes(checkBankingService, canonicalCurrencyCriteria))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (canonicalCountryCriteria !== undefined && 'countryCodes' in checkBankingService) {\n\t\t\t\t\tif (!(await hasAnyCountryCodes(checkBankingService, canonicalCountryCriteria))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkBankingServiceID] = assertResolverLookupBankingResult(checkBankingService);\n\t\t\t} catch (checkBankingServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking banking service', checkBankingServiceID, ':', checkBankingServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tprivate async lookupKYCServices(kycServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'kyc'>) {\n\t\tif (kycServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'kyc'> = {};\n\t\tfor (const checkKYCServiceID in kycServices) {\n\t\t\ttry {\n\t\t\t\tconst checkKYCService = await kycServices[checkKYCServiceID]?.('object');\n\t\t\t\tif (checkKYCService === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!('operations' in checkKYCService)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (criteria.countryCodes !== undefined) {\n\t\t\t\t\tlet acceptable = true;\n\t\t\t\t\t/*\n\t\t\t\t\t * If the KYC service does not have a countryCodes\n\t\t\t\t\t * property, then it can validate accounts in any\n\t\t\t\t\t * country, so we skip this check.\n\t\t\t\t\t */\n\t\t\t\t\tif ('countryCodes' in checkKYCService) {\n\t\t\t\t\t\tconst countryCodes = await checkKYCService.countryCodes?.('array') ?? [];\n\t\t\t\t\t\tconst checkKYCServiceCountryCodes = await Promise.all(countryCodes.map(async function(item) {\n\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t}));\n\t\t\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Checking country codes:', criteria.countryCodes, 'against', checkKYCServiceCountryCodes, 'for', checkKYCServiceID);\n\n\t\t\t\t\t\tfor (const checkCountryCode of criteria.countryCodes) {\n\t\t\t\t\t\t\tconst checkCountryCodeCanonical = convertToCountrySearchCanonical(checkCountryCode);\n\t\t\t\t\t\t\tif (!checkKYCServiceCountryCodes.includes(checkCountryCodeCanonical)) {\n\t\t\t\t\t\t\t\tacceptable = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!acceptable) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tretval[checkKYCServiceID] = assertResolverLookupKYCResult(checkKYCService);\n\t\t\t} catch (checkKYCServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking KYC service', checkKYCServiceID, ':', checkKYCServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(retval).length === 0) {\n\t\t\t/*\n\t\t\t * If we didn't find any banking services, then we return\n\t\t\t * undefined to indicate that no services were found.\n\t\t\t */\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tprivate async lookupFXServices(fxServices: ValuizableObject | undefined, criteria: ServiceSearchCriteria<'fx'>): Promise<ResolverLookupServiceResults<'fx'> | undefined> {\n\t\tif (fxServices === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst isCurrencySearchInput = createIs<CurrencySearchInput>();\n\t\t// if currency code is provided then convert to canonical format otherwise token public key string was provided\n\t\tconst canonicalInputCurrencyCriteria = isCurrencySearchInput(criteria.inputCurrencyCode) ? convertToCurrencySearchCanonical(criteria.inputCurrencyCode) : criteria.inputCurrencyCode;\n\t\tconst canonicalOutputCurrencyCriteria = isCurrencySearchInput(criteria.outputCurrencyCode) ? convertToCurrencySearchCanonical(criteria.outputCurrencyCode) : criteria.outputCurrencyCode;\n\t\t// if search criteria is not provided then set token to undefined\n\t\tconst inputToken = canonicalInputCurrencyCriteria !== undefined ? await this.lookupToken(canonicalInputCurrencyCriteria) : undefined;\n\t\tconst outputToken = canonicalOutputCurrencyCriteria !== undefined ? await this.lookupToken(canonicalOutputCurrencyCriteria) : undefined;\n\t\tif (criteria.inputCurrencyCode !== undefined && inputToken === null) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Input currency code', canonicalInputCurrencyCriteria, 'could not be resolved to a token');\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tif (criteria.outputCurrencyCode !== undefined && outputToken === null) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Output currency code', canonicalOutputCurrencyCriteria, 'could not be resolved to a token');\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval: ResolverLookupServiceResults<'fx'> = {};\n\t\tfor (const checkFXServiceID in fxServices) {\n\t\t\ttry {\n\t\t\t\tconst checkFXService = await assertResolverLookupFXResult(await fxServices[checkFXServiceID]?.('object'));\n\t\t\t\tif (!checkFXService) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst fromUnrealized: ToValuizable<NonNullable<ServiceMetadata['services']['fx']>[string]['from']> = checkFXService.from;\n\t\t\t\tconst from = await fromUnrealized?.('array');\n\t\t\t\tif (from === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet acceptable = false;\n\t\t\t\tfor (const fromEntryUnrealized of from) {\n\t\t\t\t\tconst fromEntry = await fromEntryUnrealized?.('object');\n\n\t\t\t\t\tif (inputToken) {\n\t\t\t\t\t\tconst fromCurrencyCodes = await fromEntry.currencyCodes?.('array') ?? [];\n\t\t\t\t\t\tconst fromCurrencyCodesValues = await Promise.all(fromCurrencyCodes.map(async function(item) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn(undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t// If inputToken was provided, check if it matches providers supported input currencies\n\t\t\t\t\t\tif (!fromCurrencyCodesValues.includes(inputToken.token)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputToken) {\n\t\t\t\t\t\tconst toCurrencyCodes = await fromEntry.to?.('array') ?? [];\n\t\t\t\t\t\tconst toCurrencyCodesValues = await Promise.all(toCurrencyCodes.map(async function(item) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn(await item?.('string'));\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn(undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t// If outputToken was provided, check if it matches providers supported output currencies\n\t\t\t\t\t\tif (!toCurrencyCodesValues.includes(outputToken.token)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/* XXX:TODO: Check kycProviders */\n\t\t\t\t\tacceptable = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!acceptable) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tretval[checkFXServiceID] = await assertResolverLookupFXResult(checkFXService);\n\t\t\t} catch (checkFXServiceError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Error checking FX service', checkFXServiceID, ':', checkFXServiceError, ' -- ignoring');\n\t\t\t}\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tasync #getRootMetadata() {\n\t\tconst rootURL = new URL(`keetanet://${this.#root.publicKeyString.get()}/metadata`);\n\t\tconst metadata = new Metadata(rootURL, {\n\t\t\ttrustedCAs: this.#trustedCAs,\n\t\t\tclient: this.#client,\n\t\t\tlogger: this.#logger,\n\t\t\tresolver: this,\n\t\t\tcache: this.#metadataCache\n\t\t});\n\t\tconst rootMetadata = await metadata.value('object');\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Root Metadata:', rootMetadata);\n\n\t\tif (!('version' in rootMetadata)) {\n\t\t\tthrow(new Error('Root metadata is missing \"version\" property'));\n\t\t}\n\n\t\tconst rootMetadataVersion = await rootMetadata.version?.('primitive');\n\t\tif (rootMetadataVersion !== 1) {\n\t\t\tthrow(new Error(`Unsupported metadata version: ${rootMetadataVersion}`));\n\t\t}\n\n\t\treturn(rootMetadata);\n\t}\n\n\tasync getRootMetadata(): Promise<ToValuizable<ServiceMetadata>> {\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\treturn(rootMetadata as unknown as ToValuizable<ServiceMetadata>);\n\t}\n\n\tasync listTokens(): Promise<{ token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; }[]> {\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedCurrenciesMapProperty = rootMetadata.currencyMap;\n\t\tif (definedCurrenciesMapProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"currencyMap\" property'));\n\t\t}\n\t\tconst definedCurrenciesMap = await definedCurrenciesMapProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Defined Currencies Map:', definedCurrenciesMap);\n\n\t\tconst retval: { token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; }[] = [];\n\t\tfor (const [checkCurrencyCode, checkTokenProperty] of Object.entries(definedCurrenciesMap)) {\n\t\t\tconst checkToken = await checkTokenProperty?.('string');\n\t\t\tif (checkToken === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isCurrencySearchCanonical(checkCurrencyCode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst checkTokenObject = KeetaNetAccount.fromPublicKeyString(checkToken);\n\t\t\t\tif (!checkTokenObject.isToken()) {\n\t\t\t\t\tthrow(new Error('Not a token account'));\n\t\t\t\t}\n\n\t\t\t\tretval.push({\n\t\t\t\t\ttoken: checkTokenObject.publicKeyString.get(),\n\t\t\t\t\tcurrency: checkCurrencyCode\n\t\t\t\t});\n\t\t\t} catch (validationError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Token public key for currency code', checkCurrencyCode, 'is invalid:', validationError);\n\t\t\t}\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\tasync lookupToken(currencyCode: CurrencySearchInput | KeetaNetAccountTokenPublicKeyString): Promise<{ token: KeetaNetAccountTokenPublicKeyString; currency: CurrencySearchCanonical; } | null> {\n\t\tlet tokenPublicKey: KeetaNetAccountTokenPublicKeyString | undefined;\n\t\tif (typeof currencyCode === 'string') {\n\t\t\ttry {\n\t\t\t\tconst token = KeetaNetAccount.fromPublicKeyString(currencyCode);\n\t\t\t\tif (token.isToken()) {\n\t\t\t\t\ttokenPublicKey = token.publicKeyString.get();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t/* Ignored */\n\t\t\t}\n\t\t}\n\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedCurrenciesMapProperty = rootMetadata.currencyMap;\n\t\tif (definedCurrenciesMapProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"currencyMap\" property'));\n\t\t}\n\t\tconst definedCurrenciesMap = await definedCurrenciesMapProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Defined Currencies Map:', definedCurrenciesMap);\n\n\t\tlet currencyCodeFound: CurrencySearchCanonical | undefined;\n\t\tif (tokenPublicKey === undefined) {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Performing forward lookup for currency code', currencyCode);\n\n\t\t\t/*\n\t\t\t * Perform a forward lookup from the currency code\n\t\t\t * to the token public key\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\t\tconst currencyCodeCanonical = convertToCurrencySearchCanonical(currencyCode as unknown as any);\n\t\t\tif (currencyCodeCanonical === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\n\t\t\tconst checkToken = await definedCurrenciesMap[currencyCodeCanonical]?.('string');\n\t\t\tif (checkToken === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Validating token public key for currency code', currencyCodeCanonical, ':', checkToken, typeof checkToken);\n\t\t\ttry {\n\t\t\t\tconst checkTokenObject = KeetaNetAccount.fromPublicKeyString(checkToken);\n\t\t\t\tif (!checkTokenObject.isToken()) {\n\t\t\t\t\tthrow(new Error('Not a token account'));\n\t\t\t\t}\n\n\t\t\t\ttokenPublicKey = checkTokenObject.publicKeyString.get();\n\t\t\t\tcurrencyCodeFound = currencyCodeCanonical;\n\t\t\t} catch (validationError) {\n\t\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Token public key for currency code', currencyCodeCanonical, 'is invalid:', validationError);\n\n\t\t\t\treturn(null);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Performing reverse lookup for token public key', tokenPublicKey);\n\n\t\t\t/*\n\t\t\t * Perform a reverse lookup from the token public key\n\t\t\t * to the currency code\n\t\t\t */\n\t\t\tfor (const [checkCurrencyCode, checkTokenProperty] of Object.entries(definedCurrenciesMap)) {\n\t\t\t\tconst checkToken = await checkTokenProperty?.('string');\n\t\t\t\tif (checkToken === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (checkToken === tokenPublicKey) {\n\t\t\t\t\tif (isCurrencySearchCanonical(checkCurrencyCode)) {\n\t\t\t\t\t\tcurrencyCodeFound = checkCurrencyCode;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currencyCodeFound === undefined) {\n\t\t\t\treturn(null);\n\t\t\t}\n\t\t}\n\n\t\treturn({\n\t\t\ttoken: tokenPublicKey,\n\t\t\tcurrency: currencyCodeFound\n\t\t});\n\t}\n\n\tasync lookup<T extends keyof ServicesMetadataLookupMap>(service: T, criteria: ServicesMetadataLookupMap[T]['criteria']): Promise<ServicesMetadataLookupMap[T]['results'] | undefined> {\n\t\tconst rootMetadata = await this.#getRootMetadata();\n\n\t\t/*\n\t\t * Get the services object\n\t\t */\n\t\tconst definedServicesProperty = rootMetadata.services;\n\t\tif (definedServicesProperty === undefined) {\n\t\t\tthrow(new Error('Root metadata is missing \"services\" property'));\n\t\t}\n\t\tconst definedServices = await definedServicesProperty('object');\n\n\t\tthis.#logger?.debug(`Resolver:${this.id}`, 'Looking up', service, 'with criteria:', criteria, 'in', definedServices);\n\n\t\tconst serviceLookup = this.lookupMap[service].search;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n\t\treturn(await serviceLookup(await definedServices[service]?.('object'), criteria as any));\n\t}\n\n\tclearCache(): void {\n\t\tthis.#metadataCache.instance.clear();\n\t\tthis.#stats.cache.hit = 0;\n\t\tthis.#stats.cache.miss = 0;\n\t\tthis.#stats.https.reads = 0;\n\t\tthis.#stats.keetanet.reads = 0;\n\t\tthis.#stats.unsupported.reads = 0;\n\t\tthis.#stats.reads = 0;\n\t}\n}\n\nexport default Resolver;\nexport type {\n\tServiceMetadata,\n\tServiceMetadataExternalizable,\n\tServiceSearchCriteria,\n\tServices\n};\n"]}
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@keetanetwork/anchor",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@keetanetwork/anchor",
9
- "version": "0.0.6",
9
+ "version": "0.0.7",
10
10
  "license": "SEE LICENSE IN LICENSE",
11
11
  "dependencies": {
12
12
  "@keetanetwork/currency-info": "1.2.5",
13
- "@keetanetwork/keetanet-client": "0.14.4",
13
+ "@keetanetwork/keetanet-client": "0.14.5",
14
14
  "decimal.js": "10.6.0",
15
15
  "typia": "9.5.0"
16
16
  },
@@ -33,8 +33,8 @@
33
33
  "license": "ISC"
34
34
  },
35
35
  "node_modules/@keetanetwork/keetanet-client": {
36
- "version": "0.14.4",
37
- "integrity": "sha512-0uYhvlOu0G7hVmDg0Jt3pScWWcjEgrpkr+85XXxyIZSKFAZKocQ6PIeEUNApda+UKPTfkB+/0MDBbMKligYRUg==",
36
+ "version": "0.14.5",
37
+ "integrity": "sha512-//6jEpbjSOEuL6Rt5cl0cPfBYsQ9k0oftwyD+GftucUx5HiXFN9dfnIOi//hu/PBZAShww8YguXPi9z6ysoiIw==",
38
38
  "license": "see LICENSE",
39
39
  "dependencies": {
40
40
  "secp256k1": "5.0.1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keetanetwork/anchor",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "KeetaNetwork Network Anchor",
5
5
  "main": "client/index.js",
6
6
  "scripts": {
@@ -23,7 +23,7 @@
23
23
  "sideEffects": false,
24
24
  "dependencies": {
25
25
  "@keetanetwork/currency-info": "1.2.5",
26
- "@keetanetwork/keetanet-client": "0.14.4",
26
+ "@keetanetwork/keetanet-client": "0.14.5",
27
27
  "decimal.js": "10.6.0",
28
28
  "typia": "9.5.0"
29
29
  },