@atproto/xrpc 0.0.1

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.
@@ -0,0 +1,20 @@
1
+ import { Lexicons } from '@atproto/lexicon';
2
+ import { FetchHandler, CallOptions, QueryParams, XRPCResponse } from './types';
3
+ export declare class Client {
4
+ fetch: FetchHandler;
5
+ lex: Lexicons;
6
+ call(serviceUri: string | URL, methodNsid: string, params?: QueryParams, data?: unknown, opts?: CallOptions): Promise<XRPCResponse>;
7
+ service(serviceUri: string | URL): ServiceClient;
8
+ addLexicon(doc: unknown): void;
9
+ addLexicons(docs: unknown[]): void;
10
+ removeLexicon(uri: string): void;
11
+ }
12
+ export declare class ServiceClient {
13
+ baseClient: Client;
14
+ uri: URL;
15
+ headers: Record<string, string>;
16
+ constructor(baseClient: Client, serviceUri: string | URL);
17
+ setHeader(key: string, value: string): void;
18
+ unsetHeader(key: string): void;
19
+ call(methodNsid: string, params?: QueryParams, data?: unknown, opts?: CallOptions): Promise<XRPCResponse>;
20
+ }
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './client';
3
+ import { Client } from './client';
4
+ declare const defaultInst: Client;
5
+ export default defaultInst;
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ export declare type QueryParams = Record<string, any>;
3
+ export declare type Headers = Record<string, string>;
4
+ export interface CallOptions {
5
+ encoding?: string;
6
+ headers?: Headers;
7
+ }
8
+ export interface FetchHandlerResponse {
9
+ status: number;
10
+ headers: Headers;
11
+ body: ArrayBuffer | undefined;
12
+ }
13
+ export declare type FetchHandler = (httpUri: string, httpMethod: string, httpHeaders: Headers, httpReqBody: any) => Promise<FetchHandlerResponse>;
14
+ export declare const errorResponseBody: z.ZodObject<{
15
+ error: z.ZodOptional<z.ZodString>;
16
+ message: z.ZodOptional<z.ZodString>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ error?: string | undefined;
19
+ message?: string | undefined;
20
+ }, {
21
+ error?: string | undefined;
22
+ message?: string | undefined;
23
+ }>;
24
+ export declare type ErrorResponseBody = z.infer<typeof errorResponseBody>;
25
+ export declare enum ResponseType {
26
+ Unknown = 1,
27
+ InvalidResponse = 2,
28
+ Success = 200,
29
+ InvalidRequest = 400,
30
+ AuthRequired = 401,
31
+ Forbidden = 403,
32
+ XRPCNotSupported = 404,
33
+ PayloadTooLarge = 413,
34
+ RateLimitExceeded = 429,
35
+ InternalServerError = 500,
36
+ MethodNotImplemented = 501,
37
+ UpstreamFailure = 502,
38
+ NotEnoughResouces = 503,
39
+ UpstreamTimeout = 504
40
+ }
41
+ export declare const ResponseTypeNames: {
42
+ 2: string;
43
+ 200: string;
44
+ 400: string;
45
+ 401: string;
46
+ 403: string;
47
+ 404: string;
48
+ 413: string;
49
+ 429: string;
50
+ 500: string;
51
+ 501: string;
52
+ 502: string;
53
+ 503: string;
54
+ 504: string;
55
+ };
56
+ export declare const ResponseTypeStrings: {
57
+ 2: string;
58
+ 200: string;
59
+ 400: string;
60
+ 401: string;
61
+ 403: string;
62
+ 404: string;
63
+ 413: string;
64
+ 429: string;
65
+ 500: string;
66
+ 501: string;
67
+ 502: string;
68
+ 503: string;
69
+ 504: string;
70
+ };
71
+ export declare class XRPCResponse {
72
+ data: any;
73
+ headers: Headers;
74
+ success: boolean;
75
+ constructor(data: any, headers: Headers);
76
+ }
77
+ export declare class XRPCError extends Error {
78
+ status: ResponseType;
79
+ error?: string | undefined;
80
+ success: boolean;
81
+ constructor(status: ResponseType, error?: string | undefined, message?: string);
82
+ }
@@ -0,0 +1,9 @@
1
+ import { LexXrpcProcedure, LexXrpcQuery } from '@atproto/lexicon';
2
+ import { CallOptions, Headers, QueryParams, ResponseType } from './types';
3
+ export declare function getMethodSchemaHTTPMethod(schema: LexXrpcProcedure | LexXrpcQuery): "post" | "get";
4
+ export declare function constructMethodCallUri(nsid: string, schema: LexXrpcProcedure | LexXrpcQuery, serviceUri: URL, params?: QueryParams): string;
5
+ export declare function encodeQueryParam(type: 'string' | 'number' | 'integer' | 'boolean' | 'datetime' | 'unknown', value: any): string;
6
+ export declare function constructMethodCallHeaders(schema: LexXrpcProcedure | LexXrpcQuery, data?: any, opts?: CallOptions): Headers;
7
+ export declare function encodeMethodCallBody(headers: Headers, data?: any): ArrayBuffer | undefined;
8
+ export declare function httpResponseCodeToEnum(status: number): ResponseType;
9
+ export declare function httpResponseBodyParse(mimeType: string | null, data: ArrayBuffer | undefined): any;
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/zod/lib/helpers/typealiases.d.ts","../../../node_modules/zod/lib/helpers/util.d.ts","../../../node_modules/zod/lib/zoderror.d.ts","../../../node_modules/zod/lib/locales/en.d.ts","../../../node_modules/zod/lib/errors.d.ts","../../../node_modules/zod/lib/helpers/parseutil.d.ts","../../../node_modules/zod/lib/helpers/enumutil.d.ts","../../../node_modules/zod/lib/helpers/errorutil.d.ts","../../../node_modules/zod/lib/helpers/partialutil.d.ts","../../../node_modules/zod/lib/types.d.ts","../../../node_modules/zod/lib/external.d.ts","../../../node_modules/zod/lib/index.d.ts","../../../node_modules/zod/index.d.ts","../../nsid/src/index.ts","../../lexicon/src/types.ts","../../lexicon/src/validators/primitives.ts","../../lexicon/src/validators/blob.ts","../../lexicon/src/validators/complex.ts","../../lexicon/src/util.ts","../../lexicon/src/validators/xrpc.ts","../../lexicon/src/validation.ts","../../lexicon/src/lexicons.ts","../../lexicon/src/index.ts","../src/types.ts","../src/util.ts","../src/client.ts","../src/index.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/node/ts4.8/assert.d.ts","../../../node_modules/@types/node/ts4.8/assert/strict.d.ts","../../../node_modules/@types/node/ts4.8/globals.d.ts","../../../node_modules/@types/node/ts4.8/async_hooks.d.ts","../../../node_modules/@types/node/ts4.8/buffer.d.ts","../../../node_modules/@types/node/ts4.8/child_process.d.ts","../../../node_modules/@types/node/ts4.8/cluster.d.ts","../../../node_modules/@types/node/ts4.8/console.d.ts","../../../node_modules/@types/node/ts4.8/constants.d.ts","../../../node_modules/@types/node/ts4.8/crypto.d.ts","../../../node_modules/@types/node/ts4.8/dgram.d.ts","../../../node_modules/@types/node/ts4.8/diagnostics_channel.d.ts","../../../node_modules/@types/node/ts4.8/dns.d.ts","../../../node_modules/@types/node/ts4.8/dns/promises.d.ts","../../../node_modules/@types/node/ts4.8/domain.d.ts","../../../node_modules/@types/node/ts4.8/dom-events.d.ts","../../../node_modules/@types/node/ts4.8/events.d.ts","../../../node_modules/@types/node/ts4.8/fs.d.ts","../../../node_modules/@types/node/ts4.8/fs/promises.d.ts","../../../node_modules/@types/node/ts4.8/http.d.ts","../../../node_modules/@types/node/ts4.8/http2.d.ts","../../../node_modules/@types/node/ts4.8/https.d.ts","../../../node_modules/@types/node/ts4.8/inspector.d.ts","../../../node_modules/@types/node/ts4.8/module.d.ts","../../../node_modules/@types/node/ts4.8/net.d.ts","../../../node_modules/@types/node/ts4.8/os.d.ts","../../../node_modules/@types/node/ts4.8/path.d.ts","../../../node_modules/@types/node/ts4.8/perf_hooks.d.ts","../../../node_modules/@types/node/ts4.8/process.d.ts","../../../node_modules/@types/node/ts4.8/punycode.d.ts","../../../node_modules/@types/node/ts4.8/querystring.d.ts","../../../node_modules/@types/node/ts4.8/readline.d.ts","../../../node_modules/@types/node/ts4.8/readline/promises.d.ts","../../../node_modules/@types/node/ts4.8/repl.d.ts","../../../node_modules/@types/node/ts4.8/stream.d.ts","../../../node_modules/@types/node/ts4.8/stream/promises.d.ts","../../../node_modules/@types/node/ts4.8/stream/consumers.d.ts","../../../node_modules/@types/node/ts4.8/stream/web.d.ts","../../../node_modules/@types/node/ts4.8/string_decoder.d.ts","../../../node_modules/@types/node/ts4.8/test.d.ts","../../../node_modules/@types/node/ts4.8/timers.d.ts","../../../node_modules/@types/node/ts4.8/timers/promises.d.ts","../../../node_modules/@types/node/ts4.8/tls.d.ts","../../../node_modules/@types/node/ts4.8/trace_events.d.ts","../../../node_modules/@types/node/ts4.8/tty.d.ts","../../../node_modules/@types/node/ts4.8/url.d.ts","../../../node_modules/@types/node/ts4.8/util.d.ts","../../../node_modules/@types/node/ts4.8/v8.d.ts","../../../node_modules/@types/node/ts4.8/vm.d.ts","../../../node_modules/@types/node/ts4.8/wasi.d.ts","../../../node_modules/@types/node/ts4.8/worker_threads.d.ts","../../../node_modules/@types/node/ts4.8/zlib.d.ts","../../../node_modules/@types/node/ts4.8/globals.global.d.ts","../../../node_modules/@types/node/ts4.8/index.d.ts","../../../node_modules/@types/bn.js/index.d.ts","../../../node_modules/@types/connect/index.d.ts","../../../node_modules/@types/body-parser/index.d.ts","../../../node_modules/@types/cors/index.d.ts","../../../node_modules/@types/elliptic/index.d.ts","../../../node_modules/@types/range-parser/index.d.ts","../../../node_modules/@types/qs/index.d.ts","../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../node_modules/@types/mime/mime.d.ts","../../../node_modules/@types/mime/index.d.ts","../../../node_modules/@types/serve-static/index.d.ts","../../../node_modules/@types/express/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/http-errors/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/jsonwebtoken/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/minimist/index.d.ts","../../../node_modules/@types/nodemailer/lib/dkim/index.d.ts","../../../node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts","../../../node_modules/@types/nodemailer/lib/xoauth2/index.d.ts","../../../node_modules/@types/nodemailer/lib/mailer/index.d.ts","../../../node_modules/@types/nodemailer/lib/mime-node/index.d.ts","../../../node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts","../../../node_modules/@types/nodemailer/lib/shared/index.d.ts","../../../node_modules/@types/nodemailer/lib/json-transport/index.d.ts","../../../node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts","../../../node_modules/@types/nodemailer/lib/ses-transport/index.d.ts","../../../node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts","../../../node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts","../../../node_modules/@types/nodemailer/lib/stream-transport/index.d.ts","../../../node_modules/@types/nodemailer/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/pg-types/index.d.ts","../../../node_modules/pg-protocol/dist/messages.d.ts","../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../node_modules/pg-protocol/dist/parser.d.ts","../../../node_modules/pg-protocol/dist/index.d.ts","../../../node_modules/@types/pg/index.d.ts","../../../node_modules/@types/prettier/index.d.ts","../../../node_modules/@types/sharp/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/tls.d.ts"],"fileInfos":[{"version":"f20c05dbfe50a208301d2a1da37b9931bce0466eb5a1f4fe240971b4ecc82b67","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","d11a03592451da2d1065e09e61f4e2a9bf68f780f4f6623c18b57816a9679d17","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"9b087de7268e4efc5f215347a62656663933d63c0b1d7b624913240367b999ea","affectsGlobalScope":true},{"version":"3260e3386d9535b804205bdddb5618a9a27735bd22927f48ad54363abcd23d45","affectsGlobalScope":true},{"version":"adb09ec0a64fc17dbbc4a228b3b18aa5f01db3440a6b0cbb02354df58674d584","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"55f400eec64d17e888e278f4def2f254b41b89515d3b88ad75d5e05f019daddd","affectsGlobalScope":true},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"775d9c9fd150d5de79e0450f35bc8b8f94ae64e3eb5da12725ff2a649dccc777","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"34c839eaaa6d78c8674ae2c37af2236dee6831b13db7b4ef4df3ec889a04d4f2","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"ab7d58e6161a550ff92e5aff755dc37fe896245348332cd5f1e1203479fe0ed1","affectsGlobalScope":true},{"version":"6bda95ea27a59a276e46043b7065b55bd4b316c25e70e29b572958fa77565d43","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"a4da0551fd39b90ca7ce5f68fb55d4dc0c1396d589b612e1902f68ee090aaada","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"9afae14803f3b7343ed6d193173008715c1fa3421a353a818c805244ed737a84","bb98c05ae5cb9bd7cb7ad76fe517251a661787a6f24337b842f47faf393f79c7","a93bf95f7009c90e7d1edb092560d4052e3ebbe9b9ad2d796bcd95dc4306825c","8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","c2cb3c8ff388781258ea9ddbcd8a947f751bddd6886e1d3b3ea09ddaa895df80","f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","014b34d4c2ef27191fdf3feabb6557ec92127f813910725b6e79ed9a49e466b6","72efc3e8cee3cb13144cb63bb8aacf28f918439a2ff222de89e0e5d7ba9c7170","b61efb129c7011068cb4ccbbd86d5741ac82653476b09f46d3d06dd99b5b687e","2b7961486503fa279a4f1a52928d8c31fc6558c335b750878721467210552dd7","d1f62988c7e8e8650f7ed39520a766648155abbf75dd89f60e24f069433301d4","5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","14e6f51486f4234e46f1b2c09c852989754de877fda7b2afdd709627e24b9882","207dbf55dfe32ef1298e5945f196911bb7fb75a2ebd15e3606c65535ad8f474d","3d20a183069527c92a7d6cb79ca521fa4f8cc9d36b56cb269db4088c220d0ac9","4c8aa3b64e4973c8d22231943bc8ebbecdc3c2d8c6aaac829151c3dbc0bfc7c8","4f5e1e2785adc88653b1888a315532329a4b615a09a422c2bc1cb2f49df33740","906dd0e8fa586117f9ed4dd86573c68b1a1080adc63221429f8b29975d357714","2861e0a8090f7ebd61dd1fa9970b04a5a2afe911ab4baca19cdc21a8e6ed9b28","0966a4236c1616d428cf4615cffb6fcd8bc16c0f4852a8146610ec3cb48af913","8859c7be12542da46ae05d00f5e9eccd8aba56ad687852b3565bf40e94a5924e","b4e1ab9692322413a0095065c5a5e8a4f433e2b082d02635b82fae7e17a8fc6a",{"version":"156b9be8718e5157c84f4ca2163a48f9a8334e4477b945694c882ab89fd3382d","signature":"5167b9a12b1ea5c39287f51a93d12f1678e37de5f617b1278cb63a3e445d2137"},{"version":"eb978dd055b9ce273d159e691fd0e5245724e93fe1bf6f6a7ac52b2a2c5afcde","signature":"27f8ad83f2269751a8da48e1ad6d727bc31b698d2d5746927f75e6a6b53d1bd8"},{"version":"c951a82134ce7545a7469d0b34c7cf61a968a2fd180c7b0761e09ffddc769996","signature":"2b9adad0cdba80678a918d9d8fbafa1ad506d8c4c589011ca554766552205df0"},{"version":"dc8bd2d3fdede21907b93d1b962354779cdae08f83205f4507b639f0f69a29a2","signature":"c8e94f142c19296a960c85fe1a062e22c1fd8af2efbf2d5206b6a34b9daa7ed0"},"c561efdf5ba0b62619745d4761fe2d9756f23db972e039367d15922fed67fd2f","cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","7ec238b220ea991b6643e24191b1f552a65956d5f6de4c6144e700b9985265d8","93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","5426e62886b7be7806312d31a00e8f7dccd6fe63ba9bbefe99ee2eab29cc48a3","7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"02873d070f9cb79f50833fbf4a9a27ac578a2edf8ddb8421eba1b37faba83bfb","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"c0db280fa6b09d7b8d6720a19a47f485956a41ee0e6914f1b704033eb69c6058","affectsGlobalScope":true},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","afcc1c426b76db7ec80e563d4fb0ba9e6bcc6e63c2d7e9342e649dc56d26347f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","b01a80007e448d035a16c74b5c95a5405b2e81b12fabcf18b75aa9eb9ef28990","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","dbe5aa5a5dd8bd1c6a8d11b1310c3f0cdabaacc78a37b394a8c7b14faeb5fb84","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"d4ac44f01d42f541631c5fc88d0ed8efac29a3a3ad9a745d9fd58f8b61ed132e","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","3163f47436da41706c6e2b3c1511f3b7cce9f9f3905b2f3e01246c48b4ba7d14","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","213fc4f2b172d8beb74b77d7c1b41488d67348066d185e4263470cbb010cd6e8",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"f7db71191aa7aac5d6bc927ed6e7075c2763d22c7238227ec0c63c8cf5cb6a8b","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"652ee9c5103e89102d87bc20d167a02a0e3e5e53665674466c8cfea8a9e418c7","01f7828047b5c6703d3c601473618b448f5506a88fcac852638b0715c3abf4eb","6d829824ead8999f87b6df21200df3c6150391b894b4e80662caa462bd48d073","afc559c1b93df37c25aef6b3dfa2d64325b0e112e887ee18bf7e6f4ec383fc90","6fbd58e4015b9ae31ea977d4d549eb24a1102cc798b57ec5d70868b542c06612","b8a427b9fe88504a6fb092e21adfe272d144394a2ced7f9e4adc3de7efa6e216","16d51f964ec125ad2024cf03f0af444b3bc3ec3614d9345cc54d09bab45c9a4c","ba601641fac98c229ccd4a303f747de376d761babb33229bb7153bed9356c9cc",{"version":"ae3fe461989bbd951344efc1f1fe932360ce7392e6126bdb225a82a1bbaf15ee","affectsGlobalScope":true},"5b9ecf7da4d71cf3832dbb8336150fa924631811f488ad4690c2dfec2b4fb1d7","951c85f75aac041dddbedfedf565886a7b494e29ec1532e2a9b4a6180560b50e","f47887b61c6cf2f48746980390d6cb5b8013518951d912cfb37fe748071942be","15c88bfd1b8dc7231ff828ae8df5d955bae5ebca4cf2bcb417af5821e52299ae","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","f463d61cf39c3a6a5f96cdf7adfdb72a0b1d663f7b5d5b6dd042adba835430c2","8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","763e521cf114b80e0dd0e21ca49b9f8ae62e8999555a5e7bade8ce36b33001c2","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","3e6bbb0883148627ca0854a9f62d820aaf1a0f1842f5568176721fef156b8f23","ffcc5500e77223169833fc6eb59b3a507944a1f89574e0a1276b0ea7fc22c4a4","22f13de9e2fe5f0f4724797abd3d34a1cdd6e47ef81fc4933fea3b8bf4ad524b","e3ba509d3dce019b3190ceb2f3fc88e2610ab717122dabd91a9efaa37804040d","cda0cb09b995489b7f4c57f168cd31b83dcbaa7aad49612734fb3c9c73f6e4f2","f72f8428f3c1caa22e9c247d046603b85b442c0dae7b77a7a0bc092c18867cb7",{"version":"195f63105abc03e72b6a176e3e34dfb5ac932b55db378fdc7874b1617e24b465","affectsGlobalScope":true},"f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","bb4ed283cfb3db7ec1d4bb79c37f5e96d39b340f1f4de995c4b0b836c8d5fa05","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","209e814e8e71aec74f69686a9506dd7610b97ab59dcee9446266446f72a76d05","bb654d426b82e0846cd4bd7de91d637039ecdfd63c94447373490178f80846fe","db90f54098b237753ac9c846e39cd49aa538dcad07a2e1c68a138f3c0f8e621d","92ad68795c32309fb43576cacb38bd2677deeed38f5730dcd4a8c5e65463ae15","4b16417aab5a4b276fd4a7db95120a8c7b4d49a6d68ddfe075e9f46dcbf22f00","eecb2ea10a1500dcc6bdeff14be1fb43806f63a9b8562e16e1b4fc8baa8dfa8d","221a6ab66d611349faaf80af49c7a34d95623787610fd153fed4da0811abdcae","f3d84d6f83cf131e4db335dc8100898adbeb01dd4cf4e2fe695ab220eac98be4","6521aaade4e1d23cbc4b665083b004aeaca23f3347ba2422f88d1828968a0056","e79130cf2ba010f2b79747bf43b086252ad041b130768331a1144c0a86185877","e9709ed827c40789c669736fc78e2ab603605e8e81325d1e6d7a5eb451810dd0","dafce7a7b279977940b6b4b50017625e4f922f73094433d2875994bdc0b27e87","6fc76efbb61d3336833ef44ff3f37552667f26c2a73b368f3b4b259f19f2c234","479496e5bb48f2f5e981ef646665bc09fd9ab080e86e9ea882ca4369411604af","6c559dee3c6251c261b67df08e01d4cbc89cbd7a63300150c636705733cebfff","6fa0008bf91a4cc9c8963bace4bba0bd6865cbfa29c3e3ccc461155660fb113a","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","87ed0f84f0691d5c724b23159db96342e6b04ac69201b02c65936f4281ce1fbe","13868c5792808236b17dfe2803eafce911ea4d09d3b2fda95391891a494f988f","0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","fa5c2d3fcd8e227e180815df0a0903ed4b116400452af8a75ac5b68e5e1de9da","93c4fc5b5237c09bc9ed65cb8f0dc1d89034406ab40500b89701341994897142","9adb78bae51a473d33f40da9bdb50c0e491d1cc7a5db776665853effa0cd3374","b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","28288f5e5f8b7b895ed2abe6359c1da3e0d14a64b5aef985071285671f347c01"],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"emitDeclarationOnly":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"jsx":1,"module":1,"noImplicitAny":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"strictPropertyInitialization":false,"target":7},"fileIdsList":[[84,136],[136],[136,163],[84,85,86,87,88,136],[84,86,136],[136,143],[109,136,143,145],[109,136,143],[109,136],[136,144],[106,109,136,143,149,150],[136,146,150,151,154],[107,136,143],[136,158],[136,159],[136,165,168],[136,152],[136,153],[90,136],[93,136],[94,99,127,136],[95,106,107,114,124,135,136],[95,96,106,114,136],[97,136],[98,99,107,115,136],[99,124,132,136],[100,102,106,114,136],[101,136],[102,103,136],[106,136],[104,106,136],[106,107,108,124,135,136],[106,107,108,121,124,127,136],[136,140],[109,114,124,135,136],[106,107,109,110,114,124,132,135,136],[109,111,124,132,135,136],[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142],[106,112,136],[113,135,136],[102,106,114,124,136],[115,136],[116,136],[93,117,136],[118,134,136,140],[119,136],[120,136],[106,121,122,136],[121,123,136,138],[94,106,124,125,126,127,136],[94,124,126,136],[124,125,136],[127,136],[128,136],[106,130,131,136],[130,131,136],[99,114,124,132,136],[133,136],[114,134,136],[94,109,120,135,136],[99,136],[124,136,137],[136,138],[136,139],[94,99,106,108,117,124,135,136,138,140],[124,136,141],[136,143,175,177,181,182,183,184,185,186],[124,136,143],[106,136,143,175,177,178,180,187],[106,114,124,135,136,143,174,175,176,178,179,180,187],[124,136,143,177,178],[124,136,143,177,179],[136,143,175,177,178,180,187],[124,136,143,179],[106,114,124,132,136,143,176,178,180],[106,136,143,175,177,178,179,180,187],[106,124,136,143,175,176,177,178,179,180,187],[106,124,136,143,175,177,178,180,187],[109,124,136,143,180],[106,124,132,136,143,190,191,194,195],[109,136,143,153],[136,199],[136,161,167],[136,165],[136,162,166],[136,143,191,192,193],[124,136,143,191],[136,164],[68,136],[59,60,136],[57,58,59,61,62,66,136],[58,59,136],[67,136],[59,136],[57,58,59,62,63,64,65,136],[57,58,68,136],[71,78,136],[69,71,75,77,136],[69,70,136],[71,74,78,136],[71,74,75,76,78,136],[71,72,73,75,78,136],[71,72,78,136],[79,80,81,136],[80,82,136],[69,136],[79,80,136],[84],[163],[84,85,86,87,88],[84,86],[201],[145,201,202],[201,202],[202],[144],[149,150,201,202,203],[146,150,151,154],[201,204],[158],[159],[165,168],[152],[153],[175,177,181,182,183,184,185,186,201],[201,205],[175,177,178,180,187,201,203],[174,175,176,178,179,180,187,201,203,205,206,207],[177,178,201,205],[177,179,201,205],[175,177,178,180,187,201],[179,201,205],[176,178,180,201,203,205,206,208],[175,177,178,179,180,187,201,203],[175,176,177,178,179,180,187,201,203,205],[175,177,178,180,187,201,203,205],[180,201,202,205],[190,191,194,195,201,203,205,208],[153,201,202],[199],[161,167],[165],[162,166],[191,192,193,201],[191,201,205],[164],[68],[59,60],[57,58,59,61,62,66],[58,59],[67],[59],[57,58,59,62,63,64,65],[57,58,68],[71,78],[71,72,78],[79,80],[80,82],[69]],"referencedMap":[[86,1],[84,2],[161,2],[164,3],[163,2],[89,4],[85,1],[87,5],[88,1],[144,6],[146,7],[145,8],[147,9],[148,10],[151,11],[155,12],[156,13],[157,2],[158,2],[159,14],[160,15],[169,16],[170,2],[171,6],[153,17],[152,18],[172,2],[173,2],[90,19],[91,19],[93,20],[94,21],[95,22],[96,23],[97,24],[98,25],[99,26],[100,27],[101,28],[102,29],[103,29],[105,30],[104,31],[106,30],[107,32],[108,33],[92,34],[142,2],[109,35],[110,36],[111,37],[143,38],[112,39],[113,40],[114,41],[115,42],[116,43],[117,44],[118,45],[119,46],[120,47],[121,48],[122,48],[123,49],[124,50],[126,51],[125,52],[127,53],[128,54],[129,2],[130,55],[131,56],[132,57],[133,58],[134,59],[135,60],[136,61],[137,62],[138,63],[139,64],[140,65],[141,66],[187,67],[174,68],[181,69],[177,70],[175,71],[178,72],[182,73],[183,69],[180,74],[179,75],[184,76],[185,77],[186,78],[176,79],[188,2],[189,2],[195,80],[196,2],[150,2],[149,2],[154,81],[197,68],[198,2],[199,2],[200,82],[162,2],[168,83],[166,84],[167,85],[194,86],[191,6],[193,87],[192,6],[190,2],[165,88],[11,2],[12,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[4,2],[27,2],[24,2],[25,2],[26,2],[28,2],[29,2],[30,2],[5,2],[31,2],[32,2],[33,2],[34,2],[6,2],[35,2],[36,2],[37,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[8,2],[49,2],[46,2],[47,2],[48,2],[50,2],[9,2],[51,2],[52,2],[53,2],[54,2],[55,2],[1,2],[10,2],[56,2],[13,2],[69,89],[61,90],[67,91],[63,2],[64,2],[62,92],[65,89],[57,2],[58,2],[68,93],[60,94],[66,95],[59,96],[79,97],[78,98],[71,99],[75,100],[77,101],[73,97],[74,102],[72,97],[76,103],[70,2],[82,104],[83,105],[80,106],[81,107]],"exportedModulesMap":[[86,108],[164,109],[89,110],[85,108],[87,111],[88,108],[144,112],[146,113],[145,114],[147,115],[148,116],[151,117],[155,118],[156,119],[159,120],[160,121],[169,122],[171,112],[153,123],[152,124],[90,19],[91,19],[93,20],[94,21],[95,22],[96,23],[97,24],[98,25],[99,26],[100,27],[101,28],[102,29],[103,29],[105,30],[104,31],[106,30],[107,32],[108,33],[92,34],[142,2],[109,35],[110,36],[111,37],[143,38],[112,39],[113,40],[114,41],[115,42],[116,43],[117,44],[118,45],[119,46],[120,47],[121,48],[122,48],[123,49],[124,50],[126,51],[125,52],[127,53],[128,54],[129,2],[130,55],[131,56],[132,57],[133,58],[134,59],[135,60],[136,61],[137,62],[138,63],[139,64],[140,65],[141,66],[187,125],[174,126],[181,127],[177,128],[175,129],[178,130],[182,131],[183,127],[180,132],[179,133],[184,134],[185,135],[186,136],[176,137],[195,138],[154,139],[197,68],[200,140],[168,141],[166,142],[167,143],[194,144],[191,112],[193,145],[192,112],[165,146],[69,147],[61,148],[67,149],[62,150],[65,147],[68,151],[60,152],[66,153],[59,154],[79,155],[78,98],[71,99],[75,100],[77,101],[73,155],[74,102],[72,155],[76,156],[82,157],[83,158],[80,159],[81,157]],"semanticDiagnosticsPerFile":[86,84,161,164,163,89,85,87,88,144,146,145,147,148,151,155,156,157,158,159,160,169,170,171,153,152,172,173,90,91,93,94,95,96,97,98,99,100,101,102,103,105,104,106,107,108,92,142,109,110,111,143,112,113,114,115,116,117,118,119,120,121,122,123,124,126,125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,187,174,181,177,175,178,182,183,180,179,184,185,186,176,188,189,195,196,150,149,154,197,198,199,200,162,168,166,167,194,191,193,192,190,165,11,12,15,14,2,16,17,18,19,20,21,22,23,3,4,27,24,25,26,28,29,30,5,31,32,33,34,6,35,36,37,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,54,55,1,10,56,13,69,61,67,63,64,62,65,57,58,68,60,66,59,79,78,71,75,77,73,74,72,76,70,82,83,80,81],"latestChangedDtsFile":"./src/util.d.ts"},"version":"4.8.4"}
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@atproto/xrpc",
3
+ "version": "0.0.1",
4
+ "main": "src/index.ts",
5
+ "scripts": {
6
+ "prettier": "prettier --check src/",
7
+ "prettier:fix": "prettier --write src/",
8
+ "lint": "eslint . --ext .ts,.tsx",
9
+ "lint:fix": "yarn lint --fix",
10
+ "verify": "run-p prettier lint",
11
+ "verify:fix": "yarn prettier:fix && yarn lint:fix",
12
+ "build": "node ./build.js",
13
+ "postbuild": "tsc --build tsconfig.build.json"
14
+ },
15
+ "license": "MIT",
16
+ "dependencies": {
17
+ "@atproto/lexicon": "*",
18
+ "zod": "^3.14.2"
19
+ }
20
+ }
package/src/client.ts ADDED
@@ -0,0 +1,148 @@
1
+ import { Lexicons } from '@atproto/lexicon'
2
+ import {
3
+ getMethodSchemaHTTPMethod,
4
+ constructMethodCallUri,
5
+ constructMethodCallHeaders,
6
+ encodeMethodCallBody,
7
+ httpResponseCodeToEnum,
8
+ httpResponseBodyParse,
9
+ } from './util'
10
+ import {
11
+ FetchHandler,
12
+ FetchHandlerResponse,
13
+ Headers,
14
+ CallOptions,
15
+ QueryParams,
16
+ ResponseType,
17
+ errorResponseBody,
18
+ ErrorResponseBody,
19
+ XRPCResponse,
20
+ XRPCError,
21
+ } from './types'
22
+
23
+ export class Client {
24
+ fetch: FetchHandler = defaultFetchHandler
25
+ lex = new Lexicons()
26
+
27
+ // method calls
28
+ //
29
+
30
+ async call(
31
+ serviceUri: string | URL,
32
+ methodNsid: string,
33
+ params?: QueryParams,
34
+ data?: unknown,
35
+ opts?: CallOptions,
36
+ ) {
37
+ return this.service(serviceUri).call(methodNsid, params, data, opts)
38
+ }
39
+
40
+ service(serviceUri: string | URL) {
41
+ return new ServiceClient(this, serviceUri)
42
+ }
43
+
44
+ // schemas
45
+ // =
46
+
47
+ addLexicon(doc: unknown) {
48
+ this.lex.add(doc)
49
+ }
50
+
51
+ addLexicons(docs: unknown[]) {
52
+ for (const doc of docs) {
53
+ this.addLexicon(doc)
54
+ }
55
+ }
56
+
57
+ removeLexicon(uri: string) {
58
+ this.lex.remove(uri)
59
+ }
60
+ }
61
+
62
+ export class ServiceClient {
63
+ baseClient: Client
64
+ uri: URL
65
+ headers: Record<string, string> = {}
66
+
67
+ constructor(baseClient: Client, serviceUri: string | URL) {
68
+ this.baseClient = baseClient
69
+ this.uri = typeof serviceUri === 'string' ? new URL(serviceUri) : serviceUri
70
+ }
71
+
72
+ setHeader(key: string, value: string): void {
73
+ this.headers[key] = value
74
+ }
75
+
76
+ unsetHeader(key: string): void {
77
+ delete this.headers[key]
78
+ }
79
+
80
+ async call(
81
+ methodNsid: string,
82
+ params?: QueryParams,
83
+ data?: unknown,
84
+ opts?: CallOptions,
85
+ ) {
86
+ const def = this.baseClient.lex.getDefOrThrow(methodNsid)
87
+ if (!def || (def.type !== 'query' && def.type !== 'procedure')) {
88
+ throw new Error(
89
+ `Invalid lexicon: ${methodNsid}. Must be a query or procedure.`,
90
+ )
91
+ }
92
+
93
+ const httpMethod = getMethodSchemaHTTPMethod(def)
94
+ const httpUri = constructMethodCallUri(methodNsid, def, this.uri, params)
95
+ const httpHeaders = constructMethodCallHeaders(def, data, {
96
+ headers: {
97
+ ...this.headers,
98
+ ...opts?.headers,
99
+ },
100
+ encoding: opts?.encoding,
101
+ })
102
+
103
+ const res = await this.baseClient.fetch(
104
+ httpUri,
105
+ httpMethod,
106
+ httpHeaders,
107
+ data,
108
+ )
109
+
110
+ const resCode = httpResponseCodeToEnum(res.status)
111
+ if (resCode === ResponseType.Success) {
112
+ return new XRPCResponse(res.body, res.headers)
113
+ } else {
114
+ if (res.body && isErrorResponseBody(res.body)) {
115
+ throw new XRPCError(resCode, res.body.error, res.body.message)
116
+ } else {
117
+ throw new XRPCError(resCode)
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ async function defaultFetchHandler(
124
+ httpUri: string,
125
+ httpMethod: string,
126
+ httpHeaders: Headers,
127
+ httpReqBody: unknown,
128
+ ): Promise<FetchHandlerResponse> {
129
+ try {
130
+ const res = await fetch(httpUri, {
131
+ method: httpMethod,
132
+ headers: httpHeaders,
133
+ body: encodeMethodCallBody(httpHeaders, httpReqBody),
134
+ })
135
+ const resBody = await res.arrayBuffer()
136
+ return {
137
+ status: res.status,
138
+ headers: Object.fromEntries(res.headers.entries()),
139
+ body: httpResponseBodyParse(res.headers.get('content-type'), resBody),
140
+ }
141
+ } catch (e) {
142
+ throw new XRPCError(ResponseType.Unknown, String(e))
143
+ }
144
+ }
145
+
146
+ function isErrorResponseBody(v: unknown): v is ErrorResponseBody {
147
+ return errorResponseBody.safeParse(v).success
148
+ }
package/src/index.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './types'
2
+ export * from './client'
3
+
4
+ import { Client } from './client'
5
+ const defaultInst = new Client()
6
+ export default defaultInst
package/src/types.ts ADDED
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod'
2
+
3
+ export type QueryParams = Record<string, any>
4
+ export type Headers = Record<string, string>
5
+
6
+ export interface CallOptions {
7
+ encoding?: string
8
+ headers?: Headers
9
+ }
10
+
11
+ export interface FetchHandlerResponse {
12
+ status: number
13
+ headers: Headers
14
+ body: ArrayBuffer | undefined
15
+ }
16
+
17
+ export type FetchHandler = (
18
+ httpUri: string,
19
+ httpMethod: string,
20
+ httpHeaders: Headers,
21
+ httpReqBody: any,
22
+ ) => Promise<FetchHandlerResponse>
23
+
24
+ export const errorResponseBody = z.object({
25
+ error: z.string().optional(),
26
+ message: z.string().optional(),
27
+ })
28
+ export type ErrorResponseBody = z.infer<typeof errorResponseBody>
29
+
30
+ export enum ResponseType {
31
+ Unknown = 1,
32
+ InvalidResponse = 2,
33
+ Success = 200,
34
+ InvalidRequest = 400,
35
+ AuthRequired = 401,
36
+ Forbidden = 403,
37
+ XRPCNotSupported = 404,
38
+ PayloadTooLarge = 413,
39
+ RateLimitExceeded = 429,
40
+ InternalServerError = 500,
41
+ MethodNotImplemented = 501,
42
+ UpstreamFailure = 502,
43
+ NotEnoughResouces = 503,
44
+ UpstreamTimeout = 504,
45
+ }
46
+
47
+ export const ResponseTypeNames = {
48
+ [ResponseType.InvalidResponse]: 'InvalidResponse',
49
+ [ResponseType.Success]: 'Success',
50
+ [ResponseType.InvalidRequest]: 'InvalidRequest',
51
+ [ResponseType.AuthRequired]: 'AuthenticationRequired',
52
+ [ResponseType.Forbidden]: 'Forbidden',
53
+ [ResponseType.XRPCNotSupported]: 'XRPCNotSupported',
54
+ [ResponseType.PayloadTooLarge]: 'PayloadTooLarge',
55
+ [ResponseType.RateLimitExceeded]: 'RateLimitExceeded',
56
+ [ResponseType.InternalServerError]: 'InternalServerError',
57
+ [ResponseType.MethodNotImplemented]: 'MethodNotImplemented',
58
+ [ResponseType.UpstreamFailure]: 'UpstreamFailure',
59
+ [ResponseType.NotEnoughResouces]: 'NotEnoughResouces',
60
+ [ResponseType.UpstreamTimeout]: 'UpstreamTimeout',
61
+ }
62
+
63
+ export const ResponseTypeStrings = {
64
+ [ResponseType.InvalidResponse]: 'Invalid Response',
65
+ [ResponseType.Success]: 'Success',
66
+ [ResponseType.InvalidRequest]: 'Invalid Request',
67
+ [ResponseType.AuthRequired]: 'Authentication Required',
68
+ [ResponseType.Forbidden]: 'Forbidden',
69
+ [ResponseType.XRPCNotSupported]: 'XRPC Not Supported',
70
+ [ResponseType.PayloadTooLarge]: 'Payload Too Large',
71
+ [ResponseType.RateLimitExceeded]: 'Rate Limit Exceeded',
72
+ [ResponseType.InternalServerError]: 'Internal Server Error',
73
+ [ResponseType.MethodNotImplemented]: 'Method Not Implemented',
74
+ [ResponseType.UpstreamFailure]: 'Upstream Failure',
75
+ [ResponseType.NotEnoughResouces]: 'Not Enough Resouces',
76
+ [ResponseType.UpstreamTimeout]: 'Upstream Timeout',
77
+ }
78
+
79
+ export class XRPCResponse {
80
+ success = true
81
+
82
+ constructor(public data: any, public headers: Headers) {}
83
+ }
84
+
85
+ export class XRPCError extends Error {
86
+ success = false
87
+
88
+ constructor(
89
+ public status: ResponseType,
90
+ public error?: string,
91
+ message?: string,
92
+ ) {
93
+ super(message || error || ResponseTypeStrings[status])
94
+ if (!this.error) {
95
+ this.error = ResponseTypeNames[status]
96
+ }
97
+ }
98
+ }
package/src/util.ts ADDED
@@ -0,0 +1,150 @@
1
+ import { LexXrpcProcedure, LexXrpcQuery } from '@atproto/lexicon'
2
+ import {
3
+ CallOptions,
4
+ Headers,
5
+ QueryParams,
6
+ ResponseType,
7
+ XRPCError,
8
+ } from './types'
9
+
10
+ export function getMethodSchemaHTTPMethod(
11
+ schema: LexXrpcProcedure | LexXrpcQuery,
12
+ ) {
13
+ if (schema.type === 'procedure') {
14
+ return 'post'
15
+ }
16
+ return 'get'
17
+ }
18
+
19
+ export function constructMethodCallUri(
20
+ nsid: string,
21
+ schema: LexXrpcProcedure | LexXrpcQuery,
22
+ serviceUri: URL,
23
+ params?: QueryParams,
24
+ ): string {
25
+ const uri = new URL(serviceUri)
26
+ uri.pathname = `/xrpc/${nsid}`
27
+
28
+ // given parameters
29
+ if (params) {
30
+ for (const [key, value] of Object.entries(params)) {
31
+ const paramSchema = schema.parameters?.properties?.[key]
32
+ if (!paramSchema) {
33
+ throw new Error(`Invalid query parameter: ${key}`)
34
+ }
35
+ if (value !== undefined) {
36
+ uri.searchParams.set(key, encodeQueryParam(paramSchema.type, value))
37
+ }
38
+ }
39
+ }
40
+
41
+ return uri.toString()
42
+ }
43
+
44
+ export function encodeQueryParam(
45
+ type: 'string' | 'number' | 'integer' | 'boolean' | 'datetime' | 'unknown',
46
+ value: any,
47
+ ): string {
48
+ if (type === 'string' || type === 'unknown') {
49
+ return String(value)
50
+ }
51
+ if (type === 'number') {
52
+ return String(Number(value))
53
+ } else if (type === 'integer') {
54
+ return String(Number(value) | 0)
55
+ } else if (type === 'boolean') {
56
+ return value ? 'true' : 'false'
57
+ } else if (type === 'datetime') {
58
+ if (value instanceof Date) {
59
+ return value.toISOString()
60
+ }
61
+ return String(value)
62
+ }
63
+ throw new Error(`Unsupported query param type: ${type}`)
64
+ }
65
+
66
+ export function constructMethodCallHeaders(
67
+ schema: LexXrpcProcedure | LexXrpcQuery,
68
+ data?: any,
69
+ opts?: CallOptions,
70
+ ): Headers {
71
+ const headers: Headers = opts?.headers || {}
72
+ if (schema.type === 'procedure') {
73
+ if (opts?.encoding) {
74
+ headers['Content-Type'] = opts.encoding
75
+ }
76
+ if (data && typeof data === 'object') {
77
+ if (!headers['Content-Type']) {
78
+ headers['Content-Type'] = 'application/json'
79
+ }
80
+ }
81
+ }
82
+ return headers
83
+ }
84
+
85
+ export function encodeMethodCallBody(
86
+ headers: Headers,
87
+ data?: any,
88
+ ): ArrayBuffer | undefined {
89
+ if (!headers['Content-Type'] || typeof data === 'undefined') {
90
+ return undefined
91
+ }
92
+ if (data instanceof ArrayBuffer) {
93
+ return data
94
+ }
95
+ if (headers['Content-Type'].startsWith('text/')) {
96
+ return new TextEncoder().encode(data.toString())
97
+ }
98
+ if (headers['Content-Type'].startsWith('application/json')) {
99
+ return new TextEncoder().encode(JSON.stringify(data))
100
+ }
101
+ return data
102
+ }
103
+
104
+ export function httpResponseCodeToEnum(status: number): ResponseType {
105
+ let resCode: ResponseType
106
+ if (status in ResponseType) {
107
+ resCode = status
108
+ } else if (status >= 100 && status < 200) {
109
+ resCode = ResponseType.XRPCNotSupported
110
+ } else if (status >= 200 && status < 300) {
111
+ resCode = ResponseType.Success
112
+ } else if (status >= 300 && status < 400) {
113
+ resCode = ResponseType.XRPCNotSupported
114
+ } else if (status >= 400 && status < 500) {
115
+ resCode = ResponseType.InvalidRequest
116
+ } else {
117
+ resCode = ResponseType.InternalServerError
118
+ }
119
+ return resCode
120
+ }
121
+
122
+ export function httpResponseBodyParse(
123
+ mimeType: string | null,
124
+ data: ArrayBuffer | undefined,
125
+ ): any {
126
+ if (mimeType) {
127
+ if (mimeType.includes('application/json') && data?.byteLength) {
128
+ try {
129
+ const str = new TextDecoder().decode(data)
130
+ return JSON.parse(str)
131
+ } catch (e) {
132
+ throw new XRPCError(
133
+ ResponseType.InvalidResponse,
134
+ `Failed to parse response body: ${String(e)}`,
135
+ )
136
+ }
137
+ }
138
+ if (mimeType.startsWith('text/') && data?.byteLength) {
139
+ try {
140
+ return new TextDecoder().decode(data)
141
+ } catch (e) {
142
+ throw new XRPCError(
143
+ ResponseType.InvalidResponse,
144
+ `Failed to parse response body: ${String(e)}`,
145
+ )
146
+ }
147
+ }
148
+ }
149
+ return data
150
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["**/*.spec.ts", "**/*.test.ts"]
4
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist", // Your outDir,
5
+ "emitDeclarationOnly": true
6
+ },
7
+ "include": ["./src","__tests__/**/**.ts"],
8
+ "references": [
9
+ { "path": "../lexicon/tsconfig.build.json" }
10
+ ]
11
+ }