@civitai/app-sdk 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -0
- package/dist/scopes/index.d.ts.map +1 -1
- package/dist/scopes/index.js +5 -2
- package/dist/scopes/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -28,6 +28,105 @@ import { defineBlock, BLOCK_SCOPES } from '@civitai/app-sdk/blocks';
|
|
|
28
28
|
import manifestSchema from '@civitai/app-sdk/schemas/app-block/v1.json' with { type: 'json' };
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
## App Blocks contract (`@civitai/app-sdk/blocks`)
|
|
32
|
+
|
|
33
|
+
> Building an **App Block** (an iframe-embedded UI on a civitai.com page)? This
|
|
34
|
+
> subpath is the framework-agnostic contract — manifest types, scope strings,
|
|
35
|
+
> the `postMessage` protocol, and the `defineBlock` validator. The React hooks +
|
|
36
|
+
> transport that consume it live in
|
|
37
|
+
> [`@civitai/blocks-react`](https://www.npmjs.com/package/@civitai/blocks-react).
|
|
38
|
+
> Start from the runnable [examples](https://github.com/civitai/civitai-app-starters/tree/main/starters/examples).
|
|
39
|
+
>
|
|
40
|
+
> This is distinct from the OAuth flow above: a *block* runs inside civitai.com
|
|
41
|
+
> and gets a short-lived block-scoped JWT handed to it; an *app* (the OAuth
|
|
42
|
+
> starters) runs on your own domain and does the Authorization-Code dance.
|
|
43
|
+
|
|
44
|
+
### The transport / message contract
|
|
45
|
+
|
|
46
|
+
A block runs in a sandboxed iframe. The host (civitai.com) and the block speak
|
|
47
|
+
over `window.postMessage({ type, payload }, targetOrigin)`, discriminated by
|
|
48
|
+
`type`. The full union is exported:
|
|
49
|
+
|
|
50
|
+
- **parent → block**: `BLOCK_INIT`, `TOKEN_REFRESH`, `TOKEN_REFRESH_RESPONSE`,
|
|
51
|
+
`ESTIMATE_RESULT`, `WORKFLOW_SUBMITTED`, `WORKFLOW_STATUS`,
|
|
52
|
+
`BUZZ_PURCHASE_RESULT`, `CHECKPOINT_PICKER_RESULT`, `USER_CHECKPOINT_SET`,
|
|
53
|
+
`APP_STORAGE_*_RESULT`, `SUSPEND`, `RESUME` (`ParentToBlockMessage`).
|
|
54
|
+
- **block → parent**: `BLOCK_READY`, `BLOCK_ERROR`, `REQUEST_TOKEN`,
|
|
55
|
+
`RESIZE_IFRAME`, `SUBMIT_WORKFLOW`, `ESTIMATE_WORKFLOW`, `POLL_WORKFLOW`,
|
|
56
|
+
`OPEN_BUZZ_PURCHASE`, `OPEN_CHECKPOINT_PICKER`, `SET_USER_CHECKPOINT`,
|
|
57
|
+
`NAVIGATE`, `TRACK_EVENT`, `APP_STORAGE_*` (`BlockToParentMessage`).
|
|
58
|
+
|
|
59
|
+
`isMessage(data, 'BLOCK_INIT')` is a **discriminator-only** narrowing helper — it
|
|
60
|
+
checks `data.type`, NOT the payload shape. Anything crossing the iframe trust
|
|
61
|
+
boundary must be payload-validated at the boundary (the React transport does this
|
|
62
|
+
for you).
|
|
63
|
+
|
|
64
|
+
### `BLOCK_INIT` — the first message
|
|
65
|
+
|
|
66
|
+
The host waits for the iframe `load` event AND a minted token, then posts:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
interface BlockInitPayload {
|
|
70
|
+
blockInstanceId: string;
|
|
71
|
+
blockId: string;
|
|
72
|
+
appId: string; // the OauthClient (app) this block belongs to
|
|
73
|
+
token: WrappedToken; // { raw, scopes[], expiresAt (ISO), buzzBudget? }
|
|
74
|
+
context: BlockContext; // { slotId, … } — narrow to ModelSlotContext
|
|
75
|
+
settings: BlockSettings; // { publisherSettings, userSettings }
|
|
76
|
+
viewer: ViewerInfo | null; // null = anonymous
|
|
77
|
+
theme: 'light' | 'dark';
|
|
78
|
+
renderMode: 'iframe' | 'inline';
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`token.buzzBudget` is only present when the manifest declares `ai:write:budgeted`.
|
|
83
|
+
`expiresAt` is an ISO string on the wire; the React transport rehydrates it to a
|
|
84
|
+
`Date`.
|
|
85
|
+
|
|
86
|
+
### Primitives
|
|
87
|
+
|
|
88
|
+
| Export | What |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `defineBlock({ manifest })` | Validates a `BlockManifestV1` (subset of the server checks) and returns it. Call at module scope so authoring mistakes throw before mount. Throws `BlockManifestError` (has a `.field` dot-path). |
|
|
91
|
+
| `BLOCK_SCOPES` / `BLOCK_SCOPE_PATTERN` | The known block scope strings + the `domain:verb:target` regex. |
|
|
92
|
+
| `isMessage(data, type)` | Discriminator-only message narrowing (see above). |
|
|
93
|
+
| types | `BlockManifestV1`, `ManifestSettings` (+ field types), `BlockContext`, `ModelSlotContext`, `BlockCheckpointInfo`, `ShowcaseImage`, `BlockToken`, `WrappedToken`, `BlockSettings`, `ViewerInfo`, `Theme`, `WorkflowBody`, `BlockTextToImageParams`, `BlockWorkflowSnapshot`, `WorkflowStatus`, `BlockInitPayload`, `ParentToBlockMessage`, `BlockToParentMessage`. |
|
|
94
|
+
|
|
95
|
+
### `defineBlock` validator rules
|
|
96
|
+
|
|
97
|
+
Mirrors a strict subset of the civitai/civitai server gate. It throws on:
|
|
98
|
+
|
|
99
|
+
- A missing **required** field: `$schema`, `appId`, `blockId`, `version`, `name`,
|
|
100
|
+
`type`, `targets`, `scopes`, `iframe`, `contentRating`, `minApiVersion`.
|
|
101
|
+
- `$schema` ≠ `https://civitai.com/schemas/app-block/v1.json`.
|
|
102
|
+
- `blockId` not matching `/^[a-z0-9-]{3,64}$/`; `version` not semver; `name` > 80 chars.
|
|
103
|
+
- `type` not `block` | `embed`; `contentRating` not `g|pg|pg13|r|x`.
|
|
104
|
+
- **Empty `scopes`** (must be a non-empty array) or any scope not matching
|
|
105
|
+
`domain:verb:target` lowercase — PascalCase like `ModelsReadSelf` gets a
|
|
106
|
+
pointed error.
|
|
107
|
+
- **Empty `targets`**, or a target with a non-string `slotId` / non-integer `priority`.
|
|
108
|
+
- `iframe.src` not https (http only for `localhost`/`127.0.0.1`/`[::1]`/`*.localhost`);
|
|
109
|
+
a banned sandbox token (`allow-same-origin`, any `allow-top-navigation*`);
|
|
110
|
+
non-positive integer `minHeight`; bad `maxHeight`; non-boolean `resizable`.
|
|
111
|
+
- `settings` with a bad key (must be `snake_case`), > 32 fields, or a field
|
|
112
|
+
missing/mis-typed `scope` / `type` / `label` / `description`.
|
|
113
|
+
|
|
114
|
+
> The validator does **not** check that `iframe.src` hostname equals
|
|
115
|
+
> `<blockId>.<APPS_DOMAIN>` or that the path is root — those are enforced
|
|
116
|
+
> **server-side** at submit time (gotcha #33). Keep `iframe.src` =
|
|
117
|
+
> `https://<blockId>.civit.ai/` (root, no path prefix) and your Vite `base: '/'`.
|
|
118
|
+
|
|
119
|
+
### Version compatibility
|
|
120
|
+
|
|
121
|
+
| `@civitai/app-sdk` | adds (blocks surface) |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `0.7.0` | `CANCEL_WORKFLOW` / `WORKFLOW_CANCELED` messages (real cancel, gotcha #51) |
|
|
124
|
+
| `0.6.0` | `APP_STORAGE_*` messages, `ManifestSettings` types |
|
|
125
|
+
| `0.5.0` | settings types, earlier message set |
|
|
126
|
+
|
|
127
|
+
Pair with `@civitai/blocks-react` at the matching minor (it peer-depends on this
|
|
128
|
+
contract). See the blocks-react README's compatibility table.
|
|
129
|
+
|
|
31
130
|
## Minimal usage example
|
|
32
131
|
|
|
33
132
|
```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDb,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BnD,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDb,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BnD,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;CAmCpB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEjE,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CASlE;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAI1E;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAO3E"}
|
package/dist/scopes/index.js
CHANGED
|
@@ -59,7 +59,7 @@ export const TokenScope = {
|
|
|
59
59
|
Full: (1 << 25) - 1,
|
|
60
60
|
};
|
|
61
61
|
export const tokenScopeLabels = {
|
|
62
|
-
[TokenScope.UserRead]: 'Read profile &
|
|
62
|
+
[TokenScope.UserRead]: 'Read profile, settings & email',
|
|
63
63
|
[TokenScope.UserWrite]: 'Update profile & settings',
|
|
64
64
|
[TokenScope.ModelsRead]: 'Browse & download models',
|
|
65
65
|
[TokenScope.ModelsWrite]: 'Upload & edit models',
|
|
@@ -112,7 +112,10 @@ export const TokenScopePresets = {
|
|
|
112
112
|
TokenScope.BountiesWrite |
|
|
113
113
|
TokenScope.CollectionsWrite |
|
|
114
114
|
TokenScope.SocialWrite,
|
|
115
|
-
AIServices: TokenScope.
|
|
115
|
+
AIServices: TokenScope.UserRead |
|
|
116
|
+
TokenScope.AIServicesWrite |
|
|
117
|
+
TokenScope.AIServicesRead |
|
|
118
|
+
TokenScope.BuzzRead,
|
|
116
119
|
Full: TokenScope.Full,
|
|
117
120
|
};
|
|
118
121
|
/** True if the given bitmask grants the named scope. */
|
package/dist/scopes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,gDAAgD;AAChD,mEAAmE;AACnE,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,sCAAsC;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,CAAC;IAEP,oBAAoB;IACpB,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,qBAAqB;IACrB,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,WAAW,EAAE,CAAC,IAAI,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,CAAC;IAEpB,wCAAwC;IACxC,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,UAAU,EAAE,CAAC,IAAI,CAAC;IAClB,WAAW,EAAE,CAAC,IAAI,CAAC;IAEnB,WAAW;IACX,YAAY,EAAE,CAAC,IAAI,CAAC;IACpB,aAAa,EAAE,CAAC,IAAI,CAAC;IACrB,cAAc,EAAE,CAAC,IAAI,EAAE;IAEvB,oEAAoE;IACpE,YAAY,EAAE,CAAC,IAAI,EAAE;IACrB,aAAa,EAAE,CAAC,IAAI,EAAE;IACtB,cAAc,EAAE,CAAC,IAAI,EAAE;IAEvB,0EAA0E;IAC1E,4DAA4D;IAC5D,cAAc,EAAE,CAAC,IAAI,EAAE;IACvB,eAAe,EAAE,CAAC,IAAI,EAAE;IAExB,kBAAkB;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE;IAEjB,6BAA6B;IAC7B,eAAe,EAAE,CAAC,IAAI,EAAE;IACxB,gBAAgB,EAAE,CAAC,IAAI,EAAE;IACzB,WAAW,EAAE,CAAC,IAAI,EAAE;IACpB,SAAS,EAAE,CAAC,IAAI,EAAE;IAElB,gBAAgB;IAChB,iBAAiB,EAAE,CAAC,IAAI,EAAE;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE;IAE3B,QAAQ;IACR,SAAS,EAAE,CAAC,IAAI,EAAE;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE;IAEnB,aAAa;IACb,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;CACX,CAAC;AAKX,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED