@ttt-productions/ttt-core 0.79.111 → 0.79.112
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.
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { resourceKeyHash } from './resource-keys.js';
|
|
2
2
|
import type { TakeItDownFieldCode, TakeItDownRequesterRole, TargetLocatorV1, TargetLocatorSummaryV1 } from '../doc-schemas/safety/foundation.js';
|
|
3
|
+
import type { TakeItDownValidityDecisionResult } from '../doc-schemas/ncii/requests.js';
|
|
3
4
|
export declare const sha256Hex: typeof resourceKeyHash;
|
|
4
5
|
export declare function tempHoldId(requestId: string): string;
|
|
5
6
|
export declare function firstSubmissionId(requestId: string): string;
|
|
6
7
|
export declare function intakeActionId(requestId: string): string;
|
|
8
|
+
export declare function nciiCaseIdForRequest(requestId: string): string;
|
|
9
|
+
export declare function validityDecisionId(requestId: string, result: TakeItDownValidityDecisionResult, decidedByUid: string, sequence: number): string;
|
|
10
|
+
export declare function validityActionId(requestId: string, result: TakeItDownValidityDecisionResult, sequence: number): string;
|
|
7
11
|
export declare function normalizedTargetKey(locator: TargetLocatorV1): string;
|
|
8
12
|
export declare function normalizeExternalUrl(raw: string): string;
|
|
9
13
|
export declare function deterministicRequestId(idempotencyKey: string, targetKey: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncii-intake-derivations.d.ts","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"ncii-intake-derivations.d.ts","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AAExF,eAAO,MAAM,SAAS,wBAAkB,CAAC;AAQzC,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gCAAgC,EACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gCAAgC,EACxC,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgDpE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,aAAa,EAAE,uBAAuB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACpD,GAAG,MAAM,CAKT;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAuChE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,OAAO,GACzB,sBAAsB,CAMxB;AAgBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEpE"}
|
|
@@ -13,6 +13,15 @@ export function firstSubmissionId(requestId) {
|
|
|
13
13
|
export function intakeActionId(requestId) {
|
|
14
14
|
return sha256Hex(`takeItDownAction:v1:intakeReceived:${requestId}`);
|
|
15
15
|
}
|
|
16
|
+
export function nciiCaseIdForRequest(requestId) {
|
|
17
|
+
return sha256Hex(`nciiCase:v1:${requestId}`);
|
|
18
|
+
}
|
|
19
|
+
export function validityDecisionId(requestId, result, decidedByUid, sequence) {
|
|
20
|
+
return sha256Hex(`takeItDownValidityDecision:v1:${requestId}:${result}:${decidedByUid}:${sequence}`);
|
|
21
|
+
}
|
|
22
|
+
export function validityActionId(requestId, result, sequence) {
|
|
23
|
+
return sha256Hex(`takeItDownAction:v1:validityDecided:${requestId}:${result}:${sequence}`);
|
|
24
|
+
}
|
|
16
25
|
export function normalizedTargetKey(locator) {
|
|
17
26
|
const k = locator.kind;
|
|
18
27
|
switch (locator.kind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncii-intake-derivations.js","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"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","sourcesContent":["import { resourceKeyHash } from './resource-keys.js';\nimport type {\n TakeItDownFieldCode,\n TakeItDownRequesterRole,\n TargetLocatorV1,\n TargetLocatorSummaryV1,\n} from '../doc-schemas/safety/foundation.js';\n\nexport const sha256Hex = resourceKeyHash;\n\n// Cannot appear in any joined id, url, or field.\nconst SEP = '\\x1f';\n\n// Bumping it re-keys every request doc id.\nconst REQUEST_ID_VERSION = 'takeItDownRequest:v1';\n\nexport function tempHoldId(requestId: string): string {\n return sha256Hex(`nciiTemporaryHold:v1:${requestId}`);\n}\n\nexport function firstSubmissionId(requestId: string): string {\n return sha256Hex(`takeItDownSubmission:v1:${requestId}:0`);\n}\n\nexport function intakeActionId(requestId: string): string {\n return sha256Hex(`takeItDownAction:v1:intakeReceived:${requestId}`);\n}\n\nexport function normalizedTargetKey(locator: TargetLocatorV1): string {\n const k = locator.kind;\n switch (locator.kind) {\n case 'mediaAsset':\n return [k, locator.mediaAssetId].join(SEP);\n case 'hallItem':\n return [k, locator.hallItemId, locator.subItemId ?? ''].join(SEP);\n case 'squarePost':\n return [k, locator.postId].join(SEP);\n case 'profileImage':\n return [k, locator.profileUid].join(SEP);\n case 'username':\n return [k, locator.profileUid].join(SEP);\n case 'craftSkill':\n return [k, locator.profileUid, locator.craftSkillId].join(SEP);\n case 'commissionListing':\n return [k, locator.commissionListingId].join(SEP);\n case 'audition':\n return [k, locator.auditionId].join(SEP);\n case 'auditionEntry':\n return [k, locator.auditionId, locator.auditionEntryId].join(SEP);\n case 'guildInviteMessage':\n return [k, locator.channelId, locator.messageId].join(SEP);\n case 'conversationFile':\n return [\n k,\n locator.conversation.kind,\n locator.conversation.kind === 'guildInvite'\n ? locator.conversation.guildInviteId\n : locator.conversation.adminDispatchId,\n locator.conversationFileId,\n locator.mediaAssetId,\n ].join(SEP);\n case 'guildChatMessage':\n return [k, locator.channelId, locator.messageId].join(SEP);\n case 'commissionProposal':\n return [k, locator.commissionListingId, locator.commissionProposalId].join(SEP);\n case 'workProject':\n return [k, locator.workProjectId].join(SEP);\n case 'workAsset':\n return [k, locator.workProjectId, locator.workAssetId].join(SEP);\n case 'workRealm':\n return [k, locator.workRealmId].join(SEP);\n case 'url':\n return [k, normalizeExternalUrl(locator.url)].join(SEP);\n case 'additionalText':\n return [k, locator.textRef].join(SEP);\n }\n}\n\nexport function normalizeExternalUrl(raw: string): string {\n const trimmed = raw.trim();\n try {\n const u = new URL(trimmed);\n u.protocol = u.protocol.toLowerCase();\n u.hostname = u.hostname.toLowerCase();\n return u.toString();\n } catch {\n return trimmed.toLowerCase();\n }\n}\n\nexport function deterministicRequestId(idempotencyKey: string, targetKey: string): string {\n return sha256Hex(`${REQUEST_ID_VERSION}:${idempotencyKey}:${targetKey}`);\n}\n\nexport function deriveRequestReference(requestId: string): string {\n return sha256Hex(`takeItDownRequestRef:v1:${requestId}`).slice(0, 32);\n}\n\nexport function cumulativeSnapshotHash(args: {\n requesterRole: TakeItDownRequesterRole;\n targetKey: string;\n suppliedFieldCodes: readonly TakeItDownFieldCode[];\n}): string {\n const sorted = [...args.suppliedFieldCodes].sort();\n return sha256Hex(\n ['takeItDownSnapshot:v1', args.requesterRole, args.targetKey, sorted.join(',')].join(SEP),\n );\n}\n\nexport function surfaceLabelFor(locator: TargetLocatorV1): string {\n switch (locator.kind) {\n case 'mediaAsset':\n return 'Media item';\n case 'hallItem':\n return 'Hall library item';\n case 'squarePost':\n return 'Square Streetz post';\n case 'profileImage':\n return 'Profile image';\n case 'username':\n return 'Username';\n case 'craftSkill':\n return 'Craft skill';\n case 'commissionListing':\n return 'Commission listing';\n case 'audition':\n return 'Audition';\n case 'auditionEntry':\n return 'Audition entry';\n case 'guildInviteMessage':\n return 'Guild invite message';\n case 'conversationFile':\n return 'Conversation file';\n case 'guildChatMessage':\n return 'Guild chat message';\n case 'commissionProposal':\n return 'Commission proposal';\n case 'workProject':\n return 'Work project';\n case 'workAsset':\n return 'Work file';\n case 'workRealm':\n return 'Work realm';\n case 'url':\n return 'External link';\n case 'additionalText':\n return 'Described content';\n }\n}\n\nexport function targetLocatorSummary(\n locator: TargetLocatorV1,\n hasResolvedTarget: boolean,\n): TargetLocatorSummaryV1 {\n return {\n kind: locator.kind,\n surfaceLabel: surfaceLabelFor(locator),\n hasResolvedTarget,\n };\n}\n\nconst TTT_HOSTED_KINDS: ReadonlySet<TargetLocatorV1['kind']> = new Set([\n 'mediaAsset',\n 'hallItem',\n 'squarePost',\n 'profileImage',\n 'username',\n 'craftSkill',\n 'commissionListing',\n 'audition',\n 'auditionEntry',\n 'guildInviteMessage',\n 'conversationFile',\n]);\n\nexport function isTttHostedLocator(locator: TargetLocatorV1): boolean {\n return TTT_HOSTED_KINDS.has(locator.kind);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ncii-intake-derivations.js","sourceRoot":"","sources":["../../src/safety/ncii-intake-derivations.ts"],"names":[],"mappings":"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","sourcesContent":["import { resourceKeyHash } from './resource-keys.js';\nimport type {\n TakeItDownFieldCode,\n TakeItDownRequesterRole,\n TargetLocatorV1,\n TargetLocatorSummaryV1,\n} from '../doc-schemas/safety/foundation.js';\nimport type { TakeItDownValidityDecisionResult } from '../doc-schemas/ncii/requests.js';\n\nexport const sha256Hex = resourceKeyHash;\n\n// Cannot appear in any joined id, url, or field.\nconst SEP = '\\x1f';\n\n// Bumping it re-keys every request doc id.\nconst REQUEST_ID_VERSION = 'takeItDownRequest:v1';\n\nexport function tempHoldId(requestId: string): string {\n return sha256Hex(`nciiTemporaryHold:v1:${requestId}`);\n}\n\nexport function firstSubmissionId(requestId: string): string {\n return sha256Hex(`takeItDownSubmission:v1:${requestId}:0`);\n}\n\nexport function intakeActionId(requestId: string): string {\n return sha256Hex(`takeItDownAction:v1:intakeReceived:${requestId}`);\n}\n\nexport function nciiCaseIdForRequest(requestId: string): string {\n return sha256Hex(`nciiCase:v1:${requestId}`);\n}\n\nexport function validityDecisionId(\n requestId: string,\n result: TakeItDownValidityDecisionResult,\n decidedByUid: string,\n sequence: number,\n): string {\n return sha256Hex(\n `takeItDownValidityDecision:v1:${requestId}:${result}:${decidedByUid}:${sequence}`,\n );\n}\n\nexport function validityActionId(\n requestId: string,\n result: TakeItDownValidityDecisionResult,\n sequence: number,\n): string {\n return sha256Hex(`takeItDownAction:v1:validityDecided:${requestId}:${result}:${sequence}`);\n}\n\nexport function normalizedTargetKey(locator: TargetLocatorV1): string {\n const k = locator.kind;\n switch (locator.kind) {\n case 'mediaAsset':\n return [k, locator.mediaAssetId].join(SEP);\n case 'hallItem':\n return [k, locator.hallItemId, locator.subItemId ?? ''].join(SEP);\n case 'squarePost':\n return [k, locator.postId].join(SEP);\n case 'profileImage':\n return [k, locator.profileUid].join(SEP);\n case 'username':\n return [k, locator.profileUid].join(SEP);\n case 'craftSkill':\n return [k, locator.profileUid, locator.craftSkillId].join(SEP);\n case 'commissionListing':\n return [k, locator.commissionListingId].join(SEP);\n case 'audition':\n return [k, locator.auditionId].join(SEP);\n case 'auditionEntry':\n return [k, locator.auditionId, locator.auditionEntryId].join(SEP);\n case 'guildInviteMessage':\n return [k, locator.channelId, locator.messageId].join(SEP);\n case 'conversationFile':\n return [\n k,\n locator.conversation.kind,\n locator.conversation.kind === 'guildInvite'\n ? locator.conversation.guildInviteId\n : locator.conversation.adminDispatchId,\n locator.conversationFileId,\n locator.mediaAssetId,\n ].join(SEP);\n case 'guildChatMessage':\n return [k, locator.channelId, locator.messageId].join(SEP);\n case 'commissionProposal':\n return [k, locator.commissionListingId, locator.commissionProposalId].join(SEP);\n case 'workProject':\n return [k, locator.workProjectId].join(SEP);\n case 'workAsset':\n return [k, locator.workProjectId, locator.workAssetId].join(SEP);\n case 'workRealm':\n return [k, locator.workRealmId].join(SEP);\n case 'url':\n return [k, normalizeExternalUrl(locator.url)].join(SEP);\n case 'additionalText':\n return [k, locator.textRef].join(SEP);\n }\n}\n\nexport function normalizeExternalUrl(raw: string): string {\n const trimmed = raw.trim();\n try {\n const u = new URL(trimmed);\n u.protocol = u.protocol.toLowerCase();\n u.hostname = u.hostname.toLowerCase();\n return u.toString();\n } catch {\n return trimmed.toLowerCase();\n }\n}\n\nexport function deterministicRequestId(idempotencyKey: string, targetKey: string): string {\n return sha256Hex(`${REQUEST_ID_VERSION}:${idempotencyKey}:${targetKey}`);\n}\n\nexport function deriveRequestReference(requestId: string): string {\n return sha256Hex(`takeItDownRequestRef:v1:${requestId}`).slice(0, 32);\n}\n\nexport function cumulativeSnapshotHash(args: {\n requesterRole: TakeItDownRequesterRole;\n targetKey: string;\n suppliedFieldCodes: readonly TakeItDownFieldCode[];\n}): string {\n const sorted = [...args.suppliedFieldCodes].sort();\n return sha256Hex(\n ['takeItDownSnapshot:v1', args.requesterRole, args.targetKey, sorted.join(',')].join(SEP),\n );\n}\n\nexport function surfaceLabelFor(locator: TargetLocatorV1): string {\n switch (locator.kind) {\n case 'mediaAsset':\n return 'Media item';\n case 'hallItem':\n return 'Hall library item';\n case 'squarePost':\n return 'Square Streetz post';\n case 'profileImage':\n return 'Profile image';\n case 'username':\n return 'Username';\n case 'craftSkill':\n return 'Craft skill';\n case 'commissionListing':\n return 'Commission listing';\n case 'audition':\n return 'Audition';\n case 'auditionEntry':\n return 'Audition entry';\n case 'guildInviteMessage':\n return 'Guild invite message';\n case 'conversationFile':\n return 'Conversation file';\n case 'guildChatMessage':\n return 'Guild chat message';\n case 'commissionProposal':\n return 'Commission proposal';\n case 'workProject':\n return 'Work project';\n case 'workAsset':\n return 'Work file';\n case 'workRealm':\n return 'Work realm';\n case 'url':\n return 'External link';\n case 'additionalText':\n return 'Described content';\n }\n}\n\nexport function targetLocatorSummary(\n locator: TargetLocatorV1,\n hasResolvedTarget: boolean,\n): TargetLocatorSummaryV1 {\n return {\n kind: locator.kind,\n surfaceLabel: surfaceLabelFor(locator),\n hasResolvedTarget,\n };\n}\n\nconst TTT_HOSTED_KINDS: ReadonlySet<TargetLocatorV1['kind']> = new Set([\n 'mediaAsset',\n 'hallItem',\n 'squarePost',\n 'profileImage',\n 'username',\n 'craftSkill',\n 'commissionListing',\n 'audition',\n 'auditionEntry',\n 'guildInviteMessage',\n 'conversationFile',\n]);\n\nexport function isTttHostedLocator(locator: TargetLocatorV1): boolean {\n return TTT_HOSTED_KINDS.has(locator.kind);\n}\n"]}
|