@keetanetwork/anchor 0.0.40 → 0.0.41
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/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/services/asset-movement/server.d.ts +0 -10
- package/services/asset-movement/server.d.ts.map +1 -1
- package/services/asset-movement/server.js +0 -2
- package/services/asset-movement/server.js.map +1 -1
- package/services/storage/client.d.ts +11 -1
- package/services/storage/client.d.ts.map +1 -1
- package/services/storage/client.js +23 -3
- package/services/storage/client.js.map +1 -1
- package/services/storage/clients/contacts.d.ts +94 -0
- package/services/storage/clients/contacts.d.ts.map +1 -0
- package/services/storage/clients/contacts.generated.d.ts +3 -0
- package/services/storage/clients/contacts.generated.d.ts.map +1 -0
- package/services/storage/clients/contacts.generated.js +1197 -0
- package/services/storage/clients/contacts.generated.js.map +1 -0
- package/services/storage/clients/contacts.js +141 -0
- package/services/storage/clients/contacts.js.map +1 -0
- package/services/storage/common.d.ts +14 -0
- package/services/storage/common.d.ts.map +1 -1
- package/services/storage/common.js.map +1 -1
- package/services/username/server.d.ts +0 -2
- package/services/username/server.d.ts.map +1 -1
- package/services/username/server.js +0 -2
- package/services/username/server.js.map +1 -1
|
@@ -20,14 +20,12 @@ function normalizeUsernamePattern(pattern) {
|
|
|
20
20
|
export class KeetaNetUsernameAnchorHTTPServer extends KeetaAnchorHTTPServer.KeetaNetAnchorHTTPServer {
|
|
21
21
|
homepage;
|
|
22
22
|
usernames;
|
|
23
|
-
providerID;
|
|
24
23
|
routes;
|
|
25
24
|
#usernamePattern;
|
|
26
25
|
constructor(config) {
|
|
27
26
|
super(config);
|
|
28
27
|
this.homepage = config.homepage ?? '';
|
|
29
28
|
this.usernames = config.usernames;
|
|
30
|
-
this.providerID = config.providerID;
|
|
31
29
|
this.routes = config.routes ?? {};
|
|
32
30
|
if (config.usernamePattern !== undefined) {
|
|
33
31
|
this.#usernamePattern = normalizeUsernamePattern(config.usernamePattern);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/services/username/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeetaNet } from '../../client/index.js';\nimport * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';\nimport type {\n\tKeetaUsernameAnchorUsernameResolutionContext,\n\tKeetaUsernameAnchorAccountResolutionContext,\n\tKeetaUsernameAnchorClaimRequest,\n\tKeetaUsernameAnchorReleaseRequest,\n\tKeetaUsernameAnchorSearchRequestParameters,\n\tKeetaUsernameAnchorUsernameWithAccount,\n\tKeetaUsernameAnchorSearchResponseJSON } from './common.js';\nimport {\n\tgetUsernameClaimSignable,\n\tvalidateUsernameDefault,\n\ttype KeetaUsernameAnchorClaimContext,\n\tErrors,\n\tisKeetaNetPublicKeyString,\n\tassertKeetaUsernameAnchorClaimRequestJSON,\n\tgetUsernameTransferSignable,\n\tassertKeetaUsernameAnchorReleaseRequestJSON,\n\tgetUsernameReleaseSignable\n} from './common.js';\nimport type { ServiceMetadata, ServiceMetadataAuthenticationType } from '../../lib/resolver.ts';\nimport type { Routes } from '../../lib/http-server/index.ts';\nimport { KeetaAnchorUserError, KeetaAnchorUserValidationError } from '../../lib/error.js';\nimport * as Signing from '../../lib/utils/signing.js';\n\nfunction normalizeUsernamePattern(pattern: string | RegExp): RegExp {\n\tif (typeof pattern === 'string') {\n\t\ttry {\n\t\t\treturn(new RegExp(pattern));\n\t\t} catch (error) {\n\t\t\tthrow(new Error(`Invalid usernamePattern regex: ${error instanceof Error ? error.message : String(error)}`));\n\t\t}\n\t}\n\n\tif (pattern.flags !== '') {\n\t\tthrow(new Error('usernamePattern RegExp must not specify flags')); // Flags cannot be reliably shared via metadata string\n\t}\n\n\treturn(new RegExp(pattern.source));\n}\n\ntype ClaimHandlerResponse = { ok: true; } | { ok: false; taken?: false; } | { ok: false; taken: true; };\ntype SearchHandlerResponse = { results: KeetaUsernameAnchorUsernameWithAccount[] };\n\nexport interface KeetaAnchorUsernameServerConfig extends KeetaAnchorHTTPServer.KeetaAnchorHTTPServerConfig {\n\thomepage?: string | (() => Promise<string> | string);\n\tproviderID: string;\n\tusernames: {\n\t\tresolveUsername: (input: KeetaUsernameAnchorUsernameResolutionContext) => Promise<{ account: InstanceType<typeof KeetaNet.lib.Account>; } | null>;\n\t\tresolveAccount: (input: KeetaUsernameAnchorAccountResolutionContext) => Promise<{ username: string; } | null>;\n\n\t\treleaseUsername?: (input: { account: InstanceType<typeof KeetaNet.lib.Account>; }) => Promise<{ ok: boolean; }>;\n\t\tclaim?: ((input: KeetaUsernameAnchorClaimContext) => Promise<ClaimHandlerResponse>);\n\n\t\tsearch?: ((input: KeetaUsernameAnchorSearchRequestParameters) => Promise<SearchHandlerResponse>);\n\t};\n\troutes?: Routes;\n\tusernamePattern?: string | RegExp;\n}\n\nexport class KeetaNetUsernameAnchorHTTPServer extends KeetaAnchorHTTPServer.KeetaNetAnchorHTTPServer<KeetaAnchorUsernameServerConfig> {\n\treadonly homepage: NonNullable<KeetaAnchorUsernameServerConfig['homepage']>;\n\treadonly usernames: KeetaAnchorUsernameServerConfig['usernames'];\n\treadonly providerID: string;\n\treadonly routes: NonNullable<KeetaAnchorUsernameServerConfig['routes']>;\n\treadonly #usernamePattern?: RegExp;\n\n\tconstructor(config: KeetaAnchorUsernameServerConfig) {\n\t\tsuper(config);\n\n\t\tthis.homepage = config.homepage ?? '';\n\t\tthis.usernames = config.usernames;\n\t\tthis.providerID = config.providerID;\n\t\tthis.routes = config.routes ?? {};\n\t\tif (config.usernamePattern !== undefined) {\n\t\t\tthis.#usernamePattern = normalizeUsernamePattern(config.usernamePattern);\n\t\t}\n\t}\n\n\t#assertProviderIssuedNameValid(username: string, fieldPath = 'username'): void {\n\t\tvalidateUsernameDefault(username, {\n\t\t\tpattern: this.#usernamePattern,\n\t\t\tfieldPath: fieldPath\n\t\t});\n\t}\n\n\tprotected async initRoutes(config: KeetaAnchorUsernameServerConfig): Promise<KeetaAnchorHTTPServer.Routes> {\n\t\tconst routes: KeetaAnchorHTTPServer.Routes = { ...this.routes };\n\n\t\tif ('homepage' in config) {\n\t\t\troutes['GET /'] = async function() {\n\t\t\t\tlet homepageData: string;\n\t\t\t\tif (typeof config.homepage === 'string') {\n\t\t\t\t\thomepageData = config.homepage;\n\t\t\t\t} else {\n\t\t\t\t\tif (!config.homepage) {\n\t\t\t\t\t\tthrow(new Error('internal error: No homepage function provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\thomepageData = await config.homepage();\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: homepageData,\n\t\t\t\t\tcontentType: 'text/html; charset=utf-8'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\troutes['GET /api/resolve/:toResolve'] = async (params) => {\n\t\t\tlet toResolve = params.get('toResolve');\n\t\t\tif (!toResolve) {\n\t\t\t\tthrow(new KeetaAnchorUserError('Missing toResolve parameter'));\n\t\t\t}\n\n\t\t\tlet resolution;\n\t\t\tlet account = null;\n\t\t\tlet username = null;\n\t\t\tif (isKeetaNetPublicKeyString(toResolve)) {\n\t\t\t\taccount = KeetaNet.lib.Account.fromPublicKeyString(toResolve);\n\t\t\t\tresolution = await this.usernames.resolveAccount({ account });\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\ttoResolve = decodeURIComponent(toResolve);\n\t\t\t\t} catch {\n\t\t\t\t\tthrow(new KeetaAnchorUserValidationError({\n\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'toResolve',\n\t\t\t\t\t\t\t\tmessage: 'toResolve parameter is not a valid URI component',\n\t\t\t\t\t\t\t\treceivedValue: toResolve\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.#assertProviderIssuedNameValid(toResolve);\n\t\t\t\tusername = toResolve;\n\t\t\t\tresolution = await this.usernames.resolveUsername({ username });\n\t\t\t}\n\n\t\t\tif (!resolution) {\n\t\t\t\tthrow(new Errors.UserNotFound({ username: username ?? undefined, account: account ?? undefined }));\n\t\t\t}\n\n\t\t\tif ('account' in resolution) {\n\t\t\t\tif (account !== null && !(account.comparePublicKey(resolution.account))) {\n\t\t\t\t\tthrow(new Error('internal: Resolved account does not match requested account'));\n\t\t\t\t}\n\n\t\t\t\taccount = resolution.account;\n\t\t\t}\n\n\t\t\tif ('username' in resolution) {\n\t\t\t\tif (username !== null && username !== resolution.username) {\n\t\t\t\t\tthrow(new Error('internal: Resolved username does not match requested username'));\n\t\t\t\t}\n\n\t\t\t\tusername = resolution.username;\n\t\t\t}\n\n\t\t\tif (!account || !username) {\n\t\t\t\tthrow(new Error('internal: We should know both the account and username here'));\n\t\t\t}\n\n\t\t\treturn({\n\t\t\t\toutput: JSON.stringify({\n\t\t\t\t\tok: true,\n\t\t\t\t\taccount: KeetaNet.lib.Account.toPublicKeyString(account),\n\t\t\t\t\tusername: username\n\t\t\t\t}),\n\t\t\t\tcontentType: 'application/json'\n\t\t\t});\n\t\t};\n\n\t\tconst claimHandler = this.usernames.claim;\n\t\tif (claimHandler) {\n\t\t\troutes['POST /api/claim'] = async (_params, body) => {\n\n\t\t\t\tconst request: KeetaUsernameAnchorClaimRequest = (() => {\n\t\t\t\t\tconst raw = assertKeetaUsernameAnchorClaimRequestJSON(body);\n\n\t\t\t\t\tconst ret: KeetaUsernameAnchorClaimRequest = {\n\t\t\t\t\t\tusername: raw.username,\n\t\t\t\t\t\taccount: KeetaNet.lib.Account.toAccount(raw.account),\n\t\t\t\t\t\tsigned: raw.signed\n\t\t\t\t\t};\n\n\t\t\t\t\tif (raw.transfer) {\n\t\t\t\t\t\tret.transfer = {\n\t\t\t\t\t\t\tfrom: KeetaNet.lib.Account.toAccount(raw.transfer.from),\n\t\t\t\t\t\t\tsigned: raw.transfer.signed\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn(ret);\n\t\t\t\t})();\n\n\t\t\t\tconst username = request.username;\n\n\t\t\t\tthis.#assertProviderIssuedNameValid(username);\n\n\t\t\t\tif (request.transfer) {\n\t\t\t\t\tconst transferSignable = getUsernameTransferSignable({\n\t\t\t\t\t\tusername: request.username,\n\t\t\t\t\t\tfrom: request.transfer.from,\n\t\t\t\t\t\tto: request.account\n\t\t\t\t\t});\n\n\t\t\t\t\tconst verifiedTransfer = await Signing.VerifySignedData(request.transfer.from, transferSignable, request.transfer.signed);\n\n\t\t\t\t\tif (!verifiedTransfer) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim transfer signature'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst verified = await Signing.VerifySignedData(request.account, getUsernameClaimSignable(request), request.signed);\n\t\t\t\tif (!verified) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim signature'));\n\t\t\t\t}\n\n\t\t\t\tconst claimResponse = await claimHandler({\n\t\t\t\t\tusername: request.username,\n\t\t\t\t\taccount: request.account,\n\t\t\t\t\tfromUser: request.transfer?.from ?? null\n\t\t\t\t});\n\n\t\t\t\tif (!claimResponse.ok) {\n\t\t\t\t\tif (claimResponse.taken) {\n\t\t\t\t\t\tthrow(new Errors.UsernameAlreadyTaken({ username }));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Username claim rejected'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify({ ok: true }),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tconst releaseHandler = this.usernames.releaseUsername;\n\t\tif (releaseHandler) {\n\t\t\troutes['POST /api/release'] = async (_params, body) => {\n\t\t\t\tconst request: KeetaUsernameAnchorReleaseRequest = (() => {\n\t\t\t\t\tconst raw = assertKeetaUsernameAnchorReleaseRequestJSON(body);\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\taccount: KeetaNet.lib.Account.toAccount(raw.account),\n\t\t\t\t\t\tsigned: raw.signed\n\t\t\t\t\t});\n\t\t\t\t})();\n\n\n\t\t\t\tconst verified = await Signing.VerifySignedData(request.account, getUsernameReleaseSignable(request), request.signed);\n\t\t\t\tif (!verified) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim signature'));\n\t\t\t\t}\n\n\t\t\t\tconst releaseResponse = await releaseHandler({ account: request.account });\n\n\t\t\t\tif (!releaseResponse.ok) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Release claim rejected'));\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify({ ok: true }),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tconst searchHandler = this.usernames.search;\n\t\tif (searchHandler) {\n\t\t\troutes['GET /api/search'] = async (_ignore_params, _ignore_body, _ignore_headers, url) => {\n\t\t\t\tconst request: KeetaUsernameAnchorSearchRequestParameters = (() => {\n\t\t\t\t\tconst searchParameter = url.searchParams.get('search');\n\n\t\t\t\t\tif (!searchParameter) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserValidationError({\n\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpath: 'search',\n\t\t\t\t\t\t\t\t\tmessage: 'Missing search parameter',\n\t\t\t\t\t\t\t\t\treceivedValue: searchParameter\n\t\t\t\t\t\t\t\t}\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\tthis.#assertProviderIssuedNameValid(searchParameter, 'search');\n\n\t\t\t\t\treturn({ search: searchParameter });\n\t\t\t\t})();\n\n\t\t\t\tconst searchResponse = await searchHandler(request);\n\n\t\t\t\tconst formatted: KeetaUsernameAnchorSearchResponseJSON = {\n\t\t\t\t\tok: true,\n\t\t\t\t\tresults: searchResponse.results.map(function(result) {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\tusername: result.username,\n\t\t\t\t\t\t\taccount: result.account.publicKeyString.get()\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify(formatted),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\n\t\treturn(routes);\n\t}\n\n\tasync serviceMetadata(): Promise<NonNullable<ServiceMetadata['services']['username']>[string]> {\n\t\tconst operations: NonNullable<ServiceMetadata['services']['username']>[string]['operations'] = {\n\t\t\tresolve: (new URL('/api/resolve/{toResolve}', this.url)).toString()\n\t\t};\n\n\t\tconst authentication: ServiceMetadataAuthenticationType = {\n\t\t\tmethod: 'keeta-account',\n\t\t\ttype: 'required'\n\t\t}\n\n\t\tif (this.usernames.claim) {\n\t\t\toperations.claim = {\n\t\t\t\turl: (new URL('/api/claim', this.url)).toString(),\n\t\t\t\toptions: { authentication }\n\t\t\t};\n\t\t}\n\n\t\tif (this.usernames.releaseUsername) {\n\t\t\toperations.release = {\n\t\t\t\turl: (new URL('/api/release', this.url)).toString(),\n\t\t\t\toptions: { authentication }\n\t\t\t};\n\t\t}\n\n\t\tif (this.usernames.search) {\n\t\t\toperations.search = { url: (new URL('/api/search', this.url)).toString() };\n\t\t}\n\n\t\treturn({\n\t\t\toperations,\n\t\t\t...(this.#usernamePattern ? { usernamePattern: this.#usernamePattern.source } : {})\n\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/services/username/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { KeetaNet } from '../../client/index.js';\nimport * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';\nimport type {\n\tKeetaUsernameAnchorUsernameResolutionContext,\n\tKeetaUsernameAnchorAccountResolutionContext,\n\tKeetaUsernameAnchorClaimRequest,\n\tKeetaUsernameAnchorReleaseRequest,\n\tKeetaUsernameAnchorSearchRequestParameters,\n\tKeetaUsernameAnchorUsernameWithAccount,\n\tKeetaUsernameAnchorSearchResponseJSON } from './common.js';\nimport {\n\tgetUsernameClaimSignable,\n\tvalidateUsernameDefault,\n\ttype KeetaUsernameAnchorClaimContext,\n\tErrors,\n\tisKeetaNetPublicKeyString,\n\tassertKeetaUsernameAnchorClaimRequestJSON,\n\tgetUsernameTransferSignable,\n\tassertKeetaUsernameAnchorReleaseRequestJSON,\n\tgetUsernameReleaseSignable\n} from './common.js';\nimport type { ServiceMetadata, ServiceMetadataAuthenticationType } from '../../lib/resolver.ts';\nimport type { Routes } from '../../lib/http-server/index.ts';\nimport { KeetaAnchorUserError, KeetaAnchorUserValidationError } from '../../lib/error.js';\nimport * as Signing from '../../lib/utils/signing.js';\n\nfunction normalizeUsernamePattern(pattern: string | RegExp): RegExp {\n\tif (typeof pattern === 'string') {\n\t\ttry {\n\t\t\treturn(new RegExp(pattern));\n\t\t} catch (error) {\n\t\t\tthrow(new Error(`Invalid usernamePattern regex: ${error instanceof Error ? error.message : String(error)}`));\n\t\t}\n\t}\n\n\tif (pattern.flags !== '') {\n\t\tthrow(new Error('usernamePattern RegExp must not specify flags')); // Flags cannot be reliably shared via metadata string\n\t}\n\n\treturn(new RegExp(pattern.source));\n}\n\ntype ClaimHandlerResponse = { ok: true; } | { ok: false; taken?: false; } | { ok: false; taken: true; };\ntype SearchHandlerResponse = { results: KeetaUsernameAnchorUsernameWithAccount[] };\n\nexport interface KeetaAnchorUsernameServerConfig extends KeetaAnchorHTTPServer.KeetaAnchorHTTPServerConfig {\n\thomepage?: string | (() => Promise<string> | string);\n\tusernames: {\n\t\tresolveUsername: (input: KeetaUsernameAnchorUsernameResolutionContext) => Promise<{ account: InstanceType<typeof KeetaNet.lib.Account>; } | null>;\n\t\tresolveAccount: (input: KeetaUsernameAnchorAccountResolutionContext) => Promise<{ username: string; } | null>;\n\n\t\treleaseUsername?: (input: { account: InstanceType<typeof KeetaNet.lib.Account>; }) => Promise<{ ok: boolean; }>;\n\t\tclaim?: ((input: KeetaUsernameAnchorClaimContext) => Promise<ClaimHandlerResponse>);\n\n\t\tsearch?: ((input: KeetaUsernameAnchorSearchRequestParameters) => Promise<SearchHandlerResponse>);\n\t};\n\troutes?: Routes;\n\tusernamePattern?: string | RegExp;\n}\n\nexport class KeetaNetUsernameAnchorHTTPServer extends KeetaAnchorHTTPServer.KeetaNetAnchorHTTPServer<KeetaAnchorUsernameServerConfig> {\n\treadonly homepage: NonNullable<KeetaAnchorUsernameServerConfig['homepage']>;\n\treadonly usernames: KeetaAnchorUsernameServerConfig['usernames'];\n\treadonly routes: NonNullable<KeetaAnchorUsernameServerConfig['routes']>;\n\treadonly #usernamePattern?: RegExp;\n\n\tconstructor(config: KeetaAnchorUsernameServerConfig) {\n\t\tsuper(config);\n\n\t\tthis.homepage = config.homepage ?? '';\n\t\tthis.usernames = config.usernames;\n\t\tthis.routes = config.routes ?? {};\n\t\tif (config.usernamePattern !== undefined) {\n\t\t\tthis.#usernamePattern = normalizeUsernamePattern(config.usernamePattern);\n\t\t}\n\t}\n\n\t#assertProviderIssuedNameValid(username: string, fieldPath = 'username'): void {\n\t\tvalidateUsernameDefault(username, {\n\t\t\tpattern: this.#usernamePattern,\n\t\t\tfieldPath: fieldPath\n\t\t});\n\t}\n\n\tprotected async initRoutes(config: KeetaAnchorUsernameServerConfig): Promise<KeetaAnchorHTTPServer.Routes> {\n\t\tconst routes: KeetaAnchorHTTPServer.Routes = { ...this.routes };\n\n\t\tif ('homepage' in config) {\n\t\t\troutes['GET /'] = async function() {\n\t\t\t\tlet homepageData: string;\n\t\t\t\tif (typeof config.homepage === 'string') {\n\t\t\t\t\thomepageData = config.homepage;\n\t\t\t\t} else {\n\t\t\t\t\tif (!config.homepage) {\n\t\t\t\t\t\tthrow(new Error('internal error: No homepage function provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\thomepageData = await config.homepage();\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: homepageData,\n\t\t\t\t\tcontentType: 'text/html; charset=utf-8'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\troutes['GET /api/resolve/:toResolve'] = async (params) => {\n\t\t\tlet toResolve = params.get('toResolve');\n\t\t\tif (!toResolve) {\n\t\t\t\tthrow(new KeetaAnchorUserError('Missing toResolve parameter'));\n\t\t\t}\n\n\t\t\tlet resolution;\n\t\t\tlet account = null;\n\t\t\tlet username = null;\n\t\t\tif (isKeetaNetPublicKeyString(toResolve)) {\n\t\t\t\taccount = KeetaNet.lib.Account.fromPublicKeyString(toResolve);\n\t\t\t\tresolution = await this.usernames.resolveAccount({ account });\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\ttoResolve = decodeURIComponent(toResolve);\n\t\t\t\t} catch {\n\t\t\t\t\tthrow(new KeetaAnchorUserValidationError({\n\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'toResolve',\n\t\t\t\t\t\t\t\tmessage: 'toResolve parameter is not a valid URI component',\n\t\t\t\t\t\t\t\treceivedValue: toResolve\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.#assertProviderIssuedNameValid(toResolve);\n\t\t\t\tusername = toResolve;\n\t\t\t\tresolution = await this.usernames.resolveUsername({ username });\n\t\t\t}\n\n\t\t\tif (!resolution) {\n\t\t\t\tthrow(new Errors.UserNotFound({ username: username ?? undefined, account: account ?? undefined }));\n\t\t\t}\n\n\t\t\tif ('account' in resolution) {\n\t\t\t\tif (account !== null && !(account.comparePublicKey(resolution.account))) {\n\t\t\t\t\tthrow(new Error('internal: Resolved account does not match requested account'));\n\t\t\t\t}\n\n\t\t\t\taccount = resolution.account;\n\t\t\t}\n\n\t\t\tif ('username' in resolution) {\n\t\t\t\tif (username !== null && username !== resolution.username) {\n\t\t\t\t\tthrow(new Error('internal: Resolved username does not match requested username'));\n\t\t\t\t}\n\n\t\t\t\tusername = resolution.username;\n\t\t\t}\n\n\t\t\tif (!account || !username) {\n\t\t\t\tthrow(new Error('internal: We should know both the account and username here'));\n\t\t\t}\n\n\t\t\treturn({\n\t\t\t\toutput: JSON.stringify({\n\t\t\t\t\tok: true,\n\t\t\t\t\taccount: KeetaNet.lib.Account.toPublicKeyString(account),\n\t\t\t\t\tusername: username\n\t\t\t\t}),\n\t\t\t\tcontentType: 'application/json'\n\t\t\t});\n\t\t};\n\n\t\tconst claimHandler = this.usernames.claim;\n\t\tif (claimHandler) {\n\t\t\troutes['POST /api/claim'] = async (_params, body) => {\n\n\t\t\t\tconst request: KeetaUsernameAnchorClaimRequest = (() => {\n\t\t\t\t\tconst raw = assertKeetaUsernameAnchorClaimRequestJSON(body);\n\n\t\t\t\t\tconst ret: KeetaUsernameAnchorClaimRequest = {\n\t\t\t\t\t\tusername: raw.username,\n\t\t\t\t\t\taccount: KeetaNet.lib.Account.toAccount(raw.account),\n\t\t\t\t\t\tsigned: raw.signed\n\t\t\t\t\t};\n\n\t\t\t\t\tif (raw.transfer) {\n\t\t\t\t\t\tret.transfer = {\n\t\t\t\t\t\t\tfrom: KeetaNet.lib.Account.toAccount(raw.transfer.from),\n\t\t\t\t\t\t\tsigned: raw.transfer.signed\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn(ret);\n\t\t\t\t})();\n\n\t\t\t\tconst username = request.username;\n\n\t\t\t\tthis.#assertProviderIssuedNameValid(username);\n\n\t\t\t\tif (request.transfer) {\n\t\t\t\t\tconst transferSignable = getUsernameTransferSignable({\n\t\t\t\t\t\tusername: request.username,\n\t\t\t\t\t\tfrom: request.transfer.from,\n\t\t\t\t\t\tto: request.account\n\t\t\t\t\t});\n\n\t\t\t\t\tconst verifiedTransfer = await Signing.VerifySignedData(request.transfer.from, transferSignable, request.transfer.signed);\n\n\t\t\t\t\tif (!verifiedTransfer) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim transfer signature'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst verified = await Signing.VerifySignedData(request.account, getUsernameClaimSignable(request), request.signed);\n\t\t\t\tif (!verified) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim signature'));\n\t\t\t\t}\n\n\t\t\t\tconst claimResponse = await claimHandler({\n\t\t\t\t\tusername: request.username,\n\t\t\t\t\taccount: request.account,\n\t\t\t\t\tfromUser: request.transfer?.from ?? null\n\t\t\t\t});\n\n\t\t\t\tif (!claimResponse.ok) {\n\t\t\t\t\tif (claimResponse.taken) {\n\t\t\t\t\t\tthrow(new Errors.UsernameAlreadyTaken({ username }));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Username claim rejected'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify({ ok: true }),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tconst releaseHandler = this.usernames.releaseUsername;\n\t\tif (releaseHandler) {\n\t\t\troutes['POST /api/release'] = async (_params, body) => {\n\t\t\t\tconst request: KeetaUsernameAnchorReleaseRequest = (() => {\n\t\t\t\t\tconst raw = assertKeetaUsernameAnchorReleaseRequestJSON(body);\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\taccount: KeetaNet.lib.Account.toAccount(raw.account),\n\t\t\t\t\t\tsigned: raw.signed\n\t\t\t\t\t});\n\t\t\t\t})();\n\n\n\t\t\t\tconst verified = await Signing.VerifySignedData(request.account, getUsernameReleaseSignable(request), request.signed);\n\t\t\t\tif (!verified) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid username claim signature'));\n\t\t\t\t}\n\n\t\t\t\tconst releaseResponse = await releaseHandler({ account: request.account });\n\n\t\t\t\tif (!releaseResponse.ok) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Release claim rejected'));\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify({ ok: true }),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tconst searchHandler = this.usernames.search;\n\t\tif (searchHandler) {\n\t\t\troutes['GET /api/search'] = async (_ignore_params, _ignore_body, _ignore_headers, url) => {\n\t\t\t\tconst request: KeetaUsernameAnchorSearchRequestParameters = (() => {\n\t\t\t\t\tconst searchParameter = url.searchParams.get('search');\n\n\t\t\t\t\tif (!searchParameter) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserValidationError({\n\t\t\t\t\t\t\tfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpath: 'search',\n\t\t\t\t\t\t\t\t\tmessage: 'Missing search parameter',\n\t\t\t\t\t\t\t\t\treceivedValue: searchParameter\n\t\t\t\t\t\t\t\t}\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\tthis.#assertProviderIssuedNameValid(searchParameter, 'search');\n\n\t\t\t\t\treturn({ search: searchParameter });\n\t\t\t\t})();\n\n\t\t\t\tconst searchResponse = await searchHandler(request);\n\n\t\t\t\tconst formatted: KeetaUsernameAnchorSearchResponseJSON = {\n\t\t\t\t\tok: true,\n\t\t\t\t\tresults: searchResponse.results.map(function(result) {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\tusername: result.username,\n\t\t\t\t\t\t\taccount: result.account.publicKeyString.get()\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: JSON.stringify(formatted),\n\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\n\t\treturn(routes);\n\t}\n\n\tasync serviceMetadata(): Promise<NonNullable<ServiceMetadata['services']['username']>[string]> {\n\t\tconst operations: NonNullable<ServiceMetadata['services']['username']>[string]['operations'] = {\n\t\t\tresolve: (new URL('/api/resolve/{toResolve}', this.url)).toString()\n\t\t};\n\n\t\tconst authentication: ServiceMetadataAuthenticationType = {\n\t\t\tmethod: 'keeta-account',\n\t\t\ttype: 'required'\n\t\t}\n\n\t\tif (this.usernames.claim) {\n\t\t\toperations.claim = {\n\t\t\t\turl: (new URL('/api/claim', this.url)).toString(),\n\t\t\t\toptions: { authentication }\n\t\t\t};\n\t\t}\n\n\t\tif (this.usernames.releaseUsername) {\n\t\t\toperations.release = {\n\t\t\t\turl: (new URL('/api/release', this.url)).toString(),\n\t\t\t\toptions: { authentication }\n\t\t\t};\n\t\t}\n\n\t\tif (this.usernames.search) {\n\t\t\toperations.search = { url: (new URL('/api/search', this.url)).toString() };\n\t\t}\n\n\t\treturn({\n\t\t\toperations,\n\t\t\t...(this.#usernamePattern ? { usernamePattern: this.#usernamePattern.source } : {})\n\t\t});\n\t}\n}\n"]}
|