@opengeni/contracts 1.0.1 → 2.3.0-canary.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/agent-authored-durable-text.d.ts +64 -0
- package/dist/atlassian.d.ts +1 -0
- package/dist/atlassian.js +14 -13
- package/dist/{chunk-Y3MLSLB4.js → chunk-3SIZGL3O.js} +42 -30
- package/dist/chunk-3SIZGL3O.js.map +1 -0
- package/dist/{chunk-JBCIY7QD.js → chunk-7RMTKFJW.js} +45 -22
- package/dist/chunk-7RMTKFJW.js.map +1 -0
- package/dist/{chunk-5UDNP7AO.js → chunk-MRWYRAS5.js} +56 -8
- package/dist/chunk-MRWYRAS5.js.map +1 -0
- package/dist/{chunk-LW7OH6CS.js → chunk-N6GRVXAJ.js} +6 -5
- package/dist/chunk-N6GRVXAJ.js.map +1 -0
- package/dist/{chunk-TZ6YEYN4.js → chunk-NVJMJWLL.js} +3 -1
- package/dist/chunk-NVJMJWLL.js.map +1 -0
- package/dist/chunk-PX3VCKAU.js +29 -0
- package/dist/chunk-PX3VCKAU.js.map +1 -0
- package/dist/{chunk-LSB7GRLG.js → chunk-TXTQIYCV.js} +15 -11
- package/dist/chunk-TXTQIYCV.js.map +1 -0
- package/dist/{chunk-NX5JNF4L.js → chunk-XW2RKNEU.js} +9410 -5799
- package/dist/chunk-XW2RKNEU.js.map +1 -0
- package/dist/{chunk-CADSX6UN.js → chunk-Y3KNXVTD.js} +2 -2
- package/dist/chunk-YBW5JSA3.js +251 -0
- package/dist/chunk-YBW5JSA3.js.map +1 -0
- package/dist/company-brain-governed-writes.d.ts +475 -0
- package/dist/company-brain.d.ts +398 -0
- package/dist/company-profile.d.ts +268 -0
- package/dist/connection-authority.d.ts +501 -0
- package/dist/connection-authority.js +364 -0
- package/dist/connection-authority.js.map +1 -0
- package/dist/connector-attachments.d.ts +95 -0
- package/dist/connector-attachments.js +51 -0
- package/dist/connector-attachments.js.map +1 -0
- package/dist/editable-artifact-codec-registry.d.ts +16 -7
- package/dist/editable-artifact-codec-registry.js +18 -8
- package/dist/editable-artifact-committed-transaction.d.ts +2 -2
- package/dist/editable-artifact-committed-transaction.js +2 -2
- package/dist/editable-artifact-live.d.ts +11 -12
- package/dist/editable-artifact-live.js +111 -46
- package/dist/editable-artifact-live.js.map +1 -1
- package/dist/editable-artifact-serialized-commit.d.ts +2 -1
- package/dist/editable-artifact-serialized-commit.js +9 -8
- package/dist/editable-artifact-versions.d.ts +20 -5
- package/dist/editable-artifact-versions.js +23 -5
- package/dist/editable-artifacts.d.ts +2 -0
- package/dist/editable-artifacts.js +51 -39
- package/dist/google-drive.d.ts +1 -0
- package/dist/google-drive.js +14 -13
- package/dist/google-drive.js.map +1 -1
- package/dist/governed-learning-activation.d.ts +154 -0
- package/dist/governed-learning-evaluator.d.ts +152 -0
- package/dist/index.d.ts +12426 -1313
- package/dist/index.js +855 -115
- package/dist/interaction.d.ts +68 -0
- package/dist/knowledge.d.ts +119 -0
- package/dist/organization-membership-lifecycle.d.ts +516 -0
- package/dist/permissions.d.ts +52 -0
- package/dist/personal-github.d.ts +319 -0
- package/dist/personal-github.js +209 -0
- package/dist/personal-github.js.map +1 -0
- package/dist/preference-registry.d.ts +17 -0
- package/dist/remember.d.ts +331 -0
- package/dist/sandbox-file-artifacts.d.ts +56 -0
- package/dist/sandbox-snapshots.d.ts +21 -0
- package/dist/slack-bot-scopes.d.ts +34 -14
- package/dist/slack-bot-scopes.js +5 -1
- package/dist/spreadsheet-artifact-commands.d.ts +2 -3
- package/dist/spreadsheet-artifact-commands.js +4 -2
- package/dist/spreadsheet-artifact-query.js +3 -2
- package/dist/task-notes.d.ts +42 -1
- package/dist/tool-result-spill.d.ts +16 -0
- package/dist/workspace-instruction-policies.d.ts +81 -0
- package/dist/workspace-learning-administration.d.ts +289 -0
- package/package.json +13 -1
- package/src/agent-authored-durable-text.ts +105 -0
- package/src/company-brain-governed-writes.ts +356 -0
- package/src/company-brain.ts +201 -0
- package/src/company-profile.ts +122 -1
- package/src/connection-authority.ts +413 -0
- package/src/connector-attachments.ts +327 -0
- package/src/editable-artifact-codec-registry.ts +55 -17
- package/src/editable-artifact-committed-transaction.ts +44 -31
- package/src/editable-artifact-live.ts +123 -57
- package/src/editable-artifact-serialized-commit.ts +2 -1
- package/src/editable-artifact-versions.ts +26 -5
- package/src/editable-artifacts.ts +2 -0
- package/src/governed-learning-activation.ts +191 -0
- package/src/governed-learning-evaluator.ts +176 -0
- package/src/index.ts +3148 -369
- package/src/interaction.ts +55 -1
- package/src/knowledge.ts +118 -6
- package/src/organization-membership-lifecycle.ts +330 -0
- package/src/permissions.ts +55 -0
- package/src/personal-github.ts +267 -0
- package/src/preference-registry.ts +17 -0
- package/src/remember.ts +242 -0
- package/src/sandbox-file-artifacts.ts +65 -0
- package/src/sandbox-snapshots.ts +78 -0
- package/src/slack-bot-scopes.ts +81 -9
- package/src/spreadsheet-artifact-commands.ts +12 -13
- package/src/task-notes.ts +14 -1
- package/src/tool-result-spill.ts +35 -0
- package/src/workspace-instruction-policies.ts +30 -0
- package/src/workspace-learning-administration.ts +88 -0
- package/dist/chunk-5UDNP7AO.js.map +0 -1
- package/dist/chunk-BVGIYW7D.js +0 -11
- package/dist/chunk-BVGIYW7D.js.map +0 -1
- package/dist/chunk-JBCIY7QD.js.map +0 -1
- package/dist/chunk-LSB7GRLG.js.map +0 -1
- package/dist/chunk-LW7OH6CS.js.map +0 -1
- package/dist/chunk-NX5JNF4L.js.map +0 -1
- package/dist/chunk-TZ6YEYN4.js.map +0 -1
- package/dist/chunk-Y3MLSLB4.js.map +0 -1
- /package/dist/{chunk-CADSX6UN.js.map → chunk-Y3KNXVTD.js.map} +0 -0
|
@@ -17,11 +17,18 @@ var OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [
|
|
|
17
17
|
"users:read"
|
|
18
18
|
];
|
|
19
19
|
var OPENGENI_SLACK_REACTION_REQUIRED_SCOPE = "reactions:read";
|
|
20
|
+
var OPENGENI_SLACK_BOT_SEARCH_SCOPES = [
|
|
21
|
+
"search:read.public",
|
|
22
|
+
"search:read.files",
|
|
23
|
+
"search:read.users"
|
|
24
|
+
];
|
|
20
25
|
var OPENGENI_SLACK_BOT_REQUESTED_SCOPES = [
|
|
21
26
|
...OPENGENI_SLACK_BOT_REQUIRED_SCOPES,
|
|
22
|
-
OPENGENI_SLACK_REACTION_REQUIRED_SCOPE
|
|
27
|
+
OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
|
|
28
|
+
...OPENGENI_SLACK_BOT_SEARCH_SCOPES
|
|
23
29
|
];
|
|
24
30
|
var OPENGENI_SLACK_BOT_EVENTS = [
|
|
31
|
+
"app_home_opened",
|
|
25
32
|
"app_mention",
|
|
26
33
|
"message.channels",
|
|
27
34
|
"message.groups",
|
|
@@ -57,6 +64,22 @@ var OPENGENI_SLACK_MCP_USER_SCOPES = [
|
|
|
57
64
|
"mpim:read"
|
|
58
65
|
];
|
|
59
66
|
var OPENGENI_MANAGED_PUBLIC_BASE_URL = "https://app.opengeni.ai";
|
|
67
|
+
function normalizedSlackManifestText(value, fallback, label, maxLength) {
|
|
68
|
+
const normalized = value?.trim() || fallback;
|
|
69
|
+
if (normalized.length > maxLength || /[\r\n\0]/u.test(normalized)) {
|
|
70
|
+
throw new Error(`Slack bot manifest ${label} must be at most ${maxLength} plain characters`);
|
|
71
|
+
}
|
|
72
|
+
return normalized;
|
|
73
|
+
}
|
|
74
|
+
function normalizedSlackCommand(value) {
|
|
75
|
+
const command = value?.trim() || "/opengeni";
|
|
76
|
+
if (!/^\/[a-z0-9_-]{1,31}$/u.test(command)) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
"Slack bot manifest slash command must start with / and contain at most 31 lowercase letters, digits, hyphens, or underscores"
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
return command;
|
|
82
|
+
}
|
|
60
83
|
function normalizedSlackManifestBaseUrl(publicBaseUrl) {
|
|
61
84
|
const parsed = new URL(publicBaseUrl);
|
|
62
85
|
if (parsed.protocol !== "https:" || parsed.username || parsed.password) {
|
|
@@ -67,15 +90,34 @@ function normalizedSlackManifestBaseUrl(publicBaseUrl) {
|
|
|
67
90
|
parsed.pathname = parsed.pathname.replace(/\/+$/, "");
|
|
68
91
|
return parsed.toString().replace(/\/$/, "");
|
|
69
92
|
}
|
|
70
|
-
function buildOpenGeniSlackBotManifest(publicBaseUrl) {
|
|
93
|
+
function buildOpenGeniSlackBotManifest(publicBaseUrl, options = {}) {
|
|
71
94
|
const baseUrl = normalizedSlackManifestBaseUrl(publicBaseUrl);
|
|
95
|
+
const appName = normalizedSlackManifestText(options.appName, "OpenGeni", "app name", 35);
|
|
96
|
+
const botDisplayName = normalizedSlackManifestText(
|
|
97
|
+
options.botDisplayName,
|
|
98
|
+
"OpenGeni",
|
|
99
|
+
"bot display name",
|
|
100
|
+
80
|
|
101
|
+
);
|
|
102
|
+
const slashCommand = normalizedSlackCommand(options.slashCommand);
|
|
103
|
+
const shortcutName = normalizedSlackManifestText(
|
|
104
|
+
options.shortcutName,
|
|
105
|
+
"Open in OpenGeni",
|
|
106
|
+
"shortcut name",
|
|
107
|
+
35
|
|
108
|
+
);
|
|
72
109
|
return {
|
|
73
|
-
display_information: { name:
|
|
110
|
+
display_information: { name: appName },
|
|
74
111
|
features: {
|
|
75
|
-
|
|
112
|
+
app_home: {
|
|
113
|
+
home_tab_enabled: true,
|
|
114
|
+
messages_tab_enabled: true,
|
|
115
|
+
messages_tab_read_only_enabled: false
|
|
116
|
+
},
|
|
117
|
+
bot_user: { display_name: botDisplayName, always_online: false },
|
|
76
118
|
slash_commands: [
|
|
77
119
|
{
|
|
78
|
-
command:
|
|
120
|
+
command: slashCommand,
|
|
79
121
|
description: "Start an OpenGeni task in this channel",
|
|
80
122
|
should_escape: false,
|
|
81
123
|
url: `${baseUrl}/v1/integrations/slack/commands`
|
|
@@ -85,7 +127,7 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl) {
|
|
|
85
127
|
{
|
|
86
128
|
callback_id: "opengeni_message",
|
|
87
129
|
description: "Start an OpenGeni task from this Slack message",
|
|
88
|
-
name:
|
|
130
|
+
name: shortcutName,
|
|
89
131
|
type: "message"
|
|
90
132
|
}
|
|
91
133
|
]
|
|
@@ -118,8 +160,12 @@ function buildOpenGeniSlackBotManifest(publicBaseUrl) {
|
|
|
118
160
|
}
|
|
119
161
|
var OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES = [
|
|
120
162
|
"team:read",
|
|
121
|
-
OPENGENI_SLACK_REACTION_REQUIRED_SCOPE
|
|
163
|
+
OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
|
|
164
|
+
...OPENGENI_SLACK_BOT_SEARCH_SCOPES
|
|
122
165
|
];
|
|
166
|
+
function hasOpenGeniSlackBotSearchScopes(grantedScopes) {
|
|
167
|
+
return OPENGENI_SLACK_BOT_SEARCH_SCOPES.every((scope) => grantedScopes.includes(scope));
|
|
168
|
+
}
|
|
123
169
|
var OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES = ["channels:join", "chat:write.public"];
|
|
124
170
|
function isOpenGeniSlackBotScopeAllowed(scope) {
|
|
125
171
|
return OPENGENI_SLACK_BOT_REQUIRED_SCOPES.includes(scope) || OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES.includes(scope);
|
|
@@ -144,15 +190,17 @@ function evaluateOpenGeniSlackBotScopes(grantedScopes) {
|
|
|
144
190
|
export {
|
|
145
191
|
OPENGENI_SLACK_BOT_REQUIRED_SCOPES,
|
|
146
192
|
OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,
|
|
193
|
+
OPENGENI_SLACK_BOT_SEARCH_SCOPES,
|
|
147
194
|
OPENGENI_SLACK_BOT_REQUESTED_SCOPES,
|
|
148
195
|
OPENGENI_SLACK_BOT_EVENTS,
|
|
149
196
|
OPENGENI_SLACK_MCP_USER_SCOPES,
|
|
150
197
|
OPENGENI_MANAGED_PUBLIC_BASE_URL,
|
|
151
198
|
buildOpenGeniSlackBotManifest,
|
|
152
199
|
OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES,
|
|
200
|
+
hasOpenGeniSlackBotSearchScopes,
|
|
153
201
|
OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES,
|
|
154
202
|
areOpenGeniSlackBotScopesAccepted,
|
|
155
203
|
hasOpenGeniSlackReactionScope,
|
|
156
204
|
evaluateOpenGeniSlackBotScopes
|
|
157
205
|
};
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-MRWYRAS5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/slack-bot-scopes.ts"],"sourcesContent":["export const OPENGENI_SLACK_BOT_REQUIRED_SCOPES = [\n \"app_mentions:read\",\n \"canvases:read\",\n \"channels:history\",\n \"channels:read\",\n \"chat:write\",\n \"commands\",\n \"files:read\",\n \"groups:history\",\n \"groups:read\",\n \"im:history\",\n \"im:read\",\n \"im:write\",\n \"mpim:history\",\n \"mpim:read\",\n \"users:read\",\n] as const;\n\n/** Read-only scope needed only for the optional emoji-reaction summon surface. */\nexport const OPENGENI_SLACK_REACTION_REQUIRED_SCOPE = \"reactions:read\" as const;\n\n/**\n * Bot-token search scopes for Slack's Real-time Search API\n * (`assistant.search.context`). Slack accepts these as BOT scopes, so\n * workspace-wide public search runs under the bot identity and never needs a\n * human proxy token. Private-channel, DM, and MPIM search remain user-token\n * only and belong exclusively to the personal hosted-MCP grant.\n */\nexport const OPENGENI_SLACK_BOT_SEARCH_SCOPES = [\n \"search:read.public\",\n \"search:read.files\",\n \"search:read.users\",\n] as const;\n\n/**\n * Scopes requested by the managed and generated self-hosted manifests.\n *\n * `reactions:read` and the bot search scopes are deliberately not part of the\n * base eligibility contract: legacy installations may continue using existing\n * Slack interactions and tools while the reaction setting stays disabled, bot\n * search stays unavailable, and the UI asks an admin to reinstall.\n */\nexport const OPENGENI_SLACK_BOT_REQUESTED_SCOPES = [\n ...OPENGENI_SLACK_BOT_REQUIRED_SCOPES,\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n ...OPENGENI_SLACK_BOT_SEARCH_SCOPES,\n] as const;\n\nexport const OPENGENI_SLACK_BOT_EVENTS = [\n \"app_home_opened\",\n \"app_mention\",\n \"message.channels\",\n \"message.groups\",\n \"message.im\",\n \"message.mpim\",\n \"reaction_added\",\n] as const;\n\n/** Full user-token scope set for every tool currently exposed by Slack's hosted MCP server. */\nexport const OPENGENI_SLACK_MCP_USER_SCOPES = [\n \"search:read.public\",\n \"search:read.private\",\n \"search:read.mpim\",\n \"search:read.im\",\n \"search:read.files\",\n \"files:read\",\n \"emoji:read\",\n \"search:read.users\",\n \"chat:write\",\n \"channels:history\",\n \"groups:history\",\n \"mpim:history\",\n \"im:history\",\n \"channels:write\",\n \"groups:write\",\n \"im:write\",\n \"mpim:write\",\n \"reactions:write\",\n \"canvases:read\",\n \"canvases:write\",\n \"users:read\",\n \"users:read.email\",\n \"channels:read\",\n \"groups:read\",\n \"mpim:read\",\n] as const;\n\nexport const OPENGENI_MANAGED_PUBLIC_BASE_URL = \"https://app.opengeni.ai\" as const;\n\nexport type OpenGeniSlackBotManifestOptions = Readonly<{\n appName?: string;\n botDisplayName?: string;\n slashCommand?: string;\n shortcutName?: string;\n}>;\n\nfunction normalizedSlackManifestText(\n value: string | undefined,\n fallback: string,\n label: string,\n maxLength: number,\n): string {\n const normalized = value?.trim() || fallback;\n if (normalized.length > maxLength || /[\\r\\n\\0]/u.test(normalized)) {\n throw new Error(`Slack bot manifest ${label} must be at most ${maxLength} plain characters`);\n }\n return normalized;\n}\n\nfunction normalizedSlackCommand(value: string | undefined): string {\n const command = value?.trim() || \"/opengeni\";\n if (!/^\\/[a-z0-9_-]{1,31}$/u.test(command)) {\n throw new Error(\n \"Slack bot manifest slash command must start with / and contain at most 31 lowercase letters, digits, hyphens, or underscores\",\n );\n }\n return command;\n}\n\nfunction normalizedSlackManifestBaseUrl(publicBaseUrl: string): string {\n const parsed = new URL(publicBaseUrl);\n if (parsed.protocol !== \"https:\" || parsed.username || parsed.password) {\n throw new Error(\"Slack bot manifest public base URL must be credential-free HTTPS\");\n }\n parsed.hash = \"\";\n parsed.search = \"\";\n parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\n/** Canonical managed/self-hosted Slack app manifest. Slack accepts JSON manifests. */\nexport function buildOpenGeniSlackBotManifest(\n publicBaseUrl: string,\n options: OpenGeniSlackBotManifestOptions = {},\n) {\n const baseUrl = normalizedSlackManifestBaseUrl(publicBaseUrl);\n const appName = normalizedSlackManifestText(options.appName, \"OpenGeni\", \"app name\", 35);\n const botDisplayName = normalizedSlackManifestText(\n options.botDisplayName,\n \"OpenGeni\",\n \"bot display name\",\n 80,\n );\n const slashCommand = normalizedSlackCommand(options.slashCommand);\n const shortcutName = normalizedSlackManifestText(\n options.shortcutName,\n \"Open in OpenGeni\",\n \"shortcut name\",\n 35,\n );\n return {\n display_information: { name: appName },\n features: {\n app_home: {\n home_tab_enabled: true,\n messages_tab_enabled: true,\n messages_tab_read_only_enabled: false,\n },\n bot_user: { display_name: botDisplayName, always_online: false },\n slash_commands: [\n {\n command: slashCommand,\n description: \"Start an OpenGeni task in this channel\",\n should_escape: false,\n url: `${baseUrl}/v1/integrations/slack/commands`,\n },\n ],\n shortcuts: [\n {\n callback_id: \"opengeni_message\",\n description: \"Start an OpenGeni task from this Slack message\",\n name: shortcutName,\n type: \"message\",\n },\n ],\n },\n oauth_config: {\n redirect_urls: [\n `${baseUrl}/v1/integrations/oauth/callback`,\n `${baseUrl}/v1/integrations/slack/callback`,\n ],\n scopes: {\n bot: [...OPENGENI_SLACK_BOT_REQUESTED_SCOPES],\n user: [...OPENGENI_SLACK_MCP_USER_SCOPES],\n },\n },\n settings: {\n event_subscriptions: {\n bot_events: [...OPENGENI_SLACK_BOT_EVENTS],\n request_url: `${baseUrl}/v1/integrations/slack/events`,\n },\n interactivity: {\n is_enabled: true,\n request_url: `${baseUrl}/v1/integrations/slack/interactions`,\n },\n is_mcp_enabled: true,\n org_deploy_enabled: false,\n socket_mode_enabled: false,\n token_rotation_enabled: false,\n },\n } as const;\n}\n\n/**\n * Optional bot grants that remain inside the shipped bot's read/identity\n * boundary. Every other unrequired scope fails closed, including unknown future\n * Slack scopes, so verification, core routing, and UI eligibility cannot drift.\n */\nexport const OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES = [\n \"team:read\",\n OPENGENI_SLACK_REACTION_REQUIRED_SCOPE,\n ...OPENGENI_SLACK_BOT_SEARCH_SCOPES,\n] as const;\n\nexport function hasOpenGeniSlackBotSearchScopes(grantedScopes: readonly string[]): boolean {\n return OPENGENI_SLACK_BOT_SEARCH_SCOPES.every((scope) => grantedScopes.includes(scope));\n}\n\n/** @deprecated Use evaluateOpenGeniSlackBotScopes; an allowlist is the policy. */\nexport const OPENGENI_SLACK_BOT_FORBIDDEN_SCOPES = [\"channels:join\", \"chat:write.public\"] as const;\n\nexport type OpenGeniSlackBotScopePolicy = {\n accepted: boolean;\n missingRequired: string[];\n unsupported: string[];\n};\n\nfunction isOpenGeniSlackBotScopeAllowed(scope: string): boolean {\n return (\n (OPENGENI_SLACK_BOT_REQUIRED_SCOPES as readonly string[]).includes(scope) ||\n (OPENGENI_SLACK_BOT_SAFE_OPTIONAL_SCOPES as readonly string[]).includes(scope)\n );\n}\n\nexport function areOpenGeniSlackBotScopesAccepted(grantedScopes: readonly string[]): boolean {\n return (\n OPENGENI_SLACK_BOT_REQUIRED_SCOPES.every((scope) => grantedScopes.includes(scope)) &&\n grantedScopes.every(isOpenGeniSlackBotScopeAllowed)\n );\n}\n\nexport function hasOpenGeniSlackReactionScope(grantedScopes: readonly string[]): boolean {\n return grantedScopes.includes(OPENGENI_SLACK_REACTION_REQUIRED_SCOPE);\n}\n\nexport function evaluateOpenGeniSlackBotScopes(\n grantedScopes: readonly string[],\n): OpenGeniSlackBotScopePolicy {\n const granted = new Set(grantedScopes);\n const missingRequired = OPENGENI_SLACK_BOT_REQUIRED_SCOPES.filter((scope) => !granted.has(scope));\n const unsupported = [...granted].filter((scope) => !isOpenGeniSlackBotScopeAllowed(scope)).sort();\n return {\n accepted: areOpenGeniSlackBotScopesAccepted(grantedScopes),\n missingRequired,\n unsupported,\n };\n}\n"],"mappings":";AAAO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,yCAAyC;AAS/C,IAAM,mCAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF;AAUO,IAAM,sCAAsC;AAAA,EACjD,GAAG;AAAA,EACH;AAAA,EACA,GAAG;AACL;AAEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,mCAAmC;AAShD,SAAS,4BACP,OACA,UACA,OACA,WACQ;AACR,QAAM,aAAa,OAAO,KAAK,KAAK;AACpC,MAAI,WAAW,SAAS,aAAa,YAAY,KAAK,UAAU,GAAG;AACjE,UAAM,IAAI,MAAM,sBAAsB,KAAK,oBAAoB,SAAS,mBAAmB;AAAA,EAC7F;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAmC;AACjE,QAAM,UAAU,OAAO,KAAK,KAAK;AACjC,MAAI,CAAC,wBAAwB,KAAK,OAAO,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,+BAA+B,eAA+B;AACrE,QAAM,SAAS,IAAI,IAAI,aAAa;AACpC,MAAI,OAAO,aAAa,YAAY,OAAO,YAAY,OAAO,UAAU;AACtE,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,SAAO,OAAO;AACd,SAAO,SAAS;AAChB,SAAO,WAAW,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACpD,SAAO,OAAO,SAAS,EAAE,QAAQ,OAAO,EAAE;AAC5C;AAGO,SAAS,8BACd,eACA,UAA2C,CAAC,GAC5C;AACA,QAAM,UAAU,+BAA+B,aAAa;AAC5D,QAAM,UAAU,4BAA4B,QAAQ,SAAS,YAAY,YAAY,EAAE;AACvF,QAAM,iBAAiB;AAAA,IACrB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,eAAe,uBAAuB,QAAQ,YAAY;AAChE,QAAM,eAAe;AAAA,IACnB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO;AAAA,IACL,qBAAqB,EAAE,MAAM,QAAQ;AAAA,IACrC,UAAU;AAAA,MACR,UAAU;AAAA,QACR,kBAAkB;AAAA,QAClB,sBAAsB;AAAA,QACtB,gCAAgC;AAAA,MAClC;AAAA,MACA,UAAU,EAAE,cAAc,gBAAgB,eAAe,MAAM;AAAA,MAC/D,gBAAgB;AAAA,QACd;AAAA,UACE,SAAS;AAAA,UACT,aAAa;AAAA,UACb,eAAe;AAAA,UACf,KAAK,GAAG,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,aAAa;AAAA,UACb,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,eAAe;AAAA,QACb,GAAG,OAAO;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,QACN,KAAK,CAAC,GAAG,mCAAmC;AAAA,QAC5C,MAAM,CAAC,GAAG,8BAA8B;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB;AAAA,QACnB,YAAY,CAAC,GAAG,yBAAyB;AAAA,QACzC,aAAa,GAAG,OAAO;AAAA,MACzB;AAAA,MACA,eAAe;AAAA,QACb,YAAY;AAAA,QACZ,aAAa,GAAG,OAAO;AAAA,MACzB;AAAA,MACA,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,MACrB,wBAAwB;AAAA,IAC1B;AAAA,EACF;AACF;AAOO,IAAM,0CAA0C;AAAA,EACrD;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,SAAS,gCAAgC,eAA2C;AACzF,SAAO,iCAAiC,MAAM,CAAC,UAAU,cAAc,SAAS,KAAK,CAAC;AACxF;AAGO,IAAM,sCAAsC,CAAC,iBAAiB,mBAAmB;AAQxF,SAAS,+BAA+B,OAAwB;AAC9D,SACG,mCAAyD,SAAS,KAAK,KACvE,wCAA8D,SAAS,KAAK;AAEjF;AAEO,SAAS,kCAAkC,eAA2C;AAC3F,SACE,mCAAmC,MAAM,CAAC,UAAU,cAAc,SAAS,KAAK,CAAC,KACjF,cAAc,MAAM,8BAA8B;AAEtD;AAEO,SAAS,8BAA8B,eAA2C;AACvF,SAAO,cAAc,SAAS,sCAAsC;AACtE;AAEO,SAAS,+BACd,eAC6B;AAC7B,QAAM,UAAU,IAAI,IAAI,aAAa;AACrC,QAAM,kBAAkB,mCAAmC,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC;AAChG,QAAM,cAAc,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,+BAA+B,KAAK,CAAC,EAAE,KAAK;AAChG,SAAO;AAAA,IACL,UAAU,kCAAkC,aAAa;AAAA,IACzD;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
decodeEditableArtifactMutationIntent,
|
|
4
4
|
encodeEditableArtifactMutationIntent,
|
|
5
5
|
hashEditableArtifactMutationIntentBytes
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NVJMJWLL.js";
|
|
7
7
|
import {
|
|
8
8
|
editableArtifactCodecFor
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7RMTKFJW.js";
|
|
10
10
|
import {
|
|
11
11
|
DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,
|
|
12
12
|
DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER
|
|
@@ -21,10 +21,12 @@ import {
|
|
|
21
21
|
fnv1a64,
|
|
22
22
|
strictUtf8
|
|
23
23
|
} from "./chunk-MYBZRDTY.js";
|
|
24
|
+
import {
|
|
25
|
+
EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION
|
|
26
|
+
} from "./chunk-PX3VCKAU.js";
|
|
24
27
|
|
|
25
28
|
// src/editable-artifact-serialized-commit.ts
|
|
26
29
|
import { bytesToHex } from "@noble/hashes/utils";
|
|
27
|
-
var EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION = 1;
|
|
28
30
|
var EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES = 8 * 1024 * 1024;
|
|
29
31
|
var EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES = 512 * 1024;
|
|
30
32
|
var MAGIC = strictUtf8("OGAST001", "serialized commit magic");
|
|
@@ -372,11 +374,10 @@ function assertUnsharedBytes(value, label) {
|
|
|
372
374
|
}
|
|
373
375
|
|
|
374
376
|
export {
|
|
375
|
-
EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,
|
|
376
377
|
EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES,
|
|
377
378
|
EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES,
|
|
378
379
|
encodeEditableArtifactSerializedCommit,
|
|
379
380
|
decodeEditableArtifactSerializedCommit,
|
|
380
381
|
assertCanonicalEditableArtifactSerializedCommit
|
|
381
382
|
};
|
|
382
|
-
//# sourceMappingURL=chunk-
|
|
383
|
+
//# sourceMappingURL=chunk-N6GRVXAJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifact-serialized-commit.ts"],"sourcesContent":["import { bytesToHex } from \"@noble/hashes/utils\";\n\nimport {\n ArtifactBinaryReader,\n ArtifactBinaryWriter,\n EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES,\n EDITABLE_ARTIFACT_BINARY_HEADER_BYTES,\n decodeCountedEnvelope,\n equalBytes,\n fnv1a64,\n strictUtf8,\n} from \"./editable-artifact-binary\";\nimport {\n DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER,\n} from \"./document-artifact-commands\";\nimport {\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n decodeEditableArtifactMutationIntent,\n encodeEditableArtifactMutationIntent,\n hashEditableArtifactMutationIntentBytes,\n type EditableArtifactMutationIntent,\n} from \"./editable-artifacts\";\nimport { editableArtifactCodecFor } from \"./editable-artifact-codec-registry\";\nimport { EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION } from \"./editable-artifact-versions\";\n\nexport { EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION } from \"./editable-artifact-versions\";\nexport const EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES = 8 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES = 512 * 1024;\n\nconst MAGIC = strictUtf8(\"OGAST001\", \"serialized commit magic\");\nconst SHA256_TEXT = /^sha256:[0-9a-f]{64}$/u;\nconst STABLE_ID = /^[0-9a-f]{32}$/u;\nconst DOCUMENT_RECEIPT_MAGIC = \"OGADR001\";\nconst PRESENTATION_RECEIPT_MAGIC = strictUtf8(\"OGAPR001\", \"presentation receipt magic\");\nconst DOCUMENT_RECEIPT_VERSION = 1;\nconst PRESENTATION_RECEIPT_VERSION = 1;\nconst DOCUMENT_CREATED_IDS_PER_COMMAND = 7;\nconst DOCUMENT_ID_BYTES = 17;\nconst PRESENTATION_RECEIPT_BYTES = 32;\nconst MODALITY_TAG = Object.freeze({ document: 1, presentation: 2 } as const);\n\nexport type EditableArtifactSerializedModality = \"document\" | \"presentation\";\n\nexport type EditableArtifactNativeReceiptSummary =\n | Readonly<{\n modality: \"document\";\n revision: number;\n commandCount: number;\n createdIdCount: number;\n }>\n | Readonly<{\n modality: \"presentation\";\n revision: number;\n commandCount: number;\n }>;\n\nexport type EditableArtifactSerializedCommitInput = Readonly<{\n modality: EditableArtifactSerializedModality;\n transactionId: string;\n parentHeadSequence: number;\n resultHeadSequence: number;\n /** Native model revision before applying this non-empty command batch. */\n priorNativeRevision: number;\n priorStateHash: string;\n stateHash: string;\n /** Exact canonical OGATX001 bytes accepted by the server. */\n intentBytes: Uint8Array;\n /** Exact canonical OGADR001 or OGAPR001 bytes returned by the native kernel. */\n nativeReceiptBytes: Uint8Array;\n}>;\n\nexport type EditableArtifactSerializedCommitSummary = Readonly<{\n commitProtocolVersion: typeof EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION;\n modality: EditableArtifactSerializedModality;\n transactionId: string;\n parentHeadSequence: number;\n resultHeadSequence: number;\n priorNativeRevision: number;\n priorStateHash: string;\n stateHash: string;\n requestHash: string;\n /** Canonical client intent nested in this authoritative commit. */\n intent: EditableArtifactMutationIntent;\n intentBytes: Uint8Array;\n nativeReceiptBytes: Uint8Array;\n nativeReceipt: EditableArtifactNativeReceiptSummary;\n}>;\n\n/**\n * Server-only encoder for one authoritative, strictly serialized commit.\n * Client identity remains solely in the exact nested OGATX envelope.\n */\nexport function encodeEditableArtifactSerializedCommit(\n input: EditableArtifactSerializedCommitInput,\n): Uint8Array {\n const normalized = normalizeSerializedCommit(input);\n const payload = new ArtifactBinaryWriter(\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES -\n EDITABLE_ARTIFACT_BINARY_HEADER_BYTES -\n EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES,\n );\n payload.stableId(normalized.transactionId, \"serialized transaction id\");\n payload.u64(normalized.parentHeadSequence);\n payload.u64(normalized.resultHeadSequence);\n payload.u64(normalized.priorNativeRevision);\n payload.bytes(hashBytes(normalized.priorStateHash));\n payload.bytes(hashBytes(normalized.stateHash));\n payload.u32(normalized.intentBytes.byteLength);\n payload.u32(normalized.nativeReceiptBytes.byteLength);\n payload.bytes(normalized.intentBytes);\n payload.bytes(normalized.nativeReceiptBytes);\n\n const payloadBytes = payload.finish();\n const output = new ArtifactBinaryWriter(EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES);\n output.bytes(MAGIC);\n output.u16(EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION);\n output.u16(0);\n output.u32(MODALITY_TAG[normalized.modality]);\n output.u64(payloadBytes.byteLength);\n output.bytes(payloadBytes);\n output.u64(fnv1a64(output.view()));\n return output.finish();\n}\n\n/** Durable modality must be selected before any nested receipt/command decode. */\nexport function decodeEditableArtifactSerializedCommit(\n bytes: Uint8Array,\n durableModality: EditableArtifactSerializedModality,\n): EditableArtifactSerializedCommitSummary {\n assertUnsharedBytes(bytes, \"serialized commit\");\n const modality = serializedModality(durableModality);\n if (bytes.byteLength > EDITABLE_ARTIFACT_SERIALIZED_COMMIT_MAX_BYTES) {\n throw new RangeError(\"serialized commit exceeds its byte limit\");\n }\n if (\n bytes.byteLength <\n EDITABLE_ARTIFACT_BINARY_HEADER_BYTES + EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES\n ) {\n throw new TypeError(\"truncated serialized commit envelope\");\n }\n const header = new ArtifactBinaryReader(bytes);\n if (!equalBytes(header.bytes(8), MAGIC)) {\n throw new TypeError(\"invalid serialized commit magic\");\n }\n if (header.u16() !== EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION) {\n throw new TypeError(\"unsupported serialized commit version\");\n }\n if (header.u16() !== 0) {\n throw new TypeError(\"reserved serialized commit flags must be zero\");\n }\n if (header.u32() !== MODALITY_TAG[modality]) {\n throw new TypeError(\"serialized commit modality disagrees with durable artifact\");\n }\n const payloadLength = header.u64Safe(\"serialized commit payload length\");\n const expectedLength =\n EDITABLE_ARTIFACT_BINARY_HEADER_BYTES + payloadLength + EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES;\n if (bytes.byteLength < expectedLength) {\n throw new TypeError(\"truncated serialized commit payload\");\n }\n if (bytes.byteLength > expectedLength) {\n throw new TypeError(\"serialized commit contains trailing bytes\");\n }\n const payloadBytes = header.bytes(payloadLength);\n const checksum = header.u64BigInt();\n header.done();\n if (\n checksum !==\n fnv1a64(bytes.subarray(0, bytes.byteLength - EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES))\n ) {\n throw new TypeError(\"serialized commit checksum does not match\");\n }\n\n const payload = new ArtifactBinaryReader(payloadBytes);\n const transactionId = payload.stableId(\"serialized transaction id\");\n const parentHeadSequence = payload.u64Safe(\"serialized parent head sequence\");\n const resultHeadSequence = payload.u64Safe(\"serialized result head sequence\");\n const priorNativeRevision = payload.u64Safe(\"serialized prior native revision\");\n const priorStateHash = stateHashText(payload.bytes(32));\n const stateHash = stateHashText(payload.bytes(32));\n const intentLength = payload.count(\n EDITABLE_ARTIFACT_INTENT_MAX_BYTES,\n \"serialized intent bytes\",\n 1,\n );\n const receiptLength = payload.count(\n EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES,\n \"serialized native receipt bytes\",\n 1,\n );\n if (payload.remaining !== intentLength + receiptLength) {\n throw new TypeError(\"serialized commit nested byte lengths are inconsistent\");\n }\n const intentBytes = payload.bytes(intentLength).slice();\n const nativeReceiptBytes = payload.bytes(receiptLength).slice();\n payload.done();\n\n const normalized = normalizeSerializedCommit({\n modality,\n transactionId,\n parentHeadSequence,\n resultHeadSequence,\n priorNativeRevision,\n priorStateHash,\n stateHash,\n intentBytes,\n nativeReceiptBytes,\n });\n const canonical = encodeEditableArtifactSerializedCommit(normalized);\n if (!equalBytes(bytes, canonical)) {\n throw new TypeError(\"serialized commit is not canonically encoded\");\n }\n return Object.freeze({\n commitProtocolVersion: EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n modality,\n transactionId,\n parentHeadSequence,\n resultHeadSequence,\n priorNativeRevision,\n priorStateHash,\n stateHash,\n requestHash: normalized.requestHash,\n intent: normalized.intent,\n intentBytes,\n nativeReceiptBytes,\n nativeReceipt: normalized.nativeReceipt,\n });\n}\n\nexport function assertCanonicalEditableArtifactSerializedCommit(\n bytes: Uint8Array,\n durableModality: EditableArtifactSerializedModality,\n): void {\n decodeEditableArtifactSerializedCommit(bytes, durableModality);\n}\n\ntype NormalizedSerializedCommit = EditableArtifactSerializedCommitInput &\n Readonly<{\n requestHash: string;\n intent: EditableArtifactMutationIntent;\n nativeReceipt: EditableArtifactNativeReceiptSummary;\n }>;\n\nfunction normalizeSerializedCommit(\n input: EditableArtifactSerializedCommitInput,\n): NormalizedSerializedCommit {\n const modality = serializedModality(input.modality);\n const transactionId = canonicalStableId(input.transactionId, \"serialized transaction id\");\n const parentHeadSequence = safeSequence(\n input.parentHeadSequence,\n \"serialized parent head sequence\",\n );\n const resultHeadSequence = safeSequence(\n input.resultHeadSequence,\n \"serialized result head sequence\",\n );\n if (resultHeadSequence !== parentHeadSequence + 1) {\n throw new TypeError(\"serialized commit must advance the durable head exactly once\");\n }\n const priorNativeRevision = safeSequence(\n input.priorNativeRevision,\n \"serialized prior native revision\",\n );\n const priorStateHash = canonicalSha256(input.priorStateHash, \"serialized prior state hash\");\n const stateHash = canonicalSha256(input.stateHash, \"serialized resulting state hash\");\n assertUnsharedBytes(input.intentBytes, \"serialized intent\");\n assertUnsharedBytes(input.nativeReceiptBytes, \"serialized native receipt\");\n if (\n input.intentBytes.byteLength < 1 ||\n input.intentBytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES\n ) {\n throw new RangeError(\"serialized intent bytes exceed their limit\");\n }\n if (\n input.nativeReceiptBytes.byteLength < 1 ||\n input.nativeReceiptBytes.byteLength > EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES\n ) {\n throw new RangeError(\"serialized native receipt bytes exceed their limit\");\n }\n const intentBytes = input.intentBytes.slice();\n const decodedIntent = decodeEditableArtifactMutationIntent(intentBytes);\n if (!equalBytes(intentBytes, encodeEditableArtifactMutationIntent(decodedIntent))) {\n throw new TypeError(\"nested serialized intent is not canonical OGATX001\");\n }\n if (\n decodedIntent.causalBase.length !== 0 ||\n decodedIntent.selectiveUndoOperationIds.length !== 0\n ) {\n throw new TypeError(\"serialized commits cannot carry CRDT causality or selective undo\");\n }\n if (decodedIntent.observedHeadSequence !== parentHeadSequence) {\n throw new TypeError(\"serialized intent observed head does not match its parent\");\n }\n const descriptor = editableArtifactCodecFor({\n durableModality: modality,\n modelSchemaVersion: decodedIntent.modelSchemaVersion,\n commandProtocolVersion: decodedIntent.commandProtocolVersion,\n });\n descriptor.command.assertCanonical(decodedIntent.commandBytes);\n const commandCount = decodedCommandCount(descriptor.command.decode(decodedIntent.commandBytes));\n if (commandCount < 1) {\n throw new TypeError(\"serialized commits require a non-empty command batch\");\n }\n const nativeReceiptBytes = input.nativeReceiptBytes.slice();\n const nativeReceipt = decodeNativeReceipt(modality, nativeReceiptBytes, commandCount);\n if (modality === \"presentation\") {\n if (nativeReceipt.revision !== priorNativeRevision + 1) {\n throw new TypeError(\n \"presentation receipt must advance its prior native revision exactly once\",\n );\n }\n if (stateHash === priorStateHash) {\n throw new TypeError(\"presentation commit must change its canonical state hash\");\n }\n } else if (nativeReceipt.revision === priorNativeRevision) {\n if (stateHash !== priorStateHash) {\n throw new TypeError(\"document no-op receipt cannot change the canonical state hash\");\n }\n } else {\n if (nativeReceipt.revision !== priorNativeRevision + 1) {\n throw new TypeError(\n \"document receipt must preserve or advance its prior native revision once\",\n );\n }\n if (stateHash === priorStateHash) {\n throw new TypeError(\"document revision advance must change the canonical state hash\");\n }\n }\n const requestHash = hashEditableArtifactMutationIntentBytes(intentBytes);\n return Object.freeze({\n modality,\n transactionId,\n parentHeadSequence,\n resultHeadSequence,\n priorNativeRevision,\n priorStateHash,\n stateHash,\n intentBytes,\n nativeReceiptBytes,\n requestHash,\n intent: decodedIntent,\n nativeReceipt,\n });\n}\n\nfunction decodeNativeReceipt(\n modality: EditableArtifactSerializedModality,\n bytes: Uint8Array,\n expectedCommandCount: number,\n): EditableArtifactNativeReceiptSummary {\n return modality === \"document\"\n ? decodeDocumentReceipt(bytes, expectedCommandCount)\n : decodePresentationReceipt(bytes, expectedCommandCount);\n}\n\nfunction decodeDocumentReceipt(\n bytes: Uint8Array,\n expectedCommandCount: number,\n): Extract<EditableArtifactNativeReceiptSummary, { modality: \"document\" }> {\n const envelope = decodeCountedEnvelope(\n bytes,\n DOCUMENT_RECEIPT_MAGIC,\n DOCUMENT_RECEIPT_VERSION,\n EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES,\n DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n );\n const payload = new ArtifactBinaryReader(envelope.payload);\n const revision = payload.u64Safe(\"document receipt revision\");\n const commandCount = payload.u32();\n if (commandCount !== envelope.count || commandCount !== expectedCommandCount) {\n throw new TypeError(\"document receipt command count does not match its intent\");\n }\n const maximumCreatedIds = commandCount * DOCUMENT_CREATED_IDS_PER_COMMAND;\n const createdIdCount = payload.count(\n maximumCreatedIds,\n \"document receipt created ids\",\n DOCUMENT_ID_BYTES,\n );\n for (let index = 0; index < createdIdCount; index += 1) {\n const tag = payload.u8();\n if (tag < 1 || tag > 8) {\n throw new TypeError(\"document receipt contains an invalid id kind\");\n }\n payload.u64BigInt();\n const counter = payload.u64BigInt();\n if (counter === 0n || counter > BigInt(DOCUMENT_ARTIFACT_MAX_STRUCTURAL_COUNTER)) {\n throw new TypeError(\"document receipt contains an invalid id counter\");\n }\n }\n payload.done(\"document receipt contains trailing bytes\");\n return Object.freeze({\n modality: \"document\",\n revision,\n commandCount,\n createdIdCount,\n });\n}\n\nfunction decodePresentationReceipt(\n bytes: Uint8Array,\n expectedCommandCount: number,\n): Extract<EditableArtifactNativeReceiptSummary, { modality: \"presentation\" }> {\n if (bytes.byteLength !== PRESENTATION_RECEIPT_BYTES) {\n throw new TypeError(\n bytes.byteLength < PRESENTATION_RECEIPT_BYTES\n ? \"truncated presentation receipt\"\n : \"presentation receipt contains trailing bytes\",\n );\n }\n const reader = new ArtifactBinaryReader(bytes);\n if (!equalBytes(reader.bytes(8), PRESENTATION_RECEIPT_MAGIC)) {\n throw new TypeError(\"invalid presentation receipt magic\");\n }\n if (reader.u16() !== PRESENTATION_RECEIPT_VERSION) {\n throw new TypeError(\"unsupported presentation receipt version\");\n }\n if (reader.u16() !== 0) {\n throw new TypeError(\"reserved presentation receipt flags must be zero\");\n }\n const revision = reader.u64Safe(\"presentation receipt revision\");\n const commandCount = reader.u32();\n if (commandCount !== expectedCommandCount) {\n throw new TypeError(\"presentation receipt command count does not match its intent\");\n }\n const checksum = reader.u64BigInt();\n reader.done();\n if (\n checksum !==\n fnv1a64(bytes.subarray(0, bytes.byteLength - EDITABLE_ARTIFACT_BINARY_CHECKSUM_BYTES))\n ) {\n throw new TypeError(\"presentation receipt checksum does not match\");\n }\n return Object.freeze({ modality: \"presentation\", revision, commandCount });\n}\n\nfunction decodedCommandCount(value: unknown): number {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"serialized command decoder returned an invalid batch\");\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, \"commands\");\n if (!descriptor || !(\"value\" in descriptor) || !Array.isArray(descriptor.value)) {\n throw new TypeError(\"serialized command decoder returned an invalid batch\");\n }\n return descriptor.value.length;\n}\n\nfunction serializedModality(value: unknown): EditableArtifactSerializedModality {\n if (value !== \"document\" && value !== \"presentation\") {\n throw new TypeError(\"serialized commit modality is invalid\");\n }\n return value;\n}\n\nfunction canonicalStableId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !STABLE_ID.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be a nonzero lowercase 128-bit hexadecimal id`);\n }\n return value;\n}\n\nfunction canonicalSha256(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !SHA256_TEXT.test(value)) {\n throw new TypeError(`${label} must be canonical sha256 text`);\n }\n return value;\n}\n\nfunction safeSequence(value: unknown, label: string): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${label} must be a nonnegative safe integer`);\n }\n return value;\n}\n\nfunction hashBytes(value: string): Uint8Array {\n const hex = value.slice(\"sha256:\".length);\n const bytes = new Uint8Array(32);\n for (let index = 0; index < bytes.byteLength; index += 1) {\n bytes[index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction stateHashText(value: Uint8Array): string {\n return `sha256:${bytesToHex(value)}`;\n}\n\nfunction assertUnsharedBytes(value: unknown, label: string): asserts value is Uint8Array {\n if (!(value instanceof Uint8Array)) {\n throw new TypeError(`${label} bytes must be a Uint8Array`);\n }\n if (typeof SharedArrayBuffer !== \"undefined\" && value.buffer instanceof SharedArrayBuffer) {\n throw new TypeError(`${label} bytes must not use shared mutable memory`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { sha256 } from "@noble/hashes/sha256";
|
|
3
3
|
import { bytesToHex } from "@noble/hashes/utils";
|
|
4
4
|
var EDITABLE_ARTIFACT_INTENT_VERSION = 1;
|
|
5
|
+
var EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION = 1;
|
|
5
6
|
var EDITABLE_ARTIFACT_INTENT_MAX_BYTES = 5 * 1024 * 1024;
|
|
6
7
|
var EDITABLE_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;
|
|
7
8
|
var EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES = 512;
|
|
@@ -371,6 +372,7 @@ var BinaryReader = class {
|
|
|
371
372
|
|
|
372
373
|
export {
|
|
373
374
|
EDITABLE_ARTIFACT_INTENT_VERSION,
|
|
375
|
+
EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,
|
|
374
376
|
EDITABLE_ARTIFACT_INTENT_MAX_BYTES,
|
|
375
377
|
EDITABLE_ARTIFACT_COMMAND_MAX_BYTES,
|
|
376
378
|
EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,
|
|
@@ -383,4 +385,4 @@ export {
|
|
|
383
385
|
hashEditableArtifactMutationIntent,
|
|
384
386
|
assertEditableArtifactRequestHash
|
|
385
387
|
};
|
|
386
|
-
//# sourceMappingURL=chunk-
|
|
388
|
+
//# sourceMappingURL=chunk-NVJMJWLL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifacts.ts"],"sourcesContent":["import { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\n\nexport * from \"./spreadsheet-artifact-commands\";\nexport * from \"./spreadsheet-artifact-query\";\nexport * from \"./editable-artifact-causal-frontier\";\nexport * from \"./document-artifact-commands\";\nexport * from \"./presentation-artifact-commands\";\nexport * from \"./editable-artifact-codec-registry\";\n\nexport const EDITABLE_ARTIFACT_INTENT_VERSION = 1 as const;\n/** Semantic protocol carried inside the unchanged OGATX001 envelope. */\nexport const EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION = 1 as const;\nexport const EDITABLE_ARTIFACT_INTENT_MAX_BYTES = 5 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES = 512;\n/** Largest durable snapshot every supported browser/WASM client can open. */\nexport const EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES = 64 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS = 1_024;\nexport const EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS = 10_000;\n\nconst MAGIC = new TextEncoder().encode(\"OGATX001\");\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nconst STABLE_ID = /^[0-9a-f]{32}$/u;\nconst REPLICA_ID = /^[0-9a-f]{16}$/u;\nconst CLIENT_TRANSACTION_ID = /^[A-Za-z0-9._:-]{1,200}$/u;\nconst REQUEST_HASH = /^sha256:[0-9a-f]{64}$/u;\n\nexport type EditableArtifactCausalEntry = Readonly<{\n replicaId: string;\n counter: number;\n}>;\n\n/**\n * Exact client-authored mutation identity. Scope and actor authority are\n * deliberately absent: the server derives them and binds them in the\n * idempotency lookup tuple instead of trusting client bytes.\n */\nexport type EditableArtifactMutationIntent = Readonly<{\n envelopeVersion: typeof EDITABLE_ARTIFACT_INTENT_VERSION;\n protocolVersion: number;\n modelSchemaVersion: number;\n commandProtocolVersion: number;\n artifactId: string;\n clientTransactionId: string;\n replicaId: string;\n replicaCounter: number;\n previousLocalTransactionId: string | null;\n observedHeadSequence: number;\n causalBase: readonly EditableArtifactCausalEntry[];\n selectiveUndoOperationIds: readonly string[];\n commandBytes: Uint8Array;\n}>;\n\nexport function encodeEditableArtifactMutationIntent(\n input: EditableArtifactMutationIntent,\n): Uint8Array {\n // The writer owns the emitted bytes, so a second eager copy of a potentially\n // multi-megabyte command block would add no safety.\n const intent = normalizeIntent(input, false);\n const writer = new BinaryWriter(EDITABLE_ARTIFACT_INTENT_MAX_BYTES);\n writer.bytes(MAGIC);\n writer.u16(intent.envelopeVersion);\n writer.u16(intent.protocolVersion);\n writer.u16(intent.modelSchemaVersion);\n writer.u16(intent.commandProtocolVersion);\n writer.string(intent.artifactId);\n writer.string(intent.clientTransactionId);\n writer.string(intent.replicaId);\n writer.u64(intent.replicaCounter);\n writer.u8(intent.previousLocalTransactionId === null ? 0 : 1);\n if (intent.previousLocalTransactionId !== null) {\n writer.string(intent.previousLocalTransactionId);\n }\n writer.u64(intent.observedHeadSequence);\n writer.u16(intent.causalBase.length);\n for (const entry of intent.causalBase) {\n writer.string(entry.replicaId);\n writer.u64(entry.counter);\n }\n writer.u16(intent.selectiveUndoOperationIds.length);\n for (const operationId of intent.selectiveUndoOperationIds) writer.string(operationId);\n writer.byteBlock(intent.commandBytes);\n return writer.finish();\n}\n\nexport function decodeEditableArtifactMutationIntent(\n bytes: Uint8Array,\n): EditableArtifactMutationIntent {\n return parseEditableArtifactMutationIntent(bytes, true);\n}\n\nfunction parseEditableArtifactMutationIntent(\n bytes: Uint8Array,\n copyCommandBytes: boolean,\n): EditableArtifactMutationIntent {\n if (!(bytes instanceof Uint8Array)) throw new TypeError(\"intent bytes must be a Uint8Array\");\n if (bytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES) {\n throw new RangeError(\"editable artifact intent exceeds its byte limit\");\n }\n const reader = new BinaryReader(bytes);\n const magic = reader.bytes(MAGIC.byteLength);\n if (!equalBytes(magic, MAGIC)) throw new TypeError(\"invalid editable artifact intent magic\");\n const envelopeVersion = reader.u16();\n if (envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION) {\n throw new TypeError(`unsupported editable artifact intent version: ${envelopeVersion}`);\n }\n const protocolVersion = reader.u16();\n const modelSchemaVersion = reader.u16();\n const commandProtocolVersion = reader.u16();\n const artifactId = reader.string();\n const clientTransactionId = reader.string();\n const replicaId = reader.string();\n const replicaCounter = reader.u64();\n const predecessorFlag = reader.u8();\n if (predecessorFlag > 1) throw new TypeError(\"invalid predecessor presence flag\");\n const previousLocalTransactionId = predecessorFlag === 1 ? reader.string() : null;\n const observedHeadSequence = reader.u64();\n const causalCount = reader.u16();\n if (causalCount > EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS) {\n throw new RangeError(\"editable artifact causal base exceeds its actor limit\");\n }\n const causalBase: EditableArtifactCausalEntry[] = [];\n let previousReplicaId = \"\";\n for (let index = 0; index < causalCount; index += 1) {\n const causalReplicaId = reader.string();\n if (causalReplicaId <= previousReplicaId) {\n throw new TypeError(\"causal base replica ids must be unique and canonically sorted\");\n }\n previousReplicaId = causalReplicaId;\n causalBase.push(Object.freeze({ replicaId: causalReplicaId, counter: reader.u64() }));\n }\n const undoCount = reader.u16();\n if (undoCount > EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS) {\n throw new RangeError(\"editable artifact undo targets exceed their limit\");\n }\n const selectiveUndoOperationIds: string[] = [];\n let previousOperationId = \"\";\n for (let index = 0; index < undoCount; index += 1) {\n const operationId = reader.string();\n if (operationId <= previousOperationId) {\n throw new TypeError(\"undo operation ids must be unique and canonically sorted\");\n }\n previousOperationId = operationId;\n selectiveUndoOperationIds.push(operationId);\n }\n const commandBytes = reader.byteBlock(EDITABLE_ARTIFACT_COMMAND_MAX_BYTES);\n reader.done();\n return normalizeIntent(\n {\n envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,\n protocolVersion,\n modelSchemaVersion,\n commandProtocolVersion,\n artifactId,\n clientTransactionId,\n replicaId,\n replicaCounter,\n previousLocalTransactionId,\n observedHeadSequence,\n causalBase,\n selectiveUndoOperationIds,\n commandBytes,\n },\n copyCommandBytes,\n );\n}\n\nexport function hashEditableArtifactMutationIntentBytes(bytes: Uint8Array): string {\n // Decode first so noncanonical or malformed bytes can never acquire a valid\n // application-level request hash merely because SHA-256 accepts any bytes.\n parseEditableArtifactMutationIntent(bytes, false);\n return `sha256:${bytesToHex(sha256(bytes))}`;\n}\n\nexport function hashEditableArtifactMutationIntent(intent: EditableArtifactMutationIntent): {\n bytes: Uint8Array;\n requestHash: string;\n} {\n const bytes = encodeEditableArtifactMutationIntent(intent);\n return { bytes, requestHash: `sha256:${bytesToHex(sha256(bytes))}` };\n}\n\nexport function assertEditableArtifactRequestHash(value: string): string {\n if (!REQUEST_HASH.test(value)) {\n throw new TypeError(\"editable artifact request hash must be canonical sha256 text\");\n }\n return value;\n}\n\nfunction normalizeIntent(\n input: EditableArtifactMutationIntent,\n copyCommandBytes = true,\n): EditableArtifactMutationIntent {\n if (!isPlainRecord(input)) throw new TypeError(\"editable artifact intent must be a plain record\");\n if (input.envelopeVersion !== EDITABLE_ARTIFACT_INTENT_VERSION) {\n throw new TypeError(\"editable artifact intent envelope version must be 1\");\n }\n const protocolVersion = positiveU16(input.protocolVersion, \"protocolVersion\");\n const modelSchemaVersion = positiveU16(input.modelSchemaVersion, \"modelSchemaVersion\");\n const commandProtocolVersion = positiveU16(\n input.commandProtocolVersion,\n \"commandProtocolVersion\",\n );\n const artifactId = stableId(input.artifactId, \"artifactId\");\n const clientTransactionId = portableTransactionId(\n input.clientTransactionId,\n \"clientTransactionId\",\n );\n const replicaId = replicaIdentity(input.replicaId, \"replicaId\");\n const replicaCounter = positiveSafeInteger(input.replicaCounter, \"replicaCounter\");\n const previousLocalTransactionId =\n input.previousLocalTransactionId === null\n ? null\n : portableTransactionId(input.previousLocalTransactionId, \"previousLocalTransactionId\");\n const observedHeadSequence = nonnegativeSafeInteger(\n input.observedHeadSequence,\n \"observedHeadSequence\",\n );\n if (!Array.isArray(input.causalBase)) throw new TypeError(\"causalBase must be an array\");\n if (input.causalBase.length > EDITABLE_ARTIFACT_INTENT_MAX_CAUSAL_ACTORS) {\n throw new RangeError(\"editable artifact causal base exceeds its actor limit\");\n }\n const causalByReplica = new Map<string, number>();\n for (const entry of input.causalBase) {\n if (!isPlainRecord(entry)) throw new TypeError(\"causal entries must be plain records\");\n const causalReplicaId = replicaIdentity(entry.replicaId, \"causal replicaId\");\n if (causalByReplica.has(causalReplicaId)) throw new TypeError(\"duplicate causal replicaId\");\n causalByReplica.set(\n causalReplicaId,\n positiveSafeInteger(entry.counter, `causal counter for ${causalReplicaId}`),\n );\n }\n const causalBase = [...causalByReplica]\n .sort(([left], [right]) => compareCodeUnits(left, right))\n .map(([causalReplicaId, counter]) => Object.freeze({ replicaId: causalReplicaId, counter }));\n if (!Array.isArray(input.selectiveUndoOperationIds)) {\n throw new TypeError(\"selectiveUndoOperationIds must be an array\");\n }\n if (input.selectiveUndoOperationIds.length > EDITABLE_ARTIFACT_INTENT_MAX_UNDO_TARGETS) {\n throw new RangeError(\"editable artifact undo targets exceed their limit\");\n }\n const undoSet = new Set<string>();\n for (const value of input.selectiveUndoOperationIds) {\n const operationId = stableId(value, \"selective undo operation id\");\n if (undoSet.has(operationId)) throw new TypeError(\"duplicate selective undo operation id\");\n undoSet.add(operationId);\n }\n const selectiveUndoOperationIds = [...undoSet].sort(compareCodeUnits);\n if (!(input.commandBytes instanceof Uint8Array)) {\n throw new TypeError(\"commandBytes must be a Uint8Array\");\n }\n if (input.commandBytes.byteLength < 1) throw new TypeError(\"commandBytes must not be empty\");\n if (input.commandBytes.byteLength > EDITABLE_ARTIFACT_COMMAND_MAX_BYTES) {\n throw new RangeError(\"commandBytes exceeds its byte limit\");\n }\n return Object.freeze({\n envelopeVersion: EDITABLE_ARTIFACT_INTENT_VERSION,\n protocolVersion,\n modelSchemaVersion,\n commandProtocolVersion,\n artifactId,\n clientTransactionId,\n replicaId,\n replicaCounter,\n previousLocalTransactionId,\n observedHeadSequence,\n causalBase: Object.freeze(causalBase),\n selectiveUndoOperationIds: Object.freeze(selectiveUndoOperationIds),\n commandBytes: copyCommandBytes ? input.commandBytes.slice() : input.commandBytes,\n });\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" && value !== null && Object.getPrototypeOf(value) === Object.prototype\n );\n}\n\nfunction stableId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !STABLE_ID.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);\n }\n return value;\n}\n\nfunction replicaIdentity(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !REPLICA_ID.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero 64-bit lowercase hexadecimal text`);\n }\n return value;\n}\n\nfunction portableTransactionId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !CLIENT_TRANSACTION_ID.test(value)) {\n throw new TypeError(`${label} must contain 1-200 portable identifier characters`);\n }\n return value;\n}\n\nfunction positiveU16(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 1 || (value as number) > 0xffff) {\n throw new TypeError(`${label} must be a positive 16-bit integer`);\n }\n return value as number;\n}\n\nfunction positiveSafeInteger(value: unknown, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 1) {\n throw new TypeError(`${label} must be a positive safe integer`);\n }\n return value as number;\n}\n\nfunction nonnegativeSafeInteger(value: unknown, label: string): number {\n if (!Number.isSafeInteger(value) || (value as number) < 0) {\n throw new TypeError(`${label} must be a nonnegative safe integer`);\n }\n return value as number;\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return (\n left.byteLength === right.byteLength && left.every((value, index) => value === right[index])\n );\n}\n\nclass BinaryWriter {\n private buffer = new Uint8Array(1_024);\n private length = 0;\n\n constructor(private readonly maximum: number) {}\n\n u8(value: number): void {\n this.ensure(1);\n this.buffer[this.length++] = value;\n }\n\n u16(value: number): void {\n this.ensure(2);\n this.buffer[this.length++] = value & 0xff;\n this.buffer[this.length++] = (value >>> 8) & 0xff;\n }\n\n u32(value: number): void {\n this.ensure(4);\n for (let offset = 0; offset < 4; offset += 1) {\n this.buffer[this.length++] = Math.floor(value / 2 ** (offset * 8)) & 0xff;\n }\n }\n\n u64(value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new TypeError(\"u64 must be safe\");\n this.ensure(8);\n let remaining = BigInt(value);\n for (let offset = 0; offset < 8; offset += 1) {\n this.buffer[this.length++] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n }\n\n string(value: string): void {\n const bytes = textEncoder.encode(value);\n if (bytes.byteLength > 0xffff) throw new RangeError(\"intent string exceeds 65535 bytes\");\n this.u16(bytes.byteLength);\n this.bytes(bytes);\n }\n\n byteBlock(value: Uint8Array): void {\n this.u32(value.byteLength);\n this.bytes(value);\n }\n\n bytes(value: Uint8Array): void {\n this.ensure(value.byteLength);\n this.buffer.set(value, this.length);\n this.length += value.byteLength;\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.length);\n }\n\n private ensure(additional: number): void {\n const needed = this.length + additional;\n if (!Number.isSafeInteger(needed) || needed > this.maximum) {\n throw new RangeError(\"editable artifact intent exceeds its byte limit\");\n }\n if (needed <= this.buffer.byteLength) return;\n let size = this.buffer.byteLength;\n while (size < needed) size = Math.min(this.maximum, size * 2);\n const next = new Uint8Array(size);\n next.set(this.buffer.subarray(0, this.length));\n this.buffer = next;\n }\n}\n\nclass BinaryReader {\n private offset = 0;\n\n constructor(private readonly input: Uint8Array) {}\n\n u8(): number {\n this.require(1);\n return this.input[this.offset++]!;\n }\n\n u16(): number {\n this.require(2);\n const value = this.input[this.offset]! | (this.input[this.offset + 1]! << 8);\n this.offset += 2;\n return value;\n }\n\n u32(): number {\n this.require(4);\n const value =\n this.input[this.offset]! +\n this.input[this.offset + 1]! * 2 ** 8 +\n this.input[this.offset + 2]! * 2 ** 16 +\n this.input[this.offset + 3]! * 2 ** 24;\n this.offset += 4;\n return value;\n }\n\n u64(): number {\n this.require(8);\n let value = 0n;\n for (let offset = 0; offset < 8; offset += 1) {\n value |= BigInt(this.input[this.offset + offset]!) << BigInt(offset * 8);\n }\n this.offset += 8;\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError(\"u64 exceeds safe integer\");\n return Number(value);\n }\n\n string(): string {\n return textDecoder.decode(this.bytes(this.u16()));\n }\n\n byteBlock(maximum: number): Uint8Array {\n const length = this.u32();\n if (length < 1) throw new TypeError(\"commandBytes must not be empty\");\n if (length > maximum) throw new RangeError(\"commandBytes exceeds its byte limit\");\n return this.bytes(length);\n }\n\n bytes(length: number): Uint8Array {\n this.require(length);\n const output = this.input.subarray(this.offset, this.offset + length);\n this.offset += length;\n return output;\n }\n\n done(): void {\n if (this.offset !== this.input.byteLength) {\n throw new TypeError(\"editable artifact intent contains trailing bytes\");\n }\n }\n\n private require(length: number): void {\n if (\n !Number.isSafeInteger(length) ||\n length < 0 ||\n this.offset + length > this.input.byteLength\n ) {\n throw new TypeError(\"truncated editable artifact intent\");\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/editable-artifact-versions.ts
|
|
2
|
+
var SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION = 2;
|
|
3
|
+
var DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION = 1;
|
|
4
|
+
var PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION = 1;
|
|
5
|
+
var SPREADSHEET_KERNEL_SNAPSHOT_VERSION = 2;
|
|
6
|
+
var DOCUMENT_ARTIFACT_SNAPSHOT_VERSION = 1;
|
|
7
|
+
var PRESENTATION_ARTIFACT_SNAPSHOT_VERSION = 1;
|
|
8
|
+
var SPREADSHEET_KERNEL_COMMAND_VERSION = 2;
|
|
9
|
+
var SPREADSHEET_ARTIFACT_COMMAND_VERSION = 2;
|
|
10
|
+
var SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION = 2;
|
|
11
|
+
var COMMITTED_TRANSACTION_PROTOCOL_VERSION = 2;
|
|
12
|
+
var EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION = 1;
|
|
13
|
+
var EDITABLE_ARTIFACT_LIVE_WIRE_VERSION = 2;
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
|
|
17
|
+
DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
|
|
18
|
+
PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
|
|
19
|
+
SPREADSHEET_KERNEL_SNAPSHOT_VERSION,
|
|
20
|
+
DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
|
|
21
|
+
PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
|
|
22
|
+
SPREADSHEET_KERNEL_COMMAND_VERSION,
|
|
23
|
+
SPREADSHEET_ARTIFACT_COMMAND_VERSION,
|
|
24
|
+
SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
|
|
25
|
+
COMMITTED_TRANSACTION_PROTOCOL_VERSION,
|
|
26
|
+
EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,
|
|
27
|
+
EDITABLE_ARTIFACT_LIVE_WIRE_VERSION
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chunk-PX3VCKAU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifact-versions.ts"],"sourcesContent":["/** Modality-specific durable semantic/schema versions. */\nexport const SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION = 2 as const;\nexport const DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION = 1 as const;\nexport const PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION = 1 as const;\n\n/** Direct kernel workbook snapshot version (OGARTK02), never the durable CRDT snapshot. */\nexport const SPREADSHEET_KERNEL_SNAPSHOT_VERSION = 2 as const;\n\n/** Modality-specific canonical snapshot versions. */\nexport const DOCUMENT_ARTIFACT_SNAPSHOT_VERSION = 1 as const;\nexport const PRESENTATION_ARTIFACT_SNAPSHOT_VERSION = 1 as const;\n\n/** Canonical internal spreadsheet kernel command-envelope version. */\nexport const SPREADSHEET_KERNEL_COMMAND_VERSION = 2 as const;\n\n/** Canonical public, identity-free spreadsheet command-envelope version. */\nexport const SPREADSHEET_ARTIFACT_COMMAND_VERSION = 2 as const;\n\n/** Canonical durable spreadsheet collaboration-snapshot version. */\nexport const SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION = 2 as const;\n\n/** Canonical committed spreadsheet transaction protocol version. */\nexport const COMMITTED_TRANSACTION_PROTOCOL_VERSION = 2 as const;\n\n/** Canonical document/presentation serialized-commit protocol version. */\nexport const EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION = 1 as const;\n\n/** Canonical editable-artifact live transport protocol version. */\nexport const EDITABLE_ARTIFACT_LIVE_WIRE_VERSION = 2 as const;\n"],"mappings":";AACO,IAAM,4CAA4C;AAClD,IAAM,yCAAyC;AAC/C,IAAM,6CAA6C;AAGnD,IAAM,sCAAsC;AAG5C,IAAM,qCAAqC;AAC3C,IAAM,yCAAyC;AAG/C,IAAM,qCAAqC;AAG3C,IAAM,uCAAuC;AAG7C,IAAM,6CAA6C;AAGnD,IAAM,yCAAyC;AAG/C,IAAM,8CAA8C;AAGpD,IAAM,sCAAsC;","names":[]}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SPREADSHEET_ARTIFACT_COMMAND_VERSION
|
|
3
|
+
} from "./chunk-PX3VCKAU.js";
|
|
4
|
+
|
|
1
5
|
// src/spreadsheet-artifact-date.ts
|
|
2
6
|
var ECMASCRIPT_DATE_MAX_MILLISECONDS = 8640000000000000n;
|
|
3
7
|
function canonicalSpreadsheetDateMilliseconds(value) {
|
|
@@ -15,13 +19,12 @@ function canonicalSpreadsheetDateFromMilliseconds(milliseconds) {
|
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
// src/spreadsheet-artifact-commands.ts
|
|
18
|
-
var SPREADSHEET_ARTIFACT_COMMAND_VERSION = 1;
|
|
19
22
|
var SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;
|
|
20
23
|
var SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS = 4096;
|
|
21
24
|
var SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS = 1e6;
|
|
22
25
|
var SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES = 1 * 1024 * 1024;
|
|
23
26
|
var SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS = 31;
|
|
24
|
-
var MAGIC = new TextEncoder().encode("
|
|
27
|
+
var MAGIC = new TextEncoder().encode("OGASC002");
|
|
25
28
|
var HEADER_BYTES = 8 + 2 + 2 + 4 + 8;
|
|
26
29
|
var CHECKSUM_BYTES = 8;
|
|
27
30
|
var textEncoder = new TextEncoder();
|
|
@@ -349,7 +352,7 @@ function batchRecord(input) {
|
|
|
349
352
|
const batch = plainRecord(input, "spreadsheet command batch");
|
|
350
353
|
exactKeys(batch, ["commands", "version"], "spreadsheet command batch");
|
|
351
354
|
if (batch.version !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {
|
|
352
|
-
throw new TypeError("spreadsheet command batch version must be
|
|
355
|
+
throw new TypeError("spreadsheet command batch version must be 2");
|
|
353
356
|
}
|
|
354
357
|
if (!Array.isArray(batch.commands)) throw new TypeError("commands must be an array");
|
|
355
358
|
if (batch.commands.length < 1 || batch.commands.length > SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS) {
|
|
@@ -573,13 +576,12 @@ var BinaryWriter = class {
|
|
|
573
576
|
cell(value) {
|
|
574
577
|
if (isFormulaCell(value)) {
|
|
575
578
|
const cell = plainRecord(value, "formula cell");
|
|
576
|
-
exactKeys(cell, ["
|
|
579
|
+
exactKeys(cell, ["formula"], "formula cell");
|
|
577
580
|
if (typeof cell.formula !== "string" || cell.formula.length === 0) {
|
|
578
581
|
throw new TypeError("formula source must be a nonempty string");
|
|
579
582
|
}
|
|
580
583
|
this.u8(1);
|
|
581
584
|
this.string(cell.formula, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);
|
|
582
|
-
this.scalar(cell.cached);
|
|
583
585
|
return;
|
|
584
586
|
}
|
|
585
587
|
this.u8(0);
|
|
@@ -692,9 +694,12 @@ var BinaryReader = class {
|
|
|
692
694
|
cell() {
|
|
693
695
|
const formulaTag = this.u8();
|
|
694
696
|
if (formulaTag > 1) throw new TypeError("spreadsheet formula presence tag is invalid");
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
697
|
+
if (formulaTag === 1) {
|
|
698
|
+
return Object.freeze({
|
|
699
|
+
formula: this.nonemptyFormula(this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES))
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
return this.scalar();
|
|
698
703
|
}
|
|
699
704
|
done(message) {
|
|
700
705
|
if (this.offset !== this.input.byteLength) throw new TypeError(message);
|
|
@@ -752,7 +757,7 @@ function isFormulaCell(value) {
|
|
|
752
757
|
return typeof value === "object" && value !== null && !Array.isArray(value) && Object.hasOwn(value, "formula");
|
|
753
758
|
}
|
|
754
759
|
function isFormulaError(value) {
|
|
755
|
-
return typeof value === "object" && value !== null && !Array.isArray(value) &&
|
|
760
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && Object.hasOwn(value, "error");
|
|
756
761
|
}
|
|
757
762
|
function isDateValue(value) {
|
|
758
763
|
return typeof value === "object" && value !== null && !Array.isArray(value) && Object.hasOwn(value, "date");
|
|
@@ -764,7 +769,6 @@ function canonicalDateMilliseconds(value) {
|
|
|
764
769
|
export {
|
|
765
770
|
canonicalSpreadsheetDateMilliseconds,
|
|
766
771
|
canonicalSpreadsheetDateFromMilliseconds,
|
|
767
|
-
SPREADSHEET_ARTIFACT_COMMAND_VERSION,
|
|
768
772
|
SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,
|
|
769
773
|
SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,
|
|
770
774
|
SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS,
|
|
@@ -776,4 +780,4 @@ export {
|
|
|
776
780
|
decodeSpreadsheetArtifactCommandBatch,
|
|
777
781
|
assertCanonicalSpreadsheetArtifactCommandBytes
|
|
778
782
|
};
|
|
779
|
-
//# sourceMappingURL=chunk-
|
|
783
|
+
//# sourceMappingURL=chunk-TXTQIYCV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/spreadsheet-artifact-date.ts","../src/spreadsheet-artifact-commands.ts"],"sourcesContent":["const ECMASCRIPT_DATE_MAX_MILLISECONDS = 8_640_000_000_000_000n;\n\n/** Parses only the exact string form emitted by `Date.prototype.toISOString`. */\nexport function canonicalSpreadsheetDateMilliseconds(value: unknown): number {\n const milliseconds = typeof value === \"string\" ? Date.parse(value) : Number.NaN;\n if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {\n throw new TypeError(\"date must be canonical ISO\");\n }\n return milliseconds;\n}\n\n/** Converts a signed wire integer to a canonical ISO instant without lossy coercion. */\nexport function canonicalSpreadsheetDateFromMilliseconds(milliseconds: bigint): string {\n if (\n milliseconds < -ECMASCRIPT_DATE_MAX_MILLISECONDS ||\n milliseconds > ECMASCRIPT_DATE_MAX_MILLISECONDS\n ) {\n throw new RangeError(\"date outside supported range\");\n }\n return new Date(Number(milliseconds)).toISOString();\n}\n","import {\n canonicalSpreadsheetDateFromMilliseconds,\n canonicalSpreadsheetDateMilliseconds,\n} from \"./spreadsheet-artifact-date\";\nimport { SPREADSHEET_ARTIFACT_COMMAND_VERSION } from \"./editable-artifact-versions\";\n\n/**\n * Canonical, identity-free spreadsheet mutation commands nested inside\n * `OGATX001`. Artifact, actor, transaction, delivery, and causal identity must\n * never be added here: the outer authored-intent envelope is their sole wire\n * authority.\n */\n\nexport { SPREADSHEET_ARTIFACT_COMMAND_VERSION } from \"./editable-artifact-versions\";\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES = 4 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS = 4_096;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS = 1_000_000;\nexport const SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES = 1 * 1024 * 1024;\nexport const SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS = 31;\n\nconst MAGIC = new TextEncoder().encode(\"OGASC002\");\nconst HEADER_BYTES = 8 + 2 + 2 + 4 + 8;\nconst CHECKSUM_BYTES = 8;\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nconst LOWER_HEX_ID = /^[0-9a-f]{32}$/u;\nconst UINT64_HEX_ZERO = \"0\".repeat(16);\nconst UINT32_MAX = 0xffff_ffff;\nconst FNV_OFFSET = 0xcbf29ce484222325n;\nconst FNV_PRIME = 0x100000001b3n;\n\ndeclare const stableIdBrand: unique symbol;\n\n/** Fixed-width lowercase hexadecimal 128-bit id. Runtime helpers enforce use. */\nexport type EditableArtifactStableId = string & {\n readonly [stableIdBrand]: \"EditableArtifactStableId\";\n};\n\n/**\n * A concrete sheet generation. The object id follows the offline allocator\n * invariant (both 64-bit halves nonzero); a derived operation id reserves only\n * the all-zero 128-bit value.\n */\nexport type SpreadsheetSheetGeneration = Readonly<{\n kind: \"generation\";\n sheetId: EditableArtifactStableId;\n creationOperationId: EditableArtifactStableId;\n}>;\n\n/**\n * Reference to a sheet created by an earlier command in this same batch.\n * This avoids recursively embedding the creation operation id, which is\n * derived from the hash of the complete outer intent.\n */\nexport type SpreadsheetPriorCreatePrecondition = Readonly<{\n kind: \"created-in-batch\";\n sheetId: EditableArtifactStableId;\n createCommandIndex: number;\n}>;\n\nexport type SpreadsheetSheetPrecondition =\n | SpreadsheetSheetGeneration\n | SpreadsheetPriorCreatePrecondition;\n\nexport type SpreadsheetCellPoint = Readonly<{ row: number; column: number }>;\nexport type SpreadsheetCellRange = Readonly<{\n start: SpreadsheetCellPoint;\n end: SpreadsheetCellPoint;\n}>;\n\nexport type SpreadsheetFormulaError = Readonly<{ error: string }>;\nexport type SpreadsheetDateValue = Readonly<{ date: string }>;\nexport type SpreadsheetCellScalar =\n | null\n | boolean\n | number\n | string\n | SpreadsheetDateValue\n | SpreadsheetFormulaError;\nexport type SpreadsheetFormulaCell = Readonly<{\n formula: string;\n}>;\nexport type SpreadsheetCellInput = SpreadsheetCellScalar | SpreadsheetFormulaCell;\n\nexport type SpreadsheetCreateSheetCommand = Readonly<{\n kind: \"sheet.create\";\n sheetId: EditableArtifactStableId;\n name: string;\n after: SpreadsheetSheetPrecondition | null;\n}>;\n\nexport type SpreadsheetRenameSheetCommand = Readonly<{\n kind: \"sheet.rename\";\n sheet: SpreadsheetSheetPrecondition;\n name: string;\n}>;\n\nexport type SpreadsheetDeleteSheetCommand = Readonly<{\n kind: \"sheet.delete\";\n sheet: SpreadsheetSheetPrecondition;\n}>;\n\n/** Row-major rectangular write; `cells.length === rows * columns`. */\nexport type SpreadsheetSetCellsCommand = Readonly<{\n kind: \"cells.set\";\n sheet: SpreadsheetSheetPrecondition;\n anchor: SpreadsheetCellPoint;\n rows: number;\n columns: number;\n cells: readonly SpreadsheetCellInput[];\n}>;\n\nexport type SpreadsheetClearRangeCommand = Readonly<{\n kind: \"range.clear\";\n sheet: SpreadsheetSheetPrecondition;\n range: SpreadsheetCellRange;\n}>;\n\nexport type SpreadsheetArtifactCommand =\n | SpreadsheetCreateSheetCommand\n | SpreadsheetRenameSheetCommand\n | SpreadsheetDeleteSheetCommand\n | SpreadsheetSetCellsCommand\n | SpreadsheetClearRangeCommand;\n\nexport type SpreadsheetArtifactCommandBatch = Readonly<{\n version: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;\n commands: readonly SpreadsheetArtifactCommand[];\n}>;\n\n/** Validates a generic nonzero 128-bit id and returns its nominal type. */\nexport function editableArtifactStableId(value: string): EditableArtifactStableId {\n return genericStableId(value, \"stable id\");\n}\n\n/** Validates a sheet object id with nonzero allocator namespace and counter. */\nexport function spreadsheetSheetId(value: string): EditableArtifactStableId {\n return sheetObjectId(value, \"sheet id\");\n}\n\nexport function encodeSpreadsheetArtifactCommandBatch(\n input: SpreadsheetArtifactCommandBatch,\n): Uint8Array {\n const batch = batchRecord(input);\n const payload = new BinaryWriter(\n SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES,\n );\n const context = new CommandContext();\n for (let index = 0; index < batch.commands.length; index += 1) {\n const command = ownArrayElement(batch.commands, index, \"commands\");\n encodeCommand(payload, command, index, context);\n }\n\n const payloadBytes = payload.finish();\n const output = new BinaryWriter(SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES);\n output.bytes(MAGIC);\n output.u16(SPREADSHEET_ARTIFACT_COMMAND_VERSION);\n output.u16(0);\n output.u32(batch.commands.length);\n output.u64(BigInt(payloadBytes.byteLength));\n output.bytes(payloadBytes);\n output.u64(fnv1a64(output.view()));\n return output.finish();\n}\n\nexport function decodeSpreadsheetArtifactCommandBatch(\n bytes: Uint8Array,\n): SpreadsheetArtifactCommandBatch {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError(\"spreadsheet command bytes must be a Uint8Array\");\n }\n if (bytes.byteLength > SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES) {\n throw new RangeError(\"spreadsheet command envelope exceeds its byte limit\");\n }\n if (bytes.byteLength < HEADER_BYTES + CHECKSUM_BYTES) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n const header = new BinaryReader(bytes);\n if (!equalBytes(header.bytes(MAGIC.byteLength), MAGIC)) {\n throw new TypeError(\"invalid spreadsheet command magic\");\n }\n const version = header.u16();\n if (version !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {\n throw new TypeError(`unsupported spreadsheet command version: ${version}`);\n }\n if (header.u16() !== 0) {\n throw new TypeError(\"spreadsheet command reserved flags must be zero\");\n }\n const commandCount = header.u32();\n if (commandCount < 1 || commandCount > SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS) {\n throw new RangeError(\"spreadsheet command count is outside its limit\");\n }\n const payloadLength = safeLength(header.u64(), \"spreadsheet command payload\");\n const expectedLength = HEADER_BYTES + payloadLength + CHECKSUM_BYTES;\n if (bytes.byteLength < expectedLength) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n if (bytes.byteLength > expectedLength) {\n throw new TypeError(\"spreadsheet command envelope contains trailing bytes\");\n }\n const advertisedChecksum = readU64At(bytes, expectedLength - CHECKSUM_BYTES);\n const actualChecksum = fnv1a64(bytes.subarray(0, expectedLength - CHECKSUM_BYTES));\n if (advertisedChecksum !== actualChecksum) {\n throw new TypeError(\"spreadsheet command checksum does not match\");\n }\n\n const payload = new BinaryReader(bytes.subarray(HEADER_BYTES, HEADER_BYTES + payloadLength));\n const context = new CommandContext();\n const commands: SpreadsheetArtifactCommand[] = [];\n for (let index = 0; index < commandCount; index += 1) {\n commands.push(decodeCommand(payload, index, context));\n }\n payload.done(\"spreadsheet command payload contains trailing bytes\");\n return Object.freeze({\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n commands: Object.freeze(commands),\n });\n}\n\n/** Decodes, re-encodes, and proves byte-for-byte canonicality. */\nexport function assertCanonicalSpreadsheetArtifactCommandBytes(bytes: Uint8Array): Uint8Array {\n const canonical = encodeSpreadsheetArtifactCommandBatch(\n decodeSpreadsheetArtifactCommandBatch(bytes),\n );\n if (!equalBytes(bytes, canonical)) {\n throw new TypeError(\"spreadsheet command envelope is not canonical\");\n }\n return bytes;\n}\n\nclass CommandContext {\n readonly createdByIndex = new Map<number, string>();\n readonly createdSheetIds = new Set<string>();\n totalCells = 0;\n\n registerCreate(index: number, sheetId: string): void {\n if (this.createdSheetIds.has(sheetId)) {\n throw commandError(index, \"sheet id is created more than once in the batch\");\n }\n this.createdByIndex.set(index, sheetId);\n this.createdSheetIds.add(sheetId);\n }\n\n addCells(index: number, rows: number, columns: number): number {\n const count = rows * columns;\n if (!Number.isSafeInteger(count) || count < 1) {\n throw commandError(index, \"cell block dimensions are invalid\");\n }\n const next = this.totalCells + count;\n if (!Number.isSafeInteger(next) || next > SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS) {\n throw commandError(index, \"cell count exceeds its transaction limit\");\n }\n this.totalCells = next;\n return count;\n }\n}\n\nfunction encodeCommand(\n writer: BinaryWriter,\n value: unknown,\n index: number,\n context: CommandContext,\n): void {\n const command = plainRecord(value, `spreadsheet command ${index}`);\n switch (command.kind) {\n case \"sheet.create\": {\n exactKeys(command, [\"after\", \"kind\", \"name\", \"sheetId\"], `spreadsheet command ${index}`);\n const sheetId = sheetObjectId(command.sheetId, `spreadsheet command ${index} sheetId`);\n const name = sheetName(command.name, index);\n writer.u8(0);\n writer.stableId(sheetId);\n writer.string(name, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n if (command.after === null) {\n writer.u8(0);\n } else {\n writer.u8(1);\n encodeSheetPrecondition(writer, command.after, index, context);\n }\n context.registerCreate(index, sheetId);\n break;\n }\n case \"sheet.rename\": {\n exactKeys(command, [\"kind\", \"name\", \"sheet\"], `spreadsheet command ${index}`);\n writer.u8(1);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.string(sheetName(command.name, index), SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n break;\n }\n case \"sheet.delete\": {\n exactKeys(command, [\"kind\", \"sheet\"], `spreadsheet command ${index}`);\n writer.u8(2);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n break;\n }\n case \"cells.set\": {\n exactKeys(\n command,\n [\"anchor\", \"cells\", \"columns\", \"kind\", \"rows\", \"sheet\"],\n `spreadsheet command ${index}`,\n );\n const anchor = point(command.anchor, `spreadsheet command ${index} anchor`);\n const rows = positiveU32(command.rows, `spreadsheet command ${index} rows`);\n const columns = positiveU32(command.columns, `spreadsheet command ${index} columns`);\n assertExtent(anchor.row, rows, \"row\", index);\n assertExtent(anchor.column, columns, \"column\", index);\n const count = context.addCells(index, rows, columns);\n if (!Array.isArray(command.cells) || command.cells.length !== count) {\n throw commandError(index, `cells must contain exactly ${count} row-major values`);\n }\n writer.u8(3);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.u32(anchor.row);\n writer.u32(anchor.column);\n writer.u32(rows);\n writer.u32(columns);\n for (let cellIndex = 0; cellIndex < count; cellIndex += 1) {\n writer.cell(\n ownArrayElement(command.cells, cellIndex, `spreadsheet command ${index} cells`),\n );\n }\n break;\n }\n case \"range.clear\": {\n exactKeys(command, [\"kind\", \"range\", \"sheet\"], `spreadsheet command ${index}`);\n const range = cellRange(command.range, index);\n writer.u8(4);\n encodeSheetPrecondition(writer, command.sheet, index, context);\n writer.u32(range.start.row);\n writer.u32(range.start.column);\n writer.u32(range.end.row);\n writer.u32(range.end.column);\n break;\n }\n default:\n throw commandError(index, \"unknown command kind\");\n }\n}\n\nfunction decodeCommand(\n reader: BinaryReader,\n index: number,\n context: CommandContext,\n): SpreadsheetArtifactCommand {\n switch (reader.u8()) {\n case 0: {\n const sheetId = reader.sheetObjectId();\n const name = decodedSheetName(\n reader.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES),\n index,\n );\n const afterFlag = reader.u8();\n if (afterFlag > 1) throw commandError(index, \"after presence flag is invalid\");\n const after = afterFlag === 1 ? decodeSheetPrecondition(reader, index, context) : null;\n context.registerCreate(index, sheetId);\n return Object.freeze({ kind: \"sheet.create\", sheetId, name, after });\n }\n case 1:\n return Object.freeze({\n kind: \"sheet.rename\",\n sheet: decodeSheetPrecondition(reader, index, context),\n name: decodedSheetName(reader.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES), index),\n });\n case 2:\n return Object.freeze({\n kind: \"sheet.delete\",\n sheet: decodeSheetPrecondition(reader, index, context),\n });\n case 3: {\n const sheet = decodeSheetPrecondition(reader, index, context);\n const anchor = frozenPoint(reader.u32(), reader.u32());\n const rows = reader.u32();\n const columns = reader.u32();\n if (rows === 0 || columns === 0) {\n throw commandError(index, \"cell block dimensions must be nonzero\");\n }\n assertExtent(anchor.row, rows, \"row\", index);\n assertExtent(anchor.column, columns, \"column\", index);\n const count = context.addCells(index, rows, columns);\n const cells: SpreadsheetCellInput[] = [];\n for (let cellIndex = 0; cellIndex < count; cellIndex += 1) cells.push(reader.cell());\n return Object.freeze({\n kind: \"cells.set\",\n sheet,\n anchor,\n rows,\n columns,\n cells: Object.freeze(cells),\n });\n }\n case 4: {\n const sheet = decodeSheetPrecondition(reader, index, context);\n const start = frozenPoint(reader.u32(), reader.u32());\n const end = frozenPoint(reader.u32(), reader.u32());\n if (start.row > end.row || start.column > end.column) {\n throw commandError(index, \"clear range endpoints are not ordered\");\n }\n return Object.freeze({\n kind: \"range.clear\",\n sheet,\n range: Object.freeze({ start, end }),\n });\n }\n default:\n throw commandError(index, \"unknown binary command tag\");\n }\n}\n\nfunction encodeSheetPrecondition(\n writer: BinaryWriter,\n value: unknown,\n commandIndex: number,\n context: CommandContext,\n): void {\n const input = plainRecord(value, `spreadsheet command ${commandIndex} sheet precondition`);\n if (input.kind === \"generation\") {\n exactKeys(\n input,\n [\"creationOperationId\", \"kind\", \"sheetId\"],\n `spreadsheet command ${commandIndex} sheet generation`,\n );\n writer.u8(0);\n writer.stableId(sheetObjectId(input.sheetId, \"sheet generation sheetId\"));\n writer.stableId(genericStableId(input.creationOperationId, \"sheet creation operation id\"));\n return;\n }\n if (input.kind === \"created-in-batch\") {\n exactKeys(\n input,\n [\"createCommandIndex\", \"kind\", \"sheetId\"],\n `spreadsheet command ${commandIndex} prior-create precondition`,\n );\n const sheetId = sheetObjectId(input.sheetId, \"prior-create sheetId\");\n const createCommandIndex = nonnegativeU32(\n input.createCommandIndex,\n \"prior-create command index\",\n );\n assertPriorCreate(context, commandIndex, createCommandIndex, sheetId);\n writer.u8(1);\n writer.stableId(sheetId);\n writer.u32(createCommandIndex);\n return;\n }\n throw commandError(commandIndex, \"unknown sheet precondition kind\");\n}\n\nfunction decodeSheetPrecondition(\n reader: BinaryReader,\n commandIndex: number,\n context: CommandContext,\n): SpreadsheetSheetPrecondition {\n switch (reader.u8()) {\n case 0:\n return Object.freeze({\n kind: \"generation\",\n sheetId: reader.sheetObjectId(),\n creationOperationId: reader.genericStableId(),\n });\n case 1: {\n const sheetId = reader.sheetObjectId();\n const createCommandIndex = reader.u32();\n assertPriorCreate(context, commandIndex, createCommandIndex, sheetId);\n return Object.freeze({\n kind: \"created-in-batch\",\n sheetId,\n createCommandIndex,\n });\n }\n default:\n throw commandError(commandIndex, \"unknown sheet precondition tag\");\n }\n}\n\nfunction assertPriorCreate(\n context: CommandContext,\n commandIndex: number,\n createCommandIndex: number,\n sheetId: string,\n): void {\n if (createCommandIndex >= commandIndex) {\n throw commandError(commandIndex, \"prior-create reference must point to an earlier command\");\n }\n if (context.createdByIndex.get(createCommandIndex) !== sheetId) {\n throw commandError(\n commandIndex,\n \"prior-create reference must match the referenced create command and sheet id\",\n );\n }\n}\n\nfunction batchRecord(input: unknown): SpreadsheetArtifactCommandBatch {\n const batch = plainRecord(input, \"spreadsheet command batch\");\n exactKeys(batch, [\"commands\", \"version\"], \"spreadsheet command batch\");\n if (batch.version !== SPREADSHEET_ARTIFACT_COMMAND_VERSION) {\n throw new TypeError(\"spreadsheet command batch version must be 2\");\n }\n if (!Array.isArray(batch.commands)) throw new TypeError(\"commands must be an array\");\n if (\n batch.commands.length < 1 ||\n batch.commands.length > SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS\n ) {\n throw new RangeError(\"spreadsheet command count is outside its limit\");\n }\n return input as SpreadsheetArtifactCommandBatch;\n}\n\nfunction cellRange(value: unknown, index: number): SpreadsheetCellRange {\n const range = plainRecord(value, `spreadsheet command ${index} range`);\n exactKeys(range, [\"end\", \"start\"], `spreadsheet command ${index} range`);\n const start = point(range.start, `spreadsheet command ${index} range start`);\n const end = point(range.end, `spreadsheet command ${index} range end`);\n if (start.row > end.row || start.column > end.column) {\n throw commandError(index, \"clear range endpoints are not ordered\");\n }\n return { start, end };\n}\n\nfunction point(value: unknown, label: string): SpreadsheetCellPoint {\n const input = plainRecord(value, label);\n exactKeys(input, [\"column\", \"row\"], label);\n return {\n row: nonnegativeU32(input.row, `${label} row`),\n column: nonnegativeU32(input.column, `${label} column`),\n };\n}\n\nfunction frozenPoint(row: number, column: number): SpreadsheetCellPoint {\n return Object.freeze({ row, column });\n}\n\nfunction sheetName(value: unknown, index: number): string {\n if (typeof value !== \"string\") throw commandError(index, \"sheet name must be a string\");\n return decodedSheetName(value, index);\n}\n\nfunction decodedSheetName(value: string, index: number): string {\n const bytes = strictUtf8(value, \"sheet name\");\n const forbidden = /[\\\\/?*[\\]:\\0]/u.test(value);\n if (\n bytes.byteLength === 0 ||\n value.trim() !== value ||\n value.length > SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS ||\n forbidden\n ) {\n throw commandError(index, \"sheet name does not match the public spreadsheet model\");\n }\n return value;\n}\n\nfunction genericStableId(value: unknown, label: string): EditableArtifactStableId {\n if (typeof value !== \"string\" || !LOWER_HEX_ID.test(value) || /^0+$/u.test(value)) {\n throw new TypeError(`${label} must be nonzero fixed-width lowercase hexadecimal text`);\n }\n return value as EditableArtifactStableId;\n}\n\nfunction sheetObjectId(value: unknown, label: string): EditableArtifactStableId {\n const id = genericStableId(value, label);\n if (id.slice(0, 16) === UINT64_HEX_ZERO || id.slice(16) === UINT64_HEX_ZERO) {\n throw new TypeError(`${label} must have a nonzero namespace and counter`);\n }\n return id;\n}\n\nfunction positiveU32(value: unknown, label: string): number {\n const output = nonnegativeU32(value, label);\n if (output === 0) throw new TypeError(`${label} must be positive`);\n return output;\n}\n\nfunction nonnegativeU32(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 0 || (value as number) > UINT32_MAX) {\n throw new TypeError(`${label} must be a uint32`);\n }\n return value as number;\n}\n\nfunction assertExtent(start: number, length: number, axis: string, index: number): void {\n if (length - 1 > UINT32_MAX - start) {\n throw commandError(index, `${axis} extent exceeds uint32 coordinates`);\n }\n}\n\nfunction safeLength(value: bigint, label: string): number {\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError(`${label} length is unsafe`);\n const length = Number(value);\n if (length > SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES - HEADER_BYTES - CHECKSUM_BYTES) {\n throw new RangeError(`${label} exceeds its byte limit`);\n }\n return length;\n}\n\nfunction plainRecord(value: unknown, label: string): Record<string, unknown> {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n ) {\n throw new TypeError(`${label} must be a plain record`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction exactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n label: string,\n): void {\n const keys = Reflect.ownKeys(value);\n if (keys.some((key) => typeof key !== \"string\")) {\n throw new TypeError(`${label} contains unsupported symbol fields`);\n }\n const actual = (keys as string[]).sort(compareCodeUnits);\n if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {\n throw new TypeError(`${label} fields must be exactly: ${expected.join(\", \")}`);\n }\n for (const key of actual) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} fields must be enumerable data properties`);\n }\n }\n}\n\nfunction ownArrayElement(value: readonly unknown[], index: number, label: string): unknown {\n if (!Object.hasOwn(value, index)) throw new TypeError(`${label} must be dense`);\n return value[index];\n}\n\nfunction commandError(index: number, message: string): TypeError {\n return new TypeError(`spreadsheet command ${index}: ${message}`);\n}\n\nfunction strictUtf8(value: string, label: string): Uint8Array {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n index += 1;\n } else if (code >= 0xdc00 && code <= 0xdfff) {\n throw new TypeError(`${label} contains an unpaired surrogate`);\n }\n }\n return textEncoder.encode(value);\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction fnv1a64(bytes: Uint8Array): bigint {\n let hash = FNV_OFFSET;\n for (const byte of bytes) {\n hash ^= BigInt(byte);\n hash = BigInt.asUintN(64, hash * FNV_PRIME);\n }\n return hash;\n}\n\nfunction equalBytes(left: Uint8Array, right: Uint8Array): boolean {\n return (\n left.byteLength === right.byteLength && left.every((value, index) => value === right[index])\n );\n}\n\nfunction readU64At(bytes: Uint8Array, offset: number): bigint {\n let value = 0n;\n for (let index = 0; index < 8; index += 1) {\n value |= BigInt(bytes[offset + index]!) << BigInt(index * 8);\n }\n return value;\n}\n\nconst STANDARD_ERROR_TAGS = Object.freeze({\n \"#NULL!\": 0,\n \"#DIV/0!\": 1,\n \"#VALUE!\": 2,\n \"#REF!\": 3,\n \"#NAME?\": 4,\n \"#NUM!\": 5,\n \"#N/A\": 6,\n \"#SPILL!\": 7,\n \"#CALC!\": 8,\n} satisfies Record<string, number>);\n\nconst STANDARD_ERRORS = Object.freeze([\n \"#NULL!\",\n \"#DIV/0!\",\n \"#VALUE!\",\n \"#REF!\",\n \"#NAME?\",\n \"#NUM!\",\n \"#N/A\",\n \"#SPILL!\",\n \"#CALC!\",\n] as const);\n\nclass BinaryWriter {\n private buffer: Uint8Array;\n private viewBuffer: DataView;\n private length = 0;\n\n constructor(private readonly maximum: number) {\n this.buffer = new Uint8Array(Math.min(1_024, maximum));\n this.viewBuffer = new DataView(this.buffer.buffer);\n }\n\n view(): Uint8Array {\n return this.buffer.subarray(0, this.length);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.length);\n }\n\n u8(value: number): void {\n this.reserve(1);\n this.viewBuffer.setUint8(this.length, value);\n this.length += 1;\n }\n\n u16(value: number): void {\n this.reserve(2);\n this.viewBuffer.setUint16(this.length, value, true);\n this.length += 2;\n }\n\n u32(value: number): void {\n this.reserve(4);\n this.viewBuffer.setUint32(this.length, value, true);\n this.length += 4;\n }\n\n u64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigUint64(this.length, value, true);\n this.length += 8;\n }\n\n i64(value: bigint): void {\n this.reserve(8);\n this.viewBuffer.setBigInt64(this.length, value, true);\n this.length += 8;\n }\n\n f64(value: number): void {\n this.reserve(8);\n this.viewBuffer.setFloat64(this.length, value === 0 ? 0 : value, true);\n this.length += 8;\n }\n\n stableId(value: EditableArtifactStableId): void {\n // Text is namespace || counter; canonical model bytes are counter LE then\n // namespace LE, matching Rust `StableId::to_le_bytes`.\n this.u64(BigInt(`0x${value.slice(16)}`));\n this.u64(BigInt(`0x${value.slice(0, 16)}`));\n }\n\n string(value: string, maximum: number): void {\n const bytes = strictUtf8(value, \"spreadsheet string\");\n if (bytes.byteLength > maximum)\n throw new RangeError(\"spreadsheet string exceeds its byte limit\");\n this.u32(bytes.byteLength);\n this.bytes(bytes);\n }\n\n cell(value: unknown): void {\n if (isFormulaCell(value)) {\n const cell = plainRecord(value, \"formula cell\");\n exactKeys(cell, [\"formula\"], \"formula cell\");\n if (typeof cell.formula !== \"string\" || cell.formula.length === 0) {\n throw new TypeError(\"formula source must be a nonempty string\");\n }\n this.u8(1);\n this.string(cell.formula, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n return;\n }\n this.u8(0);\n this.scalar(value);\n }\n\n private scalar(value: unknown): void {\n if (value === null) {\n this.u8(0);\n } else if (value === false) {\n this.u8(1);\n } else if (value === true) {\n this.u8(2);\n } else if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"spreadsheet numbers must be finite\");\n this.u8(3);\n this.f64(value);\n } else if (typeof value === \"string\") {\n this.u8(4);\n this.string(value, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n } else if (isDateValue(value)) {\n const date = plainRecord(value, \"date cell\");\n exactKeys(date, [\"date\"], \"date cell\");\n this.u8(6);\n this.i64(BigInt(canonicalDateMilliseconds(date.date)));\n } else if (isFormulaError(value)) {\n const error = plainRecord(value, \"formula error\");\n exactKeys(error, [\"error\"], \"formula error\");\n this.u8(5);\n const tag = STANDARD_ERROR_TAGS[error.error as keyof typeof STANDARD_ERROR_TAGS];\n if (tag !== undefined) {\n this.u8(tag);\n } else {\n this.u8(9);\n this.string(error.error as string, SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n }\n } else {\n throw new TypeError(\"spreadsheet cell has an unsupported value shape\");\n }\n }\n\n bytes(value: Uint8Array): void {\n this.reserve(value.byteLength);\n this.buffer.set(value, this.length);\n this.length += value.byteLength;\n }\n\n private reserve(additional: number): void {\n const needed = this.length + additional;\n if (!Number.isSafeInteger(needed) || needed > this.maximum) {\n throw new RangeError(\"spreadsheet command envelope exceeds its byte limit\");\n }\n if (needed <= this.buffer.byteLength) return;\n let size = Math.max(1, this.buffer.byteLength);\n while (size < needed) size = Math.min(this.maximum, size * 2);\n const next = new Uint8Array(size);\n next.set(this.buffer.subarray(0, this.length));\n this.buffer = next;\n this.viewBuffer = new DataView(next.buffer);\n }\n}\n\nclass BinaryReader {\n private offset = 0;\n\n constructor(private readonly input: Uint8Array) {}\n\n u8(): number {\n return this.bytes(1)[0]!;\n }\n\n u16(): number {\n const bytes = this.bytes(2);\n return bytes[0]! | (bytes[1]! << 8);\n }\n\n u32(): number {\n const bytes = this.bytes(4);\n return bytes[0]! + bytes[1]! * 2 ** 8 + bytes[2]! * 2 ** 16 + bytes[3]! * 2 ** 24;\n }\n\n u64(): bigint {\n const bytes = this.bytes(8);\n let value = 0n;\n for (let index = 0; index < 8; index += 1) {\n value |= BigInt(bytes[index]!) << BigInt(index * 8);\n }\n return value;\n }\n\n i64(): bigint {\n const bytes = this.bytes(8);\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getBigInt64(0, true);\n }\n\n f64(): number {\n const bytes = this.bytes(8);\n const value = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getFloat64(\n 0,\n true,\n );\n if (!Number.isFinite(value)) throw new TypeError(\"spreadsheet numbers must be finite\");\n if (Object.is(value, -0)) {\n throw new TypeError(\"spreadsheet numbers must encode zero with a positive sign\");\n }\n return value;\n }\n\n sheetObjectId(): EditableArtifactStableId {\n return sheetObjectId(this.stableIdText(), \"sheet id\");\n }\n\n genericStableId(): EditableArtifactStableId {\n return genericStableId(this.stableIdText(), \"stable id\");\n }\n\n string(maximum: number): string {\n const length = this.u32();\n if (length > maximum) throw new RangeError(\"spreadsheet string exceeds its byte limit\");\n return textDecoder.decode(this.bytes(length));\n }\n\n cell(): SpreadsheetCellInput {\n const formulaTag = this.u8();\n if (formulaTag > 1) throw new TypeError(\"spreadsheet formula presence tag is invalid\");\n if (formulaTag === 1) {\n return Object.freeze({\n formula: this.nonemptyFormula(this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES)),\n });\n }\n return this.scalar();\n }\n\n done(message: string): void {\n if (this.offset !== this.input.byteLength) throw new TypeError(message);\n }\n\n bytes(length: number): Uint8Array {\n const end = this.offset + length;\n if (!Number.isSafeInteger(length) || length < 0 || end > this.input.byteLength) {\n throw new TypeError(\"truncated spreadsheet command envelope\");\n }\n const result = this.input.subarray(this.offset, end);\n this.offset = end;\n return result;\n }\n\n private stableIdText(): string {\n const counter = this.u64().toString(16).padStart(16, \"0\");\n const namespace = this.u64().toString(16).padStart(16, \"0\");\n return `${namespace}${counter}`;\n }\n\n private nonemptyFormula(value: string): string {\n if (value.length === 0) throw new TypeError(\"formula source must not be empty\");\n return value;\n }\n\n private scalar(): SpreadsheetCellScalar {\n switch (this.u8()) {\n case 0:\n return null;\n case 1:\n return false;\n case 2:\n return true;\n case 3:\n return this.f64();\n case 4:\n return this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES);\n case 5: {\n const tag = this.u8();\n if (tag <= 8) return Object.freeze({ error: STANDARD_ERRORS[tag]! });\n if (tag === 9) {\n return Object.freeze({\n error: this.string(SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES),\n });\n }\n throw new TypeError(\"spreadsheet formula error tag is invalid\");\n }\n case 6:\n return Object.freeze({\n date: canonicalSpreadsheetDateFromMilliseconds(this.i64()),\n });\n default:\n throw new TypeError(\"spreadsheet scalar tag is invalid\");\n }\n }\n}\n\nfunction isFormulaCell(value: unknown): value is SpreadsheetFormulaCell {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"formula\")\n );\n}\n\nfunction isFormulaError(value: unknown): value is SpreadsheetFormulaError {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"error\")\n );\n}\n\nfunction isDateValue(value: unknown): value is SpreadsheetDateValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.hasOwn(value, \"date\")\n );\n}\n\nfunction canonicalDateMilliseconds(value: unknown): number {\n return canonicalSpreadsheetDateMilliseconds(value);\n}\n"],"mappings":"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","names":[]}
|