photon-msg 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +275 -2
- package/dist/args.d.ts +63 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +68 -0
- package/dist/args.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +163 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +68 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/attachments.d.ts +25 -0
- package/dist/commands/attachments.d.ts.map +1 -0
- package/dist/commands/attachments.js +78 -0
- package/dist/commands/attachments.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +54 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/line.d.ts +51 -0
- package/dist/commands/line.d.ts.map +1 -0
- package/dist/commands/line.js +117 -0
- package/dist/commands/line.js.map +1 -0
- package/dist/commands/messages.d.ts +82 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +163 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/misc.d.ts +33 -0
- package/dist/commands/misc.d.ts.map +1 -0
- package/dist/commands/misc.js +61 -0
- package/dist/commands/misc.js.map +1 -0
- package/dist/commands/send.d.ts +107 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +104 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/spaces.d.ts +56 -0
- package/dist/commands/spaces.d.ts.map +1 -0
- package/dist/commands/spaces.js +118 -0
- package/dist/commands/spaces.js.map +1 -0
- package/dist/commands/users.d.ts +34 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +82 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/content.d.ts +33 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +287 -0
- package/dist/content.js.map +1 -0
- package/dist/errors.d.ts +62 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +95 -0
- package/dist/errors.js.map +1 -0
- package/dist/help.d.ts +8 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +177 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +35 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +121 -0
- package/dist/output.js.map +1 -0
- package/dist/target.d.ts +34 -0
- package/dist/target.d.ts.map +1 -0
- package/dist/target.js +75 -0
- package/dist/target.js.map +1 -0
- package/dist/types.d.ts +200 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/upload.d.ts +33 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +119 -0
- package/dist/upload.js.map +1 -0
- package/package.json +49 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spaces` — conversations. `create` is idempotent: it reuses an exact match.
|
|
3
|
+
*/
|
|
4
|
+
import { handleOf, nextPageToken, pageItems } from "../client.js";
|
|
5
|
+
import { formatTime } from "../output.js";
|
|
6
|
+
import { usageError } from "../errors.js";
|
|
7
|
+
import { resolveUser } from "../target.js";
|
|
8
|
+
export const list = {
|
|
9
|
+
options: {
|
|
10
|
+
platform: { type: "string" },
|
|
11
|
+
participant: { type: "string" },
|
|
12
|
+
"participant-handle": { type: "string" },
|
|
13
|
+
order: { type: "string" },
|
|
14
|
+
"order-by": { type: "string" },
|
|
15
|
+
"created-since": { type: "string" },
|
|
16
|
+
"created-before": { type: "string" },
|
|
17
|
+
"page-size": { type: "string" },
|
|
18
|
+
"page-token": { type: "string" },
|
|
19
|
+
},
|
|
20
|
+
async run({ client, projectId, flags, out }) {
|
|
21
|
+
const query = {};
|
|
22
|
+
if (flags.platform)
|
|
23
|
+
query.platform = flags.platform;
|
|
24
|
+
if (typeof flags.participant === "string")
|
|
25
|
+
query.participantId = flags.participant;
|
|
26
|
+
if (flags["participant-handle"])
|
|
27
|
+
query.participantHandle = flags["participant-handle"];
|
|
28
|
+
if (flags.order)
|
|
29
|
+
query.order = flags.order;
|
|
30
|
+
if (flags["order-by"])
|
|
31
|
+
query.orderBy = flags["order-by"];
|
|
32
|
+
if (flags["created-since"])
|
|
33
|
+
query.createdSince = flags["created-since"];
|
|
34
|
+
if (flags["created-before"])
|
|
35
|
+
query.createdBefore = flags["created-before"];
|
|
36
|
+
if (flags["page-size"])
|
|
37
|
+
query.pageSize = Number(flags["page-size"]);
|
|
38
|
+
if (flags["page-token"])
|
|
39
|
+
query.pageToken = flags["page-token"];
|
|
40
|
+
const page = await client.projects.listSpaces({ path: { id: projectId }, query });
|
|
41
|
+
const items = pageItems(page);
|
|
42
|
+
const columns = [
|
|
43
|
+
{ header: "ID", value: (space) => space.id },
|
|
44
|
+
{ header: "PLATFORM", value: (space) => space.platform },
|
|
45
|
+
{ header: "KIND", value: (space) => space.kind },
|
|
46
|
+
{ header: "NAME", value: (space) => space.title ?? space.name ?? "" },
|
|
47
|
+
{ header: "CREATED", value: (space) => formatTime(space.createdAt) },
|
|
48
|
+
];
|
|
49
|
+
out.data({ items, count: items.length, nextPageToken: nextPageToken(page) ?? null });
|
|
50
|
+
out.table(items, columns);
|
|
51
|
+
if (!flags.quiet)
|
|
52
|
+
out.info(`${items.length} space(s)`);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export const get = {
|
|
56
|
+
options: {},
|
|
57
|
+
async run({ client, projectId, positionals, out }) {
|
|
58
|
+
const spaceId = positionals[0];
|
|
59
|
+
if (!spaceId)
|
|
60
|
+
throw usageError("Usage: photon-msg spaces get <spaceId>");
|
|
61
|
+
const space = (await client.projects.getSpace({
|
|
62
|
+
path: { id: projectId, spaceId },
|
|
63
|
+
}));
|
|
64
|
+
out.data(space);
|
|
65
|
+
out.heading(`space ${space.id}`);
|
|
66
|
+
out.keyValue([
|
|
67
|
+
["platform", space.platform],
|
|
68
|
+
["kind", space.kind],
|
|
69
|
+
["title", space.title ?? space.name ?? ""],
|
|
70
|
+
["created", formatTime(space.createdAt)],
|
|
71
|
+
]);
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
export const create = {
|
|
75
|
+
options: {
|
|
76
|
+
platform: { type: "string" },
|
|
77
|
+
participant: { type: "string", multiple: true },
|
|
78
|
+
"idempotency-key": { type: "string" },
|
|
79
|
+
},
|
|
80
|
+
async run({ client, projectId, flags, out, dryRun }) {
|
|
81
|
+
const platform = flags.platform ?? "imessage";
|
|
82
|
+
const inputs = Array.isArray(flags.participant)
|
|
83
|
+
? flags.participant
|
|
84
|
+
: flags.participant
|
|
85
|
+
? [flags.participant]
|
|
86
|
+
: [];
|
|
87
|
+
if (inputs.length < 1) {
|
|
88
|
+
throw usageError("Pass at least one --participant <handle|userId>.");
|
|
89
|
+
}
|
|
90
|
+
if (dryRun) {
|
|
91
|
+
out.data({ dryRun: true, platform, participants: inputs });
|
|
92
|
+
out.line(`would create a ${platform} space with ${inputs.length} participant(s)`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const resolved = await Promise.all(inputs.map((input) => resolveUser({ client, projectId, platform, input })));
|
|
96
|
+
const participantIds = resolved.map((user) => String(user.id));
|
|
97
|
+
const space = (await client.projects.createOrGetSpace({
|
|
98
|
+
path: { id: projectId },
|
|
99
|
+
headers: {
|
|
100
|
+
"idempotency-key": flags["idempotency-key"] ?? `photon-msg:space:${participantIds.join(":")}`,
|
|
101
|
+
},
|
|
102
|
+
body: { platform, participantIds },
|
|
103
|
+
}));
|
|
104
|
+
out.data({
|
|
105
|
+
spaceId: space.id,
|
|
106
|
+
kind: space.kind,
|
|
107
|
+
platform: space.platform,
|
|
108
|
+
participants: resolved.map((user) => ({
|
|
109
|
+
id: user.id,
|
|
110
|
+
handle: handleOf(user),
|
|
111
|
+
kind: user.kind,
|
|
112
|
+
})),
|
|
113
|
+
});
|
|
114
|
+
if (!flags.quiet)
|
|
115
|
+
out.success(`space ${space.id} (${space.kind ?? "?"})`);
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=spaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spaces.js","sourceRoot":"","sources":["../../src/commands/spaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `users` — the people and agents inside a project.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandContext } from "../types.js";
|
|
5
|
+
export declare const list: {
|
|
6
|
+
options: {
|
|
7
|
+
readonly platform: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
};
|
|
10
|
+
readonly "page-size": {
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
};
|
|
13
|
+
readonly "page-token": {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
run({ client, projectId, flags, out }: CommandContext): Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
export declare const get: {
|
|
20
|
+
options: {};
|
|
21
|
+
run({ client, projectId, positionals, out }: CommandContext): Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
export declare const ensure: {
|
|
24
|
+
options: {
|
|
25
|
+
readonly handle: {
|
|
26
|
+
readonly type: "string";
|
|
27
|
+
};
|
|
28
|
+
readonly platform: {
|
|
29
|
+
readonly type: "string";
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
run({ client, projectId, flags, positionals, out, dryRun }: CommandContext): Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,aAAa,CAAC;AAE9D,eAAO,MAAM,IAAI;;;;;;;;;;;;2CAO8B,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB5E,CAAC;AAEF,eAAO,MAAM,GAAG;;iDAGqC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBlF,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;gEAMiD,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBjG,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `users` — the people and agents inside a project.
|
|
3
|
+
*/
|
|
4
|
+
import { handleOf, nextPageToken, pageItems } from "../client.js";
|
|
5
|
+
import { formatTime } from "../output.js";
|
|
6
|
+
import { usageError } from "../errors.js";
|
|
7
|
+
import { normalizeHandle } from "../target.js";
|
|
8
|
+
export const list = {
|
|
9
|
+
options: {
|
|
10
|
+
platform: { type: "string" },
|
|
11
|
+
"page-size": { type: "string" },
|
|
12
|
+
"page-token": { type: "string" },
|
|
13
|
+
},
|
|
14
|
+
async run({ client, projectId, flags, out }) {
|
|
15
|
+
const query = {};
|
|
16
|
+
if (flags.platform)
|
|
17
|
+
query.platform = flags.platform;
|
|
18
|
+
if (flags["page-size"])
|
|
19
|
+
query.pageSize = Number(flags["page-size"]);
|
|
20
|
+
if (flags["page-token"])
|
|
21
|
+
query.pageToken = flags["page-token"];
|
|
22
|
+
const page = await client.projects.listUsers({ path: { id: projectId }, query });
|
|
23
|
+
const items = pageItems(page);
|
|
24
|
+
const columns = [
|
|
25
|
+
{ header: "ID", value: (user) => user.id },
|
|
26
|
+
{ header: "PLATFORM", value: (user) => user.platform },
|
|
27
|
+
{ header: "KIND", value: (user) => user.kind },
|
|
28
|
+
{ header: "TYPE", value: (user) => user.type ?? "" },
|
|
29
|
+
{ header: "HANDLE", value: (user) => handleOf(user) },
|
|
30
|
+
{ header: "CREATED", value: (user) => formatTime(user.createdAt) },
|
|
31
|
+
];
|
|
32
|
+
out.data({ items, count: items.length, nextPageToken: nextPageToken(page) ?? null });
|
|
33
|
+
out.table(items, columns);
|
|
34
|
+
if (!flags.quiet)
|
|
35
|
+
out.info(`${items.length} user(s)`);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export const get = {
|
|
39
|
+
options: {},
|
|
40
|
+
async run({ client, projectId, positionals, out }) {
|
|
41
|
+
const userId = positionals[0];
|
|
42
|
+
if (!userId)
|
|
43
|
+
throw usageError("Usage: photon-msg users get <userId>");
|
|
44
|
+
const user = (await client.projects.getUser({
|
|
45
|
+
path: { id: projectId, userId },
|
|
46
|
+
}));
|
|
47
|
+
out.data(user);
|
|
48
|
+
out.heading(`user ${user.id}`);
|
|
49
|
+
out.keyValue([
|
|
50
|
+
["platform", user.platform],
|
|
51
|
+
["kind", user.kind],
|
|
52
|
+
["type", user.type ?? ""],
|
|
53
|
+
["handle", handleOf(user)],
|
|
54
|
+
["created", formatTime(user.createdAt)],
|
|
55
|
+
]);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
export const ensure = {
|
|
59
|
+
options: {
|
|
60
|
+
handle: { type: "string" },
|
|
61
|
+
platform: { type: "string" },
|
|
62
|
+
},
|
|
63
|
+
async run({ client, projectId, flags, positionals, out, dryRun }) {
|
|
64
|
+
const raw = flags.handle ?? positionals[0];
|
|
65
|
+
if (!raw)
|
|
66
|
+
throw usageError("Usage: photon-msg users ensure --handle <handle> [--platform imessage]");
|
|
67
|
+
const platform = flags.platform ?? (raw.includes("@") ? "email" : "imessage");
|
|
68
|
+
const handle = normalizeHandle(raw);
|
|
69
|
+
if (dryRun) {
|
|
70
|
+
out.data({ dryRun: true, platform, handle });
|
|
71
|
+
out.line(`would resolve ${handle} on ${platform}`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const user = (await client.projects.createOrGetUser({
|
|
75
|
+
path: { id: projectId },
|
|
76
|
+
body: { handle, platform },
|
|
77
|
+
}));
|
|
78
|
+
out.data(user);
|
|
79
|
+
out.success(`${user.id} ${handleOf(user)} (${user.kind}, ${user.platform})`);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration resolution: flags beat environment variables, which beat a
|
|
3
|
+
* config file. Nothing here reads secrets from the network.
|
|
4
|
+
*/
|
|
5
|
+
import type { Flags } from "./types.js";
|
|
6
|
+
export declare const ENV: {
|
|
7
|
+
readonly apiKey: "PHOTON_API_KEY";
|
|
8
|
+
readonly projectId: "PHOTON_PROJECT_ID";
|
|
9
|
+
readonly baseUrl: "PHOTON_API_BASE_URL";
|
|
10
|
+
readonly agentHandle: "PHOTON_AGENT_HANDLE";
|
|
11
|
+
};
|
|
12
|
+
export interface Config {
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
projectId?: string;
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
agentHandle?: string;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Config file shape, all fields optional. */
|
|
20
|
+
export interface ConfigFile {
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
projectId?: string;
|
|
23
|
+
baseUrl?: string;
|
|
24
|
+
agentHandle?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const defaultConfigPath: () => string;
|
|
27
|
+
/**
|
|
28
|
+
* Reads the config file when present. A missing file is not an error; malformed
|
|
29
|
+
* JSON is.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readConfigFile(path?: string): ConfigFile;
|
|
32
|
+
export interface ResolveConfigInput {
|
|
33
|
+
flags: Flags;
|
|
34
|
+
env?: NodeJS.ProcessEnv;
|
|
35
|
+
file?: ConfigFile;
|
|
36
|
+
}
|
|
37
|
+
export declare function resolveConfig({ flags, env, file }: ResolveConfigInput): Config;
|
|
38
|
+
/** A config with the credentials guaranteed present. */
|
|
39
|
+
export interface Credentials extends Config {
|
|
40
|
+
apiKey: string;
|
|
41
|
+
projectId: string;
|
|
42
|
+
}
|
|
43
|
+
/** Throws a usage error when credentials are missing. */
|
|
44
|
+
export declare function requireCredentials(config: Config): Credentials;
|
|
45
|
+
/** Redacts a secret for logs and JSON output. */
|
|
46
|
+
export declare const redact: (value: string | undefined) => string;
|
|
47
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,GAAG;;;;;CAKN,CAAC;AAEX,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,iBAAiB,QAAO,MACoB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAA4B,GAAG,UAAU,CAa7E;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,GAAiB,EAAE,IAAuB,EAAE,EAAE,kBAAkB,GAAG,MAAM,CA4B/G;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAW9D;AAED,iDAAiD;AACjD,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,MAC8D,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration resolution: flags beat environment variables, which beat a
|
|
3
|
+
* config file. Nothing here reads secrets from the network.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { usageError } from "./errors.js";
|
|
9
|
+
export const ENV = {
|
|
10
|
+
apiKey: "PHOTON_API_KEY",
|
|
11
|
+
projectId: "PHOTON_PROJECT_ID",
|
|
12
|
+
baseUrl: "PHOTON_API_BASE_URL",
|
|
13
|
+
agentHandle: "PHOTON_AGENT_HANDLE",
|
|
14
|
+
};
|
|
15
|
+
export const defaultConfigPath = () => join(homedir(), ".config", "photon-msg", "config.json");
|
|
16
|
+
/**
|
|
17
|
+
* Reads the config file when present. A missing file is not an error; malformed
|
|
18
|
+
* JSON is.
|
|
19
|
+
*/
|
|
20
|
+
export function readConfigFile(path = defaultConfigPath()) {
|
|
21
|
+
let raw;
|
|
22
|
+
try {
|
|
23
|
+
raw = readFileSync(path, "utf8");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(raw);
|
|
30
|
+
return typeof parsed === "object" && parsed !== null ? parsed : {};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
throw usageError(`Config file ${path} is not valid JSON: ${error.message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function resolveConfig({ flags, env = process.env, file = readConfigFile() }) {
|
|
37
|
+
const pick = (flagKey, envKey, fileKey) => {
|
|
38
|
+
const fromFlag = flagKey ? flags[flagKey] : undefined;
|
|
39
|
+
if (typeof fromFlag === "string" && fromFlag.length > 0)
|
|
40
|
+
return fromFlag;
|
|
41
|
+
if (envKey) {
|
|
42
|
+
const fromEnv = env[envKey];
|
|
43
|
+
if (typeof fromEnv === "string" && fromEnv.length > 0)
|
|
44
|
+
return fromEnv;
|
|
45
|
+
}
|
|
46
|
+
if (fileKey) {
|
|
47
|
+
const fromFile = file[fileKey];
|
|
48
|
+
if (typeof fromFile === "string" && fromFile.length > 0)
|
|
49
|
+
return fromFile;
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
const timeout = flags.timeout;
|
|
54
|
+
return {
|
|
55
|
+
apiKey: pick("api-key", ENV.apiKey, "apiKey"),
|
|
56
|
+
projectId: pick("project", ENV.projectId, "projectId"),
|
|
57
|
+
baseUrl: pick("base-url", ENV.baseUrl, "baseUrl"),
|
|
58
|
+
// --as is per-command; the default sender comes from env or the config file.
|
|
59
|
+
agentHandle: pick(undefined, ENV.agentHandle, "agentHandle"),
|
|
60
|
+
...(timeout !== undefined && Number.isFinite(Number(timeout)) ? { timeoutMs: Number(timeout) } : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Throws a usage error when credentials are missing. */
|
|
64
|
+
export function requireCredentials(config) {
|
|
65
|
+
const missing = [];
|
|
66
|
+
if (!config.apiKey)
|
|
67
|
+
missing.push(`an API key (--api-key, ${ENV.apiKey}, or config file)`);
|
|
68
|
+
if (!config.projectId)
|
|
69
|
+
missing.push(`a project ID (--project, ${ENV.projectId}, or config file)`);
|
|
70
|
+
if (missing.length > 0) {
|
|
71
|
+
throw usageError(`Missing ${missing.join(" and ")}.`, "Create a project key with: photon project api-key create --name cli --permission project:read --permission project:write");
|
|
72
|
+
}
|
|
73
|
+
return config;
|
|
74
|
+
}
|
|
75
|
+
/** Redacts a secret for logs and JSON output. */
|
|
76
|
+
export const redact = (value) => typeof value === "string" && value.length > 12 ? `${value.slice(0, 8)}…${value.slice(-4)}` : value ? "***" : "";
|
|
77
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns CLI flags into a Photon `SendContent` payload.
|
|
3
|
+
*
|
|
4
|
+
* The API takes one polymorphic `content` object, which is how edits, unsends,
|
|
5
|
+
* reactions, read receipts, typing indicators and poll votes travel: there is no
|
|
6
|
+
* separate endpoint per action. This module is the single source of truth for
|
|
7
|
+
* that mapping, and it stays pure by taking uploads and user lookups as injected
|
|
8
|
+
* dependencies.
|
|
9
|
+
*/
|
|
10
|
+
import type { SendContent } from "@photon-ai/api";
|
|
11
|
+
import type { BuiltMessage, Flags, Uploader, UserLookup } from "./types.js";
|
|
12
|
+
/** Every content mode the CLI can build. */
|
|
13
|
+
export declare const MODES: readonly ["text", "attachment", "voice", "reaction", "poll", "edit", "delete", "read", "typing", "participants", "group"];
|
|
14
|
+
export type ContentMode = (typeof MODES)[number];
|
|
15
|
+
/** Lists the content modes implied by the given flags. */
|
|
16
|
+
export declare function detectModes(flags: Flags): ContentMode[];
|
|
17
|
+
/** Reads text from a file, or stdin when the path is "-". */
|
|
18
|
+
export declare function readTextFile(path: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Cheap, side-effect-free validation of content flags, so the CLI can refuse a
|
|
21
|
+
* contradictory command before it asks for credentials or touches the network.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateContentFlags(flags: Flags): ContentMode[];
|
|
24
|
+
export interface BuildMessageInput {
|
|
25
|
+
flags: Flags;
|
|
26
|
+
upload: Uploader;
|
|
27
|
+
getUsers: UserLookup;
|
|
28
|
+
}
|
|
29
|
+
/** Builds the send payload from flags. */
|
|
30
|
+
export declare function buildMessage({ flags, upload, getUsers }: BuildMessageInput): Promise<BuiltMessage>;
|
|
31
|
+
/** Short human description of a payload, used by --dry-run and logs. */
|
|
32
|
+
export declare function describeContent(content: SendContent | undefined): string;
|
|
33
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAEV,WAAW,EAaZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E,4CAA4C;AAC5C,eAAO,MAAM,KAAK,2HAYR,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAOjD,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,CAmBvD;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD;AAaD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,CAchE;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,0CAA0C;AAC1C,wBAAsB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6KxG;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CA4BxE"}
|