@venizia/ignis-connectors 0.2.1-0 → 0.2.1-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.
@@ -8,6 +8,12 @@ export interface IAuthToken {
8
8
  export type TAuthTokenResolver = () => IAuthToken | undefined;
9
9
  /** Not `Record` alone: header names are case-insensitive, and an object merge appends two spellings. */
10
10
  export type THttpHeaders = Headers | Array<[string, string]> | Record<string, string>;
11
+ /**
12
+ * A request body. A plain object or array goes out as JSON; a string, `Blob`, `FormData`,
13
+ * `URLSearchParams`, `ArrayBuffer` or typed array goes out as it is. Never a stream: the 401 retry
14
+ * sends the same body twice.
15
+ */
16
+ export type THttpBody = string | object;
11
17
  export interface IHttpDataSourceSettings {
12
18
  baseUrl: string;
13
19
  /** Sent on every request. `x-request-count` is refused - the connector owns it. */
@@ -28,6 +34,11 @@ export interface IHttpReadResult<R> {
28
34
  skip?: number;
29
35
  dataLength: number;
30
36
  }
37
+ /** What a write answers: the rows the server returned, and its `x-response-count`. */
38
+ export interface IHttpWriteResult<R> {
39
+ data: R;
40
+ count: number;
41
+ }
31
42
  export type THttpQuery<E extends object> = {
32
43
  filter?: TFilter<E>;
33
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/http/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kCAAkC;AAClC,MAAM,MAAM,kBAAkB,GAAG,MAAM,UAAU,GAAG,SAAS,CAAC;AAE9D,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAEhB,mFAAmF;IACnF,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IAEvC,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACnD;AAED,wGAAwG;AACxG,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/http/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kCAAkC;AAClC,MAAM,MAAM,kBAAkB,GAAG,MAAM,UAAU,GAAG,SAAS,CAAC;AAE9D,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAEhB,mFAAmF;IACnF,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IAEvC,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACnD;AAED,wGAAwG;AACxG,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { AbstractDataSource } from '@venizia/ignis-kernel/repository';
2
2
  import { NodeFetchNetworkRequest } from '@venizia/ignis-helpers/core';
3
- import type { IAuthToken, IHttpDataSourceSettings, IHttpReadResult } from './common/types';
3
+ import type { IAuthToken, IHttpDataSourceSettings, IHttpReadResult, IHttpWriteResult, THttpBody, THttpHeaders } from './common/types';
4
4
  /** Reads an IGNIS REST server through the repository contract. Targets IGNIS, not any REST API. */
5
5
  export declare class HttpDataSource extends AbstractDataSource<IHttpDataSourceSettings> {
6
6
  name: string;
@@ -21,22 +21,46 @@ export declare class HttpDataSource extends AbstractDataSource<IHttpDataSourceSe
21
21
  protected resolveAuthToken(): IAuthToken | undefined;
22
22
  protected buildHeaders(opts: {
23
23
  token?: IAuthToken;
24
+ requestHeaders?: Array<[string, string]>;
25
+ isJsonBody?: boolean;
24
26
  }): Headers;
25
27
  buildUrl(opts: {
26
28
  paths: Array<string>;
27
29
  query?: Record<string, unknown>;
28
30
  }): string;
29
- /** The raw `Response` - for what is not rows, like an export. Auth and the 401 retry apply. */
31
+ /**
32
+ * The raw `Response`, on any method - for what the repository verbs do not cover, like an export
33
+ * or a PUT to a hand-written route. Auth and the 401 retry apply; the retry resends the same body.
34
+ */
30
35
  request(opts: {
31
36
  paths: Array<string>;
32
37
  query?: Record<string, unknown>;
33
38
  method?: string;
39
+ body?: THttpBody;
40
+ headers?: THttpHeaders;
34
41
  }): Promise<Response>;
42
+ /** A failed response as an error carrying the server's own status, message and message code. */
43
+ protected toResponseError(opts: {
44
+ response: Response;
45
+ url: string;
46
+ verb: string;
47
+ }): Promise<import("@venizia/ignis-helpers/core").ApplicationError>;
35
48
  /** Rows plus the total from `Content-Range`, reported absent when the header is. */
36
49
  read<R>(opts: {
37
50
  paths: Array<string>;
38
51
  query?: Record<string, unknown>;
39
52
  shape?: 'list' | 'one';
40
53
  }): Promise<IHttpReadResult<R>>;
54
+ /**
55
+ * A write, and what it answered: the body as the rows, the count from `x-response-count`. The
56
+ * connector asks for bare rows, so an IGNIS write answers the row or the rows, never the envelope.
57
+ */
58
+ write<R>(opts: {
59
+ paths: Array<string>;
60
+ query?: Record<string, unknown>;
61
+ method: string;
62
+ body?: THttpBody;
63
+ headers?: THttpHeaders;
64
+ }): Promise<IHttpWriteResult<R>>;
41
65
  }
42
66
  //# sourceMappingURL=datasource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/http/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EACV,UAAU,EACV,uBAAuB,EACvB,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AAqGxB,mGAAmG;AACnG,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,uBAAuB,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAS,KAAK,CAAC;IAE9B,SAAS,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC3C,uFAAuF;IACvF,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,sGAAsG;IACtG,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBAEzB,IAAI,EAAE,uBAAuB,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAuBvD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvB,eAAe;;;IAIxB,SAAS,CAAC,gBAAgB,IAAI,UAAU,GAAG,SAAS;IAIpD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO;IAqB7D,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,MAAM;IA2BjF,+FAA+F;IACzF,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuBrB,oFAAoF;IAC9E,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;KACxB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAwBhC"}
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/http/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EACV,UAAU,EACV,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,YAAY,EACb,MAAM,gBAAgB,CAAC;AAyLxB,mGAAmG;AACnG,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,uBAAuB,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAS,KAAK,CAAC;IAE9B,SAAS,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC3C,uFAAuF;IACvF,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,sGAAsG;IACtG,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBAEzB,IAAI,EAAE,uBAAuB,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBvD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvB,eAAe;;;IAIxB,SAAS,CAAC,gBAAgB,IAAI,UAAU,GAAG,SAAS;IAIpD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE;QAC3B,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACzC,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO;IA8BX,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,MAAM;IA2BjF;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,YAAY,CAAC;KACxB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgCrB,gGAAgG;cAChF,eAAe,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAevF,oFAAoF;IAC9E,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;KACxB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAsB/B;;;OAGG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE;QACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,YAAY,CAAC;KACxB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAyBjC"}
@@ -80,6 +80,69 @@ const toHeaderEntries = (opts) => {
80
80
  }
81
81
  return [...merged.entries()];
82
82
  };
83
+ /**
84
+ * The body as `fetch` takes it. Anything `fetch` already sends as a body passes through untouched,
85
+ * so `FormData` keeps the multipart boundary its own content-type carries; any other object is JSON.
86
+ * Serialised ONCE, so the 401 retry sends the same bytes.
87
+ */
88
+ const toRequestBody = (opts) => {
89
+ const { body } = opts;
90
+ if (body === undefined) {
91
+ return { payload: undefined, isJson: false };
92
+ }
93
+ const isSentAsIs = typeof body === 'string' ||
94
+ body instanceof Blob ||
95
+ body instanceof FormData ||
96
+ body instanceof URLSearchParams ||
97
+ body instanceof ArrayBuffer;
98
+ if (isSentAsIs) {
99
+ return { payload: body, isJson: false };
100
+ }
101
+ // A typed array may sit on a SharedArrayBuffer, which `fetch` refuses; a Blob copy never does.
102
+ if (ArrayBuffer.isView(body)) {
103
+ return {
104
+ payload: new Blob([new Uint8Array(body.buffer, body.byteOffset, body.byteLength).slice()]),
105
+ isJson: false,
106
+ };
107
+ }
108
+ return { payload: JSON.stringify(body), isJson: true };
109
+ };
110
+ /**
111
+ * The IGNIS error envelope - `{ message, normalized: { code }, requestId }` - read off a failed
112
+ * response. A body that is not that envelope yields nothing, and the status alone still describes it.
113
+ */
114
+ const readServerError = async (opts) => {
115
+ const text = await opts.response.text().catch(() => '');
116
+ let parsed;
117
+ try {
118
+ parsed = text ? JSON.parse(text) : undefined;
119
+ }
120
+ catch {
121
+ return {};
122
+ }
123
+ if (!parsed || typeof parsed !== 'object') {
124
+ return {};
125
+ }
126
+ const message = Reflect.get(parsed, 'message');
127
+ const requestId = Reflect.get(parsed, 'requestId');
128
+ const normalized = Reflect.get(parsed, 'normalized');
129
+ const code = normalized && typeof normalized === 'object' ? Reflect.get(normalized, 'code') : undefined;
130
+ return {
131
+ message: typeof message === 'string' ? message : undefined,
132
+ code: typeof code === 'string' ? code : undefined,
133
+ requestId: typeof requestId === 'string' ? requestId : undefined,
134
+ };
135
+ };
136
+ /** The connector always sends `x-request-count: false`; a caller header carrying it would contradict that. */
137
+ const assertNoRequestCountHeader = (opts) => {
138
+ const { entries, name } = opts;
139
+ if (entries.some(([headerName]) => headerName === common_1.HTTP.Headers.REQUEST_COUNT_DATA)) {
140
+ throw (0, core_2.getError)({
141
+ statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
142
+ message: `[${name}] ${common_1.HTTP.Headers.REQUEST_COUNT_DATA} is owned by HttpDataSource and always sent as false: rows come back bare, the total in Content-Range.`,
143
+ });
144
+ }
145
+ };
83
146
  /** Reads an IGNIS REST server through the repository contract. Targets IGNIS, not any REST API. */
84
147
  class HttpDataSource extends repository_1.AbstractDataSource {
85
148
  constructor(opts) {
@@ -87,12 +150,7 @@ class HttpDataSource extends repository_1.AbstractDataSource {
87
150
  this.schema = {};
88
151
  const { name = 'http', ...settings } = opts;
89
152
  const configured = toHeaderEntries({ headers: settings.headers });
90
- if (configured.some(([headerName]) => headerName === common_1.HTTP.Headers.REQUEST_COUNT_DATA)) {
91
- throw (0, core_2.getError)({
92
- statusCode: common_1.HTTP.ResultCodes.RS_5.InternalServerError,
93
- message: `[${name}] ${common_1.HTTP.Headers.REQUEST_COUNT_DATA} is owned by HttpDataSource and always sent as false: rows come back bare, the total in Content-Range.`,
94
- });
95
- }
153
+ assertNoRequestCountHeader({ entries: configured, name });
96
154
  this.configuredHeaders = configured;
97
155
  this.name = name;
98
156
  this.settings = settings;
@@ -110,8 +168,15 @@ class HttpDataSource extends repository_1.AbstractDataSource {
110
168
  return this.settings.authToken ?? this.settings.authTokenResolver?.();
111
169
  }
112
170
  buildHeaders(opts) {
113
- const { token } = opts;
171
+ const { token, requestHeaders, isJsonBody } = opts;
114
172
  const headers = new Headers(this.configuredHeaders);
173
+ // A request's own headers win over the configured ones; the connector's below win over both.
174
+ for (const [name, value] of requestHeaders ?? []) {
175
+ headers.set(name, value);
176
+ }
177
+ if (isJsonBody && !headers.has(common_1.HTTP.Headers.CONTENT_TYPE)) {
178
+ headers.set(common_1.HTTP.Headers.CONTENT_TYPE, 'application/json');
179
+ }
115
180
  // Set last: under the envelope a record read answers `{ count, data }`.
116
181
  headers.set(common_1.HTTP.Headers.REQUEST_COUNT_DATA, 'false');
117
182
  if (!token) {
@@ -145,13 +210,24 @@ class HttpDataSource extends repository_1.AbstractDataSource {
145
210
  }
146
211
  return url.toString();
147
212
  }
148
- /** The raw `Response` - for what is not rows, like an export. Auth and the 401 retry apply. */
213
+ /**
214
+ * The raw `Response`, on any method - for what the repository verbs do not cover, like an export
215
+ * or a PUT to a hand-written route. Auth and the 401 retry apply; the retry resends the same body.
216
+ */
149
217
  async request(opts) {
218
+ const requestHeaders = toHeaderEntries({ headers: opts.headers });
219
+ assertNoRequestCountHeader({ entries: requestHeaders, name: this.name });
150
220
  const url = this.buildUrl(opts);
221
+ const { payload, isJson } = toRequestBody({ body: opts.body });
151
222
  const send = () => this.network.getNetworkService().send({
152
223
  url,
153
224
  method: (opts.method ?? common_1.HTTP.Methods.GET),
154
- headers: this.buildHeaders({ token: this.resolveAuthToken() }),
225
+ body: payload,
226
+ headers: this.buildHeaders({
227
+ token: this.resolveAuthToken(),
228
+ requestHeaders,
229
+ isJsonBody: isJson,
230
+ }),
155
231
  });
156
232
  let response = await send();
157
233
  if (response.status === common_1.HTTP.ResultCodes.RS_4.Unauthorized && this.settings.onUnauthorized) {
@@ -162,14 +238,25 @@ class HttpDataSource extends repository_1.AbstractDataSource {
162
238
  }
163
239
  return response;
164
240
  }
241
+ /** A failed response as an error carrying the server's own status, message and message code. */
242
+ async toResponseError(opts) {
243
+ const { response, url, verb } = opts;
244
+ const server = await readServerError({ response });
245
+ const described = describeUrl({ url, status: response.status });
246
+ return (0, core_2.getError)({
247
+ statusCode: response.status,
248
+ message: server.message
249
+ ? `[${this.name}][${verb}] ${response.status} | ${described} | ${server.message}`
250
+ : `[${this.name}][${verb}] ${response.status} | ${described}`,
251
+ messageCode: server.code,
252
+ extra: server.requestId ? { requestId: server.requestId } : undefined,
253
+ });
254
+ }
165
255
  /** Rows plus the total from `Content-Range`, reported absent when the header is. */
166
256
  async read(opts) {
167
257
  const response = await this.request(opts);
168
258
  if (!response.ok) {
169
- throw (0, core_2.getError)({
170
- statusCode: response.status,
171
- message: `[${this.name}][read] ${response.status} | ${describeUrl({ url: this.buildUrl(opts), status: response.status })}`,
172
- });
259
+ throw await this.toResponseError({ response, url: this.buildUrl(opts), verb: 'read' });
173
260
  }
174
261
  const body = await response.json();
175
262
  const contentRange = response.headers.get(common_1.HTTP.Headers.CONTENT_RANGE) ?? undefined;
@@ -184,6 +271,31 @@ class HttpDataSource extends repository_1.AbstractDataSource {
184
271
  dataLength: Array.isArray(data) ? data.length : 1,
185
272
  };
186
273
  }
274
+ /**
275
+ * A write, and what it answered: the body as the rows, the count from `x-response-count`. The
276
+ * connector asks for bare rows, so an IGNIS write answers the row or the rows, never the envelope.
277
+ */
278
+ async write(opts) {
279
+ const response = await this.request(opts);
280
+ if (!response.ok) {
281
+ throw await this.toResponseError({ response, url: this.buildUrl(opts), verb: 'write' });
282
+ }
283
+ // A 204, or a route that answers nothing, has no body to parse.
284
+ const text = await response.text();
285
+ const data = text ? JSON.parse(text) : null;
286
+ const countHeader = response.headers.get(common_1.HTTP.Headers.RESPONSE_COUNT_DATA);
287
+ const counted = countHeader === null ? Number.NaN : Number(countHeader);
288
+ return {
289
+ data,
290
+ count: Number.isFinite(counted)
291
+ ? counted
292
+ : Array.isArray(data)
293
+ ? data.length
294
+ : data === null
295
+ ? 0
296
+ : 1,
297
+ };
298
+ }
187
299
  }
188
300
  exports.HttpDataSource = HttpDataSource;
189
301
  //# sourceMappingURL=datasource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/http/datasource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../../src/http/datasource.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { AbstractEntity } from '@venizia/ignis-kernel/repository';
2
- import type { IReadableRepository, TCount, TDataWithRange, TFilter, TSchemaType, TWhere } from '@venizia/ignis-kernel/repository';
3
1
  import type { AnyType } from '@venizia/ignis-helpers/common';
2
+ import type { IDeletableRepository, IReadableRepository, IUpdatableRepository, TCount, TDataWithRange, TFilter, TSchemaType, TWhere } from '@venizia/ignis-kernel/repository';
3
+ import { AbstractEntity } from '@venizia/ignis-kernel/repository';
4
+ import type { IHttpWriteResult } from './common/types';
4
5
  import type { HttpDataSource } from './datasource';
5
6
  /** A remote resource has a name but no local schema. */
6
7
  export declare class HttpResourceEntity extends AbstractEntity {
@@ -8,8 +9,12 @@ export declare class HttpResourceEntity extends AbstractEntity {
8
9
  type: TSchemaType;
9
10
  }): T;
10
11
  }
11
- /** Read access to one remote resource, in the `@venizia/ignis-filter` vocabulary. */
12
- export declare class HttpRepository<E extends object = AnyType> implements IReadableRepository<E, {}> {
12
+ /**
13
+ * One remote resource, read and written through the IGNIS CRUD routes, in the `@venizia/ignis-filter`
14
+ * vocabulary. `P` is what a write sends - a partial row by default, since the server fills ids and
15
+ * defaults. There is no `createAll`: the IGNIS REST contract has no bulk-create route.
16
+ */
17
+ export declare class HttpRepository<E extends object = AnyType, P extends object = Partial<E>> implements IReadableRepository<E, {}>, IUpdatableRepository<E, P, {}>, IDeletableRepository<E, {}> {
13
18
  dataSource: HttpDataSource;
14
19
  entity: AbstractEntity;
15
20
  protected resource: string;
@@ -55,5 +60,161 @@ export declare class HttpRepository<E extends object = AnyType> implements IRead
55
60
  filter?: TFilter<E>;
56
61
  options?: {};
57
62
  }): Promise<R | null>;
63
+ /** `<resource>/<id>`, the id encoded: an id carrying `/` or `?` would otherwise name another route. */
64
+ protected getIdPaths(opts: {
65
+ id: string | number;
66
+ }): Array<string>;
67
+ /** The IGNIS bulk routes answer an empty `where` with a 400; refused here before a request is spent. */
68
+ protected assertBulkWhere(opts: {
69
+ method: string;
70
+ where?: TWhere<E>;
71
+ }): TWhere<E>;
72
+ /** The server always answers the rows; `shouldReturn: false` drops them here, as a database repository would not fetch them. */
73
+ protected toWriteResult<R>(opts: {
74
+ result: IHttpWriteResult<R>;
75
+ options?: {
76
+ shouldReturn?: boolean;
77
+ };
78
+ }): TCount & {
79
+ data: R | null;
80
+ };
81
+ /** POST `/<resource>`. */
82
+ create<R = E>(opts: {
83
+ data: P;
84
+ options?: {
85
+ shouldReturn?: true;
86
+ };
87
+ }): Promise<TCount & {
88
+ data: R;
89
+ }>;
90
+ updateById(opts: {
91
+ id: string | number;
92
+ data: Partial<P>;
93
+ options: {
94
+ shouldReturn: false;
95
+ };
96
+ }): Promise<TCount & {
97
+ data: undefined | null;
98
+ }>;
99
+ updateById<R = E>(opts: {
100
+ id: string | number;
101
+ data: Partial<P>;
102
+ options?: {
103
+ shouldReturn?: true;
104
+ };
105
+ }): Promise<TCount & {
106
+ data: R;
107
+ }>;
108
+ updateAll(opts: {
109
+ data: Partial<P>;
110
+ where: TWhere<E>;
111
+ options: {
112
+ shouldReturn: false;
113
+ force?: boolean;
114
+ };
115
+ }): Promise<TCount & {
116
+ data: undefined | null;
117
+ }>;
118
+ updateAll<R = E>(opts: {
119
+ data: Partial<P>;
120
+ where: TWhere<E>;
121
+ options?: {
122
+ shouldReturn?: true;
123
+ force?: boolean;
124
+ };
125
+ }): Promise<TCount & {
126
+ data: Array<R> | null;
127
+ }>;
128
+ updateBy(opts: {
129
+ data: Partial<P>;
130
+ where: TWhere<E>;
131
+ options: {
132
+ shouldReturn: false;
133
+ force?: boolean;
134
+ };
135
+ }): Promise<TCount & {
136
+ data: undefined | null;
137
+ }>;
138
+ updateBy<R = E>(opts: {
139
+ data: Partial<P>;
140
+ where: TWhere<E>;
141
+ options?: {
142
+ shouldReturn?: true;
143
+ force?: boolean;
144
+ };
145
+ }): Promise<TCount & {
146
+ data: Array<R> | null;
147
+ }>;
148
+ protected patchWhere(opts: {
149
+ method: string;
150
+ data: Partial<P>;
151
+ where: TWhere<E>;
152
+ options?: {
153
+ shouldReturn?: boolean;
154
+ };
155
+ }): Promise<TCount & {
156
+ data: AnyType;
157
+ }>;
158
+ deleteById(opts: {
159
+ id: string | number;
160
+ options: {
161
+ shouldReturn: false;
162
+ };
163
+ }): Promise<TCount & {
164
+ data: undefined | null;
165
+ }>;
166
+ deleteById<R = E>(opts: {
167
+ id: string | number;
168
+ options?: {
169
+ shouldReturn?: true;
170
+ };
171
+ }): Promise<TCount & {
172
+ data: R;
173
+ }>;
174
+ deleteAll(opts: {
175
+ where?: TWhere<E>;
176
+ options: {
177
+ shouldReturn: false;
178
+ force?: boolean;
179
+ };
180
+ }): Promise<TCount & {
181
+ data: undefined | null;
182
+ }>;
183
+ deleteAll<R = E>(opts: {
184
+ where?: TWhere<E>;
185
+ options?: {
186
+ shouldReturn?: true;
187
+ force?: boolean;
188
+ };
189
+ }): Promise<TCount & {
190
+ data: Array<R> | null;
191
+ }>;
192
+ deleteBy(opts: {
193
+ where?: TWhere<E>;
194
+ options: {
195
+ shouldReturn: false;
196
+ force?: boolean;
197
+ };
198
+ }): Promise<TCount & {
199
+ data: undefined | null;
200
+ }>;
201
+ deleteBy<R = E>(opts: {
202
+ where?: TWhere<E>;
203
+ options?: {
204
+ shouldReturn?: true;
205
+ force?: boolean;
206
+ };
207
+ }): Promise<TCount & {
208
+ data: Array<R> | null;
209
+ }>;
210
+ protected deleteWhere(opts: {
211
+ method: string;
212
+ where?: TWhere<E>;
213
+ options?: {
214
+ shouldReturn?: boolean;
215
+ };
216
+ }): Promise<TCount & {
217
+ data: AnyType;
218
+ }>;
58
219
  }
59
220
  //# sourceMappingURL=repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/http/repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkB,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EACV,mBAAmB,EACnB,MAAM,EACN,cAAc,EACd,OAAO,EACP,WAAW,EACX,MAAM,EACP,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,wDAAwD;AACxD,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,CAAC;CAGxD;AAED,qFAAqF;AACrF,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,CAAE,YAAW,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3F,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IAEvB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAOtF,SAAS,IAAI,cAAc;IAI3B,0FAA0F;IAC1F,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE;QACnC,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAYD,iGAAiG;IAC3F,KAAK,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmChE,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAStE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACtB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,EAAE;YAAE,gBAAgB,EAAE,IAAI,CAAA;SAAE,CAAC;KACrC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAoC3E,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK9E,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,EAAE,EAAE,CAAC;KACd,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAStB"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/http/repository.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpRepository = exports.HttpResourceEntity = void 0;
4
4
  const common_1 = require("@venizia/ignis-helpers/common");
5
- const repository_1 = require("@venizia/ignis-kernel/repository");
6
5
  const core_1 = require("@venizia/ignis-helpers/core");
6
+ const repository_1 = require("@venizia/ignis-kernel/repository");
7
7
  /** A remote resource has a name but no local schema. */
8
8
  class HttpResourceEntity extends repository_1.AbstractEntity {
9
9
  getSchema(_opts) {
@@ -11,7 +11,11 @@ class HttpResourceEntity extends repository_1.AbstractEntity {
11
11
  }
12
12
  }
13
13
  exports.HttpResourceEntity = HttpResourceEntity;
14
- /** Read access to one remote resource, in the `@venizia/ignis-filter` vocabulary. */
14
+ /**
15
+ * One remote resource, read and written through the IGNIS CRUD routes, in the `@venizia/ignis-filter`
16
+ * vocabulary. `P` is what a write sends - a partial row by default, since the server fills ids and
17
+ * defaults. There is no `createAll`: the IGNIS REST contract has no bulk-create route.
18
+ */
15
19
  class HttpRepository {
16
20
  constructor(opts) {
17
21
  this.dataSource = opts.dataSource;
@@ -103,12 +107,92 @@ class HttpRepository {
103
107
  }
104
108
  async findById(opts) {
105
109
  const rs = await this.dataSource.read({
106
- paths: [this.resource, `${opts.id}`],
110
+ paths: this.getIdPaths({ id: opts.id }),
107
111
  query: { filter: opts.filter ?? {} },
108
112
  shape: 'one',
109
113
  });
110
114
  return rs.data ?? null;
111
115
  }
116
+ /** `<resource>/<id>`, the id encoded: an id carrying `/` or `?` would otherwise name another route. */
117
+ getIdPaths(opts) {
118
+ return [this.resource, encodeURIComponent(String(opts.id))];
119
+ }
120
+ /** The IGNIS bulk routes answer an empty `where` with a 400; refused here before a request is spent. */
121
+ assertBulkWhere(opts) {
122
+ const { method, where } = opts;
123
+ if (!where || Object.keys(where).length === 0) {
124
+ throw (0, core_1.getError)({
125
+ statusCode: common_1.HTTP.ResultCodes.RS_4.BadRequest,
126
+ message: `[${this.resource}][${method}] where is required for a bulk write | The IGNIS bulk routes refuse an empty where, and force cannot cross HTTP`,
127
+ });
128
+ }
129
+ return where;
130
+ }
131
+ /** The server always answers the rows; `shouldReturn: false` drops them here, as a database repository would not fetch them. */
132
+ toWriteResult(opts) {
133
+ const { result, options } = opts;
134
+ return { count: result.count, data: options?.shouldReturn === false ? null : result.data };
135
+ }
136
+ /** POST `/<resource>`. */
137
+ async create(opts) {
138
+ const result = await this.dataSource.write({
139
+ paths: [this.resource],
140
+ method: common_1.HTTP.Methods.POST,
141
+ body: opts.data,
142
+ });
143
+ return { count: result.count, data: result.data };
144
+ }
145
+ /** PATCH `/<resource>/<id>`. */
146
+ async updateById(opts) {
147
+ const result = await this.dataSource.write({
148
+ paths: this.getIdPaths({ id: opts.id }),
149
+ method: common_1.HTTP.Methods.PATCH,
150
+ body: opts.data,
151
+ });
152
+ return this.toWriteResult({ result, options: opts.options });
153
+ }
154
+ /** PATCH `/<resource>`, the `where` in the body beside the data - a long id list outgrows a URL. */
155
+ async updateAll(opts) {
156
+ return this.patchWhere({ ...opts, method: 'updateAll' });
157
+ }
158
+ /** Alias for `updateAll`. */
159
+ async updateBy(opts) {
160
+ return this.patchWhere({ ...opts, method: 'updateBy' });
161
+ }
162
+ async patchWhere(opts) {
163
+ const where = this.assertBulkWhere({ method: opts.method, where: opts.where });
164
+ const result = await this.dataSource.write({
165
+ paths: [this.resource],
166
+ method: common_1.HTTP.Methods.PATCH,
167
+ body: { ...opts.data, where },
168
+ });
169
+ return this.toWriteResult({ result, options: opts.options });
170
+ }
171
+ /** DELETE `/<resource>/<id>`. */
172
+ async deleteById(opts) {
173
+ const result = await this.dataSource.write({
174
+ paths: this.getIdPaths({ id: opts.id }),
175
+ method: common_1.HTTP.Methods.DELETE,
176
+ });
177
+ return this.toWriteResult({ result, options: opts.options });
178
+ }
179
+ /** DELETE `/<resource>`, the `where` in the body. */
180
+ async deleteAll(opts) {
181
+ return this.deleteWhere({ ...opts, method: 'deleteAll' });
182
+ }
183
+ /** Alias for `deleteAll`. */
184
+ async deleteBy(opts) {
185
+ return this.deleteWhere({ ...opts, method: 'deleteBy' });
186
+ }
187
+ async deleteWhere(opts) {
188
+ const where = this.assertBulkWhere({ method: opts.method, where: opts.where });
189
+ const result = await this.dataSource.write({
190
+ paths: [this.resource],
191
+ method: common_1.HTTP.Methods.DELETE,
192
+ body: { where },
193
+ });
194
+ return this.toWriteResult({ result, options: opts.options });
195
+ }
112
196
  }
113
197
  exports.HttpRepository = HttpRepository;
114
198
  //# sourceMappingURL=repository.js.map