@tutti-os/tutti-ops-cli 0.1.9 → 0.1.10
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 +1 -1
- package/dist/operations/registry.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -130,4 +130,4 @@ Legacy App commands retain their original success output and flags. Legacy
|
|
|
130
130
|
`--brand` does not enforce brand isolation. Use canonical entries for schema,
|
|
131
131
|
dry-run, confirmation, structured output and workflow request history.
|
|
132
132
|
|
|
133
|
-
渠道归因:`tutti-ops acquisition summary`、`acquisition bindings list --traffic-content-id campus-test`、`acquisition users get --user-id example-user
|
|
133
|
+
渠道归因:`tutti-ops acquisition summary`、`acquisition bindings list --traffic-content-id campus-test`、`acquisition users get --user-id example-user`。需要显式的 acquisition:read Token,且创建者须仍是当前管理员。见 [渠道归因查询](docs/acquisition-reporting.md)。
|
|
@@ -47,7 +47,7 @@ api('auth status', 'read', 'POST', `${A}/admin/auth/token/inspect`, object({ met
|
|
|
47
47
|
const acquisitionCode = { type: 'string', pattern: '^[a-z0-9_-]{1,64}$' };
|
|
48
48
|
const acquisitionQuery = object({ trafficContentId: acquisitionCode, startAt: s, endAt: s, pageSize: { type: 'integer', minimum: 1, maximum: 200 }, pageToken: { type: 'string', pattern: '^[a-f0-9]{64}$' } });
|
|
49
49
|
const acquisitionPage = { location: 'params', kind: 'cursor', key: 'pageToken', size: 'pageSize', items: 'items', next: 'nextPageToken' };
|
|
50
|
-
const acquisitionOptions = { scope: 'acquisition', permission: 'acquisition
|
|
50
|
+
const acquisitionOptions = { scope: 'acquisition', permission: 'acquisition:read', source: 'tsh-admin-server acquisition_attribution/v1 API' };
|
|
51
51
|
api('acquisition summary', 'read', 'GET', `${A}/admin/acquisition-attributions/summary`, undefined, acquisitionQuery, { ...acquisitionOptions, pagination: acquisitionPage, description: 'Count first successful user bindings by channel; includes existing accounts' });
|
|
52
52
|
api('acquisition bindings list', 'read', 'GET', `${A}/admin/acquisition-attributions/bindings`, undefined, { ...acquisitionQuery, required: ['trafficContentId'] }, { ...acquisitionOptions, pagination: acquisitionPage, description: 'List immutable user bindings for one exact TC channel' });
|
|
53
53
|
api('acquisition users get', 'read', 'GET', `${A}/admin/acquisition-attributions/users/{userId}`, undefined, object({ userId: { type: 'string', pattern: '^[A-Za-z0-9_.@:-]{1,191}$' } }, ['userId']), { ...acquisitionOptions, description: 'Look up one user channel binding; bound=false does not establish account existence' });
|