@relaymessenger/sdk 0.3.7-staging.8 → 0.4.0-staging.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -5
- package/dist/client.d.ts +34 -83
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +60 -248
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/login-button/index.d.ts +29 -0
- package/dist/login-button/index.d.ts.map +1 -0
- package/dist/login-button/index.js +58 -0
- package/dist/login-button/index.js.map +1 -0
- package/dist/login.d.ts +49 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +47 -0
- package/dist/login.js.map +1 -0
- package/dist/operations.d.ts +18 -18
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +18 -22
- package/dist/operations.js.map +1 -1
- package/dist/selection.d.ts +4 -5
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +111 -36
- package/dist/selection.js.map +1 -1
- package/dist/types.d.ts +242 -220
- package/dist/types.d.ts.map +1 -1
- package/package.json +14 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Relay's "Connect Relay" button for React, the twin of the hosted script
|
|
4
|
+
* (https://auth.relayapp.im/js/relay-login.js). Both are Relay's own shape,
|
|
5
|
+
* Telegram's "Connect Telegram" pill in Relay blue. A click starts a
|
|
6
|
+
* standard OpenID Connect authorization code flow with PKCE (RFC 7636) and
|
|
7
|
+
* a nonce, and keeps `state`, `nonce` and `code_verifier` for ten minutes in
|
|
8
|
+
* a first-party cookie named `relay_login` (base64url JSON). Your callback
|
|
9
|
+
* reads that cookie and exchanges the code with any OpenID Connect library,
|
|
10
|
+
* with your client secret, checking the state and the nonce.
|
|
11
|
+
*/
|
|
12
|
+
/** Relay's authorization server. Staging is `https://auth.staging.relayapp.im`. */
|
|
13
|
+
export const RELAY_AUTH_ORIGIN = "https://auth.relayapp.im";
|
|
14
|
+
const BLUE = "#0B75FF";
|
|
15
|
+
const base64url = (bytes) => btoa(String.fromCharCode(...bytes)).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/u, "");
|
|
16
|
+
const random = (size) => base64url(crypto.getRandomValues(new Uint8Array(size)));
|
|
17
|
+
/** Starts the login: saves the cookie and opens Relay. */
|
|
18
|
+
export async function startRelayLogin(options) {
|
|
19
|
+
const state = random(24);
|
|
20
|
+
const nonce = random(24);
|
|
21
|
+
const verifier = random(32);
|
|
22
|
+
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(verifier)));
|
|
23
|
+
const saved = base64url(new TextEncoder().encode(JSON.stringify({ state, nonce, code_verifier: verifier })));
|
|
24
|
+
document.cookie = `relay_login=${saved}; Path=/; Max-Age=600; SameSite=Lax${location.protocol === "https:" ? "; Secure" : ""}`;
|
|
25
|
+
const query = new URLSearchParams({
|
|
26
|
+
response_type: "code",
|
|
27
|
+
client_id: options.clientId,
|
|
28
|
+
redirect_uri: options.redirectUri,
|
|
29
|
+
scope: options.scope ?? "openid profile",
|
|
30
|
+
state,
|
|
31
|
+
nonce,
|
|
32
|
+
code_challenge: base64url(digest),
|
|
33
|
+
code_challenge_method: "S256",
|
|
34
|
+
});
|
|
35
|
+
location.assign(`${options.authOrigin ?? RELAY_AUTH_ORIGIN}/api/auth/oauth2/authorize?${query.toString()}`);
|
|
36
|
+
}
|
|
37
|
+
const mark = createElement("svg", { viewBox: "0 0 1024 1024", width: 22, height: 22, "aria-hidden": true, style: { flex: "none" } }, createElement("path", {
|
|
38
|
+
d: "M512 185C701 185 854 314 854 475C854 656 695 827 523 827C493 827 467 824 446 815C369 861 302 883 284 865C268 848 300 773 317 720C246 665 210 582 210 484C210 319 344 185 512 185Z",
|
|
39
|
+
fill: "#fff",
|
|
40
|
+
}), createElement("path", {
|
|
41
|
+
d: "M372 514C372 470 408 434 452 434C496 434 532 470 532 514M600 514C600 470 636 434 680 434C724 434 760 470 760 514",
|
|
42
|
+
fill: "none", stroke: BLUE, strokeWidth: 48, strokeLinecap: "round",
|
|
43
|
+
}));
|
|
44
|
+
/** `<RelayLoginButton clientId="…" redirectUri="…" />`: the "Connect Relay" pill. */
|
|
45
|
+
export function RelayLoginButton({ clientId, redirectUri, scope, authOrigin, children, style, ...rest }) {
|
|
46
|
+
return createElement("button", {
|
|
47
|
+
type: "button",
|
|
48
|
+
...rest,
|
|
49
|
+
onClick: () => void startRelayLogin({ clientId, redirectUri, ...(scope ? { scope } : {}), ...(authOrigin ? { authOrigin } : {}) }),
|
|
50
|
+
style: {
|
|
51
|
+
display: "inline-flex", alignItems: "center", gap: 8, height: 40, padding: "0 18px 0 14px",
|
|
52
|
+
border: 0, borderRadius: 20, background: BLUE, color: "#fff", cursor: "pointer",
|
|
53
|
+
font: "600 15px/1 -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif",
|
|
54
|
+
...style,
|
|
55
|
+
},
|
|
56
|
+
}, mark, createElement("span", null, children ?? "Connect Relay"));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/login-button/index.ts"],"names":[],"mappings":"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"}
|
package/dist/login.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type JWTPayload } from "jose";
|
|
2
|
+
/**
|
|
3
|
+
* Log in with Relay: Relay is a standard OpenID Connect provider, so any
|
|
4
|
+
* OpenID Connect library works (openid-client, Auth.js, Passport). This is
|
|
5
|
+
* the one step a website that already holds an ID token needs: check its
|
|
6
|
+
* signature against Relay's published keys, its issuer, its audience (your
|
|
7
|
+
* client ID, which is your agent's ID) and its expiry. jose does the
|
|
8
|
+
* checking (RFC 7519, OpenID Connect Core 3.1.3.7).
|
|
9
|
+
*/
|
|
10
|
+
/** Relay's OpenID Connect issuer. Staging is `https://auth.staging.relayapp.im/api/auth`. */
|
|
11
|
+
export declare const RELAY_ISSUER = "https://auth.relayapp.im/api/auth";
|
|
12
|
+
/** The claims Relay puts in an ID token. `email` and `phone_number` only when the person shared them. */
|
|
13
|
+
export interface RelayIdTokenClaims extends JWTPayload {
|
|
14
|
+
/** The person's Relay user ID, stable for your client. */
|
|
15
|
+
sub: string;
|
|
16
|
+
/** Your client ID: your agent's ID. */
|
|
17
|
+
aud: string;
|
|
18
|
+
iss: string;
|
|
19
|
+
exp: number;
|
|
20
|
+
iat: number;
|
|
21
|
+
nonce?: string;
|
|
22
|
+
name?: string;
|
|
23
|
+
/** The person's Relay @handle, without the @. */
|
|
24
|
+
preferred_username?: string;
|
|
25
|
+
picture?: string;
|
|
26
|
+
email?: string;
|
|
27
|
+
email_verified?: boolean;
|
|
28
|
+
/** E.164, only with the `phone` scope and when the person shared it. */
|
|
29
|
+
phone_number?: string;
|
|
30
|
+
phone_number_verified?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface VerifyRelayIdTokenOptions {
|
|
33
|
+
/** Your client ID, which is your agent's ID. */
|
|
34
|
+
clientId: string;
|
|
35
|
+
/** Defaults to {@link RELAY_ISSUER}. */
|
|
36
|
+
issuer?: string;
|
|
37
|
+
/** The nonce your login request sent, when it sent one. */
|
|
38
|
+
nonce?: string;
|
|
39
|
+
/** Seconds of clock skew to allow on `exp` and `iat`. Defaults to 60. */
|
|
40
|
+
clockTolerance?: number;
|
|
41
|
+
/** For tests and runtimes without a global fetch. */
|
|
42
|
+
fetch?: typeof globalThis.fetch;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Verifies a Relay ID token and returns its claims. Throws when the
|
|
46
|
+
* signature, issuer, audience, expiry or nonce is wrong.
|
|
47
|
+
*/
|
|
48
|
+
export declare function verifyRelayIdToken(idToken: string, options: VerifyRelayIdTokenOptions): Promise<RelayIdTokenClaims>;
|
|
49
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAEnF;;;;;;;GAOG;AAEH,6FAA6F;AAC7F,eAAO,MAAM,YAAY,sCAAsC,CAAC;AAEhE,yGAAyG;AACzG,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAkBD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAc7B"}
|
package/dist/login.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createRemoteJWKSet, customFetch, jwtVerify } from "jose";
|
|
2
|
+
/**
|
|
3
|
+
* Log in with Relay: Relay is a standard OpenID Connect provider, so any
|
|
4
|
+
* OpenID Connect library works (openid-client, Auth.js, Passport). This is
|
|
5
|
+
* the one step a website that already holds an ID token needs: check its
|
|
6
|
+
* signature against Relay's published keys, its issuer, its audience (your
|
|
7
|
+
* client ID, which is your agent's ID) and its expiry. jose does the
|
|
8
|
+
* checking (RFC 7519, OpenID Connect Core 3.1.3.7).
|
|
9
|
+
*/
|
|
10
|
+
/** Relay's OpenID Connect issuer. Staging is `https://auth.staging.relayapp.im/api/auth`. */
|
|
11
|
+
export const RELAY_ISSUER = "https://auth.relayapp.im/api/auth";
|
|
12
|
+
const keySets = new Map();
|
|
13
|
+
const keysFor = async (issuer, fetcher) => {
|
|
14
|
+
const cached = keySets.get(issuer);
|
|
15
|
+
if (cached)
|
|
16
|
+
return cached;
|
|
17
|
+
const response = await fetcher(`${issuer}/.well-known/openid-configuration`);
|
|
18
|
+
if (!response.ok)
|
|
19
|
+
throw new Error(`Relay's OpenID configuration answered ${response.status}.`);
|
|
20
|
+
const discovery = await response.json();
|
|
21
|
+
if (discovery.issuer !== issuer || !discovery.jwks_uri) {
|
|
22
|
+
throw new Error("Relay's OpenID configuration does not match the issuer.");
|
|
23
|
+
}
|
|
24
|
+
const keys = createRemoteJWKSet(new URL(discovery.jwks_uri), { [customFetch]: fetcher });
|
|
25
|
+
keySets.set(issuer, keys);
|
|
26
|
+
return keys;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Verifies a Relay ID token and returns its claims. Throws when the
|
|
30
|
+
* signature, issuer, audience, expiry or nonce is wrong.
|
|
31
|
+
*/
|
|
32
|
+
export async function verifyRelayIdToken(idToken, options) {
|
|
33
|
+
const issuer = (options.issuer ?? RELAY_ISSUER).replace(/\/$/, "");
|
|
34
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
35
|
+
const { payload } = await jwtVerify(idToken, await keysFor(issuer, fetcher), {
|
|
36
|
+
issuer,
|
|
37
|
+
audience: options.clientId,
|
|
38
|
+
algorithms: ["RS256"],
|
|
39
|
+
clockTolerance: options.clockTolerance ?? 60,
|
|
40
|
+
requiredClaims: ["sub", "exp", "iat"],
|
|
41
|
+
});
|
|
42
|
+
if (options.nonce !== undefined && payload.nonce !== options.nonce) {
|
|
43
|
+
throw new Error("The ID token's nonce does not match the login request.");
|
|
44
|
+
}
|
|
45
|
+
return payload;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAmB,MAAM,MAAM,CAAC;AAEnF;;;;;;;GAOG;AAEH,6FAA6F;AAC7F,MAAM,CAAC,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAoChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;AAEzE,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,OAAgC,EAAE,EAAE;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,MAAM,mCAAmC,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;IAClF,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,OAAkC;IAElC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QAC3E,MAAM;QACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,CAAC,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;QAC5C,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACtC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAA6B,CAAC;AACvC,CAAC"}
|
package/dist/operations.d.ts
CHANGED
|
@@ -11,10 +11,6 @@ export declare const RELAY_V1_OPERATIONS: readonly [{
|
|
|
11
11
|
readonly method: "GET";
|
|
12
12
|
readonly path: "/v1/me";
|
|
13
13
|
readonly operationId: "getMe";
|
|
14
|
-
}, {
|
|
15
|
-
readonly method: "PATCH";
|
|
16
|
-
readonly path: "/v1/me";
|
|
17
|
-
readonly operationId: "updateAgentMe";
|
|
18
14
|
}, {
|
|
19
15
|
readonly method: "POST";
|
|
20
16
|
readonly path: "/v1/chats";
|
|
@@ -149,24 +145,24 @@ export declare const RELAY_V1_OPERATIONS: readonly [{
|
|
|
149
145
|
readonly operationId: "unblockHandle";
|
|
150
146
|
}, {
|
|
151
147
|
readonly method: "GET";
|
|
152
|
-
readonly path: "/v1/
|
|
153
|
-
readonly operationId: "
|
|
148
|
+
readonly path: "/v1/access";
|
|
149
|
+
readonly operationId: "listAgentAccess";
|
|
154
150
|
}, {
|
|
155
|
-
readonly method: "
|
|
156
|
-
readonly path: "/v1/
|
|
157
|
-
readonly operationId: "
|
|
151
|
+
readonly method: "GET";
|
|
152
|
+
readonly path: "/v1/oauth2_client";
|
|
153
|
+
readonly operationId: "getOAuth2Client";
|
|
158
154
|
}, {
|
|
159
155
|
readonly method: "POST";
|
|
160
|
-
readonly path: "/v1/
|
|
161
|
-
readonly operationId: "
|
|
156
|
+
readonly path: "/v1/oauth2_client";
|
|
157
|
+
readonly operationId: "createOAuth2Client";
|
|
162
158
|
}, {
|
|
163
|
-
readonly method: "
|
|
164
|
-
readonly path: "/v1/
|
|
165
|
-
readonly operationId: "
|
|
159
|
+
readonly method: "PATCH";
|
|
160
|
+
readonly path: "/v1/oauth2_client";
|
|
161
|
+
readonly operationId: "updateOAuth2Client";
|
|
166
162
|
}, {
|
|
167
|
-
readonly method: "
|
|
168
|
-
readonly path: "/v1/
|
|
169
|
-
readonly operationId: "
|
|
163
|
+
readonly method: "POST";
|
|
164
|
+
readonly path: "/v1/oauth2_client/reset_secret";
|
|
165
|
+
readonly operationId: "resetOAuth2ClientSecret";
|
|
170
166
|
}, {
|
|
171
167
|
readonly method: "PUT";
|
|
172
168
|
readonly path: "/v1/access/{handle}";
|
|
@@ -203,6 +199,10 @@ export declare const RELAY_V1_OPERATIONS: readonly [{
|
|
|
203
199
|
readonly method: "POST";
|
|
204
200
|
readonly path: "/v1/contacts/lookup";
|
|
205
201
|
readonly operationId: "lookupContact";
|
|
202
|
+
}, {
|
|
203
|
+
readonly method: "GET";
|
|
204
|
+
readonly path: "/v1/directory";
|
|
205
|
+
readonly operationId: "listDirectory";
|
|
206
206
|
}, {
|
|
207
207
|
readonly method: "GET";
|
|
208
208
|
readonly path: "/v1/contact_card";
|
|
@@ -232,5 +232,5 @@ export declare const RELAY_V1_OPERATIONS: readonly [{
|
|
|
232
232
|
readonly path: "/v1/calls/{callId}/end";
|
|
233
233
|
readonly operationId: "endCall";
|
|
234
234
|
}];
|
|
235
|
-
export declare const RELAY_WEBHOOK_EVENT_TYPES: readonly ["message.sent", "message.received", "message.read", "message.delivered", "message.failed", "reaction.added", "reaction.removed", "participant.added", "participant.removed", "chat.created", "chat.group_name_updated", "chat.group_icon_updated", "chat.typing_indicator.started", "chat.typing_indicator.stopped", "contact.added", "contact.removed", "call.created", "call.updated", "call.ended", "payment.succeeded", "payment.canceled", "payment.expired", "location.sharing.started", "location.sharing.stopped"
|
|
235
|
+
export declare const RELAY_WEBHOOK_EVENT_TYPES: readonly ["message.sent", "message.received", "message.read", "message.delivered", "message.failed", "reaction.added", "reaction.removed", "participant.added", "participant.removed", "chat.created", "chat.group_name_updated", "chat.group_icon_updated", "chat.typing_indicator.started", "chat.typing_indicator.stopped", "contact.added", "contact.removed", "call.created", "call.updated", "call.ended", "payment.succeeded", "payment.canceled", "payment.expired", "location.sharing.started", "location.sharing.stopped"];
|
|
236
236
|
//# sourceMappingURL=operations.d.ts.map
|
package/dist/operations.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8RgB,CAAC;AAEjD,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8RgB,CAAC;AAEjD,eAAO,MAAM,yBAAyB,sgBAyB5B,CAAC"}
|
package/dist/operations.js
CHANGED
|
@@ -9,11 +9,6 @@ export const RELAY_V1_OPERATIONS = [
|
|
|
9
9
|
"path": "/v1/me",
|
|
10
10
|
"operationId": "getMe"
|
|
11
11
|
},
|
|
12
|
-
{
|
|
13
|
-
"method": "PATCH",
|
|
14
|
-
"path": "/v1/me",
|
|
15
|
-
"operationId": "updateAgentMe"
|
|
16
|
-
},
|
|
17
12
|
{
|
|
18
13
|
"method": "POST",
|
|
19
14
|
"path": "/v1/chats",
|
|
@@ -181,28 +176,28 @@ export const RELAY_V1_OPERATIONS = [
|
|
|
181
176
|
},
|
|
182
177
|
{
|
|
183
178
|
"method": "GET",
|
|
184
|
-
"path": "/v1/
|
|
185
|
-
"operationId": "
|
|
179
|
+
"path": "/v1/access",
|
|
180
|
+
"operationId": "listAgentAccess"
|
|
186
181
|
},
|
|
187
182
|
{
|
|
188
|
-
"method": "
|
|
189
|
-
"path": "/v1/
|
|
190
|
-
"operationId": "
|
|
183
|
+
"method": "GET",
|
|
184
|
+
"path": "/v1/oauth2_client",
|
|
185
|
+
"operationId": "getOAuth2Client"
|
|
191
186
|
},
|
|
192
187
|
{
|
|
193
188
|
"method": "POST",
|
|
194
|
-
"path": "/v1/
|
|
195
|
-
"operationId": "
|
|
189
|
+
"path": "/v1/oauth2_client",
|
|
190
|
+
"operationId": "createOAuth2Client"
|
|
196
191
|
},
|
|
197
192
|
{
|
|
198
|
-
"method": "
|
|
199
|
-
"path": "/v1/
|
|
200
|
-
"operationId": "
|
|
193
|
+
"method": "PATCH",
|
|
194
|
+
"path": "/v1/oauth2_client",
|
|
195
|
+
"operationId": "updateOAuth2Client"
|
|
201
196
|
},
|
|
202
197
|
{
|
|
203
|
-
"method": "
|
|
204
|
-
"path": "/v1/
|
|
205
|
-
"operationId": "
|
|
198
|
+
"method": "POST",
|
|
199
|
+
"path": "/v1/oauth2_client/reset_secret",
|
|
200
|
+
"operationId": "resetOAuth2ClientSecret"
|
|
206
201
|
},
|
|
207
202
|
{
|
|
208
203
|
"method": "PUT",
|
|
@@ -249,6 +244,11 @@ export const RELAY_V1_OPERATIONS = [
|
|
|
249
244
|
"path": "/v1/contacts/lookup",
|
|
250
245
|
"operationId": "lookupContact"
|
|
251
246
|
},
|
|
247
|
+
{
|
|
248
|
+
"method": "GET",
|
|
249
|
+
"path": "/v1/directory",
|
|
250
|
+
"operationId": "listDirectory"
|
|
251
|
+
},
|
|
252
252
|
{
|
|
253
253
|
"method": "GET",
|
|
254
254
|
"path": "/v1/contact_card",
|
|
@@ -310,9 +310,5 @@ export const RELAY_WEBHOOK_EVENT_TYPES = [
|
|
|
310
310
|
"payment.expired",
|
|
311
311
|
"location.sharing.started",
|
|
312
312
|
"location.sharing.stopped",
|
|
313
|
-
"task.created",
|
|
314
|
-
"task.message",
|
|
315
|
-
"task.canceled",
|
|
316
|
-
"task.updated",
|
|
317
313
|
];
|
|
318
314
|
//# sourceMappingURL=operations.js.map
|
package/dist/operations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;QACE,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,qBAAqB;QAC7B,aAAa,EAAE,aAAa;KAC7B;IACD;QACE,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,QAAQ;QAChB,aAAa,EAAE,OAAO;KACvB;IACD;QACE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/selection.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MessagePartResponse, ReplyTo, SelectionPart, TextPart } from "./types.js";
|
|
1
|
+
import type { MessagePartResponse, ReplyTo, SelectionPart, SelectionReplyMessage, TextPart } from "./types.js";
|
|
2
2
|
/** Selection authoring uses explicit stable values, never label-derived IDs. */
|
|
3
3
|
export declare const SELECTION_MAX_OPTIONS = 25;
|
|
4
4
|
export declare const SELECTION_TITLE_MAX_LENGTH = 60;
|
|
@@ -10,6 +10,8 @@ export declare const SELECTION_BLOCK_INSTRUCTION: string;
|
|
|
10
10
|
/** Structured response discovery, never reconstructed by splitting visible labels. */
|
|
11
11
|
export interface SelectionReply {
|
|
12
12
|
selected_values: string[];
|
|
13
|
+
selected_ids?: string[];
|
|
14
|
+
reply_message?: SelectionReplyMessage;
|
|
13
15
|
reply_to: ReplyTo & {
|
|
14
16
|
part_index: number;
|
|
15
17
|
};
|
|
@@ -24,10 +26,7 @@ export declare const selectionReplyContext: (reply: SelectionReply | undefined,
|
|
|
24
26
|
parts: readonly MessagePartResponse[];
|
|
25
27
|
reply_to?: ReplyTo | null;
|
|
26
28
|
}) => string;
|
|
27
|
-
/**
|
|
28
|
-
* Validate a complete request part, `{ type?, title, options }`; `type` may be
|
|
29
|
-
* left out, and must be "selection" when present. Output fields are not accepted.
|
|
30
|
-
*/
|
|
29
|
+
/** Validate request fields only. Response rows deliberately have a separate model. */
|
|
31
30
|
export declare const selectionPart: (parsed: unknown) => SelectionPart | string;
|
|
32
31
|
export declare const parseSelectionBlock: (body: string) => SelectionPart | string;
|
|
33
32
|
export interface SplitSelection {
|
package/dist/selection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAmB,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAmB,aAAa,EAAE,qBAAqB,EAAoB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElJ,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAmBiE,CAAC;AACjG,eAAO,MAAM,2BAA2B,QAG8C,CAAC;AAEvF,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,QAAQ,EAAE,OAAO,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,eAAO,MAAM,cAAc,GACzB,OAAO,SAAS,mBAAmB,EAAE,EACrC,UAAU,OAAO,GAAG,IAAI,KACvB,cAAc,GAAG,SAUnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,sFAAsF;AACtF,eAAO,MAAM,cAAc,GACzB,OAAO,SAAS,mBAAmB,EAAE,KACpC,mBAAmB,EAC4D,CAAC;AAEnF,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,GAChC,OAAO,cAAc,GAAG,SAAS,EACjC,UAAU;IAAE,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,KAC7E,MAqBF,CAAC;AAgBF,sFAAsF;AACtF,eAAO,MAAM,aAAa,GAAI,QAAQ,OAAO,KAAG,aAAa,GAAG,MAyE/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,aAAa,GAAG,MAMlE,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gGAAgG;AAChG,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,cAiB/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,GAAG,SAAS,EACxB,WAAW,aAAa,KACvB,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,aAAa,CAI5C,CAAC"}
|
package/dist/selection.js
CHANGED
|
@@ -4,17 +4,24 @@ export const SELECTION_TITLE_MAX_LENGTH = 60;
|
|
|
4
4
|
export const SELECTION_LABEL_MAX_LENGTH = 80;
|
|
5
5
|
export const SELECTION_VALUE_MAX_LENGTH = 100;
|
|
6
6
|
export const SELECTION_FENCE = "selection";
|
|
7
|
-
export const SELECTION_GUIDANCE = "Use selection when the person
|
|
7
|
+
export const SELECTION_GUIDANCE = "Use selection when the person picks from known options and sends the choice once. "
|
|
8
8
|
+ "If the person asks for selections or multiple choices to submit together, send a selection, not buttons. "
|
|
9
9
|
+ "Put the question in `title` (1 to 60 characters, a few words, e.g. \"Pizza toppings\"). "
|
|
10
10
|
+ "Anything else you want to say goes in the text part, which shows as a normal message above the card. "
|
|
11
|
-
+ "
|
|
12
|
-
+ "
|
|
13
|
-
+ "
|
|
11
|
+
+ "`subtitle` (0 to 512 characters) is the card's second line. "
|
|
12
|
+
+ "Give exactly one of `options` or `sections`, with 1 to 25 rows in total; `sections` are 1 to 10 titled groups, each title 1 to 24 characters. "
|
|
13
|
+
+ "Give each row an `id` (1 to 200 characters, unique across the picker, returned in selected_ids) and a `label` of 1 to 24 characters, "
|
|
14
|
+
+ "plus an optional `subtitle` (0 to 72 characters) and an optional HTTPS `image_url` (up to 2048 characters). "
|
|
15
|
+
+ "Rows without id stay valid: `value` is then a case-sensitive ASCII token of 1 to 100 characters matching ^[A-Za-z0-9][A-Za-z0-9._:-]*$ and `label` is 1 to 80 characters; if a row has both id and value they must match. "
|
|
16
|
+
+ "Every limit counts the text as sent. Titles and labels are trimmed and never only whitespace; a subtitle that is blank after trimming is stored as absent. "
|
|
17
|
+
+ "`multiple` defaults to true, and the person checks any number of rows; with `multiple: false` the person checks exactly one. "
|
|
18
|
+
+ "Relay app versions before the list picker ignore `multiple: false` and can send several choices, which Relay refuses, so prefer `multiple: true` unless one answer is required. "
|
|
19
|
+
+ "The person submits once; checking sends nothing and only the submit does. `reply_message` (title 1 to 512 characters, subtitle 0 to 512) is what the answered bubble shows; it is not the portable reply text. "
|
|
20
|
+
+ "Do not mix selection with buttons. A person answers a given selection once, and reopening it afterwards shows what they chose without letting them change it. "
|
|
14
21
|
+ "Selection inherits existing Chat membership rules: at most one human user, with multiple agents allowed. "
|
|
15
22
|
+ "Only the human user can submit a selection response; agents cannot. "
|
|
16
23
|
+ "The per-user response claim is shared across that user's devices and idempotency keys; it does not enable multiple humans in a Chat. "
|
|
17
|
-
+ "New replies contain literal '• ' + label joined with '\\n' and selection_response.selected_values in source-option order. iOS may draw a checkmark in place of each bullet, and repeat the prompt's title above the lines, as presentation only; portable text remains bullets. The server accepts exact legacy comma-joined source labels only for compatibility. "
|
|
24
|
+
+ "New replies contain literal '• ' + label joined with '\\n' and selection_response.selected_values in source-option order, with selected_ids equal to them. iOS may draw a checkmark in place of each bullet, and repeat the prompt's title above the lines, as presentation only; portable text remains bullets. The server accepts exact legacy comma-joined source labels only for compatibility. "
|
|
18
25
|
+ "Use those values and reply_to to dispatch your own application handler, not label parsing.";
|
|
19
26
|
export const SELECTION_BLOCK_INSTRUCTION = "To offer multiple selections, end your answer with a fenced code block tagged `selection` "
|
|
20
27
|
+ 'containing {"title":"Pizza toppings","options":[{"value":"stable_token","label":"Readable label"}]}. '
|
|
@@ -26,6 +33,8 @@ export const selectionReply = (parts, replyTo) => {
|
|
|
26
33
|
return undefined;
|
|
27
34
|
return {
|
|
28
35
|
selected_values: [...response.selected_values],
|
|
36
|
+
...(response.selected_ids ? { selected_ids: [...response.selected_ids] } : {}),
|
|
37
|
+
...(response.reply_message ? { reply_message: { ...response.reply_message } } : {}),
|
|
29
38
|
reply_to: { message_id: replyTo.message_id, part_index: replyTo.part_index },
|
|
30
39
|
};
|
|
31
40
|
};
|
|
@@ -56,48 +65,114 @@ export const selectionReplyContext = (reply, message) => {
|
|
|
56
65
|
return lines.join("\n");
|
|
57
66
|
};
|
|
58
67
|
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
/** OpenAPI string limits count Unicode code points, not UTF-16 units. */
|
|
69
|
+
const length = (text) => [...text].length;
|
|
70
|
+
// A URI is not an IRI. Do not silently accept WHATWG URL's whitespace/Unicode
|
|
71
|
+
// repair while sending the original, schema-invalid bytes on the wire.
|
|
72
|
+
const httpsUri = /^https:\/\/(?:[A-Za-z0-9._~!$&'()*+,;=:%-]*@)?(?:\[[A-Za-z0-9:.-]+\]|[A-Za-z0-9._~!$&'()*+,;=%-]+)(?::[0-9]*)?(?:\/[A-Za-z0-9._~!$&'()*+,;=:@%\/-]*)?(?:\?[A-Za-z0-9._~!$&'()*+,;=:@%\/?-]*)?(?:#[A-Za-z0-9._~!$&'()*+,;=:@%\/?-]*)?$/u;
|
|
73
|
+
const invalidPercentEscape = /%(?![A-Fa-f0-9]{2})/u;
|
|
74
|
+
const textField = (value, max, min = 1) => typeof value === "string" && length(value.trim()) >= min && length(value.trim()) <= max;
|
|
75
|
+
const unknownField = (value, allowed) => Object.keys(value).find((key) => !allowed.includes(key));
|
|
76
|
+
/** Validate request fields only. Response rows deliberately have a separate model. */
|
|
63
77
|
export const selectionPart = (parsed) => {
|
|
64
78
|
if (!record(parsed))
|
|
65
|
-
return "selection needs an object with title and options";
|
|
66
|
-
const extra =
|
|
79
|
+
return "selection needs an object with title and options or sections";
|
|
80
|
+
const extra = unknownField(parsed, ["type", "title", "options", "sections", "subtitle", "multiple", "reply_message"]);
|
|
67
81
|
if (extra)
|
|
68
82
|
return `selection has unknown field ${extra}`;
|
|
69
83
|
if (parsed.type !== undefined && parsed.type !== "selection")
|
|
70
84
|
return "selection part needs type selection";
|
|
71
|
-
|
|
72
|
-
if (typeof title !== "string" || !title.trim() || title.trim().length > SELECTION_TITLE_MAX_LENGTH) {
|
|
85
|
+
if (!textField(parsed.title, SELECTION_TITLE_MAX_LENGTH)) {
|
|
73
86
|
return `selection needs a trimmed title of 1 to ${SELECTION_TITLE_MAX_LENGTH} characters`;
|
|
74
87
|
}
|
|
75
|
-
if (
|
|
76
|
-
return
|
|
88
|
+
if ((parsed.options !== undefined) === (parsed.sections !== undefined))
|
|
89
|
+
return "selection needs exactly one of options or sections";
|
|
90
|
+
if (parsed.subtitle !== undefined && !textField(parsed.subtitle, 512, 0))
|
|
91
|
+
return "selection subtitle needs 0 to 512 characters";
|
|
92
|
+
if (parsed.multiple !== undefined && typeof parsed.multiple !== "boolean")
|
|
93
|
+
return "selection multiple must be boolean";
|
|
94
|
+
let reply;
|
|
95
|
+
if (parsed.reply_message !== undefined) {
|
|
96
|
+
const value = parsed.reply_message;
|
|
97
|
+
if (!record(value) || unknownField(value, ["title", "subtitle"]) || !textField(value.title, 512)
|
|
98
|
+
|| (value.subtitle !== undefined && !textField(value.subtitle, 512, 0)))
|
|
99
|
+
return "selection reply_message needs title of 1 to 512 and optional subtitle of 0 to 512 characters";
|
|
100
|
+
reply = { title: value.title.trim(), ...(typeof value.subtitle === "string" ? { subtitle: value.subtitle.trim() } : {}) };
|
|
77
101
|
}
|
|
78
|
-
const
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
const ids = new Set();
|
|
103
|
+
const options = (input) => {
|
|
104
|
+
if (!Array.isArray(input) || input.length < 1 || input.length > SELECTION_MAX_OPTIONS)
|
|
105
|
+
return `selection needs 1 to ${SELECTION_MAX_OPTIONS} options`;
|
|
106
|
+
const result = [];
|
|
107
|
+
for (const [index, option] of input.entries()) {
|
|
108
|
+
if (!record(option))
|
|
109
|
+
return `option ${index + 1} is not an object`;
|
|
110
|
+
const extra = unknownField(option, ["id", "value", "label", "subtitle", "image_url"]);
|
|
111
|
+
if (extra)
|
|
112
|
+
return `option ${index + 1} has unknown field ${extra}`;
|
|
113
|
+
const { id, value, label, subtitle, image_url } = option;
|
|
114
|
+
let identifier;
|
|
115
|
+
if (id !== undefined) {
|
|
116
|
+
if (typeof id !== "string" || length(id) < 1 || length(id) > 200)
|
|
117
|
+
return "option id needs 1 to 200 characters";
|
|
118
|
+
if (value !== undefined && value !== id)
|
|
119
|
+
return "option id and value must match";
|
|
120
|
+
identifier = id;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
if (typeof value !== "string" || value.length > SELECTION_VALUE_MAX_LENGTH || !/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(value)) {
|
|
124
|
+
return `option ${index + 1} needs an ASCII token value of 1 to ${SELECTION_VALUE_MAX_LENGTH} characters`;
|
|
125
|
+
}
|
|
126
|
+
identifier = value;
|
|
127
|
+
}
|
|
128
|
+
const labelMax = id !== undefined ? 24 : SELECTION_LABEL_MAX_LENGTH;
|
|
129
|
+
if (!textField(label, labelMax))
|
|
130
|
+
return `option ${index + 1} needs a trimmed label of 1 to ${labelMax} characters`;
|
|
131
|
+
if (ids.has(identifier))
|
|
132
|
+
return `duplicate selection value ${identifier}`;
|
|
133
|
+
ids.add(identifier);
|
|
134
|
+
if (ids.size > SELECTION_MAX_OPTIONS)
|
|
135
|
+
return `selection needs at most ${SELECTION_MAX_OPTIONS} total options`;
|
|
136
|
+
if (subtitle !== undefined && !textField(subtitle, 72, 0))
|
|
137
|
+
return "option subtitle needs 0 to 72 characters";
|
|
138
|
+
if (image_url !== undefined) {
|
|
139
|
+
if (typeof image_url !== "string" || length(image_url) > 2048 || !image_url.startsWith("https://")
|
|
140
|
+
|| !httpsUri.test(image_url) || invalidPercentEscape.test(image_url))
|
|
141
|
+
return "option image_url needs HTTPS, at most 2048 characters";
|
|
142
|
+
try {
|
|
143
|
+
if (!new URL(image_url).hostname)
|
|
144
|
+
return "option image_url needs an HTTPS host";
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return "option image_url needs a valid HTTPS URL";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
result.push({ ...(typeof id === "string" ? { id, ...(value !== undefined ? { value: id } : {}) } : { value: identifier }),
|
|
151
|
+
label: label.trim(), ...(typeof subtitle === "string" ? { subtitle: subtitle.trim() } : {}),
|
|
152
|
+
...(typeof image_url === "string" ? { image_url } : {}) });
|
|
96
153
|
}
|
|
97
|
-
|
|
98
|
-
|
|
154
|
+
return result;
|
|
155
|
+
};
|
|
156
|
+
const presentation = { type: "selection", title: parsed.title.trim(),
|
|
157
|
+
...(typeof parsed.subtitle === "string" ? { subtitle: parsed.subtitle.trim() } : {}),
|
|
158
|
+
...(typeof parsed.multiple === "boolean" ? { multiple: parsed.multiple } : {}),
|
|
159
|
+
...(reply ? { reply_message: reply } : {}) };
|
|
160
|
+
if (parsed.options !== undefined) {
|
|
161
|
+
const rows = options(parsed.options);
|
|
162
|
+
return typeof rows === "string" ? rows : { ...presentation, options: rows };
|
|
163
|
+
}
|
|
164
|
+
if (!Array.isArray(parsed.sections) || parsed.sections.length < 1 || parsed.sections.length > 10)
|
|
165
|
+
return "selection needs 1 to 10 sections";
|
|
166
|
+
const sections = [];
|
|
167
|
+
for (const section of parsed.sections) {
|
|
168
|
+
if (!record(section) || unknownField(section, ["title", "options"]) || !textField(section.title, 24))
|
|
169
|
+
return "section needs a title of 1 to 24 characters and options";
|
|
170
|
+
const rows = options(section.options);
|
|
171
|
+
if (typeof rows === "string")
|
|
172
|
+
return rows;
|
|
173
|
+
sections.push({ title: section.title.trim(), options: rows });
|
|
99
174
|
}
|
|
100
|
-
return {
|
|
175
|
+
return { ...presentation, sections };
|
|
101
176
|
};
|
|
102
177
|
export const parseSelectionBlock = (body) => {
|
|
103
178
|
try {
|
package/dist/selection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"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"}
|