@w6w/react 0.9.9 → 0.9.13
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 +100 -52
- package/dist/mod.d.ts +2 -0
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +2 -0
- package/dist/mod.js.map +1 -1
- package/dist/src/W6WProvider.d.ts +27 -4
- package/dist/src/W6WProvider.d.ts.map +1 -1
- package/dist/src/W6WProvider.js +39 -6
- package/dist/src/W6WProvider.js.map +1 -1
- package/dist/src/adapter.d.ts.map +1 -1
- package/dist/src/adapter.js +4 -23
- package/dist/src/adapter.js.map +1 -1
- package/dist/src/flow-workflow.d.ts +109 -0
- package/dist/src/flow-workflow.d.ts.map +1 -0
- package/dist/src/flow-workflow.js +72 -0
- package/dist/src/flow-workflow.js.map +1 -0
- package/dist/src/session.d.ts +51 -0
- package/dist/src/session.d.ts.map +1 -0
- package/dist/src/session.js +249 -0
- package/dist/src/session.js.map +1 -0
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ surface (`me`, `documents`, `vars`, `connections`, `workflows`, `functions`, `ru
|
|
|
6
6
|
`createW6WUiAdapter`, a structural bridge from a `W6WClient` to
|
|
7
7
|
[`@w6w/ui`](https://github.com/w6w-io/w6w-ui)'s `W6WApi` contract.
|
|
8
8
|
|
|
9
|
-
License: MIT · Version: 0.9.
|
|
9
|
+
License: MIT · Version: 0.9.13 · Guides: [docs.w6w.io/clients/react](https://docs.w6w.io/clients/react/)
|
|
10
10
|
(with a [hooks reference](https://docs.w6w.io/clients/react/hooks/) and a
|
|
11
11
|
[Next.js walkthrough](https://docs.w6w.io/clients/react/nextjs/))
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ npm install @w6w/react react
|
|
|
22
22
|
|
|
23
23
|
`@w6w/sdk` comes in as a dependency. Add it to your own `package.json` too
|
|
24
24
|
(`npm install @w6w/sdk`) if you import from it directly — `ApiError` for an
|
|
25
|
-
`instanceof` check, or `
|
|
25
|
+
`instanceof` check, or `createEmbedSessionClient` from `@w6w/sdk/server` on your backend.
|
|
26
26
|
|
|
27
27
|
`react-dom` is not a dependency of this package — `<W6WProvider>`'s only JSX is a
|
|
28
28
|
context wrapper (`<Ctx.Provider>`), never a DOM element of its own. Your app already
|
|
@@ -76,7 +76,23 @@ function DocList() {
|
|
|
76
76
|
|
|
77
77
|
A host juggling more than one signed-in identity — or one that does not have a
|
|
78
78
|
token/identity yet at mount time — needs more than the Quick start's one-shot
|
|
79
|
-
`token` prop. `<W6WProvider>` takes
|
|
79
|
+
`token` prop. `<W6WProvider>` takes more props for exactly this:
|
|
80
|
+
|
|
81
|
+
- **`getSession`** (with **`renewBeforeMs`**, default `30000`) — instead of `token`,
|
|
82
|
+
one `() => Promise<{token, expiresAt, expiresIn?}>` callback that calls your
|
|
83
|
+
backend's session endpoint. The provider calls it lazily and one call at a time,
|
|
84
|
+
caches the session, renews it before expiry (never later than half the
|
|
85
|
+
session's lifetime) and re-checks when a hidden tab becomes visible; you write
|
|
86
|
+
no cache or timer. Pass exactly one of `token` or `getSession` (both, or
|
|
87
|
+
neither, throws). Needs 0.9.13 or later. `useW6WSession()` returns
|
|
88
|
+
`{status, expiresAt, error, refresh}`, where `status` is `"loading"`, `"ready"`,
|
|
89
|
+
`"renewing"`, `"expired"` or `"error"`. Keep the identity switch in
|
|
90
|
+
`identityKey` (it must change when the user or account behind `getSession`
|
|
91
|
+
does). Place the provider above any `<Suspense>` boundary that can re-suspend: one
|
|
92
|
+
above or around it detaches the store, and reads error with "disposed" until it
|
|
93
|
+
re-shows. A mutation in flight at an identity switch is not cancelled, keeps the
|
|
94
|
+
old client's request and token, still lands its result in the hook's state, and
|
|
95
|
+
that state is not reset (unchanged).
|
|
80
96
|
|
|
81
97
|
- **`ready`** (default `true`) — set it `false` until you actually have a
|
|
82
98
|
token/identity to embed with. While `false`, every read hook reports
|
|
@@ -105,26 +121,24 @@ token/identity yet at mount time — needs more than the Quick start's one-shot
|
|
|
105
121
|
|
|
106
122
|
import { W6WProvider } from "@w6w/react";
|
|
107
123
|
|
|
124
|
+
// Your own backend route: it holds the tenant credentials and answers with a
|
|
125
|
+
// session ({ token, expiresAt, ... }) for this signed-in user, built with
|
|
126
|
+
// `createEmbedSessionClient` from `@w6w/sdk/server`.
|
|
127
|
+
async function getSession() {
|
|
128
|
+
const res = await fetch("/api/w6w-session", { method: "POST" });
|
|
129
|
+
if (!res.ok) throw new Error(`session route answered ${res.status}`);
|
|
130
|
+
return res.json();
|
|
131
|
+
}
|
|
132
|
+
|
|
108
133
|
export default function W6WLayout({ children }: { children: React.ReactNode }) {
|
|
109
134
|
return (
|
|
110
135
|
<W6WProvider
|
|
111
136
|
baseUrl="https://api.example.com"
|
|
112
|
-
|
|
137
|
+
getSession={getSession}
|
|
113
138
|
identityKey={`${session.subject}:${session.account}`}
|
|
114
139
|
headers={{ "X-W6W-Tenant": session.tenantId }}
|
|
115
140
|
refreshOnUnauthorized
|
|
116
141
|
onUnauthorized={() => redirectToLogin()}
|
|
117
|
-
token={async () => {
|
|
118
|
-
// Your own backend route, not w6w's — it holds whatever credential
|
|
119
|
-
// mints a w6w token for this signed-in user (a tenant exchange, a
|
|
120
|
-
// cached short-lived token, …). This is a Next.js App Router layout,
|
|
121
|
-
// so it is a Client Component ("use client" above) even though the
|
|
122
|
-
// token-minting route itself runs on your server.
|
|
123
|
-
const res = await fetch("/api/w6w-token");
|
|
124
|
-
if (!res.ok) return null;
|
|
125
|
-
const { token } = await res.json();
|
|
126
|
-
return token;
|
|
127
|
-
}}
|
|
128
142
|
>
|
|
129
143
|
{children}
|
|
130
144
|
</W6WProvider>
|
|
@@ -133,8 +147,7 @@ export default function W6WLayout({ children }: { children: React.ReactNode }) {
|
|
|
133
147
|
```
|
|
134
148
|
|
|
135
149
|
The [Next.js walkthrough](https://docs.w6w.io/clients/react/nextjs/) builds the
|
|
136
|
-
`/api/w6w-
|
|
137
|
-
cached, refreshable token supplier.
|
|
150
|
+
`/api/w6w-session` route this example fetches from, with `createEmbedSessionClient`.
|
|
138
151
|
|
|
139
152
|
## Using this package with `@w6w/ui`
|
|
140
153
|
|
|
@@ -164,19 +177,19 @@ function App() {
|
|
|
164
177
|
}
|
|
165
178
|
```
|
|
166
179
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
change whenever `@w6w/ui` becomes reachable another way (a `git+https://`
|
|
171
|
-
dependency on the public repo, or a private registry). `npm i @w6w/ui` does not
|
|
172
|
-
resolve yet.
|
|
180
|
+
`@w6w/ui@0.1.0` is available on npm. Install it with `npm i @w6w/ui`.
|
|
181
|
+
`createW6WUiAdapter` targets its `W6WApi` contract structurally and has no runtime
|
|
182
|
+
dependency on the UI package.
|
|
173
183
|
|
|
174
184
|
`createW6WUiAdapter` is built on `@w6w/sdk/console` for most members — the SAME
|
|
175
185
|
namespace `packages/studio`'s own facade uses for these routes
|
|
176
186
|
(`packages/ui/src/createW6WApi.ts` is the *other* hand-rolled client for them; this
|
|
177
187
|
package is not a third one) — and on the BASE `client.functions.*`/
|
|
178
188
|
`client.workflows.*` surface for `listFunctions`/`getFunction`/`invokeFunction`/
|
|
179
|
-
`listWorkflows`/`getWorkflow`/`runWorkflow`.
|
|
189
|
+
`listWorkflows`/`getWorkflow`/`runWorkflow`. `listAppsByIds` and `listConnections` go through
|
|
190
|
+
the public `client.apps.byIds` and `client.connections.list`. **The adapter is the supported
|
|
191
|
+
seam:** hand `createW6WUiAdapter(client)` to the UI as it is, and do not reach for the
|
|
192
|
+
console-backed internals or patch members onto it yourself. **`client.console.*` is documented
|
|
180
193
|
"Studio-internal… unstable" and is deliberately excluded from `endpoints.json`'s
|
|
181
194
|
conformance runner** (`node/src/client.ts:114-116`). That means a `console.*`
|
|
182
195
|
signature change ships with no lockstep protection for this bridge beyond
|
|
@@ -185,34 +198,69 @@ re-test the bridge on an upgrade rather than assuming it.
|
|
|
185
198
|
|
|
186
199
|
### Keeping `createW6WUiAdapter` in sync with the real `@w6w/ui`
|
|
187
200
|
|
|
188
|
-
`package.json`
|
|
189
|
-
`@w6w/
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
`package.json` pins `@w6w/ui` to npm version `0.1.0` as a dev dependency.
|
|
202
|
+
Consumers of `@w6w/react` do not install that dependency automatically; it is used
|
|
203
|
+
only by the conformance checks. The release workflow can install it in a clean
|
|
204
|
+
checkout without sibling repositories.
|
|
205
|
+
|
|
206
|
+
`src/__tests__/ui-conformance.check.ts` imports `W6WApi` and `FlowWorkflow` from
|
|
207
|
+
the UI package's public exports. It checks the adapter's return type and the
|
|
208
|
+
workflow converter in both directions. The runtime suite reads the installed
|
|
209
|
+
`dist/provider.d.ts` declaration to enumerate the real interface members.
|
|
210
|
+
|
|
211
|
+
To update the pin, change the npm version in `package.json`, refresh
|
|
212
|
+
`package-lock.json`, and run `npm test` and `npm run build`. These checks report
|
|
213
|
+
any incompatible UI contract changes.
|
|
214
|
+
|
|
215
|
+
On Node older than 22.18, run the local gate as
|
|
216
|
+
`NODE_OPTIONS=--experimental-strip-types npm test` (the tests load `.ts` files directly;
|
|
217
|
+
CI uses Node 24).
|
|
218
|
+
|
|
219
|
+
**Runtime conformance.** Assignability is checked at compile time only, so it cannot
|
|
220
|
+
see a member that is typed but missing or mis-wired at run time.
|
|
221
|
+
`src/__tests__/adapter-conformance.test.ts` closes that gap. It reads the member names
|
|
222
|
+
(21 required, 8 optional) from the installed `@w6w/ui` `provider.d.ts` declaration — not from
|
|
223
|
+
this package's hand-copied interface — and asserts each is a function on
|
|
224
|
+
`createW6WUiAdapter(client)`. It then drives every member with sentinel arguments
|
|
225
|
+
through a stub transport and asserts the exact wire request produced (forwarding), and
|
|
226
|
+
asserts that a 4xx JSON error body reaches the caller as `err.body`, deep-equal to
|
|
227
|
+
what the server sent. Nothing in it imports `@w6w/ui` at run time; the pinned UI is
|
|
228
|
+
read as text.
|
|
229
|
+
|
|
230
|
+
`toFlowWorkflow` does not validate `steps[].uses`, although the returned type declares it
|
|
231
|
+
required; a step without `uses` converts, so guard before handing it to code that reads
|
|
232
|
+
`step.uses.app`.
|
|
233
|
+
|
|
234
|
+
### Editing workflows with a typed shape
|
|
235
|
+
|
|
236
|
+
`@w6w/sdk` keeps a workflow definition opaque (`WorkflowDefinition`, a
|
|
237
|
+
`Record<string, unknown>`) on purpose, so a newer server's extra fields never break a
|
|
238
|
+
client. The visual editor wants a typed shape, so this package exports a validating
|
|
239
|
+
converter instead of a cast:
|
|
240
|
+
|
|
241
|
+
```ts
|
|
242
|
+
import { fromFlowWorkflow, toFlowWorkflow, WorkflowShapeError } from "@w6w/react";
|
|
243
|
+
|
|
244
|
+
const { workflow } = await client.workflows.get(id);
|
|
245
|
+
try {
|
|
246
|
+
const flow = toFlowWorkflow(workflow); // FlowWorkflowShape
|
|
247
|
+
// ... hand `flow` to the editor, receive an edited copy back ...
|
|
248
|
+
await client.workflows.update(id, fromFlowWorkflow(edited));
|
|
249
|
+
} catch (err) {
|
|
250
|
+
if (err instanceof WorkflowShapeError) console.error(err.issues); // [{ path, message }, ...]
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
`toFlowWorkflow` requires string `manifestVersion`/`id`/`name` and a `steps` array of
|
|
255
|
+
objects with a string `id` (plus `edges` an array, `settings` an object, `variables`
|
|
256
|
+
an array, when present); anything else throws `WorkflowShapeError` whose `issues` lists
|
|
257
|
+
every violation. It does not inspect the inside of `steps[].uses` or any other nested
|
|
258
|
+
field. Unknown keys (`retry`, `onError`, `ports`, a host's `x-*` extension) are copied
|
|
259
|
+
through in both directions, so `fromFlowWorkflow(toFlowWorkflow(def))` deep-equals
|
|
260
|
+
`def`. `FlowWorkflowShape` is a structural mirror of `@w6w/ui`'s `FlowWorkflow`, with no
|
|
261
|
+
runtime `@w6w/ui` dependency; `ui-conformance.check.ts` pins it both ways (ui's
|
|
262
|
+
`FlowWorkflow` is accepted by `fromFlowWorkflow`, and the mirror is assignable to ui's
|
|
263
|
+
`FlowWorkflow`).
|
|
216
264
|
|
|
217
265
|
## Hooks catalog
|
|
218
266
|
|
package/dist/mod.d.ts
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { VERSION } from "./src/version.ts";
|
|
16
16
|
export { type TokenSource, useW6WClient, W6WProvider, type W6WProviderProps, } from "./src/W6WProvider.tsx";
|
|
17
|
+
export { useW6WSession, type W6WSession, type W6WSessionState, type W6WSessionStatus, } from "./src/session.ts";
|
|
17
18
|
export { type MutationResult, type ReadResult, useArchiveWorkflow, useConnections, useCreateDocument, useCreateFunction, useCreateVar, useCreateWorkflow, useDeleteDocument, useDeleteFunction, useDeleteVar, useDeleteWorkflow, useDocument, useDocumentByKey, useDocuments, useFunction, useFunctions, useMe, useRun, useRunWorkflow, useUpdateDocument, useUpdateFunction, useUpdateVar, useUpdateWorkflow, useVar, useVars, useWorkflow, useWorkflows, } from "./src/hooks.ts";
|
|
18
19
|
export { createW6WUiAdapter, type W6WApi } from "./src/adapter.ts";
|
|
20
|
+
export { type FlowEdgeShape, type FlowStepShape, type FlowWorkflowShape, fromFlowWorkflow, toFlowWorkflow, WorkflowShapeError, type WorkflowShapeIssue, } from "./src/flow-workflow.ts";
|
|
19
21
|
//# sourceMappingURL=mod.d.ts.map
|
package/dist/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EACL,KAAK,WAAW,EAChB,YAAY,EACZ,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EACL,KAAK,WAAW,EAChB,YAAY,EACZ,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
|
package/dist/mod.js
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export { VERSION } from "./src/version.js";
|
|
17
17
|
export { useW6WClient, W6WProvider, } from "./src/W6WProvider.js";
|
|
18
|
+
export { useW6WSession, } from "./src/session.js";
|
|
18
19
|
export { useArchiveWorkflow, useConnections, useCreateDocument, useCreateFunction, useCreateVar, useCreateWorkflow, useDeleteDocument, useDeleteFunction, useDeleteVar, useDeleteWorkflow, useDocument, useDocumentByKey, useDocuments, useFunction, useFunctions, useMe, useRun, useRunWorkflow, useUpdateDocument, useUpdateFunction, useUpdateVar, useUpdateWorkflow, useVar, useVars, useWorkflow, useWorkflows, } from "./src/hooks.js";
|
|
19
20
|
export { createW6WUiAdapter } from "./src/adapter.js";
|
|
21
|
+
export { fromFlowWorkflow, toFlowWorkflow, WorkflowShapeError, } from "./src/flow-workflow.js";
|
|
20
22
|
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAEL,YAAY,EACZ,WAAW,GAEZ,MAAM,sBAAuB,CAAC;AAE/B,OAAO,EAGL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAe,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAEL,YAAY,EACZ,WAAW,GAEZ,MAAM,sBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,GAId,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,KAAK,EACL,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAe,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAIL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GAEnB,MAAM,wBAAwB,CAAC"}
|
|
@@ -39,13 +39,34 @@
|
|
|
39
39
|
*/
|
|
40
40
|
import { type ApiError, type FetchLike, type TokenProvider, W6WClient } from "@w6w/sdk";
|
|
41
41
|
import { type ReactNode } from "react";
|
|
42
|
+
import { SessionStore, type W6WSession } from "./session.ts";
|
|
42
43
|
/** A static bearer token, or a supplier called per request (concurrent requests share one call). */
|
|
43
44
|
export type TokenSource = string | TokenProvider;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Exactly one credential source: a `token` (string, or a supplier called per
|
|
47
|
+
* request) OR a `getSession` callback whose session the provider caches,
|
|
48
|
+
* renews before expiry and re-checks on tab resume (see `useW6WSession`).
|
|
49
|
+
*/
|
|
50
|
+
export type W6WCredentialProps = {
|
|
47
51
|
/** A literal bearer token, or a supplier called per request (concurrent requests share one call). */
|
|
48
52
|
token: TokenSource;
|
|
53
|
+
getSession?: never;
|
|
54
|
+
renewBeforeMs?: never;
|
|
55
|
+
} | {
|
|
56
|
+
token?: never;
|
|
57
|
+
/**
|
|
58
|
+
* Mints a session (`{token, expiresAt, expiresIn?}`). Called lazily, at
|
|
59
|
+
* most once at a time; the result is cached until `renewBeforeMs` (capped
|
|
60
|
+
* at half the session's lifetime) before it expires. Always the LATEST
|
|
61
|
+
* callback, read through a ref.
|
|
62
|
+
*/
|
|
63
|
+
getSession: () => Promise<W6WSession>;
|
|
64
|
+
/** Renew this long before expiry. Default `30_000`. */
|
|
65
|
+
renewBeforeMs?: number;
|
|
66
|
+
};
|
|
67
|
+
export type W6WProviderProps = {
|
|
68
|
+
/** The w6w server's origin, e.g. `"https://api.example.com"`. */
|
|
69
|
+
baseUrl: string;
|
|
49
70
|
/**
|
|
50
71
|
* The real transport this provider's stable `fetch` wrapper delegates to.
|
|
51
72
|
* Defaults to `globalThis.fetch`. Mainly for tests — a caller wanting to
|
|
@@ -89,9 +110,11 @@ export interface W6WProviderProps {
|
|
|
89
110
|
*/
|
|
90
111
|
onUnauthorized?: (error: ApiError) => void;
|
|
91
112
|
children: ReactNode;
|
|
92
|
-
}
|
|
113
|
+
} & W6WCredentialProps;
|
|
93
114
|
interface W6WContextValue {
|
|
94
115
|
client: W6WClient;
|
|
116
|
+
/** The `getSession` store, or `null` for a `token` provider. Read by `useW6WSession`. */
|
|
117
|
+
session: SessionStore | null;
|
|
95
118
|
/** Mirrors the `ready` prop. Read by `hooks.ts`'s `useAsync`, never by `useW6WClient`. */
|
|
96
119
|
ready: boolean;
|
|
97
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"W6WProvider.d.ts","sourceRoot":"","sources":["../../src/W6WProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,
|
|
1
|
+
{"version":3,"file":"W6WProvider.d.ts","sourceRoot":"","sources":["../../src/W6WProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AACf,OAAO,EAA2B,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtF,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,qGAAqG;IACrG,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB,GACD;IACE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;;;OAKG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,kBAAkB,CAAC;AAEvB,UAAU,eAAe;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,yFAAyF;IACzF,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,0FAA0F;IAC1F,KAAK,EAAE,OAAO,CAAC;CAChB;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAiH9D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,SAAS,CASxC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CASvD"}
|
package/dist/src/W6WProvider.js
CHANGED
|
@@ -39,7 +39,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
39
39
|
* @module
|
|
40
40
|
*/
|
|
41
41
|
import { W6WClient } from "@w6w/sdk";
|
|
42
|
-
import { createContext, useContext, useMemo, useRef } from "react";
|
|
42
|
+
import { createContext, useContext, useEffect, useLayoutEffect, useMemo, useRef, } from "react";
|
|
43
|
+
import { DEFAULT_RENEW_BEFORE_MS, SessionStore } from "./session.js";
|
|
43
44
|
const Ctx = createContext(null);
|
|
44
45
|
/**
|
|
45
46
|
* Canonical encoding of a headers object for the `useMemo` dependency array —
|
|
@@ -57,7 +58,19 @@ function headersKey(headers) {
|
|
|
57
58
|
* memoization policy.
|
|
58
59
|
*/
|
|
59
60
|
export function W6WProvider(props) {
|
|
60
|
-
const { baseUrl, token, fetch: fetchOverride, project, headers, ready = true, identityKey, refreshOnUnauthorized, onUnauthorized, children, } = props;
|
|
61
|
+
const { baseUrl, token, getSession, renewBeforeMs, fetch: fetchOverride, project, headers, ready = true, identityKey, refreshOnUnauthorized, onUnauthorized, children, } = props;
|
|
62
|
+
const hasToken = token !== undefined && token !== null;
|
|
63
|
+
const hasSession = getSession !== undefined && getSession !== null;
|
|
64
|
+
// An explicit-but-undefined `token` (`token={maybeToken}` while signed out)
|
|
65
|
+
// behaves exactly as before this prop pair existed: legacy token mode, the
|
|
66
|
+
// SDK rejects the blank value per request. Only a provider with NEITHER key
|
|
67
|
+
// present is real misuse.
|
|
68
|
+
const legacyUndefinedToken = !hasToken && !hasSession && "token" in props && !("getSession" in props);
|
|
69
|
+
if (hasToken === hasSession && !legacyUndefinedToken) {
|
|
70
|
+
throw new Error(hasToken
|
|
71
|
+
? "<W6WProvider> takes exactly one of `token` or `getSession`, not both."
|
|
72
|
+
: "<W6WProvider> needs exactly one of `token` or `getSession`.");
|
|
73
|
+
}
|
|
61
74
|
// "Latest ref" pattern: kept in sync on every render, but never a `useMemo`
|
|
62
75
|
// dependency below — the stable wrappers constructed inside always read the
|
|
63
76
|
// CURRENT prop value through these, so a token rotation, a new `fetch`
|
|
@@ -70,6 +83,10 @@ export function W6WProvider(props) {
|
|
|
70
83
|
// the moment the memo recomputes.
|
|
71
84
|
const tokenRef = useRef(token);
|
|
72
85
|
tokenRef.current = token;
|
|
86
|
+
const getSessionRef = useRef(getSession);
|
|
87
|
+
getSessionRef.current = getSession;
|
|
88
|
+
const renewBeforeMsRef = useRef(renewBeforeMs);
|
|
89
|
+
renewBeforeMsRef.current = renewBeforeMs;
|
|
73
90
|
const fetchRef = useRef(fetchOverride);
|
|
74
91
|
fetchRef.current = fetchOverride;
|
|
75
92
|
const onUnauthorizedRef = useRef(onUnauthorized);
|
|
@@ -77,7 +94,7 @@ export function W6WProvider(props) {
|
|
|
77
94
|
const headersRef = useRef(headers);
|
|
78
95
|
headersRef.current = headers;
|
|
79
96
|
const headersSnapshot = headersKey(headers);
|
|
80
|
-
const client = useMemo(() => {
|
|
97
|
+
const { client, store } = useMemo(() => {
|
|
81
98
|
// `identityKey` and `headersSnapshot` are not otherwise read in this body
|
|
82
99
|
// — they exist purely so this memo depends on them (identity switch;
|
|
83
100
|
// headers content change, per this module's header). Referencing them
|
|
@@ -85,7 +102,17 @@ export function W6WProvider(props) {
|
|
|
85
102
|
// `useExhaustiveDependencies` from treating them as superfluous.
|
|
86
103
|
void identityKey;
|
|
87
104
|
void headersSnapshot;
|
|
105
|
+
// Born and killed with this memo (i.e. with `identityKey`); disposed by the
|
|
106
|
+
// effect below, never here (StrictMode double-invokes memo bodies).
|
|
107
|
+
const store = hasSession
|
|
108
|
+
? new SessionStore(() => {
|
|
109
|
+
const fn = getSessionRef.current;
|
|
110
|
+
return fn ? fn() : Promise.reject(new Error("getSession was removed"));
|
|
111
|
+
}, () => renewBeforeMsRef.current ?? DEFAULT_RENEW_BEFORE_MS)
|
|
112
|
+
: null;
|
|
88
113
|
const stableToken = (ctx) => {
|
|
114
|
+
if (store)
|
|
115
|
+
return store.supplier(ctx);
|
|
89
116
|
const current = tokenRef.current;
|
|
90
117
|
return typeof current === "function" ? current(ctx) : current;
|
|
91
118
|
};
|
|
@@ -96,7 +123,7 @@ export function W6WProvider(props) {
|
|
|
96
123
|
const stableOnUnauthorized = (error) => {
|
|
97
124
|
onUnauthorizedRef.current?.(error);
|
|
98
125
|
};
|
|
99
|
-
|
|
126
|
+
const client = new W6WClient({
|
|
100
127
|
baseUrl,
|
|
101
128
|
project,
|
|
102
129
|
token: stableToken,
|
|
@@ -105,8 +132,14 @@ export function W6WProvider(props) {
|
|
|
105
132
|
refreshOnUnauthorized,
|
|
106
133
|
onUnauthorized: stableOnUnauthorized,
|
|
107
134
|
});
|
|
108
|
-
|
|
109
|
-
|
|
135
|
+
return { client, store };
|
|
136
|
+
}, [baseUrl, project, identityKey, refreshOnUnauthorized, headersSnapshot, hasSession]);
|
|
137
|
+
// Listener/timer lifecycle + late-discard of the OLD store on identity change.
|
|
138
|
+
(typeof document === "undefined" ? useEffect : useLayoutEffect)(() => {
|
|
139
|
+
store?.attach();
|
|
140
|
+
return () => store?.detach();
|
|
141
|
+
}, [store]);
|
|
142
|
+
const value = useMemo(() => ({ client, ready, session: store }), [client, ready, store]);
|
|
110
143
|
return _jsx(Ctx.Provider, { value: value, children: children });
|
|
111
144
|
}
|
|
112
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"W6WProvider.js","sourceRoot":"","sources":["../../src/W6WProvider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAqD,SAAS,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,
|
|
1
|
+
{"version":3,"file":"W6WProvider.js","sourceRoot":"","sources":["../../src/W6WProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/src/adapter.js
CHANGED
|
@@ -94,13 +94,6 @@ async function withApiErrorBody(fn) {
|
|
|
94
94
|
throw err;
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
* The server's own `ids` cap (`MAX_IDS_PER_QUERY`, `registry/packages/types/src/datastore.ts`) —
|
|
99
|
-
* `listAppsByIds` below chunks to this size itself since `console.apps.listPage`
|
|
100
|
-
* is a thin, non-chunking pass-through (`node/src/console/apps.ts`) and a
|
|
101
|
-
* caller passing more than this in one request gets the server's `400`.
|
|
102
|
-
*/
|
|
103
|
-
const MAX_IDS_PER_CHUNK = 100;
|
|
104
97
|
/** Build a `W6WApi` implementation over an existing `W6WClient`. See this module's header. */
|
|
105
98
|
export function createW6WUiAdapter(client) {
|
|
106
99
|
return {
|
|
@@ -116,22 +109,10 @@ export function createW6WUiAdapter(client) {
|
|
|
116
109
|
});
|
|
117
110
|
return { apps: page.apps, nextCursor: page.nextCursor };
|
|
118
111
|
}),
|
|
119
|
-
//
|
|
120
|
-
// `[]`
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
// concatenated in chunk order.
|
|
124
|
-
listAppsByIds: (ids, options) => withApiErrorBody(async () => {
|
|
125
|
-
const unique = Array.from(new Set(ids));
|
|
126
|
-
if (unique.length === 0)
|
|
127
|
-
return [];
|
|
128
|
-
const chunks = [];
|
|
129
|
-
for (let i = 0; i < unique.length; i += MAX_IDS_PER_CHUNK) {
|
|
130
|
-
chunks.push(unique.slice(i, i + MAX_IDS_PER_CHUNK));
|
|
131
|
-
}
|
|
132
|
-
const pages = await Promise.all(chunks.map((chunk) => client.console.apps.listPage({ ids: chunk, signal: options?.signal })));
|
|
133
|
-
return pages.flatMap((page) => page.apps);
|
|
134
|
-
}),
|
|
112
|
+
// Delegates to the public `client.apps.byIds` (R-18): it dedupes, resolves
|
|
113
|
+
// `[]` with no request, chunks to the server's 100-id cap and issues the
|
|
114
|
+
// chunks concurrently, so the adapter carries none of that logic itself.
|
|
115
|
+
listAppsByIds: (ids, options) => withApiErrorBody(() => client.apps.byIds(ids, { signal: options?.signal })),
|
|
135
116
|
getAppAuth: (appId) => withApiErrorBody(() => client.console.apps.getAuth(appId)),
|
|
136
117
|
createConnection: (appId, body) => withApiErrorBody(() => client.console.connections.create(appId, body)),
|
|
137
118
|
startAppOAuthFlow: (appId, authKey, body) => withApiErrorBody(() => client.console.apps.startOAuthFlow(appId, authKey, body)),
|
package/dist/src/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,OAAO,EACL,QAAQ,GAKT,MAAM,UAAU,CAAC;AA2RlB;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,gBAAgB,CAAI,EAAoB;IACrD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC3B,GAAqC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;QACxD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `toFlowWorkflow` / `fromFlowWorkflow` — a validating converter between the
|
|
3
|
+
* SDK's deliberately OPAQUE `WorkflowDefinition` (`Record<string, unknown>`,
|
|
4
|
+
* `node/src/workflows.ts`) and {@link FlowWorkflowShape}, a STRUCTURAL MIRROR
|
|
5
|
+
* of `@w6w/ui`'s `FlowWorkflow` (`src/flow-types.ts`) — the typed shape the
|
|
6
|
+
* visual editor reads and writes.
|
|
7
|
+
*
|
|
8
|
+
* This lane is MIT and takes no runtime dependency on `@w6w/ui` (not even a
|
|
9
|
+
* type import in the shipped build), so the mirror below is transcribed by
|
|
10
|
+
* hand. `ui-conformance.check.ts` pins it in BOTH directions at compile time:
|
|
11
|
+
* ui's `FlowWorkflow` is assignable to {@link fromFlowWorkflow}'s parameter,
|
|
12
|
+
* and {@link FlowWorkflowShape} is assignable to ui's `FlowWorkflow`.
|
|
13
|
+
*
|
|
14
|
+
* The mirror carries no index signature (ui's interfaces have none, and an
|
|
15
|
+
* index signature would break the first direction), yet unknown keys — `retry`,
|
|
16
|
+
* `onError`, `ports`, a host's `x-*` extension — are never dropped: both
|
|
17
|
+
* directions copy by spread, so a definition a newer server enriched
|
|
18
|
+
* round-trips untouched. The validation is the minimum the editor needs to not
|
|
19
|
+
* crash (see {@link toFlowWorkflow}); it does not check the contents of
|
|
20
|
+
* `steps[].uses` or any other nested field.
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import type { WorkflowDefinition } from "@w6w/sdk";
|
|
25
|
+
/** Mirror of ui's `FlowStep`. Unknown keys are preserved at runtime. */
|
|
26
|
+
export interface FlowStepShape {
|
|
27
|
+
id: string;
|
|
28
|
+
uses: {
|
|
29
|
+
app: string;
|
|
30
|
+
action: string;
|
|
31
|
+
connection?: string | null;
|
|
32
|
+
};
|
|
33
|
+
ports?: {
|
|
34
|
+
in?: number | "many";
|
|
35
|
+
out?: number | "many";
|
|
36
|
+
};
|
|
37
|
+
with?: Record<string, unknown>;
|
|
38
|
+
retry?: {
|
|
39
|
+
maxAttempts: number;
|
|
40
|
+
backoff?: "fixed" | "exponential";
|
|
41
|
+
delayMs?: number;
|
|
42
|
+
};
|
|
43
|
+
onError?: "fail" | "continue" | "continue-record";
|
|
44
|
+
notes?: string;
|
|
45
|
+
fanOut?: "sequential" | "parallel";
|
|
46
|
+
position?: {
|
|
47
|
+
x: number;
|
|
48
|
+
y: number;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Mirror of ui's `FlowEdge`. */
|
|
52
|
+
export interface FlowEdgeShape {
|
|
53
|
+
from: string;
|
|
54
|
+
to: string;
|
|
55
|
+
when?: "success" | "error";
|
|
56
|
+
}
|
|
57
|
+
/** Mirror of ui's `FlowWorkflow`. */
|
|
58
|
+
export interface FlowWorkflowShape {
|
|
59
|
+
manifestVersion: string;
|
|
60
|
+
id: string;
|
|
61
|
+
name: string;
|
|
62
|
+
displayName?: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
variables?: Array<{
|
|
65
|
+
key: string;
|
|
66
|
+
type?: string;
|
|
67
|
+
required?: boolean;
|
|
68
|
+
default?: unknown;
|
|
69
|
+
}>;
|
|
70
|
+
steps: FlowStepShape[];
|
|
71
|
+
edges?: FlowEdgeShape[];
|
|
72
|
+
settings?: {
|
|
73
|
+
autoSave?: boolean;
|
|
74
|
+
savePosition?: boolean;
|
|
75
|
+
viewport?: {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
zoom: number;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** One violation found by {@link toFlowWorkflow}. */
|
|
83
|
+
export interface WorkflowShapeIssue {
|
|
84
|
+
/** Dotted/indexed location in the definition, e.g. `steps[2].id`. */
|
|
85
|
+
path: string;
|
|
86
|
+
message: string;
|
|
87
|
+
}
|
|
88
|
+
/** Thrown by {@link toFlowWorkflow}; `issues` lists EVERY violation, not just the first. */
|
|
89
|
+
export declare class WorkflowShapeError extends Error {
|
|
90
|
+
readonly issues: WorkflowShapeIssue[];
|
|
91
|
+
constructor(issues: WorkflowShapeIssue[]);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate an opaque `WorkflowDefinition` and return it as a
|
|
95
|
+
* {@link FlowWorkflowShape}. Requires string `manifestVersion`/`id`/`name`; a
|
|
96
|
+
* `steps` array of objects each with a string `id`; and, when present,
|
|
97
|
+
* `edges` an array, `settings` an object, `variables` an array. Anything else
|
|
98
|
+
* throws a {@link WorkflowShapeError} listing every violation. The result is a
|
|
99
|
+
* copy (top level and each step) that keeps every unknown key.
|
|
100
|
+
*/
|
|
101
|
+
export declare function toFlowWorkflow(def: WorkflowDefinition): FlowWorkflowShape;
|
|
102
|
+
/**
|
|
103
|
+
* The inverse of {@link toFlowWorkflow}: a {@link FlowWorkflowShape} (the
|
|
104
|
+
* editor's output) back to the opaque `WorkflowDefinition` the SDK sends.
|
|
105
|
+
* Spread-copies the top level and each step, so unknown keys survive and no
|
|
106
|
+
* caller cast is needed.
|
|
107
|
+
*/
|
|
108
|
+
export declare function fromFlowWorkflow(flow: FlowWorkflowShape): WorkflowDefinition;
|
|
109
|
+
//# sourceMappingURL=flow-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-workflow.d.ts","sourceRoot":"","sources":["../../src/flow-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAClE,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzF,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACnD,CAAC;CACH;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4FAA4F;AAC5F,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;gBAE1B,MAAM,EAAE,kBAAkB,EAAE;CASzC;AAMD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB,CAoCzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,CAE5E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** Thrown by {@link toFlowWorkflow}; `issues` lists EVERY violation, not just the first. */
|
|
2
|
+
export class WorkflowShapeError extends Error {
|
|
3
|
+
issues;
|
|
4
|
+
constructor(issues) {
|
|
5
|
+
super(`Workflow definition is not a valid flow workflow: ${issues
|
|
6
|
+
.map((i) => `${i.path}: ${i.message}`)
|
|
7
|
+
.join("; ")}`);
|
|
8
|
+
this.name = "WorkflowShapeError";
|
|
9
|
+
this.issues = issues;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function isObject(v) {
|
|
13
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate an opaque `WorkflowDefinition` and return it as a
|
|
17
|
+
* {@link FlowWorkflowShape}. Requires string `manifestVersion`/`id`/`name`; a
|
|
18
|
+
* `steps` array of objects each with a string `id`; and, when present,
|
|
19
|
+
* `edges` an array, `settings` an object, `variables` an array. Anything else
|
|
20
|
+
* throws a {@link WorkflowShapeError} listing every violation. The result is a
|
|
21
|
+
* copy (top level and each step) that keeps every unknown key.
|
|
22
|
+
*/
|
|
23
|
+
export function toFlowWorkflow(def) {
|
|
24
|
+
const issues = [];
|
|
25
|
+
const input = def;
|
|
26
|
+
if (!isObject(input)) {
|
|
27
|
+
throw new WorkflowShapeError([{ path: "", message: "must be an object" }]);
|
|
28
|
+
}
|
|
29
|
+
for (const key of ["manifestVersion", "id", "name"]) {
|
|
30
|
+
if (typeof input[key] !== "string")
|
|
31
|
+
issues.push({ path: key, message: "must be a string" });
|
|
32
|
+
}
|
|
33
|
+
const steps = input.steps;
|
|
34
|
+
if (!Array.isArray(steps)) {
|
|
35
|
+
issues.push({ path: "steps", message: "must be an array" });
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
steps.forEach((step, i) => {
|
|
39
|
+
if (!isObject(step)) {
|
|
40
|
+
issues.push({ path: `steps[${i}]`, message: "must be an object" });
|
|
41
|
+
}
|
|
42
|
+
else if (typeof step.id !== "string") {
|
|
43
|
+
issues.push({ path: `steps[${i}].id`, message: "must be a string" });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (input.edges !== undefined && !Array.isArray(input.edges)) {
|
|
48
|
+
issues.push({ path: "edges", message: "must be an array" });
|
|
49
|
+
}
|
|
50
|
+
if (input.settings !== undefined && !isObject(input.settings)) {
|
|
51
|
+
issues.push({ path: "settings", message: "must be an object" });
|
|
52
|
+
}
|
|
53
|
+
if (input.variables !== undefined && !Array.isArray(input.variables)) {
|
|
54
|
+
issues.push({ path: "variables", message: "must be an array" });
|
|
55
|
+
}
|
|
56
|
+
if (issues.length > 0)
|
|
57
|
+
throw new WorkflowShapeError(issues);
|
|
58
|
+
return {
|
|
59
|
+
...input,
|
|
60
|
+
steps: steps.map((s) => ({ ...s })),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The inverse of {@link toFlowWorkflow}: a {@link FlowWorkflowShape} (the
|
|
65
|
+
* editor's output) back to the opaque `WorkflowDefinition` the SDK sends.
|
|
66
|
+
* Spread-copies the top level and each step, so unknown keys survive and no
|
|
67
|
+
* caller cast is needed.
|
|
68
|
+
*/
|
|
69
|
+
export function fromFlowWorkflow(flow) {
|
|
70
|
+
return { ...flow, steps: flow.steps.map((s) => ({ ...s })) };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=flow-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-workflow.js","sourceRoot":"","sources":["../../src/flow-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** What `getSession` resolves to. A structural supertype of `@w6w/sdk/server`'s `EmbedSession`. */
|
|
2
|
+
export interface W6WSession {
|
|
3
|
+
token: string;
|
|
4
|
+
/** ISO-8601 instant the token stops being valid. */
|
|
5
|
+
expiresAt: string;
|
|
6
|
+
/** Seconds the token lives from receipt; bounds a far-future `expiresAt` (clock skew). */
|
|
7
|
+
expiresIn?: number;
|
|
8
|
+
}
|
|
9
|
+
export type W6WSessionStatus = "loading" | "ready" | "renewing" | "expired" | "error";
|
|
10
|
+
export interface W6WSessionState {
|
|
11
|
+
status: W6WSessionStatus;
|
|
12
|
+
/** The cached session's `expiresAt`, or `null` (no session yet, or a `token`-mode provider). */
|
|
13
|
+
expiresAt: string | null;
|
|
14
|
+
/** The last acquisition failure, until the next acquisition starts. */
|
|
15
|
+
error: unknown;
|
|
16
|
+
/** Starts (or joins) an acquisition. Resolves when it settles; never rejects — read `error`. */
|
|
17
|
+
refresh(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/** Default `renewBeforeMs`. */
|
|
20
|
+
export declare const DEFAULT_RENEW_BEFORE_MS = 30000;
|
|
21
|
+
export declare class SessionStore {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(getSession: () => Promise<W6WSession>, renewBeforeMs: () => number);
|
|
24
|
+
subscribe: (listener: () => void) => (() => void);
|
|
25
|
+
getSnapshot: () => W6WSessionState;
|
|
26
|
+
refresh: () => Promise<void>;
|
|
27
|
+
/** `forceRefresh` JOINS an acquisition already in flight, else starts exactly one. */
|
|
28
|
+
supplier: (ctx?: {
|
|
29
|
+
forceRefresh?: boolean;
|
|
30
|
+
}) => Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Called from the provider's effect. Disposal is DEFERRED one microtask (the
|
|
33
|
+
* same refcount idiom `hooks.ts` uses for its abort controller): React
|
|
34
|
+
* StrictMode runs mount -> cleanup -> mount synchronously, and descendants'
|
|
35
|
+
* passive effects (a read hook's first request) have already entered the
|
|
36
|
+
* supplier by the time the cleanup runs, so tearing the flight down at
|
|
37
|
+
* cleanup would reject that request ("stale acquisition"). A re-attach in
|
|
38
|
+
* the same task simply cancels the pending disposal; a real unmount or
|
|
39
|
+
* identity change disposes one microtask later.
|
|
40
|
+
*/
|
|
41
|
+
attach(): void;
|
|
42
|
+
detach(): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The provider's session state. With a `getSession` provider it mirrors the
|
|
46
|
+
* store; with a `token` provider `status` is `"ready"` when the provider's
|
|
47
|
+
* `ready` is true (else `"loading"`), `expiresAt` is `null` and `refresh()`
|
|
48
|
+
* resolves without calling anything.
|
|
49
|
+
*/
|
|
50
|
+
export declare function useW6WSession(): W6WSessionState;
|
|
51
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAqBA,mGAAmG;AACnG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gGAAgG;IAChG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,+BAA+B;AAC/B,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAiB9C,qBAAa,YAAY;;gBAeX,UAAU,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,MAAM,MAAM;IAQ9E,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,WAAW,QAAO,eAAe,CAAmB;IAEpD,OAAO,QAAa,OAAO,CAAC,IAAI,CAAC,CAG/B;IAIF,sFAAsF;IACtF,QAAQ,GAAU,MAAM;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,OAAO,CAAC,MAAM,CAAC,CAelE;IAIF;;;;;;;;;OASG;IACH,MAAM,IAAI,IAAI;IASd,MAAM,IAAI,IAAI;CAiIf;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,eAAe,CAgB/C"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The session store behind `<W6WProvider getSession>` and `useW6WSession()`.
|
|
3
|
+
*
|
|
4
|
+
* A host hands the provider ONE callback that mints a short-lived session
|
|
5
|
+
* (`{token, expiresAt, expiresIn?}`). The store caches the session until
|
|
6
|
+
* shortly before it expires, shares one acquisition between every caller,
|
|
7
|
+
* re-checks when a hidden tab becomes visible again, and is born and killed
|
|
8
|
+
* with the provider's `identityKey` (it is created inside the client
|
|
9
|
+
* `useMemo`), so an identity switch can never send the previous identity's
|
|
10
|
+
* token: a disposed store commits nothing and its supplier throws.
|
|
11
|
+
*
|
|
12
|
+
* Layering: `@w6w/sdk` already calls the token supplier per request, dedups
|
|
13
|
+
* CONCURRENT ordinary supplier calls and owns the one-shot 401 retry
|
|
14
|
+
* (`refreshOnUnauthorized`, `forceRefresh: true`). This store adds only the
|
|
15
|
+
* cache + single-flight acquisition + resume/expiry handling on top.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { useMemo, useSyncExternalStore } from "react";
|
|
20
|
+
import { useW6WProviderContext } from "./W6WProvider.js";
|
|
21
|
+
/** Default `renewBeforeMs`. */
|
|
22
|
+
export const DEFAULT_RENEW_BEFORE_MS = 30_000;
|
|
23
|
+
const MAX_TIMER_MS = 2_147_483_647;
|
|
24
|
+
export class SessionStore {
|
|
25
|
+
#getSession;
|
|
26
|
+
#renewBeforeMs;
|
|
27
|
+
#held = null;
|
|
28
|
+
#flight = null;
|
|
29
|
+
#error = null;
|
|
30
|
+
#hasError = false;
|
|
31
|
+
/** Bumped on disposal: an acquisition from an older epoch never commits. */
|
|
32
|
+
#epoch = 0;
|
|
33
|
+
#dead = false;
|
|
34
|
+
#attached = false;
|
|
35
|
+
#timer;
|
|
36
|
+
#listeners = new Set();
|
|
37
|
+
#snapshot;
|
|
38
|
+
constructor(getSession, renewBeforeMs) {
|
|
39
|
+
this.#getSession = getSession;
|
|
40
|
+
this.#renewBeforeMs = renewBeforeMs;
|
|
41
|
+
this.#snapshot = this.#compute();
|
|
42
|
+
}
|
|
43
|
+
// ── external-store surface ─────────────────────────────────────────────
|
|
44
|
+
subscribe = (listener) => {
|
|
45
|
+
this.#listeners.add(listener);
|
|
46
|
+
return () => {
|
|
47
|
+
this.#listeners.delete(listener);
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
getSnapshot = () => this.#snapshot;
|
|
51
|
+
refresh = async () => {
|
|
52
|
+
if (this.#dead)
|
|
53
|
+
return;
|
|
54
|
+
await (this.#flight ? this.#flight.promise : this.#start());
|
|
55
|
+
};
|
|
56
|
+
// ── the stable supplier handed to the SDK ──────────────────────────────
|
|
57
|
+
/** `forceRefresh` JOINS an acquisition already in flight, else starts exactly one. */
|
|
58
|
+
supplier = async (ctx) => {
|
|
59
|
+
if (this.#dead)
|
|
60
|
+
throw new Error("w6w session store was disposed (identity changed or unmounted)");
|
|
61
|
+
const held = this.#held;
|
|
62
|
+
if (ctx?.forceRefresh !== true && held && Date.now() < held.expiry - held.window) {
|
|
63
|
+
return held.token;
|
|
64
|
+
}
|
|
65
|
+
const outcome = await (this.#flight ? this.#flight.promise : this.#start());
|
|
66
|
+
if (this.#dead || !outcome) {
|
|
67
|
+
throw new Error("w6w session store was disposed (identity changed or unmounted)");
|
|
68
|
+
}
|
|
69
|
+
if (outcome.ok)
|
|
70
|
+
return outcome.token;
|
|
71
|
+
const still = this.#held;
|
|
72
|
+
if (still && Date.now() < still.expiry)
|
|
73
|
+
return still.token;
|
|
74
|
+
throw outcome.error;
|
|
75
|
+
};
|
|
76
|
+
// ── lifecycle (effect-driven; disposal deferred so StrictMode's remount works) ─
|
|
77
|
+
/**
|
|
78
|
+
* Called from the provider's effect. Disposal is DEFERRED one microtask (the
|
|
79
|
+
* same refcount idiom `hooks.ts` uses for its abort controller): React
|
|
80
|
+
* StrictMode runs mount -> cleanup -> mount synchronously, and descendants'
|
|
81
|
+
* passive effects (a read hook's first request) have already entered the
|
|
82
|
+
* supplier by the time the cleanup runs, so tearing the flight down at
|
|
83
|
+
* cleanup would reject that request ("stale acquisition"). A re-attach in
|
|
84
|
+
* the same task simply cancels the pending disposal; a real unmount or
|
|
85
|
+
* identity change disposes one microtask later.
|
|
86
|
+
*/
|
|
87
|
+
attach() {
|
|
88
|
+
this.#dead = false;
|
|
89
|
+
this.#attached = true;
|
|
90
|
+
if (typeof document !== "undefined") {
|
|
91
|
+
document.addEventListener("visibilitychange", this.#onVisibility);
|
|
92
|
+
}
|
|
93
|
+
this.#schedule();
|
|
94
|
+
}
|
|
95
|
+
detach() {
|
|
96
|
+
this.#attached = false;
|
|
97
|
+
if (this.#timer !== undefined)
|
|
98
|
+
clearTimeout(this.#timer);
|
|
99
|
+
this.#timer = undefined;
|
|
100
|
+
if (typeof document !== "undefined") {
|
|
101
|
+
document.removeEventListener("visibilitychange", this.#onVisibility);
|
|
102
|
+
}
|
|
103
|
+
queueMicrotask(() => {
|
|
104
|
+
if (this.#attached || this.#dead)
|
|
105
|
+
return;
|
|
106
|
+
this.#dead = true;
|
|
107
|
+
this.#epoch += 1;
|
|
108
|
+
this.#flight = null;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// ── internals ──────────────────────────────────────────────────────────
|
|
112
|
+
#visible() {
|
|
113
|
+
return typeof document !== "undefined" && document.visibilityState === "visible";
|
|
114
|
+
}
|
|
115
|
+
#onVisibility = () => {
|
|
116
|
+
if (this.#dead || !this.#visible() || this.#flight || this.#hasError)
|
|
117
|
+
return;
|
|
118
|
+
const held = this.#held;
|
|
119
|
+
if (!held || Date.now() >= held.expiry - held.window)
|
|
120
|
+
void this.#start();
|
|
121
|
+
else
|
|
122
|
+
this.#update();
|
|
123
|
+
};
|
|
124
|
+
#start() {
|
|
125
|
+
const epoch = this.#epoch;
|
|
126
|
+
const flight = {};
|
|
127
|
+
this.#flight = flight;
|
|
128
|
+
this.#hasError = false;
|
|
129
|
+
this.#error = null;
|
|
130
|
+
this.#update();
|
|
131
|
+
const run = async () => {
|
|
132
|
+
let outcome;
|
|
133
|
+
try {
|
|
134
|
+
const session = await this.#getSession();
|
|
135
|
+
const held = this.#toHeld(session);
|
|
136
|
+
if (epoch !== this.#epoch)
|
|
137
|
+
return { ok: false, error: new Error("stale acquisition") };
|
|
138
|
+
this.#held = held;
|
|
139
|
+
outcome = { ok: true, token: held.token };
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (epoch !== this.#epoch)
|
|
143
|
+
return { ok: false, error };
|
|
144
|
+
this.#hasError = true;
|
|
145
|
+
this.#error = error;
|
|
146
|
+
outcome = { ok: false, error };
|
|
147
|
+
}
|
|
148
|
+
if (this.#flight === flight)
|
|
149
|
+
this.#flight = null;
|
|
150
|
+
this.#update();
|
|
151
|
+
this.#schedule();
|
|
152
|
+
return outcome;
|
|
153
|
+
};
|
|
154
|
+
flight.promise = run();
|
|
155
|
+
return flight.promise;
|
|
156
|
+
}
|
|
157
|
+
#toHeld(session) {
|
|
158
|
+
const receivedAt = Date.now();
|
|
159
|
+
if (!session || typeof session.token !== "string" || session.token.trim().length === 0) {
|
|
160
|
+
throw new Error("getSession returned a blank token");
|
|
161
|
+
}
|
|
162
|
+
let expiry = Date.parse(session.expiresAt);
|
|
163
|
+
if (Number.isNaN(expiry))
|
|
164
|
+
throw new Error("getSession returned an invalid expiresAt");
|
|
165
|
+
if (typeof session.expiresIn === "number" && Number.isFinite(session.expiresIn)) {
|
|
166
|
+
expiry = Math.min(expiry, receivedAt + session.expiresIn * 1000);
|
|
167
|
+
}
|
|
168
|
+
const window = Math.max(0, Math.min(this.#renewBeforeMs(), (expiry - receivedAt) / 2));
|
|
169
|
+
return { token: session.token, expiresAt: session.expiresAt, expiry, window };
|
|
170
|
+
}
|
|
171
|
+
#schedule() {
|
|
172
|
+
if (this.#timer !== undefined)
|
|
173
|
+
clearTimeout(this.#timer);
|
|
174
|
+
this.#timer = undefined;
|
|
175
|
+
const held = this.#held;
|
|
176
|
+
if (!this.#attached || !held)
|
|
177
|
+
return;
|
|
178
|
+
const now = Date.now();
|
|
179
|
+
const renewAt = held.expiry - held.window;
|
|
180
|
+
const target = now < renewAt ? renewAt : now < held.expiry ? held.expiry : null;
|
|
181
|
+
if (target === null)
|
|
182
|
+
return;
|
|
183
|
+
this.#timer = setTimeout(this.#tick, Math.min(Math.max(0, target - now), MAX_TIMER_MS));
|
|
184
|
+
}
|
|
185
|
+
#tick = () => {
|
|
186
|
+
this.#timer = undefined;
|
|
187
|
+
if (this.#dead)
|
|
188
|
+
return;
|
|
189
|
+
const held = this.#held;
|
|
190
|
+
if (held &&
|
|
191
|
+
!this.#flight &&
|
|
192
|
+
!this.#hasError &&
|
|
193
|
+
this.#visible() &&
|
|
194
|
+
Date.now() >= held.expiry - held.window) {
|
|
195
|
+
void this.#start(); // updates + reschedules itself on settle
|
|
196
|
+
}
|
|
197
|
+
this.#update();
|
|
198
|
+
this.#schedule();
|
|
199
|
+
};
|
|
200
|
+
#compute() {
|
|
201
|
+
const held = this.#held;
|
|
202
|
+
let status;
|
|
203
|
+
if (this.#flight)
|
|
204
|
+
status = held ? "renewing" : "loading";
|
|
205
|
+
else if (this.#hasError)
|
|
206
|
+
status = "error";
|
|
207
|
+
else if (!held)
|
|
208
|
+
status = "loading";
|
|
209
|
+
else
|
|
210
|
+
status = Date.now() >= held.expiry ? "expired" : "ready";
|
|
211
|
+
return {
|
|
212
|
+
status,
|
|
213
|
+
expiresAt: held ? held.expiresAt : null,
|
|
214
|
+
error: this.#error,
|
|
215
|
+
refresh: this.refresh,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
#update() {
|
|
219
|
+
const next = this.#compute();
|
|
220
|
+
const prev = this.#snapshot;
|
|
221
|
+
if (next.status === prev.status &&
|
|
222
|
+
next.expiresAt === prev.expiresAt &&
|
|
223
|
+
next.error === prev.error) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this.#snapshot = next;
|
|
227
|
+
for (const listener of [...this.#listeners])
|
|
228
|
+
listener();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const noopSubscribe = () => () => { };
|
|
232
|
+
const noopRefresh = () => Promise.resolve();
|
|
233
|
+
/**
|
|
234
|
+
* The provider's session state. With a `getSession` provider it mirrors the
|
|
235
|
+
* store; with a `token` provider `status` is `"ready"` when the provider's
|
|
236
|
+
* `ready` is true (else `"loading"`), `expiresAt` is `null` and `refresh()`
|
|
237
|
+
* resolves without calling anything.
|
|
238
|
+
*/
|
|
239
|
+
export function useW6WSession() {
|
|
240
|
+
const { session, ready } = useW6WProviderContext();
|
|
241
|
+
const tokenState = useMemo(() => ({
|
|
242
|
+
status: ready ? "ready" : "loading",
|
|
243
|
+
expiresAt: null,
|
|
244
|
+
error: null,
|
|
245
|
+
refresh: noopRefresh,
|
|
246
|
+
}), [ready]);
|
|
247
|
+
return useSyncExternalStore(session ? session.subscribe : noopSubscribe, session ? session.getSnapshot : () => tokenState, session ? session.getSnapshot : () => tokenState);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,OAAO,EAAE,MAAiB,CAAC"}
|
package/dist/src/version.js
CHANGED
package/dist/src/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAW,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@w6w/react",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "React bindings for @w6w/sdk — a <W6WProvider>, a small hook set, and a structural adapter for @w6w/ui's W6WApi contract.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"react": ">=18"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@w6w/sdk": "^0.9.
|
|
47
|
+
"@w6w/sdk": "^0.9.13"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@biomejs/biome": "^1.9.4",
|
|
51
51
|
"@types/react": "^18.3.17",
|
|
52
|
-
"@w6w/ui": "
|
|
52
|
+
"@w6w/ui": "0.1.0",
|
|
53
53
|
"jsdom": "^30.0.1",
|
|
54
54
|
"react": "^18.3.1",
|
|
55
55
|
"react-dom": "^18.3.1",
|