@flytedesk/app-kit 3.2.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -10
- package/dist/auth/client/httpClient.d.ts +79 -1
- package/dist/auth/client/httpClient.js +185 -16
- package/dist/auth/client/httpClient.js.map +1 -1
- package/dist/auth/client/index.d.ts +4 -4
- package/dist/auth/client/index.js +3 -3
- package/dist/auth/client/index.js.map +1 -1
- package/dist/auth/client/useAuthSession.d.ts +61 -13
- package/dist/auth/client/useAuthSession.js +185 -42
- package/dist/auth/client/useAuthSession.js.map +1 -1
- package/dist/auth/errors.d.ts +30 -7
- package/dist/auth/errors.js +38 -8
- package/dist/auth/errors.js.map +1 -1
- package/dist/auth/guards.d.ts +12 -0
- package/dist/auth/guards.js +24 -6
- package/dist/auth/guards.js.map +1 -1
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/index.js +2 -2
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oidc-client.js +12 -2
- package/dist/auth/oidc-client.js.map +1 -1
- package/dist/auth/plugin.d.ts +6 -0
- package/dist/auth/plugin.js +532 -304
- package/dist/auth/plugin.js.map +1 -1
- package/dist/auth/shared-types.d.ts +28 -1
- package/dist/auth/shared-types.js +35 -0
- package/dist/auth/shared-types.js.map +1 -1
- package/dist/auth/silentAuthPage.d.ts +20 -0
- package/dist/auth/silentAuthPage.js +75 -0
- package/dist/auth/silentAuthPage.js.map +1 -0
- package/dist/auth/testing/fake-idp.d.ts +35 -0
- package/dist/auth/testing/fake-idp.js +86 -2
- package/dist/auth/testing/fake-idp.js.map +1 -1
- package/dist/auth/testing/index.d.ts +3 -1
- package/dist/auth/testing/index.js +3 -1
- package/dist/auth/testing/index.js.map +1 -1
- package/dist/auth/testing/memory-store.d.ts +44 -0
- package/dist/auth/testing/memory-store.js +120 -0
- package/dist/auth/testing/memory-store.js.map +1 -0
- package/dist/auth/tokens.d.ts +24 -0
- package/dist/auth/tokens.js +31 -1
- package/dist/auth/tokens.js.map +1 -1
- package/dist/auth/types.d.ts +231 -96
- package/dist/auth/unavailable.d.ts +10 -0
- package/dist/auth/unavailable.js +11 -0
- package/dist/auth/unavailable.js.map +1 -0
- package/dist/bigquery/errors.d.ts +14 -3
- package/dist/bigquery/errors.js +54 -13
- package/dist/bigquery/errors.js.map +1 -1
- package/dist/bigquery/index.d.ts +5 -3
- package/dist/bigquery/index.js +4 -2
- package/dist/bigquery/index.js.map +1 -1
- package/dist/bigquery/query.d.ts +9 -2
- package/dist/bigquery/query.js +38 -16
- package/dist/bigquery/query.js.map +1 -1
- package/dist/bigquery/types.d.ts +45 -1
- package/dist/flags/plugin.js +4 -20
- package/dist/flags/plugin.js.map +1 -1
- package/dist/postgres/advisoryLock.d.ts +58 -0
- package/dist/postgres/advisoryLock.js +71 -0
- package/dist/postgres/advisoryLock.js.map +1 -0
- package/dist/postgres/index.d.ts +6 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/profile/plugin.js +3 -20
- package/dist/profile/plugin.js.map +1 -1
- package/package.json +7 -2
- package/scripts/pending-release-count.mjs +0 -37
- package/scripts/release.sh +0 -126
- package/scripts/release.test.ts +0 -205
package/dist/bigquery/index.d.ts
CHANGED
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
* labels: client.buildJobLabels({ actor: userId, purpose: "audience-export" }),
|
|
29
29
|
* pageSize: 500,
|
|
30
30
|
* });
|
|
31
|
-
* // page.nextPageToken, if present, resumes
|
|
31
|
+
* // page.nextPageToken, if present, resumes on the SAME job with
|
|
32
|
+
* // { ...same options, pageToken: page.nextPageToken, jobId: page.jobId }
|
|
33
|
+
* // (a page token is only valid against the job that produced it)
|
|
32
34
|
*
|
|
33
35
|
* const { jobId } = await client.extractTableToGCS({
|
|
34
36
|
* datasetId: "dataset",
|
|
@@ -46,5 +48,5 @@ export { loadRowsWithRetry } from "./load.js";
|
|
|
46
48
|
export type { LoadRowsOptions } from "./load.js";
|
|
47
49
|
export { buildJobLabels, sanitizeLabelValue } from "./labels.js";
|
|
48
50
|
export { unwrapBigQueryCount, unwrapBigQueryValue } from "./values.js";
|
|
49
|
-
export { BadQueryError, BigQueryReadError, DryRunBudgetExceededError, PermissionDeniedError, RateLimitExceededError, classifyBigQueryError, isRetryableBigQueryError, } from "./errors.js";
|
|
50
|
-
export type { BigQueryApiErrorDetail, BigQueryCreateQueryJobOptions, BigQueryDatasetLike, BigQueryExtractOptions, BigQueryJobLike, BigQueryJobMetadata, BigQueryLike, BigQueryLoadOptions, BigQueryNextQuery, BigQueryQueryResultsOptions, BigQuerySchemaField, BigQueryTableLike, BigQueryWriteStreamLike, DryRunEstimate, EstimateQueryBytesOptions, ExtractJobHandle, ExtractJobState, ExtractJobStatus, ExtractTableToGCSInput, GcsFileLike, JobLabelInput, QueryPage, RunQueryOptions, WaitForExtractJobOptions, } from "./types.js";
|
|
51
|
+
export { BadQueryError, BigQueryReadError, DryRunBudgetExceededError, MaximumBytesBilledExceededError, PermissionDeniedError, RateLimitExceededError, classifyBigQueryError, isRetryableBigQueryError, } from "./errors.js";
|
|
52
|
+
export type { BigQueryApiErrorDetail, BigQueryCreateQueryJobOptions, BigQueryDatasetLike, BigQueryExtractOptions, BigQueryJobLike, BigQueryJobMetadata, BigQueryLike, BigQueryLoadOptions, BigQueryNextQuery, BigQueryQueryResultsOptions, BigQuerySchemaField, BigQueryTableLike, BigQueryTableReference, BigQueryWriteStreamLike, DryRunEstimate, EstimateQueryBytesOptions, ExtractJobHandle, ExtractJobState, ExtractJobStatus, ExtractTableToGCSInput, GcsFileLike, JobLabelInput, QueryPage, RunQueryOptions, WaitForExtractJobOptions, } from "./types.js";
|
package/dist/bigquery/index.js
CHANGED
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
* labels: client.buildJobLabels({ actor: userId, purpose: "audience-export" }),
|
|
29
29
|
* pageSize: 500,
|
|
30
30
|
* });
|
|
31
|
-
* // page.nextPageToken, if present, resumes
|
|
31
|
+
* // page.nextPageToken, if present, resumes on the SAME job with
|
|
32
|
+
* // { ...same options, pageToken: page.nextPageToken, jobId: page.jobId }
|
|
33
|
+
* // (a page token is only valid against the job that produced it)
|
|
32
34
|
*
|
|
33
35
|
* const { jobId } = await client.extractTableToGCS({
|
|
34
36
|
* datasetId: "dataset",
|
|
@@ -44,5 +46,5 @@ export { extractTableToGCS, getExtractJobStatus, waitForExtractJob, } from "./ex
|
|
|
44
46
|
export { loadRowsWithRetry } from "./load.js";
|
|
45
47
|
export { buildJobLabels, sanitizeLabelValue } from "./labels.js";
|
|
46
48
|
export { unwrapBigQueryCount, unwrapBigQueryValue } from "./values.js";
|
|
47
|
-
export { BadQueryError, BigQueryReadError, DryRunBudgetExceededError, PermissionDeniedError, RateLimitExceededError, classifyBigQueryError, isRetryableBigQueryError, } from "./errors.js";
|
|
49
|
+
export { BadQueryError, BigQueryReadError, DryRunBudgetExceededError, MaximumBytesBilledExceededError, PermissionDeniedError, RateLimitExceededError, classifyBigQueryError, isRetryableBigQueryError, } from "./errors.js";
|
|
48
50
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bigquery/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bigquery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAMvD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC"}
|
package/dist/bigquery/query.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import type { BigQueryLike, DryRunEstimate, EstimateQueryBytesOptions, QueryPage, RunQueryOptions } from "./types.js";
|
|
2
2
|
/** Runs one page of a parameterised, read-only query. Always bind
|
|
3
3
|
* user-supplied values through `options.params`/`options.types` — never
|
|
4
|
-
* string-interpolate them into `options.sql`.
|
|
4
|
+
* string-interpolate them into `options.sql`.
|
|
5
|
+
*
|
|
6
|
+
* A BigQuery page token is only valid against the job that produced it
|
|
7
|
+
* (AK-26) — passing `pageToken` therefore REQUIRES `jobId` (the `jobId` a
|
|
8
|
+
* prior `QueryPage` returned) so this fetches the *same* job's next page
|
|
9
|
+
* instead of creating a fresh job and handing it a token it never issued. */
|
|
5
10
|
export declare function runQuery<T = Record<string, unknown>>(bq: BigQueryLike, options: RunQueryOptions): Promise<QueryPage<T>>;
|
|
6
11
|
/** Pages through every result of a query, yielding one row-array per page.
|
|
7
|
-
* Stops once BigQuery reports no further `nextPageToken`.
|
|
12
|
+
* Stops once BigQuery reports no further `nextPageToken`. Carries the
|
|
13
|
+
* producing job's id forward across pages (AK-26) so every page after the
|
|
14
|
+
* first resumes the *same* job instead of starting a new one. */
|
|
8
15
|
export declare function runQueryAllPages<T = Record<string, unknown>>(bq: BigQueryLike, options: RunQueryOptions): AsyncGenerator<T[], void, void>;
|
|
9
16
|
/**
|
|
10
17
|
* Dry-runs a query to get its billed-byte estimate without actually running
|
package/dist/bigquery/query.js
CHANGED
|
@@ -4,25 +4,41 @@
|
|
|
4
4
|
* (AK-11). Inventory-specific SQL stays in media-planner; this module only
|
|
5
5
|
* ever takes SQL + params from the caller and runs it.
|
|
6
6
|
*/
|
|
7
|
-
import { classifyBigQueryError } from "./errors.js";
|
|
7
|
+
import { BadQueryError, classifyBigQueryError } from "./errors.js";
|
|
8
8
|
import { DryRunBudgetExceededError } from "./errors.js";
|
|
9
9
|
/** Runs one page of a parameterised, read-only query. Always bind
|
|
10
10
|
* user-supplied values through `options.params`/`options.types` — never
|
|
11
|
-
* string-interpolate them into `options.sql`.
|
|
11
|
+
* string-interpolate them into `options.sql`.
|
|
12
|
+
*
|
|
13
|
+
* A BigQuery page token is only valid against the job that produced it
|
|
14
|
+
* (AK-26) — passing `pageToken` therefore REQUIRES `jobId` (the `jobId` a
|
|
15
|
+
* prior `QueryPage` returned) so this fetches the *same* job's next page
|
|
16
|
+
* instead of creating a fresh job and handing it a token it never issued. */
|
|
12
17
|
export async function runQuery(bq, options) {
|
|
13
18
|
let job;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
labels: options.labels,
|
|
20
|
-
location: options.location,
|
|
21
|
-
maxResults: options.pageSize,
|
|
22
|
-
});
|
|
19
|
+
if (options.pageToken !== undefined) {
|
|
20
|
+
if (!options.jobId) {
|
|
21
|
+
throw new BadQueryError("runQuery: pageToken requires the jobId of the job that produced it (QueryPage.jobId)");
|
|
22
|
+
}
|
|
23
|
+
job = bq.job(options.jobId);
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
else {
|
|
26
|
+
try {
|
|
27
|
+
[job] = await bq.createQueryJob({
|
|
28
|
+
query: options.sql,
|
|
29
|
+
params: options.params,
|
|
30
|
+
types: options.types,
|
|
31
|
+
labels: options.labels,
|
|
32
|
+
location: options.location,
|
|
33
|
+
maxResults: options.pageSize,
|
|
34
|
+
maximumBytesBilled: options.maximumBytesBilled !== undefined
|
|
35
|
+
? String(options.maximumBytesBilled)
|
|
36
|
+
: undefined,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
throw classifyBigQueryError(err);
|
|
41
|
+
}
|
|
26
42
|
}
|
|
27
43
|
try {
|
|
28
44
|
const [rows, next] = await job.getQueryResults({
|
|
@@ -31,7 +47,7 @@ export async function runQuery(bq, options) {
|
|
|
31
47
|
});
|
|
32
48
|
return {
|
|
33
49
|
rows,
|
|
34
|
-
jobId: job.id ?? "",
|
|
50
|
+
jobId: job.id ?? options.jobId ?? "",
|
|
35
51
|
nextPageToken: next?.pageToken,
|
|
36
52
|
};
|
|
37
53
|
}
|
|
@@ -40,15 +56,19 @@ export async function runQuery(bq, options) {
|
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
/** Pages through every result of a query, yielding one row-array per page.
|
|
43
|
-
* Stops once BigQuery reports no further `nextPageToken`.
|
|
59
|
+
* Stops once BigQuery reports no further `nextPageToken`. Carries the
|
|
60
|
+
* producing job's id forward across pages (AK-26) so every page after the
|
|
61
|
+
* first resumes the *same* job instead of starting a new one. */
|
|
44
62
|
export async function* runQueryAllPages(bq, options) {
|
|
45
63
|
let pageToken = options.pageToken;
|
|
64
|
+
let jobId = options.jobId;
|
|
46
65
|
for (;;) {
|
|
47
|
-
const page = await runQuery(bq, { ...options, pageToken });
|
|
66
|
+
const page = await runQuery(bq, { ...options, pageToken, jobId });
|
|
48
67
|
yield page.rows;
|
|
49
68
|
if (!page.nextPageToken)
|
|
50
69
|
return;
|
|
51
70
|
pageToken = page.nextPageToken;
|
|
71
|
+
jobId = page.jobId;
|
|
52
72
|
}
|
|
53
73
|
}
|
|
54
74
|
/**
|
|
@@ -76,6 +96,8 @@ export async function estimateQueryBytes(bq, options) {
|
|
|
76
96
|
const estimate = {
|
|
77
97
|
totalBytesProcessed: Number(stats?.totalBytesProcessed ?? 0),
|
|
78
98
|
cacheHit: stats?.cacheHit ?? false,
|
|
99
|
+
statementType: stats?.statementType,
|
|
100
|
+
referencedTables: stats?.referencedTables,
|
|
79
101
|
};
|
|
80
102
|
if (options.maxBytesBilled !== undefined &&
|
|
81
103
|
estimate.totalBytesProcessed > options.maxBytesBilled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/bigquery/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/bigquery/query.ts"],"names":[],"mappings":"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"}
|
package/dist/bigquery/types.d.ts
CHANGED
|
@@ -23,11 +23,24 @@ export interface BigQueryJobStatus {
|
|
|
23
23
|
errorResult?: BigQueryApiErrorDetail | null;
|
|
24
24
|
errors?: BigQueryApiErrorDetail[];
|
|
25
25
|
}
|
|
26
|
+
/** A table a dry-run job reports the query as touching — the SDK's
|
|
27
|
+
* `ITableReference` (bigquery.d.ts), all fields optional per the REST API
|
|
28
|
+
* even though BigQuery always populates them in practice. */
|
|
29
|
+
export interface BigQueryTableReference {
|
|
30
|
+
projectId?: string;
|
|
31
|
+
datasetId?: string;
|
|
32
|
+
tableId?: string;
|
|
33
|
+
}
|
|
26
34
|
export interface BigQueryJobStatistics {
|
|
27
35
|
query?: {
|
|
28
36
|
totalBytesProcessed?: string | number;
|
|
29
37
|
totalBytesBilled?: string | number;
|
|
30
38
|
cacheHit?: boolean;
|
|
39
|
+
/** The dry-run job's classified statement kind, e.g. `"SELECT"` —
|
|
40
|
+
* `IJobStatistics2.statementType` in the real SDK. */
|
|
41
|
+
statementType?: string;
|
|
42
|
+
/** Every table the query touches — `IJobStatistics2.referencedTables`. */
|
|
43
|
+
referencedTables?: BigQueryTableReference[];
|
|
31
44
|
};
|
|
32
45
|
}
|
|
33
46
|
export interface BigQueryJobMetadata {
|
|
@@ -72,6 +85,12 @@ export interface BigQueryCreateQueryJobOptions {
|
|
|
72
85
|
location?: string;
|
|
73
86
|
maxResults?: number;
|
|
74
87
|
jobId?: string;
|
|
88
|
+
/** BigQuery's own hard billing cap on the real job — the SDK's
|
|
89
|
+
* `IJobConfigurationQuery.maximumBytesBilled` is a decimal string; a job
|
|
90
|
+
* that would bill more than this is refused by BigQuery itself rather
|
|
91
|
+
* than run. Distinct from `EstimateQueryBytesOptions.maxBytesBilled`
|
|
92
|
+
* (a pre-flight dry-run check this module enforces client-side). */
|
|
93
|
+
maximumBytesBilled?: string;
|
|
75
94
|
}
|
|
76
95
|
export interface BigQueryExtractOptions {
|
|
77
96
|
/** `@google-cloud/bigquery`'s own extract-job vocabulary — note this is
|
|
@@ -151,8 +170,23 @@ export interface RunQueryOptions {
|
|
|
151
170
|
location?: string;
|
|
152
171
|
/** Page size. Omit to let BigQuery pick a default. */
|
|
153
172
|
pageSize?: number;
|
|
154
|
-
/** Resume a prior page — from `QueryPage.nextPageToken`.
|
|
173
|
+
/** Resume a prior page — from `QueryPage.nextPageToken`. A page token is
|
|
174
|
+
* only valid against the job that produced it, so `jobId` (from that same
|
|
175
|
+
* `QueryPage.jobId`) is REQUIRED whenever this is set — `runQuery` throws
|
|
176
|
+
* a `BadQueryError` otherwise rather than creating a new job and handing
|
|
177
|
+
* it a token it never issued (AK-26). */
|
|
155
178
|
pageToken?: string;
|
|
179
|
+
/** The job that produced `pageToken` — required together with it to fetch
|
|
180
|
+
* the next page of that same job instead of starting a new one. */
|
|
181
|
+
jobId?: string;
|
|
182
|
+
/** Hard cap BigQuery itself enforces on the real job — a job that would
|
|
183
|
+
* bill more than this many bytes is refused by BigQuery before running,
|
|
184
|
+
* classified as `MaximumBytesBilledExceededError` (see errors.ts).
|
|
185
|
+
* Distinct from `estimateQueryBytes`'s `maxBytesBilled`, which is a
|
|
186
|
+
* client-side pre-flight check on a *dry-run* estimate — this is the
|
|
187
|
+
* belt to that check's suspenders, since data can grow between a dry
|
|
188
|
+
* run and the real job, or a caller can skip the dry run entirely. */
|
|
189
|
+
maximumBytesBilled?: number;
|
|
156
190
|
}
|
|
157
191
|
export interface QueryPage<T = Record<string, unknown>> {
|
|
158
192
|
rows: T[];
|
|
@@ -172,6 +206,16 @@ export interface EstimateQueryBytesOptions {
|
|
|
172
206
|
export interface DryRunEstimate {
|
|
173
207
|
totalBytesProcessed: number;
|
|
174
208
|
cacheHit: boolean;
|
|
209
|
+
/** The dry run's classified statement kind, e.g. `"SELECT"` — `undefined`
|
|
210
|
+
* when BigQuery's dry-run statistics omitted it. A caller enforcing
|
|
211
|
+
* read-only access should reject anything other than `"SELECT"`. */
|
|
212
|
+
statementType?: string;
|
|
213
|
+
/** Every table the query touches, per BigQuery's own dry-run analysis —
|
|
214
|
+
* `undefined` when the statistics omitted it, `[]` when the query
|
|
215
|
+
* genuinely touches none. The allowlist-enforcement surface: a caller
|
|
216
|
+
* checks every entry against its own read-only table allowlist before
|
|
217
|
+
* ever submitting the real job. */
|
|
218
|
+
referencedTables?: BigQueryTableReference[];
|
|
175
219
|
}
|
|
176
220
|
export interface ExtractTableToGCSInput {
|
|
177
221
|
datasetId: string;
|
package/dist/flags/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fp from "fastify-plugin";
|
|
2
|
+
import { rejectUnauthenticated } from "../auth/guards.js";
|
|
2
3
|
const DEFAULT_ROUTE_PREFIX = "/flags";
|
|
3
4
|
const DEFAULT_PAGE_SIZE = 25;
|
|
4
5
|
const MAX_PAGE_SIZE = 200;
|
|
@@ -29,23 +30,6 @@ function toFlagResponse(row, meta) {
|
|
|
29
30
|
updated: row.updatedAt.toISOString(),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Not exported: this plugin's own minimal 401 check on `request.authUser`, kept
|
|
34
|
-
* local rather than importing ../auth/guards.js's requireAuth — identical contract
|
|
35
|
-
* and identical implementation to src/profile/plugin.ts's own requireAuthUser (see
|
|
36
|
-
* that file's doc comment for the full rationale: no hard dependency on the auth
|
|
37
|
-
* module's internals beyond the `authUser` decoration contract, so any consumer
|
|
38
|
-
* populating request.authUser some other way still works).
|
|
39
|
-
*/
|
|
40
|
-
function requireAuthUser(request, reply) {
|
|
41
|
-
if (!request.authUser) {
|
|
42
|
-
reply
|
|
43
|
-
.code(401)
|
|
44
|
-
.send({ error: "Authentication required", code: "unauthenticated" });
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
33
|
function coercePositiveInt(value, fallback, max) {
|
|
50
34
|
const n = typeof value === "string"
|
|
51
35
|
? Number(value)
|
|
@@ -164,7 +148,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
164
148
|
* on this route (same boundary /profile draws around authorization).
|
|
165
149
|
*/
|
|
166
150
|
fastify.get(routePrefix, async (request, reply) => {
|
|
167
|
-
if (
|
|
151
|
+
if (rejectUnauthenticated(request, reply))
|
|
168
152
|
return;
|
|
169
153
|
const query = request.query;
|
|
170
154
|
const parsedQuery = parseListQuery(query);
|
|
@@ -229,7 +213,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
229
213
|
* exposing a key here that the list silently hides.
|
|
230
214
|
*/
|
|
231
215
|
fastify.get(`${routePrefix}/:key`, async (request, reply) => {
|
|
232
|
-
if (
|
|
216
|
+
if (rejectUnauthenticated(request, reply))
|
|
233
217
|
return;
|
|
234
218
|
const meta = describeFlag(request.params.key);
|
|
235
219
|
if (!meta) {
|
|
@@ -256,7 +240,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
256
240
|
* (whose `detail` falls back to "No change" rather than being skipped).
|
|
257
241
|
*/
|
|
258
242
|
fastify.patch(`${routePrefix}/:key`, async (request, reply) => {
|
|
259
|
-
if (
|
|
243
|
+
if (rejectUnauthenticated(request, reply))
|
|
260
244
|
return;
|
|
261
245
|
const parsed = parsePatchBody(request.body);
|
|
262
246
|
if ("error" in parsed) {
|
package/dist/flags/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/flags/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/flags/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction-scoped Postgres advisory locks, shared by every flytedesk app (AK-23) —
|
|
3
|
+
* extracted from media-planner's `apps/api/src/lib/advisoryLock.ts` so the
|
|
4
|
+
* `set_config('lock_timeout', …)` / `pg_advisory_xact_lock(hashtextextended(…))` pair
|
|
5
|
+
* and the one definition of "the lock wait timed out" live in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* The first consumer is `@flytedesk/app-kit/auth`'s `AuthStore.withIdpSessionLock` (see
|
|
8
|
+
* its doc comment in ../auth/types.ts), but nothing here is auth-specific: an app's own
|
|
9
|
+
* per-resource locks (media-planner's campaign folder-tree lock, for one) call the same
|
|
10
|
+
* helper.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The structural subset of a Prisma interactive-transaction client (or any
|
|
14
|
+
* tagged-template raw-SQL executor bound to ONE open transaction) this module needs.
|
|
15
|
+
* Deliberately not `@prisma/client`'s own type, mirroring ../trace/types.ts's
|
|
16
|
+
* `TracePrismaClient`: a `Prisma.TransactionClient` satisfies it structurally, and so
|
|
17
|
+
* does a hand-rolled adapter over a single checked-out `pg` client inside `BEGIN`.
|
|
18
|
+
*/
|
|
19
|
+
export interface AdvisoryLockClient {
|
|
20
|
+
$executeRaw(query: TemplateStringsArray, ...values: unknown[]): Promise<number>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Names one lock. `namespace` keeps unrelated lock families from ever colliding on the
|
|
24
|
+
* same 64-bit key (an IdP session id and a campaign id may be the same string); `id` is
|
|
25
|
+
* the resource within it. Hashed together as `${namespace}:${id}` by Postgres's
|
|
26
|
+
* `hashtextextended`, the 64-bit variant (fewer accidental collisions than `hashtext`'s
|
|
27
|
+
* 32 bits). `namespace` must not contain `:` (see `acquireAdvisoryLock`).
|
|
28
|
+
*/
|
|
29
|
+
export interface AdvisoryLockKey {
|
|
30
|
+
namespace: string;
|
|
31
|
+
id: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Takes a transaction-scoped advisory lock on `key`, held until `tx`'s transaction ends
|
|
35
|
+
* (commit or rollback — there is no unlock call to forget). Every caller passing the
|
|
36
|
+
* same key serializes behind the holder. Waiting longer than `lockTimeoutMs` fails the
|
|
37
|
+
* statement with Postgres 55P03 (`lock_not_available`) instead of queuing forever;
|
|
38
|
+
* `isAdvisoryLockTimeout` recognizes that failure.
|
|
39
|
+
*
|
|
40
|
+
* `tx` MUST be bound to an open transaction: `set_config(…, true)` is transaction-local,
|
|
41
|
+
* and an advisory xact lock taken outside a transaction is released the instant its
|
|
42
|
+
* own implicit statement transaction commits.
|
|
43
|
+
*/
|
|
44
|
+
export declare function acquireAdvisoryLock(tx: AdvisoryLockClient, key: AdvisoryLockKey, lockTimeoutMs: number): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* True when `err` means "the lock (or the connection to take it on) could not be had in
|
|
47
|
+
* time" — the caller's cue to answer "busy, try again" (e.g. a 503) rather than treating
|
|
48
|
+
* it as any other failure. Recognizes every shape that outcome arrives in:
|
|
49
|
+
*
|
|
50
|
+
* - Postgres 55P03 straight from node-postgres (`err.code`).
|
|
51
|
+
* - Postgres 55P03 surfaced through Prisma's driver adapter
|
|
52
|
+
* (`err.meta.driverAdapterError.cause.code`), which is how Prisma 7 reports it.
|
|
53
|
+
* - Prisma P2028 "Unable to start a transaction in the given time": the transaction's
|
|
54
|
+
* `maxWait` expired before a pooled connection was free — no SQL ever ran, so there
|
|
55
|
+
* is no SQLSTATE; the message is what tells it apart from P2028's other causes (a
|
|
56
|
+
* transaction used after commit, or after its own `timeout`).
|
|
57
|
+
*/
|
|
58
|
+
export declare function isAdvisoryLockTimeout(err: unknown): boolean;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction-scoped Postgres advisory locks, shared by every flytedesk app (AK-23) —
|
|
3
|
+
* extracted from media-planner's `apps/api/src/lib/advisoryLock.ts` so the
|
|
4
|
+
* `set_config('lock_timeout', …)` / `pg_advisory_xact_lock(hashtextextended(…))` pair
|
|
5
|
+
* and the one definition of "the lock wait timed out" live in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* The first consumer is `@flytedesk/app-kit/auth`'s `AuthStore.withIdpSessionLock` (see
|
|
8
|
+
* its doc comment in ../auth/types.ts), but nothing here is auth-specific: an app's own
|
|
9
|
+
* per-resource locks (media-planner's campaign folder-tree lock, for one) call the same
|
|
10
|
+
* helper.
|
|
11
|
+
*/
|
|
12
|
+
/** Joins namespace and id into the one string Postgres hashes. Forbidden in a namespace
|
|
13
|
+
* so the join is unambiguous. */
|
|
14
|
+
const KEY_SEPARATOR = ":";
|
|
15
|
+
/**
|
|
16
|
+
* Takes a transaction-scoped advisory lock on `key`, held until `tx`'s transaction ends
|
|
17
|
+
* (commit or rollback — there is no unlock call to forget). Every caller passing the
|
|
18
|
+
* same key serializes behind the holder. Waiting longer than `lockTimeoutMs` fails the
|
|
19
|
+
* statement with Postgres 55P03 (`lock_not_available`) instead of queuing forever;
|
|
20
|
+
* `isAdvisoryLockTimeout` recognizes that failure.
|
|
21
|
+
*
|
|
22
|
+
* `tx` MUST be bound to an open transaction: `set_config(…, true)` is transaction-local,
|
|
23
|
+
* and an advisory xact lock taken outside a transaction is released the instant its
|
|
24
|
+
* own implicit statement transaction commits.
|
|
25
|
+
*/
|
|
26
|
+
export async function acquireAdvisoryLock(tx, key, lockTimeoutMs) {
|
|
27
|
+
if (!Number.isInteger(lockTimeoutMs) || lockTimeoutMs <= 0) {
|
|
28
|
+
throw new Error(`acquireAdvisoryLock: lockTimeoutMs must be a positive integer, got ${lockTimeoutMs}`);
|
|
29
|
+
}
|
|
30
|
+
if (key.namespace.length === 0 || key.id.length === 0) {
|
|
31
|
+
throw new Error("acquireAdvisoryLock: key.namespace and key.id must both be non-empty");
|
|
32
|
+
}
|
|
33
|
+
if (key.namespace.includes(KEY_SEPARATOR)) {
|
|
34
|
+
// "a:b" + "c" and "a" + "b:c" would both hash "a:b:c" — two different locks sharing
|
|
35
|
+
// one key. The id may contain the separator: the namespace ends at the FIRST one.
|
|
36
|
+
throw new Error(`acquireAdvisoryLock: key.namespace must not contain "${KEY_SEPARATOR}", got "${key.namespace}"`);
|
|
37
|
+
}
|
|
38
|
+
await tx.$executeRaw `SELECT set_config('lock_timeout', ${String(lockTimeoutMs)}, true)`;
|
|
39
|
+
await tx.$executeRaw `SELECT pg_advisory_xact_lock(hashtextextended(${`${key.namespace}${KEY_SEPARATOR}${key.id}`}, 0))`;
|
|
40
|
+
}
|
|
41
|
+
/** Postgres SQLSTATE for `lock_not_available` — what `lock_timeout` raises. */
|
|
42
|
+
const LOCK_NOT_AVAILABLE = "55P03";
|
|
43
|
+
/** Prisma's message for P2028 when `maxWait` elapsed before a pooled connection could
|
|
44
|
+
* even be checked out to start the transaction. */
|
|
45
|
+
const PRISMA_TRANSACTION_START_TIMEOUT = "Unable to start a transaction in the given time";
|
|
46
|
+
/**
|
|
47
|
+
* True when `err` means "the lock (or the connection to take it on) could not be had in
|
|
48
|
+
* time" — the caller's cue to answer "busy, try again" (e.g. a 503) rather than treating
|
|
49
|
+
* it as any other failure. Recognizes every shape that outcome arrives in:
|
|
50
|
+
*
|
|
51
|
+
* - Postgres 55P03 straight from node-postgres (`err.code`).
|
|
52
|
+
* - Postgres 55P03 surfaced through Prisma's driver adapter
|
|
53
|
+
* (`err.meta.driverAdapterError.cause.code`), which is how Prisma 7 reports it.
|
|
54
|
+
* - Prisma P2028 "Unable to start a transaction in the given time": the transaction's
|
|
55
|
+
* `maxWait` expired before a pooled connection was free — no SQL ever ran, so there
|
|
56
|
+
* is no SQLSTATE; the message is what tells it apart from P2028's other causes (a
|
|
57
|
+
* transaction used after commit, or after its own `timeout`).
|
|
58
|
+
*/
|
|
59
|
+
export function isAdvisoryLockTimeout(err) {
|
|
60
|
+
if (typeof err !== "object" || err === null)
|
|
61
|
+
return false;
|
|
62
|
+
const candidate = err;
|
|
63
|
+
if (candidate.code === LOCK_NOT_AVAILABLE)
|
|
64
|
+
return true;
|
|
65
|
+
if (candidate.meta?.driverAdapterError?.cause?.code === LOCK_NOT_AVAILABLE)
|
|
66
|
+
return true;
|
|
67
|
+
return (candidate.code === "P2028" &&
|
|
68
|
+
typeof candidate.message === "string" &&
|
|
69
|
+
candidate.message.includes(PRISMA_TRANSACTION_START_TIMEOUT));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=advisoryLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisoryLock.js","sourceRoot":"","sources":["../../src/postgres/advisoryLock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;kCACkC;AAClC,MAAM,aAAa,GAAG,GAAG,CAAC;AAc1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAsB,EACtB,GAAoB,EACpB,aAAqB;IAErB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,sEAAsE,aAAa,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,oFAAoF;QACpF,kFAAkF;QAClF,MAAM,IAAI,KAAK,CAAC,wDAAwD,aAAa,WAAW,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,EAAE,CAAC,WAAW,CAAA,qCAAqC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;IACxF,MAAM,EAAE,CAAC,WAAW,CAAA,iDAAiD,GAAG,GAAG,CAAC,SAAS,GAAG,aAAa,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;AAC1H,CAAC;AAED,+EAA+E;AAC/E,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;oDACoD;AACpD,MAAM,gCAAgC,GAAG,iDAAiD,CAAC;AAE3F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,SAAS,GAAG,GAIjB,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,SAAS,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACxF,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,OAAO;QAC1B,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@flytedesk/app-kit/postgres` — Postgres-specific helpers shared by every flytedesk
|
|
3
|
+
* app. Like every other app-kit module, this never builds its own database client: each
|
|
4
|
+
* helper takes a structural client (see `AdvisoryLockClient`) the consumer already has.
|
|
5
|
+
*/
|
|
6
|
+
export { acquireAdvisoryLock, isAdvisoryLockTimeout, type AdvisoryLockClient, type AdvisoryLockKey, } from "./advisoryLock.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@flytedesk/app-kit/postgres` — Postgres-specific helpers shared by every flytedesk
|
|
3
|
+
* app. Like every other app-kit module, this never builds its own database client: each
|
|
4
|
+
* helper takes a structural client (see `AdvisoryLockClient`) the consumer already has.
|
|
5
|
+
*/
|
|
6
|
+
export { acquireAdvisoryLock, isAdvisoryLockTimeout, } from "./advisoryLock.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postgres/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC"}
|
package/dist/profile/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fp from "fastify-plugin";
|
|
2
|
+
import { rejectUnauthenticated } from "../auth/guards.js";
|
|
2
3
|
const DEFAULT_ROUTE_PREFIX = "/profile";
|
|
3
4
|
const PATCHABLE_FIELDS = ["title", "phone", "timezone", "bio"];
|
|
4
5
|
function assertRequiredOptions(options) {
|
|
@@ -47,24 +48,6 @@ function parsePatchBody(body) {
|
|
|
47
48
|
}
|
|
48
49
|
return patch;
|
|
49
50
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Not exported: this plugin's own minimal 401 check on `request.authUser`, kept
|
|
52
|
-
* local (rather than importing ../auth/guards.js's requireAuth) so this module has
|
|
53
|
-
* no hard dependency on the auth module's internals beyond the `authUser`
|
|
54
|
-
* decoration contract it documents (declare module "fastify" in ../auth/plugin.ts)
|
|
55
|
-
* — any consumer populating request.authUser some other way (not necessarily via
|
|
56
|
-
* @flytedesk/app-kit/auth) still works. Mirrors requireAuth's shape in
|
|
57
|
-
* ../auth/guards.ts: returns whether the request may proceed, and the route
|
|
58
|
-
* handler reads `request.authUser!` afterward, same as that module's own
|
|
59
|
-
* requirePermission does.
|
|
60
|
-
*/
|
|
61
|
-
function requireAuthUser(request, reply) {
|
|
62
|
-
if (!request.authUser) {
|
|
63
|
-
reply.code(401).send({ error: "Authentication required", code: "unauthenticated" });
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
51
|
const appKitProfilePlugin = async (fastify, options) => {
|
|
69
52
|
assertRequiredOptions(options);
|
|
70
53
|
// request.authUser is decorated by @flytedesk/app-kit/auth's flytedeskAuth plugin
|
|
@@ -86,7 +69,7 @@ const appKitProfilePlugin = async (fastify, options) => {
|
|
|
86
69
|
/** GET {routePrefix} — the caller's own profile. Never 404s: a user with no row
|
|
87
70
|
* yet still gets a 200 with every field null (see ProfileStore.findByUserId). */
|
|
88
71
|
fastify.get(routePrefix, async (request, reply) => {
|
|
89
|
-
if (
|
|
72
|
+
if (rejectUnauthenticated(request, reply))
|
|
90
73
|
return;
|
|
91
74
|
const row = await store.findByUserId(request.authUser.id);
|
|
92
75
|
return toResponseBody(request.authUser.id, row);
|
|
@@ -95,7 +78,7 @@ const appKitProfilePlugin = async (fastify, options) => {
|
|
|
95
78
|
* is present in the body, scoped to the caller's own row (request.authUser.id is
|
|
96
79
|
* the only id this handler ever reads or writes — never a caller-supplied one). */
|
|
97
80
|
fastify.patch(routePrefix, async (request, reply) => {
|
|
98
|
-
if (
|
|
81
|
+
if (rejectUnauthenticated(request, reply))
|
|
99
82
|
return;
|
|
100
83
|
const parsed = parsePatchBody(request.body);
|
|
101
84
|
if ("error" in parsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/profile/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/profile/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flytedesk/app-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Shared platform kit for flytedesk apps: flytedesk-id auth (BFF/OIDC client) and a Postgres-native trace/audit layer.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
27
|
"prisma",
|
|
28
|
-
"scripts"
|
|
28
|
+
"scripts/postinstall-eslint-ts6-shim.cjs"
|
|
29
29
|
],
|
|
30
30
|
"bin": {
|
|
31
31
|
"trace-sync": "./dist/cli/trace-sync.js",
|
|
@@ -77,6 +77,10 @@
|
|
|
77
77
|
"./spa-server": {
|
|
78
78
|
"types": "./dist/spa-server/index.d.ts",
|
|
79
79
|
"import": "./dist/spa-server/index.js"
|
|
80
|
+
},
|
|
81
|
+
"./postgres": {
|
|
82
|
+
"types": "./dist/postgres/index.d.ts",
|
|
83
|
+
"import": "./dist/postgres/index.js"
|
|
80
84
|
}
|
|
81
85
|
},
|
|
82
86
|
"scripts": {
|
|
@@ -121,6 +125,7 @@
|
|
|
121
125
|
"@testcontainers/postgresql": "^12.1.0",
|
|
122
126
|
"@testing-library/react": "^16.3.3",
|
|
123
127
|
"@types/cross-spawn": "^6.0.6",
|
|
128
|
+
"@types/jsdom": "^30.0.0",
|
|
124
129
|
"@types/node": "^24.0.0",
|
|
125
130
|
"@types/pg": "^8.23.1",
|
|
126
131
|
"@types/react": "^19.3.0",
|