@financeable/aggregation 0.13.3 → 0.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.js +17 -0
- package/hooks/hooks.js +84 -0
- package/hooks/hooks.js.map +1 -0
- package/hooks/index.js +22 -0
- package/hooks/index.js.map +1 -0
- package/hooks/oauth2scopes.d.ts +13 -0
- package/hooks/oauth2scopes.d.ts.map +1 -0
- package/hooks/oauth2scopes.js +6 -0
- package/hooks/oauth2scopes.js.map +1 -0
- package/hooks/types.js +6 -0
- package/hooks/types.js.map +1 -0
- package/index.js +48 -0
- package/lib/base64.js +71 -0
- package/lib/base64.js.map +1 -0
- package/lib/config.d.ts +38 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +35 -0
- package/lib/config.js.map +1 -0
- package/lib/dlv.d.ts +14 -0
- package/lib/dlv.d.ts.map +1 -0
- package/lib/dlv.js +49 -0
- package/lib/dlv.js.map +1 -0
- package/lib/encodings.js +379 -0
- package/lib/encodings.js.map +1 -0
- package/lib/env.js +82 -0
- package/lib/env.js.map +1 -0
- package/lib/files.d.ts +13 -0
- package/lib/files.d.ts.map +1 -0
- package/lib/files.js +77 -0
- package/lib/files.js.map +1 -0
- package/lib/http.d.ts +67 -0
- package/lib/http.d.ts.map +1 -0
- package/lib/http.js +217 -0
- package/lib/http.js.map +1 -0
- package/lib/is-plain-object.d.ts +2 -0
- package/lib/is-plain-object.d.ts.map +1 -0
- package/lib/is-plain-object.js +41 -0
- package/lib/is-plain-object.js.map +1 -0
- package/lib/logger.d.ts +6 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/logger.js +6 -0
- package/lib/logger.js.map +1 -0
- package/lib/matchers.js +218 -0
- package/lib/matchers.js.map +1 -0
- package/lib/primitives.d.ts +26 -0
- package/lib/primitives.d.ts.map +1 -0
- package/lib/primitives.js +111 -0
- package/lib/primitives.js.map +1 -0
- package/lib/retries.d.ts +38 -0
- package/lib/retries.d.ts.map +1 -0
- package/lib/retries.js +153 -0
- package/lib/retries.js.map +1 -0
- package/lib/schemas.js +62 -0
- package/lib/schemas.js.map +1 -0
- package/lib/sdks.js +274 -0
- package/lib/sdks.js.map +1 -0
- package/lib/security.js +145 -0
- package/lib/security.js.map +1 -0
- package/lib/url.d.ts +5 -0
- package/lib/url.d.ts.map +1 -0
- package/lib/url.js +25 -0
- package/lib/url.js.map +1 -0
- package/models/components/addressattributes.js +98 -0
- package/models/components/addressattributes.js.map +1 -0
- package/models/components/apierrorlinks.js +50 -0
- package/models/components/apierrorlinks.js.map +1 -0
- package/models/components/applicationresource.js +57 -0
- package/models/components/applicationresource.js.map +1 -0
- package/models/components/applicationstatus.js +53 -0
- package/models/components/applicationstatus.js.map +1 -0
- package/models/components/australianstatesandterritories.js +55 -0
- package/models/components/australianstatesandterritories.js.map +1 -0
- package/models/components/badrequesterror.js +69 -0
- package/models/components/badrequesterror.js.map +1 -0
- package/models/components/businessapplicationjsonapirelationships.js +126 -0
- package/models/components/businessapplicationjsonapirelationships.js.map +1 -0
- package/models/components/businessapplicationpayload.js +79 -0
- package/models/components/businessapplicationpayload.js.map +1 -0
- package/models/components/businessapplicationresource.js +82 -0
- package/models/components/businessapplicationresource.js.map +1 -0
- package/models/components/businessloanbusinessapplicationrelationships.js +221 -0
- package/models/components/businessloanbusinessapplicationrelationships.js.map +1 -0
- package/models/components/commercialapplicationjsonapirelationships.js +153 -0
- package/models/components/commercialapplicationjsonapirelationships.js.map +1 -0
- package/models/components/commercialsecuredapplicationpayload.js +88 -0
- package/models/components/commercialsecuredapplicationpayload.js.map +1 -0
- package/models/components/commercialsecuredapplicationresource.js +81 -0
- package/models/components/commercialsecuredapplicationresource.js.map +1 -0
- package/models/components/commercialsecuredloanassetattributes.js +223 -0
- package/models/components/commercialsecuredloanassetattributes.js.map +1 -0
- package/models/components/commercialsecuredloanassettype.js +73 -0
- package/models/components/commercialsecuredloanassettype.js.map +1 -0
- package/models/components/commercialsecuredloancommercialapplicationrelationships.js +247 -0
- package/models/components/commercialsecuredloancommercialapplicationrelationships.js.map +1 -0
- package/models/components/commercialsecuredloantypeofsale.js +53 -0
- package/models/components/commercialsecuredloantypeofsale.js.map +1 -0
- package/models/components/consumerapplicationjsonapirelationships.js +127 -0
- package/models/components/consumerapplicationjsonapirelationships.js.map +1 -0
- package/models/components/consumersecuredapplicationpayload.js +89 -0
- package/models/components/consumersecuredapplicationpayload.js.map +1 -0
- package/models/components/consumersecuredapplicationresource.js +82 -0
- package/models/components/consumersecuredapplicationresource.js.map +1 -0
- package/models/components/consumersecuredloanassetattributes.js +225 -0
- package/models/components/consumersecuredloanassetattributes.js.map +1 -0
- package/models/components/consumersecuredloanassettype.js +61 -0
- package/models/components/consumersecuredloanassettype.js.map +1 -0
- package/models/components/consumersecuredloanconsumerapplicationrelationships.js +280 -0
- package/models/components/consumersecuredloanconsumerapplicationrelationships.js.map +1 -0
- package/models/components/consumersecuredloantypeofsale.js +53 -0
- package/models/components/consumersecuredloantypeofsale.js.map +1 -0
- package/models/components/createsupportingdocumentsresponse.js +82 -0
- package/models/components/createsupportingdocumentsresponse.js.map +1 -0
- package/models/components/currencycodeiso4217.js +48 -0
- package/models/components/currencycodeiso4217.js.map +1 -0
- package/models/components/customerassetattributes.js +66 -0
- package/models/components/customerassetattributes.js.map +1 -0
- package/models/components/customerassettype.js +55 -0
- package/models/components/customerassettype.js.map +1 -0
- package/models/components/customerattributes.js +68 -0
- package/models/components/customerattributes.js.map +1 -0
- package/models/components/customerattributescreateitem.js +73 -0
- package/models/components/customerattributescreateitem.js.map +1 -0
- package/models/components/customeridtype.js +47 -0
- package/models/components/customeridtype.js.map +1 -0
- package/models/components/customerliabilityattributes.js +77 -0
- package/models/components/customerliabilityattributes.js.map +1 -0
- package/models/components/customerliabilityrepaymentfrequency.js +50 -0
- package/models/components/customerliabilityrepaymentfrequency.js.map +1 -0
- package/models/components/customerliabilitytype.js +53 -0
- package/models/components/customerliabilitytype.js.map +1 -0
- package/models/components/customertitle.js +51 -0
- package/models/components/customertitle.js.map +1 -0
- package/models/components/documenttype.js +64 -0
- package/models/components/documenttype.js.map +1 -0
- package/models/components/entityattributes.js +91 -0
- package/models/components/entityattributes.js.map +1 -0
- package/models/components/entityattributesinput.js +55 -0
- package/models/components/entityattributesinput.js.map +1 -0
- package/models/components/errorsource.js +52 -0
- package/models/components/errorsource.js.map +1 -0
- package/models/components/expenseattributes.js +55 -0
- package/models/components/expenseattributes.js.map +1 -0
- package/models/components/expensefrequency.js +48 -0
- package/models/components/expensefrequency.js.map +1 -0
- package/models/components/expensetype.js +65 -0
- package/models/components/expensetype.js.map +1 -0
- package/models/components/forbiddenerror.js +74 -0
- package/models/components/forbiddenerror.js.map +1 -0
- package/models/components/frequencytype.js +53 -0
- package/models/components/frequencytype.js.map +1 -0
- package/models/components/incomeattributes.js +55 -0
- package/models/components/incomeattributes.js.map +1 -0
- package/models/components/incomefrequency.js +49 -0
- package/models/components/incomefrequency.js.map +1 -0
- package/models/components/incometype.js +55 -0
- package/models/components/incometype.js.map +1 -0
- package/models/components/index.js +91 -0
- package/models/components/index.js.map +1 -0
- package/models/components/linkobject.js +66 -0
- package/models/components/linkobject.js.map +1 -0
- package/models/components/livingarrangements.js +51 -0
- package/models/components/livingarrangements.js.map +1 -0
- package/models/components/loandetailsattributes.js +256 -0
- package/models/components/loandetailsattributes.js.map +1 -0
- package/models/components/maritalstatus.js +49 -0
- package/models/components/maritalstatus.js.map +1 -0
- package/models/components/monetaryquantity.js +71 -0
- package/models/components/monetaryquantity.js.map +1 -0
- package/models/components/paginationlinks.js +53 -0
- package/models/components/paginationlinks.js.map +1 -0
- package/models/components/paginationmeta.js +60 -0
- package/models/components/paginationmeta.js.map +1 -0
- package/models/components/percentagequantity.js +67 -0
- package/models/components/percentagequantity.js.map +1 -0
- package/models/components/personalapplicationjsonapirelationships.js +101 -0
- package/models/components/personalapplicationjsonapirelationships.js.map +1 -0
- package/models/components/personalapplicationpayload.js +79 -0
- package/models/components/personalapplicationpayload.js.map +1 -0
- package/models/components/personalapplicationresource.js +82 -0
- package/models/components/personalapplicationresource.js.map +1 -0
- package/models/components/personalloanpersonalapplicationrelationships.js +249 -0
- package/models/components/personalloanpersonalapplicationrelationships.js.map +1 -0
- package/models/components/relationshipresourcenotfound.js +74 -0
- package/models/components/relationshipresourcenotfound.js.map +1 -0
- package/models/components/repaymentstructure.js +53 -0
- package/models/components/repaymentstructure.js.map +1 -0
- package/models/components/residencystatus.js +52 -0
- package/models/components/residencystatus.js.map +1 -0
- package/models/components/resourcenotfound.js +74 -0
- package/models/components/resourcenotfound.js.map +1 -0
- package/models/components/security.js +49 -0
- package/models/components/security.js.map +1 -0
- package/models/components/supportingdocumentattributes.js +53 -0
- package/models/components/supportingdocumentattributes.js.map +1 -0
- package/models/components/supportingdocumentattributesinput.js +51 -0
- package/models/components/supportingdocumentattributesinput.js.map +1 -0
- package/models/components/supportingdocumentrelationships.js +269 -0
- package/models/components/supportingdocumentrelationships.js.map +1 -0
- package/models/components/supportingdocumentresource.js +61 -0
- package/models/components/supportingdocumentresource.js.map +1 -0
- package/models/components/tokenrequest.js +68 -0
- package/models/components/tokenrequest.js.map +1 -0
- package/models/components/tokenresponse.js +60 -0
- package/models/components/tokenresponse.js.map +1 -0
- package/models/components/uploadmimetype.js +55 -0
- package/models/components/uploadmimetype.js.map +1 -0
- package/models/errors/apierror.d.ts +10 -0
- package/models/errors/apierror.d.ts.map +1 -0
- package/models/errors/apierror.js +34 -0
- package/models/errors/apierror.js.map +1 -0
- package/models/errors/financeableerror.d.ts +19 -0
- package/models/errors/financeableerror.d.ts.map +1 -0
- package/models/errors/financeableerror.js +20 -0
- package/models/errors/financeableerror.js.map +1 -0
- package/models/errors/httpclienterrors.d.ts +44 -0
- package/models/errors/httpclienterrors.d.ts.map +1 -0
- package/models/errors/httpclienterrors.js +78 -0
- package/models/errors/httpclienterrors.js.map +1 -0
- package/models/errors/index.js +25 -0
- package/models/errors/index.js.map +1 -0
- package/models/errors/responsevalidationerror.js +66 -0
- package/models/errors/responsevalidationerror.js.map +1 -0
- package/models/errors/sdkvalidationerror.js +129 -0
- package/models/errors/sdkvalidationerror.js.map +1 -0
- package/models/operations/createapplication.js +278 -0
- package/models/operations/createapplication.js.map +1 -0
- package/models/operations/getapplication.js +256 -0
- package/models/operations/getapplication.js.map +1 -0
- package/models/operations/index.js +24 -0
- package/models/operations/index.js.map +1 -0
- package/models/operations/listapplications.js +94 -0
- package/models/operations/listapplications.js.map +1 -0
- package/models/operations/supportingdocumentscreate.js +133 -0
- package/models/operations/supportingdocumentscreate.js.map +1 -0
- package/package.json +2 -5
- package/sdk/index.js +21 -0
- package/sdk/index.js.map +1 -0
- package/sdk/sdk.js +23 -0
- package/sdk/sdk.js.map +1 -0
- package/src/lib/config.ts +2 -2
- package/types/async.d.ts +23 -0
- package/types/async.d.ts.map +1 -0
- package/types/async.js +44 -0
- package/types/async.js.map +1 -0
- package/types/blobs.js +62 -0
- package/types/blobs.js.map +1 -0
- package/types/constdatetime.js +46 -0
- package/types/constdatetime.js.map +1 -0
- package/types/enums.js +66 -0
- package/types/enums.js.map +1 -0
- package/types/fp.d.ts +31 -0
- package/types/fp.d.ts.map +1 -0
- package/types/fp.js +37 -0
- package/types/fp.js.map +1 -0
- package/types/index.js +29 -0
- package/types/index.js.map +1 -0
- package/types/operations.d.ts +27 -0
- package/types/operations.d.ts.map +1 -0
- package/types/operations.js +83 -0
- package/types/operations.js.map +1 -0
- package/types/rfcdate.d.ts +21 -0
- package/types/rfcdate.d.ts.map +1 -0
- package/types/rfcdate.js +46 -0
- package/types/rfcdate.js.map +1 -0
- package/types/streams.d.ts +2 -0
- package/types/streams.d.ts.map +1 -0
- package/types/streams.js +18 -0
- package/types/streams.js.map +1 -0
- package/types/unrecognized.d.ts +16 -0
- package/types/unrecognized.d.ts.map +1 -0
- package/types/unrecognized.js +34 -0
- package/types/unrecognized.js.map +1 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.invariant = invariant;
|
|
7
|
+
exports.remap = remap;
|
|
8
|
+
exports.combineSignals = combineSignals;
|
|
9
|
+
exports.abortSignalAny = abortSignalAny;
|
|
10
|
+
exports.compactMap = compactMap;
|
|
11
|
+
exports.allRequired = allRequired;
|
|
12
|
+
class InvariantError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "InvariantError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function invariant(condition, message) {
|
|
19
|
+
if (!condition) {
|
|
20
|
+
throw new InvariantError(message);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Converts or omits an object's keys according to a mapping.
|
|
25
|
+
*
|
|
26
|
+
* @param inp An object whose keys will be remapped
|
|
27
|
+
* @param mappings A mapping of original keys to new keys. If a key is not present in the mapping, it will be left as is. If a key is mapped to `null`, it will be removed in the resulting object.
|
|
28
|
+
* @returns A new object with keys remapped or omitted according to the mappings
|
|
29
|
+
*/
|
|
30
|
+
function remap(inp, mappings) {
|
|
31
|
+
let out = {};
|
|
32
|
+
if (!Object.keys(mappings).length) {
|
|
33
|
+
out = inp;
|
|
34
|
+
return out;
|
|
35
|
+
}
|
|
36
|
+
for (const [k, v] of Object.entries(inp)) {
|
|
37
|
+
const j = mappings[k];
|
|
38
|
+
if (j === null) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
out[j ?? k] = v;
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
function combineSignals(...signals) {
|
|
46
|
+
const filtered = [];
|
|
47
|
+
for (const signal of signals) {
|
|
48
|
+
if (signal) {
|
|
49
|
+
filtered.push(signal);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
switch (filtered.length) {
|
|
53
|
+
case 0:
|
|
54
|
+
case 1:
|
|
55
|
+
return filtered[0] || null;
|
|
56
|
+
default:
|
|
57
|
+
if ("any" in AbortSignal && typeof AbortSignal.any === "function") {
|
|
58
|
+
return AbortSignal.any(filtered);
|
|
59
|
+
}
|
|
60
|
+
return abortSignalAny(filtered);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function abortSignalAny(signals) {
|
|
64
|
+
const controller = new AbortController();
|
|
65
|
+
const result = controller.signal;
|
|
66
|
+
if (!signals.length) {
|
|
67
|
+
return controller.signal;
|
|
68
|
+
}
|
|
69
|
+
if (signals.length === 1) {
|
|
70
|
+
return signals[0] || controller.signal;
|
|
71
|
+
}
|
|
72
|
+
for (const signal of signals) {
|
|
73
|
+
if (signal.aborted) {
|
|
74
|
+
return signal;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function abort() {
|
|
78
|
+
controller.abort(this.reason);
|
|
79
|
+
clean();
|
|
80
|
+
}
|
|
81
|
+
const signalRefs = [];
|
|
82
|
+
function clean() {
|
|
83
|
+
for (const signalRef of signalRefs) {
|
|
84
|
+
const signal = signalRef.deref();
|
|
85
|
+
if (signal) {
|
|
86
|
+
signal.removeEventListener("abort", abort);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
for (const signal of signals) {
|
|
91
|
+
signalRefs.push(new WeakRef(signal));
|
|
92
|
+
signal.addEventListener("abort", abort);
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
function compactMap(values) {
|
|
97
|
+
const out = {};
|
|
98
|
+
for (const [k, v] of Object.entries(values)) {
|
|
99
|
+
if (typeof v !== "undefined") {
|
|
100
|
+
out[k] = v;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
function allRequired(v) {
|
|
106
|
+
if (Object.values(v).every((x) => x == null)) {
|
|
107
|
+
return void 0;
|
|
108
|
+
}
|
|
109
|
+
return v;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/lib/primitives.ts"],"names":[],"mappings":"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"}
|
package/lib/retries.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type BackoffStrategy = {
|
|
2
|
+
initialInterval: number;
|
|
3
|
+
maxInterval: number;
|
|
4
|
+
exponent: number;
|
|
5
|
+
maxElapsedTime: number;
|
|
6
|
+
};
|
|
7
|
+
export type RetryConfig = {
|
|
8
|
+
strategy: "none";
|
|
9
|
+
} | {
|
|
10
|
+
strategy: "backoff";
|
|
11
|
+
backoff?: BackoffStrategy;
|
|
12
|
+
retryConnectionErrors?: boolean;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* PermanentError is an error that is not recoverable. Throwing this error will
|
|
16
|
+
* cause a retry loop to terminate.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PermanentError extends Error {
|
|
19
|
+
/** The underlying cause of the error. */
|
|
20
|
+
readonly cause: unknown;
|
|
21
|
+
constructor(message: string, options?: {
|
|
22
|
+
cause?: unknown;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* TemporaryError is an error is used to signal that an HTTP request can be
|
|
27
|
+
* retried as part of a retry loop. If retry attempts are exhausted and this
|
|
28
|
+
* error is thrown, the response will be returned to the caller.
|
|
29
|
+
*/
|
|
30
|
+
export declare class TemporaryError extends Error {
|
|
31
|
+
response: Response;
|
|
32
|
+
constructor(message: string, response: Response);
|
|
33
|
+
}
|
|
34
|
+
export declare function retry(fetchFn: () => Promise<Response>, options: {
|
|
35
|
+
config: RetryConfig;
|
|
36
|
+
statusCodes: string[];
|
|
37
|
+
}): Promise<Response>;
|
|
38
|
+
//# sourceMappingURL=retries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../src/lib/retries.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AASF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpB;IACE,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEN;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,yCAAyC;IACzC,SAAkB,KAAK,EAAE,OAAO,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAgB3D;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,EAAE,QAAQ,CAAC;gBAEP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CAOhD;AAED,wBAAsB,KAAK,CACzB,OAAO,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAChC,OAAO,EAAE;IACP,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GACA,OAAO,CAAC,QAAQ,CAAC,CAanB"}
|
package/lib/retries.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TemporaryError = exports.PermanentError = void 0;
|
|
7
|
+
exports.retry = retry;
|
|
8
|
+
const http_js_1 = require("./http.js");
|
|
9
|
+
const defaultBackoff = {
|
|
10
|
+
initialInterval: 500,
|
|
11
|
+
maxInterval: 60000,
|
|
12
|
+
exponent: 1.5,
|
|
13
|
+
maxElapsedTime: 3600000,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* PermanentError is an error that is not recoverable. Throwing this error will
|
|
17
|
+
* cause a retry loop to terminate.
|
|
18
|
+
*/
|
|
19
|
+
class PermanentError extends Error {
|
|
20
|
+
constructor(message, options) {
|
|
21
|
+
let msg = message;
|
|
22
|
+
if (options?.cause) {
|
|
23
|
+
msg += `: ${options.cause}`;
|
|
24
|
+
}
|
|
25
|
+
super(msg, options);
|
|
26
|
+
this.name = "PermanentError";
|
|
27
|
+
// In older runtimes, the cause field would not have been assigned through
|
|
28
|
+
// the super() call.
|
|
29
|
+
if (typeof this.cause === "undefined") {
|
|
30
|
+
this.cause = options?.cause;
|
|
31
|
+
}
|
|
32
|
+
Object.setPrototypeOf(this, PermanentError.prototype);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.PermanentError = PermanentError;
|
|
36
|
+
/**
|
|
37
|
+
* TemporaryError is an error is used to signal that an HTTP request can be
|
|
38
|
+
* retried as part of a retry loop. If retry attempts are exhausted and this
|
|
39
|
+
* error is thrown, the response will be returned to the caller.
|
|
40
|
+
*/
|
|
41
|
+
class TemporaryError extends Error {
|
|
42
|
+
constructor(message, response) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.response = response;
|
|
45
|
+
this.name = "TemporaryError";
|
|
46
|
+
Object.setPrototypeOf(this, TemporaryError.prototype);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.TemporaryError = TemporaryError;
|
|
50
|
+
async function retry(fetchFn, options) {
|
|
51
|
+
switch (options.config.strategy) {
|
|
52
|
+
case "backoff":
|
|
53
|
+
return retryBackoff(wrapFetcher(fetchFn, {
|
|
54
|
+
statusCodes: options.statusCodes,
|
|
55
|
+
retryConnectionErrors: !!options.config.retryConnectionErrors,
|
|
56
|
+
}), options.config.backoff ?? defaultBackoff);
|
|
57
|
+
default:
|
|
58
|
+
return await fetchFn();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function wrapFetcher(fn, options) {
|
|
62
|
+
return async () => {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fn();
|
|
65
|
+
if (isRetryableResponse(res, options.statusCodes)) {
|
|
66
|
+
throw new TemporaryError("Response failed with retryable status code", res);
|
|
67
|
+
}
|
|
68
|
+
return res;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err instanceof TemporaryError) {
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
if (options.retryConnectionErrors &&
|
|
75
|
+
((0, http_js_1.isTimeoutError)(err) || (0, http_js_1.isConnectionError)(err))) {
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
throw new PermanentError("Permanent error", { cause: err });
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const codeRangeRE = new RegExp("^[0-9]xx$", "i");
|
|
83
|
+
function isRetryableResponse(res, statusCodes) {
|
|
84
|
+
const actual = `${res.status}`;
|
|
85
|
+
return statusCodes.some((code) => {
|
|
86
|
+
if (!codeRangeRE.test(code)) {
|
|
87
|
+
return code === actual;
|
|
88
|
+
}
|
|
89
|
+
const expectFamily = code.charAt(0);
|
|
90
|
+
if (!expectFamily) {
|
|
91
|
+
throw new Error("Invalid status code range");
|
|
92
|
+
}
|
|
93
|
+
const actualFamily = actual.charAt(0);
|
|
94
|
+
if (!actualFamily) {
|
|
95
|
+
throw new Error(`Invalid response status code: ${actual}`);
|
|
96
|
+
}
|
|
97
|
+
return actualFamily === expectFamily;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async function retryBackoff(fn, strategy) {
|
|
101
|
+
const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy;
|
|
102
|
+
const start = Date.now();
|
|
103
|
+
let x = 0;
|
|
104
|
+
while (true) {
|
|
105
|
+
try {
|
|
106
|
+
const res = await fn();
|
|
107
|
+
return res;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (err instanceof PermanentError) {
|
|
111
|
+
throw err.cause;
|
|
112
|
+
}
|
|
113
|
+
const elapsed = Date.now() - start;
|
|
114
|
+
if (elapsed > maxElapsedTime) {
|
|
115
|
+
if (err instanceof TemporaryError) {
|
|
116
|
+
return err.response;
|
|
117
|
+
}
|
|
118
|
+
throw err;
|
|
119
|
+
}
|
|
120
|
+
let retryInterval = 0;
|
|
121
|
+
if (err instanceof TemporaryError) {
|
|
122
|
+
retryInterval = retryIntervalFromResponse(err.response);
|
|
123
|
+
}
|
|
124
|
+
if (retryInterval <= 0) {
|
|
125
|
+
retryInterval =
|
|
126
|
+
initialInterval * Math.pow(x, exponent) + Math.random() * 1000;
|
|
127
|
+
}
|
|
128
|
+
const d = Math.min(retryInterval, maxInterval);
|
|
129
|
+
await delay(d);
|
|
130
|
+
x++;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function retryIntervalFromResponse(res) {
|
|
135
|
+
const retryVal = res.headers.get("retry-after") || "";
|
|
136
|
+
if (!retryVal) {
|
|
137
|
+
return 0;
|
|
138
|
+
}
|
|
139
|
+
const parsedNumber = Number(retryVal);
|
|
140
|
+
if (Number.isInteger(parsedNumber)) {
|
|
141
|
+
return parsedNumber * 1000;
|
|
142
|
+
}
|
|
143
|
+
const parsedDate = Date.parse(retryVal);
|
|
144
|
+
if (Number.isInteger(parsedDate)) {
|
|
145
|
+
const deltaMS = parsedDate - Date.now();
|
|
146
|
+
return deltaMS > 0 ? Math.ceil(deltaMS) : 0;
|
|
147
|
+
}
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
async function delay(delay) {
|
|
151
|
+
return new Promise((resolve) => setTimeout(resolve, delay));
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=retries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retries.js","sourceRoot":"","sources":["../src/lib/retries.ts"],"names":[],"mappings":"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"}
|
package/lib/schemas.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parse = parse;
|
|
7
|
+
exports.safeParse = safeParse;
|
|
8
|
+
exports.collectExtraKeys = collectExtraKeys;
|
|
9
|
+
const v3_1 = require("zod/v3");
|
|
10
|
+
const sdkvalidationerror_js_1 = require("../models/errors/sdkvalidationerror.js");
|
|
11
|
+
const fp_js_1 = require("../types/fp.js");
|
|
12
|
+
/**
|
|
13
|
+
* Utility function that executes some code which may throw a ZodError. It
|
|
14
|
+
* intercepts this error and converts it to an SDKValidationError so as to not
|
|
15
|
+
* leak Zod implementation details to user code.
|
|
16
|
+
*/
|
|
17
|
+
function parse(rawValue, fn, errorMessage) {
|
|
18
|
+
try {
|
|
19
|
+
return fn(rawValue);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (err instanceof v3_1.ZodError) {
|
|
23
|
+
throw new sdkvalidationerror_js_1.SDKValidationError(errorMessage, err, rawValue);
|
|
24
|
+
}
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Utility function that executes some code which may result in a ZodError. It
|
|
30
|
+
* intercepts this error and converts it to an SDKValidationError so as to not
|
|
31
|
+
* leak Zod implementation details to user code.
|
|
32
|
+
*/
|
|
33
|
+
function safeParse(rawValue, fn, errorMessage) {
|
|
34
|
+
try {
|
|
35
|
+
return (0, fp_js_1.OK)(fn(rawValue));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
return (0, fp_js_1.ERR)(new sdkvalidationerror_js_1.SDKValidationError(errorMessage, err, rawValue));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function collectExtraKeys(obj, extrasKey, optional) {
|
|
42
|
+
return obj.transform((val) => {
|
|
43
|
+
const extras = {};
|
|
44
|
+
const { shape } = obj;
|
|
45
|
+
for (const [key] of Object.entries(val)) {
|
|
46
|
+
if (key in shape) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const v = val[key];
|
|
50
|
+
if (typeof v === "undefined") {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
extras[key] = v;
|
|
54
|
+
delete val[key];
|
|
55
|
+
}
|
|
56
|
+
if (optional && Object.keys(extras).length === 0) {
|
|
57
|
+
return val;
|
|
58
|
+
}
|
|
59
|
+
return { ...val, [extrasKey]: extras };
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/lib/schemas.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAkBH,sBAaC;AAOD,8BAUC;AAED,4CAsCC;AAtFD,+BAOgB;AAChB,kFAA4E;AAC5E,0CAAiD;AAEjD;;;;GAIG;AACH,SAAgB,KAAK,CACnB,QAAa,EACb,EAAuB,EACvB,YAAoB;IAEpB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,0CAAkB,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CACvB,QAAa,EACb,EAAuB,EACvB,YAAoB;IAEpB,IAAI,CAAC;QACH,OAAO,IAAA,UAAE,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAA,WAAG,EAAC,IAAI,0CAAkB,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAK9B,GAAwC,EACxC,SAAY,EACZ,QAAiB;IAQjB,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAqC,EAAE,CAAC;QACpD,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,OAAO,CAAC,KAAK,WAAW,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/lib/sdks.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
4
|
+
*/
|
|
5
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
6
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
7
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
8
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
9
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
10
|
+
};
|
|
11
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
14
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
15
|
+
};
|
|
16
|
+
var _ClientSDK_httpClient, _ClientSDK_hooks, _ClientSDK_logger;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ClientSDK = void 0;
|
|
19
|
+
const hooks_js_1 = require("../hooks/hooks.js");
|
|
20
|
+
const httpclienterrors_js_1 = require("../models/errors/httpclienterrors.js");
|
|
21
|
+
const fp_js_1 = require("../types/fp.js");
|
|
22
|
+
const base64_js_1 = require("./base64.js");
|
|
23
|
+
const config_js_1 = require("./config.js");
|
|
24
|
+
const encodings_js_1 = require("./encodings.js");
|
|
25
|
+
const env_js_1 = require("./env.js");
|
|
26
|
+
const http_js_1 = require("./http.js");
|
|
27
|
+
const retries_js_1 = require("./retries.js");
|
|
28
|
+
const gt = typeof globalThis === "undefined" ? null : globalThis;
|
|
29
|
+
const webWorkerLike = typeof gt === "object"
|
|
30
|
+
&& gt != null
|
|
31
|
+
&& "importScripts" in gt
|
|
32
|
+
&& typeof gt["importScripts"] === "function";
|
|
33
|
+
const isBrowserLike = webWorkerLike
|
|
34
|
+
|| (typeof navigator !== "undefined" && "serviceWorker" in navigator)
|
|
35
|
+
|| (typeof window === "object" && typeof window.document !== "undefined");
|
|
36
|
+
class ClientSDK {
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
_ClientSDK_httpClient.set(this, void 0);
|
|
39
|
+
_ClientSDK_hooks.set(this, void 0);
|
|
40
|
+
_ClientSDK_logger.set(this, void 0);
|
|
41
|
+
const opt = options;
|
|
42
|
+
if (typeof opt === "object"
|
|
43
|
+
&& opt != null
|
|
44
|
+
&& "hooks" in opt
|
|
45
|
+
&& opt.hooks instanceof hooks_js_1.SDKHooks) {
|
|
46
|
+
__classPrivateFieldSet(this, _ClientSDK_hooks, opt.hooks, "f");
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
__classPrivateFieldSet(this, _ClientSDK_hooks, new hooks_js_1.SDKHooks(), "f");
|
|
50
|
+
}
|
|
51
|
+
const url = (0, config_js_1.serverURLFromOptions)(options);
|
|
52
|
+
if (url) {
|
|
53
|
+
url.pathname = url.pathname.replace(/\/+$/, "") + "/";
|
|
54
|
+
}
|
|
55
|
+
const { baseURL, client } = __classPrivateFieldGet(this, _ClientSDK_hooks, "f").sdkInit({
|
|
56
|
+
baseURL: url,
|
|
57
|
+
client: options.httpClient || new http_js_1.HTTPClient(),
|
|
58
|
+
});
|
|
59
|
+
this._baseURL = baseURL;
|
|
60
|
+
__classPrivateFieldSet(this, _ClientSDK_httpClient, client, "f");
|
|
61
|
+
this._options = { ...options, hooks: __classPrivateFieldGet(this, _ClientSDK_hooks, "f") };
|
|
62
|
+
__classPrivateFieldSet(this, _ClientSDK_logger, this._options.debugLogger, "f");
|
|
63
|
+
if (!__classPrivateFieldGet(this, _ClientSDK_logger, "f") && (0, env_js_1.env)().FINANCEABLE_DEBUG) {
|
|
64
|
+
__classPrivateFieldSet(this, _ClientSDK_logger, console, "f");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
_createRequest(context, conf, options) {
|
|
68
|
+
const { method, path, query, headers: opHeaders, security } = conf;
|
|
69
|
+
const base = conf.baseURL ?? this._baseURL;
|
|
70
|
+
if (!base) {
|
|
71
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.InvalidRequestError("No base URL provided for operation"));
|
|
72
|
+
}
|
|
73
|
+
const reqURL = new URL(base);
|
|
74
|
+
const inputURL = new URL(path, reqURL);
|
|
75
|
+
if (path) {
|
|
76
|
+
reqURL.pathname += reqURL.pathname.endsWith("/") ? "" : "/";
|
|
77
|
+
reqURL.pathname += inputURL.pathname.replace(/^\/+/, "");
|
|
78
|
+
}
|
|
79
|
+
let finalQuery = query || "";
|
|
80
|
+
const secQuery = [];
|
|
81
|
+
for (const [k, v] of Object.entries(security?.queryParams || {})) {
|
|
82
|
+
const q = (0, encodings_js_1.encodeForm)(k, v, { charEncoding: "percent" });
|
|
83
|
+
if (typeof q !== "undefined") {
|
|
84
|
+
secQuery.push(q);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (secQuery.length) {
|
|
88
|
+
finalQuery += `&${secQuery.join("&")}`;
|
|
89
|
+
}
|
|
90
|
+
if (finalQuery) {
|
|
91
|
+
const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
|
|
92
|
+
reqURL.search = `?${q}`;
|
|
93
|
+
}
|
|
94
|
+
const headers = new Headers(opHeaders);
|
|
95
|
+
const username = security?.basic.username;
|
|
96
|
+
const password = security?.basic.password;
|
|
97
|
+
if (username != null || password != null) {
|
|
98
|
+
const encoded = (0, base64_js_1.stringToBase64)([username || "", password || ""].join(":"));
|
|
99
|
+
headers.set("Authorization", `Basic ${encoded}`);
|
|
100
|
+
}
|
|
101
|
+
const securityHeaders = new Headers(security?.headers || {});
|
|
102
|
+
for (const [k, v] of securityHeaders) {
|
|
103
|
+
headers.set(k, v);
|
|
104
|
+
}
|
|
105
|
+
let cookie = headers.get("cookie") || "";
|
|
106
|
+
for (const [k, v] of Object.entries(security?.cookies || {})) {
|
|
107
|
+
cookie += `; ${k}=${v}`;
|
|
108
|
+
}
|
|
109
|
+
cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
|
|
110
|
+
headers.set("cookie", cookie);
|
|
111
|
+
const userHeaders = new Headers(options?.headers ?? options?.fetchOptions?.headers);
|
|
112
|
+
for (const [k, v] of userHeaders) {
|
|
113
|
+
headers.set(k, v);
|
|
114
|
+
}
|
|
115
|
+
// Only set user agent header in non-browser-like environments since CORS
|
|
116
|
+
// policy disallows setting it in browsers e.g. Chrome throws an error.
|
|
117
|
+
if (!isBrowserLike) {
|
|
118
|
+
headers.set(conf.uaHeader ?? "user-agent", conf.userAgent ?? config_js_1.SDK_METADATA.userAgent);
|
|
119
|
+
}
|
|
120
|
+
const fetchOptions = {
|
|
121
|
+
...options?.fetchOptions,
|
|
122
|
+
...options,
|
|
123
|
+
};
|
|
124
|
+
if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
|
|
125
|
+
const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
|
|
126
|
+
fetchOptions.signal = timeoutSignal;
|
|
127
|
+
}
|
|
128
|
+
if (conf.body instanceof ReadableStream) {
|
|
129
|
+
Object.assign(fetchOptions, { duplex: "half" });
|
|
130
|
+
}
|
|
131
|
+
let input;
|
|
132
|
+
try {
|
|
133
|
+
input = __classPrivateFieldGet(this, _ClientSDK_hooks, "f").beforeCreateRequest(context, {
|
|
134
|
+
url: reqURL,
|
|
135
|
+
options: {
|
|
136
|
+
...fetchOptions,
|
|
137
|
+
body: conf.body ?? null,
|
|
138
|
+
headers,
|
|
139
|
+
method,
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.UnexpectedClientError("Create request hook failed to execute", {
|
|
145
|
+
cause: err,
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
return (0, fp_js_1.OK)(new Request(input.url, input.options));
|
|
149
|
+
}
|
|
150
|
+
async _do(request, options) {
|
|
151
|
+
const { context, errorCodes } = options;
|
|
152
|
+
return (0, retries_js_1.retry)(async () => {
|
|
153
|
+
const req = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").beforeRequest(context, request.clone());
|
|
154
|
+
await logRequest(__classPrivateFieldGet(this, _ClientSDK_logger, "f"), req).catch((e) => __classPrivateFieldGet(this, _ClientSDK_logger, "f")?.log("Failed to log request:", e));
|
|
155
|
+
let response = await __classPrivateFieldGet(this, _ClientSDK_httpClient, "f").request(req);
|
|
156
|
+
try {
|
|
157
|
+
if ((0, http_js_1.matchStatusCode)(response, errorCodes)) {
|
|
158
|
+
const result = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").afterError(context, response, null);
|
|
159
|
+
if (result.error) {
|
|
160
|
+
throw result.error;
|
|
161
|
+
}
|
|
162
|
+
response = result.response || response;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
response = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").afterSuccess(context, response);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
await logResponse(__classPrivateFieldGet(this, _ClientSDK_logger, "f"), response, req)
|
|
170
|
+
.catch(e => __classPrivateFieldGet(this, _ClientSDK_logger, "f")?.log("Failed to log response:", e));
|
|
171
|
+
}
|
|
172
|
+
return response;
|
|
173
|
+
}, { config: options.retryConfig, statusCodes: options.retryCodes }).then((r) => (0, fp_js_1.OK)(r), (err) => {
|
|
174
|
+
switch (true) {
|
|
175
|
+
case (0, http_js_1.isAbortError)(err):
|
|
176
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.RequestAbortedError("Request aborted by client", {
|
|
177
|
+
cause: err,
|
|
178
|
+
}));
|
|
179
|
+
case (0, http_js_1.isTimeoutError)(err):
|
|
180
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.RequestTimeoutError("Request timed out", { cause: err }));
|
|
181
|
+
case (0, http_js_1.isConnectionError)(err):
|
|
182
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.ConnectionError("Unable to make request", { cause: err }));
|
|
183
|
+
default:
|
|
184
|
+
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.UnexpectedClientError("Unexpected HTTP client error", {
|
|
185
|
+
cause: err,
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.ClientSDK = ClientSDK;
|
|
192
|
+
_ClientSDK_httpClient = new WeakMap(), _ClientSDK_hooks = new WeakMap(), _ClientSDK_logger = new WeakMap();
|
|
193
|
+
const jsonLikeContentTypeRE = /(application|text)\/.*?\+*json.*/;
|
|
194
|
+
const jsonlLikeContentTypeRE = /(application|text)\/(.*?\+*\bjsonl\b.*|.*?\+*\bx-ndjson\b.*)/;
|
|
195
|
+
async function logRequest(logger, req) {
|
|
196
|
+
if (!logger) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const contentType = req.headers.get("content-type");
|
|
200
|
+
const ct = contentType?.split(";")[0] || "";
|
|
201
|
+
logger.group(`> Request: ${req.method} ${req.url}`);
|
|
202
|
+
logger.group("Headers:");
|
|
203
|
+
for (const [k, v] of req.headers.entries()) {
|
|
204
|
+
logger.log(`${k}: ${v}`);
|
|
205
|
+
}
|
|
206
|
+
logger.groupEnd();
|
|
207
|
+
logger.group("Body:");
|
|
208
|
+
switch (true) {
|
|
209
|
+
case jsonLikeContentTypeRE.test(ct):
|
|
210
|
+
logger.log(await req.clone().json());
|
|
211
|
+
break;
|
|
212
|
+
case ct.startsWith("text/"):
|
|
213
|
+
logger.log(await req.clone().text());
|
|
214
|
+
break;
|
|
215
|
+
case ct === "multipart/form-data": {
|
|
216
|
+
const body = await req.clone().formData();
|
|
217
|
+
for (const [k, v] of body) {
|
|
218
|
+
const vlabel = v instanceof Blob ? "<Blob>" : v;
|
|
219
|
+
logger.log(`${k}: ${vlabel}`);
|
|
220
|
+
}
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
default:
|
|
224
|
+
logger.log(`<${contentType}>`);
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
logger.groupEnd();
|
|
228
|
+
logger.groupEnd();
|
|
229
|
+
}
|
|
230
|
+
async function logResponse(logger, res, req) {
|
|
231
|
+
if (!logger) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const contentType = res.headers.get("content-type");
|
|
235
|
+
const ct = contentType?.split(";")[0] || "";
|
|
236
|
+
logger.group(`< Response: ${req.method} ${req.url}`);
|
|
237
|
+
logger.log("Status Code:", res.status, res.statusText);
|
|
238
|
+
logger.group("Headers:");
|
|
239
|
+
for (const [k, v] of res.headers.entries()) {
|
|
240
|
+
logger.log(`${k}: ${v}`);
|
|
241
|
+
}
|
|
242
|
+
logger.groupEnd();
|
|
243
|
+
logger.group("Body:");
|
|
244
|
+
switch (true) {
|
|
245
|
+
case (0, http_js_1.matchContentType)(res, "application/json")
|
|
246
|
+
|| jsonLikeContentTypeRE.test(ct) && !jsonlLikeContentTypeRE.test(ct):
|
|
247
|
+
logger.log(await res.clone().json());
|
|
248
|
+
break;
|
|
249
|
+
case (0, http_js_1.matchContentType)(res, "application/jsonl")
|
|
250
|
+
|| jsonlLikeContentTypeRE.test(ct):
|
|
251
|
+
logger.log(await res.clone().text());
|
|
252
|
+
break;
|
|
253
|
+
case (0, http_js_1.matchContentType)(res, "text/event-stream"):
|
|
254
|
+
logger.log(`<${contentType}>`);
|
|
255
|
+
break;
|
|
256
|
+
case (0, http_js_1.matchContentType)(res, "text/*"):
|
|
257
|
+
logger.log(await res.clone().text());
|
|
258
|
+
break;
|
|
259
|
+
case (0, http_js_1.matchContentType)(res, "multipart/form-data"): {
|
|
260
|
+
const body = await res.clone().formData();
|
|
261
|
+
for (const [k, v] of body) {
|
|
262
|
+
const vlabel = v instanceof Blob ? "<Blob>" : v;
|
|
263
|
+
logger.log(`${k}: ${vlabel}`);
|
|
264
|
+
}
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
default:
|
|
268
|
+
logger.log(`<${contentType}>`);
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
logger.groupEnd();
|
|
272
|
+
logger.groupEnd();
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=sdks.js.map
|