@somewhere-cloud/sdk 0.0.0-stage → 0.13.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/LICENSE +21 -0
- package/README.md +191 -2
- package/dist/cjs/auth/client.js +1059 -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 +1054 -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,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FunctionsClient = void 0;
|
|
4
|
+
const errors_js_1 = require("../errors.js");
|
|
5
|
+
/**
|
|
6
|
+
* Application-function invocation client.
|
|
7
|
+
*
|
|
8
|
+
* const { data, error } = await sw.functions.invoke('checkout', {
|
|
9
|
+
* body: { plan: 'pro' },
|
|
10
|
+
* })
|
|
11
|
+
*
|
|
12
|
+
* `invoke(name)` calls `POST {projectUrl}/api/{name}` — the project's own
|
|
13
|
+
* deployed function (an `api/{name}` file). `data` is the function's parsed
|
|
14
|
+
* JSON response (or text); `error` is set on any non-2xx status or network
|
|
15
|
+
* failure, using the established `{ data, error }` envelope.
|
|
16
|
+
*
|
|
17
|
+
* The function host is the app URL you passed to `createClient(appUrl, key)`
|
|
18
|
+
* or as `functionsUrl`. It is never derived from `projectId`: a project id
|
|
19
|
+
* can be a slug that is unique only to its owner, and the same text can be
|
|
20
|
+
* another customer's subdomain, so a derived host could receive your
|
|
21
|
+
* credentials. Without an app URL `invoke` returns `NO_FUNCTION_HOST` before
|
|
22
|
+
* any request. In a project folder the CLI records the platform-reported URL
|
|
23
|
+
* as `app_url` in `.somewhere.json`, and `somewhere status --json` prints it.
|
|
24
|
+
*/
|
|
25
|
+
class FunctionsClient {
|
|
26
|
+
constructor(client) {
|
|
27
|
+
this.client = client;
|
|
28
|
+
}
|
|
29
|
+
async invoke(name, options = {}) {
|
|
30
|
+
const base = this.resolveBase();
|
|
31
|
+
if (!base) {
|
|
32
|
+
return errored('NO_FUNCTION_HOST', "functions.invoke needs your app's URL, and a project id is not one. " +
|
|
33
|
+
'Build the client with createClient(appUrl, key) or pass { functionsUrl }. ' +
|
|
34
|
+
'In a project folder, app_url in .somewhere.json (or `somewhere status --json`) is the platform-reported URL.', 400);
|
|
35
|
+
}
|
|
36
|
+
const fn = name.replace(/^\/+/, '').replace(/^api\//, '');
|
|
37
|
+
if (!fn) {
|
|
38
|
+
return errored('VALIDATION_ERROR', 'functions.invoke requires a function name.', 400);
|
|
39
|
+
}
|
|
40
|
+
const url = `${base}/api/${fn}`;
|
|
41
|
+
const method = options.method ?? 'POST';
|
|
42
|
+
// Cookie-mode sessions (browser default): the httpOnly cookie carries
|
|
43
|
+
// the user's identity, so send credentials and OMIT Authorization —
|
|
44
|
+
// sw.auth.fromRequest prefers a Bearer header, and the static
|
|
45
|
+
// construction key would shadow the signed-in cookie user. An active
|
|
46
|
+
// header session (or explicit header mode) keeps the 0.5.x transport.
|
|
47
|
+
const cookieMode = this.client.authMode === 'cookie' && !this.client.hasSession;
|
|
48
|
+
const headers = {
|
|
49
|
+
Accept: 'application/json',
|
|
50
|
+
...(cookieMode ? {} : { Authorization: this.client.sessionOrInitialBearer }),
|
|
51
|
+
...(options.headers ?? {}),
|
|
52
|
+
};
|
|
53
|
+
let body;
|
|
54
|
+
if (options.body !== undefined && method !== 'GET') {
|
|
55
|
+
if (isBinary(options.body)) {
|
|
56
|
+
body = options.body;
|
|
57
|
+
}
|
|
58
|
+
else if (typeof options.body === 'string') {
|
|
59
|
+
body = options.body;
|
|
60
|
+
headers['Content-Type'] ?? (headers['Content-Type'] = 'text/plain;charset=UTF-8');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
body = JSON.stringify(options.body);
|
|
64
|
+
headers['Content-Type'] ?? (headers['Content-Type'] = 'application/json');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
let res;
|
|
68
|
+
try {
|
|
69
|
+
res = await this.client.rawFetch(url, {
|
|
70
|
+
method,
|
|
71
|
+
headers,
|
|
72
|
+
body,
|
|
73
|
+
...(cookieMode ? { credentials: 'include' } : {}),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return errored('NETWORK_ERROR', err instanceof Error ? err.message : `Network error reaching ${url}.`, 0, true);
|
|
78
|
+
}
|
|
79
|
+
const parsed = await readBody(res);
|
|
80
|
+
if (!res.ok) {
|
|
81
|
+
const b = parsed;
|
|
82
|
+
// An unknown or committed write must not be repeated just because the
|
|
83
|
+
// response is 5xx. Keep explicit refusals ahead of any retry:true hint.
|
|
84
|
+
const unsafeToRetry = b?.retry === false || b?.retryable === false
|
|
85
|
+
|| b?.outcome === 'unknown' || b?.outcome === 'committed'
|
|
86
|
+
|| b?.write_committed === true || b?.prior_write_committed === true;
|
|
87
|
+
const retry = unsafeToRetry ? false
|
|
88
|
+
: typeof b?.retry === 'boolean' ? b.retry : res.status >= 500;
|
|
89
|
+
const retryAfterMs = b?.retry_after_ms;
|
|
90
|
+
return {
|
|
91
|
+
data: null,
|
|
92
|
+
error: new errors_js_1.SomewhereError({
|
|
93
|
+
code: b?.error ?? `FUNCTION_HTTP_${res.status}`,
|
|
94
|
+
message: b?.message ?? `Function '${fn}' returned ${res.status}.`,
|
|
95
|
+
statusCode: res.status,
|
|
96
|
+
retry,
|
|
97
|
+
retryAfterMs: typeof retryAfterMs === 'number' && Number.isSafeInteger(retryAfterMs) && retryAfterMs >= 0
|
|
98
|
+
? retryAfterMs : null,
|
|
99
|
+
body: parsed,
|
|
100
|
+
}),
|
|
101
|
+
status: res.status,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return { data: parsed, error: null, status: res.status };
|
|
105
|
+
}
|
|
106
|
+
/** The caller-supplied app URL, or null. Never derived from projectId. */
|
|
107
|
+
resolveBase() {
|
|
108
|
+
return this.client.functionsUrl ?? null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.FunctionsClient = FunctionsClient;
|
|
112
|
+
function errored(code, message, statusCode, retry = false) {
|
|
113
|
+
return {
|
|
114
|
+
data: null,
|
|
115
|
+
error: new errors_js_1.SomewhereError({ code, message, statusCode, retry, retryAfterMs: null }),
|
|
116
|
+
status: statusCode,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function isBinary(body) {
|
|
120
|
+
if (typeof FormData !== 'undefined' && body instanceof FormData)
|
|
121
|
+
return true;
|
|
122
|
+
if (typeof Blob !== 'undefined' && body instanceof Blob)
|
|
123
|
+
return true;
|
|
124
|
+
if (typeof ArrayBuffer !== 'undefined' && body instanceof ArrayBuffer)
|
|
125
|
+
return true;
|
|
126
|
+
if (ArrayBuffer.isView(body))
|
|
127
|
+
return true;
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
async function readBody(res) {
|
|
131
|
+
const text = await res.text().catch(() => '');
|
|
132
|
+
if (!text)
|
|
133
|
+
return null;
|
|
134
|
+
const ct = res.headers.get('content-type') ?? '';
|
|
135
|
+
if (ct.includes('application/json')) {
|
|
136
|
+
try {
|
|
137
|
+
return JSON.parse(text);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return text;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return text;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/resources/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InboxClient = exports.InboxMessagesClient = exports.InboxAddressesClient = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Inbound email — the receive side of `sw.emails.send(...)`.
|
|
6
|
+
* Each project can mint addresses on the platform's inbox subdomain,
|
|
7
|
+
* and incoming mail is persisted with subject + text preview + raw MIME.
|
|
8
|
+
*
|
|
9
|
+
* // Create an inbox address (e.g. orders@inbox.somewhere.tech).
|
|
10
|
+
* await sw.inbox.addresses.create({ local: 'orders', label: 'Orders' })
|
|
11
|
+
*
|
|
12
|
+
* // List recent messages.
|
|
13
|
+
* const { data } = await sw.inbox.messages.list({ limit: 20 })
|
|
14
|
+
*
|
|
15
|
+
* // Fetch the full message + a path for the raw .eml.
|
|
16
|
+
* const msg = await sw.inbox.messages.get('msg-id')
|
|
17
|
+
*
|
|
18
|
+
* // Raw MIME bytes (forwarding, archival, parsing).
|
|
19
|
+
* const raw = await sw.inbox.messages.getRaw('msg-id')
|
|
20
|
+
*/
|
|
21
|
+
class InboxAddressesClient {
|
|
22
|
+
constructor(client) {
|
|
23
|
+
this.client = client;
|
|
24
|
+
}
|
|
25
|
+
async create(input) {
|
|
26
|
+
const project_id = this.client.requireProjectId(input.projectId, 'inbox.addresses.create');
|
|
27
|
+
return this.client.safeCall('POST', '/inbox/addresses', {
|
|
28
|
+
auth: 'developer',
|
|
29
|
+
body: { project_id, local: input.local, label: input.label },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async list(opts = {}) {
|
|
33
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'inbox.addresses.list');
|
|
34
|
+
return this.client.safeCall('GET', '/inbox/addresses', {
|
|
35
|
+
auth: 'developer',
|
|
36
|
+
query: { project_id },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async delete(id) {
|
|
40
|
+
return this.client.safeCall('DELETE', `/inbox/addresses/${encodeURIComponent(id)}`, { auth: 'developer' });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.InboxAddressesClient = InboxAddressesClient;
|
|
44
|
+
class InboxMessagesClient {
|
|
45
|
+
constructor(client) {
|
|
46
|
+
this.client = client;
|
|
47
|
+
}
|
|
48
|
+
async list(opts = {}) {
|
|
49
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'inbox.messages.list');
|
|
50
|
+
return this.client.safeCall('GET', '/inbox', {
|
|
51
|
+
auth: 'developer',
|
|
52
|
+
query: { project_id, address_id: opts.addressId, limit: opts.limit },
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async get(id) {
|
|
56
|
+
return this.client.safeCall('GET', `/inbox/${encodeURIComponent(id)}`, {
|
|
57
|
+
auth: 'developer',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** Raw MIME bytes (`.eml`) and content type. */
|
|
61
|
+
async getRaw(id) {
|
|
62
|
+
return this.client.getBytes(`/inbox/${encodeURIComponent(id)}/raw`, undefined, 'developer');
|
|
63
|
+
}
|
|
64
|
+
async delete(id) {
|
|
65
|
+
return this.client.safeCall('DELETE', `/inbox/${encodeURIComponent(id)}`, { auth: 'developer' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.InboxMessagesClient = InboxMessagesClient;
|
|
69
|
+
class InboxClient {
|
|
70
|
+
constructor(client) {
|
|
71
|
+
this.addresses = new InboxAddressesClient(client);
|
|
72
|
+
this.messages = new InboxMessagesClient(client);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.InboxClient = InboxClient;
|
|
76
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/resources/inbox.ts"],"names":[],"mappings":";;;AAWA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,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;AA1BD,oDA0BC;AAED,MAAa,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;AA7BD,kDA6BC;AAED,MAAa,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;AARD,kCAQC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PaymentsClient = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Stripe-Connect-style payments. The platform is the Stripe platform
|
|
6
|
+
* account; each project gets its own connected account. somewhere.tech
|
|
7
|
+
* takes zero platform fee — every charge settles 100% to the developer's
|
|
8
|
+
* connected account. The developer never holds a Stripe key — they call:
|
|
9
|
+
*
|
|
10
|
+
* await sw.payments.onboard({ return_url, refresh_url })
|
|
11
|
+
* // → redirect end-user to result.onboarding_url
|
|
12
|
+
*
|
|
13
|
+
* const status = await sw.payments.status()
|
|
14
|
+
* if (!status.data?.charges_enabled) ...
|
|
15
|
+
*
|
|
16
|
+
* await sw.payments.checkout({
|
|
17
|
+
* line_items: [{ amount: 4999, currency: 'usd', name: 'Pro' }],
|
|
18
|
+
* success_url, cancel_url,
|
|
19
|
+
* })
|
|
20
|
+
* // → redirect end-user to result.url
|
|
21
|
+
*/
|
|
22
|
+
class PaymentsClient {
|
|
23
|
+
constructor(client) {
|
|
24
|
+
this.client = client;
|
|
25
|
+
}
|
|
26
|
+
async onboard(input = {}) {
|
|
27
|
+
const project_id = this.client.requireProjectId(input.projectId, 'payments.onboard');
|
|
28
|
+
return this.client.safeCall('POST', '/payments/onboard', {
|
|
29
|
+
auth: 'developer',
|
|
30
|
+
body: {
|
|
31
|
+
project_id,
|
|
32
|
+
return_url: input.return_url,
|
|
33
|
+
refresh_url: input.refresh_url,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async status(opts = {}) {
|
|
38
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'payments.status');
|
|
39
|
+
return this.client.safeCall('GET', '/payments/status', {
|
|
40
|
+
auth: 'developer',
|
|
41
|
+
query: { project_id, refresh: opts.refresh ? '1' : undefined },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async checkout(input) {
|
|
45
|
+
const project_id = this.client.requireProjectId(input.projectId, 'payments.checkout');
|
|
46
|
+
return this.client.safeCall('POST', '/payments/checkout', {
|
|
47
|
+
auth: 'developer',
|
|
48
|
+
body: {
|
|
49
|
+
project_id,
|
|
50
|
+
line_items: input.line_items,
|
|
51
|
+
mode: input.mode,
|
|
52
|
+
success_url: input.success_url,
|
|
53
|
+
cancel_url: input.cancel_url,
|
|
54
|
+
customer_email: input.customer_email,
|
|
55
|
+
metadata: input.metadata,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async dashboardLink(opts = {}) {
|
|
60
|
+
const project_id = this.client.requireProjectId(opts.projectId, 'payments.dashboardLink');
|
|
61
|
+
return this.client.safeCall('GET', '/payments/dashboard-link', {
|
|
62
|
+
auth: 'developer',
|
|
63
|
+
query: { project_id },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.PaymentsClient = PaymentsClient;
|
|
68
|
+
//# sourceMappingURL=payments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../../src/resources/payments.ts"],"names":[],"mappings":";;;AAYA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,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;AA9CD,wCA8CC"}
|