@zenglobal/api-client 5.0.16 → 5.1.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/README.md +61 -13
- package/dist/configure.d.ts +27 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +55 -6
- package/dist/configure.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -93,15 +93,16 @@ Both error classes extend `Error`, so `instanceof Error` works for catch-all han
|
|
|
93
93
|
|
|
94
94
|
## Configuration Options
|
|
95
95
|
|
|
96
|
-
| Option
|
|
97
|
-
|
|
|
98
|
-
| `baseUrl`
|
|
99
|
-
| `username`
|
|
100
|
-
| `password`
|
|
101
|
-
| `auth`
|
|
102
|
-
| `partner`
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
96
|
+
| Option | Type | Default | Description |
|
|
97
|
+
| ----------- | ------------ | -------------- | ---------------------------------------------------------------------- |
|
|
98
|
+
| `baseUrl` | `string` | — | Zen API base URL |
|
|
99
|
+
| `username` | `string` | — | HTTP Basic Auth username (or use `auth`) |
|
|
100
|
+
| `password` | `string` | — | HTTP Basic Auth password (or use `auth`) |
|
|
101
|
+
| `auth` | `ZenAuth` | — | OAuth 2.0 client_credentials config (alternative to username/password) |
|
|
102
|
+
| `partner` | `ZenPartner` | — | Partner identification (see below) |
|
|
103
|
+
| `companyId` | `string` | — | Target company (`X-COMPANY-ID`); required with `mode: "organisation"` |
|
|
104
|
+
| `timeout` | `number` | `30000` | Request timeout in ms |
|
|
105
|
+
| `retry` | `object` | `{ limit: 3 }` | Retry configuration |
|
|
105
106
|
|
|
106
107
|
### OAuth client_credentials
|
|
107
108
|
|
|
@@ -121,14 +122,61 @@ configureZenClient({
|
|
|
121
122
|
clientId: process.env.ZEN_CLIENT_ID,
|
|
122
123
|
clientSecret: process.env.ZEN_CLIENT_SECRET,
|
|
123
124
|
// scope: "read write", // optional; space-delimited
|
|
124
|
-
// tokenUrl: "https://auth.
|
|
125
|
+
// tokenUrl: "https://auth-dev.zenglobal.au/oauth/token", // override for development
|
|
125
126
|
},
|
|
126
127
|
});
|
|
127
128
|
```
|
|
128
129
|
|
|
129
|
-
The token endpoint defaults to
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
The token endpoint defaults to production and is a separate host from
|
|
131
|
+
`baseUrl`. Override it via `auth.tokenUrl` per stage:
|
|
132
|
+
|
|
133
|
+
| Stage | Token endpoint |
|
|
134
|
+
| -------------------------------- | ------------------------------------------- |
|
|
135
|
+
| local | `https://auth.zendev.au/oauth/token` |
|
|
136
|
+
| development (auth-dev / staging) | `https://auth-dev.zenglobal.au/oauth/token` |
|
|
137
|
+
| production (default) | `https://auth.zenglobal.au/oauth/token` |
|
|
138
|
+
|
|
139
|
+
`auth.zendev.au` is the **local** dev-proxy host, not development. Pointing a
|
|
140
|
+
staging consumer at production has caused a prod issuer leak before — see
|
|
141
|
+
[Token endpoints](../../docs/user-guides/members-portal-m2m.md#token-endpoints)
|
|
142
|
+
for the authoritative table.
|
|
143
|
+
|
|
144
|
+
Token-endpoint failures throw `ZenAuthError`.
|
|
145
|
+
|
|
146
|
+
### Organisation credentials
|
|
147
|
+
|
|
148
|
+
An organisation credential is a single OAuth client that can act as any
|
|
149
|
+
company in its organisation. The token names the organisation; each request
|
|
150
|
+
names the company via `X-COMPANY-ID`. Bind the company at construction and
|
|
151
|
+
build one client per company:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
const auth = {
|
|
155
|
+
mode: "organisation",
|
|
156
|
+
clientId: process.env.ZEN_OAUTH_CLIENT_ID,
|
|
157
|
+
clientSecret: process.env.ZEN_OAUTH_CLIENT_SECRET,
|
|
158
|
+
} as const;
|
|
159
|
+
|
|
160
|
+
const bottlemart = createZenClient({
|
|
161
|
+
baseUrl: "https://api.zenglobal.au/v1",
|
|
162
|
+
partner: { partnerId: "q74vzg9o", name: "my-app", version: "1.0.0" },
|
|
163
|
+
auth,
|
|
164
|
+
companyId: "2",
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
`companyId` is required in this mode — omitting it throws at construction
|
|
169
|
+
rather than failing on the first request. Clients sharing a credential share
|
|
170
|
+
one token, so the example above mints once no matter how many companies you
|
|
171
|
+
build clients for.
|
|
172
|
+
|
|
173
|
+
The company must belong to the credential's organisation and be within its
|
|
174
|
+
allow-list, both of which the server re-reads on **every** request. Narrowing
|
|
175
|
+
the allow-list or deactivating the client therefore takes effect on the next
|
|
176
|
+
call, not at token expiry.
|
|
177
|
+
|
|
178
|
+
`companyId` is also accepted in the other auth modes, where the server honours
|
|
179
|
+
it only when it names the credential's own chain.
|
|
132
180
|
|
|
133
181
|
### Partner Identification
|
|
134
182
|
|
package/dist/configure.d.ts
CHANGED
|
@@ -24,6 +24,21 @@ export type ZenAuth = {
|
|
|
24
24
|
scope?: string;
|
|
25
25
|
/** Token endpoint override; defaults to DEFAULT_TOKEN_URL. */
|
|
26
26
|
tokenUrl?: string;
|
|
27
|
+
} | {
|
|
28
|
+
/**
|
|
29
|
+
* Organisation-scoped credential (ZC-6634): a model-D OAuth client
|
|
30
|
+
* carrying `organisation_id` rather than a single chaincode. Requires
|
|
31
|
+
* `companyId` on the client config — the token says which organisation
|
|
32
|
+
* this client speaks for, and `X-COMPANY-ID` says which company inside
|
|
33
|
+
* it this client is acting as.
|
|
34
|
+
*/
|
|
35
|
+
mode: "organisation";
|
|
36
|
+
clientId: string;
|
|
37
|
+
clientSecret: string;
|
|
38
|
+
/** Optional space-delimited scope string. */
|
|
39
|
+
scope?: string;
|
|
40
|
+
/** Token endpoint override; defaults to DEFAULT_TOKEN_URL. */
|
|
41
|
+
tokenUrl?: string;
|
|
27
42
|
};
|
|
28
43
|
/** Fully-resolved auth with all defaults applied. */
|
|
29
44
|
export type ResolvedAuth = {
|
|
@@ -48,6 +63,16 @@ export interface ZenClientConfig {
|
|
|
48
63
|
auth?: ZenAuth;
|
|
49
64
|
/** Partner identification — sets the zen-client-user-agent header */
|
|
50
65
|
partner: ZenPartner;
|
|
66
|
+
/**
|
|
67
|
+
* Target company for this client, sent as `X-COMPANY-ID` on every request.
|
|
68
|
+
*
|
|
69
|
+
* Required for `mode: "organisation"`. Optional in the other modes, where
|
|
70
|
+
* the server accepts it only when it names the credential's own chain —
|
|
71
|
+
* see the resolution table in ZC-6440.
|
|
72
|
+
*
|
|
73
|
+
* An empty string is treated as absent (no `X-COMPANY-ID` header sent).
|
|
74
|
+
*/
|
|
75
|
+
companyId?: string;
|
|
51
76
|
/** Request timeout in milliseconds (default: 30000) */
|
|
52
77
|
timeout?: number;
|
|
53
78
|
/** Retry configuration (default: { limit: 3 }) */
|
|
@@ -58,7 +83,8 @@ export interface ZenClientConfig {
|
|
|
58
83
|
/**
|
|
59
84
|
* Resolve the effective auth strategy: an explicit `auth` field wins;
|
|
60
85
|
* otherwise fall back to top-level username/password as Basic. Throws if
|
|
61
|
-
* neither yields usable credentials.
|
|
86
|
+
* neither yields usable credentials. `mode: "organisation"` normalises to a
|
|
87
|
+
* `clientCredentials` resolved shape and requires `config.companyId`.
|
|
62
88
|
*/
|
|
63
89
|
export declare function resolveAuth(config: ZenClientConfig): ResolvedAuth;
|
|
64
90
|
/**
|
package/dist/configure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKvD,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,8CAA8C;AAC9C,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEN,qDAAqD;AACrD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,OAAO,EAAE,UAAU,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAED
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKvD,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE,8CAA8C;AAC9C,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IACE;;;;;;OAMG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEN,qDAAqD;AACrD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,OAAO,EAAE,UAAU,CAAC;IACpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CA8CjE;AAiMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA8ChE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAuC/D"}
|
package/dist/configure.js
CHANGED
|
@@ -7,9 +7,27 @@ export const DEFAULT_TOKEN_URL = "https://auth.zenglobal.au/oauth/token";
|
|
|
7
7
|
/**
|
|
8
8
|
* Resolve the effective auth strategy: an explicit `auth` field wins;
|
|
9
9
|
* otherwise fall back to top-level username/password as Basic. Throws if
|
|
10
|
-
* neither yields usable credentials.
|
|
10
|
+
* neither yields usable credentials. `mode: "organisation"` normalises to a
|
|
11
|
+
* `clientCredentials` resolved shape and requires `config.companyId`.
|
|
11
12
|
*/
|
|
12
13
|
export function resolveAuth(config) {
|
|
14
|
+
if (config.auth?.mode === "organisation") {
|
|
15
|
+
if (!config.companyId) {
|
|
16
|
+
throw new Error('createZenClient: `mode: "organisation"` requires `companyId` — an ' +
|
|
17
|
+
"organisation credential must name the company it is acting as.");
|
|
18
|
+
}
|
|
19
|
+
// Normalises to clientCredentials: on the wire an organisation
|
|
20
|
+
// credential's client_credentials exchange is byte-identical to a
|
|
21
|
+
// company-scoped one. The distinct input mode exists only to enforce the
|
|
22
|
+
// guard above at construction, instead of taking a 4xx on the first call.
|
|
23
|
+
return {
|
|
24
|
+
mode: "clientCredentials",
|
|
25
|
+
clientId: config.auth.clientId,
|
|
26
|
+
clientSecret: config.auth.clientSecret,
|
|
27
|
+
scope: config.auth.scope,
|
|
28
|
+
tokenUrl: config.auth.tokenUrl ?? DEFAULT_TOKEN_URL,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
13
31
|
if (config.auth?.mode === "clientCredentials") {
|
|
14
32
|
return {
|
|
15
33
|
mode: "clientCredentials",
|
|
@@ -45,6 +63,26 @@ function buildUserAgentHeader(partner) {
|
|
|
45
63
|
let interceptorRegistered = false;
|
|
46
64
|
let authInterceptorRegistered = false;
|
|
47
65
|
let singletonTokenManager = null;
|
|
66
|
+
// One TokenManager per distinct credential, so N clients built from a single
|
|
67
|
+
// organisation credential mint one token and refresh once rather than N times.
|
|
68
|
+
// The key is a JSON-encoded tuple: JSON.stringify escapes embedded NULs and
|
|
69
|
+
// backslashes in each field, so no credential content can shift field
|
|
70
|
+
// boundaries and collide two different credentials onto the same key.
|
|
71
|
+
const tokenManagers = new Map();
|
|
72
|
+
function tokenManagerFor(auth) {
|
|
73
|
+
const key = JSON.stringify([
|
|
74
|
+
auth.tokenUrl,
|
|
75
|
+
auth.clientId,
|
|
76
|
+
auth.clientSecret,
|
|
77
|
+
auth.scope ?? "",
|
|
78
|
+
]);
|
|
79
|
+
let manager = tokenManagers.get(key);
|
|
80
|
+
if (!manager) {
|
|
81
|
+
manager = new TokenManager(auth);
|
|
82
|
+
tokenManagers.set(key, manager);
|
|
83
|
+
}
|
|
84
|
+
return manager;
|
|
85
|
+
}
|
|
48
86
|
// Methods safe to replay on a 401 refresh: idempotent AND body-less, so the
|
|
49
87
|
// manual re-fetch (which cannot replay an already-consumed request body) loses
|
|
50
88
|
// nothing. PUT/DELETE are excluded because they may carry a body.
|
|
@@ -60,6 +98,16 @@ function applyAuthConfig(target, config, registerInterceptors) {
|
|
|
60
98
|
const userAgent = buildUserAgentHeader(config.partner);
|
|
61
99
|
const timeout = config.timeout ?? 30_000;
|
|
62
100
|
const retryLimit = config.retry?.limit ?? 3;
|
|
101
|
+
// Headers common to both auth modes. X-COMPANY-ID is bound to the client
|
|
102
|
+
// at construction: one client per company, rather than a per-request
|
|
103
|
+
// argument threaded through every call site.
|
|
104
|
+
const commonHeaders = {
|
|
105
|
+
"zen-client-user-agent": userAgent,
|
|
106
|
+
// Always emit the key. mergeHeaders merges cumulatively and deletes only
|
|
107
|
+
// on an explicit null, so omitting it would let a companyId from an
|
|
108
|
+
// earlier configureZenClient call survive into a later one that has none.
|
|
109
|
+
"X-COMPANY-ID": config.companyId || null,
|
|
110
|
+
};
|
|
63
111
|
if (auth.mode === "basic") {
|
|
64
112
|
const credentials = Buffer.from(`${auth.username}:${auth.password}`).toString("base64");
|
|
65
113
|
target.setConfig({
|
|
@@ -68,14 +116,14 @@ function applyAuthConfig(target, config, registerInterceptors) {
|
|
|
68
116
|
retry: { limit: retryLimit },
|
|
69
117
|
headers: {
|
|
70
118
|
Authorization: `Basic ${credentials}`,
|
|
71
|
-
|
|
119
|
+
...commonHeaders,
|
|
72
120
|
},
|
|
73
121
|
kyOptions: {},
|
|
74
122
|
});
|
|
75
123
|
return null;
|
|
76
124
|
}
|
|
77
125
|
// clientCredentials
|
|
78
|
-
const manager =
|
|
126
|
+
const manager = tokenManagerFor({
|
|
79
127
|
clientId: auth.clientId,
|
|
80
128
|
clientSecret: auth.clientSecret,
|
|
81
129
|
scope: auth.scope,
|
|
@@ -85,11 +133,11 @@ function applyAuthConfig(target, config, registerInterceptors) {
|
|
|
85
133
|
baseUrl: config.baseUrl,
|
|
86
134
|
timeout,
|
|
87
135
|
retry: { limit: retryLimit },
|
|
88
|
-
// Clear any stale static Authorization so the interceptor's Bearer wins
|
|
89
|
-
// (ky merges config headers over the request's; null deletes the key).
|
|
90
136
|
headers: {
|
|
137
|
+
// Clear any stale static Authorization so the interceptor's Bearer
|
|
138
|
+
// wins (ky merges config headers over the request's; null deletes).
|
|
91
139
|
Authorization: null,
|
|
92
|
-
|
|
140
|
+
...commonHeaders,
|
|
93
141
|
},
|
|
94
142
|
kyOptions: {},
|
|
95
143
|
});
|
|
@@ -183,6 +231,7 @@ export function resetConfigureState() {
|
|
|
183
231
|
interceptorRegistered = false;
|
|
184
232
|
authInterceptorRegistered = false;
|
|
185
233
|
singletonTokenManager = null;
|
|
234
|
+
tokenManagers.clear();
|
|
186
235
|
}
|
|
187
236
|
/**
|
|
188
237
|
* Configure the global Zen API client singleton with authentication and error handling.
|
package/dist/configure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAWtD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"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"}
|