@atproto/xrpc 0.7.6 → 0.8.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,35 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.XrpcClient = void 0;
4
- const lexicon_1 = require("@atproto/lexicon");
5
- const fetch_handler_1 = require("./fetch-handler");
6
- const types_1 = require("./types");
7
- const util_1 = require("./util");
8
- class XrpcClient {
1
+ import { Lexicons, ValidationError } from '@atproto/lexicon';
2
+ import { buildFetchHandler, } from './fetch-handler.js';
3
+ import { ResponseType, XRPCError, XRPCInvalidResponseError, XRPCResponse, httpResponseCodeToEnum, } from './types.js';
4
+ import { combineHeaders, constructMethodCallHeaders, constructMethodCallUrl, encodeMethodCallBody, getMethodSchemaHTTPMethod, httpResponseBodyParse, isErrorResponseBody, } from './util.js';
5
+ export class XrpcClient {
9
6
  constructor(fetchHandlerOpts,
10
7
  // "Lexicons" is redundant here (because that class implements
11
8
  // "Iterable<LexiconDoc>") but we keep it for explicitness:
12
9
  lex) {
13
- Object.defineProperty(this, "fetchHandler", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: void 0
18
- });
19
- Object.defineProperty(this, "headers", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: new Map()
24
- });
25
- Object.defineProperty(this, "lex", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: void 0
30
- });
31
- this.fetchHandler = (0, fetch_handler_1.buildFetchHandler)(fetchHandlerOpts);
32
- this.lex = lex instanceof lexicon_1.Lexicons ? lex : new lexicon_1.Lexicons(lex);
10
+ this.headers = new Map();
11
+ this.fetchHandler = buildFetchHandler(fetchHandlerOpts);
12
+ this.lex = lex instanceof Lexicons ? lex : new Lexicons(lex);
33
13
  }
