saasignal 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env node
2
+ import { SaaSignalClient, SaaSignalError } from "./client.js";
3
+ const USAGE = `
4
+ saasignal — CLI for the SaaSignal API
5
+
6
+ Usage:
7
+ saasignal <namespace> <command> [args...]
8
+
9
+ Environment:
10
+ SAASIGNAL_API_KEY API key (required)
11
+ SAASIGNAL_API_URL Base URL (default: https://api.saasignal.saastemly.com)
12
+
13
+ Namespaces:
14
+ kv Key-value store
15
+ channels Real-time pub/sub
16
+ jobs Task / queue / cron
17
+ billing Packages, tokens, usage
18
+
19
+ KV Commands:
20
+ kv get <key>
21
+ kv set <key> <json-value> [--ttl <seconds>] [--nx]
22
+ kv delete <key>
23
+ kv increment <key> [--delta <n>] [--ttl <seconds>]
24
+ kv scan [--prefix <p>] [--limit <n>] [--cursor <c>]
25
+
26
+ Channel Commands:
27
+ channels publish <channel> <event> <json-data>
28
+ channels presence <channel>
29
+ channels history <channel> [--limit <n>]
30
+
31
+ Job Commands:
32
+ jobs create <name> --trigger <type> [--queue <q>] [--cron <expr>] [--delay <s>] [--payload <json>] [--handler <url>]
33
+ jobs list [--status <s>] [--trigger-type <t>] [--queue <q>] [--limit <n>]
34
+ jobs get <job_id>
35
+ jobs cancel <job_id>
36
+ jobs trigger <job_id>
37
+ jobs retry <job_id>
38
+ jobs runs <job_id> [--limit <n>]
39
+ jobs claim <queue> [--count <n>] [--timeout <s>]
40
+ jobs ack <job_id> --status <completed|failed> [--result <json>] [--error <msg>]
41
+
42
+ Billing Commands:
43
+ billing packages
44
+ billing usage <org_id>
45
+ billing balance <org_id>
46
+ billing bundles
47
+ billing token-usage <org_id> [--from <date>] [--to <date>] [--granularity <hour|day|month>]
48
+ `.trim();
49
+ function parseArgs(args) {
50
+ const positional = [];
51
+ const flags = {};
52
+ for (let i = 0; i < args.length; i++) {
53
+ const arg = args[i];
54
+ if (arg.startsWith("--")) {
55
+ const key = arg.slice(2);
56
+ if (key === "nx") {
57
+ flags[key] = "true";
58
+ }
59
+ else {
60
+ flags[key] = args[++i] ?? "";
61
+ }
62
+ }
63
+ else {
64
+ positional.push(arg);
65
+ }
66
+ }
67
+ return { positional, flags };
68
+ }
69
+ function out(data) {
70
+ console.log(JSON.stringify(data, null, 2));
71
+ }
72
+ async function main() {
73
+ const args = process.argv.slice(2);
74
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
75
+ console.log(USAGE);
76
+ process.exit(0);
77
+ }
78
+ let client;
79
+ try {
80
+ client = new SaaSignalClient();
81
+ }
82
+ catch (e) {
83
+ console.error(`Error: ${e.message}`);
84
+ process.exit(1);
85
+ return; // unreachable but satisfies TS control flow
86
+ }
87
+ const [namespace, command, ...rest] = args;
88
+ const { positional, flags } = parseArgs(rest);
89
+ try {
90
+ switch (namespace) {
91
+ case "kv":
92
+ await handleKv(client, command, positional, flags);
93
+ break;
94
+ case "channels":
95
+ await handleChannels(client, command, positional, flags);
96
+ break;
97
+ case "jobs":
98
+ await handleJobs(client, command, positional, flags);
99
+ break;
100
+ case "billing":
101
+ await handleBilling(client, command, positional, flags);
102
+ break;
103
+ default:
104
+ console.error(`Unknown namespace: ${namespace}\n`);
105
+ console.log(USAGE);
106
+ process.exit(1);
107
+ }
108
+ }
109
+ catch (e) {
110
+ if (e instanceof SaaSignalError) {
111
+ console.error(JSON.stringify({ error: e.code, message: e.message, status: e.status }, null, 2));
112
+ process.exit(1);
113
+ }
114
+ throw e;
115
+ }
116
+ }
117
+ async function handleKv(client, cmd, pos, flags) {
118
+ switch (cmd) {
119
+ case "get":
120
+ out(await client.kv.get(pos[0]));
121
+ break;
122
+ case "set": {
123
+ const value = JSON.parse(pos[1]);
124
+ out(await client.kv.set(pos[0], value, {
125
+ ttl: flags.ttl ? Number(flags.ttl) : undefined,
126
+ if_not_exists: flags.nx === "true",
127
+ }));
128
+ break;
129
+ }
130
+ case "delete":
131
+ await client.kv.delete(pos[0]);
132
+ console.log("Deleted");
133
+ break;
134
+ case "increment":
135
+ out(await client.kv.increment(pos[0], flags.delta ? Number(flags.delta) : 1, flags.ttl ? Number(flags.ttl) : undefined));
136
+ break;
137
+ case "scan":
138
+ out(await client.kv.scan({
139
+ prefix: flags.prefix,
140
+ limit: flags.limit ? Number(flags.limit) : undefined,
141
+ cursor: flags.cursor,
142
+ }));
143
+ break;
144
+ default:
145
+ console.error(`Unknown kv command: ${cmd}`);
146
+ process.exit(1);
147
+ }
148
+ }
149
+ async function handleChannels(client, cmd, pos, flags) {
150
+ switch (cmd) {
151
+ case "publish":
152
+ out(await client.channels.publish(pos[0], pos[1], JSON.parse(pos[2])));
153
+ break;
154
+ case "presence":
155
+ out(await client.channels.presence(pos[0]));
156
+ break;
157
+ case "history":
158
+ out(await client.channels.history(pos[0], { limit: flags.limit ? Number(flags.limit) : undefined }));
159
+ break;
160
+ default:
161
+ console.error(`Unknown channels command: ${cmd}`);
162
+ process.exit(1);
163
+ }
164
+ }
165
+ async function handleJobs(client, cmd, pos, flags) {
166
+ switch (cmd) {
167
+ case "create":
168
+ out(await client.jobs.create({
169
+ name: pos[0],
170
+ trigger: {
171
+ type: flags.trigger,
172
+ queue: flags.queue,
173
+ schedule: flags.cron,
174
+ delay_seconds: flags.delay ? Number(flags.delay) : undefined,
175
+ },
176
+ payload: flags.payload ? JSON.parse(flags.payload) : undefined,
177
+ handler: flags.handler,
178
+ max_attempts: flags["max-attempts"] ? Number(flags["max-attempts"]) : undefined,
179
+ backoff: flags.backoff,
180
+ }));
181
+ break;
182
+ case "list":
183
+ out(await client.jobs.list({
184
+ status: flags.status,
185
+ trigger_type: flags["trigger-type"],
186
+ queue: flags.queue,
187
+ limit: flags.limit ? Number(flags.limit) : undefined,
188
+ }));
189
+ break;
190
+ case "get":
191
+ out(await client.jobs.get(pos[0]));
192
+ break;
193
+ case "cancel":
194
+ out(await client.jobs.cancel(pos[0]));
195
+ break;
196
+ case "trigger":
197
+ out(await client.jobs.trigger(pos[0]));
198
+ break;
199
+ case "retry":
200
+ out(await client.jobs.retry(pos[0]));
201
+ break;
202
+ case "runs":
203
+ out(await client.jobs.runs(pos[0], { limit: flags.limit ? Number(flags.limit) : undefined }));
204
+ break;
205
+ case "claim":
206
+ out(await client.jobs.claim(pos[0], {
207
+ count: flags.count ? Number(flags.count) : undefined,
208
+ visibility_timeout: flags.timeout ? Number(flags.timeout) : undefined,
209
+ }));
210
+ break;
211
+ case "ack":
212
+ out(await client.jobs.ack(pos[0], {
213
+ status: flags.status,
214
+ result: flags.result ? JSON.parse(flags.result) : undefined,
215
+ error: flags.error,
216
+ }));
217
+ break;
218
+ default:
219
+ console.error(`Unknown jobs command: ${cmd}`);
220
+ process.exit(1);
221
+ }
222
+ }
223
+ async function handleBilling(client, cmd, pos, flags) {
224
+ switch (cmd) {
225
+ case "packages":
226
+ out(await client.billing.packages());
227
+ break;
228
+ case "usage":
229
+ out(await client.billing.usage(pos[0]));
230
+ break;
231
+ case "balance":
232
+ out(await client.billing.tokenBalance(pos[0]));
233
+ break;
234
+ case "bundles":
235
+ out(await client.billing.topupBundles());
236
+ break;
237
+ case "token-usage":
238
+ out(await client.billing.tokenUsage(pos[0], {
239
+ from: flags.from,
240
+ to: flags.to,
241
+ granularity: flags.granularity,
242
+ }));
243
+ break;
244
+ default:
245
+ console.error(`Unknown billing command: ${cmd}`);
246
+ process.exit(1);
247
+ }
248
+ }
249
+ main();
250
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ import type { KvEntry, KvScanResult, KvBatchOp, KvBatchResult, ChannelPublishResult, ChannelPresenceResult, ChannelHistoryResult, Job, JobListResult, JobRunsResult, JobCreateInput, Package, TokenBalance, TopupBundle, TokenUsageResult, Org, OrgMember, Project, ApiKey, ApiKeyCreated } from "./types.js";
2
+ export declare class SaaSignalError extends Error {
3
+ status: number;
4
+ code: string;
5
+ constructor(status: number, code: string, message: string);
6
+ }
7
+ export interface ClientOptions {
8
+ apiKey?: string;
9
+ baseUrl?: string;
10
+ }
11
+ export declare class SaaSignalClient {
12
+ private apiKey;
13
+ private baseUrl;
14
+ readonly kv: KvNamespace;
15
+ readonly channels: ChannelsNamespace;
16
+ readonly jobs: JobsNamespace;
17
+ readonly billing: BillingNamespace;
18
+ readonly orgs: OrgsNamespace;
19
+ constructor(opts?: ClientOptions);
20
+ request<T = unknown>(method: string, path: string, opts?: {
21
+ body?: unknown;
22
+ query?: Record<string, string | number | undefined>;
23
+ }): Promise<T>;
24
+ }
25
+ declare class KvNamespace {
26
+ private client;
27
+ constructor(client: SaaSignalClient);
28
+ get(key: string): Promise<KvEntry | null>;
29
+ set(key: string, value: unknown, opts?: {
30
+ ttl?: number;
31
+ if_not_exists?: boolean;
32
+ }): Promise<KvEntry>;
33
+ delete(key: string): Promise<void>;
34
+ increment(key: string, delta?: number, ttl?: number): Promise<{
35
+ key: string;
36
+ value: number;
37
+ }>;
38
+ scan(opts?: {
39
+ prefix?: string;
40
+ limit?: number;
41
+ cursor?: string;
42
+ }): Promise<KvScanResult>;
43
+ batch(ops: KvBatchOp[]): Promise<{
44
+ results: KvBatchResult[];
45
+ }>;
46
+ }
47
+ declare class ChannelsNamespace {
48
+ private client;
49
+ constructor(client: SaaSignalClient);
50
+ publish(channel: string, event: string, data: unknown): Promise<ChannelPublishResult>;
51
+ batchPublish(messages: Array<{
52
+ channel: string;
53
+ event: string;
54
+ data: unknown;
55
+ }>): Promise<ChannelPublishResult[]>;
56
+ presence(channel: string): Promise<ChannelPresenceResult>;
57
+ history(channel: string, opts?: {
58
+ limit?: number;
59
+ before?: string;
60
+ }): Promise<ChannelHistoryResult>;
61
+ }
62
+ declare class JobsNamespace {
63
+ private client;
64
+ constructor(client: SaaSignalClient);
65
+ create(input: JobCreateInput): Promise<Job>;
66
+ list(opts?: {
67
+ status?: string;
68
+ trigger_type?: string;
69
+ queue?: string;
70
+ limit?: number;
71
+ }): Promise<JobListResult>;
72
+ get(jobId: string): Promise<Job | null>;
73
+ update(jobId: string, body: Partial<Pick<JobCreateInput, "handler" | "payload" | "enabled"> & {
74
+ trigger?: {
75
+ schedule?: string;
76
+ timezone?: string;
77
+ };
78
+ }>): Promise<Job>;
79
+ cancel(jobId: string): Promise<Job>;
80
+ batchCreate(jobs: JobCreateInput[]): Promise<{
81
+ jobs: Job[];
82
+ }>;
83
+ claim(queue: string, opts?: {
84
+ count?: number;
85
+ visibility_timeout?: number;
86
+ }): Promise<Job[]>;
87
+ ack(jobId: string, body: {
88
+ status: "completed" | "failed";
89
+ result?: unknown;
90
+ error?: string;
91
+ }): Promise<Job>;
92
+ trigger(jobId: string): Promise<{
93
+ job_id: string;
94
+ run_id: string;
95
+ triggered_at: string;
96
+ }>;
97
+ retry(jobId: string): Promise<Job>;
98
+ runs(jobId: string, opts?: {
99
+ limit?: number;
100
+ }): Promise<JobRunsResult>;
101
+ }
102
+ declare class BillingNamespace {
103
+ private client;
104
+ constructor(client: SaaSignalClient);
105
+ packages(): Promise<Package[]>;
106
+ usage(orgId: string): Promise<unknown>;
107
+ tokenBalance(orgId: string): Promise<TokenBalance>;
108
+ topupBundles(): Promise<TopupBundle[]>;
109
+ tokenUsage(orgId: string, opts?: {
110
+ from?: string;
111
+ to?: string;
112
+ granularity?: "hour" | "day" | "month";
113
+ }): Promise<TokenUsageResult>;
114
+ }
115
+ declare class OrgsNamespace {
116
+ private client;
117
+ constructor(client: SaaSignalClient);
118
+ list(): Promise<{
119
+ data: Org[];
120
+ }>;
121
+ create(body: {
122
+ name: string;
123
+ slug?: string;
124
+ }): Promise<Org>;
125
+ get(orgId: string): Promise<Org>;
126
+ update(orgId: string, body: {
127
+ name?: string;
128
+ slug?: string;
129
+ }): Promise<Org>;
130
+ delete(orgId: string): Promise<void>;
131
+ members(orgId: string): Promise<OrgMember[]>;
132
+ invite(orgId: string, body: {
133
+ email: string;
134
+ role?: string;
135
+ }): Promise<unknown>;
136
+ removeMember(orgId: string, userId: string): Promise<void>;
137
+ listProjects(orgId: string): Promise<{
138
+ data: Project[];
139
+ }>;
140
+ createProject(orgId: string, body: {
141
+ name: string;
142
+ region?: string;
143
+ }): Promise<Project>;
144
+ getProject(orgId: string, projectId: string): Promise<Project>;
145
+ deleteProject(orgId: string, projectId: string): Promise<void>;
146
+ listApiKeys(orgId: string, projectId: string): Promise<{
147
+ data: ApiKey[];
148
+ }>;
149
+ createApiKey(orgId: string, projectId: string, body: {
150
+ name: string;
151
+ scopes: string[];
152
+ expires_in_days?: number;
153
+ }): Promise<ApiKeyCreated>;
154
+ revokeApiKey(orgId: string, projectId: string, keyId: string): Promise<void>;
155
+ }
156
+ export {};
157
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,245 @@
1
+ const DEFAULT_BASE_URL = "https://api.saasignal.saastemly.com";
2
+ export class SaaSignalError extends Error {
3
+ status;
4
+ code;
5
+ constructor(status, code, message) {
6
+ super(message);
7
+ this.status = status;
8
+ this.code = code;
9
+ this.name = "SaaSignalError";
10
+ }
11
+ }
12
+ export class SaaSignalClient {
13
+ apiKey;
14
+ baseUrl;
15
+ kv;
16
+ channels;
17
+ jobs;
18
+ billing;
19
+ orgs;
20
+ constructor(opts) {
21
+ this.apiKey = opts?.apiKey ?? process.env.SAASIGNAL_API_KEY ?? "";
22
+ this.baseUrl = (opts?.baseUrl ?? process.env.SAASIGNAL_API_URL ?? DEFAULT_BASE_URL).replace(/\/$/, "");
23
+ if (!this.apiKey) {
24
+ throw new Error("SaaSignal API key required — pass apiKey option or set SAASIGNAL_API_KEY env var");
25
+ }
26
+ this.kv = new KvNamespace(this);
27
+ this.channels = new ChannelsNamespace(this);
28
+ this.jobs = new JobsNamespace(this);
29
+ this.billing = new BillingNamespace(this);
30
+ this.orgs = new OrgsNamespace(this);
31
+ }
32
+ async request(method, path, opts) {
33
+ const url = new URL(`${this.baseUrl}${path}`);
34
+ if (opts?.query) {
35
+ for (const [k, v] of Object.entries(opts.query)) {
36
+ if (v !== undefined)
37
+ url.searchParams.set(k, String(v));
38
+ }
39
+ }
40
+ const res = await fetch(url.toString(), {
41
+ method,
42
+ headers: {
43
+ Authorization: `Bearer ${this.apiKey}`,
44
+ "Content-Type": "application/json",
45
+ },
46
+ body: opts?.body ? JSON.stringify(opts.body) : undefined,
47
+ });
48
+ if (res.status === 204)
49
+ return undefined;
50
+ const data = await res.json().catch(() => null);
51
+ if (!res.ok) {
52
+ const err = data;
53
+ throw new SaaSignalError(res.status, err?.code ?? err?.error ?? "unknown", err?.message ?? `HTTP ${res.status}`);
54
+ }
55
+ return data;
56
+ }
57
+ }
58
+ // ── KV ──────────────────────────────────────────────────────────────────────
59
+ class KvNamespace {
60
+ client;
61
+ constructor(client) {
62
+ this.client = client;
63
+ }
64
+ async get(key) {
65
+ try {
66
+ return await this.client.request("GET", `/kv/${encodeURIComponent(key)}`);
67
+ }
68
+ catch (e) {
69
+ if (e instanceof SaaSignalError && e.status === 404)
70
+ return null;
71
+ throw e;
72
+ }
73
+ }
74
+ async set(key, value, opts) {
75
+ return this.client.request("PUT", `/kv/${encodeURIComponent(key)}`, {
76
+ body: { value, ...opts },
77
+ });
78
+ }
79
+ async delete(key) {
80
+ await this.client.request("DELETE", `/kv/${encodeURIComponent(key)}`);
81
+ }
82
+ async increment(key, delta = 1, ttl) {
83
+ return this.client.request("POST", `/kv/${encodeURIComponent(key)}/increment`, {
84
+ body: { delta, ttl },
85
+ });
86
+ }
87
+ async scan(opts) {
88
+ return this.client.request("GET", "/kv", { query: opts });
89
+ }
90
+ async batch(ops) {
91
+ return this.client.request("POST", "/kv", { body: { ops } });
92
+ }
93
+ }
94
+ // ── Channels ────────────────────────────────────────────────────────────────
95
+ class ChannelsNamespace {
96
+ client;
97
+ constructor(client) {
98
+ this.client = client;
99
+ }
100
+ async publish(channel, event, data) {
101
+ return this.client.request("POST", `/channels/${encodeURIComponent(channel)}/publish`, {
102
+ body: { event, data },
103
+ });
104
+ }
105
+ async batchPublish(messages) {
106
+ return this.client.request("POST", "/channels/publish", { body: { messages } });
107
+ }
108
+ async presence(channel) {
109
+ return this.client.request("GET", `/channels/${encodeURIComponent(channel)}/presence`);
110
+ }
111
+ async history(channel, opts) {
112
+ return this.client.request("GET", `/channels/${encodeURIComponent(channel)}/history`, {
113
+ query: opts,
114
+ });
115
+ }
116
+ }
117
+ // ── Jobs ────────────────────────────────────────────────────────────────────
118
+ class JobsNamespace {
119
+ client;
120
+ constructor(client) {
121
+ this.client = client;
122
+ }
123
+ async create(input) {
124
+ return this.client.request("POST", "/jobs", { body: input });
125
+ }
126
+ async list(opts) {
127
+ return this.client.request("GET", "/jobs", { query: opts });
128
+ }
129
+ async get(jobId) {
130
+ try {
131
+ return await this.client.request("GET", `/jobs/${jobId}`);
132
+ }
133
+ catch (e) {
134
+ if (e instanceof SaaSignalError && e.status === 404)
135
+ return null;
136
+ throw e;
137
+ }
138
+ }
139
+ async update(jobId, body) {
140
+ return this.client.request("PATCH", `/jobs/${jobId}`, { body });
141
+ }
142
+ async cancel(jobId) {
143
+ return this.client.request("DELETE", `/jobs/${jobId}`);
144
+ }
145
+ async batchCreate(jobs) {
146
+ return this.client.request("POST", "/jobs/batch", { body: { jobs } });
147
+ }
148
+ async claim(queue, opts) {
149
+ const result = await this.client.request("POST", "/jobs/claim", {
150
+ body: { queue, ...opts },
151
+ });
152
+ return Array.isArray(result) ? result : result.jobs;
153
+ }
154
+ async ack(jobId, body) {
155
+ return this.client.request("POST", `/jobs/${jobId}/ack`, { body });
156
+ }
157
+ async trigger(jobId) {
158
+ return this.client.request("POST", `/jobs/${jobId}/trigger`);
159
+ }
160
+ async retry(jobId) {
161
+ return this.client.request("POST", `/jobs/${jobId}/retry`);
162
+ }
163
+ async runs(jobId, opts) {
164
+ return this.client.request("GET", `/jobs/${jobId}/runs`, { query: opts });
165
+ }
166
+ }
167
+ // ── Billing ─────────────────────────────────────────────────────────────────
168
+ class BillingNamespace {
169
+ client;
170
+ constructor(client) {
171
+ this.client = client;
172
+ }
173
+ async packages() {
174
+ const result = await this.client.request("GET", "/billing/packages");
175
+ return Array.isArray(result) ? result : result.packages;
176
+ }
177
+ async usage(orgId) {
178
+ return this.client.request("GET", "/billing/usage", { query: { org_id: orgId } });
179
+ }
180
+ async tokenBalance(orgId) {
181
+ return this.client.request("GET", "/billing/tokens/balance", { query: { org_id: orgId } });
182
+ }
183
+ async topupBundles() {
184
+ const result = await this.client.request("GET", "/billing/topup-bundles");
185
+ return Array.isArray(result) ? result : result.bundles;
186
+ }
187
+ async tokenUsage(orgId, opts) {
188
+ return this.client.request("GET", "/billing/tokens/usage", {
189
+ query: { org_id: orgId, ...opts },
190
+ });
191
+ }
192
+ }
193
+ // ── Orgs (Platform) ─────────────────────────────────────────────────────────
194
+ class OrgsNamespace {
195
+ client;
196
+ constructor(client) {
197
+ this.client = client;
198
+ }
199
+ async list() {
200
+ return this.client.request("GET", "/orgs");
201
+ }
202
+ async create(body) {
203
+ return this.client.request("POST", "/orgs", { body });
204
+ }
205
+ async get(orgId) {
206
+ return this.client.request("GET", `/orgs/${orgId}`);
207
+ }
208
+ async update(orgId, body) {
209
+ return this.client.request("PATCH", `/orgs/${orgId}`, { body });
210
+ }
211
+ async delete(orgId) {
212
+ await this.client.request("DELETE", `/orgs/${orgId}`);
213
+ }
214
+ async members(orgId) {
215
+ return this.client.request("GET", `/orgs/${orgId}/members`);
216
+ }
217
+ async invite(orgId, body) {
218
+ return this.client.request("POST", `/orgs/${orgId}/members/invite`, { body });
219
+ }
220
+ async removeMember(orgId, userId) {
221
+ await this.client.request("DELETE", `/orgs/${orgId}/members/${userId}`);
222
+ }
223
+ async listProjects(orgId) {
224
+ return this.client.request("GET", `/orgs/${orgId}/projects`);
225
+ }
226
+ async createProject(orgId, body) {
227
+ return this.client.request("POST", `/orgs/${orgId}/projects`, { body });
228
+ }
229
+ async getProject(orgId, projectId) {
230
+ return this.client.request("GET", `/orgs/${orgId}/projects/${projectId}`);
231
+ }
232
+ async deleteProject(orgId, projectId) {
233
+ await this.client.request("DELETE", `/orgs/${orgId}/projects/${projectId}`);
234
+ }
235
+ async listApiKeys(orgId, projectId) {
236
+ return this.client.request("GET", `/orgs/${orgId}/projects/${projectId}/api-keys`);
237
+ }
238
+ async createApiKey(orgId, projectId, body) {
239
+ return this.client.request("POST", `/orgs/${orgId}/projects/${projectId}/api-keys`, { body });
240
+ }
241
+ async revokeApiKey(orgId, projectId, keyId) {
242
+ await this.client.request("DELETE", `/orgs/${orgId}/projects/${projectId}/api-keys/${keyId}`);
243
+ }
244
+ }
245
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { SaaSignalClient, SaaSignalError, type ClientOptions } from "./client.js";
2
+ export type * from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACjF,mBAAmB,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { SaaSignalClient, SaaSignalError } from "./client.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,178 @@
1
+ export interface KvEntry {
2
+ key: string;
3
+ value: unknown;
4
+ expires_at: string | null;
5
+ }
6
+ export interface KvScanResult {
7
+ keys: string[];
8
+ next_cursor: string | null;
9
+ }
10
+ export interface KvBatchOp {
11
+ op: "get" | "set" | "delete";
12
+ key: string;
13
+ value?: unknown;
14
+ ttl?: number;
15
+ }
16
+ export interface KvBatchResult {
17
+ key: string;
18
+ value: unknown;
19
+ status: string;
20
+ }
21
+ export interface ChannelPublishResult {
22
+ channel: string;
23
+ event_id: string;
24
+ delivered: number;
25
+ }
26
+ export interface PresenceEntry {
27
+ client_id: string;
28
+ user_id?: string;
29
+ connected_at: string;
30
+ data?: unknown;
31
+ }
32
+ export interface ChannelPresenceResult {
33
+ channel: string;
34
+ connections: PresenceEntry[];
35
+ count: number;
36
+ }
37
+ export interface HistoryEvent {
38
+ id: string;
39
+ event: string;
40
+ data: unknown;
41
+ timestamp: string;
42
+ }
43
+ export interface ChannelHistoryResult {
44
+ channel: string;
45
+ events: HistoryEvent[];
46
+ }
47
+ export interface JobTrigger {
48
+ type: "immediate" | "delayed" | "scheduled" | "queue" | "pull";
49
+ queue?: string;
50
+ schedule?: string;
51
+ timezone?: string;
52
+ delay_seconds?: number;
53
+ }
54
+ export interface Job {
55
+ id: string;
56
+ name: string;
57
+ trigger: JobTrigger;
58
+ handler: string | null;
59
+ payload: unknown;
60
+ result: unknown;
61
+ status: string;
62
+ enabled: boolean;
63
+ priority: number;
64
+ attempt: number;
65
+ max_attempts: number;
66
+ timeout: number;
67
+ idempotency_key: string | null;
68
+ error: string | null;
69
+ created_at: string;
70
+ run_at: string | null;
71
+ next_run_at: string | null;
72
+ last_run_at: string | null;
73
+ claimed_until: string | null;
74
+ completed_at: string | null;
75
+ }
76
+ export interface JobListResult {
77
+ jobs: Job[];
78
+ next_cursor: string | null;
79
+ }
80
+ export interface JobRun {
81
+ id: string;
82
+ job_id: string;
83
+ scheduled_at: string | null;
84
+ started_at: string | null;
85
+ completed_at: string | null;
86
+ status: string;
87
+ duration_ms: number | null;
88
+ handler_status: number | null;
89
+ error: string | null;
90
+ }
91
+ export interface JobRunsResult {
92
+ runs: JobRun[];
93
+ next_cursor: string | null;
94
+ }
95
+ export interface JobCreateInput {
96
+ name: string;
97
+ trigger: JobTrigger;
98
+ payload?: unknown;
99
+ handler?: string;
100
+ max_attempts?: number;
101
+ backoff?: "fixed" | "linear" | "exponential";
102
+ timeout?: number;
103
+ priority?: number;
104
+ callback_url?: string;
105
+ idempotency_key?: string;
106
+ enabled?: boolean;
107
+ }
108
+ export interface Package {
109
+ id: string;
110
+ name: string;
111
+ description: string;
112
+ price_monthly: number;
113
+ currency: string;
114
+ tokens_monthly: number;
115
+ rate_limits: {
116
+ requests_per_second: number;
117
+ max_channel_subscriptions: number;
118
+ };
119
+ }
120
+ export interface TokenBalance {
121
+ org_id: string;
122
+ included_tokens_remaining: number;
123
+ topup_tokens_balance: number;
124
+ total_balance: number;
125
+ }
126
+ export interface TopupBundle {
127
+ id: string;
128
+ tokens: number;
129
+ price: number;
130
+ currency: string;
131
+ }
132
+ export interface UsageSeries {
133
+ period_start: string;
134
+ total: number;
135
+ by_primitive: Record<string, number>;
136
+ }
137
+ export interface TokenUsageResult {
138
+ org_id: string;
139
+ granularity: string;
140
+ series: UsageSeries[];
141
+ }
142
+ export interface ApiError {
143
+ code: string;
144
+ message: string;
145
+ }
146
+ export interface Org {
147
+ id: string;
148
+ name: string;
149
+ slug: string;
150
+ stripeCustomerId: string | null;
151
+ createdAt: string;
152
+ }
153
+ export interface OrgMember {
154
+ user_id: string;
155
+ email: string;
156
+ name: string | null;
157
+ role: string;
158
+ joined_at: string;
159
+ }
160
+ export interface Project {
161
+ id: string;
162
+ name: string;
163
+ region: string | null;
164
+ createdAt: string;
165
+ }
166
+ export interface ApiKey {
167
+ id: string;
168
+ name: string;
169
+ prefix: string;
170
+ scopes: string[];
171
+ created_at: string;
172
+ expires_at: string | null;
173
+ last_used_at: string | null;
174
+ }
175
+ export interface ApiKeyCreated extends ApiKey {
176
+ key: string;
177
+ }
178
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ── KV ──────────────────────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+EAA+E"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "saasignal",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for the SaaSignal API — KV, Channels, and Jobs on Cloudflare",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "saasignal": "dist/cli.js"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "prepublishOnly": "tsc"
23
+ },
24
+ "keywords": [
25
+ "saasignal",
26
+ "kv",
27
+ "channels",
28
+ "jobs",
29
+ "cloudflare",
30
+ "serverless"
31
+ ],
32
+ "license": "MIT",
33
+ "devDependencies": {
34
+ "@types/node": "^25.3.4",
35
+ "typescript": "^5.9.3"
36
+ }
37
+ }