@leemour/max-cli 0.8.0 → 0.10.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/backup.d.ts +28 -0
- package/dist/backup.d.ts.map +1 -0
- package/dist/backup.js +47 -0
- package/dist/backup.js.map +1 -0
- package/dist/cache/drivers/bun-sqlite.d.ts.map +1 -1
- package/dist/cache/drivers/node-sqlite.d.ts.map +1 -1
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/open.d.ts.map +1 -1
- package/dist/cache/schema.d.ts.map +1 -1
- package/dist/cache/store.d.ts +7 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +8 -0
- package/dist/cache/store.js.map +1 -1
- package/dist/client.d.ts +38 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +177 -29
- package/dist/client.js.map +1 -1
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +97 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/body.d.ts.map +1 -1
- package/dist/commands/body.js.map +1 -1
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +1 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +123 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/folders.js.map +1 -1
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/paging.d.ts.map +1 -1
- package/dist/commands/serve.d.ts +12 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +10 -7
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/server.d.ts +7 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +76 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +4 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/skill.js.map +1 -1
- package/dist/config.d.ts +4 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/deadline.d.ts.map +1 -1
- package/dist/diagnose.d.ts +14 -1
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +13 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/download.d.ts.map +1 -1
- package/dist/export.d.ts +7 -4
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +13 -9
- package/dist/export.js.map +1 -1
- package/dist/generated/client.generated.d.ts +1 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +1 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +1 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +1 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +21 -6
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +2 -1
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/mcp/confirm.d.ts +2 -2
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/instructions.d.ts.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js.map +1 -1
- package/dist/profile.d.ts.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +4 -0
- package/dist/program.js.map +1 -1
- package/dist/protocol/connection.d.ts +2 -1
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +45 -14
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/frame.d.ts +22 -14
- package/dist/protocol/frame.d.ts.map +1 -1
- package/dist/protocol/frame.js +116 -37
- package/dist/protocol/frame.js.map +1 -1
- package/dist/protocol/lz4.d.ts +15 -0
- package/dist/protocol/lz4.d.ts.map +1 -0
- package/dist/protocol/lz4.js +154 -0
- package/dist/protocol/lz4.js.map +1 -0
- package/dist/rendering/messages.d.ts.map +1 -1
- package/dist/rendering/messages.js.map +1 -1
- package/dist/report.d.ts +39 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +57 -0
- package/dist/report.js.map +1 -0
- package/dist/resolve.d.ts.map +1 -1
- package/dist/runs/events.d.ts +21 -1
- package/dist/runs/events.d.ts.map +1 -1
- package/dist/runs/events.js +14 -1
- package/dist/runs/events.js.map +1 -1
- package/dist/runs/recording.d.ts +11 -0
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +70 -22
- package/dist/runs/recording.js.map +1 -1
- package/dist/runs/run.d.ts +11 -0
- package/dist/runs/run.d.ts.map +1 -1
- package/dist/runs/run.js +8 -1
- package/dist/runs/run.js.map +1 -1
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js.map +1 -1
- package/dist/sends/recipients.d.ts.map +1 -1
- package/dist/sends/recipients.js.map +1 -1
- package/dist/server/lines.d.ts +4 -0
- package/dist/server/lines.d.ts.map +1 -1
- package/dist/server/lines.js +11 -2
- package/dist/server/lines.js.map +1 -1
- package/dist/server/server-connection.d.ts.map +1 -1
- package/dist/server/server-connection.js.map +1 -1
- package/dist/server/server.d.ts +10 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +40 -3
- package/dist/server/server.js.map +1 -1
- package/dist/server/start.d.ts +7 -1
- package/dist/server/start.d.ts.map +1 -1
- package/dist/server/start.js +17 -2
- package/dist/server/start.js.map +1 -1
- package/dist/server/subscribe.d.ts.map +1 -1
- package/dist/session/adopt.d.ts.map +1 -1
- package/dist/session/browser.d.ts.map +1 -1
- package/dist/session/browser.js.map +1 -1
- package/dist/session/handshake.d.ts +9 -4
- package/dist/session/handshake.d.ts.map +1 -1
- package/dist/session/handshake.js +9 -5
- package/dist/session/handshake.js.map +1 -1
- package/dist/session/login.d.ts.map +1 -1
- package/dist/session/prompt.d.ts.map +1 -1
- package/dist/session/prompt.js.map +1 -1
- package/dist/session/qr-terminal.d.ts.map +1 -1
- package/dist/session/store.d.ts +15 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +27 -0
- package/dist/session/store.js.map +1 -1
- package/dist/spec/check.d.ts.map +1 -1
- package/dist/spec/define.d.ts.map +1 -1
- package/dist/spec/identity.d.ts +43 -9
- package/dist/spec/identity.d.ts.map +1 -1
- package/dist/spec/identity.js +43 -13
- package/dist/spec/identity.js.map +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +2 -1
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/chats.d.ts +9 -7
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +17 -12
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/session.d.ts +28 -4
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +45 -6
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/spec/scalars.d.ts.map +1 -1
- package/dist/spec/scalars.js +2 -2
- package/dist/testing/mock-max.d.ts +5 -1
- package/dist/testing/mock-max.d.ts.map +1 -1
- package/dist/testing/mock-max.js +6 -3
- package/dist/testing/mock-max.js.map +1 -1
- package/dist/transcribe/index.d.ts.map +1 -1
- package/dist/transcribe/install.d.ts.map +1 -1
- package/dist/transcribe/install.js.map +1 -1
- package/dist/transcribe/models.d.ts.map +1 -1
- package/dist/transcribe/speech.d.ts.map +1 -1
- package/dist/transcribe/speech.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js.map +1 -1
- package/dist/upload.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +12 -8
- package/skills/max-cli/SKILL.md +8 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.generated.js","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACpG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACrF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC9G,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"operations.generated.js","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACpG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACrF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC9G,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACzF,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,kBAAkB,EAAE,eAAe;IACnC,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,aAAa;IAC/B,eAAe,EAAE,YAAY;IAC7B,kBAAkB,EAAE,eAAe;IACnC,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,eAAe;IACnC,uBAAuB,EAAE,oBAAoB;IAC7C,cAAc,EAAE,WAAW;IAC3B,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,aAAa;IAC/B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,SAAS;IACvB,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,qBAAqB,EAAE,kBAAkB;IACzC,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,aAAa;IAC/B,kBAAkB,EAAE,eAAe;IACnC,oBAAoB,EAAE,iBAAiB;IACvC,iBAAiB,EAAE,cAAc;IACjC,mBAAmB,EAAE,gBAAgB;IACrC,kBAAkB,EAAE,eAAe;IACnC,eAAe,EAAE,YAAY;IAC7B,cAAc,EAAE,WAAW;CACnB,CAAA"}
|
package/dist/markdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAYD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAYD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CA2B7E,CAAA"}
|
package/dist/mcp/confirm.d.ts
CHANGED
|
@@ -10,9 +10,9 @@ export interface SendArgs {
|
|
|
10
10
|
}
|
|
11
11
|
/** The one mapping from tool arguments to a send, for both the plain tool and the confirmed one. */
|
|
12
12
|
export declare const sendOptions: (args: SendArgs, at: number | undefined) => {
|
|
13
|
-
at?: number | undefined;
|
|
14
|
-
notify?: boolean | undefined;
|
|
15
13
|
cid?: number | undefined;
|
|
14
|
+
notify?: boolean | undefined;
|
|
15
|
+
at?: number | undefined;
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
18
|
* **`--confirm-send`: the server asks the owner itself, and shows where the name resolved to** (`CLI-28`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/mcp/confirm.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,oGAAoG;AACpG,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/mcp/confirm.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,mBAAmB,EAGxB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,oGAAoG;AACpG,eAAO,MAAM,WAAW,SAAU,QAAQ,MAAM,MAAM,GAAG,SAAS;;;;CAIhE,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,iBAcE,SAAS,QAAQ,QAAQ,OAAO,aAAa,KAAG,OAAO,CAAC,OAAO,GAAG,mBAAmB,CAkC5G,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/mcp/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/mcp/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,YAAY,gFAOtB;IACD,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;CAClC,KAAG,MAkCU,CAAA"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAG9D,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAG9D,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,YACjB,cAAc,6EAC4E,aAAa;;iBAI9F,SAAS;CA2B5B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,YAAmB,cAAc,WAAW,aAAa,KAAG,OAAO,CAAC,IAAI,CAalG,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAWD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAWD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;IAWrB,YAAY,OAAO,EAAE,cAAc,EAAE,EAAE,MAAgB,EAAE,QAAkB,EAAE,GAAc,EAAE,GAAE,cAAmB,EAKjH;IAED,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAItG;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3B;CA6CF"}
|
package/dist/mcp/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAepD,qGAAqG;AACrG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAC,CAAA;AAQxH;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAgB;IACxB,OAAO,CAAQ;IACf,SAAS,CAAQ;IACjB,IAAI,CAAc;IAC3B,KAAK,CAAkB;IACvB,KAAK,CAA4B;IACjC,MAAM,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5C,OAAO,GAAW,GAAG,EAAE,GAAE,CAAC,CAAA;IAC1B,OAAO,GAAG,KAAK,CAAA;IAEf,YAAY,OAAuB,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAGf,MAAM,8BAA8B,CAAA;AAQrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAKzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAyX9C,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAGf,MAAM,8BAA8B,CAAA;AAQrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAKzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAyX9C,eAAO,MAAM,aAAa,WAChB,SAAS,WACR,UAAU,8GAUhB;IACD,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sGAAsG;IACtG,SAAS,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;CAClC,KACA,IAuCF,CAAA"}
|
package/dist/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,QAAQ,EAAqB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAElH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,QAAQ,EAAqB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAElH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,iDAAkE,aAAa;;;;;CAOxG,CAAA"}
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAkD,MAAM,mBAAmB,CAAA;AAYlH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAkD,MAAM,mBAAmB,CAAA;AAYlH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,GAAkB,EAAE,EAAE,EAAE;IAChH,MAAM,WAAW,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;IACxD,MAAM,MAAM,GAAiB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IACvF,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IACpF,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAEpE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC5F,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAY,EAAE,CAAC,CAAC;IACjD,GAAG,QAAQ;IACX,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;CACf,CAAC,CAAA"}
|
package/dist/profile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,eAAO,MAAM,eAAe,YAAY,CAAA;AAExC,kGAAkG;AAClG,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,eAAO,MAAM,eAAe,YAAY,CAAA;AAExC,kGAAkG;AAClG,eAAO,MAAM,WAAW,YAAa,MAAM,KAAG,MAA4D,CAAA;AAW1G,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MASnD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,YAAa,OAAO,KAAG,GAAG,CAAC,MAAM,CAC2C,CAAA;AAErG;;;;;GAKG;AACH,eAAO,MAAM,WAAW,SAAU,MAAM,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC,KAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAIlG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,YAAa,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAG,IASvE,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,MAAM,YAAa,OAAO,KAAG,OAIzC,CAAA"}
|
package/dist/program.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,OAAO,EAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,OAAO,EAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AASnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,uBAAuB,CAAA;AAqBjE,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,kBAAkB,cAAc,KAAQ,OAuEjE,CAAA;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,SAAgB,MAAM,EAAE,YAAW,UAAU,KAAQ,OAAO,CAAC,MAAM,CAmElF,CAAA"}
|
package/dist/program.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CliError, exitCodeFor, GENERIC_FAILURE, processStreams, visibleControls, } from "@leemour/cli-core";
|
|
2
2
|
import { Command, CommanderError } from "commander";
|
|
3
3
|
import { accountCommand } from "./commands/account.js";
|
|
4
|
+
import { backupCommand } from "./commands/backup.js";
|
|
4
5
|
import { cacheCommand } from "./commands/cache.js";
|
|
5
6
|
import { chatsCommand } from "./commands/chats.js";
|
|
6
7
|
import { commandsCommand } from "./commands/commands.js";
|
|
@@ -19,6 +20,7 @@ import { recipientsCommand } from "./commands/recipients.js";
|
|
|
19
20
|
import { runsCommand } from "./commands/runs.js";
|
|
20
21
|
import { sendsCommand } from "./commands/sends.js";
|
|
21
22
|
import { serveCommand } from "./commands/serve.js";
|
|
23
|
+
import { serverCommand } from "./commands/server.js";
|
|
22
24
|
import { sessionCommand } from "./commands/session.js";
|
|
23
25
|
import { skillCommand } from "./commands/skill.js";
|
|
24
26
|
import { selfUpdateCommand } from "./commands/update.js";
|
|
@@ -62,6 +64,7 @@ export const createProgram = ({ out, err } = {}) => {
|
|
|
62
64
|
program.addCommand(chatsCommand());
|
|
63
65
|
program.addCommand(contactsCommand());
|
|
64
66
|
program.addCommand(messagesCommand());
|
|
67
|
+
program.addCommand(backupCommand());
|
|
65
68
|
program.addCommand(exportCommand());
|
|
66
69
|
program.addCommand(modelsCommand());
|
|
67
70
|
program.addCommand(reactionsCommand());
|
|
@@ -69,6 +72,7 @@ export const createProgram = ({ out, err } = {}) => {
|
|
|
69
72
|
program.addCommand(sendsCommand());
|
|
70
73
|
program.addCommand(inboxCommand());
|
|
71
74
|
program.addCommand(serveCommand());
|
|
75
|
+
program.addCommand(serverCommand());
|
|
72
76
|
program.addCommand(watchCommand());
|
|
73
77
|
program.addCommand(configCommand());
|
|
74
78
|
program.addCommand(doctorCommand());
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,cAAc,EAEd,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAoB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AActC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { WebSocket } from "ws";
|
|
2
2
|
import { type InboundFrame, type Payload } from "./frame.js";
|
|
3
|
-
|
|
3
|
+
/** Where web.max.ru connects, read off its live socket on 2026-09-25. */
|
|
4
|
+
export declare const MAX_WEBSOCKET_URL = "wss://api.oneme.ru/websocket";
|
|
4
5
|
/** MAX's web client sends this; we send what it sends rather than announcing ourselves (§34). */
|
|
5
6
|
export declare const WEB_ORIGIN = "https://web.max.ru";
|
|
6
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,OAAO,EAEb,MAAM,YAAY,CAAA;AAEnB,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,iCAAiC,CAAA;AAC/D,iGAAiG;AACjG,eAAO,MAAM,UAAU,uBAAuB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gGAAgG;IAChG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,CAAA;CAC1D;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAEhC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAKnE;CACF;AAeD,+FAA+F;AAC/F,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhE,qBAAa,UAAU;;IAsBrB,YAAY,OAAO,GAAE,iBAAsB,EAQ1C;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAsB1B;IAED;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAmCxG;IAED;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB3B;CAuFF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { WebSocket } from "ws";
|
|
2
|
-
import { Command, decodeFrame, encodeFrame } from "./frame.js";
|
|
3
|
-
|
|
2
|
+
import { Command, decodeFrame, decodeHeader, encodeFrame, SEQ_MODULO, } from "./frame.js";
|
|
3
|
+
/** Where web.max.ru connects, read off its live socket on 2026-09-25. */
|
|
4
|
+
export const MAX_WEBSOCKET_URL = "wss://api.oneme.ru/websocket";
|
|
4
5
|
/** MAX's web client sends this; we send what it sends rather than announcing ourselves (§34). */
|
|
5
6
|
export const WEB_ORIGIN = "https://web.max.ru";
|
|
6
7
|
export class ProtocolError extends Error {
|
|
@@ -36,7 +37,7 @@ export class Connection {
|
|
|
36
37
|
#pending = new Map();
|
|
37
38
|
#socket;
|
|
38
39
|
#seq = 0;
|
|
39
|
-
#lastPush
|
|
40
|
+
#lastPush;
|
|
40
41
|
#closed = false;
|
|
41
42
|
constructor(options = {}) {
|
|
42
43
|
this.#url = options.url ?? MAX_WEBSOCKET_URL;
|
|
@@ -64,7 +65,7 @@ export class Connection {
|
|
|
64
65
|
socket.once("open", onOpen);
|
|
65
66
|
socket.once("error", onError);
|
|
66
67
|
});
|
|
67
|
-
socket.on("message", (data) => this.#receive(
|
|
68
|
+
socket.on("message", (data) => this.#receive(asBytes(data)));
|
|
68
69
|
socket.on("close", () => this.#lost(new Error("MAX closed the connection")));
|
|
69
70
|
socket.on("error", (error) => this.#lost(error));
|
|
70
71
|
}
|
|
@@ -89,8 +90,9 @@ export class Connection {
|
|
|
89
90
|
throw new Error("the connection is closed");
|
|
90
91
|
if (!this.#socket)
|
|
91
92
|
throw new Error("the connection is not open");
|
|
92
|
-
|
|
93
|
+
// The web client's INIT goes out as seq 0; the header holds two bytes, so the count wraps.
|
|
93
94
|
const seq = this.#seq;
|
|
95
|
+
this.#seq = (this.#seq + 1) % SEQ_MODULO;
|
|
94
96
|
const socket = this.#socket;
|
|
95
97
|
const answer = await new Promise((resolve, reject) => {
|
|
96
98
|
const timer = setTimeout(() => {
|
|
@@ -100,7 +102,7 @@ export class Connection {
|
|
|
100
102
|
this.#pending.set(seq, { resolve, reject, timer });
|
|
101
103
|
const sent = encodeFrame({ seq, opcode, payload });
|
|
102
104
|
socket.send(sent);
|
|
103
|
-
watch?.({ phase: "sent", seq, opcode, bytes:
|
|
105
|
+
watch?.({ phase: "sent", seq, opcode, bytes: sent.length });
|
|
104
106
|
});
|
|
105
107
|
const frame = answer.frame;
|
|
106
108
|
watch?.({ phase: "received", seq, opcode, bytes: answer.bytes });
|
|
@@ -145,8 +147,18 @@ export class Connection {
|
|
|
145
147
|
try {
|
|
146
148
|
frame = decodeFrame(raw);
|
|
147
149
|
}
|
|
148
|
-
catch {
|
|
149
|
-
|
|
150
|
+
catch (error) {
|
|
151
|
+
// A body we cannot read still has a header naming the request it answers. Failing that
|
|
152
|
+
// request with the reason beats letting it wait out its timeout as "MAX did not answer".
|
|
153
|
+
const header = safeHeader(raw);
|
|
154
|
+
const answers = header && (header.cmd === Command.RESPONSE || header.cmd === Command.ERROR);
|
|
155
|
+
const waiting = answers ? this.#pending.get(header.seq) : undefined;
|
|
156
|
+
if (!header || !waiting)
|
|
157
|
+
return;
|
|
158
|
+
clearTimeout(waiting.timer);
|
|
159
|
+
this.#pending.delete(header.seq);
|
|
160
|
+
waiting.reject(error instanceof Error ? error : new Error(String(error)));
|
|
161
|
+
return;
|
|
150
162
|
}
|
|
151
163
|
// MAX numbers its own frames, so a push can carry the very `seq` a request is waiting on. Only
|
|
152
164
|
// `cmd` tells an answer from a push — a lookup by `seq` alone once resolved a request with
|
|
@@ -155,17 +167,18 @@ export class Connection {
|
|
|
155
167
|
this.#pushed(frame);
|
|
156
168
|
return;
|
|
157
169
|
}
|
|
158
|
-
const waiting =
|
|
170
|
+
const waiting = this.#pending.get(frame.seq);
|
|
159
171
|
if (!waiting)
|
|
160
172
|
return;
|
|
161
173
|
clearTimeout(waiting.timer);
|
|
162
174
|
this.#pending.delete(frame.seq);
|
|
163
|
-
waiting.resolve({ frame, bytes:
|
|
175
|
+
waiting.resolve({ frame, bytes: raw.length });
|
|
164
176
|
}
|
|
165
177
|
#pushed(frame) {
|
|
166
|
-
if (this.#live
|
|
178
|
+
if (this.#live) {
|
|
167
179
|
// After a hiccup MAX sends some pushes again; the web client drops anything not newer.
|
|
168
|
-
|
|
180
|
+
// "Newer" is modular: a two-byte seq wraps, and a plain `<=` would drop every push after it.
|
|
181
|
+
if (this.#lastPush !== undefined && !isAfter(frame.seq, this.#lastPush))
|
|
169
182
|
return;
|
|
170
183
|
this.#lastPush = frame.seq;
|
|
171
184
|
if (frame.opcode === PING) {
|
|
@@ -174,12 +187,12 @@ export class Connection {
|
|
|
174
187
|
}
|
|
175
188
|
const message = frame.payload?.message;
|
|
176
189
|
if (frame.opcode === NEW_MESSAGE && typeof message === "object" && message !== null && "id" in message) {
|
|
177
|
-
//
|
|
190
|
+
// As bigints, so they go back wrapped the way the web client wraps an id.
|
|
178
191
|
this.#answer({
|
|
179
192
|
cmd: Command.RESPONSE,
|
|
180
193
|
seq: frame.seq,
|
|
181
194
|
opcode: NEW_MESSAGE,
|
|
182
|
-
payload: { chatId: frame.payload?.chatId, messageId: message.id },
|
|
195
|
+
payload: { chatId: asWireId(frame.payload?.chatId), messageId: asWireId(message.id) },
|
|
183
196
|
});
|
|
184
197
|
}
|
|
185
198
|
}
|
|
@@ -213,4 +226,22 @@ export class Connection {
|
|
|
213
226
|
this.#pending.clear();
|
|
214
227
|
}
|
|
215
228
|
}
|
|
229
|
+
const asBytes = (data) => {
|
|
230
|
+
if (Array.isArray(data))
|
|
231
|
+
return Buffer.concat(data);
|
|
232
|
+
return data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
233
|
+
};
|
|
234
|
+
const safeHeader = (raw) => {
|
|
235
|
+
try {
|
|
236
|
+
return decodeHeader(raw);
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const isAfter = (seq, last) => {
|
|
243
|
+
const distance = (seq - last + SEQ_MODULO) % SEQ_MODULO;
|
|
244
|
+
return distance > 0 && distance < SEQ_MODULO / 2;
|
|
245
|
+
};
|
|
246
|
+
const asWireId = (value) => typeof value === "number" && Number.isSafeInteger(value) ? BigInt(value) : value;
|
|
216
247
|
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol/frame.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The binary protocol web.max.ru speaks, captured from a live socket on 2026-09-25
|
|
3
|
+
* (`src/testing/fixtures/web-capture-2026-09-25.json`). JSON on protocol 11 was what we used to
|
|
4
|
+
* send, and nothing the web client sends looks like it.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PROTOCOL_VERSION = 10;
|
|
3
7
|
export declare const Command: {
|
|
4
8
|
readonly REQUEST: 0;
|
|
5
9
|
readonly RESPONSE: 1;
|
|
@@ -11,29 +15,33 @@ export type Payload = Record<string, unknown>;
|
|
|
11
15
|
export interface OutboundFrame {
|
|
12
16
|
seq: number;
|
|
13
17
|
opcode: number;
|
|
14
|
-
/** Absent
|
|
18
|
+
/** Absent, or empty, goes out as a zero-length body — as the web client's ping answer does. */
|
|
15
19
|
payload?: Payload;
|
|
16
20
|
cmd?: Command;
|
|
17
21
|
}
|
|
18
22
|
export interface InboundFrame {
|
|
19
23
|
ver: number;
|
|
20
24
|
cmd: number;
|
|
21
|
-
seq: number
|
|
25
|
+
seq: number;
|
|
22
26
|
opcode: number;
|
|
23
27
|
payload: Payload | null;
|
|
24
28
|
}
|
|
25
|
-
|
|
29
|
+
/** `ver` `cmd` `seq:u16` `opcode:u16` `flags:u8` `length:u24`, big-endian. */
|
|
30
|
+
export declare const HEADER_BYTES = 10;
|
|
31
|
+
export declare const SEQ_MODULO = 65536;
|
|
32
|
+
export declare const encodeFrame: (frame: OutboundFrame) => Uint8Array;
|
|
33
|
+
/** The header alone, so a body that cannot be read still says which request it answered. */
|
|
34
|
+
export declare const decodeHeader: (bytes: Uint8Array) => Omit<InboundFrame, "payload"> & {
|
|
35
|
+
flags: number;
|
|
36
|
+
length: number;
|
|
37
|
+
};
|
|
26
38
|
/**
|
|
27
|
-
* **
|
|
28
|
-
*
|
|
29
|
-
* `
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* ⚠ Measured 2026-09-19: **chat ids on the owner's account reach 14 digits, not 19**, and contact
|
|
33
|
-
* ids reach 9 — all comfortably inside a number. The hazard is real and it is the message ids that
|
|
34
|
-
* carry it; a 19-digit chat id is an illustration, not something seen.
|
|
39
|
+
* **Integers come back as `number` unless a number would lose digits.** MessagePack hands every
|
|
40
|
+
* 64-bit integer over as a `bigint`, and MAX sends times as 64-bit — a `bigint` timestamp breaks
|
|
41
|
+
* every `Date` and every subtraction above this layer. Message ids are 18 digits, past
|
|
42
|
+
* `Number.MAX_SAFE_INTEGER`, and stay `bigint`; every id leaves the domain mapper as a string.
|
|
35
43
|
*/
|
|
36
|
-
export declare const decodeFrame: (
|
|
44
|
+
export declare const decodeFrame: (bytes: Uint8Array) => InboundFrame;
|
|
37
45
|
export declare class FrameError extends Error {
|
|
38
46
|
constructor(what: string);
|
|
39
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/protocol/frame.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/protocol/frame.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAElC,eAAO,MAAM,OAAO;aAClB,OAAO,EAAE,CAAC;aACV,QAAQ,EAAE,CAAC;aACX,KAAK,EAAE,CAAC;aACR,KAAK,EAAE,CAAC;CACA,CAAA;AACV,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAA;AAE5D,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE7C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACxB;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,KAAK,CAAA;AAS9B,eAAO,MAAM,UAAU,QAAW,CAAA;AAKlC,eAAO,MAAM,WAAW,UAAW,aAAa,KAAG,UAwBlD,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,YAAY,UAAW,UAAU,KAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAgB/G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,UAAU,KAAG,YAW/C,CAAA;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,UAAW,OAAO,KAAG,MAAM,GAAG,SAK9C,CAAA"}
|
package/dist/protocol/frame.js
CHANGED
|
@@ -1,42 +1,89 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { decode, ExtData, ExtensionCodec, encode } from "@msgpack/msgpack";
|
|
2
|
+
import { compressBlock, decompressBlock } from "./lz4.js";
|
|
3
|
+
/**
|
|
4
|
+
* The binary protocol web.max.ru speaks, captured from a live socket on 2026-09-25
|
|
5
|
+
* (`src/testing/fixtures/web-capture-2026-09-25.json`). JSON on protocol 11 was what we used to
|
|
6
|
+
* send, and nothing the web client sends looks like it.
|
|
7
|
+
*/
|
|
8
|
+
export const PROTOCOL_VERSION = 10;
|
|
4
9
|
export const Command = {
|
|
5
10
|
REQUEST: 0,
|
|
6
11
|
RESPONSE: 1,
|
|
7
12
|
EVENT: 2,
|
|
8
13
|
ERROR: 3,
|
|
9
14
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/** `ver` `cmd` `seq:u16` `opcode:u16` `flags:u8` `length:u24`, big-endian. */
|
|
16
|
+
export const HEADER_BYTES = 10;
|
|
17
|
+
/** The web client sends 31 bytes plain and 37 compressed; where between them it switches was not seen. */
|
|
18
|
+
const COMPRESS_FROM = 32;
|
|
19
|
+
const ZSTD = 0xff;
|
|
20
|
+
const MAX_LZ4_FLAGS = 0x7f;
|
|
21
|
+
/** MAX wraps a number it means as a 64-bit id or time in extension type 1; so does the web client. */
|
|
22
|
+
const WRAPPED = 1;
|
|
23
|
+
export const SEQ_MODULO = 0x1_0000;
|
|
24
|
+
const wrapped = new ExtensionCodec();
|
|
25
|
+
wrapped.register({ type: WRAPPED, encode: () => null, decode: (data) => decodeBody(data) });
|
|
26
|
+
export const encodeFrame = (frame) => {
|
|
27
|
+
const raw = frame.payload && Object.keys(frame.payload).length > 0 ? encodeBody(frame.payload) : new Uint8Array(0);
|
|
28
|
+
let body = raw;
|
|
29
|
+
let flags = 0;
|
|
30
|
+
if (raw.length >= COMPRESS_FROM) {
|
|
31
|
+
const compressed = compressBlock(raw);
|
|
32
|
+
const factor = Math.ceil(raw.length / compressed.length);
|
|
33
|
+
if (factor <= MAX_LZ4_FLAGS) {
|
|
34
|
+
// Kept even when it came out larger: the web client does the same (47 bytes sent as 49).
|
|
35
|
+
body = compressed;
|
|
36
|
+
flags = factor;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const bytes = new Uint8Array(HEADER_BYTES + body.length);
|
|
40
|
+
const view = new DataView(bytes.buffer);
|
|
41
|
+
view.setUint8(0, PROTOCOL_VERSION);
|
|
42
|
+
view.setUint8(1, frame.cmd ?? Command.REQUEST);
|
|
43
|
+
view.setUint16(2, frame.seq % SEQ_MODULO);
|
|
44
|
+
view.setUint16(4, frame.opcode);
|
|
45
|
+
view.setUint32(6, ((flags << 24) | body.length) >>> 0);
|
|
46
|
+
bytes.set(body, HEADER_BYTES);
|
|
47
|
+
return bytes;
|
|
48
|
+
};
|
|
49
|
+
/** The header alone, so a body that cannot be read still says which request it answered. */
|
|
50
|
+
export const decodeHeader = (bytes) => {
|
|
51
|
+
if (bytes.length < HEADER_BYTES)
|
|
52
|
+
throw new FrameError(`a frame of ${bytes.length} bytes, shorter than its header`);
|
|
53
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
54
|
+
const packed = view.getUint32(6);
|
|
55
|
+
const header = {
|
|
56
|
+
ver: view.getUint8(0),
|
|
57
|
+
cmd: view.getUint8(1),
|
|
58
|
+
seq: view.getUint16(2),
|
|
59
|
+
opcode: view.getUint16(4),
|
|
60
|
+
flags: packed >>> 24,
|
|
61
|
+
length: packed & 0xff_ffff,
|
|
62
|
+
};
|
|
63
|
+
if (HEADER_BYTES + header.length > bytes.length) {
|
|
64
|
+
throw new FrameError(`a frame that claims ${header.length} bytes and carries ${bytes.length - HEADER_BYTES}`);
|
|
65
|
+
}
|
|
66
|
+
return header;
|
|
67
|
+
};
|
|
17
68
|
/**
|
|
18
|
-
* **
|
|
19
|
-
*
|
|
20
|
-
* `
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* ⚠ Measured 2026-09-19: **chat ids on the owner's account reach 14 digits, not 19**, and contact
|
|
24
|
-
* ids reach 9 — all comfortably inside a number. The hazard is real and it is the message ids that
|
|
25
|
-
* carry it; a 19-digit chat id is an illustration, not something seen.
|
|
69
|
+
* **Integers come back as `number` unless a number would lose digits.** MessagePack hands every
|
|
70
|
+
* 64-bit integer over as a `bigint`, and MAX sends times as 64-bit — a `bigint` timestamp breaks
|
|
71
|
+
* every `Date` and every subtraction above this layer. Message ids are 18 digits, past
|
|
72
|
+
* `Number.MAX_SAFE_INTEGER`, and stay `bigint`; every id leaves the domain mapper as a string.
|
|
26
73
|
*/
|
|
27
|
-
export const decodeFrame = (
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
74
|
+
export const decodeFrame = (bytes) => {
|
|
75
|
+
const { flags, length, ...header } = decodeHeader(bytes);
|
|
76
|
+
let body = bytes.subarray(HEADER_BYTES, HEADER_BYTES + length);
|
|
77
|
+
if (flags === ZSTD)
|
|
78
|
+
throw new FrameError("a zstd-compressed frame, which the web client was never seen receiving");
|
|
79
|
+
if (flags > MAX_LZ4_FLAGS)
|
|
80
|
+
throw new FrameError(`a frame with compression flags ${flags}`);
|
|
81
|
+
if (flags > 0)
|
|
82
|
+
body = decompressBlock(body, flags * length);
|
|
83
|
+
if (body.length === 0)
|
|
84
|
+
return { ...header, payload: null };
|
|
85
|
+
const value = decodeBody(body);
|
|
86
|
+
return { ...header, payload: isRecord(value) ? value : null };
|
|
40
87
|
};
|
|
41
88
|
export class FrameError extends Error {
|
|
42
89
|
constructor(what) {
|
|
@@ -57,12 +104,44 @@ export const asId = (value) => {
|
|
|
57
104
|
return value;
|
|
58
105
|
return undefined;
|
|
59
106
|
};
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
107
|
+
/** A `bigint` is an id we built from a string (`toWireId`), and goes out wrapped the way the web client wraps ids. */
|
|
108
|
+
const encodeBody = (payload) => encode(wrapBigints(payload), { extensionCodec: wrapped, useBigInt64: true, ignoreUndefined: true });
|
|
109
|
+
const decodeBody = (bytes) => narrow(decode(bytes, { extensionCodec: wrapped, useBigInt64: true, mapKeyConverter: asKey }));
|
|
110
|
+
/**
|
|
111
|
+
* ⚠ With `useBigInt64` the library writes every `number` past 32 bits as a **float64**, and MAX
|
|
112
|
+
* refuses a login whose time arrives as one (`proto.payload`, measured 2026-09-25). A whole number
|
|
113
|
+
* that wide goes out as a bare 64-bit integer instead, as the web client sends `from` and
|
|
114
|
+
* `contactsSync`; only a `bigint` — an id — is wrapped.
|
|
115
|
+
*/
|
|
116
|
+
const wrapBigints = (value) => {
|
|
117
|
+
if (typeof value === "bigint")
|
|
118
|
+
return new ExtData(WRAPPED, encode(value, { useBigInt64: true }));
|
|
119
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && (value > 0xffff_ffff || value < -0x8000_0000))
|
|
120
|
+
return BigInt(value);
|
|
121
|
+
if (Array.isArray(value))
|
|
122
|
+
return value.map(wrapBigints);
|
|
123
|
+
if (isRecord(value))
|
|
124
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, wrapBigints(item)]));
|
|
125
|
+
return value;
|
|
126
|
+
};
|
|
127
|
+
const narrow = (value) => {
|
|
128
|
+
if (typeof value === "bigint")
|
|
129
|
+
return Number.MIN_SAFE_INTEGER <= value && value <= Number.MAX_SAFE_INTEGER ? Number(value) : value;
|
|
130
|
+
if (Array.isArray(value))
|
|
131
|
+
return value.map(narrow);
|
|
132
|
+
if (isRecord(value)) {
|
|
133
|
+
for (const key of Object.keys(value))
|
|
134
|
+
value[key] = narrow(value[key]);
|
|
65
135
|
}
|
|
66
|
-
return
|
|
136
|
+
return value;
|
|
137
|
+
};
|
|
138
|
+
/** Map keys are chat and message ids as often as names; ours are always strings. */
|
|
139
|
+
const asKey = (key) => {
|
|
140
|
+
if (typeof key === "string")
|
|
141
|
+
return key;
|
|
142
|
+
if (typeof key === "number" || typeof key === "bigint")
|
|
143
|
+
return String(key);
|
|
144
|
+
throw new FrameError(`a map key of type ${typeof key}`);
|
|
67
145
|
};
|
|
146
|
+
const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && !(value instanceof Uint8Array);
|
|
68
147
|
//# sourceMappingURL=frame.js.map
|