@theoo/sdk 0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,321 @@
1
+ import { Transport } from "./transport.js";
2
+ /**
3
+ * The Theoo client.
4
+ *
5
+ * With a publishable key it is an end user's client: `auth`, then everything
6
+ * under `me`. With a secret key it is the tenant's server: `users(id)` to act
7
+ * for any user.
8
+ */
9
+ export class Theoo {
10
+ constructor(opts) {
11
+ /* ── sign-in ────────────────────────────────────────────────────────── */
12
+ this.auth = {
13
+ /** Start a sign-in (or, with a signed-in user, an add-this-factor). */
14
+ begin: (req) => this.transport.request("POST", "/v1/auth/begin", { ...req, client: req.client ?? this.client }, { user: true }).catch(async (e) => {
15
+ // A begin without a session is the ordinary case; only the token was missing.
16
+ if (e.code === "SESSION_INVALID" && e.status === 401 && !(await this.transport.tokens.load())) {
17
+ return this.transport.request("POST", "/v1/auth/begin", { ...req, client: req.client ?? this.client });
18
+ }
19
+ throw e;
20
+ }),
21
+ /** Finish a sign-in. Stores the session. */
22
+ complete: async (req) => {
23
+ const body = { ...req, client: req.client ?? this.client };
24
+ const out = await this.transport.request("POST", "/v1/auth/complete", body);
25
+ await this.transport.setSession(out.session, out.user);
26
+ return out;
27
+ },
28
+ /** Email or phone: send a code, then `submit(code)`. */
29
+ withCode: async (provider, destination, purpose) => {
30
+ const c = await this.auth.begin({ provider, destination, purpose });
31
+ if (c.kind !== "code")
32
+ throw new Error(`expected a code challenge, got ${c.kind}`);
33
+ return {
34
+ challenge: c,
35
+ submit: (code) => this.auth.complete({ kind: "code", challengeId: c.challengeId, code }),
36
+ };
37
+ },
38
+ /** Google or KingsChat: where to send the user, then `submit` with what comes back. */
39
+ withProvider: async (provider) => {
40
+ const c = await this.auth.begin({ provider });
41
+ if (c.kind !== "redirect" && c.kind !== "popup")
42
+ throw new Error(`expected a redirect, got ${c.kind}`);
43
+ return {
44
+ challenge: c,
45
+ /** After the provider's callback: the `code` it returned. */
46
+ submitCode: (code) => this.auth.complete({ kind: "oauth_callback", state: c.state, code }),
47
+ /** A token the provider's own SDK already produced. */
48
+ submitToken: (accessToken) => this.auth.complete({ kind: "forwarded_token", state: c.state, accessToken }),
49
+ };
50
+ },
51
+ /** A passkey the user already has. One ceremony, no typing. */
52
+ withPasskey: async () => {
53
+ const c = await this.auth.begin({ provider: "passkey" });
54
+ if (c.kind !== "webauthn")
55
+ throw new Error(`expected a passkey challenge, got ${c.kind}`);
56
+ const assertion = await this.ceremony().get(c.options);
57
+ return this.auth.complete({ kind: "webauthn", ceremonyId: c.ceremonyId, assertion });
58
+ },
59
+ /** Enrol a passkey on the signed-in user. The account on chain is owned by the first one. */
60
+ enrolPasskey: async (label = "Passkey") => {
61
+ const c = await this.auth.begin({ provider: "passkey", purpose: "link_identity", destination: label });
62
+ if (c.kind !== "webauthn")
63
+ throw new Error(`expected a passkey challenge, got ${c.kind}`);
64
+ const credential = await this.ceremony().create(c.options);
65
+ return this.auth.complete({ kind: "webauthn", ceremonyId: c.ceremonyId, assertion: credential });
66
+ },
67
+ refresh: () => this.transport.refresh(),
68
+ signOut: async () => {
69
+ try {
70
+ await this.transport.request("POST", "/v1/me/sign-out", undefined, { user: true });
71
+ }
72
+ finally {
73
+ await this.transport.setSession(null);
74
+ }
75
+ },
76
+ session: () => this.transport.tokens.load(),
77
+ };
78
+ /* ── the signed-in user ─────────────────────────────────────────────── */
79
+ this.me = {
80
+ get: () => this.transport.request("GET", "/v1/me", undefined, { user: true }),
81
+ account: (chain) => this.transport.request("GET", `/v1/me/account${chain ? `?chain=${chain}` : ""}`, undefined, { user: true, optional: true }),
82
+ identities: () => this.transport.request("GET", "/v1/me/identities", undefined, { user: true }),
83
+ unlinkIdentity: (provider, subject) => this.transport.request("DELETE", "/v1/me/identities", { provider, subject }, { user: true }),
84
+ signOutEverywhere: async () => {
85
+ try {
86
+ await this.transport.request("POST", "/v1/me/sign-out-everywhere", undefined, { user: true });
87
+ }
88
+ finally {
89
+ await this.transport.setSession(null);
90
+ }
91
+ },
92
+ /** Prove presence again with a passkey, for actions that demand freshness. */
93
+ stepUp: async () => {
94
+ const c = await this.transport.request("POST", "/v1/me/step-up/begin", { client: this.client }, { user: true });
95
+ if (c.kind !== "webauthn")
96
+ throw new Error(`expected a passkey challenge, got ${c.kind}`);
97
+ const assertion = await this.ceremony().get(c.options);
98
+ return this.transport.request("POST", "/v1/me/step-up/complete", { kind: "webauthn", ceremonyId: c.ceremonyId, assertion, client: this.client }, { user: true });
99
+ },
100
+ operations: this.operationsAt("/v1/me"),
101
+ recovery: this.recoveryAt("/v1/me"),
102
+ sessions: this.sessionsAt("/v1/me"),
103
+ solana: this.solanaAt("/v1/me"),
104
+ };
105
+ /**
106
+ * Self-serve projects, for a console app.
107
+ *
108
+ * These act as the signed-in *developer* — a user of the console tenant —
109
+ * so they need that tenant's publishable key and the developer's own bearer
110
+ * token, exactly like any other `/v1/me` call. A developer can only ever
111
+ * reach projects they created.
112
+ */
113
+ this.console = {
114
+ /**
115
+ * Every chain a project could be pointed at, across both account models.
116
+ *
117
+ * Not the same as {@link chains}, which answers for the calling tenant.
118
+ * A project does not exist yet when this is asked.
119
+ */
120
+ chains: () => this.transport.request("GET", "/v1/console/chains", undefined, { user: true }),
121
+ projects: () => this.transport.request("GET", "/v1/console/projects", undefined, { user: true }),
122
+ create: (project) => this.transport.request("POST", "/v1/console/projects", project, { user: true }),
123
+ keys: (slug) => this.transport.request("GET", `/v1/console/projects/${slug}/keys`, undefined, { user: true }),
124
+ /** The key is in the response and never again. Show it once, then store it. */
125
+ issueKey: (slug, key) => this.transport.request("POST", `/v1/console/projects/${slug}/keys`, key, { user: true }),
126
+ revokeKey: (slug, prefix) => this.transport.request("DELETE", `/v1/console/projects/${slug}/keys/${prefix}`, undefined, { user: true }),
127
+ /** Rename a project. Cosmetic — the slug does not move. */
128
+ rename: (slug, name) => this.transport.request("PUT", `/v1/console/projects/${slug}/name`, { name }, { user: true }),
129
+ /**
130
+ * Change which chain a call that names none gets. Safe at any time: it
131
+ * moves no address. Refused if the chain is not registered for the
132
+ * project's account model.
133
+ */
134
+ setDefaultChain: (slug, chain) => this.transport.request("PUT", `/v1/console/projects/${slug}/chain`, { chain }, { user: true }),
135
+ /**
136
+ * Put a project away, or take it back out. Not a delete: the accounts it
137
+ * owns exist on a chain and archiving does not touch them. An archived
138
+ * project's keys stop working and it stops counting against the project
139
+ * limit.
140
+ */
141
+ setArchived: (slug, archived) => this.transport.request("PUT", `/v1/console/projects/${slug}/status`, { status: archived ? "archived" : "active" }, { user: true }),
142
+ setOrigins: (slug, origins) => this.transport.request("PUT", `/v1/console/projects/${slug}/origins`, { origins }, { user: true }),
143
+ /** Lowering is always allowed; raising is capped at the operator's ceiling. */
144
+ setBudget: (slug, dailyWei) => this.transport.request("PUT", `/v1/console/projects/${slug}/budget`, { dailyWei }, { user: true }),
145
+ };
146
+ this.transport = new Transport(opts);
147
+ this.passkeys = opts.passkeys;
148
+ this.client = opts.client ?? {};
149
+ }
150
+ ceremony() {
151
+ if (!this.passkeys)
152
+ throw new Error("No passkey provider configured: pass `passkeys` to Theoo().");
153
+ return this.passkeys;
154
+ }
155
+ /**
156
+ * The chains this tenant's users can hold accounts on.
157
+ *
158
+ * Readable with a publishable key, so an app can offer a choice rather
159
+ * than hardcoding what an operator may change. Pass `chain` to any
160
+ * account or operation call to use one.
161
+ */
162
+ chains() {
163
+ return this.transport.request("GET", "/v1/chains");
164
+ }
165
+ /**
166
+ * Resolve an end user's access token into who they are.
167
+ *
168
+ * For a server holding a token its front end sent: it says which user, in
169
+ * which session, and how strongly they are authenticated. Needs a secret
170
+ * key, because it speaks for the tenant rather than for a user.
171
+ *
172
+ * Use {@link effectiveAssurance} on the result rather than reading
173
+ * `subject.aal`, which is the base level and ignores a step-up that has
174
+ * since gone stale.
175
+ */
176
+ authenticate(accessToken) {
177
+ return this.transport.request("POST", "/v1/auth/authenticate", { accessToken });
178
+ }
179
+ /* ── any user, from the tenant's server ─────────────────────────────── */
180
+ users(userId) {
181
+ const base = `/v1/users/${userId}`;
182
+ return {
183
+ account: (chain) => this.transport.request("GET", `${base}/account${chain ? `?chain=${chain}` : ""}`, undefined, { optional: true }),
184
+ identities: () => this.transport.request("GET", `${base}/identities`),
185
+ signOutEverywhere: (reason) => this.transport.request("POST", `${base}/sign-out-everywhere`, { reason }),
186
+ operations: this.operationsAt(base, false),
187
+ recovery: this.recoveryAt(base, false),
188
+ sessions: this.sessionsAt(base, false),
189
+ solana: this.solanaAt(base, false),
190
+ };
191
+ }
192
+ /** The user's Solana account and operations: the same passkey, a second ledger. */
193
+ solanaAt(base, user = true) {
194
+ const opts = { user };
195
+ const q = (cluster) => (cluster ? `?cluster=${encodeURIComponent(cluster)}` : "");
196
+ const prepare = (action, cluster) => this.transport.request("POST", `${base}/solana/operations`, { ...action, cluster, client: this.client }, opts);
197
+ const submit = (id, assertion) => this.transport.request("POST", `${base}/solana/operations/${id}/submit`, { assertion, client: this.client }, opts);
198
+ /** Prepare, have the passkey sign, submit. Solana confirms within the call. */
199
+ const run = async (action, cluster) => {
200
+ const prepared = await prepare(action, cluster);
201
+ const assertion = await this.ceremony().get(prepared.webauthnOptions);
202
+ return submit(prepared.id, assertion);
203
+ };
204
+ return {
205
+ account: (cluster) => this.transport.request("GET", `${base}/solana/account${q(cluster)}`, undefined, opts),
206
+ operations: {
207
+ prepare,
208
+ submit,
209
+ get: (id) => this.transport.request("GET", `${base}/solana/operations/${id}`, undefined, opts),
210
+ list: () => this.transport.request("GET", `${base}/solana/operations`, undefined, opts),
211
+ run,
212
+ },
213
+ /**
214
+ * Session keys on Solana. The key signs the transaction itself, so
215
+ * `execute` is one call: no ceremony, no confirmation to wait for.
216
+ */
217
+ sessions: {
218
+ list: () => this.transport.request("GET", `${base}/solana/sessions`, undefined, opts),
219
+ get: (id) => this.transport.request("GET", `${base}/solana/sessions/${id}`, undefined, opts),
220
+ /** Act under a session key: no passkey, within the grant. */
221
+ execute: (id, action) => this.transport.request("POST", `${base}/solana/sessions/${id}/execute`, { ...action, client: this.client }, opts),
222
+ /** Grant a session: a passkey-signed operation, as every grant is. */
223
+ grant: async (session, cluster) => {
224
+ const status = await run({ kind: "grant_session", session }, cluster);
225
+ if (!status.session)
226
+ throw new Error("the grant did not name a session");
227
+ const key = await this.transport.request("GET", `${base}/solana/sessions/${status.session}`, undefined, opts);
228
+ return { session: key, operation: status };
229
+ },
230
+ /** The same, on Solana: one ceremony, the same key, the tally reset. */
231
+ renew: async (session, cluster) => {
232
+ const operation = await run({ kind: "renew_session", session }, cluster);
233
+ const key = await this.transport.request("GET", `${base}/solana/sessions/${session.session}`, undefined, opts);
234
+ return { session: key, operation };
235
+ },
236
+ revoke: (id, cluster) => run({ kind: "revoke_session", session: id }, cluster),
237
+ },
238
+ /** Guardian recovery on Solana: the same shape as the EVM side. */
239
+ recovery: {
240
+ status: (cluster) => this.transport.request("GET", `${base}/solana/recovery${q(cluster)}`, undefined, opts),
241
+ /** Needs a fresh step-up on `/me`. */
242
+ begin: (cluster) => this.transport.request("POST", `${base}/solana/recovery/begin${q(cluster)}`, undefined, opts),
243
+ complete: (cluster) => this.transport.request("POST", `${base}/solana/recovery/complete${q(cluster)}`, undefined, opts),
244
+ },
245
+ };
246
+ }
247
+ operationsAt(base, user = true) {
248
+ const opts = { user };
249
+ const prepare = (kind, chain) => this.transport.request("POST", `${base}/operations`, { ...kind, chain, client: this.client }, opts);
250
+ const submit = (id, assertion) => this.transport.request("POST", `${base}/operations/${id}/submit`, { assertion, client: this.client }, opts);
251
+ const get = (id) => this.transport.request("GET", `${base}/operations/${id}`, undefined, opts);
252
+ const wait = async (id, w = {}) => {
253
+ const interval = w.intervalMs ?? 2000;
254
+ const deadline = Date.now() + (w.timeoutMs ?? 120000);
255
+ for (;;) {
256
+ const s = await get(id);
257
+ if (s.state !== "prepared" && s.state !== "submitted")
258
+ return s;
259
+ if (Date.now() > deadline)
260
+ return s;
261
+ await new Promise((r) => setTimeout(r, interval));
262
+ }
263
+ };
264
+ return {
265
+ prepare,
266
+ submit,
267
+ get,
268
+ list: () => this.transport.request("GET", `${base}/operations`, undefined, opts),
269
+ /** Prepare, have the passkey sign, submit, and wait for inclusion. */
270
+ run: async (kind, o = {}) => {
271
+ const prepared = await prepare(kind, o.chain);
272
+ const assertion = await this.ceremony().get(prepared.webauthnOptions);
273
+ const status = await submit(prepared.id, assertion);
274
+ if (o.wait === false || status.state !== "submitted")
275
+ return status;
276
+ return wait(status.id, o.wait);
277
+ },
278
+ wait,
279
+ };
280
+ }
281
+ recoveryAt(base, user = true) {
282
+ const opts = { user };
283
+ const q = (chain) => (chain ? `?chain=${chain}` : "");
284
+ return {
285
+ status: (chain) => this.transport.request("GET", `${base}/recovery${q(chain)}`, undefined, opts),
286
+ /** Start moving the account to the newest passkey. Needs a fresh step-up on `/me`. */
287
+ begin: (chain) => this.transport.request("POST", `${base}/recovery/begin${q(chain)}`, { client: this.client }, opts),
288
+ complete: (chain) => this.transport.request("POST", `${base}/recovery/complete${q(chain)}`, { client: this.client }, opts),
289
+ };
290
+ }
291
+ sessionsAt(base, user = true) {
292
+ const opts = { user };
293
+ const ops = this.operationsAt(base, user);
294
+ return {
295
+ list: () => this.transport.request("GET", `${base}/sessions`, undefined, opts),
296
+ get: (id) => this.transport.request("GET", `${base}/sessions/${id}`, undefined, opts),
297
+ /** Act under a session key: no passkey, within the grant. */
298
+ execute: (id, call) => this.transport.request("POST", `${base}/sessions/${id}/execute`, { call, client: this.client }, opts),
299
+ /** Grant a session: a passkey-signed operation. Returns the session once the grant is on chain. */
300
+ grant: async (session, o = {}) => {
301
+ const status = await ops.run({ kind: "grant_session", session }, o);
302
+ if (!status.session)
303
+ throw new Error("the grant did not name a session");
304
+ const key = await this.transport.request("GET", `${base}/sessions/${status.session}`, undefined, opts);
305
+ return { session: key, operation: status };
306
+ },
307
+ /**
308
+ * Extend a key that already exists, keeping its address. One passkey
309
+ * ceremony and no new key to distribute — and the spent counter
310
+ * restarts, because that is what the account does with a fresh grant.
311
+ */
312
+ renew: async (session, o = {}) => {
313
+ const operation = await ops.run({ kind: "renew_session", session }, o);
314
+ const key = await this.transport.request("GET", `${base}/sessions/${session.session}`, undefined, opts);
315
+ return { session: key, operation };
316
+ },
317
+ revoke: (id, o = {}) => ops.run({ kind: "revoke_session", session: id }, o),
318
+ };
319
+ }
320
+ }
321
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ErrorCode } from "./types.js";
2
+ /** What the server said, as a thrown error: the code to branch on, the message to show. */
3
+ export declare class TheooError extends Error {
4
+ readonly code: ErrorCode | "NETWORK";
5
+ readonly status: number;
6
+ constructor(code: ErrorCode | "NETWORK", message: string, status: number);
7
+ /** The session is gone and cannot be refreshed: sign the user in again. */
8
+ get needsSignIn(): boolean;
9
+ /** A fresh passkey or code is needed before this action. */
10
+ get needsStepUp(): boolean;
11
+ }
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2FAA2F;AAC3F,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOxE,2EAA2E;IAC3E,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,4DAA4D;IAC5D,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF"}
package/dist/errors.js ADDED
@@ -0,0 +1,18 @@
1
+ /** What the server said, as a thrown error: the code to branch on, the message to show. */
2
+ export class TheooError extends Error {
3
+ constructor(code, message, status) {
4
+ super(message);
5
+ this.name = "TheooError";
6
+ this.code = code;
7
+ this.status = status;
8
+ }
9
+ /** The session is gone and cannot be refreshed: sign the user in again. */
10
+ get needsSignIn() {
11
+ return this.code === "SESSION_INVALID" || this.code === "SESSION_EXPIRED" || this.code === "SESSION_REPLAYED";
12
+ }
13
+ /** A fresh passkey or code is needed before this action. */
14
+ get needsStepUp() {
15
+ return this.code === "STEP_UP_REQUIRED" || this.code === "INSUFFICIENT_ASSURANCE";
16
+ }
17
+ }
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,MAAM,OAAO,UAAW,SAAQ,KAAK;IAInC,YAAY,IAA2B,EAAE,OAAe,EAAE,MAAc;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,2EAA2E;IAC3E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;IAChH,CAAC;IAED,4DAA4D;IAC5D,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAAC;IACpF,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export { Theoo, type TheooOptions, type WaitOptions } from "./client.js";
2
+ export { TheooError } from "./errors.js";
3
+ export { effectiveAssurance } from "./assurance.js";
4
+ export { MemoryTokenStore, type StoredTokens, type TokenStore } from "./tokens.js";
5
+ export { Transport, type FetchLike, type TransportOptions } from "./transport.js";
6
+ export { base64url, credentialToJSON, toCreationOptions, toRequestOptions, type PasskeyProvider } from "./webauthn.js";
7
+ export type * from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACvH,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { Theoo } from "./client.js";
2
+ export { TheooError } from "./errors.js";
3
+ export { effectiveAssurance } from "./assurance.js";
4
+ export { MemoryTokenStore } from "./tokens.js";
5
+ export { Transport } from "./transport.js";
6
+ export { base64url, credentialToJSON, toCreationOptions, toRequestOptions } from "./webauthn.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAsC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AssuranceLevel } from "./types.js";
2
+ export interface StoredTokens {
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ /** Unix milliseconds when the access token stops working. */
6
+ expiresAt: number;
7
+ sessionId: string;
8
+ user: string;
9
+ aal: AssuranceLevel;
10
+ }
11
+ /** Where a signed-in user's tokens live between calls. */
12
+ export interface TokenStore {
13
+ load(): Promise<StoredTokens | null>;
14
+ save(tokens: StoredTokens | null): Promise<void>;
15
+ }
16
+ export declare class MemoryTokenStore implements TokenStore {
17
+ private tokens;
18
+ load(): Promise<StoredTokens | null>;
19
+ save(tokens: StoredTokens | null): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,cAAc,CAAC;CACrB;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAA6B;IACrC,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAGpC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAGvD"}
package/dist/tokens.js ADDED
@@ -0,0 +1,12 @@
1
+ export class MemoryTokenStore {
2
+ constructor() {
3
+ this.tokens = null;
4
+ }
5
+ async load() {
6
+ return this.tokens;
7
+ }
8
+ async save(tokens) {
9
+ this.tokens = tokens;
10
+ }
11
+ }
12
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,gBAAgB;IAA7B;QACU,WAAM,GAAwB,IAAI,CAAC;IAO7C,CAAC;IANC,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,MAA2B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { StoredTokens, TokenStore } from "./tokens.js";
2
+ import type { SessionTokens } from "./types.js";
3
+ export type FetchLike = (input: string, init: RequestInit) => Promise<Response>;
4
+ export interface TransportOptions {
5
+ baseUrl: string;
6
+ /** The tenant's API key: publishable in an app, secret on a server. */
7
+ apiKey: string;
8
+ fetch?: FetchLike;
9
+ tokens?: TokenStore;
10
+ /** Called whenever the signed-in session changes: after sign-in, refresh and sign-out. */
11
+ onSession?: (tokens: StoredTokens | null) => void;
12
+ /**
13
+ * Permit a plaintext `http://` base URL to something other than loopback.
14
+ *
15
+ * Off by default, because every request carries an API key and a bearer
16
+ * token and `http://` puts both on the wire in the clear — a typo in a
17
+ * production config should fail loudly rather than leak quietly. Turn it on
18
+ * only for a server reaching another service across a network you control.
19
+ */
20
+ allowInsecureHttp?: boolean;
21
+ }
22
+ export interface RequestOptions {
23
+ /** Attach the signed-in user's bearer token. Refreshes it once if the server says it expired. */
24
+ user?: boolean;
25
+ /** Treat 404 as `null` rather than an error. */
26
+ optional?: boolean;
27
+ }
28
+ /** HTTP with the two headers every Theoo call needs, the error shape decoded, and refresh-on-expiry. */
29
+ export declare class Transport {
30
+ private readonly baseUrl;
31
+ private readonly apiKey;
32
+ private readonly fetchImpl;
33
+ readonly tokens: TokenStore;
34
+ private readonly onSession?;
35
+ private refreshing;
36
+ constructor(opts: TransportOptions);
37
+ request<T>(method: string, path: string, body?: unknown, opts?: RequestOptions): Promise<T>;
38
+ private once;
39
+ /** Store a fresh session; `null` signs out locally. */
40
+ setSession(session: SessionTokens | null, user?: string): Promise<StoredTokens | null>;
41
+ /** One refresh at a time; concurrent callers share it. */
42
+ refresh(): Promise<StoredTokens | null>;
43
+ private doRefresh;
44
+ }
45
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyCD,MAAM,WAAW,cAAc;IAC7B,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wGAAwG;AACxG,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAwC;IACnE,OAAO,CAAC,UAAU,CAA6C;gBAEnD,IAAI,EAAE,gBAAgB;IAgB5B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;YA4BvF,IAAI;IA+ClB,uDAAuD;IACjD,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAgB5F,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YASzB,SAAS;CAUxB"}