@usequeek/app-sdk 0.6.0 → 0.6.2
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 +97 -78
- package/dist/app-auth.d.ts +14 -15
- package/dist/app-auth.d.ts.map +1 -1
- package/dist/app-auth.js +19 -21
- package/dist/app-auth.js.map +1 -1
- package/dist/auth-fetch.d.ts +22 -23
- package/dist/auth-fetch.d.ts.map +1 -1
- package/dist/auth-fetch.js +22 -22
- package/dist/auth-fetch.js.map +1 -1
- package/dist/background.d.ts +1 -1
- package/dist/browser.d.ts +25 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +27 -0
- package/dist/browser.js.map +1 -0
- package/dist/client.d.ts +8 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/collected.d.ts +13 -14
- package/dist/collected.d.ts.map +1 -1
- package/dist/collected.js +4 -4
- package/dist/collected.js.map +1 -1
- package/dist/crypto.js +3 -3
- package/dist/crypto.js.map +1 -1
- package/dist/delivery.d.ts +4 -8
- package/dist/delivery.d.ts.map +1 -1
- package/dist/delivery.js +4 -8
- package/dist/delivery.js.map +1 -1
- package/dist/frame.d.ts +11 -11
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +11 -11
- package/dist/frame.js.map +1 -1
- package/dist/handoff.d.ts +35 -38
- package/dist/handoff.d.ts.map +1 -1
- package/dist/handoff.js +9 -9
- package/dist/hono.d.ts +3 -3
- package/dist/hono.js +3 -3
- package/dist/install-handlers.d.ts +6 -7
- package/dist/install-handlers.d.ts.map +1 -1
- package/dist/install-handlers.js +11 -11
- package/dist/install-handlers.js.map +1 -1
- package/dist/logger.js +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/merchant-schema.d.ts +14882 -6288
- package/dist/merchant-schema.d.ts.map +1 -1
- package/dist/proxy.d.ts +20 -22
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +19 -20
- package/dist/proxy.js.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/resync.d.ts +4 -4
- package/dist/resync.d.ts.map +1 -1
- package/dist/resync.js +4 -4
- package/dist/resync.js.map +1 -1
- package/dist/scopes.d.ts +22 -26
- package/dist/scopes.d.ts.map +1 -1
- package/dist/scopes.js +19 -23
- package/dist/scopes.js.map +1 -1
- package/dist/server.d.ts +3 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +16 -55
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +16 -86
- package/dist/session.js.map +1 -1
- package/dist/signatures.d.ts +5 -4
- package/dist/signatures.d.ts.map +1 -1
- package/dist/signatures.js +7 -6
- package/dist/signatures.js.map +1 -1
- package/dist/store.d.ts +20 -25
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +16 -19
- package/dist/store.js.map +1 -1
- package/dist/theme.d.ts +10 -6
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +10 -6
- package/dist/theme.js.map +1 -1
- package/dist/tokens.d.ts +9 -9
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +9 -10
- package/dist/tokens.js.map +1 -1
- package/dist/webhooks.d.ts +2 -3
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +2 -3
- package/dist/webhooks.js.map +1 -1
- package/package.json +8 -3
package/dist/proxy.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type InstallationRecord, type InstallationStore } from "./store.js";
|
|
2
2
|
/**
|
|
3
3
|
* Storefront app-proxy query verification, byte-for-byte compatible with
|
|
4
|
-
* Queek
|
|
4
|
+
* the way Queek signs proxy reads.
|
|
5
5
|
*
|
|
6
6
|
* Queek signs a READ fetch to the app's proxy handler with the installation's
|
|
7
|
-
* `proxy_secret
|
|
8
|
-
*
|
|
7
|
+
* `proxy_secret`: the app verifies server-side before answering the
|
|
8
|
+
* shopper. Canonical signature (per-installation secret):
|
|
9
9
|
*
|
|
10
10
|
* sig = hex HMAC-SHA256 over
|
|
11
11
|
* path + "\n" + shop + "\n" + ts + "\n" + sorted(k=v&...) (sig excluded),
|
|
@@ -14,9 +14,9 @@ import { type InstallationRecord, type InstallationStore } from "./store.js";
|
|
|
14
14
|
* byte-wise. The HMAC key is the FULL `whsec_…` string — no base64 decode
|
|
15
15
|
* step (the single most common integration bug cannot happen here).
|
|
16
16
|
*
|
|
17
|
-
* `path` is the QUEEK-side canonical path (`/apps/<subpath>/<rest>`,
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* `path` is the QUEEK-side canonical path (`/apps/<subpath>/<rest>`, the
|
|
18
|
+
* path Queek signs), NOT the app's local route: pass it explicitly per
|
|
19
|
+
* route (see `handleProxyRequest`).
|
|
20
20
|
*
|
|
21
21
|
* Layering mirrors the install/webhook handlers: layer 1
|
|
22
22
|
* `verifyProxyDelivery` takes plain data (path + query) and returns a plain
|
|
@@ -30,19 +30,19 @@ export declare const PROXY_NONCE_PARAM = "jti";
|
|
|
30
30
|
export declare const PROXY_SHOP_PARAM = "shop";
|
|
31
31
|
export declare const PROXY_CUSTOMER_PARAM = "logged_in_customer_id";
|
|
32
32
|
export declare const PROXY_KID_PARAM = "kid";
|
|
33
|
-
/**
|
|
33
|
+
/** Default allowed clock skew in seconds; the floor (60s) below applies regardless. */
|
|
34
34
|
export declare const PROXY_MAX_SKEW_SECONDS = 300;
|
|
35
35
|
/** Query params as any framework holds them (duplicates collapse to the first value). */
|
|
36
36
|
export type ProxyQuery = Record<string, string | string[] | null | undefined>;
|
|
37
37
|
/** Failure reason when proxy verification rejects a query. */
|
|
38
38
|
export type ProxyFailure = "missing_params" | "stale_timestamp" | "missing_secret" | "signature_mismatch" | "unknown_installation" | "replayed";
|
|
39
39
|
/**
|
|
40
|
-
* The canonical string the MAC covers
|
|
41
|
-
*
|
|
40
|
+
* The canonical string the MAC covers, exactly as Queek builds it (sig
|
|
41
|
+
* excluded, keys byte-sorted, rawurlencoded pairs).
|
|
42
42
|
*/
|
|
43
43
|
export declare function buildProxyCanonicalString(path: string, params: Record<string, string>): string;
|
|
44
44
|
/**
|
|
45
|
-
* One hex signature for one secret
|
|
45
|
+
* One hex signature for one secret, computed as Queek computes it.
|
|
46
46
|
* Exported so tests (and dev harnesses) can recompute a signature
|
|
47
47
|
* independently of the verifier; production traffic is signed by Queek.
|
|
48
48
|
*/
|
|
@@ -50,15 +50,14 @@ export declare function signProxyQuery(path: string, params: Record<string, stri
|
|
|
50
50
|
export interface ProxyVerifyOptions {
|
|
51
51
|
/** Unix seconds to judge freshness against (defaults to now). Exposed for tests. */
|
|
52
52
|
nowSeconds?: number;
|
|
53
|
-
/** Allowed clock skew in seconds (defaults to PROXY_MAX_SKEW_SECONDS; floored at 60
|
|
53
|
+
/** Allowed clock skew in seconds (defaults to PROXY_MAX_SKEW_SECONDS; floored at 60). */
|
|
54
54
|
maxSkewSeconds?: number;
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Pure verification over explicitly passed secrets
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* `
|
|
61
|
-
* (the framework-free translation of the backend's atomic `Cache::add`).
|
|
57
|
+
* Pure verification over explicitly passed secrets (structure → skew →
|
|
58
|
+
* secret presence → MAC over every active secret). No replay enforcement
|
|
59
|
+
* here: single-use `jti` needs storage, so the store-backed
|
|
60
|
+
* `verifyProxyDelivery` claims it atomically.
|
|
62
61
|
*/
|
|
63
62
|
export declare function verifyProxyQueryDetailed(path: string, query: ProxyQuery, secrets: string[], options?: ProxyVerifyOptions): {
|
|
64
63
|
ok: true;
|
|
@@ -72,8 +71,7 @@ export interface ProxyStoreOptions extends ProxyVerifyOptions {
|
|
|
72
71
|
store: InstallationStore;
|
|
73
72
|
/**
|
|
74
73
|
* Skip the single-use `jti` claim (NOT recommended; exposed for tests and
|
|
75
|
-
* for apps that enforce replay themselves). Defaults to enforcing
|
|
76
|
-
* the backend.
|
|
74
|
+
* for apps that enforce replay themselves). Defaults to enforcing.
|
|
77
75
|
*/
|
|
78
76
|
enforceReplay?: boolean;
|
|
79
77
|
}
|
|
@@ -101,7 +99,7 @@ export declare function verifyProxyDelivery(input: {
|
|
|
101
99
|
}, options: ProxyStoreOptions): Promise<ProxyVerification>;
|
|
102
100
|
export interface ProxyRequestOptions extends ProxyStoreOptions {
|
|
103
101
|
/**
|
|
104
|
-
* The Queek-side canonical path
|
|
102
|
+
* The Queek-side canonical path Queek signed
|
|
105
103
|
* (`/apps/<subpath>/<rest>`, e.g. `/apps/booking/availability`) — the
|
|
106
104
|
* app's local route is NOT it. Pass one per route.
|
|
107
105
|
*/
|
|
@@ -114,9 +112,9 @@ export type ProxyResponder = (verified: {
|
|
|
114
112
|
}) => Response | Promise<Response>;
|
|
115
113
|
/**
|
|
116
114
|
* Layer 2: the Web-standard wrapper, built ONLY on layer 1 — reads the query
|
|
117
|
-
* off the request URL, calls the core, builds the `Response`.
|
|
118
|
-
* read-only
|
|
119
|
-
*
|
|
115
|
+
* off the request URL, calls the core, builds the `Response`. Proxy reads
|
|
116
|
+
* are read-only (Queek only ever sends GET), so only `GET` is served;
|
|
117
|
+
* anything else answers 405.
|
|
120
118
|
*/
|
|
121
119
|
export declare function handleProxyRequest(request: Request, options: ProxyRequestOptions, onVerified: ProxyResponder): Promise<Response>;
|
|
122
120
|
//# sourceMappingURL=proxy.d.ts.map
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAgB,MAAM,YAAY,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAgB,MAAM,YAAY,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE9E,8DAA8D;AAC9D,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,GACpB,sBAAsB,GACtB,UAAU,CAAC;AA0Bf;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAM9F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnG;AAED,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAwBD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,kBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAkBpD;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAET;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,KAAK,EAAE,iBAAiB,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EAC1C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CA8C5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,kBAAkB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEnC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC,QAAQ,CAAC,CAenB"}
|
package/dist/proxy.js
CHANGED
|
@@ -3,11 +3,11 @@ import { toResponse } from "./delivery.js";
|
|
|
3
3
|
import { normalisePid } from "./store.js";
|
|
4
4
|
/**
|
|
5
5
|
* Storefront app-proxy query verification, byte-for-byte compatible with
|
|
6
|
-
* Queek
|
|
6
|
+
* the way Queek signs proxy reads.
|
|
7
7
|
*
|
|
8
8
|
* Queek signs a READ fetch to the app's proxy handler with the installation's
|
|
9
|
-
* `proxy_secret
|
|
10
|
-
*
|
|
9
|
+
* `proxy_secret`: the app verifies server-side before answering the
|
|
10
|
+
* shopper. Canonical signature (per-installation secret):
|
|
11
11
|
*
|
|
12
12
|
* sig = hex HMAC-SHA256 over
|
|
13
13
|
* path + "\n" + shop + "\n" + ts + "\n" + sorted(k=v&...) (sig excluded),
|
|
@@ -16,9 +16,9 @@ import { normalisePid } from "./store.js";
|
|
|
16
16
|
* byte-wise. The HMAC key is the FULL `whsec_…` string — no base64 decode
|
|
17
17
|
* step (the single most common integration bug cannot happen here).
|
|
18
18
|
*
|
|
19
|
-
* `path` is the QUEEK-side canonical path (`/apps/<subpath>/<rest>`,
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* `path` is the QUEEK-side canonical path (`/apps/<subpath>/<rest>`, the
|
|
20
|
+
* path Queek signs), NOT the app's local route: pass it explicitly per
|
|
21
|
+
* route (see `handleProxyRequest`).
|
|
22
22
|
*
|
|
23
23
|
* Layering mirrors the install/webhook handlers: layer 1
|
|
24
24
|
* `verifyProxyDelivery` takes plain data (path + query) and returns a plain
|
|
@@ -32,15 +32,15 @@ export const PROXY_NONCE_PARAM = "jti";
|
|
|
32
32
|
export const PROXY_SHOP_PARAM = "shop";
|
|
33
33
|
export const PROXY_CUSTOMER_PARAM = "logged_in_customer_id";
|
|
34
34
|
export const PROXY_KID_PARAM = "kid";
|
|
35
|
-
/**
|
|
35
|
+
/** Default allowed clock skew in seconds; the floor (60s) below applies regardless. */
|
|
36
36
|
export const PROXY_MAX_SKEW_SECONDS = 300;
|
|
37
|
-
/** PHP `rawurlencode
|
|
37
|
+
/** RFC 3986 percent-encoding (PHP's `rawurlencode`): everything except `[A-Za-z0-9-_.~]` is `%XX` (upper-case hex). */
|
|
38
38
|
function proxyEncode(value) {
|
|
39
39
|
return encodeURIComponent(value).replace(/[!'()*]/g, (ch) => {
|
|
40
40
|
return `%${ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, "0")}`;
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
/** PHP `strval`
|
|
43
|
+
/** Scalar query values as strings (PHP `strval` semantics): null/undefined become `""`, everything else stringifies. */
|
|
44
44
|
function proxyString(value) {
|
|
45
45
|
if (value === undefined)
|
|
46
46
|
return undefined;
|
|
@@ -59,8 +59,8 @@ function normalizeQuery(query) {
|
|
|
59
59
|
return out;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* The canonical string the MAC covers
|
|
63
|
-
*
|
|
62
|
+
* The canonical string the MAC covers, exactly as Queek builds it (sig
|
|
63
|
+
* excluded, keys byte-sorted, rawurlencoded pairs).
|
|
64
64
|
*/
|
|
65
65
|
export function buildProxyCanonicalString(path, params) {
|
|
66
66
|
const sorted = { ...params };
|
|
@@ -70,7 +70,7 @@ export function buildProxyCanonicalString(path, params) {
|
|
|
70
70
|
return `${path}\n${sorted[PROXY_SHOP_PARAM] ?? ""}\n${sorted[PROXY_TIMESTAMP_PARAM] ?? ""}\n${pairs.join("&")}`;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
|
-
* One hex signature for one secret
|
|
73
|
+
* One hex signature for one secret, computed as Queek computes it.
|
|
74
74
|
* Exported so tests (and dev harnesses) can recompute a signature
|
|
75
75
|
* independently of the verifier; production traffic is signed by Queek.
|
|
76
76
|
*/
|
|
@@ -98,11 +98,10 @@ function proxyMacMatches(path, params, sig, secret) {
|
|
|
98
98
|
return candidateBuf.length === expectedBuf.length && timingSafeEqual(candidateBuf, expectedBuf);
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
|
-
* Pure verification over explicitly passed secrets
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* `
|
|
105
|
-
* (the framework-free translation of the backend's atomic `Cache::add`).
|
|
101
|
+
* Pure verification over explicitly passed secrets (structure → skew →
|
|
102
|
+
* secret presence → MAC over every active secret). No replay enforcement
|
|
103
|
+
* here: single-use `jti` needs storage, so the store-backed
|
|
104
|
+
* `verifyProxyDelivery` claims it atomically.
|
|
106
105
|
*/
|
|
107
106
|
export function verifyProxyQueryDetailed(path, query, secrets, options = {}) {
|
|
108
107
|
const params = normalizeQuery(query);
|
|
@@ -181,9 +180,9 @@ export async function verifyProxyDelivery(input, options) {
|
|
|
181
180
|
}
|
|
182
181
|
/**
|
|
183
182
|
* Layer 2: the Web-standard wrapper, built ONLY on layer 1 — reads the query
|
|
184
|
-
* off the request URL, calls the core, builds the `Response`.
|
|
185
|
-
* read-only
|
|
186
|
-
*
|
|
183
|
+
* off the request URL, calls the core, builds the `Response`. Proxy reads
|
|
184
|
+
* are read-only (Queek only ever sends GET), so only `GET` is served;
|
|
185
|
+
* anything else answers 405.
|
|
187
186
|
*/
|
|
188
187
|
export async function handleProxyRequest(request, options, onVerified) {
|
|
189
188
|
if (request.method.toUpperCase() !== "GET") {
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAuB,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAmD,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/react.d.ts
CHANGED
package/dist/react.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
/**
|
|
3
|
-
* Optional React bindings for `@usequeek/app-sdk
|
|
3
|
+
* Optional React bindings for `@usequeek/app-sdk`.
|
|
4
4
|
*
|
|
5
5
|
* Import from `@usequeek/app-sdk/react` (requires the optional `react`
|
|
6
6
|
* peer) — a thin layer built ONLY on the framework-free core (`frame.js` /
|
package/dist/resync.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type Logger } from "./logger.js";
|
|
|
2
2
|
import type { InstallationStore } from "./store.js";
|
|
3
3
|
import { type AppTokenProvider } from "./tokens.js";
|
|
4
4
|
/**
|
|
5
|
-
* Connectivity recovery
|
|
5
|
+
* Connectivity recovery: after a database loss (or an
|
|
6
6
|
* outage that outlasted the webhook retries), re-list the app's
|
|
7
7
|
* installations from Queek and re-handshake each one's secrets.
|
|
8
8
|
*
|
|
@@ -13,7 +13,7 @@ import { type AppTokenProvider } from "./tokens.js";
|
|
|
13
13
|
* settings arrive over the EXISTING signed install channel (same handoff
|
|
14
14
|
* envelope as install), handled by the install handler — which accepts a
|
|
15
15
|
* resync for an existing installation idempotently.
|
|
16
|
-
* - Per-installation refusals (
|
|
16
|
+
* - Per-installation refusals (distinguished by code): 409
|
|
17
17
|
* `app_installation_pending` retries later with backoff (bounded, then
|
|
18
18
|
* skipped + recorded — NEVER purged); 429 `resync_cooldown` is the
|
|
19
19
|
* rotation COOLDOWN (≤1/hour: skipped + recorded, no retry loop); any
|
|
@@ -37,14 +37,14 @@ import { type AppTokenProvider } from "./tokens.js";
|
|
|
37
37
|
* resync cannot backfill them.
|
|
38
38
|
*/
|
|
39
39
|
export interface ResyncOptions {
|
|
40
|
-
/** The
|
|
40
|
+
/** The Queek API host serving `/api/v1/apps` (normally any installation's `api_base`). */
|
|
41
41
|
apiBase: string;
|
|
42
42
|
tokens: AppTokenProvider;
|
|
43
43
|
store: InstallationStore;
|
|
44
44
|
fetchImpl?: typeof fetch;
|
|
45
45
|
/** Sent as User-Agent. Defaults to `queek-app/1.0`. */
|
|
46
46
|
userAgent?: string;
|
|
47
|
-
/** Extra allowed `apiBase` hosts (test/local
|
|
47
|
+
/** Extra allowed `apiBase` hosts (test/local API hosts). */
|
|
48
48
|
allowedApiHosts?: string[];
|
|
49
49
|
logger?: Logger;
|
|
50
50
|
sleep?: (ms: number) => Promise<void>;
|
package/dist/resync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resync.d.ts","sourceRoot":"","sources":["../src/resync.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,aAAa;IAC5B
|
|
1
|
+
{"version":3,"file":"resync.d.ts","sourceRoot":"","sources":["../src/resync.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iFAAiF;IACjF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gFAAgF;IAChF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAwLnF"}
|
package/dist/resync.js
CHANGED
|
@@ -49,7 +49,7 @@ export async function resyncFromQueek(options) {
|
|
|
49
49
|
}
|
|
50
50
|
// -- List (opaque keyset cursor, secret-free) ------------------------------
|
|
51
51
|
// The cursor is never interpreted — echoed back verbatim until
|
|
52
|
-
// `next_cursor` is null (
|
|
52
|
+
// `next_cursor` is null (keyset on a stable unique key, scoped to
|
|
53
53
|
// the calling app; inserts/uninstalls mid-walk never skip or duplicate).
|
|
54
54
|
const listed = [];
|
|
55
55
|
let cursor = null;
|
|
@@ -120,7 +120,7 @@ export async function resyncFromQueek(options) {
|
|
|
120
120
|
break;
|
|
121
121
|
}
|
|
122
122
|
if (response.status === 429) {
|
|
123
|
-
// Per-app bucket
|
|
123
|
+
// Per-app bucket: back off on `Retry-After` (jittered) and
|
|
124
124
|
// retry — never recorded as a cooldown skip. An exhausted budget
|
|
125
125
|
// aborts the run: the whole app is throttled, so pushing on would
|
|
126
126
|
// only deepen it; the caller retries later.
|
|
@@ -130,7 +130,7 @@ export async function resyncFromQueek(options) {
|
|
|
130
130
|
continue;
|
|
131
131
|
}
|
|
132
132
|
if (response.status === 409 && isInstallationPending(error.code)) {
|
|
133
|
-
// Pending installation
|
|
133
|
+
// Pending installation:
|
|
134
134
|
// retry later with backoff — NEVER purge. An exhausted budget
|
|
135
135
|
// skips (recorded); the persisted mark survives restarts, so the
|
|
136
136
|
// purge-absent step below (and after a restart) keeps the row.
|
|
@@ -169,7 +169,7 @@ export async function resyncFromQueek(options) {
|
|
|
169
169
|
}
|
|
170
170
|
// …and purge local rows Queek no longer lists (uninstall-while-down) —
|
|
171
171
|
// EXCEPT rows carrying the persisted pending mark. The list covers
|
|
172
|
-
// ACTIVE installations only
|
|
172
|
+
// ACTIVE installations only, so absence alone never purges a
|
|
173
173
|
// pending row — including after a process restart, because the mark
|
|
174
174
|
// lives in the store column, not in memory. The row stays for a later
|
|
175
175
|
// run, when it is active (listed + resynced), gone (404 → purged), or
|
package/dist/resync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resync.js","sourceRoot":"","sources":["../src/resync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resync.js","sourceRoot":"","sources":["../src/resync.ts"],"names":[],"mappings":"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"}
|
package/dist/scopes.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { QueekApiError } from "./client.js";
|
|
2
2
|
import type { InstallationStore } from "./store.js";
|
|
3
3
|
/**
|
|
4
|
-
* Optional scopes
|
|
5
|
-
* parity — symbol names cited only).
|
|
4
|
+
* Optional scopes: query, request and revoke.
|
|
6
5
|
*
|
|
7
6
|
* - `queryScopes`: the cached effective grant split against the app's own
|
|
8
7
|
* declared-optional list. Store-read only, never a fetch: the app-credential
|
|
@@ -14,25 +13,24 @@ import type { InstallationStore } from "./store.js";
|
|
|
14
13
|
* consent — it hands the app a link shaped like the bridge
|
|
15
14
|
* `open`/`navigate` targets (dashboard-relative path, or an absolute URL
|
|
16
15
|
* under a given dashboard origin) for the app to open via `sendOpen` or
|
|
17
|
-
* redirect to.
|
|
18
|
-
*
|
|
16
|
+
* redirect to. Opening it requires a dashboard that supports the consent
|
|
17
|
+
* screen, which honours this link shape.
|
|
19
18
|
* - `revokeScopes`: `POST
|
|
20
19
|
* /api/v1/apps/installations/{installation}/scopes/revoke` with the app
|
|
21
|
-
* JWT (same credential as mint/resync —
|
|
22
|
-
*
|
|
23
|
-
* `RevokeAppScopesRequest`); an `Idempotency-Key` rides the write for
|
|
20
|
+
* JWT (same credential as mint/resync — not the installation token).
|
|
21
|
+
* Body `{scopes[]}` (1–50); an `Idempotency-Key` rides the write for
|
|
24
22
|
* discipline (generated when the caller does not supply one — the client
|
|
25
23
|
* write discipline), though the route is naturally idempotent: revoking
|
|
26
24
|
* a never-granted optional scope is 200 with no change. Required scopes
|
|
27
25
|
* refuse 422 `app_scope_required` (surfaced as `AppScopeRequiredError`).
|
|
28
26
|
* On 200 the cached grant is refreshed from the response and the cached
|
|
29
27
|
* token dropped only when the grant moved (same compare-and-clear as the
|
|
30
|
-
* scopes_update handler —
|
|
31
|
-
*
|
|
28
|
+
* scopes_update handler — Queek rewrites live token rows in place, so
|
|
29
|
+
* the drop is a backstop, not the mechanism).
|
|
32
30
|
*
|
|
33
31
|
* Types here are hand-written: the revoke endpoint and the scopes_update
|
|
34
|
-
* handoff live on the app-credential surface, which the
|
|
35
|
-
* `openapi/merchant.json` does not cover (types are generated app-side by
|
|
32
|
+
* handoff live on the app-credential surface, which the bundled
|
|
33
|
+
* `openapi/merchant.json` snapshot does not cover (types are generated app-side by
|
|
36
34
|
* `queek app codegen`; the merchant spec file is never hand-edited).
|
|
37
35
|
*/
|
|
38
36
|
/** 422 on the revoke endpoint: required scopes are never revocable (uninstall is the remedy). */
|
|
@@ -43,8 +41,8 @@ export declare const APP_SCOPE_UNDECLARED_CODE = "app_scope_undeclared";
|
|
|
43
41
|
export declare function isAppScopeRequired(status: number, code: string | undefined): boolean;
|
|
44
42
|
/**
|
|
45
43
|
* A required-scope refusal, typed so callers switch on the class (or
|
|
46
|
-
* `code`), never on `message`. Carries the offending scopes when
|
|
47
|
-
*
|
|
44
|
+
* `code`), never on `message`. Carries the offending scopes when Queek
|
|
45
|
+
* named them.
|
|
48
46
|
*/
|
|
49
47
|
export declare class AppScopeRequiredError extends QueekApiError {
|
|
50
48
|
readonly scopes: string[];
|
|
@@ -57,13 +55,13 @@ export declare class InvalidScopesError extends Error {
|
|
|
57
55
|
readonly code = "invalid_scopes";
|
|
58
56
|
constructor(message: string);
|
|
59
57
|
}
|
|
60
|
-
/**
|
|
58
|
+
/** Bounds of the revoke request (1–50 scopes), mirrored client-side. */
|
|
61
59
|
export declare const MAX_SCOPE_LIST = 50;
|
|
62
60
|
export declare const MAX_SCOPE_LENGTH = 120;
|
|
63
61
|
/**
|
|
64
62
|
* Validate + normalise a scope list (trim, drop empties, dedupe keeping
|
|
65
|
-
* first order). Mirrors the
|
|
66
|
-
*
|
|
63
|
+
* first order). Mirrors the revoke endpoint's rules (a required array of
|
|
64
|
+
* 1–50 string items) so a malformed call fails before any fetch.
|
|
67
65
|
*/
|
|
68
66
|
export declare function normaliseScopeList(scopes: unknown): string[];
|
|
69
67
|
/** The cached-grant split `queryScopes` returns. */
|
|
@@ -99,8 +97,7 @@ export interface ScopeRequestLinkOptions {
|
|
|
99
97
|
* under `dashboardOrigin` (refused exactly like `sendOpen` refuses a bad
|
|
100
98
|
* target).
|
|
101
99
|
*
|
|
102
|
-
* Link shape (the
|
|
103
|
-
* the only query route the dashboard `AppsPage` serves):
|
|
100
|
+
* Link shape (the contract the dashboard's consent screen honours):
|
|
104
101
|
* `/apps?app={slug}&view=scopes&scopes={a},{b}` (each scope
|
|
105
102
|
* URL-encoded, comma-separated). The link carries the slug + the scope
|
|
106
103
|
* list only: the dashboard resolves the installation from the signed-in
|
|
@@ -132,14 +129,14 @@ export interface InstallationScopesClientOptions {
|
|
|
132
129
|
store: InstallationStore;
|
|
133
130
|
/**
|
|
134
131
|
* A fresh app JWT per call — e.g. `() => provider.signJwt()`. The revoke
|
|
135
|
-
* endpoint takes the same app credential as mint/resync (
|
|
136
|
-
*
|
|
132
|
+
* endpoint takes the same app credential as mint/resync (not the
|
|
133
|
+
* installation token).
|
|
137
134
|
*/
|
|
138
135
|
signJwt: () => string;
|
|
139
136
|
fetchImpl?: typeof fetch;
|
|
140
137
|
/** Sent as User-Agent. Defaults to `queek-app/1.0`. */
|
|
141
138
|
userAgent?: string;
|
|
142
|
-
/** Extra allowed `apiBase` hosts (test/local
|
|
139
|
+
/** Extra allowed `apiBase` hosts (test/local API hosts). */
|
|
143
140
|
allowedApiHosts?: string[];
|
|
144
141
|
/** The app's dashboard slug (addresses the scope-request consent screen); per-call override wins. */
|
|
145
142
|
appSlug?: string;
|
|
@@ -153,11 +150,10 @@ export interface InstallationScopesClientOptions {
|
|
|
153
150
|
dashboardOrigin?: string;
|
|
154
151
|
}
|
|
155
152
|
/**
|
|
156
|
-
* The per-installation scopes session
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* lives here, wired to the same store + token provider.
|
|
153
|
+
* The per-installation scopes session. A sibling of the installation
|
|
154
|
+
* client, not a method on it: the installation client's exact type is part
|
|
155
|
+
* of the public API (and is guarded by a generics type test), so the
|
|
156
|
+
* scopes surface lives here, wired to the same store + token provider.
|
|
161
157
|
*
|
|
162
158
|
* - `queryScopes` reads the cached grant (no network).
|
|
163
159
|
* - `requestScopes` builds the dashboard deep link the merchant approves
|
package/dist/scopes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,aAAa,EAA6B,MAAM,aAAa,CAAC;AAG1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD
|
|
1
|
+
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../src/scopes.ts"],"names":[],"mappings":"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"}
|