@underdogai/mesh-app-sdk 0.3.0 → 0.4.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 +9 -0
- package/dist/host.d.ts +12 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +26 -0
- package/dist/host.js.map +1 -1
- package/dist/serve.d.ts +43 -0
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +30 -3
- package/dist/serve.js.map +1 -1
- package/package.json +1 -1
- package/src/host.ts +26 -0
- package/src/serve.ts +64 -3
package/README.md
CHANGED
|
@@ -62,6 +62,15 @@ await serve(app, { homeserver, accessToken }); // 봇 상시 실행 (
|
|
|
62
62
|
|
|
63
63
|
되돌릴 수 없는 액션(`destructive: true`)은 기본적으로 **누른 사람의 권한 등급 50 이상**을 요구한다. 자체 정책은 `serve(app, { gate })` 로 대체할 수 있고, 초대 수락 범위는 `acceptInvite` 로 좁힐 수 있다.
|
|
64
64
|
|
|
65
|
+
앱이 컴포저를 선언하면 봇이 참여한 **모든 방**의 입력창 어휘가 바뀐다. 일부 방에서만 쓰려면 `shouldPublishSurface` 로 좁힌다 — 거절한 방에 이미 올라가 있던 서피스는 함께 **회수**된다.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
await serve(app, {
|
|
69
|
+
homeserver, accessToken,
|
|
70
|
+
shouldPublishSurface: ({ roomId }) => roomId === CONTRACT_ROOM_ID,
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
65
74
|
## 문서
|
|
66
75
|
|
|
67
76
|
전체 가이드 — 설치부터 화면 지도, 권한 모델, 보안 수칙까지: **https://chatops.theunderdog.ai/sdk-guide**
|
package/dist/host.d.ts
CHANGED
|
@@ -25,6 +25,18 @@ export interface PublishSurfaceInput {
|
|
|
25
25
|
* sidebar 없는 앱은 발행할 것이 없다(no_surface).
|
|
26
26
|
*/
|
|
27
27
|
export declare function publishSurface(input: PublishSurfaceInput): Promise<PublishSurfaceResult>;
|
|
28
|
+
export type RetractSurfaceResult = "retracted" | "absent" | "unknown";
|
|
29
|
+
/**
|
|
30
|
+
* 방에 올라가 있는 앱 서피스를 **회수**한다 — publishSurface 의 짝.
|
|
31
|
+
*
|
|
32
|
+
* Matrix 상태 이벤트는 지울 수 없으므로 빈 content 로 덮는다. 클라이언트는 서피스 content 를
|
|
33
|
+
* 스키마로 검증해 통과한 것만 렌더하므로(빈 객체는 불통과) 결과적으로 그 방에서 사라진다.
|
|
34
|
+
*
|
|
35
|
+
* 이미 없으면 아무것도 쓰지 않는다("absent") — 부팅마다 불러도 안전한 멱등 연산이어야 한다.
|
|
36
|
+
* 현재 상태를 읽을 수 없는 클라이언트면 판단 근거가 없으므로 건드리지 않는다("unknown") —
|
|
37
|
+
* 남의 상태를 덮는 쪽보다 그냥 두는 쪽이 안전하다(fail-safe).
|
|
38
|
+
*/
|
|
39
|
+
export declare function retractSurface(input: PublishSurfaceInput): Promise<RetractSurfaceResult>;
|
|
28
40
|
/**
|
|
29
41
|
* 초대 활성화 시퀀스 — 참여 → 서피스 1회 발행. "봇을 초대하면 활성화된다, 사용자가 따로 설정할 게 없다"(§2.4)
|
|
30
42
|
* 의 앱-제너릭 절반. 호스트는 자기 정책(capability 게시·멀티앱 키잉 등)을 이 앞뒤에 끼운다.
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,yEAAyE;IACzE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3F;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC5F,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiB9F;AAmBD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGhC"}
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,iBAAiB;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,yEAAyE;IACzE,iBAAiB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3F;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC5F,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiB9F;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtE;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAY9F;AAmBD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGhC"}
|
package/dist/host.js
CHANGED
|
@@ -33,6 +33,32 @@ export async function publishSurface(input) {
|
|
|
33
33
|
await input.client.sendStateEvent(input.roomId, EventType.AppSurface, stateKey, surface);
|
|
34
34
|
return "published";
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* 방에 올라가 있는 앱 서피스를 **회수**한다 — publishSurface 의 짝.
|
|
38
|
+
*
|
|
39
|
+
* Matrix 상태 이벤트는 지울 수 없으므로 빈 content 로 덮는다. 클라이언트는 서피스 content 를
|
|
40
|
+
* 스키마로 검증해 통과한 것만 렌더하므로(빈 객체는 불통과) 결과적으로 그 방에서 사라진다.
|
|
41
|
+
*
|
|
42
|
+
* 이미 없으면 아무것도 쓰지 않는다("absent") — 부팅마다 불러도 안전한 멱등 연산이어야 한다.
|
|
43
|
+
* 현재 상태를 읽을 수 없는 클라이언트면 판단 근거가 없으므로 건드리지 않는다("unknown") —
|
|
44
|
+
* 남의 상태를 덮는 쪽보다 그냥 두는 쪽이 안전하다(fail-safe).
|
|
45
|
+
*/
|
|
46
|
+
export async function retractSurface(input) {
|
|
47
|
+
const stateKey = input.stateKey ?? "";
|
|
48
|
+
if (!input.client.getRoomStateEvent)
|
|
49
|
+
return "unknown";
|
|
50
|
+
let existing;
|
|
51
|
+
try {
|
|
52
|
+
existing = await input.client.getRoomStateEvent(input.roomId, EventType.AppSurface, stateKey);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return "absent"; // 상태 없음(M_NOT_FOUND) — 회수할 것이 없다.
|
|
56
|
+
}
|
|
57
|
+
if (!existing || typeof existing !== "object" || Object.keys(existing).length === 0)
|
|
58
|
+
return "absent";
|
|
59
|
+
await input.client.sendStateEvent(input.roomId, EventType.AppSurface, stateKey, {});
|
|
60
|
+
return "retracted";
|
|
61
|
+
}
|
|
36
62
|
/** 키 순서 무관 비교용 canonical 직렬화(재귀 키 정렬) — Matrix canonical JSON 과 같은 정렬 기준(코드 유닛). */
|
|
37
63
|
function canonicalStringify(v) {
|
|
38
64
|
return JSON.stringify(sortKeysDeep(v));
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAyB3D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO,YAAY,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACpG,kDAAkD;YAClD,uEAAuE;YACvE,wEAAwE;YACxE,IAAI,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAAK,kBAAkB,CAAC,OAAO,CAAC;gBAAE,OAAO,WAAW,CAAC;QACnG,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,oFAAoF;AACpF,SAAS,kBAAkB,CAAC,CAAU;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7C,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAKtC;IACC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.d.ts
CHANGED
|
@@ -87,8 +87,51 @@ export interface ServeOptions extends BotClientOptions {
|
|
|
87
87
|
roomId: string;
|
|
88
88
|
inviter?: string;
|
|
89
89
|
}) => boolean | Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* 서피스 발행 판정(선택) — 미주입이면 **참여한 모든 방에 발행**(기존 동작). 앱의 서피스(컴포저·패널 등)를
|
|
92
|
+
* 일부 방에서만 쓰고 싶을 때 좁힌다. acceptInvite 의 짝: 저쪽이 "어느 방에 들어갈까"라면 이쪽은
|
|
93
|
+
* "어느 방에서 이 앱의 어휘를 보여줄까"다.
|
|
94
|
+
*
|
|
95
|
+
* false 를 돌려주면 발행하지 않을 뿐 아니라, 그 방에 이미 올라가 있던 서피스를 **회수**한다
|
|
96
|
+
* (정책을 좁힌 뒤 배포하면 옛 서피스가 남아 있으므로). 콜백 오류는 fail-closed(거절)로 다룬다 —
|
|
97
|
+
* 판정을 모르는 채 방 어휘를 바꾸는 것보다 안 내는 쪽이 안전하다.
|
|
98
|
+
*/
|
|
99
|
+
shouldPublishSurface?: (surface: {
|
|
100
|
+
roomId: string;
|
|
101
|
+
}) => boolean | Promise<boolean>;
|
|
90
102
|
/** 핸들러 read-then-decide 백엔드(선택) — dispatchAction 의 ctx.backend 로 전달. */
|
|
91
103
|
backend?: ActionBackend;
|
|
104
|
+
/**
|
|
105
|
+
* **방·발신자마다 다른** 백엔드(선택) — 주입하면 `backend` 대신 이쪽이 쓰인다.
|
|
106
|
+
*
|
|
107
|
+
* 왜 필요한가: 봇이 방 하나만 볼 때는 `backend` 하나로 충분하지만, 실제 배치는 둘을 더 요구한다.
|
|
108
|
+
* - **대상이 방마다 다르다** — 레포당 방 하나인 SCM 브리지에서는 방이 곧 대상 레포다.
|
|
109
|
+
* - **행위자가 클릭마다 다르다** — 외부 시스템에 "누가 했는지" 남기려면(Forgejo `Sudo` 등)
|
|
110
|
+
* 호스트가 발신자별로 자격을 갈아끼워야 한다.
|
|
111
|
+
*
|
|
112
|
+
* 🔑 **둘 다 핸들러 인자로 올리면 안 된다.** 대상을 인자로 받으면 카드/이벤트가 대상을 자칭하게 되고
|
|
113
|
+
* (위조 가능), 행위자를 인자로 받으면 앱 코드의 버그 하나가 **사칭**이 된다. `sender` 는 홈서버가
|
|
114
|
+
* 귀속한 값이므로 여기서 호스트에 직접 넘겨, 앱은 "누구로 행세할지"에 손대지 못하게 한다.
|
|
115
|
+
*/
|
|
116
|
+
backendFor?: (input: {
|
|
117
|
+
roomId: string;
|
|
118
|
+
sender: string;
|
|
119
|
+
}) => ActionBackend | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* 카드 엔티티 해석(선택) — 주입하면 기본 `entityFromCardId` 폴백 대신 쓰인다.
|
|
122
|
+
*
|
|
123
|
+
* 기본 폴백은 `"<소문자type>-<id>"` 앵커드 패턴만 안다. **자기만의 card_id 규칙을 쓰는 앱**
|
|
124
|
+
* (예: `forgejo-pr-<레포슬러그>-<번호>`)에서는 그 폴백이 엉뚱한 id 를 만든다 — 위 예에서
|
|
125
|
+
* `id` 가 `"pr-<레포슬러그>-<번호>"` 가 되어 핸들러가 대상을 못 찍는다. card_id 형식의 **소유자가
|
|
126
|
+
* 직접 파싱**하는 것이 옳으므로 여기로 열어 둔다(네트워크 조회 없이 동기).
|
|
127
|
+
*/
|
|
128
|
+
resolveEntity?: (input: {
|
|
129
|
+
roomId: string;
|
|
130
|
+
cardId: string;
|
|
131
|
+
}) => {
|
|
132
|
+
type?: string;
|
|
133
|
+
id?: string;
|
|
134
|
+
};
|
|
92
135
|
/** 앱 정책 설정(선택) — ctx.config 로 전달. */
|
|
93
136
|
config?: Record<string, unknown>;
|
|
94
137
|
/** delegate 효과 콜백(선택) — 미주입이면 경고 후 무시(applyEffects 규칙). */
|
package/dist/serve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { EventType, loadPlugins } from "@underdogai/mesh-event-schemas";
|
|
26
26
|
import { applyEffects, dispatchAction, dispatchEvent, } from "./runtime.js";
|
|
27
|
-
import { publishSurface } from "./host.js";
|
|
27
|
+
import { publishSurface, retractSurface, } from "./host.js";
|
|
28
28
|
function resolveFetch(injected) {
|
|
29
29
|
const f = injected ?? globalThis.fetch;
|
|
30
30
|
if (!f)
|
|
@@ -233,7 +233,32 @@ export async function serve(app, opts) {
|
|
|
233
233
|
// 서피스 발행 실패도 재시도 대상 — 대표 사례: 봇 PL 부족(방 기본 state PL 50 vs 봇 0)으로 403.
|
|
234
234
|
// 방 관리자가 나중에 PL 을 주면 다음 sync 루프에서 자동으로 뜬다("초대하면 활성화" §2.4 를 지연 권한 부여까지 확장).
|
|
235
235
|
const pendingSurfaces = new Set();
|
|
236
|
+
/** 이 방에 앱 서피스를 낼지 판정한다 — 미주입이면 전부 허용(기존 동작). 오류는 거절로 다룬다. */
|
|
237
|
+
const surfaceAllowed = async (roomId) => {
|
|
238
|
+
if (!opts.shouldPublishSurface)
|
|
239
|
+
return true;
|
|
240
|
+
try {
|
|
241
|
+
return await opts.shouldPublishSurface({ roomId });
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
warn(`[app-sdk] shouldPublishSurface 판정 오류 — 거절로 처리 (${roomId}): ${msg(err)}`);
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
236
248
|
const ensureSurface = async (roomId) => {
|
|
249
|
+
if (!(await surfaceAllowed(roomId))) {
|
|
250
|
+
pendingSurfaces.delete(roomId);
|
|
251
|
+
try {
|
|
252
|
+
const r = await retractSurface({ client, app, roomId, stateKey });
|
|
253
|
+
if (r === "retracted")
|
|
254
|
+
log(`[app-sdk] 서피스 회수 ← ${roomId} — shouldPublishSurface 정책`);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
warn(`[app-sdk] 서피스 회수 실패 — 다음 sync 때 재시도 (${roomId}): ${msg(err)}`);
|
|
258
|
+
pendingSurfaces.add(roomId);
|
|
259
|
+
}
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
237
262
|
try {
|
|
238
263
|
const r = await publishSurface({ client, app, roomId, stateKey });
|
|
239
264
|
pendingSurfaces.delete(roomId);
|
|
@@ -332,7 +357,9 @@ export async function serve(app, opts) {
|
|
|
332
357
|
powerLevels = undefined;
|
|
333
358
|
}
|
|
334
359
|
}
|
|
335
|
-
const
|
|
360
|
+
const cardId = typeof content.card_id === "string" ? content.card_id : "";
|
|
361
|
+
// 엔티티/백엔드는 앱이 원하면 호스트가 방 단위로 정한다(둘 다 미주입이면 기존 동작 그대로).
|
|
362
|
+
const entity = opts.resolveEntity ? opts.resolveEntity({ roomId, cardId }) : entityFromCardId(cardId);
|
|
336
363
|
const res = await dispatchAction({
|
|
337
364
|
app,
|
|
338
365
|
actionContent: content,
|
|
@@ -341,7 +368,7 @@ export async function serve(app, opts) {
|
|
|
341
368
|
cardEventId,
|
|
342
369
|
entity,
|
|
343
370
|
gate,
|
|
344
|
-
backend: opts.backend,
|
|
371
|
+
backend: opts.backendFor ? opts.backendFor({ roomId, sender: ev.sender }) : opts.backend,
|
|
345
372
|
// 앱 KV 스토리지 읽기(B3, PANEL-SDK-1 Phase D) — appservice-agent 경로와 같은 주입.
|
|
346
373
|
// 이게 없으면 독립 serve() 봇의 핸들러에서 ctx.state 가 undefined 라, assetBrowser 의
|
|
347
374
|
// 폴더/현재 버전 갱신(read-then-decide)이 AS 경로에서만 동작하는 반쪽이 된다.
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/host.ts
CHANGED
|
@@ -55,6 +55,32 @@ export async function publishSurface(input: PublishSurfaceInput): Promise<Publis
|
|
|
55
55
|
return "published";
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
export type RetractSurfaceResult = "retracted" | "absent" | "unknown";
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 방에 올라가 있는 앱 서피스를 **회수**한다 — publishSurface 의 짝.
|
|
62
|
+
*
|
|
63
|
+
* Matrix 상태 이벤트는 지울 수 없으므로 빈 content 로 덮는다. 클라이언트는 서피스 content 를
|
|
64
|
+
* 스키마로 검증해 통과한 것만 렌더하므로(빈 객체는 불통과) 결과적으로 그 방에서 사라진다.
|
|
65
|
+
*
|
|
66
|
+
* 이미 없으면 아무것도 쓰지 않는다("absent") — 부팅마다 불러도 안전한 멱등 연산이어야 한다.
|
|
67
|
+
* 현재 상태를 읽을 수 없는 클라이언트면 판단 근거가 없으므로 건드리지 않는다("unknown") —
|
|
68
|
+
* 남의 상태를 덮는 쪽보다 그냥 두는 쪽이 안전하다(fail-safe).
|
|
69
|
+
*/
|
|
70
|
+
export async function retractSurface(input: PublishSurfaceInput): Promise<RetractSurfaceResult> {
|
|
71
|
+
const stateKey = input.stateKey ?? "";
|
|
72
|
+
if (!input.client.getRoomStateEvent) return "unknown";
|
|
73
|
+
let existing: unknown;
|
|
74
|
+
try {
|
|
75
|
+
existing = await input.client.getRoomStateEvent(input.roomId, EventType.AppSurface, stateKey);
|
|
76
|
+
} catch {
|
|
77
|
+
return "absent"; // 상태 없음(M_NOT_FOUND) — 회수할 것이 없다.
|
|
78
|
+
}
|
|
79
|
+
if (!existing || typeof existing !== "object" || Object.keys(existing).length === 0) return "absent";
|
|
80
|
+
await input.client.sendStateEvent(input.roomId, EventType.AppSurface, stateKey, {});
|
|
81
|
+
return "retracted";
|
|
82
|
+
}
|
|
83
|
+
|
|
58
84
|
/** 키 순서 무관 비교용 canonical 직렬화(재귀 키 정렬) — Matrix canonical JSON 과 같은 정렬 기준(코드 유닛). */
|
|
59
85
|
function canonicalStringify(v: unknown): string {
|
|
60
86
|
return JSON.stringify(sortKeysDeep(v));
|
package/src/serve.ts
CHANGED
|
@@ -32,7 +32,12 @@ import {
|
|
|
32
32
|
type ApplyEffectsInput,
|
|
33
33
|
type GateFn,
|
|
34
34
|
} from "./runtime.js";
|
|
35
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
publishSurface,
|
|
37
|
+
retractSurface,
|
|
38
|
+
type MatrixHostClient,
|
|
39
|
+
type PublishSurfaceResult,
|
|
40
|
+
} from "./host.js";
|
|
36
41
|
|
|
37
42
|
// ---------------------------------------------------------------------------
|
|
38
43
|
// 최소 fetch 계약 — SDK 는 런타임 환경을 가정하지 않는다(lib=ES2022). Node 20+/브라우저의 내장 fetch 가
|
|
@@ -234,8 +239,40 @@ export interface ServeOptions extends BotClientOptions {
|
|
|
234
239
|
* roomId/초대자(inviter)를 보고 결정한다. false 를 돌려주면 join 하지 않고 조용히 넘긴다(로그만).
|
|
235
240
|
*/
|
|
236
241
|
acceptInvite?: (invite: { roomId: string; inviter?: string }) => boolean | Promise<boolean>;
|
|
242
|
+
/**
|
|
243
|
+
* 서피스 발행 판정(선택) — 미주입이면 **참여한 모든 방에 발행**(기존 동작). 앱의 서피스(컴포저·패널 등)를
|
|
244
|
+
* 일부 방에서만 쓰고 싶을 때 좁힌다. acceptInvite 의 짝: 저쪽이 "어느 방에 들어갈까"라면 이쪽은
|
|
245
|
+
* "어느 방에서 이 앱의 어휘를 보여줄까"다.
|
|
246
|
+
*
|
|
247
|
+
* false 를 돌려주면 발행하지 않을 뿐 아니라, 그 방에 이미 올라가 있던 서피스를 **회수**한다
|
|
248
|
+
* (정책을 좁힌 뒤 배포하면 옛 서피스가 남아 있으므로). 콜백 오류는 fail-closed(거절)로 다룬다 —
|
|
249
|
+
* 판정을 모르는 채 방 어휘를 바꾸는 것보다 안 내는 쪽이 안전하다.
|
|
250
|
+
*/
|
|
251
|
+
shouldPublishSurface?: (surface: { roomId: string }) => boolean | Promise<boolean>;
|
|
237
252
|
/** 핸들러 read-then-decide 백엔드(선택) — dispatchAction 의 ctx.backend 로 전달. */
|
|
238
253
|
backend?: ActionBackend;
|
|
254
|
+
/**
|
|
255
|
+
* **방·발신자마다 다른** 백엔드(선택) — 주입하면 `backend` 대신 이쪽이 쓰인다.
|
|
256
|
+
*
|
|
257
|
+
* 왜 필요한가: 봇이 방 하나만 볼 때는 `backend` 하나로 충분하지만, 실제 배치는 둘을 더 요구한다.
|
|
258
|
+
* - **대상이 방마다 다르다** — 레포당 방 하나인 SCM 브리지에서는 방이 곧 대상 레포다.
|
|
259
|
+
* - **행위자가 클릭마다 다르다** — 외부 시스템에 "누가 했는지" 남기려면(Forgejo `Sudo` 등)
|
|
260
|
+
* 호스트가 발신자별로 자격을 갈아끼워야 한다.
|
|
261
|
+
*
|
|
262
|
+
* 🔑 **둘 다 핸들러 인자로 올리면 안 된다.** 대상을 인자로 받으면 카드/이벤트가 대상을 자칭하게 되고
|
|
263
|
+
* (위조 가능), 행위자를 인자로 받으면 앱 코드의 버그 하나가 **사칭**이 된다. `sender` 는 홈서버가
|
|
264
|
+
* 귀속한 값이므로 여기서 호스트에 직접 넘겨, 앱은 "누구로 행세할지"에 손대지 못하게 한다.
|
|
265
|
+
*/
|
|
266
|
+
backendFor?: (input: { roomId: string; sender: string }) => ActionBackend | undefined;
|
|
267
|
+
/**
|
|
268
|
+
* 카드 엔티티 해석(선택) — 주입하면 기본 `entityFromCardId` 폴백 대신 쓰인다.
|
|
269
|
+
*
|
|
270
|
+
* 기본 폴백은 `"<소문자type>-<id>"` 앵커드 패턴만 안다. **자기만의 card_id 규칙을 쓰는 앱**
|
|
271
|
+
* (예: `forgejo-pr-<레포슬러그>-<번호>`)에서는 그 폴백이 엉뚱한 id 를 만든다 — 위 예에서
|
|
272
|
+
* `id` 가 `"pr-<레포슬러그>-<번호>"` 가 되어 핸들러가 대상을 못 찍는다. card_id 형식의 **소유자가
|
|
273
|
+
* 직접 파싱**하는 것이 옳으므로 여기로 열어 둔다(네트워크 조회 없이 동기).
|
|
274
|
+
*/
|
|
275
|
+
resolveEntity?: (input: { roomId: string; cardId: string }) => { type?: string; id?: string };
|
|
239
276
|
/** 앱 정책 설정(선택) — ctx.config 로 전달. */
|
|
240
277
|
config?: Record<string, unknown>;
|
|
241
278
|
/** delegate 효과 콜백(선택) — 미주입이면 경고 후 무시(applyEffects 규칙). */
|
|
@@ -350,7 +387,29 @@ export async function serve(app: App, opts: ServeOptions): Promise<void> {
|
|
|
350
387
|
// 방 관리자가 나중에 PL 을 주면 다음 sync 루프에서 자동으로 뜬다("초대하면 활성화" §2.4 를 지연 권한 부여까지 확장).
|
|
351
388
|
const pendingSurfaces = new Set<string>();
|
|
352
389
|
|
|
390
|
+
/** 이 방에 앱 서피스를 낼지 판정한다 — 미주입이면 전부 허용(기존 동작). 오류는 거절로 다룬다. */
|
|
391
|
+
const surfaceAllowed = async (roomId: string): Promise<boolean> => {
|
|
392
|
+
if (!opts.shouldPublishSurface) return true;
|
|
393
|
+
try {
|
|
394
|
+
return await opts.shouldPublishSurface({ roomId });
|
|
395
|
+
} catch (err) {
|
|
396
|
+
warn(`[app-sdk] shouldPublishSurface 판정 오류 — 거절로 처리 (${roomId}): ${msg(err)}`);
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
|
|
353
401
|
const ensureSurface = async (roomId: string): Promise<void> => {
|
|
402
|
+
if (!(await surfaceAllowed(roomId))) {
|
|
403
|
+
pendingSurfaces.delete(roomId);
|
|
404
|
+
try {
|
|
405
|
+
const r = await retractSurface({ client, app, roomId, stateKey });
|
|
406
|
+
if (r === "retracted") log(`[app-sdk] 서피스 회수 ← ${roomId} — shouldPublishSurface 정책`);
|
|
407
|
+
} catch (err) {
|
|
408
|
+
warn(`[app-sdk] 서피스 회수 실패 — 다음 sync 때 재시도 (${roomId}): ${msg(err)}`);
|
|
409
|
+
pendingSurfaces.add(roomId);
|
|
410
|
+
}
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
354
413
|
try {
|
|
355
414
|
const r = await publishSurface({ client, app, roomId, stateKey });
|
|
356
415
|
pendingSurfaces.delete(roomId);
|
|
@@ -441,7 +500,9 @@ export async function serve(app: App, opts: ServeOptions): Promise<void> {
|
|
|
441
500
|
powerLevels = undefined;
|
|
442
501
|
}
|
|
443
502
|
}
|
|
444
|
-
const
|
|
503
|
+
const cardId = typeof content.card_id === "string" ? content.card_id : "";
|
|
504
|
+
// 엔티티/백엔드는 앱이 원하면 호스트가 방 단위로 정한다(둘 다 미주입이면 기존 동작 그대로).
|
|
505
|
+
const entity = opts.resolveEntity ? opts.resolveEntity({ roomId, cardId }) : entityFromCardId(cardId);
|
|
445
506
|
const res = await dispatchAction({
|
|
446
507
|
app,
|
|
447
508
|
actionContent: content,
|
|
@@ -450,7 +511,7 @@ export async function serve(app: App, opts: ServeOptions): Promise<void> {
|
|
|
450
511
|
cardEventId,
|
|
451
512
|
entity,
|
|
452
513
|
gate,
|
|
453
|
-
backend: opts.backend,
|
|
514
|
+
backend: opts.backendFor ? opts.backendFor({ roomId, sender: ev.sender }) : opts.backend,
|
|
454
515
|
// 앱 KV 스토리지 읽기(B3, PANEL-SDK-1 Phase D) — appservice-agent 경로와 같은 주입.
|
|
455
516
|
// 이게 없으면 독립 serve() 봇의 핸들러에서 ctx.state 가 undefined 라, assetBrowser 의
|
|
456
517
|
// 폴더/현재 버전 갱신(read-then-decide)이 AS 경로에서만 동작하는 반쪽이 된다.
|