34
14
  setHeader(key, value) {
35
15
  this.headers.set(key.toLowerCase(), value);
@@ -50,15 +30,15 @@ class XrpcClient {
50
30
  // if (data !== undefined) {
51
31
  // this.lex.assertValidXrpcInput(methodNsid, data)
52
32
  // }
53
- const reqUrl = (0, util_1.constructMethodCallUrl)(methodNsid, def, params);
54
- const reqMethod = (0, util_1.getMethodSchemaHTTPMethod)(def);
55
- const reqHeaders = (0, util_1.constructMethodCallHeaders)(def, data, opts);
56
- const reqBody = (0, util_1.encodeMethodCallBody)(reqHeaders, data);
33
+ const reqUrl = constructMethodCallUrl(methodNsid, def, params);
34
+ const reqMethod = getMethodSchemaHTTPMethod(def);
35
+ const reqHeaders = constructMethodCallHeaders(def, data, opts);
36
+ const reqBody = encodeMethodCallBody(reqHeaders, data);
57
37
  // The duplex field is required for streaming bodies, but not yet reflected
58
38
  // anywhere in docs or types. See whatwg/fetch#1438, nodejs/node#46221.
59
39
  const init = {
60
40
  method: reqMethod,
61
- headers: (0, util_1.combineHeaders)(reqHeaders, this.headers),
41
+ headers: combineHeaders(reqHeaders, this.headers),
62
42
  body: reqBody,
63
43
  duplex: 'half',
64
44
  redirect: 'follow',
@@ -69,27 +49,26 @@ class XrpcClient {
69
49
  const resStatus = response.status;
70
50
  const resHeaders = Object.fromEntries(response.headers.entries());
71
51
  const resBodyBytes = await response.arrayBuffer();
72
- const resBody = (0, util_1.httpResponseBodyParse)(response.headers.get('content-type'), resBodyBytes);
73
- const resCode = (0, types_1.httpResponseCodeToEnum)(resStatus);
74
- if (resCode !== types_1.ResponseType.Success) {
75
- const { error = undefined, message = undefined } = resBody && (0, util_1.isErrorResponseBody)(resBody) ? resBody : {};
76
- throw new types_1.XRPCError(resCode, error, message, resHeaders);
52
+ const resBody = httpResponseBodyParse(response.headers.get('content-type'), resBodyBytes);
53
+ const resCode = httpResponseCodeToEnum(resStatus);
54
+ if (resCode !== ResponseType.Success) {
55
+ const { error = undefined, message = undefined } = resBody && isErrorResponseBody(resBody) ? resBody : {};
56
+ throw new XRPCError(resCode, error, message, resHeaders);
77
57
  }
78
58
  try {
79
59
  this.lex.assertValidXrpcOutput(methodNsid, resBody);
80
60
  }
81
61
  catch (e) {
82
- if (e instanceof lexicon_1.ValidationError) {
83
- throw new types_1.XRPCInvalidResponseError(methodNsid, e, resBody);
62
+ if (e instanceof ValidationError) {
63
+ throw new XRPCInvalidResponseError(methodNsid, e, resBody);
84
64
  }
85
65
  throw e;
86
66
  }
87
- return new types_1.XRPCResponse(resBody, resHeaders);
67
+ return new XRPCResponse(resBody, resHeaders);
88
68
  }
89
69
  catch (err) {
90
- throw types_1.XRPCError.from(err);
70
+ throw XRPCError.from(err);
91
71
  }
92
72
  }
93
73
  }
94
- exports.XrpcClient = XrpcClient;
95
74
  //# sourceMappingURL=xrpc-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xrpc-client.js","sourceRoot":"","sources":["../src/xrpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { LexiconDoc, Lexicons, ValidationError } from '@atproto/lexicon'\nimport {\n FetchHandler,\n FetchHandlerObject,\n FetchHandlerOptions,\n buildFetchHandler,\n} from './fetch-handler'\nimport {\n CallOptions,\n Gettable,\n QueryParams,\n ResponseType,\n XRPCError,\n XRPCInvalidResponseError,\n XRPCResponse,\n httpResponseCodeToEnum,\n} from './types'\nimport {\n combineHeaders,\n constructMethodCallHeaders,\n constructMethodCallUrl,\n encodeMethodCallBody,\n getMethodSchemaHTTPMethod,\n httpResponseBodyParse,\n isErrorResponseBody,\n} from './util'\n\nexport class XrpcClient {\n readonly fetchHandler: FetchHandler\n readonly headers = new Map<string, Gettable<null | string>>()\n readonly lex: Lexicons\n\n constructor(\n fetchHandlerOpts: FetchHandler | FetchHandlerObject | FetchHandlerOptions,\n // \"Lexicons\" is redundant here (because that class implements\n // \"Iterable<LexiconDoc>\") but we keep it for explicitness:\n lex: Lexicons | Iterable<LexiconDoc>,\n ) {\n this.fetchHandler = buildFetchHandler(fetchHandlerOpts)\n\n this.lex = lex instanceof Lexicons ? lex : new Lexicons(lex)\n }\n\n setHeader(key: string, value: Gettable<null | string>): void {\n this.headers.set(key.toLowerCase(), value)\n }\n\n unsetHeader(key: string): void {\n this.headers.delete(key.toLowerCase())\n }\n\n clearHeaders(): void {\n this.headers.clear()\n }\n\n async call(\n methodNsid: string,\n params?: QueryParams,\n data?: unknown,\n opts?: CallOptions,\n ): Promise<XRPCResponse> {\n const def = this.lex.getDefOrThrow(methodNsid)\n if (!def || (def.type !== 'query' && def.type !== 'procedure')) {\n throw new TypeError(\n `Invalid lexicon: ${methodNsid}. Must be a query or procedure.`,\n )\n }\n\n // @TODO: should we validate the params and data here?\n // this.lex.assertValidXrpcParams(methodNsid, params)\n // if (data !== undefined) {\n // this.lex.assertValidXrpcInput(methodNsid, data)\n // }\n\n const reqUrl = constructMethodCallUrl(methodNsid, def, params)\n const reqMethod = getMethodSchemaHTTPMethod(def)\n const reqHeaders = constructMethodCallHeaders(def, data, opts)\n const reqBody = encodeMethodCallBody(reqHeaders, data)\n\n // The duplex field is required for streaming bodies, but not yet reflected\n // anywhere in docs or types. See whatwg/fetch#1438, nodejs/node#46221.\n const init: RequestInit & { duplex: 'half' } = {\n method: reqMethod,\n headers: combineHeaders(reqHeaders, this.headers),\n body: reqBody,\n duplex: 'half',\n redirect: 'follow',\n signal: opts?.signal,\n }\n\n try {\n const response = await this.fetchHandler.call(undefined, reqUrl, init)\n\n const resStatus = response.status\n const resHeaders = Object.fromEntries(response.headers.entries())\n const resBodyBytes = await response.arrayBuffer()\n const resBody = httpResponseBodyParse(\n response.headers.get('content-type'),\n resBodyBytes,\n )\n\n const resCode = httpResponseCodeToEnum(resStatus)\n if (resCode !== ResponseType.Success) {\n const { error = undefined, message = undefined } =\n resBody && isErrorResponseBody(resBody) ? resBody : {}\n throw new XRPCError(resCode, error, message, resHeaders)\n }\n\n try {\n this.lex.assertValidXrpcOutput(methodNsid, resBody)\n } catch (e: unknown) {\n if (e instanceof ValidationError) {\n throw new XRPCInvalidResponseError(methodNsid, e, resBody)\n }\n\n throw e\n }\n\n return new XRPCResponse(resBody, resHeaders)\n } catch (err) {\n throw XRPCError.from(err)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"xrpc-client.js","sourceRoot":"","sources":["../src/xrpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { LexiconDoc, Lexicons, ValidationError } from '@atproto/lexicon'\nimport {\n FetchHandler,\n FetchHandlerObject,\n FetchHandlerOptions,\n buildFetchHandler,\n} from './fetch-handler.js'\nimport {\n CallOptions,\n Gettable,\n QueryParams,\n ResponseType,\n XRPCError,\n XRPCInvalidResponseError,\n XRPCResponse,\n httpResponseCodeToEnum,\n} from './types.js'\nimport {\n combineHeaders,\n constructMethodCallHeaders,\n constructMethodCallUrl,\n encodeMethodCallBody,\n getMethodSchemaHTTPMethod,\n httpResponseBodyParse,\n isErrorResponseBody,\n} from './util.js'\n\nexport class XrpcClient {\n readonly fetchHandler: FetchHandler\n readonly headers = new Map<string, Gettable<null | string>>()\n readonly lex: Lexicons\n\n constructor(\n fetchHandlerOpts: FetchHandler | FetchHandlerObject | FetchHandlerOptions,\n // \"Lexicons\" is redundant here (because that class implements\n // \"Iterable<LexiconDoc>\") but we keep it for explicitness:\n lex: Lexicons | Iterable<LexiconDoc>,\n ) {\n this.fetchHandler = buildFetchHandler(fetchHandlerOpts)\n\n this.lex = lex instanceof Lexicons ? lex : new Lexicons(lex)\n }\n\n setHeader(key: string, value: Gettable<null | string>): void {\n this.headers.set(key.toLowerCase(), value)\n }\n\n unsetHeader(key: string): void {\n this.headers.delete(key.toLowerCase())\n }\n\n clearHeaders(): void {\n this.headers.clear()\n }\n\n async call(\n methodNsid: string,\n params?: QueryParams,\n data?: unknown,\n opts?: CallOptions,\n ): Promise<XRPCResponse> {\n const def = this.lex.getDefOrThrow(methodNsid)\n if (!def || (def.type !== 'query' && def.type !== 'procedure')) {\n throw new TypeError(\n `Invalid lexicon: ${methodNsid}. Must be a query or procedure.`,\n )\n }\n\n // @TODO: should we validate the params and data here?\n // this.lex.assertValidXrpcParams(methodNsid, params)\n // if (data !== undefined) {\n // this.lex.assertValidXrpcInput(methodNsid, data)\n // }\n\n const reqUrl = constructMethodCallUrl(methodNsid, def, params)\n const reqMethod = getMethodSchemaHTTPMethod(def)\n const reqHeaders = constructMethodCallHeaders(def, data, opts)\n const reqBody = encodeMethodCallBody(reqHeaders, data)\n\n // The duplex field is required for streaming bodies, but not yet reflected\n // anywhere in docs or types. See whatwg/fetch#1438, nodejs/node#46221.\n const init: RequestInit & { duplex: 'half' } = {\n method: reqMethod,\n headers: combineHeaders(reqHeaders, this.headers),\n body: reqBody,\n duplex: 'half',\n redirect: 'follow',\n signal: opts?.signal,\n }\n\n try {\n const response = await this.fetchHandler.call(undefined, reqUrl, init)\n\n const resStatus = response.status\n const resHeaders = Object.fromEntries(response.headers.entries())\n const resBodyBytes = await response.arrayBuffer()\n const resBody = httpResponseBodyParse(\n response.headers.get('content-type'),\n resBodyBytes,\n )\n\n const resCode = httpResponseCodeToEnum(resStatus)\n if (resCode !== ResponseType.Success) {\n const { error = undefined, message = undefined } =\n resBody && isErrorResponseBody(resBody) ? resBody : {}\n throw new XRPCError(resCode, error, message, resHeaders)\n }\n\n try {\n this.lex.assertValidXrpcOutput(methodNsid, resBody)\n } catch (e: unknown) {\n if (e instanceof ValidationError) {\n throw new XRPCInvalidResponseError(methodNsid, e, resBody)\n }\n\n throw e\n }\n\n return new XRPCResponse(resBody, resHeaders)\n } catch (err) {\n throw XRPCError.from(err)\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@atproto/xrpc",
3
- "version": "0.7.6",
3
+ "version": "0.8.0-next.0",
4
+ "engines": {
5
+ "node": ">=22"
6
+ },
4
7
  "license": "MIT",
5
8
  "description": "atproto HTTP API (XRPC) client library",
6
9
  "keywords": [
@@ -13,14 +16,19 @@
13
16
  "url": "https://github.com/bluesky-social/atproto",
14
17
  "directory": "packages/xrpc"
15
18
  },
16
- "main": "dist/index.js",
17
- "types": "dist/index.d.ts",
18
19
  "dependencies": {
19
20
  "zod": "^3.23.8",
20
- "@atproto/lexicon": "^0.5.2"
21
+ "@atproto/lexicon": "^0.7.0-next.0"
21
22
  },
22
23
  "devDependencies": {
23
- "typescript": "^5.6.3"
24
+ "typescript": "^6.0.3"
25
+ },
26
+ "type": "module",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.js"
31
+ }
24
32
  },
25
33
  "scripts": {
26
34
  "build": "tsc --build tsconfig.build.json"
package/src/client.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LexiconDoc, Lexicons } from '@atproto/lexicon'
2
- import { CallOptions, QueryParams } from './types'
3
- import { combineHeaders } from './util'
4
- import { XrpcClient } from './xrpc-client'
2
+ import { CallOptions, QueryParams } from './types.js'
3
+ import { combineHeaders } from './util.js'
4
+ import { XrpcClient } from './xrpc-client.js'
5
5
 
6
6
  /** @deprecated Use {@link XrpcClient} instead */
7
7
  export class Client {
@@ -1,5 +1,5 @@
1
- import { Gettable } from './types'
2
- import { combineHeaders } from './util'
1
+ import { Gettable } from './types.js'
2
+ import { combineHeaders } from './util.js'
3
3
 
4
4
  export type FetchHandler = (
5
5
  this: void,
package/src/index.ts CHANGED
@@ -1,12 +1,10 @@
1
- export * from './client'
2
- export * from './fetch-handler'
3
- export * from './types'
4
- export * from './util'
5
- export * from './xrpc-client'
1
+ export * from './client.js'
2
+ export * from './fetch-handler.js'
3
+ export * from './types.js'
4
+ export * from './util.js'
5
+ export * from './xrpc-client.js'
6
6
 
7
- /* eslint-disable import/no-deprecated */
8
- import { Client } from './client'
7
+ import { Client } from './client.js'
9
8
  /** @deprecated create a local {@link XrpcClient} instance instead */
10
9
  const defaultInst = new Client()
11
10
  export default defaultInst
12
- /* eslint-enable import/no-deprecated */
package/src/util.ts CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  ResponseType,
13
13
  XRPCError,
14
14
  errorResponseBody,
15
- } from './types'
15
+ } from './types.js'
16
16
 
17
17
  const ReadableStream =
18
18
  globalThis.ReadableStream ||
@@ -4,7 +4,7 @@ import {
4
4
  FetchHandlerObject,
5
5
  FetchHandlerOptions,
6
6
  buildFetchHandler,
7
- } from './fetch-handler'
7
+ } from './fetch-handler.js'
8
8
  import {
9
9
  CallOptions,
10
10
  Gettable,
@@ -14,7 +14,7 @@ import {
14
14
  XRPCInvalidResponseError,
15
15
  XRPCResponse,
16
16
  httpResponseCodeToEnum,
17
- } from './types'
17
+ } from './types.js'
18
18
  import {
19
19
  combineHeaders,
20
20
  constructMethodCallHeaders,
@@ -23,7 +23,7 @@ import {
23
23
  getMethodSchemaHTTPMethod,
24
24
  httpResponseBodyParse,
25
25
  isErrorResponseBody,
26
- } from './util'
26
+ } from './util.js'
27
27
 
28
28
  export class XrpcClient {
29
29
  readonly fetchHandler: FetchHandler
@@ -1 +1 @@
1
- {"root":["./src/client.ts","./src/fetch-handler.ts","./src/index.ts","./src/types.ts","./src/util.ts","./src/xrpc-client.ts"],"version":"5.8.2"}
1
+ {"root":["./src/client.ts","./src/fetch-handler.ts","./src/index.ts","./src/types.ts","./src/util.ts","./src/xrpc-client.ts"],"version":"6.0.3"}