@somewhere-cloud/sdk 0.0.0-stage → 0.13.1
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/LICENSE +21 -0
- package/README.md +191 -2
- package/dist/cjs/auth/client.js +1142 -0
- package/dist/cjs/auth/client.js.map +1 -0
- package/dist/cjs/auth/continuation.js +27 -0
- package/dist/cjs/auth/continuation.js.map +1 -0
- package/dist/cjs/auth/index.js +21 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/react.js +295 -0
- package/dist/cjs/auth/react.js.map +1 -0
- package/dist/cjs/auth/server.js +368 -0
- package/dist/cjs/auth/server.js.map +1 -0
- package/dist/cjs/client.js +392 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors.js +16 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.cjs +215 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/query-cache.js +91 -0
- package/dist/cjs/query-cache.js.map +1 -0
- package/dist/cjs/resources/auth.js +875 -0
- package/dist/cjs/resources/auth.js.map +1 -0
- package/dist/cjs/resources/calls.js +42 -0
- package/dist/cjs/resources/calls.js.map +1 -0
- package/dist/cjs/resources/chat.js +82 -0
- package/dist/cjs/resources/chat.js.map +1 -0
- package/dist/cjs/resources/db.js +124 -0
- package/dist/cjs/resources/db.js.map +1 -0
- package/dist/cjs/resources/emails.js +39 -0
- package/dist/cjs/resources/emails.js.map +1 -0
- package/dist/cjs/resources/fs.js +141 -0
- package/dist/cjs/resources/fs.js.map +1 -0
- package/dist/cjs/resources/functions.js +145 -0
- package/dist/cjs/resources/functions.js.map +1 -0
- package/dist/cjs/resources/inbox.js +76 -0
- package/dist/cjs/resources/inbox.js.map +1 -0
- package/dist/cjs/resources/payments.js +68 -0
- package/dist/cjs/resources/payments.js.map +1 -0
- package/dist/cjs/resources/postgrest.js +391 -0
- package/dist/cjs/resources/postgrest.js.map +1 -0
- package/dist/cjs/resources/projects.js +71 -0
- package/dist/cjs/resources/projects.js.map +1 -0
- package/dist/cjs/resources/storage.js +191 -0
- package/dist/cjs/resources/storage.js.map +1 -0
- package/dist/cjs/resources/tasks.js +99 -0
- package/dist/cjs/resources/tasks.js.map +1 -0
- package/dist/cjs/resources/video.js +50 -0
- package/dist/cjs/resources/video.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/auth/client.js +1137 -0
- package/dist/esm/auth/client.js.map +1 -0
- package/dist/esm/auth/continuation.js +22 -0
- package/dist/esm/auth/continuation.js.map +1 -0
- package/dist/esm/auth/index.js +5 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/react.js +279 -0
- package/dist/esm/auth/react.js.map +1 -0
- package/dist/esm/auth/server.js +365 -0
- package/dist/esm/auth/server.js.map +1 -0
- package/dist/esm/client.js +388 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.js +12 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +188 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/query-cache.js +87 -0
- package/dist/esm/query-cache.js.map +1 -0
- package/dist/esm/resources/auth.js +871 -0
- package/dist/esm/resources/auth.js.map +1 -0
- package/dist/esm/resources/calls.js +38 -0
- package/dist/esm/resources/calls.js.map +1 -0
- package/dist/esm/resources/chat.js +77 -0
- package/dist/esm/resources/chat.js.map +1 -0
- package/dist/esm/resources/db.js +120 -0
- package/dist/esm/resources/db.js.map +1 -0
- package/dist/esm/resources/emails.js +35 -0
- package/dist/esm/resources/emails.js.map +1 -0
- package/dist/esm/resources/fs.js +137 -0
- package/dist/esm/resources/fs.js.map +1 -0
- package/dist/esm/resources/functions.js +141 -0
- package/dist/esm/resources/functions.js.map +1 -0
- package/dist/esm/resources/inbox.js +70 -0
- package/dist/esm/resources/inbox.js.map +1 -0
- package/dist/esm/resources/payments.js +64 -0
- package/dist/esm/resources/payments.js.map +1 -0
- package/dist/esm/resources/postgrest.js +386 -0
- package/dist/esm/resources/postgrest.js.map +1 -0
- package/dist/esm/resources/projects.js +67 -0
- package/dist/esm/resources/projects.js.map +1 -0
- package/dist/esm/resources/storage.js +186 -0
- package/dist/esm/resources/storage.js.map +1 -0
- package/dist/esm/resources/tasks.js +95 -0
- package/dist/esm/resources/tasks.js.map +1 -0
- package/dist/esm/resources/video.js +46 -0
- package/dist/esm/resources/video.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/auth/client.d.ts +272 -0
- package/dist/types/auth/client.d.ts.map +1 -0
- package/dist/types/auth/continuation.d.ts +10 -0
- package/dist/types/auth/continuation.d.ts.map +1 -0
- package/dist/types/auth/index.d.ts +2 -0
- package/dist/types/auth/index.d.ts.map +1 -0
- package/dist/types/auth/react.d.ts +140 -0
- package/dist/types/auth/react.d.ts.map +1 -0
- package/dist/types/auth/server.d.ts +124 -0
- package/dist/types/auth/server.d.ts.map +1 -0
- package/dist/types/client.d.ts +128 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/errors.d.ts +17 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +145 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/query-cache.d.ts +59 -0
- package/dist/types/query-cache.d.ts.map +1 -0
- package/dist/types/resources/auth.d.ts +188 -0
- package/dist/types/resources/auth.d.ts.map +1 -0
- package/dist/types/resources/calls.d.ts +27 -0
- package/dist/types/resources/calls.d.ts.map +1 -0
- package/dist/types/resources/chat.d.ts +24 -0
- package/dist/types/resources/chat.d.ts.map +1 -0
- package/dist/types/resources/db.d.ts +81 -0
- package/dist/types/resources/db.d.ts.map +1 -0
- package/dist/types/resources/emails.d.ts +20 -0
- package/dist/types/resources/emails.d.ts.map +1 -0
- package/dist/types/resources/fs.d.ts +68 -0
- package/dist/types/resources/fs.d.ts.map +1 -0
- package/dist/types/resources/functions.d.ts +30 -0
- package/dist/types/resources/functions.d.ts.map +1 -0
- package/dist/types/resources/inbox.d.ts +52 -0
- package/dist/types/resources/inbox.d.ts.map +1 -0
- package/dist/types/resources/payments.d.ts +31 -0
- package/dist/types/resources/payments.d.ts.map +1 -0
- package/dist/types/resources/postgrest.d.ts +121 -0
- package/dist/types/resources/postgrest.d.ts.map +1 -0
- package/dist/types/resources/projects.d.ts +79 -0
- package/dist/types/resources/projects.d.ts.map +1 -0
- package/dist/types/resources/storage.d.ts +63 -0
- package/dist/types/resources/storage.d.ts.map +1 -0
- package/dist/types/resources/tasks.d.ts +87 -0
- package/dist/types/resources/tasks.d.ts.map +1 -0
- package/dist/types/resources/video.d.ts +30 -0
- package/dist/types/resources/video.d.ts.map +1 -0
- package/dist/types/types.d.ts +379 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +86 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/resources/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbound email — the receive side of `sw.emails.send(...)`.
|
|
3
|
+
* Each project can mint addresses on the platform's inbox subdomain,
|
|
4
|
+
* and incoming mail is persisted with subject + text preview + raw MIME.
|
|
5
|
+
*
|
|
6
|
+
* // Create an inbox address (e.g. orders@inbox.somewhere.tech).
|
|
7
|
+
* await sw.inbox.addresses.create({ local: 'orders', label: 'Orders' })
|
|
8
|
+
*
|
|
9
|
+
* // List recent messages.
|
|
10
|
+
* const { data } = await sw.inbox.messages.list({ limit: 20 })
|
|
11
|
+
*
|
|
12
|
+
* // Fetch the full message + a path for the raw .eml.
|
|
13
|
+
* const msg = await sw.inbox.messages.get('msg-id')
|
|
14
|
+
*
|
|
15
|
+
* // Raw MIME bytes (forwarding, archival, parsing).
|
|
16
|
+
* const raw = await sw.inbox.messages.getRaw('msg-id')
|
|
17
|
+
*/
|
|
18
|
+
export class InboxAddressesClient {
|
|
19
|
+
constructor(client) {
|
|
20
|
+
this.client = client;
|
|
21
|
+
}
|
|
22
|
+
async create(input) {
|
|
23
|
+
const project_id = this.client.requireProjectId(input.projectId, 'inbox.addresses.create');
|
|
24
|
+
return this.client.safeCall('POST', '/inbox/addresses', {
|
|
25
|
+
auth: 'developer',
|
|
26
|
+
body: { project_id, local: input.local, label: input.label },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async list(opts = {}) {
|
|
30
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'inbox.addresses.list');
|
|
31
|
+
return this.client.safeCall('GET', '/inbox/addresses', {
|
|
32
|
+
auth: 'developer',
|
|
33
|
+
query: { project_id },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async delete(id) {
|
|
37
|
+
return this.client.safeCall('DELETE', `/inbox/addresses/${encodeURIComponent(id)}`, { auth: 'developer' });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class InboxMessagesClient {
|
|
41
|
+
constructor(client) {
|
|
42
|
+
this.client = client;
|
|
43
|
+
}
|
|
44
|
+
async list(opts = {}) {
|
|
45
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'inbox.messages.list');
|
|
46
|
+
return this.client.safeCall('GET', '/inbox', {
|
|
47
|
+
auth: 'developer',
|
|
48
|
+
query: { project_id, address_id: opts.addressId, limit: opts.limit },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async get(id) {
|
|
52
|
+
return this.client.safeCall('GET', `/inbox/${encodeURIComponent(id)}`, {
|
|
53
|
+
auth: 'developer',
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Raw MIME bytes (`.eml`) and content type. */
|
|
57
|
+
async getRaw(id) {
|
|
58
|
+
return this.client.getBytes(`/inbox/${encodeURIComponent(id)}/raw`, undefined, 'developer');
|
|
59
|
+
}
|
|
60
|
+
async delete(id) {
|
|
61
|
+
return this.client.safeCall('DELETE', `/inbox/${encodeURIComponent(id)}`, { auth: 'developer' });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class InboxClient {
|
|
65
|
+
constructor(client) {
|
|
66
|
+
this.addresses = new InboxAddressesClient(client);
|
|
67
|
+
this.messages = new InboxMessagesClient(client);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/resources/inbox.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,oBAAoB;IAC/B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,MAAM,CAAC,KAAgC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAe,MAAM,EAAE,kBAAkB,EAAE;YACpE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA+B,EAAE;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAA2B,KAAK,EAAE,kBAAkB,EAAE;YAC/E,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,UAAU,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CACzB,QAAQ,EACR,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAC5C,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IAC9B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,OAAyB,EAAE;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAA2B,KAAK,EAAE,QAAQ,EAAE;YACrE,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;SACrE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAqB,KAAK,EAAE,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;YACzF,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CACzB,QAAQ,EACR,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAClC,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IAItB,YAAY,MAAc;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe-Connect-style payments. The platform is the Stripe platform
|
|
3
|
+
* account; each project gets its own connected account. somewhere.tech
|
|
4
|
+
* takes zero platform fee — every charge settles 100% to the developer's
|
|
5
|
+
* connected account. The developer never holds a Stripe key — they call:
|
|
6
|
+
*
|
|
7
|
+
* await sw.payments.onboard({ return_url, refresh_url })
|
|
8
|
+
* // → redirect end-user to result.onboarding_url
|
|
9
|
+
*
|
|
10
|
+
* const status = await sw.payments.status()
|
|
11
|
+
* if (!status.data?.charges_enabled) ...
|
|
12
|
+
*
|
|
13
|
+
* await sw.payments.checkout({
|
|
14
|
+
* line_items: [{ amount: 4999, currency: 'usd', name: 'Pro' }],
|
|
15
|
+
* success_url, cancel_url,
|
|
16
|
+
* })
|
|
17
|
+
* // → redirect end-user to result.url
|
|
18
|
+
*/
|
|
19
|
+
export class PaymentsClient {
|
|
20
|
+
constructor(client) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
}
|
|
23
|
+
async onboard(input = {}) {
|
|
24
|
+
const project_id = this.client.requireProjectId(input.projectId, 'payments.onboard');
|
|
25
|
+
return this.client.safeCall('POST', '/payments/onboard', {
|
|
26
|
+
auth: 'developer',
|
|
27
|
+
body: {
|
|
28
|
+
project_id,
|
|
29
|
+
return_url: input.return_url,
|
|
30
|
+
refresh_url: input.refresh_url,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async status(opts = {}) {
|
|
35
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'payments.status');
|
|
36
|
+
return this.client.safeCall('GET', '/payments/status', {
|
|
37
|
+
auth: 'developer',
|
|
38
|
+
query: { project_id, refresh: opts.refresh ? '1' : undefined },
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async checkout(input) {
|
|
42
|
+
const project_id = this.client.requireProjectId(input.projectId, 'payments.checkout');
|
|
43
|
+
return this.client.safeCall('POST', '/payments/checkout', {
|
|
44
|
+
auth: 'developer',
|
|
45
|
+
body: {
|
|
46
|
+
project_id,
|
|
47
|
+
line_items: input.line_items,
|
|
48
|
+
mode: input.mode,
|
|
49
|
+
success_url: input.success_url,
|
|
50
|
+
cancel_url: input.cancel_url,
|
|
51
|
+
customer_email: input.customer_email,
|
|
52
|
+
metadata: input.metadata,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async dashboardLink(opts = {}) {
|
|
57
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'payments.dashboardLink');
|
|
58
|
+
return this.client.safeCall('GET', '/payments/dashboard-link', {
|
|
59
|
+
auth: 'developer',
|
|
60
|
+
query: { project_id },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=payments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../../src/resources/payments.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAc;IACzB,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,QAAgC,EAAE;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAA0B,MAAM,EAAE,mBAAmB,EAAE;YAChF,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,UAAU;gBACV,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA8B,EAAE;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAyB,KAAK,EAAE,kBAAkB,EAAE;YAC7E,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAA8B;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAA2B,MAAM,EAAE,oBAAoB,EAAE;YAClF,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,UAAU;gBACV,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA+B,EAAE;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAgC,KAAK,EAAE,0BAA0B,EAAE;YAC5F,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,UAAU,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { SomewhereError } from '../errors.js';
|
|
2
|
+
function invalidResult(err) {
|
|
3
|
+
return { data: null, error: err, count: null, status: err.statusCode };
|
|
4
|
+
}
|
|
5
|
+
/** Split on top-level commas only — commas inside `(...)` (an `in` list) stay. */
|
|
6
|
+
function splitTopLevel(s) {
|
|
7
|
+
const out = [];
|
|
8
|
+
let depth = 0;
|
|
9
|
+
let start = 0;
|
|
10
|
+
for (let i = 0; i < s.length; i++) {
|
|
11
|
+
const ch = s[i];
|
|
12
|
+
if (ch === '(')
|
|
13
|
+
depth++;
|
|
14
|
+
else if (ch === ')')
|
|
15
|
+
depth = Math.max(0, depth - 1);
|
|
16
|
+
else if (ch === ',' && depth === 0) {
|
|
17
|
+
out.push(s.slice(start, i));
|
|
18
|
+
start = i + 1;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
out.push(s.slice(start));
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/** Coerce an `.or()` string value to its JSON type (number / bool / null / string). */
|
|
25
|
+
function coerceFilterValue(raw) {
|
|
26
|
+
if (raw === 'null')
|
|
27
|
+
return null;
|
|
28
|
+
if (raw === 'true')
|
|
29
|
+
return true;
|
|
30
|
+
if (raw === 'false')
|
|
31
|
+
return false;
|
|
32
|
+
if (/^-?\d+$/.test(raw))
|
|
33
|
+
return Number.parseInt(raw, 10);
|
|
34
|
+
if (/^-?\d*\.\d+$/.test(raw))
|
|
35
|
+
return Number.parseFloat(raw);
|
|
36
|
+
return raw;
|
|
37
|
+
}
|
|
38
|
+
/** What `.from(...)` returns — pre-action chain. */
|
|
39
|
+
export class SomewhereQueryBuilder {
|
|
40
|
+
constructor(client, table) {
|
|
41
|
+
this.client = client;
|
|
42
|
+
this.table = table;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Select rows. Pass embeds in the column string for foreign-key joins
|
|
46
|
+
* (`select('*, profile(*)')`), and `{ count, head }` for counts:
|
|
47
|
+
*
|
|
48
|
+
* // total rows matching the filters, alongside the page of data
|
|
49
|
+
* const { data, count } = await sw.from('todos')
|
|
50
|
+
* .select('*', { count: 'exact' }).eq('done', false).limit(20)
|
|
51
|
+
*
|
|
52
|
+
* // just the count, no rows fetched
|
|
53
|
+
* const { count } = await sw.from('todos')
|
|
54
|
+
* .select('*', { count: 'exact', head: true }).eq('done', false)
|
|
55
|
+
*/
|
|
56
|
+
select(columns = '*', options = {}) {
|
|
57
|
+
return new PostgrestFilterBuilder(this.client, this.table, 'select', {
|
|
58
|
+
columns,
|
|
59
|
+
count: options.count,
|
|
60
|
+
head: options.head,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
insert(values) {
|
|
64
|
+
return new PostgrestFilterBuilder(this.client, this.table, 'insert', {
|
|
65
|
+
insertValues: Array.isArray(values) ? values : [values],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
upsert(values, options = {}) {
|
|
69
|
+
return new PostgrestFilterBuilder(this.client, this.table, 'upsert', {
|
|
70
|
+
insertValues: Array.isArray(values) ? values : [values],
|
|
71
|
+
conflictKey: options.onConflict ?? 'id',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
update(values) {
|
|
75
|
+
return new PostgrestFilterBuilder(this.client, this.table, 'update', {
|
|
76
|
+
updateValues: values,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
delete() {
|
|
80
|
+
return new PostgrestFilterBuilder(this.client, this.table, 'delete', {});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fluent filter / modifier / resolver chain. Implements `then` so `await`
|
|
85
|
+
* on a builder executes the query.
|
|
86
|
+
*/
|
|
87
|
+
export class PostgrestFilterBuilder {
|
|
88
|
+
constructor(client, table, action, state) {
|
|
89
|
+
this.client = client;
|
|
90
|
+
this.table = table;
|
|
91
|
+
this.action = action;
|
|
92
|
+
this.state = state;
|
|
93
|
+
this.filters = [];
|
|
94
|
+
this.orderClause = null;
|
|
95
|
+
this.limitN = null;
|
|
96
|
+
this.offsetN = null;
|
|
97
|
+
this.resolveType = 'many';
|
|
98
|
+
/** When true, this read bypasses the client cache and always hits the network. */
|
|
99
|
+
this.freshOnly = false;
|
|
100
|
+
this.countMode = state.count ?? null;
|
|
101
|
+
this.headOnly = state.head ?? false;
|
|
102
|
+
}
|
|
103
|
+
/* ─── Filters ──────────────────────────────────────────────── */
|
|
104
|
+
eq(column, value) {
|
|
105
|
+
this.filters.push({ column, op: 'eq', value });
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
neq(column, value) {
|
|
109
|
+
this.filters.push({ column, op: 'neq', value });
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
gt(column, value) {
|
|
113
|
+
this.filters.push({ column, op: 'gt', value });
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
gte(column, value) {
|
|
117
|
+
this.filters.push({ column, op: 'gte', value });
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
120
|
+
lt(column, value) {
|
|
121
|
+
this.filters.push({ column, op: 'lt', value });
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
lte(column, value) {
|
|
125
|
+
this.filters.push({ column, op: 'lte', value });
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
/** Case-sensitive pattern match. Use `%` as the wildcard. */
|
|
129
|
+
like(column, pattern) {
|
|
130
|
+
this.filters.push({ column, op: 'like', value: pattern });
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
/** Case-insensitive pattern match. */
|
|
134
|
+
ilike(column, pattern) {
|
|
135
|
+
this.filters.push({ column, op: 'ilike', value: pattern });
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
in(column, values) {
|
|
139
|
+
this.filters.push({ column, op: 'in', value: values });
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
/** `.is('col', null)` → IS NULL. `.is('col', true/false)` for booleans. */
|
|
143
|
+
is(column, value) {
|
|
144
|
+
this.filters.push({ column, op: 'is', value });
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/** Negate a filter: `.not('status', 'eq', 'archived')`. */
|
|
148
|
+
not(column, op, value) {
|
|
149
|
+
this.filters.push({ column, op: 'not', value: { op, value } });
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
/** Shorthand for stacking `.eq` filters from an object. */
|
|
153
|
+
match(criteria) {
|
|
154
|
+
for (const [k, v] of Object.entries(criteria)) {
|
|
155
|
+
this.eq(k, v);
|
|
156
|
+
}
|
|
157
|
+
return this;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* OR a set of conditions (filter syntax). `.or('status.eq.active,age.gt.18')`
|
|
161
|
+
* → `(status = 'active' OR age > 18)`, AND-ed with any other filters.
|
|
162
|
+
* Each term is `column.operator.value`; `in` uses `col.in.(a,b,c)`. Numeric /
|
|
163
|
+
* `true` / `false` / `null` values are coerced to their JSON types.
|
|
164
|
+
*/
|
|
165
|
+
or(filters) {
|
|
166
|
+
const subs = [];
|
|
167
|
+
for (const raw of splitTopLevel(filters)) {
|
|
168
|
+
const term = raw.trim();
|
|
169
|
+
if (!term)
|
|
170
|
+
continue;
|
|
171
|
+
// `in` values contain commas inside (...), so detect+consume them first.
|
|
172
|
+
const inMatch = /^([A-Za-z_][A-Za-z0-9_]*)\.in\.\((.*)\)$/.exec(term);
|
|
173
|
+
if (inMatch) {
|
|
174
|
+
subs.push({
|
|
175
|
+
column: inMatch[1],
|
|
176
|
+
op: 'in',
|
|
177
|
+
value: inMatch[2].split(',').map((v) => coerceFilterValue(v.trim())),
|
|
178
|
+
});
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const firstDot = term.indexOf('.');
|
|
182
|
+
const secondDot = term.indexOf('.', firstDot + 1);
|
|
183
|
+
if (firstDot < 0 || secondDot < 0)
|
|
184
|
+
continue; // malformed term — skip
|
|
185
|
+
subs.push({
|
|
186
|
+
column: term.slice(0, firstDot),
|
|
187
|
+
op: term.slice(firstDot + 1, secondDot),
|
|
188
|
+
value: coerceFilterValue(term.slice(secondDot + 1)),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
this.filters.push({ column: '', op: 'or', value: subs });
|
|
192
|
+
return this;
|
|
193
|
+
}
|
|
194
|
+
/* ─── Modifiers ────────────────────────────────────────────── */
|
|
195
|
+
order(column, options = {}) {
|
|
196
|
+
this.orderClause = { column, ascending: options.ascending ?? true };
|
|
197
|
+
return this;
|
|
198
|
+
}
|
|
199
|
+
limit(n) {
|
|
200
|
+
this.limitN = n;
|
|
201
|
+
return this;
|
|
202
|
+
}
|
|
203
|
+
/** `[from, to]` inclusive range — equivalent to `LIMIT to-from+1 OFFSET from`. */
|
|
204
|
+
range(from, to) {
|
|
205
|
+
this.offsetN = from;
|
|
206
|
+
this.limitN = to - from + 1;
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
/** Require exactly one row; error on 0 or >1. */
|
|
210
|
+
single() {
|
|
211
|
+
this.resolveType = 'single';
|
|
212
|
+
return this;
|
|
213
|
+
}
|
|
214
|
+
/** Allow 0 or 1 rows; 0 rows → `data: null`. */
|
|
215
|
+
maybeSingle() {
|
|
216
|
+
this.resolveType = 'maybeSingle';
|
|
217
|
+
return this;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Opt this read out of the client cache: always hit the network, ignoring
|
|
221
|
+
* any cached value (it still refreshes the cache for the next normal read).
|
|
222
|
+
* The per-query escape hatch for the rare always-fresh need;
|
|
223
|
+
* `createClient(url, key, { cache: false })` is the global one.
|
|
224
|
+
*/
|
|
225
|
+
fresh() {
|
|
226
|
+
this.freshOnly = true;
|
|
227
|
+
return this;
|
|
228
|
+
}
|
|
229
|
+
/* ─── Execution ────────────────────────────────────────────── */
|
|
230
|
+
/**
|
|
231
|
+
* Thenable so `await builder` executes the query. This is the same
|
|
232
|
+
* thenable pattern — the chain doesn't hit the network until
|
|
233
|
+
* you `await` (or `.then()`) it.
|
|
234
|
+
*/
|
|
235
|
+
then(onFulfilled, onRejected) {
|
|
236
|
+
return this.execute().then(onFulfilled, onRejected);
|
|
237
|
+
}
|
|
238
|
+
async execute() {
|
|
239
|
+
const projectId = this.client.resolveProjectId();
|
|
240
|
+
const cache = this.client.cache;
|
|
241
|
+
// Writes are never cached. On success they invalidate the table's cached
|
|
242
|
+
// reads so the next read is fresh (read-your-own-writes correctness).
|
|
243
|
+
if (this.action !== 'select') {
|
|
244
|
+
const result = await this.doFetch(projectId);
|
|
245
|
+
if (cache && result.error === null) {
|
|
246
|
+
cache.invalidate(this.table);
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
if (!cache)
|
|
251
|
+
return this.doFetch(projectId);
|
|
252
|
+
// Forced reads always fetch, but use the same generation fence as cached
|
|
253
|
+
// reads so an overlapping write/session change cannot warm stale data.
|
|
254
|
+
return cache.read(this.cacheKey(projectId), this.table, () => this.doFetch(projectId), this.freshOnly);
|
|
255
|
+
}
|
|
256
|
+
/** The actual network round-trip — no cache involvement. */
|
|
257
|
+
async doFetch(projectId) {
|
|
258
|
+
const body = this.buildBody(projectId);
|
|
259
|
+
try {
|
|
260
|
+
const result = await this.client.call('POST', '/db/query', { body });
|
|
261
|
+
const serverCount = typeof result?.count === 'number' ? result.count : null;
|
|
262
|
+
// head:true → the count only, no rows (count-only semantics).
|
|
263
|
+
if (this.headOnly) {
|
|
264
|
+
return { data: null, error: null, count: serverCount, status: 200 };
|
|
265
|
+
}
|
|
266
|
+
// Rows come back already shaped by the server, with any foreign-key
|
|
267
|
+
// embeds nested in place — we just apply the one-row/null resolution.
|
|
268
|
+
const rows = result?.data ?? [];
|
|
269
|
+
return this.shapeRows(rows, serverCount);
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
if (err instanceof SomewhereError) {
|
|
273
|
+
return invalidResult(err);
|
|
274
|
+
}
|
|
275
|
+
throw err;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Cache key for this select: every input that changes the result set —
|
|
280
|
+
* project + table + columns + filters + order + limit/offset + resolveType
|
|
281
|
+
* + count/head options, including inputs that change only the result shape.
|
|
282
|
+
*/
|
|
283
|
+
cacheKey(projectId) {
|
|
284
|
+
return JSON.stringify({
|
|
285
|
+
p: projectId,
|
|
286
|
+
t: this.table,
|
|
287
|
+
c: this.state.columns ?? '*',
|
|
288
|
+
f: this.filters,
|
|
289
|
+
o: this.orderClause,
|
|
290
|
+
l: this.limitN,
|
|
291
|
+
x: this.offsetN,
|
|
292
|
+
r: this.resolveType,
|
|
293
|
+
count: this.countMode,
|
|
294
|
+
head: this.headOnly,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
buildBody(projectId) {
|
|
298
|
+
const base = {
|
|
299
|
+
project_id: projectId,
|
|
300
|
+
table: this.table,
|
|
301
|
+
};
|
|
302
|
+
if (this.filters.length > 0) {
|
|
303
|
+
base.filters = this.filters;
|
|
304
|
+
}
|
|
305
|
+
switch (this.action) {
|
|
306
|
+
case 'select': {
|
|
307
|
+
// Send the select verbatim — including any `table(cols)` embeds,
|
|
308
|
+
// which the server resolves and returns nested (foreign-key joins).
|
|
309
|
+
base.select = this.state.columns ?? '*';
|
|
310
|
+
if (this.orderClause) {
|
|
311
|
+
base.order = this.orderClause;
|
|
312
|
+
}
|
|
313
|
+
if (this.limitN != null) {
|
|
314
|
+
base.limit = this.limitN;
|
|
315
|
+
}
|
|
316
|
+
if (this.offsetN != null) {
|
|
317
|
+
base.offset = this.offsetN;
|
|
318
|
+
}
|
|
319
|
+
if (this.countMode) {
|
|
320
|
+
base.count = this.countMode;
|
|
321
|
+
}
|
|
322
|
+
if (this.headOnly) {
|
|
323
|
+
base.head = true;
|
|
324
|
+
}
|
|
325
|
+
// single()/maybeSingle(): hint the server to cap the fetch (LIMIT 2)
|
|
326
|
+
// so it never pulls a full result set just to detect the >1 case.
|
|
327
|
+
// The final one-row / null / error shaping still happens here.
|
|
328
|
+
if (this.resolveType !== 'many') {
|
|
329
|
+
base.single = true;
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 'insert': {
|
|
334
|
+
const rows = this.state.insertValues ?? [];
|
|
335
|
+
base.insert = rows.length === 1 ? rows[0] : rows;
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
case 'upsert': {
|
|
339
|
+
const rows = this.state.insertValues ?? [];
|
|
340
|
+
base.upsert = rows.length === 1 ? rows[0] : rows;
|
|
341
|
+
base.onConflict = this.state.conflictKey ?? 'id';
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
case 'update': {
|
|
345
|
+
base.update = this.state.updateValues ?? {};
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
case 'delete': {
|
|
349
|
+
base.delete = true;
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return base;
|
|
354
|
+
}
|
|
355
|
+
shapeRows(rows, serverCount) {
|
|
356
|
+
if (this.resolveType === 'single') {
|
|
357
|
+
if (rows.length === 0) {
|
|
358
|
+
return invalidResult(new SomewhereError({
|
|
359
|
+
code: 'PGRST116',
|
|
360
|
+
message: 'Single-row query returned 0 rows.',
|
|
361
|
+
statusCode: 406,
|
|
362
|
+
retry: false,
|
|
363
|
+
retryAfterMs: null,
|
|
364
|
+
}));
|
|
365
|
+
}
|
|
366
|
+
if (rows.length > 1) {
|
|
367
|
+
return invalidResult(new SomewhereError({
|
|
368
|
+
code: 'PGRST116',
|
|
369
|
+
message: `Single-row query returned ${rows.length} rows.`,
|
|
370
|
+
statusCode: 406,
|
|
371
|
+
retry: false,
|
|
372
|
+
retryAfterMs: null,
|
|
373
|
+
}));
|
|
374
|
+
}
|
|
375
|
+
return { data: rows[0], error: null, count: serverCount ?? 1, status: 200 };
|
|
376
|
+
}
|
|
377
|
+
if (this.resolveType === 'maybeSingle') {
|
|
378
|
+
if (rows.length === 0) {
|
|
379
|
+
return { data: null, error: null, count: serverCount ?? 0, status: 200 };
|
|
380
|
+
}
|
|
381
|
+
return { data: rows[0], error: null, count: serverCount ?? 1, status: 200 };
|
|
382
|
+
}
|
|
383
|
+
return { data: rows, error: null, count: serverCount ?? rows.length, status: 200 };
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=postgrest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgrest.js","sourceRoot":"","sources":["../../../src/resources/postgrest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAsC9C,SAAS,aAAa,CAAI,GAAmB;IAC3C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;AACzE,CAAC;AAED,kFAAkF;AAClF,SAAS,aAAa,CAAC,CAAS;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACnB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;aAC/C,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uFAAuF;AACvF,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oDAAoD;AACpD,MAAM,OAAO,qBAAqB;IAChC,YACmB,MAAc,EACd,KAAa;QADb,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAQ;IAC7B,CAAC;IAEJ;;;;;;;;;;;OAWG;IACH,MAAM,CACJ,OAAO,GAAG,GAAG,EACb,UAAiD,EAAE;QAEnD,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;YACnE,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CACJ,MAA2D;QAE3D,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;YACnE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CACJ,MAA2D,EAC3D,UAAmC,EAAE;QAErC,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;YACnE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvD,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;SACxC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAA+B;QACpC,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;YACnE,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF;AAWD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAcjC,YACmB,MAAc,EACd,KAAa,EACb,MAAc,EACd,KAAyB;QAHzB,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAoB;QAf3B,YAAO,GAAuB,EAAE,CAAC;QAC1C,gBAAW,GAAuB,IAAI,CAAC;QACvC,WAAM,GAAkB,IAAI,CAAC;QAC7B,YAAO,GAAkB,IAAI,CAAC;QAC9B,gBAAW,GAAgB,MAAM,CAAC;QAC1C,kFAAkF;QAC1E,cAAS,GAAG,KAAK,CAAC;QAWxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;IACtC,CAAC;IAED,kEAAkE;IAElE,EAAE,CAAC,MAAc,EAAE,KAAc;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,KAAc;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,MAAc,EAAE,KAAc;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,KAAc;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,MAAc,EAAE,KAAc;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,KAAc;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,MAAc,EAAE,OAAe;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,MAAc,EAAE,OAAe;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,MAAc,EAAE,MAAiB;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,EAAE,CAAC,MAAc,EAAE,KAAqB;QACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,GAAG,CAAC,MAAc,EAAE,EAAU,EAAE,KAAc;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,QAAiC;QACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,EAAE,CAAC,OAAe;QAChB,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,yEAAyE;YACzE,MAAM,OAAO,GAAG,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC;oBACR,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;oBAClB,EAAE,EAAE,IAAI;oBACR,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBACrE,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,QAAQ,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC;gBAAE,SAAS,CAAC,wBAAwB;YACrE,IAAI,CAAC,IAAI,CAAC;gBACR,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;gBAC/B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,SAAS,CAAC;gBACvC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kEAAkE;IAElE,KAAK,CACH,MAAc,EACd,UAAmC,EAAE;QAErC,IAAI,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,CAAS;QACb,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,IAAY,EAAE,EAAU;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,MAAM;QACJ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,WAAW;QACT,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kEAAkE;IAElE;;;;OAIG;IACH,IAAI,CACF,WAEQ,EACR,UAA6E;QAE7E,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAEhC,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3C,yEAAyE;QACzE,uEAAuE;QACvE,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EACxB,IAAI,CAAC,KAAK,EACV,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAC7B,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,4DAA4D;IACpD,KAAK,CAAC,OAAO,CACnB,SAA6B;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAIlC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAE5E,8DAA8D;YAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YACtE,CAAC;YAED,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAC,SAA6B;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,IAAI,CAAC,KAAK;YACb,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG;YAC5B,CAAC,EAAE,IAAI,CAAC,OAAO;YACf,CAAC,EAAE,IAAI,CAAC,WAAW;YACnB,CAAC,EAAE,IAAI,CAAC,MAAM;YACd,CAAC,EAAE,IAAI,CAAC,OAAO;YACf,CAAC,EAAE,IAAI,CAAC,WAAW;YACnB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,SAA6B;QAC7C,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,iEAAiE;gBACjE,oEAAoE;gBACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;gBACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;oBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,CAAC;gBACD,qEAAqE;gBACrE,kEAAkE;gBAClE,+DAA+D;gBAC/D,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;oBAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;gBACjD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC5C,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CACf,IAA+B,EAC/B,WAA0B;QAE1B,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,aAAa,CAClB,IAAI,cAAc,CAAC;oBACjB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,mCAAmC;oBAC5C,UAAU,EAAE,GAAG;oBACf,KAAK,EAAE,KAAK;oBACZ,YAAY,EAAE,IAAI;iBACnB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,aAAa,CAClB,IAAI,cAAc,CAAC;oBACjB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,6BAA6B,IAAI,CAAC,MAAM,QAAQ;oBACzD,UAAU,EAAE,GAAG;oBACf,KAAK,EAAE,KAAK;oBACZ,YAAY,EAAE,IAAI;iBACnB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC9E,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC9E,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACrF,CAAC;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { SomewhereError } from '../errors.js';
|
|
2
|
+
export class ProjectsClient {
|
|
3
|
+
constructor(client) {
|
|
4
|
+
this.client = client;
|
|
5
|
+
}
|
|
6
|
+
/** Update the optional analytics consent policy; the platform validates policy and editor access. */
|
|
7
|
+
async update(settings, projectId) {
|
|
8
|
+
const id = this.client.requireProjectId(projectId, 'projects.update');
|
|
9
|
+
try {
|
|
10
|
+
const result = await this.client.call('PATCH', `/projects/${encodeURIComponent(id)}`, { body: settings, auth: 'developer' });
|
|
11
|
+
return { data: result, error: null, status: 200 };
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
return toResultError(err);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Inspect deployed homepage files and configured SEO defaults; live rendering and indexing remain unverified. */
|
|
18
|
+
async seoCheck(projectId) {
|
|
19
|
+
const id = this.client.requireProjectId(projectId, 'projects.seoCheck');
|
|
20
|
+
try {
|
|
21
|
+
const result = await this.client.call('GET', `/projects/${encodeURIComponent(id)}/seo`, { auth: 'developer' });
|
|
22
|
+
return { data: result, error: null, status: 200 };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return toResultError(err);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Read a project's exact cross-origin allowlist (CORS allowed_origins). */
|
|
29
|
+
async getAllowedOrigins(projectId) {
|
|
30
|
+
const id = this.client.requireProjectId(projectId, 'projects.getAllowedOrigins');
|
|
31
|
+
try {
|
|
32
|
+
const result = await this.client.call('GET', `/projects/${encodeURIComponent(id)}/allowed-origins`, { auth: 'developer' });
|
|
33
|
+
return { data: result, error: null, status: 200 };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return toResultError(err);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Replace a project's cross-origin allowlist with these exact origins.
|
|
41
|
+
* Owner-or-platform-admin only, and audited server-side. Each entry must be
|
|
42
|
+
* an exact origin (scheme + host + optional port, no path or wildcards); the
|
|
43
|
+
* platform validates and normalizes them — no client-side munging. Pass `[]`
|
|
44
|
+
* to clear the allowlist.
|
|
45
|
+
*/
|
|
46
|
+
async setAllowedOrigins(allowedOrigins, projectId) {
|
|
47
|
+
const id = this.client.requireProjectId(projectId, 'projects.setAllowedOrigins');
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.client.call('PUT', `/projects/${encodeURIComponent(id)}/allowed-origins`, { body: { allowed_origins: allowedOrigins }, auth: 'developer' });
|
|
50
|
+
return { data: result, error: null, status: 200 };
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
return toResultError(err);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Remove all configured cross-origin origins (owner/admin only). */
|
|
57
|
+
clearAllowedOrigins(projectId) {
|
|
58
|
+
return this.setAllowedOrigins([], projectId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function toResultError(err) {
|
|
62
|
+
if (err instanceof SomewhereError) {
|
|
63
|
+
return { data: null, error: err, status: err.statusCode };
|
|
64
|
+
}
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/resources/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8D9C,MAAM,OAAO,cAAc;IACzB,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,qGAAqG;IACrG,KAAK,CAAC,MAAM,CAAC,QAA4B,EAAE,SAAkB;QAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,OAAO,EACP,aAAa,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CACtC,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,kHAAkH;IAClH,KAAK,CAAC,QAAQ,CAAC,SAAkB;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,KAAK,EACL,aAAa,kBAAkB,CAAC,EAAE,CAAC,MAAM,EACzC,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,iBAAiB,CAAC,SAAkB;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,KAAK,EACL,aAAa,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,EACrD,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CACrB,cAAwB,EACxB,SAAkB;QAElB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACnC,KAAK,EACL,aAAa,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,EACrD,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CACjE,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,mBAAmB,CAAC,SAAkB;QACpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,SAAS,aAAa,CAAI,GAAY;IACpC,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC"}
|