@v3finance/core-sdk 0.1.0 → 0.2.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.
- package/CHANGELOG.md +397 -7
- package/README.md +215 -72
- package/dist/cjs/client.d.ts +67 -22
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +38 -2
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/core/errors.d.ts +30 -10
- package/dist/cjs/core/errors.d.ts.map +1 -1
- package/dist/cjs/core/errors.js +47 -15
- package/dist/cjs/core/errors.js.map +1 -1
- package/dist/cjs/core/gated.d.ts +21 -3
- package/dist/cjs/core/gated.d.ts.map +1 -1
- package/dist/cjs/core/gated.js +12 -3
- package/dist/cjs/core/gated.js.map +1 -1
- package/dist/cjs/core/http.d.ts +12 -8
- package/dist/cjs/core/http.d.ts.map +1 -1
- package/dist/cjs/core/http.js +130 -40
- package/dist/cjs/core/http.js.map +1 -1
- package/dist/cjs/core/pagination.d.ts +28 -1
- package/dist/cjs/core/pagination.d.ts.map +1 -1
- package/dist/cjs/core/pagination.js +36 -1
- package/dist/cjs/core/pagination.js.map +1 -1
- package/dist/cjs/generated/operations.js +1 -1
- package/dist/cjs/generated/types.d.ts +948 -172
- package/dist/cjs/generated/types.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +32 -8
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/resources/addresses.d.ts +22 -8
- package/dist/cjs/resources/addresses.d.ts.map +1 -1
- package/dist/cjs/resources/addresses.js +7 -1
- package/dist/cjs/resources/addresses.js.map +1 -1
- package/dist/cjs/resources/admin.d.ts +150 -25
- package/dist/cjs/resources/admin.d.ts.map +1 -1
- package/dist/cjs/resources/admin.js +94 -23
- package/dist/cjs/resources/admin.js.map +1 -1
- package/dist/cjs/resources/approvals.d.ts +46 -5
- package/dist/cjs/resources/approvals.d.ts.map +1 -1
- package/dist/cjs/resources/approvals.js +27 -4
- package/dist/cjs/resources/approvals.js.map +1 -1
- package/dist/cjs/resources/balances.d.ts +152 -16
- package/dist/cjs/resources/balances.d.ts.map +1 -1
- package/dist/cjs/resources/balances.js +9 -5
- package/dist/cjs/resources/balances.js.map +1 -1
- package/dist/cjs/resources/categories.d.ts +93 -21
- package/dist/cjs/resources/categories.d.ts.map +1 -1
- package/dist/cjs/resources/categories.js +65 -18
- package/dist/cjs/resources/categories.js.map +1 -1
- package/dist/cjs/resources/counterparties.d.ts +26 -3
- package/dist/cjs/resources/counterparties.d.ts.map +1 -1
- package/dist/cjs/resources/counterparties.js +17 -0
- package/dist/cjs/resources/counterparties.js.map +1 -1
- package/dist/cjs/resources/folders.d.ts +51 -10
- package/dist/cjs/resources/folders.d.ts.map +1 -1
- package/dist/cjs/resources/folders.js +36 -5
- package/dist/cjs/resources/folders.js.map +1 -1
- package/dist/cjs/resources/history.d.ts +20 -2
- package/dist/cjs/resources/history.d.ts.map +1 -1
- package/dist/cjs/resources/history.js.map +1 -1
- package/dist/cjs/resources/me.d.ts +27 -4
- package/dist/cjs/resources/me.d.ts.map +1 -1
- package/dist/cjs/resources/me.js +22 -1
- package/dist/cjs/resources/me.js.map +1 -1
- package/dist/cjs/resources/members.d.ts +19 -4
- package/dist/cjs/resources/members.d.ts.map +1 -1
- package/dist/cjs/resources/members.js +15 -6
- package/dist/cjs/resources/members.js.map +1 -1
- package/dist/cjs/resources/operations.d.ts +64 -8
- package/dist/cjs/resources/operations.d.ts.map +1 -1
- package/dist/cjs/resources/operations.js +26 -2
- package/dist/cjs/resources/operations.js.map +1 -1
- package/dist/cjs/resources/registries.d.ts +87 -9
- package/dist/cjs/resources/registries.d.ts.map +1 -1
- package/dist/cjs/resources/registries.js +54 -11
- package/dist/cjs/resources/registries.js.map +1 -1
- package/dist/cjs/resources/reports.d.ts +300 -41
- package/dist/cjs/resources/reports.d.ts.map +1 -1
- package/dist/cjs/resources/reports.js +135 -7
- package/dist/cjs/resources/reports.js.map +1 -1
- package/dist/cjs/resources/sharing.d.ts +61 -10
- package/dist/cjs/resources/sharing.d.ts.map +1 -1
- package/dist/cjs/resources/sharing.js +51 -4
- package/dist/cjs/resources/sharing.js.map +1 -1
- package/dist/cjs/resources/transfers.d.ts +26 -4
- package/dist/cjs/resources/transfers.d.ts.map +1 -1
- package/dist/cjs/resources/transfers.js +23 -1
- package/dist/cjs/resources/transfers.js.map +1 -1
- package/dist/cjs/resources/types.d.ts +20 -0
- package/dist/cjs/resources/types.d.ts.map +1 -1
- package/dist/cjs/units.d.ts.map +1 -1
- package/dist/cjs/units.js +18 -2
- package/dist/cjs/units.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/client.d.ts +67 -22
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +38 -2
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/core/errors.d.ts +30 -10
- package/dist/esm/core/errors.d.ts.map +1 -1
- package/dist/esm/core/errors.js +47 -15
- package/dist/esm/core/errors.js.map +1 -1
- package/dist/esm/core/gated.d.ts +21 -3
- package/dist/esm/core/gated.d.ts.map +1 -1
- package/dist/esm/core/gated.js +12 -3
- package/dist/esm/core/gated.js.map +1 -1
- package/dist/esm/core/http.d.ts +12 -8
- package/dist/esm/core/http.d.ts.map +1 -1
- package/dist/esm/core/http.js +131 -41
- package/dist/esm/core/http.js.map +1 -1
- package/dist/esm/core/pagination.d.ts +28 -1
- package/dist/esm/core/pagination.d.ts.map +1 -1
- package/dist/esm/core/pagination.js +36 -1
- package/dist/esm/core/pagination.js.map +1 -1
- package/dist/esm/generated/operations.js +1 -1
- package/dist/esm/generated/types.d.ts +948 -172
- package/dist/esm/generated/types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +32 -8
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +17 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources/addresses.d.ts +22 -8
- package/dist/esm/resources/addresses.d.ts.map +1 -1
- package/dist/esm/resources/addresses.js +7 -1
- package/dist/esm/resources/addresses.js.map +1 -1
- package/dist/esm/resources/admin.d.ts +150 -25
- package/dist/esm/resources/admin.d.ts.map +1 -1
- package/dist/esm/resources/admin.js +94 -23
- package/dist/esm/resources/admin.js.map +1 -1
- package/dist/esm/resources/approvals.d.ts +46 -5
- package/dist/esm/resources/approvals.d.ts.map +1 -1
- package/dist/esm/resources/approvals.js +27 -4
- package/dist/esm/resources/approvals.js.map +1 -1
- package/dist/esm/resources/balances.d.ts +152 -16
- package/dist/esm/resources/balances.d.ts.map +1 -1
- package/dist/esm/resources/balances.js +9 -5
- package/dist/esm/resources/balances.js.map +1 -1
- package/dist/esm/resources/categories.d.ts +93 -21
- package/dist/esm/resources/categories.d.ts.map +1 -1
- package/dist/esm/resources/categories.js +65 -18
- package/dist/esm/resources/categories.js.map +1 -1
- package/dist/esm/resources/counterparties.d.ts +26 -3
- package/dist/esm/resources/counterparties.d.ts.map +1 -1
- package/dist/esm/resources/counterparties.js +17 -0
- package/dist/esm/resources/counterparties.js.map +1 -1
- package/dist/esm/resources/folders.d.ts +51 -10
- package/dist/esm/resources/folders.d.ts.map +1 -1
- package/dist/esm/resources/folders.js +36 -5
- package/dist/esm/resources/folders.js.map +1 -1
- package/dist/esm/resources/history.d.ts +20 -2
- package/dist/esm/resources/history.d.ts.map +1 -1
- package/dist/esm/resources/history.js.map +1 -1
- package/dist/esm/resources/me.d.ts +27 -4
- package/dist/esm/resources/me.d.ts.map +1 -1
- package/dist/esm/resources/me.js +22 -1
- package/dist/esm/resources/me.js.map +1 -1
- package/dist/esm/resources/members.d.ts +19 -4
- package/dist/esm/resources/members.d.ts.map +1 -1
- package/dist/esm/resources/members.js +15 -6
- package/dist/esm/resources/members.js.map +1 -1
- package/dist/esm/resources/operations.d.ts +64 -8
- package/dist/esm/resources/operations.d.ts.map +1 -1
- package/dist/esm/resources/operations.js +26 -2
- package/dist/esm/resources/operations.js.map +1 -1
- package/dist/esm/resources/registries.d.ts +87 -9
- package/dist/esm/resources/registries.d.ts.map +1 -1
- package/dist/esm/resources/registries.js +54 -11
- package/dist/esm/resources/registries.js.map +1 -1
- package/dist/esm/resources/reports.d.ts +300 -41
- package/dist/esm/resources/reports.d.ts.map +1 -1
- package/dist/esm/resources/reports.js +135 -7
- package/dist/esm/resources/reports.js.map +1 -1
- package/dist/esm/resources/sharing.d.ts +61 -10
- package/dist/esm/resources/sharing.d.ts.map +1 -1
- package/dist/esm/resources/sharing.js +51 -4
- package/dist/esm/resources/sharing.js.map +1 -1
- package/dist/esm/resources/transfers.d.ts +26 -4
- package/dist/esm/resources/transfers.d.ts.map +1 -1
- package/dist/esm/resources/transfers.js +23 -1
- package/dist/esm/resources/transfers.js.map +1 -1
- package/dist/esm/resources/types.d.ts +20 -0
- package/dist/esm/resources/types.d.ts.map +1 -1
- package/dist/esm/units.d.ts.map +1 -1
- package/dist/esm/units.js +18 -2
- package/dist/esm/units.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/docs/concepts.md +191 -0
- package/docs/errors.md +471 -0
- package/package.json +7 -6
- package/src/client.ts +89 -25
- package/src/core/errors.ts +49 -15
- package/src/core/gated.ts +22 -4
- package/src/core/http.ts +156 -46
- package/src/core/pagination.ts +38 -1
- package/src/generated/operations.ts +1 -1
- package/src/generated/types.ts +983 -173
- package/src/index.ts +64 -7
- package/src/resources/addresses.ts +23 -8
- package/src/resources/admin.ts +186 -33
- package/src/resources/approvals.ts +55 -9
- package/src/resources/balances.ts +186 -14
- package/src/resources/categories.ts +125 -30
- package/src/resources/counterparties.ts +23 -6
- package/src/resources/folders.ts +74 -18
- package/src/resources/history.ts +27 -2
- package/src/resources/me.ts +30 -5
- package/src/resources/members.ts +26 -7
- package/src/resources/operations.ts +73 -8
- package/src/resources/registries.ts +90 -11
- package/src/resources/reports.ts +348 -67
- package/src/resources/sharing.ts +71 -18
- package/src/resources/transfers.ts +33 -5
- package/src/resources/types.ts +20 -0
- package/src/units.ts +19 -2
- package/src/version.ts +1 -1
package/dist/cjs/version.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** SDK version, sent in the `user-agent` header. */
|
|
2
|
-
export declare const SDK_VERSION = "0.
|
|
2
|
+
export declare const SDK_VERSION = "0.2.0";
|
|
3
3
|
/** Default API base URL. */
|
|
4
4
|
export declare const DEFAULT_BASE_URL = "https://policy-engine-rest.ezig.workers.dev";
|
|
5
5
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cjs/version.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DEFAULT_BASE_URL = exports.SDK_VERSION = void 0;
|
|
4
4
|
/** SDK version, sent in the `user-agent` header. */
|
|
5
|
-
exports.SDK_VERSION = '0.
|
|
5
|
+
exports.SDK_VERSION = '0.2.0';
|
|
6
6
|
/** Default API base URL. */
|
|
7
7
|
exports.DEFAULT_BASE_URL = 'https://policy-engine-rest.ezig.workers.dev';
|
|
8
8
|
//# sourceMappingURL=version.js.map
|
package/dist/esm/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HttpClient, type ClientOptions } from './core/http.js';
|
|
2
|
-
import type { CreateVaultBody, Health, VaultDetail } from './generated/types.js';
|
|
2
|
+
import type { BuildPathBody, BuildPathResponse, CreateVaultBody, Health, ParsePathBody, ParsedPathResponse, UserProfile, VaultDetail, VaultListItem } from './generated/types.js';
|
|
3
3
|
import { AddressesResource } from './resources/addresses.js';
|
|
4
4
|
import { ApprovalsResource } from './resources/approvals.js';
|
|
5
5
|
import { BalancesResource } from './resources/balances.js';
|
|
@@ -66,21 +66,30 @@ export interface VaultScope {
|
|
|
66
66
|
readonly reports: ReportsResource;
|
|
67
67
|
readonly operations: OperationsResource;
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
/**
|
|
70
|
+
* A vault as `vaults.list()` returns it.
|
|
71
|
+
*
|
|
72
|
+
* Listing and detail are DIFFERENT shapes, so this name can only stand for
|
|
73
|
+
* one of them. A list item carries `counts` (groups, invitations, policies,
|
|
74
|
+
* members) and a stripped-down `networks` (id, code, name, coinType); the
|
|
75
|
+
* detail response carries full `Network` records and the whole `routes` tree,
|
|
76
|
+
* and no counts at all. `vaults.get()` is therefore typed `VaultDetail`, not
|
|
77
|
+
* this.
|
|
78
|
+
*
|
|
79
|
+
* @deprecated Use `VaultListItem` directly. The name survives only because
|
|
80
|
+
* dropping an exported one breaks consumers: it used to be a hand-written
|
|
81
|
+
* interface that declared `id`, `code` and `name` and swept everything else
|
|
82
|
+
* into an index signature, which described neither shape — `counts` and
|
|
83
|
+
* `routes` alike arrived as `unknown`.
|
|
84
|
+
*/
|
|
85
|
+
export type VaultSummary = VaultListItem;
|
|
86
|
+
/**
|
|
87
|
+
* The caller's own profile — what `me.profile()` and `me.updateProfile()`
|
|
88
|
+
* both answer with.
|
|
89
|
+
*
|
|
90
|
+
* @deprecated Use `UserProfile` directly; the name is kept for consumers.
|
|
91
|
+
*/
|
|
92
|
+
export type Profile = UserProfile;
|
|
84
93
|
export declare class CoreClient {
|
|
85
94
|
/** Low-level access for endpoints the resources do not cover yet. */
|
|
86
95
|
readonly http: HttpClient;
|
|
@@ -88,9 +97,22 @@ export declare class CoreClient {
|
|
|
88
97
|
/** Scope of one vault. Build it at the call site; do not store it. */
|
|
89
98
|
vault(code: string): VaultScope;
|
|
90
99
|
readonly vaults: {
|
|
91
|
-
/**
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Administrators only: a plain member sees their own vault through
|
|
102
|
+
* `me.vault()`. Not paginated and not filterable — the whole list comes
|
|
103
|
+
* back, newest first.
|
|
104
|
+
*/
|
|
105
|
+
list: () => Promise<VaultListItem[]>;
|
|
106
|
+
/**
|
|
107
|
+
* Full configuration of one vault: every connected network and the whole
|
|
108
|
+
* `routes` tree, disabled variants included.
|
|
109
|
+
*
|
|
110
|
+
* Open to any MEMBER of the vault, unlike `list()`, which is
|
|
111
|
+
* administrator-only (an administrator passes the membership check too).
|
|
112
|
+
* The richer payload is also why the return type differs from a list
|
|
113
|
+
* item: see `VaultSummary`.
|
|
114
|
+
*/
|
|
115
|
+
get: (code: string) => Promise<VaultDetail>;
|
|
94
116
|
/** Administrators only. */
|
|
95
117
|
create: (input: CreateVaultBody) => Promise<VaultDetail>;
|
|
96
118
|
/**
|
|
@@ -99,11 +121,34 @@ export declare class CoreClient {
|
|
|
99
121
|
* Use these rather than building the string yourself: the path is written
|
|
100
122
|
* WITHOUT apostrophes (`m/44/195/…`, not `m/44'/…`), and the segment
|
|
101
123
|
* order comes from the vault's own configuration, not from a convention.
|
|
124
|
+
*
|
|
125
|
+
* Both are open to any MEMBER of the vault; they are not
|
|
126
|
+
* administrator-only.
|
|
127
|
+
*
|
|
128
|
+
* `values` is keyed by `Route.code` and the generated type says only
|
|
129
|
+
* `unknown` per entry, because the schema's `string | number` union does
|
|
130
|
+
* not survive generation. What the server accepts: for a static route a
|
|
131
|
+
* variant `code` or its numeric `pathId`, for a dynamic route an integer
|
|
132
|
+
* in `[0, 2^31-1]`. A missing route, an unknown variant or a disabled one
|
|
133
|
+
* is a 400, not a silently skipped segment.
|
|
134
|
+
*/
|
|
135
|
+
buildDerivationPath: (code: string, body: BuildPathBody) => Promise<BuildPathResponse>;
|
|
136
|
+
/**
|
|
137
|
+
* Breaks a path back into the network and one entry per route.
|
|
138
|
+
*
|
|
139
|
+
* `segments[].variant` is absent for a dynamic route — that is the normal
|
|
140
|
+
* case, not a lookup failure. For a static route it is present even when
|
|
141
|
+
* the variant is disabled, so that legacy addresses still parse.
|
|
102
142
|
*/
|
|
103
|
-
|
|
104
|
-
parseDerivationPath: (code: string, body: unknown) => Promise<unknown>;
|
|
143
|
+
parseDerivationPath: (code: string, body: ParsePathBody) => Promise<ParsedPathResponse>;
|
|
105
144
|
};
|
|
106
|
-
/**
|
|
145
|
+
/**
|
|
146
|
+
* Liveness probe. Needs no authentication.
|
|
147
|
+
*
|
|
148
|
+
* It answers "is the worker deployed at all?" and nothing more: the handler
|
|
149
|
+
* never touches the database, so a healthy answer does NOT mean D1 is
|
|
150
|
+
* reachable. Use a real read for that.
|
|
151
|
+
*/
|
|
107
152
|
health(): Promise<Health>;
|
|
108
153
|
/** The caller's own profile, devices and permissions. */
|
|
109
154
|
readonly me: MeResource;
|
package/dist/esm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAO,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/client.js
CHANGED
|
@@ -48,8 +48,21 @@ export class CoreClient {
|
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
vaults = {
|
|
51
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Administrators only: a plain member sees their own vault through
|
|
53
|
+
* `me.vault()`. Not paginated and not filterable — the whole list comes
|
|
54
|
+
* back, newest first.
|
|
55
|
+
*/
|
|
52
56
|
list: () => this.http.request('GET', '/api/v1/vaults'),
|
|
57
|
+
/**
|
|
58
|
+
* Full configuration of one vault: every connected network and the whole
|
|
59
|
+
* `routes` tree, disabled variants included.
|
|
60
|
+
*
|
|
61
|
+
* Open to any MEMBER of the vault, unlike `list()`, which is
|
|
62
|
+
* administrator-only (an administrator passes the membership check too).
|
|
63
|
+
* The richer payload is also why the return type differs from a list
|
|
64
|
+
* item: see `VaultSummary`.
|
|
65
|
+
*/
|
|
53
66
|
get: (code) => this.http.request('GET', `/api/v1/vaults/${seg(code)}`),
|
|
54
67
|
/** Administrators only. */
|
|
55
68
|
create: (input) => this.http.request('POST', '/api/v1/vaults', { body: input }),
|
|
@@ -59,11 +72,34 @@ export class CoreClient {
|
|
|
59
72
|
* Use these rather than building the string yourself: the path is written
|
|
60
73
|
* WITHOUT apostrophes (`m/44/195/…`, not `m/44'/…`), and the segment
|
|
61
74
|
* order comes from the vault's own configuration, not from a convention.
|
|
75
|
+
*
|
|
76
|
+
* Both are open to any MEMBER of the vault; they are not
|
|
77
|
+
* administrator-only.
|
|
78
|
+
*
|
|
79
|
+
* `values` is keyed by `Route.code` and the generated type says only
|
|
80
|
+
* `unknown` per entry, because the schema's `string | number` union does
|
|
81
|
+
* not survive generation. What the server accepts: for a static route a
|
|
82
|
+
* variant `code` or its numeric `pathId`, for a dynamic route an integer
|
|
83
|
+
* in `[0, 2^31-1]`. A missing route, an unknown variant or a disabled one
|
|
84
|
+
* is a 400, not a silently skipped segment.
|
|
62
85
|
*/
|
|
63
86
|
buildDerivationPath: (code, body) => this.http.request('POST', `/api/v1/vaults/${seg(code)}/derivation-path/build`, { body }),
|
|
87
|
+
/**
|
|
88
|
+
* Breaks a path back into the network and one entry per route.
|
|
89
|
+
*
|
|
90
|
+
* `segments[].variant` is absent for a dynamic route — that is the normal
|
|
91
|
+
* case, not a lookup failure. For a static route it is present even when
|
|
92
|
+
* the variant is disabled, so that legacy addresses still parse.
|
|
93
|
+
*/
|
|
64
94
|
parseDerivationPath: (code, body) => this.http.request('POST', `/api/v1/vaults/${seg(code)}/derivation-path/parse`, { body }),
|
|
65
95
|
};
|
|
66
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Liveness probe. Needs no authentication.
|
|
98
|
+
*
|
|
99
|
+
* It answers "is the worker deployed at all?" and nothing more: the handler
|
|
100
|
+
* never touches the database, so a healthy answer does NOT mean D1 is
|
|
101
|
+
* reachable. Use a real read for that.
|
|
102
|
+
*/
|
|
67
103
|
health() {
|
|
68
104
|
return this.http.request('GET', '/');
|
|
69
105
|
}
|
package/dist/esm/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAsB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,30 @@
|
|
|
5
5
|
* wrapper has three gaps the client has to close itself — otherwise a precise
|
|
6
6
|
* error turns into "something went wrong":
|
|
7
7
|
*
|
|
8
|
-
* 1. Bodies without an `error` key pass through untouched
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* item by item.
|
|
12
|
-
* 2.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
8
|
+
* 1. Bodies without an `error` key pass through untouched — the wrapper
|
|
9
|
+
* keys off that one field. Batch sharing endpoints answer 400 with
|
|
10
|
+
* `{results:[…]}`, which is not a failure of the whole call but "some
|
|
11
|
+
* subjects were rejected", and has to be read item by item.
|
|
12
|
+
* 2. Non-JSON bodies have no wrapper at all: the layer leaves by
|
|
13
|
+
* content-type, and a thrown `HTTPException` carries its own response
|
|
14
|
+
* past it. So a 502 from the edge, a WAF 403 or a platform 429 arrive as
|
|
15
|
+
* text. `core/http.ts` reduces a short one to a flat `{error: "…"}`
|
|
16
|
+
* (dropping HTML pages) before it reaches this parser, which is why the
|
|
17
|
+
* flat string shape below is still read — and why the per-status
|
|
18
|
+
* fallback wording here is what a person ends up seeing.
|
|
19
|
+
* 3. `message` sometimes IS the code. Handlers answer `{error: "<CODE>",
|
|
20
|
+
* code: "<CODE>"}` and batch items carry `{code:"X", message:"X"}`; the
|
|
21
|
+
* wrapper copies the former into `message` faithfully. A code is not a
|
|
22
|
+
* sentence, so it must never be shown to a person as-is.
|
|
23
|
+
*
|
|
24
|
+
* What is NOT a gap any more: zod validation failures. The route hook does
|
|
25
|
+
* build a flat `{error: "amount: Required; …"}` (backend
|
|
26
|
+
* `openapi/common.ts`), but that is an intermediate form.
|
|
27
|
+
* `middleware/errorEnvelope` rewraps every JSON body carrying a string
|
|
28
|
+
* `error` into the canonical envelope, `code` derived from the status —
|
|
29
|
+
* `BAD_REQUEST` here, because the hook sets none of its own. The same layer
|
|
30
|
+
* answers an unmatched path and an uncaught throw. Reading `body.error` as a
|
|
31
|
+
* string against today's API therefore hands you an object.
|
|
16
32
|
*
|
|
17
33
|
* Because of that `code` is always present here: either the server sent one,
|
|
18
34
|
* or it is derived from the HTTP status. Branch on `code`, display `message`.
|
|
@@ -54,8 +70,12 @@ export declare function isCoreError(e: unknown): e is CoreError;
|
|
|
54
70
|
/** Convenience for `catch`: `if (hasCode(e, 'INSUFFICIENT_BALANCE'))`. */
|
|
55
71
|
export declare function hasCode(e: unknown, ...codes: readonly string[]): boolean;
|
|
56
72
|
/**
|
|
57
|
-
* Status to code,
|
|
58
|
-
*
|
|
73
|
+
* Status to code, used only when a body carried no code of its own: a proxy's
|
|
74
|
+
* HTML 502, a platform 429, an empty body.
|
|
75
|
+
*
|
|
76
|
+
* The names are the API's own names for the same statuses, so that one
|
|
77
|
+
* condition has one name whichever side produced it. 502 and 504 are the
|
|
78
|
+
* exception — the API has no envelope for them, they arrive from the edge.
|
|
59
79
|
*/
|
|
60
80
|
export declare function codeFromStatus(status: number): string;
|
|
61
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,aAAa;AACvB,oFAAoF;AAClF,MAAM;AACR,uFAAuF;GACrF,SAAS;AACX,sFAAsF;GACpF,SAAS;AACX,gEAAgE;GAC9D,SAAS;AACX,yEAAyE;GACvE,OAAO,CAAA;AAEX,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAErC,YAAY,IAAI,EAAE,aAAa,EAQ9B;CACF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6BrD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAsD1F;AAsBD,eAAO,MAAM,YAAY,UAAW,OAAO,aAAa,MAAM,KAAG,SAQ7D,CAAA;AAEJ,eAAO,MAAM,YAAY,OAAQ,MAAM,aAAa,MAAM,KAAG,SAYzD,CAAA;AAEJ,eAAO,MAAM,YAAY,cAAe,MAAM,KAAG,SAO7C,CAAA;AAEJ,eAAO,MAAM,UAAU,UAAW,OAAO,aAAa,MAAM,KAAG,SAQ3D,CAAA"}
|
package/dist/esm/core/errors.js
CHANGED
|
@@ -5,14 +5,30 @@
|
|
|
5
5
|
* wrapper has three gaps the client has to close itself — otherwise a precise
|
|
6
6
|
* error turns into "something went wrong":
|
|
7
7
|
*
|
|
8
|
-
* 1. Bodies without an `error` key pass through untouched
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* item by item.
|
|
12
|
-
* 2.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
8
|
+
* 1. Bodies without an `error` key pass through untouched — the wrapper
|
|
9
|
+
* keys off that one field. Batch sharing endpoints answer 400 with
|
|
10
|
+
* `{results:[…]}`, which is not a failure of the whole call but "some
|
|
11
|
+
* subjects were rejected", and has to be read item by item.
|
|
12
|
+
* 2. Non-JSON bodies have no wrapper at all: the layer leaves by
|
|
13
|
+
* content-type, and a thrown `HTTPException` carries its own response
|
|
14
|
+
* past it. So a 502 from the edge, a WAF 403 or a platform 429 arrive as
|
|
15
|
+
* text. `core/http.ts` reduces a short one to a flat `{error: "…"}`
|
|
16
|
+
* (dropping HTML pages) before it reaches this parser, which is why the
|
|
17
|
+
* flat string shape below is still read — and why the per-status
|
|
18
|
+
* fallback wording here is what a person ends up seeing.
|
|
19
|
+
* 3. `message` sometimes IS the code. Handlers answer `{error: "<CODE>",
|
|
20
|
+
* code: "<CODE>"}` and batch items carry `{code:"X", message:"X"}`; the
|
|
21
|
+
* wrapper copies the former into `message` faithfully. A code is not a
|
|
22
|
+
* sentence, so it must never be shown to a person as-is.
|
|
23
|
+
*
|
|
24
|
+
* What is NOT a gap any more: zod validation failures. The route hook does
|
|
25
|
+
* build a flat `{error: "amount: Required; …"}` (backend
|
|
26
|
+
* `openapi/common.ts`), but that is an intermediate form.
|
|
27
|
+
* `middleware/errorEnvelope` rewraps every JSON body carrying a string
|
|
28
|
+
* `error` into the canonical envelope, `code` derived from the status —
|
|
29
|
+
* `BAD_REQUEST` here, because the hook sets none of its own. The same layer
|
|
30
|
+
* answers an unmatched path and an uncaught throw. Reading `body.error` as a
|
|
31
|
+
* string against today's API therefore hands you an object.
|
|
16
32
|
*
|
|
17
33
|
* Because of that `code` is always present here: either the server sent one,
|
|
18
34
|
* or it is derived from the HTTP status. Branch on `code`, display `message`.
|
|
@@ -44,29 +60,37 @@ export function hasCode(e, ...codes) {
|
|
|
44
60
|
return isCoreError(e) && codes.includes(e.code);
|
|
45
61
|
}
|
|
46
62
|
/**
|
|
47
|
-
* Status to code,
|
|
48
|
-
*
|
|
63
|
+
* Status to code, used only when a body carried no code of its own: a proxy's
|
|
64
|
+
* HTML 502, a platform 429, an empty body.
|
|
65
|
+
*
|
|
66
|
+
* The names are the API's own names for the same statuses, so that one
|
|
67
|
+
* condition has one name whichever side produced it. 502 and 504 are the
|
|
68
|
+
* exception — the API has no envelope for them, they arrive from the edge.
|
|
49
69
|
*/
|
|
50
70
|
export function codeFromStatus(status) {
|
|
51
71
|
switch (status) {
|
|
52
72
|
case 400:
|
|
53
73
|
return 'BAD_REQUEST';
|
|
54
74
|
case 401:
|
|
55
|
-
return '
|
|
75
|
+
return 'UNAUTHENTICATED';
|
|
56
76
|
case 403:
|
|
57
77
|
return 'FORBIDDEN';
|
|
58
78
|
case 404:
|
|
59
79
|
return 'NOT_FOUND';
|
|
60
80
|
case 409:
|
|
61
81
|
return 'CONFLICT';
|
|
82
|
+
case 413:
|
|
83
|
+
return 'PAYLOAD_TOO_LARGE';
|
|
62
84
|
case 422:
|
|
63
|
-
return '
|
|
85
|
+
return 'UNPROCESSABLE_ENTITY';
|
|
64
86
|
case 429:
|
|
65
87
|
return 'RATE_LIMITED';
|
|
88
|
+
case 501:
|
|
89
|
+
return 'NOT_IMPLEMENTED';
|
|
66
90
|
case 502:
|
|
67
91
|
return 'BAD_GATEWAY';
|
|
68
92
|
case 503:
|
|
69
|
-
return '
|
|
93
|
+
return 'SERVICE_UNAVAILABLE';
|
|
70
94
|
case 504:
|
|
71
95
|
return 'GATEWAY_TIMEOUT';
|
|
72
96
|
default:
|
|
@@ -102,7 +126,12 @@ export function parseErrorBody(status, body, endpoint) {
|
|
|
102
126
|
: fallbackMessage(status);
|
|
103
127
|
return make(message, code, o.details);
|
|
104
128
|
}
|
|
105
|
-
// Shape 2 — a
|
|
129
|
+
// Shape 2 — a flat string `error`. No longer how validation failures reach
|
|
130
|
+
// a client (the envelope rewraps those into Shape 1), so the live producer
|
|
131
|
+
// is `core/http.ts`, which folds a short non-JSON error body into this
|
|
132
|
+
// shape. The sibling `code` is still read: handlers do put one next to a
|
|
133
|
+
// string `error`, and an older deployment without the envelope layer would
|
|
134
|
+
// deliver exactly that.
|
|
106
135
|
if (typeof inner === 'string' && inner) {
|
|
107
136
|
const flat = body.code;
|
|
108
137
|
const code = typeof flat === 'string' && flat ? flat : fallbackCode;
|
|
@@ -147,7 +176,10 @@ export const timeoutError = (ms, endpoint) => new CoreError({
|
|
|
147
176
|
kind: 'timeout',
|
|
148
177
|
code: 'TIMEOUT',
|
|
149
178
|
status: null,
|
|
150
|
-
|
|
179
|
+
// Sub-second timeouts rounded to `0s`, which reads as "no time was
|
|
180
|
+
// allowed" rather than "400ms was". Below a second the unit changes
|
|
181
|
+
// instead of the number; a whole second keeps the shorter wording.
|
|
182
|
+
message: `The server did not answer within ${ms < 1000 ? `${Math.round(ms)}ms` : `${Math.round(ms / 1000)}s`}`,
|
|
151
183
|
...(endpoint === undefined ? {} : { endpoint }),
|
|
152
184
|
});
|
|
153
185
|
export const abortedError = (endpoint) => new CoreError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/gated.d.ts
CHANGED
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* 201 — applied immediately (policy allowed it without signatures);
|
|
6
6
|
* 202 — queued for approval, funds are reserved, nothing has moved yet;
|
|
7
|
-
* 200 — a replay of the same idempotency key
|
|
8
|
-
* existing operation came back (no second
|
|
7
|
+
* 200 — on a transfer: a replay of the same idempotency key, nothing
|
|
8
|
+
* happened now and the existing operation came back (no second
|
|
9
|
+
* broadcast). Everywhere else: an ordinary applied success, because
|
|
10
|
+
* an edit is not a creation and answers 200 (see `replayOn200`).
|
|
9
11
|
*
|
|
10
12
|
* The body can be identical: a transfer returns `{transaction}` in all three.
|
|
11
13
|
* A client that reads only the body will say "sent" where the truth is
|
|
@@ -17,9 +19,18 @@
|
|
|
17
19
|
* person should be told "already sent", not "sent" a second time.
|
|
18
20
|
*/
|
|
19
21
|
export type GatedOutcome = 'applied' | 'pending' | 'replayed';
|
|
22
|
+
/**
|
|
23
|
+
* `status` is the status the server ACTUALLY answered, which is why `applied`
|
|
24
|
+
* carries `200 | 201` rather than 201 alone: an ordinary 200 success is an
|
|
25
|
+
* applied operation too (updating a counterparty, editing a label — anything
|
|
26
|
+
* gated that is not a creation). The field used to be hard-coded to 201 for
|
|
27
|
+
* those, so every gated method except `transfers.send` reported a status the
|
|
28
|
+
* server never sent, into logs and error reports where it is the one thing
|
|
29
|
+
* worth trusting. Branch on `outcome`; read `status` when you need the fact.
|
|
30
|
+
*/
|
|
20
31
|
export type Gated<TApplied, TPending = TApplied> = {
|
|
21
32
|
readonly outcome: 'applied';
|
|
22
|
-
readonly status: 201;
|
|
33
|
+
readonly status: 200 | 201;
|
|
23
34
|
readonly data: TApplied;
|
|
24
35
|
} | {
|
|
25
36
|
readonly outcome: 'replayed';
|
|
@@ -39,6 +50,13 @@ export type Gated<TApplied, TPending = TApplied> = {
|
|
|
39
50
|
* success. Telling a person "already sent" after a plain edit would be as
|
|
40
51
|
* wrong as telling them "done" after a replay, so each caller states which
|
|
41
52
|
* of the two it is instead of the helper guessing.
|
|
53
|
+
*
|
|
54
|
+
* Which also means `outcome: 'replayed'` is UNREACHABLE for every gated
|
|
55
|
+
* method other than `transfers.send`: replay protection needs an idempotency
|
|
56
|
+
* key, and the transfer body is the only place the API takes one. The
|
|
57
|
+
* three-way `switch` in `docs/concepts.md` is right for a transfer; beside a
|
|
58
|
+
* counterparty edit its `case 'replayed'` is dead, and it is not evidence
|
|
59
|
+
* that such an edit can come back as a replay.
|
|
42
60
|
*/
|
|
43
61
|
export declare function toGated<TApplied, TPending>(status: number, data: unknown, options?: {
|
|
44
62
|
replayOn200?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gated.d.ts","sourceRoot":"","sources":["../../../src/core/gated.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gated.d.ts","sourceRoot":"","sources":["../../../src/core/gated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAC3C;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACpF;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC/E;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAElF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAgB3B;AAED,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GACb,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,SAAS,GAAG,UAAU,CAAA;CAAE,CAAC,CAEhE;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GACb,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC,CAEnD"}
|
package/dist/esm/core/gated.js
CHANGED
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* 201 — applied immediately (policy allowed it without signatures);
|
|
6
6
|
* 202 — queued for approval, funds are reserved, nothing has moved yet;
|
|
7
|
-
* 200 — a replay of the same idempotency key
|
|
8
|
-
* existing operation came back (no second
|
|
7
|
+
* 200 — on a transfer: a replay of the same idempotency key, nothing
|
|
8
|
+
* happened now and the existing operation came back (no second
|
|
9
|
+
* broadcast). Everywhere else: an ordinary applied success, because
|
|
10
|
+
* an edit is not a creation and answers 200 (see `replayOn200`).
|
|
9
11
|
*
|
|
10
12
|
* The body can be identical: a transfer returns `{transaction}` in all three.
|
|
11
13
|
* A client that reads only the body will say "sent" where the truth is
|
|
@@ -25,13 +27,20 @@
|
|
|
25
27
|
* success. Telling a person "already sent" after a plain edit would be as
|
|
26
28
|
* wrong as telling them "done" after a replay, so each caller states which
|
|
27
29
|
* of the two it is instead of the helper guessing.
|
|
30
|
+
*
|
|
31
|
+
* Which also means `outcome: 'replayed'` is UNREACHABLE for every gated
|
|
32
|
+
* method other than `transfers.send`: replay protection needs an idempotency
|
|
33
|
+
* key, and the transfer body is the only place the API takes one. The
|
|
34
|
+
* three-way `switch` in `docs/concepts.md` is right for a transfer; beside a
|
|
35
|
+
* counterparty edit its `case 'replayed'` is dead, and it is not evidence
|
|
36
|
+
* that such an edit can come back as a replay.
|
|
28
37
|
*/
|
|
29
38
|
export function toGated(status, data, options = {}) {
|
|
30
39
|
switch (status) {
|
|
31
40
|
case 200:
|
|
32
41
|
return options.replayOn200
|
|
33
42
|
? { outcome: 'replayed', status: 200, data: data }
|
|
34
|
-
: { outcome: 'applied', status:
|
|
43
|
+
: { outcome: 'applied', status: 200, data: data };
|
|
35
44
|
case 201:
|
|
36
45
|
return { outcome: 'applied', status: 201, data: data };
|
|
37
46
|
case 202:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gated.js","sourceRoot":"","sources":["../../../src/core/gated.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gated.js","sourceRoot":"","sources":["../../../src/core/gated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAkBH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,IAAa,EACb,OAAO,GAA8B,EAAE;IAEvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,OAAO,CAAC,WAAW;gBACxB,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAgB,EAAE;gBAC9D,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAgB,EAAE,CAAA;QACjE,KAAK,GAAG;YACN,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAgB,EAAE,CAAA;QACpE,KAAK,GAAG;YACN,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAgB,EAAE,CAAA;QACpE;YACE,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,IAAI;gBAC1D,yDAAyD,CAC5D,CAAA;IACL,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CACvB,CAAc;IAEd,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,UAAU,CAAA;AAC5D,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,SAAS,CACvB,CAAc;IAEd,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CAAA;AAChC,CAAC"}
|
package/dist/esm/core/http.d.ts
CHANGED
|
@@ -39,15 +39,19 @@ export interface RequestOptions {
|
|
|
39
39
|
signal?: AbortSignal | undefined;
|
|
40
40
|
timeoutMs?: number | undefined;
|
|
41
41
|
/**
|
|
42
|
-
* Attempt key
|
|
42
|
+
* Attempt key. ACCEPTED AND IGNORED BY THE TRANSPORT — the working place
|
|
43
|
+
* for it is the request BODY, the way `transfers.send` passes it.
|
|
43
44
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
45
|
+
* It used to go out as an `idempotency-key` header. The server has never
|
|
46
|
+
* read that header, which by itself merely bought nothing; in a browser it
|
|
47
|
+
* cost the whole request. The API's CORS preflight allows exactly
|
|
48
|
+
* `Content-Type` and `Authorization` (`allowHeaders`, backend
|
|
49
|
+
* `src/index.ts`), so the extra header failed the preflight and the call
|
|
50
|
+
* was never sent at all — a money request that could not reach the server,
|
|
51
|
+
* and a "network error" that no retry explains. Replay protection is
|
|
52
|
+
* resolved from the `idempotencyKey` FIELD of the body and nowhere else.
|
|
53
|
+
*
|
|
54
|
+
* @deprecated The transport sends this nowhere. Put the key in the body.
|
|
51
55
|
*/
|
|
52
56
|
idempotencyKey?: string | undefined;
|
|
53
57
|
headers?: Record<string, string> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,aAAa,CAAA;AAwBpB,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;AAE1C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,SAAS,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAA;IAE/C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAEhC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExD,8EAA8E;IAC9E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3D,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IAE/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAC7C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,sFAAsF;AACtF,eAAO,MAAM,GAAG,UAAW,MAAM,KAAG,MAAmC,CAAA;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAa/D;AAED,qBAAa,UAAU;;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAKxB,YAAY,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAWvD;IAED,yFAAyF;IACnF,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvF;IAED;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqB5F;IAED,qFAAqF;IAC/E,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAYzB;CA8FF"}
|